<?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>154867</bug_id>
          
          <creation_ts>2016-03-01 11:15:53 -0800</creation_ts>
          <short_desc>WebRTC: Implement MediaEndpointPeerConnection::createOffer()</short_desc>
          <delta_ts>2016-03-07 13:36:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169502</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-01 11:15:53 -0800</bug_when>
    <thetext>Add real implementation of MediaEndpointPeerConnection::createOffer() and test it with a mock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169511</commentid>
    <comment_count>1</comment_count>
      <attachid>272580</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-01 11:36:56 -0800</bug_when>
    <thetext>Created attachment 272580
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169532</commentid>
    <comment_count>2</comment_count>
      <attachid>272580</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-01 12:28:41 -0800</bug_when>
    <thetext>Comment on attachment 272580
Proposed patch

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

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:476
&gt; +        printf(&quot;SDPProcessor::callScript(): %s() threw\n&quot;, functionName.ascii().data());

This should be a LOG_ERROR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169877</commentid>
    <comment_count>3</comment_count>
      <attachid>272580</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-03-02 11:30:12 -0800</bug_when>
    <thetext>Comment on attachment 272580
Proposed patch

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

&gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:19
&gt; +                debug(&quot;This test can not be run without the testRunner&quot;);
&gt; +                finishJSTest();

Nit: add this might as well return to avoid a bunch of script errors

&gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:76
&gt; +                    var mline;
&gt; +
&gt; +                    if (mline = match(line, regexp.mline)) {

Nit: this local variable isn&apos;t used.

&gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:82
&gt; +                        var msidsemantic;

Ditto.

&gt; Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:61
&gt; +    static Ref&lt;WrappedSessionDescriptionPromise&gt; create(SessionDescriptionPromise&amp;&amp; promise)
&gt; +    {

Nit: this brace should be on the previous line.

&gt; Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:158
&gt; +        mediaDescription-&gt;setMediaStreamId(sender-&gt;mediaStreamIds()[0]);
&gt; +        mediaDescription-&gt;setMediaStreamTrackId(track-&gt;id());
&gt; +        mediaDescription-&gt;setType(track-&gt;kind());
&gt; +        mediaDescription-&gt;setPort(9);
&gt; +        mediaDescription-&gt;setAddress(&quot;0.0.0.0&quot;);
&gt; +        mediaDescription-&gt;setMode(&quot;sendrecv&quot;);
&gt; +        mediaDescription-&gt;setPayloads(track-&gt;kind() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads);
&gt; +        mediaDescription-&gt;setRtcpMux(true);
&gt; +        mediaDescription-&gt;setDtlsSetup(&quot;actpass&quot;);
&gt; +        mediaDescription-&gt;setDtlsFingerprintHashFunction(m_dtlsFingerprintFunction);
&gt; +        mediaDescription-&gt;setDtlsFingerprint(m_dtlsFingerprint);
&gt; +        mediaDescription-&gt;setCname(m_cname);
&gt; +        mediaDescription-&gt;addSsrc(cryptographicallyRandomNumber());
&gt; +        mediaDescription-&gt;setIceUfrag(m_iceUfrag);
&gt; +        mediaDescription-&gt;setIcePassword(m_icePassword);

Nit: This is a lot of setup Might it make sense to add a PeerMediaDescription constructor that takes a MediaStreamTrack (or maybe RtpSender)? If &quot;0.0.0.0&quot; the default address, can you set it in the constructor?

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:384
&gt; +    if (!callScript(&quot;generate&quot;, configurationToJSON(configuration), sdpString))
&gt; +        return Result::InternalError;

Nit: It could be helpful to log this error.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:401
&gt; +    if (!callScript(&quot;parse&quot;, sdp, scriptOutput))
&gt; +        return Result::InternalError;
&gt; +
&gt; +    if (scriptOutput == &quot;ParseError&quot;)
&gt; +        return Result::ParseError;
&gt; +
&gt; +    RefPtr&lt;MediaEndpointSessionConfiguration&gt; configuration = configurationFromJSON(scriptOutput);
&gt; +    if (!configuration)
&gt; +        return Result::InternalError;

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:411
&gt; +    if (!callScript(&quot;generateCandidateLine&quot;, iceCandidateToJSON(candidate), candidateLine))
&gt; +        return Result::InternalError;

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:428
&gt; +    if (!callScript(&quot;parseCandidateLine&quot;, candidateLine, scriptOutput))
&gt; +        return Result::InternalError;
&gt; +
&gt; +    if (scriptOutput == &quot;ParseError&quot;)
&gt; +        return Result::ParseError;
&gt; +
&gt; +    RefPtr&lt;IceCandidate&gt; candidate = iceCandidateFromJSON(scriptOutput);
&gt; +    if (!candidate)
&gt; +        return Result::InternalError;

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:469
&gt; +        if (exec-&gt;hadException()) {
&gt; +            exec-&gt;clearException();
&gt; +            return false;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    JSC::JSValue functionValue = globalObject-&gt;get(exec, JSC::Identifier::fromString(exec, functionName));
&gt; +    if (!functionValue.isFunction())
&gt; +        return false;
&gt; +
&gt; +    JSC::JSObject* function = functionValue.toObject(exec);
&gt; +    JSC::CallData callData;
&gt; +    JSC::CallType callType = function-&gt;methodTable()-&gt;getCallData(function, callData);
&gt; +    if (callType == JSC::CallTypeNone)
&gt; +        return false;

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:482
&gt; +    if (!result.isString())
&gt; +        return false;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169933</commentid>
    <comment_count>4</comment_count>
      <attachid>272685</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-02 14:10:56 -0800</bug_when>
    <thetext>Created attachment 272685
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169934</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-02 14:13:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 272580 [details]
&gt; Proposed patch

Thanks for reviewing. Find answers inline.
 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272580&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:19
&gt; &gt; +                debug(&quot;This test can not be run without the testRunner&quot;);
&gt; &gt; +                finishJSTest();
&gt; 
&gt; Nit: add this might as well return to avoid a bunch of script errors

That&apos;s pretty much the behavior right now since the getUserMedia() request will never resolve. We could wrap everything in a function and return as well.

&gt; &gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:76
&gt; &gt; +                    var mline;
&gt; &gt; +
&gt; &gt; +                    if (mline = match(line, regexp.mline)) {
&gt; 
&gt; Nit: this local variable isn&apos;t used.

Fixed.

&gt; &gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:82
&gt; &gt; +                        var msidsemantic;
&gt; 
&gt; Ditto.

Fixed.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:61
&gt; &gt; +    static Ref&lt;WrappedSessionDescriptionPromise&gt; create(SessionDescriptionPromise&amp;&amp; promise)
&gt; &gt; +    {
&gt; 
&gt; Nit: this brace should be on the previous line.

The style checker complains in that case.

&gt; &gt; Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:158
&gt; &gt; +        mediaDescription-&gt;setMediaStreamId(sender-&gt;mediaStreamIds()[0]);
&gt; &gt; +        mediaDescription-&gt;setMediaStreamTrackId(track-&gt;id());
&gt; &gt; +        mediaDescription-&gt;setType(track-&gt;kind());
&gt; &gt; +        mediaDescription-&gt;setPort(9);
&gt; &gt; +        mediaDescription-&gt;setAddress(&quot;0.0.0.0&quot;);
&gt; &gt; +        mediaDescription-&gt;setMode(&quot;sendrecv&quot;);
&gt; &gt; +        mediaDescription-&gt;setPayloads(track-&gt;kind() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads);
&gt; &gt; +        mediaDescription-&gt;setRtcpMux(true);
&gt; &gt; +        mediaDescription-&gt;setDtlsSetup(&quot;actpass&quot;);
&gt; &gt; +        mediaDescription-&gt;setDtlsFingerprintHashFunction(m_dtlsFingerprintFunction);
&gt; &gt; +        mediaDescription-&gt;setDtlsFingerprint(m_dtlsFingerprint);
&gt; &gt; +        mediaDescription-&gt;setCname(m_cname);
&gt; &gt; +        mediaDescription-&gt;addSsrc(cryptographicallyRandomNumber());
&gt; &gt; +        mediaDescription-&gt;setIceUfrag(m_iceUfrag);
&gt; &gt; +        mediaDescription-&gt;setIcePassword(m_icePassword);
&gt; 
&gt; Nit: This is a lot of setup Might it make sense to add a
&gt; PeerMediaDescription constructor that takes a MediaStreamTrack (or maybe
&gt; RtpSender)? If &quot;0.0.0.0&quot; the default address, can you set it in the
&gt; constructor?

My intention with the setters was to avoid having expressions like &apos;cryptographicallyRandomNumber()&apos; in the middle of a long constructor argument list since it&apos;s not obvious that it&apos;s an SSRC. But as it turned out, most of the values set are stored in variables with fairly descriptive names. :)

I made all constant initializations here defaults when a PeerMediaDescription is constructed as you suggested with address. That got rid of five setter-calls. Is that enough or should we go for a constructor?

&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:384
&gt; &gt; +    if (!callScript(&quot;generate&quot;, configurationToJSON(configuration), sdpString))
&gt; &gt; +        return Result::InternalError;
&gt; 
&gt; Nit: It could be helpful to log this error.

The error is currently propagated to the caller and logged there (e.g. MediaEndpointPeerConnection:161). We could log it here as well. 

&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:401
&gt; &gt; +    if (!callScript(&quot;parse&quot;, sdp, scriptOutput))
&gt; &gt; +        return Result::InternalError;
&gt; &gt; +
&gt; &gt; +    if (scriptOutput == &quot;ParseError&quot;)
&gt; &gt; +        return Result::ParseError;
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;MediaEndpointSessionConfiguration&gt; configuration = configurationFromJSON(scriptOutput);
&gt; &gt; +    if (!configuration)
&gt; &gt; +        return Result::InternalError;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:411
&gt; &gt; +    if (!callScript(&quot;generateCandidateLine&quot;, iceCandidateToJSON(candidate), candidateLine))
&gt; &gt; +        return Result::InternalError;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:428
&gt; &gt; +    if (!callScript(&quot;parseCandidateLine&quot;, candidateLine, scriptOutput))
&gt; &gt; +        return Result::InternalError;
&gt; &gt; +
&gt; &gt; +    if (scriptOutput == &quot;ParseError&quot;)
&gt; &gt; +        return Result::ParseError;
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;IceCandidate&gt; candidate = iceCandidateFromJSON(scriptOutput);
&gt; &gt; +    if (!candidate)
&gt; &gt; +        return Result::InternalError;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:469
&gt; &gt; +        if (exec-&gt;hadException()) {
&gt; &gt; +            exec-&gt;clearException();
&gt; &gt; +            return false;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    JSC::JSValue functionValue = globalObject-&gt;get(exec, JSC::Identifier::fromString(exec, functionName));
&gt; &gt; +    if (!functionValue.isFunction())
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    JSC::JSObject* function = functionValue.toObject(exec);
&gt; &gt; +    JSC::CallData callData;
&gt; &gt; +    JSC::CallType callType = function-&gt;methodTable()-&gt;getCallData(function, callData);
&gt; &gt; +    if (callType == JSC::CallTypeNone)
&gt; &gt; +        return false;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:482
&gt; &gt; +    if (!result.isString())
&gt; &gt; +        return false;
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170197</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-03-03 06:45:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; Comment on attachment 272580 [details]
&gt; &gt; Proposed patch
&gt; 
&gt; Thanks for reviewing. Find answers inline.
&gt;  
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=272580&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/fast/mediastream/RTCPeerConnection-inspect-offer.html:19
&gt; &gt; &gt; +                debug(&quot;This test can not be run without the testRunner&quot;);
&gt; &gt; &gt; +                finishJSTest();
&gt; &gt; 
&gt; &gt; Nit: add this might as well return to avoid a bunch of script errors
&gt; 
&gt; That&apos;s pretty much the behavior right now since the getUserMedia() request
&gt; will never resolve. We could wrap everything in a function and return as
&gt; well.
&gt; 

Indeed, I didn&apos;t look close enough!

&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:158
&gt; &gt; &gt; +        mediaDescription-&gt;setMediaStreamId(sender-&gt;mediaStreamIds()[0]);
&gt; &gt; &gt; +        mediaDescription-&gt;setMediaStreamTrackId(track-&gt;id());
&gt; &gt; &gt; +        mediaDescription-&gt;setType(track-&gt;kind());
&gt; &gt; &gt; +        mediaDescription-&gt;setPort(9);
&gt; &gt; &gt; +        mediaDescription-&gt;setAddress(&quot;0.0.0.0&quot;);
&gt; &gt; &gt; +        mediaDescription-&gt;setMode(&quot;sendrecv&quot;);
&gt; &gt; &gt; +        mediaDescription-&gt;setPayloads(track-&gt;kind() == &quot;audio&quot; ? m_defaultAudioPayloads : m_defaultVideoPayloads);
&gt; &gt; &gt; +        mediaDescription-&gt;setRtcpMux(true);
&gt; &gt; &gt; +        mediaDescription-&gt;setDtlsSetup(&quot;actpass&quot;);
&gt; &gt; &gt; +        mediaDescription-&gt;setDtlsFingerprintHashFunction(m_dtlsFingerprintFunction);
&gt; &gt; &gt; +        mediaDescription-&gt;setDtlsFingerprint(m_dtlsFingerprint);
&gt; &gt; &gt; +        mediaDescription-&gt;setCname(m_cname);
&gt; &gt; &gt; +        mediaDescription-&gt;addSsrc(cryptographicallyRandomNumber());
&gt; &gt; &gt; +        mediaDescription-&gt;setIceUfrag(m_iceUfrag);
&gt; &gt; &gt; +        mediaDescription-&gt;setIcePassword(m_icePassword);
&gt; &gt; 
&gt; &gt; Nit: This is a lot of setup Might it make sense to add a
&gt; &gt; PeerMediaDescription constructor that takes a MediaStreamTrack (or maybe
&gt; &gt; RtpSender)? If &quot;0.0.0.0&quot; the default address, can you set it in the
&gt; &gt; constructor?
&gt; 
&gt; My intention with the setters was to avoid having expressions like
&gt; &apos;cryptographicallyRandomNumber()&apos; in the middle of a long constructor
&gt; argument list since it&apos;s not obvious that it&apos;s an SSRC. But as it turned
&gt; out, most of the values set are stored in variables with fairly descriptive
&gt; names. :)
&gt; 
&gt; I made all constant initializations here defaults when a
&gt; PeerMediaDescription is constructed as you suggested with address. That got
&gt; rid of five setter-calls. Is that enough or should we go for a constructor?
&gt; 

This seems fine, thanks.

This seems fine to me, but this is a large &amp; complex patch so I have asked someone else to take a look as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170258</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-03 10:20:31 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; This seems fine to me, but this is a large &amp; complex patch so I have asked
&gt; someone else to take a look as well.

Thanks. That seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170944</commentid>
    <comment_count>8</comment_count>
      <attachid>272580</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-03-04 11:08:50 -0800</bug_when>
    <thetext>Comment on attachment 272580
Proposed patch

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

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:74
&gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;type&quot;), candidate.type());
&gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;foundation&quot;), candidate.foundation());
&gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;componentId&quot;), candidate.componentId());
&gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;transport&quot;), candidate.transport());
&gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;priority&quot;), candidate.priority());
&gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;address&quot;), candidate.address());
&gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;port&quot;), candidate.port());
&gt; +    if (!candidate.tcpType().isEmpty())
&gt; +        candidateObject-&gt;setString(ASCIILiteral(&quot;tcpType&quot;), candidate.tcpType());
&gt; +    if (candidate.type().convertToASCIIUppercase() != &quot;HOST&quot;) {
&gt; +        candidateObject-&gt;setString(ASCIILiteral(&quot;relatedAddress&quot;), candidate.relatedAddress());
&gt; +        candidateObject-&gt;setInteger(ASCIILiteral(&quot;relatedPort&quot;), candidate.relatedPort());
&gt; +    }

It seems like a shame to have to create so many temporary String objects just for the sake of passing through to the InspectorObject here (and later in createCandidate).  Could you just use some static methods returning NeverDestroyed&lt;String&gt; objects? E.g.:

static const String&amp; typeString()
{
    static NeverDestroyed&lt;const String&gt; type { ASCIILiteral(&quot;type&quot;) };
    return type;
}

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:86
&gt; +    if (candidateObject.getString(ASCIILiteral(&quot;type&quot;), stringValue))
&gt; +        candidate-&gt;setType(stringValue);

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:153
&gt; +        if (mdescObject-&gt;getString(ASCIILiteral(&quot;type&quot;), stringValue))
&gt; +            mdesc-&gt;setType(stringValue);

Ditto.

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:299
&gt; +    for (const RefPtr&lt;PeerMediaDescription&gt;&amp; mdesc : configuration.mediaDescriptions()) {

&quot;mdesc&quot; is not a very, ahem, descriptive name. &quot;description&quot;?

&gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:300
&gt; +        RefPtr&lt;InspectorObject&gt; mdescObject = InspectorObject::create();

Same for &quot;mdescObject&quot;.

&gt; Source/WebCore/platform/mediastream/gtk/SDPProcessorScriptResourceGtk.cpp:45
&gt; +String scriptString()
&gt; +{
&gt; +    return String(sdpJavaScript);
&gt; +}

This should probably return a const String&amp;, and store it locally in a &quot;static NeverDestroyed&lt;const String&gt;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171552</commentid>
    <comment_count>9</comment_count>
      <attachid>273169</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-07 03:00:55 -0800</bug_when>
    <thetext>Created attachment 273169
Candidate for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171568</commentid>
    <comment_count>10</comment_count>
      <attachid>273176</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-07 05:44:51 -0800</bug_when>
    <thetext>Created attachment 273176
Candidate for landing (rebased)

Rebased and updated to match some new style rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171569</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-07 05:58:51 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 272580 [details]
&gt; Proposed patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272580&amp;action=review

Thanks for taking time to review. Find answers inline.
 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:74
&gt; &gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;type&quot;), candidate.type());
&gt; &gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;foundation&quot;), candidate.foundation());
&gt; &gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;componentId&quot;), candidate.componentId());
&gt; &gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;transport&quot;), candidate.transport());
&gt; &gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;priority&quot;), candidate.priority());
&gt; &gt; +    candidateObject-&gt;setString(ASCIILiteral(&quot;address&quot;), candidate.address());
&gt; &gt; +    candidateObject-&gt;setInteger(ASCIILiteral(&quot;port&quot;), candidate.port());
&gt; &gt; +    if (!candidate.tcpType().isEmpty())
&gt; &gt; +        candidateObject-&gt;setString(ASCIILiteral(&quot;tcpType&quot;), candidate.tcpType());
&gt; &gt; +    if (candidate.type().convertToASCIIUppercase() != &quot;HOST&quot;) {
&gt; &gt; +        candidateObject-&gt;setString(ASCIILiteral(&quot;relatedAddress&quot;), candidate.relatedAddress());
&gt; &gt; +        candidateObject-&gt;setInteger(ASCIILiteral(&quot;relatedPort&quot;), candidate.relatedPort());
&gt; &gt; +    }
&gt; 
&gt; It seems like a shame to have to create so many temporary String objects
&gt; just for the sake of passing through to the InspectorObject here (and later
&gt; in createCandidate).  Could you just use some static methods returning
&gt; NeverDestroyed&lt;String&gt; objects? E.g.:
&gt; 
&gt; static const String&amp; typeString()
&gt; {
&gt;     static NeverDestroyed&lt;const String&gt; type { ASCIILiteral(&quot;type&quot;) };
&gt;     return type;
&gt; }

Yes. I created simple a macro to define a bunch of these functions.

&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:86
&gt; &gt; +    if (candidateObject.getString(ASCIILiteral(&quot;type&quot;), stringValue))
&gt; &gt; +        candidate-&gt;setType(stringValue);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:153
&gt; &gt; +        if (mdescObject-&gt;getString(ASCIILiteral(&quot;type&quot;), stringValue))
&gt; &gt; +            mdesc-&gt;setType(stringValue);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:299
&gt; &gt; +    for (const RefPtr&lt;PeerMediaDescription&gt;&amp; mdesc : configuration.mediaDescriptions()) {
&gt; 
&gt; &quot;mdesc&quot; is not a very, ahem, descriptive name. &quot;description&quot;?

Fixed. Went with mediaDescription.

&gt; &gt; Source/WebCore/Modules/mediastream/SDPProcessor.cpp:300
&gt; &gt; +        RefPtr&lt;InspectorObject&gt; mdescObject = InspectorObject::create();
&gt; 
&gt; Same for &quot;mdescObject&quot;.

Fixed. Went with mediaDescriptionObject.

&gt; &gt; Source/WebCore/platform/mediastream/gtk/SDPProcessorScriptResourceGtk.cpp:45
&gt; &gt; +String scriptString()
&gt; &gt; +{
&gt; &gt; +    return String(sdpJavaScript);
&gt; &gt; +}
&gt; 
&gt; This should probably return a const String&amp;, and store it locally in a
&gt; &quot;static NeverDestroyed&lt;const String&gt;&quot;.

Indeed. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171577</commentid>
    <comment_count>12</comment_count>
      <attachid>273177</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2016-03-07 07:29:09 -0800</bug_when>
    <thetext>Created attachment 273177
Candidate for landing (rebased)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171718</commentid>
    <comment_count>13</comment_count>
      <attachid>273177</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 13:24:53 -0800</bug_when>
    <thetext>Comment on attachment 273177
Candidate for landing (rebased)

Clearing flags on attachment: 273177

Committed r197702: &lt;http://trac.webkit.org/changeset/197702&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272580</attachid>
            <date>2016-03-01 11:36:56 -0800</date>
            <delta_ts>2016-03-02 14:10:56 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>mepc-create-offer_0.patch</filename>
            <type>text/plain</type>
            <size>104434</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzNiNjFiLi42OTJjMmNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MDEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogSW1wbGVtZW50IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
T2ZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIG91dHB1dCBTRFAgZnJvbSBjcmVhdGVPZmZlcigpIGlzIHByb2Nlc3NlZCBieSB2ZXJpZnlp
bmcgYWxsIHZhcmlhYmxlCisgICAgICAgIGlkZW50aWZpZXJzLCBzdWNoIGFzIHNlc3Npb24gYW5k
IHVzZXIgaWQsIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoCisgICAgICAgIHByZWRlZmluZWQgdmFs
dWVzIHRvIG1ha2UgdGhlIFNEUCBjb21wYXJhYmxlIHdpdGggYW4gZXhwZWN0ZWQgcmVzdWx0Lgor
CisgICAgICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRoZSBtYWMgcG9ydCB1
bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBKYXZhU2NyaXB0
IHJlc291cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE2LTAy
LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogRXhwb3NlIFByb3h5IHRhcmdldCBhbmQgaGFuZGxlciBpbnRlcm5hbCBwcm9w
ZXJ0aWVzIHRvIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZWUzNgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24taW5zcGVjdC1vZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3NiBAQAorSW5z
cGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCkKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgR290IG9mZmVyCis9PT0gUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uID09PQordHlwZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0tIHtzZXNzaW9uLWlk
Ok9LfSAwIElOIElQNCAxMjcuMC4wLjEKK3M9LQordD0wIDAKK2E9bXNpZC1zZW1hbnRpYzpXTVMg
e21lZGlhLXN0cmVhbS1pZDpPS30KK209YXVkaW8gOSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgOCAw
CitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMTEg
T1BVUy80ODAwMC8yCithPXJ0cG1hcDo4IFBDTUEvODAwMAorYT1ydHBtYXA6MCBQQ01VLzgwMDAK
K2E9c3NyYzp7c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQorYT1tc2lkOnttZWRpYS1zdHJlYW0t
aWQ6T0t9IHttZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9CithPWljZS11ZnJhZzp7aWNlLXVmcmFn
Ok9LfQorYT1pY2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9CithPWZpbmdlcnByaW50OnNoYS0yNTYg
OEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6
MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0dXA6YWN0cGFzcwor
PT09CisKK1BBU1MgR290IG9mZmVyCis9PT0gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uID09PQordHlw
ZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0tIHtzZXNzaW9uLWlkOk9LfSAxIElOIElQNCAxMjcuMC4w
LjEKK3M9LQordD0wIDAKK2E9bXNpZC1zZW1hbnRpYzpXTVMge21lZGlhLXN0cmVhbS1pZDpPS30K
K209YXVkaW8gOSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgOCAwCitjPUlOIElQNCAwLjAuMC4wCith
PXJ0Y3AtbXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMTEgT1BVUy80ODAwMC8yCithPXJ0cG1h
cDo4IFBDTUEvODAwMAorYT1ydHBtYXA6MCBQQ01VLzgwMDAKK2E9c3NyYzp7c3NyYzpPS30gY25h
bWU6e2NuYW1lOk9LfQorYT1tc2lkOnttZWRpYS1zdHJlYW0taWQ6T0t9IHttZWRpYS1zdHJlYW0t
dHJhY2staWQ6T0t9CithPWljZS11ZnJhZzp7aWNlLXVmcmFnOk9LfQorYT1pY2UtcHdkOntpY2Ut
cGFzc3dvcmQ6T0t9CithPWZpbmdlcnByaW50OnNoYS0yNTYgOEI6ODc6MDk6OEE6NUQ6QzI6RjM6
MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6Q0U6
ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0dXA6YWN0cGFzcworbT12aWRlbyA5IFVEUC9UTFMvUlRQ
L1NBVlBGIDEwMyAxMDAgMTIwCitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRy
ZWN2CithPXJ0cG1hcDoxMDMgSDI2NC85MDAwMAorYT1ydHBtYXA6MTAwIFZQOC85MDAwMAorYT1y
dHBtYXA6MTIwIFJUWC85MDAwMAorYT1mbXRwOjEwMyBwYWNrZXRpemF0aW9uLW1vZGU9MQorYT1m
bXRwOjEyMCBhcHQ9MTAwO3J0eC10aW1lPTIwMAorYT1ydGNwLWZiOjEwMCBuYWNrCithPXJ0Y3At
ZmI6MTAzIG5hY2sgcGxpCithPXJ0Y3AtZmI6MTAwIG5hY2sgcGxpCithPXJ0Y3AtZmI6MTAzIGNj
bSBmaXIKK2E9cnRjcC1mYjoxMDAgY2NtIGZpcgorYT1zc3JjOntzc3JjOk9LfSBjbmFtZTp7Y25h
bWU6T0t9CithPW1zaWQ6e21lZGlhLXN0cmVhbS1pZDpPS30ge21lZGlhLXN0cmVhbS10cmFjay1p
ZDpPS30KK2E9aWNlLXVmcmFnOntpY2UtdWZyYWc6T0t9CithPWljZS1wd2Q6e2ljZS1wYXNzd29y
ZDpPS30KK2E9ZmluZ2VycHJpbnQ6c2hhLTI1NiA4Qjo4NzowOTo4QTo1RDpDMjpGMzozMzpFRjpD
NTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0NjozQjoxQjpDRTo4NDo5ODpE
RDo4RTpBRjo3QgorYT1zZXR1cDphY3RwYXNzCis9PT0KKworUEFTUyBFbmQgb2YgcHJvbWlzZSBj
aGFpbgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taW5zcGVjdC1vZmZlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDFkNTcwMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sCkBAIC0wLDAg
KzEsMTQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAg
ICAgICA8c2NyaXB0PgorICAgICAgICAgICAgdmFyIHN0cmVhbTsKKyAgICAgICAgICAgIHZhciBh
dWRpb1RyYWNrOworICAgICAgICAgICAgdmFyIHZpZGVvVHJhY2s7CisgICAgICAgICAgICB2YXIg
bWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyA9IFtdOworCisgICAgICAgICAgICBkZXNjcmlwdGlv
bigiSW5zcGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCki
KTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0
aG91dCB0aGUgdGVzdFJ1bm5lciIpOworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcGMgPSBuZXcgd2Via2l0UlRDUGVlckNv
bm5lY3Rpb24oe2ljZVNlcnZlcnM6W3t1cmxzOidzdHVuOmZvby5jb20nfV19KTsKKworICAgICAg
ICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyAiYXVkaW8iOiB0cnVl
LCAidmlkZW8iOiB0cnVlIH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocykgeworICAg
ICAgICAgICAgICAgIHN0cmVhbSA9IHM7CisgICAgICAgICAgICAgICAgYXVkaW9UcmFjayA9IHN0
cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdOworICAgICAgICAgICAgICAgIHZpZGVvVHJhY2sgPSBz
dHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTsKKworICAgICAgICAgICAgICAgIHBjLmFkZFRyYWNr
KGF1ZGlvVHJhY2ssIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9m
ZmVyKCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG9mZmVy
KSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiR290IG9mZmVyIik7CisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcy5wdXNoKHsgInRyYWNrSWQiOiBhdWRpb1Ry
YWNrLmlkLCAic3RyZWFtSWQiOiBzdHJlYW0uaWQgfSk7CisgICAgICAgICAgICAgICAgcHJpbnRD
b21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKG9mZmVyLCBtZWRpYURlc2NyaXB0aW9uVmFyaWFi
bGVzKTsKKworICAgICAgICAgICAgICAgIHBjLmFkZFRyYWNrKHZpZGVvVHJhY2ssIHN0cmVhbSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9mZmVyKCk7CisgICAgICAgICAgICB9
KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG9mZmVyKSB7CisgICAgICAgICAgICAgICAg
dGVzdFBhc3NlZCgiR290IG9mZmVyIik7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
blZhcmlhYmxlcy5wdXNoKHsgInRyYWNrSWQiOiB2aWRlb1RyYWNrLmlkLCAic3RyZWFtSWQiOiBz
dHJlYW0uaWQgfSk7CisgICAgICAgICAgICAgICAgcHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2Ny
aXB0aW9uKG9mZmVyLCBtZWRpYURlc2NyaXB0aW9uVmFyaWFibGVzKTsKKworICAgICAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIkVuZCBvZiBwcm9taXNlIGNoYWluIik7CisgICAgICAgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLmNhdGNoKGZ1bmN0
aW9uIChlcnJvcikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVycm9yIGNhdWdodCBp
biBwcm9taXNlIGNoYWluOiAiICsgZXJyb3IpOworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIFZhcmlhYmxlIGZpZWxkcyAo
ZS5nLiBnZW5lcmF0ZWQgaWRzKSBhcmUgdmVyaWZpZWQgYW5kIHJlcGxhY2VkIHdpdGggcHJlZGlj
dGFibGUKKyAgICAgICAgICAgIC8vIGxhYmxlcy4gVGhlIHJlc3VsdCBjYW4gYmUgY29tcGFyZWQg
d2l0aCBhIHByZWRlZmluZWQgZXhwZWN0ZWQgb3V0cHV0LgorICAgICAgICAgICAgZnVuY3Rpb24g
cHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiwgbWRl
c2NWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiPT09IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiA9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygidHlwZTogIiArIHNlc3Npb25E
ZXNjcmlwdGlvbi50eXBlICsgIiwgc2RwOiIpOworCisgICAgICAgICAgICAgICAgdmFyIHNkcCA9
IHNlc3Npb25EZXNjcmlwdGlvbi5zZHA7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVnZXhwID0g
eworICAgICAgICAgICAgICAgICAgICAib2xpbmUiOiAiXm89KC0pIChbXFxkXSspIC4qJCIsCisg
ICAgICAgICAgICAgICAgICAgICJtc2lkc2VtYW50aWMiOiAiXmE9bXNpZC1zZW1hbnRpYzogKldN
UyAuKiQiLAorICAgICAgICAgICAgICAgICAgICAibWxpbmUiOiAiXm09LiokIiwKKyAgICAgICAg
ICAgICAgICAgICAgImNuYW1lIjogIl5hPXNzcmM6KFxcZCspIGNuYW1lOihbXFx3Ky9cXC1AXFwu
XFx7XFx9XSspLiokIiwKKyAgICAgICAgICAgICAgICAgICAgIm1zaWQiOiAiXmE9KHNzcmM6XFxk
KyApP21zaWQ6KFtcXHcrL1xcLT1dKykgKyhbXFx3Ky9cXC09XSspLiokIiwKKyAgICAgICAgICAg
ICAgICAgICAgImljZXVmcmFnIjogIl5hPWljZS11ZnJhZzooW1xcdysvXSopLiokIiwKKyAgICAg
ICAgICAgICAgICAgICAgImljZXB3ZCI6ICJeYT1pY2UtcHdkOihbXFx3Ky9dKj0qKS4qJCIsCisg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHZhciBtZGVzY0luZGV4ID0gLTE7
CisgICAgICAgICAgICAgICAgc2RwLnNwbGl0KCJcclxuIikuZm9yRWFjaChmdW5jdGlvbiAobGlu
ZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWxpbmU7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1saW5lID0gbWF0Y2gobGluZSwgcmVnZXhwLm1saW5lKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTWVkaWEgYmxvY2sgKCJoZWFkZXIiIGxpbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtZGVzY0luZGV4Kys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bWRlc2NJbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlc3Npb24gYmxv
Y2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGluZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBtc2lkc2VtYW50aWM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
bGluZSA9IG1hdGNoKGxpbmUsIHJlZ2V4cC5vbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShvbGluZVsyXSwgdmVyaWZpZWQoInNlc3Npb24taWQi
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtc2lkc2VtYW50aWMgPSBtYXRj
aChsaW5lLCByZWdleHAubXNpZHNlbWFudGljKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1kZXNjVmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlcykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHZhcmlhYmxlcy5z
dHJlYW1JZCwgdmVyaWZpZWQoIm1lZGlhLXN0cmVhbS1pZCIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lZGlhIGJsb2NrIChj
b250ZW50IGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG1zaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aWNldWZyYWc7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWNlcHdkOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY25hbWUgPSBtYXRjaChsaW5lLCByZWdleHAuY25hbWUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShjbmFtZVsx
XSwgdmVyaWZpZWQoInNzcmMiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZShjbmFtZVsyXSwgdmVyaWZpZWQoImNuYW1lIikpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zaWQgPSBtYXRjaChsaW5lLCByZWdleHAubXNpZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNpZFsxXSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtc2lkWzFdLCB2ZXJpZmll
ZCgic3NyYyIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZXMg
PSBtZGVzY1ZhcmlhYmxlc1ttZGVzY0luZGV4XTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBtZWRpYVN0cmVhbUlkID0gbXNpZFsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RyZWFtSWRWZXJpZmllZCA9IHZlcmlmaWVkKCJtZWRpYS1zdHJlYW0taWQiLCBt
ZWRpYVN0cmVhbUlkICE9IHZhcmlhYmxlcy5zdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtZWRpYVN0cmVhbUlkLCBzdHJlYW1JZFZlcmlm
aWVkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVN0cmVhbVRyYWNr
SWQgPSBtc2lkWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFja0lkVmVy
aWZpZWQgPSB2ZXJpZmllZCgibWVkaWEtc3RyZWFtLXRyYWNrLWlkIiwgbWVkaWFTdHJlYW1UcmFj
a0lkICE9IHZhcmlhYmxlcy50cmFja0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lID0gbGluZS5yZXBsYWNlKG1lZGlhU3RyZWFtVHJhY2tJZCwgdHJhY2tJZFZlcmlmaWVkKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpY2V1ZnJhZyA9IG1hdGNoKGxp
bmUsIHJlZ2V4cC5pY2V1ZnJhZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZShpY2V1ZnJhZ1sxXSwgdmVyaWZpZWQoImljZS11ZnJhZyIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGljZXB3ZCA9IG1hdGNoKGxpbmUsIHJlZ2V4cC5p
Y2Vwd2QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2Uo
aWNlcHdkWzFdLCB2ZXJpZmllZCgiaWNlLXBhc3N3b3JkIikpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWJ1ZyhsaW5lKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGRlYnVnKCI9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZlcmlmaWVkKG5hbWUsIGlzRmFpbHVyZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAieyIgKyBuYW1lICsgIjoiICsgKGlzRmFpbHVyZSA/ICJGQUlM
RUQiIDogIk9LIikgKyAifSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9u
IG1hdGNoKGRhdGEsIHBhdHRlcm4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tYXRj
aChuZXcgUmVnRXhwKHBhdHRlcm4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAgICAgd2luZG93LnN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDdiNjlkOWEuLjNkZjE2MzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0
YXRpb25zCkBAIC0xNzgsNiArMTc4LDcgQEAgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1zdGF0cy5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRz
U2VsZWN0b3IuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUu
aHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5odG1sCitmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAogCiAjIEFzc2VydHMg
aW4gZGVidWcuCiBbIERlYnVnIF0gZmFzdC9pbWFnZXMvbGFyZ2Utc2l6ZS1pbWFnZS1jcmFzaC5o
dG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDljNjZkMWEuLjZiNDM1YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC05NjIsNiArOTYyLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNF
UwogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENTdGF0c1Jlc3BvbnNlLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDVHJhY2tFdmVudC5jcHAKKyAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
ci5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NvdXJjZUluZm8uY3BwCiAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAogICAgIE1vZHVsZXMvbWVkaWFz
dHJlYW0vVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcApAQCAtMjMxNiw2ICsyMzE3LDcgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNw
cAogICAgIHBsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2suY3BwCisgICAgcGxhdGZv
cm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRl
ci5jcHAKQEAgLTM2MDIsNiArMzYwNCwyMiBAQCBpZiAoV2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQ
VFMpCiAgICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V2ViQ29y
ZV9VU0VSX0FHRU5UX1NDUklQVFNfREVQRU5ERU5DSUVTfSBVc2VyQWdlbnRTY3JpcHRzRGF0YS5j
cHAgVXNlckFnZW50U2NyaXB0cy5oKQogZW5kaWYgKCkKIAoraWYgKFdlYkNvcmVfU0RQX1BST0NF
U1NPUl9TQ1JJUFRTKQorICAgICMgTmVjZXNzYXJ5IHZhcmlhYmxlczoKKyAgICAjIFdlYkNvcmVf
U0RQX1BST0NFU1NPUl9TQ1JJUFRTIGNvbnRhaW5pbmcgdGhlIEphdmFTY3JpcHQgc291cmNlcyBs
aXN0CisgICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUU19ERVBFTkRFTkNJRVMgY29u
dGFpbmluZyB0aGUgc291cmNlIGZpbGUgdGhhdCB3aWxsIGxvYWQgdGhlIHNjcmlwdHMgdG8gYWRk
IHRoZSBwcm9wZXIKKyAgICAjICAgZGVwZW5kZW5jeSBhbmQgaGF2aW5nIHRoZW0gYnVpbHQgYXQg
dGhlIHJpZ2h0IG1vbWVudAorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAgICBPVVRQ
VVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NEUFByb2Nlc3NvclNjcmlwdHNEYXRh
LmNwcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0cy5o
CisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9TY3JpcHRzL21ha2UtanMt
ZmlsZS1hcnJheXMucHkKKyAgICAgICAgREVQRU5EUyAke1dlYkNvcmVfU0RQX1BST0NFU1NPUl9T
Q1JJUFRTfQorICAgICAgICBDT01NQU5EICJQWVRIT05QQVRIPSR7SmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVJ9IiAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9TY3JpcHRzL21h
a2UtanMtZmlsZS1hcnJheXMucHkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NEUFBy
b2Nlc3NvclNjcmlwdHMuaCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vz
c29yU2NyaXB0c0RhdGEuY3BwICR7V2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFN9CisgICAg
ICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwKQorICAgIEFE
RF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dlYkNvcmVfU0RQX1BST0NF
U1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFU30gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwIFNE
UFByb2Nlc3NvclNjcmlwdHMuaCkKK2VuZGlmICgpCisKICMgR2VuZXJhdGUgcGx1Zy1pbiByZXNv
dXJjZXMKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXNEYXRhLmNwcCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vUGx1Z0luc1Jlc291cmNlcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU4ZDk5Zi4uYWZl
M2U3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wMy0wMSAgQWRhbSBCZXJn
a3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgV2ViUlRDOiBJ
bXBsZW1lbnQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlcigpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ4NjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjogSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBjcmVhdGVPZmZlcigp
CisgICAgICAgIGFkZGVkLiBjcmVhdGVPZmZlcigpIGlzIHNwbGl0IHVwIGludG8gYSBzeW5jaHJv
bm91cyBwYXJ0LCBhbmQgYQorICAgICAgICBzY2hlZHVsZWQgdGFzay4gVGhlIHRhc2sgd2lsbCBi
ZSBkZWZlcnJlZCB1bnRpbCBpbmZvcm1hdGlvbiwgcmVxdWlyaW5nCisgICAgICAgIHNvbWUgYW1v
dW50IG9mIHdvcmssIHN1Y2ggYXMgdGhlIERUTFMgZmluZ2VycHJpbnQgaXMgYXZhaWxhYmxlLiBP
dGhlcgorICAgICAgICBhc3luYyBBUEkgZnVuY3Rpb25zIHdpbGwgYWxzbyBmb2xsb3cgdGhpcyBw
YXR0ZXJuLgorCisgICAgICAgIC0gU0RQUHJvY2Vzc29yIChhZGRlZCk6IFRoZSBTRFBQcm9jZXNz
b3JzIHBhcnNlcyBTRFAgdG8gYQorICAgICAgICBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24gb2JqZWN0IGFuZCBnZW5lcmF0ZXMgU0RQIGluIHRoZQorICAgICAgICByZXZlcnNlIGRp
cmVjdGlvbi4gQW55IFNEUCBzdHJpbmcgaGFuZGxpbmcgaXMgY29uZmluZWQgdG8gdGhlCisgICAg
ICAgIFNEUFByb2Nlc3NvciBhbmQgYWxsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1lZGlhIHNlc3Np
b24gaXMgZG9uZSB2aWEgdGhlCisgICAgICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiBvYmplY3QuCisKKyAgICAgICAgVGhlIFNEUCBwYXJzZXIgYW5kIGdlbmVyYXRvciBsb2dp
YyBpcyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGFuZAorICAgICAgICB3b3JrcyB3aXRoIEpT
T04gKFNEUC0+SlNPTiwgSlNPTi0+U0RQKS4gVGhlIFNEUFByb2Nlc3NvciBydW5zIEpTIGluIGFu
CisgICAgICAgIGlzb2xhdGVkIHNjb3BlIGFuZCBjb252ZXJ0cyBKU09OIHRvIGEgTWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uCisgICAgICAgIG9iamVjdCBhbmQgdGhlIHJldmVyc2Uu
IFVzaW5nIEpTT04gc2lnbmFsaW5nIChub25zdGFuZGFyZCkgY2FuIGJlCisgICAgICAgIGhlbHBm
dWwgZHVyaW5nIGRlYnVnZ2luZy4KKworICAgICAgICAtIE1vY2tNZWRpYUVuZHBvaW50IChhZGRl
ZCk6IE1vY2sgTWVkaWFFbmRwb2ludCBpbXBsZW1lbnRhdGlvbiB3aXRoCisgICAgICAgIHN1cHBv
cnQgZm9yIGdlbmVyYXRpbmcgb2ZmZXJzLiBEVExTIGluZm9ybWF0aW9uLCBzdWNoIGFzIGZpbmdl
cnByaW50LAorICAgICAgICBpcyBoYXJkIGNvZGVkIHRvIGZhY2lsaXRhdGUgdGVzdGluZyB3aXRo
IGV4cGVjdGVkIHZhbHVlcy4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAorCisgICAgICAgIFRoZSB0ZXN0IGlzIGN1
cnJlbnRseSBza2lwcGVkIG9uIHRoZSBtYWMgcG9ydCB1bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhl
CisgICAgICAgIFNEUFByb2Nlc3NvciBKYXZhU2NyaXB0IHJlc291cmNlIGlzIGFkZGVkLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBl
ZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
cmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6cHJvbWlzZSk6CisgICAgICAgIChXZWJD
b3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6V3JhcHBlZFNlc3Npb25EZXNj
cmlwdGlvblByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmFuZG9tU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6TWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbjo6cnVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5l
Y3Rpb246OnN0YXJ0UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlclRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3REdGxzRmluZ2VycHJpbnQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmg6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6U0RQUHJvY2Vzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhbmRpZGF0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uZmlndXJhdGlvbkZyb21KU09OKToK
KyAgICAgICAgKFdlYkNvcmU6OmljZUNhbmRpZGF0ZUZyb21KU09OKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbmZpZ3VyYXRpb25Ub0pTT04pOgorICAgICAgICAoV2ViQ29yZTo6aWNlQ2FuZGlkYXRl
VG9KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Z2VuZXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
RFBQcm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpT
RFBQcm9jZXNzb3I6OnBhcnNlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTRFBQ
cm9jZXNzb3I6OmNhbGxTY3JpcHQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpz
OiBBZGRlZC4KKyAgICAgICAgKG1hdGNoKToKKyAgICAgICAgKGFkZERlZmF1bHRzKToKKyAgICAg
ICAgKGZpbGxUZW1wbGF0ZSk6CisgICAgICAgIChTRFAucGFyc2UpOgorICAgICAgICAoU0RQLmdl
bmVyYXRlKToKKyAgICAgICAgKFNEUC5nZW5lcmF0ZUNhbmRpZGF0ZUxpbmUpOgorICAgICAgICAo
aGFzQWxsUHJvcGVydGllcyk6CisgICAgICAgIChTRFAudmVyaWZ5T2JqZWN0KToKKyAgICAgICAg
KGdlbmVyYXRlKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAgKGdlbmVyYXRlQ2FuZGlkYXRl
TGluZSk6CisgICAgICAgIChwYXJzZUNhbmRpZGF0ZUxpbmUpOgorICAgICAgICAqIFBsYXRmb3Jt
R1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZyk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3JTY3Jp
cHRSZXNvdXJjZTo6c2NyaXB0U3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tN
ZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRw
b2ludDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpNb2Nr
TWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6fk1v
Y2tNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojpz
ZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojpn
ZW5lcmF0ZUR0bHNJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojpn
ZXREZWZhdWx0QXVkaW9QYXlsb2Fkcyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRw
b2ludDo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01l
ZGlhRW5kcG9pbnQ6OnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVTZW5kQ29uZmlndXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlQ2FuZGlkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpyZXBsYWNlU2VuZFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6c3RvcCk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OkludGVybmFscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorCiAyMDE2LTAyLTI0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBbVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcz1OdWxsXSBXZWJLaXQtc3BlY2lmaWMgSURMIGF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGVkNjgzZDQuLjMwNmI3MjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5k
cG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTM1LDcgKzM1LDE0IEBACiAKICNpbmNsdWRlICJE
T01FcnJvci5oIgogI2luY2x1ZGUgIkpTRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJKU1JUQ1Nlc3Np
b25EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbi5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKKyNpbmNsdWRlICJSVENPZmZl
ckFuc3dlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJT
RFBQcm9jZXNzb3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDE4ICs1NSwx
MTkgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0
ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbigKIAogQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNr
ZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOwogCitjbGFzcyBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFdyYXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZT4g
Y3JlYXRlKFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UmJiBwcm9taXNlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICphZG9wdFJlZihuZXcgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2Uo
V1RGTW92ZShwcm9taXNlKSkpOworICAgIH0KKworICAgIFNlc3Npb25EZXNjcmlwdGlvblByb21p
c2UmIHByb21pc2UoKSB7IHJldHVybiBtX3Byb21pc2U7IH0KKworcHJpdmF0ZToKKyAgICBXcmFw
cGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZShTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYg
cHJvbWlzZSkKKyAgICAgICAgOiBtX3Byb21pc2UoV1RGTW92ZShwcm9taXNlKSkKKyAgICB7IH0K
KworICAgIFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UgbV9wcm9taXNlOworfTsKKworc3RhdGlj
IFN0cmluZyByYW5kb21TdHJpbmcoc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjb25zdCBzaXplX3Qg
c2l6ZSA9IGNlaWwobGVuZ3RoICogMyAvIDQpOworICAgIHVuc2lnbmVkIGNoYXIgcmFuZG9tVmFs
dWVzW3NpemVdOworICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJhbmRvbVZhbHVl
cywgc2l6ZSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShyYW5kb21WYWx1ZXMsIHNpemUpOwor
fQorCiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbihQZWVyQ29ubmVjdGlvbkJhY2tlbmRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50
KGNsaWVudCkKKyAgICAsIG1fc2RwUHJvY2Vzc29yKHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNz
b3I+KG5ldyBTRFBQcm9jZXNzb3IobV9jbGllbnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkp
KQorICAgICwgbV9jbmFtZShyYW5kb21TdHJpbmcoMTYpKQorICAgICwgbV9pY2VVZnJhZyhyYW5k
b21TdHJpbmcoNCkpCisgICAgLCBtX2ljZVBhc3N3b3JkKHJhbmRvbVN0cmluZygyMikpCit7Cisg
ICAgbV9tZWRpYUVuZHBvaW50ID0gTWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKTsKKyAgICBB
U1NFUlQobV9tZWRpYUVuZHBvaW50KTsKKworICAgIG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHMgPSBt
X21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRBdWRpb1BheWxvYWRzKCk7CisgICAgbV9kZWZhdWx0
VmlkZW9QYXlsb2FkcyA9IG1fbWVkaWFFbmRwb2ludC0+Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMo
KTsKKworICAgIC8vIFRhc2tzIChzZWUgcnVuVGFzaygpKSB3aWxsIGJlIGRlZmVycmVkIHVudGls
IHdlIGdldCB0aGUgRFRMUyBmaW5nZXJwcmludC4KKyAgICBtX21lZGlhRW5kcG9pbnQtPmdlbmVy
YXRlRHRsc0luZm8oKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJ1
blRhc2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHRhc2spCit7CisgICAgaWYgKG1fZHRsc0Zpbmdl
cnByaW50LmlzTnVsbCgpKSB7CisgICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUg
ZGVmZXJyZWQgc2luY2UgaXQgd2lsbCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRl
ZC4KKyAgICAgICAgQVNTRVJUKCFtX2luaXRpYWxEZWZlcnJlZFRhc2spOworICAgICAgICBtX2lu
aXRpYWxEZWZlcnJlZFRhc2sgPSB0YXNrOworICAgIH0gZWxzZQorICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKHRhc2spOworfQorCit2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c3Rh
cnRSdW5uaW5nVGFza3MoKQogewotICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOworICAgIGlmICgh
bV9pbml0aWFsRGVmZXJyZWRUYXNrKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luaXRpYWxE
ZWZlcnJlZFRhc2soKTsKKyAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwogfQog
CiB2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIoUlRDT2ZmZXJP
cHRpb25zJiBvcHRpb25zLCBTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKIHsK
LSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgY29uc3QgUmVmUHRyPFJUQ09mZmVyT3B0
aW9ucz4gcHJvdGVjdGVkT3B0aW9ucyA9ICZvcHRpb25zOworICAgIFJlZlB0cjxXcmFwcGVkU2Vz
c2lvbkRlc2NyaXB0aW9uUHJvbWlzZT4gd3JhcHBlZFByb21pc2UgPSBXcmFwcGVkU2Vzc2lvbkRl
c2NyaXB0aW9uUHJvbWlzZTo6Y3JlYXRlKFdURk1vdmUocHJvbWlzZSkpOwogCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBydW5UYXNrKFt0aGlzLCBwcm90ZWN0ZWRPcHRpb25zLCB3cmFwcGVk
UHJvbWlzZV0oKSB7CisgICAgICAgIGNyZWF0ZU9mZmVyVGFzaygqcHJvdGVjdGVkT3B0aW9ucywg
d3JhcHBlZFByb21pc2UtPnByb21pc2UoKSk7CisgICAgfSk7Cit9CiAKLSAgICBwcm9taXNlLnJl
amVjdChET01FcnJvcjo6Y3JlYXRlKCJOb3RTdXBwb3J0ZWRFcnJvciIpKTsKK3ZvaWQgTWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlclRhc2soUlRDT2ZmZXJPcHRpb25zJiwg
U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYgcHJvbWlzZSkKK3sKKyAgICBBU1NFUlQoIW1fZHRs
c0ZpbmdlcnByaW50LmlzRW1wdHkoKSk7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uU25hcHNob3QgPSBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisgICAgY29uZmlndXJhdGlvblNuYXBzaG90
LT5zZXRTZXNzaW9uVmVyc2lvbihtX3NkcFNlc3Npb25WZXJzaW9uKyspOworCisgICAgUnRwU2Vu
ZGVyVmVjdG9yIHNlbmRlcnMgPSBtX2NsaWVudC0+Z2V0U2VuZGVycygpOworCisgICAgLy8gQWRk
IG1lZGlhIGRlc2NyaXB0aW9ucyBmb3Igc2VuZGVycy4KKyAgICBmb3IgKGF1dG8mIHNlbmRlciA6
IHNlbmRlcnMpIHsKKyAgICAgICAgUmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiBtZWRpYURl
c2NyaXB0aW9uID0gUGVlck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSgpOworICAgICAgICBNZWRp
YVN0cmVhbVRyYWNrKiB0cmFjayA9IHNlbmRlci0+dHJhY2soKTsKKworICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLT5zZXRNZWRpYVN0cmVhbUlkKHNlbmRlci0+bWVkaWFTdHJlYW1JZHMoKVswXSk7
CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldE1lZGlhU3RyZWFtVHJhY2tJZCh0cmFjay0+
aWQoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldFR5cGUodHJhY2stPmtpbmQoKSk7
CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldFBvcnQoOSk7CisgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24tPnNldEFkZHJlc3MoIjAuMC4wLjAiKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi0+c2V0TW9kZSgic2VuZHJlY3YiKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0UGF5
bG9hZHModHJhY2stPmtpbmQoKSA9PSAiYXVkaW8iID8gbV9kZWZhdWx0QXVkaW9QYXlsb2FkcyA6
IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRS
dGNwTXV4KHRydWUpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXREdGxzU2V0dXAoImFj
dHBhc3MiKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50SGFz
aEZ1bmN0aW9uKG1fZHRsc0ZpbmdlcnByaW50RnVuY3Rpb24pOworICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLT5zZXREdGxzRmluZ2VycHJpbnQobV9kdGxzRmluZ2VycHJpbnQpOworICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uLT5zZXRDbmFtZShtX2NuYW1lKTsKKyAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi0+YWRkU3NyYyhjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpKTsKKyAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlVWZyYWcobV9pY2VVZnJhZyk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPnNldEljZVBhc3N3b3JkKG1faWNlUGFzc3dvcmQpOworCisgICAgICAgIGNv
bmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVkaWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVz
Y3JpcHRpb24pKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2RwU3RyaW5nOworICAgIFNEUFByb2Nl
c3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2RwUHJvY2Vzc29yLT5nZW5lcmF0ZSgqY29uZmlndXJh
dGlvblNuYXBzaG90LCBzZHBTdHJpbmcpOworICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29y
OjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50
ZXJuYWwgZXJyb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb21pc2UucmVz
b2x2ZShSVENTZXNzaW9uRGVzY3JpcHRpb246OmNyZWF0ZSgib2ZmZXIiLCBzZHBTdHJpbmcpKTsK
IH0KIAogdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlcihSVENB
bnN3ZXJPcHRpb25zJiBvcHRpb25zLCBTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlz
ZSkKQEAgLTE3OSwxMCArMjg3LDEwIEBAIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
Ojpnb3REdGxzRmluZ2VycHJpbnQoY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50KTsK
LSAgICBVTlVTRURfUEFSQU0oZmluZ2VycHJpbnRGdW5jdGlvbik7CisgICAgbV9kdGxzRmluZ2Vy
cHJpbnQgPSBmaW5nZXJwcmludDsKKyAgICBtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uID0gZmlu
Z2VycHJpbnRGdW5jdGlvbjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhcnRSdW5u
aW5nVGFza3MoKTsKIH0KIAogdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdElj
ZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0luZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYmIGNh
bmRpZGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCmluZGV4IGZiNmY0ZjEuLjNj
YTk4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaApAQCAtNDIsNiArNDIsOSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrOworY2xhc3Mg
U0RQUHJvY2Vzc29yOworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UlRDUnRwU2VuZGVyPj4gUnRw
U2VuZGVyVmVjdG9yOwogCiBjbGFzcyBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24gOiBwdWJs
aWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kLCBwdWJsaWMgTWVkaWFFbmRwb2ludENsaWVudCB7CiBw
dWJsaWM6CkBAIC03NCwxMSArNzcsMzMgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJOZWdvdGlh
dGlvbk5lZWRlZFN0YXRlKCkgb3ZlcnJpZGUgeyBub3RJbXBsZW1lbnRlZCgpOyB9OwogCiBwcml2
YXRlOgorICAgIHZvaWQgcnVuVGFzayhzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOworICAgIHZvaWQg
c3RhcnRSdW5uaW5nVGFza3MoKTsKKworICAgIHZvaWQgY3JlYXRlT2ZmZXJUYXNrKFJUQ09mZmVy
T3B0aW9ucyYsIFBlZXJDb25uZWN0aW9uOjpTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJik7CisK
ICAgICAvLyBNZWRpYUVuZHBvaW50Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGdvdER0bHNGaW5n
ZXJwcmludChjb25zdCBTdHJpbmcmIGZpbmdlcnByaW50LCBjb25zdCBTdHJpbmcmIGZpbmdlcnBy
aW50RnVuY3Rpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnb3RJY2VDYW5kaWRhdGUo
dW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNhbmRpZGF0ZT4mJikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKHVuc2lnbmVkIG1kZXNjSW5k
ZXgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBnb3RSZW1vdGVTb3VyY2UodW5zaWduZWQg
bWRlc2NJbmRleCwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+JiYpIG92ZXJyaWRlOworCisg
ICAgUGVlckNvbm5lY3Rpb25CYWNrZW5kQ2xpZW50KiBtX2NsaWVudDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFFbmRwb2ludD4gbV9tZWRpYUVuZHBvaW50OworCisgICAgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IG1faW5pdGlhbERlZmVycmVkVGFzazsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxT
RFBQcm9jZXNzb3I+IG1fc2RwUHJvY2Vzc29yOworCisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBh
eWxvYWQ+PiBtX2RlZmF1bHRBdWRpb1BheWxvYWRzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQ
YXlsb2FkPj4gbV9kZWZhdWx0VmlkZW9QYXlsb2FkczsKKworICAgIFN0cmluZyBtX2NuYW1lOwor
ICAgIFN0cmluZyBtX2ljZVVmcmFnOworICAgIFN0cmluZyBtX2ljZVBhc3N3b3JkOworICAgIFN0
cmluZyBtX2R0bHNGaW5nZXJwcmludDsKKyAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnRGdW5j
dGlvbjsKKyAgICB1bnNpZ25lZCBtX3NkcFNlc3Npb25WZXJzaW9uIHsgMCB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjEwMGJlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKQEAgLTAsMCArMSw0OTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJTRFBQ
cm9jZXNzb3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oIgorI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NEUFByb2Nlc3Nvcjo6U0RQ
UHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQoreworfQorCisvLyBOb3RlIHRoYXQgTWVkaWFF
bmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZsYXR0ZXIiIHN0cnVjdHVyZSB0aGF0
IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKKy8vIGV4YW1wbGUsIHRoZSBKU09OIHJlcHJl
c2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2ggY29sbGVjdHMgYSBzZXQgb2YgcHJv
cGVydGllcyB1bmRlciBhCisvLyBuYW1lc3BhY2UuIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGll
cy4KKworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUNhbmRpZGF0ZU9iamVj
dChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisg
ICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBlIiksIGNhbmRp
ZGF0ZS50eXBlKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiZm91bmRhdGlvbiIpLCBjYW5kaWRhdGUuZm91bmRhdGlvbigpKTsKKyAgICBjYW5kaWRhdGVP
YmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb21wb25lbnRJZCIpLCBjYW5kaWRhdGUu
Y29tcG9uZW50SWQoKSk7CisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJ0cmFuc3BvcnQiKSwgY2FuZGlkYXRlLnRyYW5zcG9ydCgpKTsKKyAgICBjYW5kaWRhdGVP
YmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwcmlvcml0eSIpLCBjYW5kaWRhdGUucHJp
b3JpdHkoKSk7CisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJh
ZGRyZXNzIiksIGNhbmRpZGF0ZS5hZGRyZXNzKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoInBvcnQiKSwgY2FuZGlkYXRlLnBvcnQoKSk7CisgICAgaWYg
KCFjYW5kaWRhdGUudGNwVHlwZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgY2FuZGlkYXRlT2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0Y3BUeXBlIiksIGNhbmRpZGF0ZS50Y3BUeXBlKCkp
OworICAgIGlmIChjYW5kaWRhdGUudHlwZSgpLmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0g
IkhPU1QiKSB7CisgICAgICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicmVsYXRlZEFkZHJlc3MiKSwgY2FuZGlkYXRlLnJlbGF0ZWRBZGRyZXNzKCkpOworICAgICAg
ICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJyZWxhdGVkUG9ydCIp
LCBjYW5kaWRhdGUucmVsYXRlZFBvcnQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbmRpZGF0
ZU9iamVjdDsKK30KKworc3RhdGljIFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNyZWF0ZUNhbmRpZGF0
ZShjb25zdCBJbnNwZWN0b3JPYmplY3QmIGNhbmRpZGF0ZU9iamVjdCkKK3sKKyAgICBSZWZQdHI8
SWNlQ2FuZGlkYXRlPiBjYW5kaWRhdGUgPSBJY2VDYW5kaWRhdGU6OmNyZWF0ZSgpOworICAgIFN0
cmluZyBzdHJpbmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBpbnRWYWx1ZTsKKworICAgIGlmIChjYW5k
aWRhdGVPYmplY3QuZ2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidHlwZSIpLCBzdHJpbmdWYWx1ZSkp
CisgICAgICAgIGNhbmRpZGF0ZS0+c2V0VHlwZShzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2Fu
ZGlkYXRlT2JqZWN0LmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImZvdW5kYXRpb24iKSwgc3RyaW5n
VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldEZvdW5kYXRpb24oc3RyaW5nVmFsdWUpOwor
CisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29tcG9u
ZW50SWQiKSwgaW50VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldENvbXBvbmVudElkKGlu
dFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgidHJhbnNwb3J0IiksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRUcmFu
c3BvcnQoc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2Vy
KEFTQ0lJTGl0ZXJhbCgicHJpb3JpdHkiKSwgaW50VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUt
PnNldFByaW9yaXR5KGludFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiYWRkcmVzcyIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgIGNhbmRp
ZGF0ZS0+c2V0QWRkcmVzcyhzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0
LmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwb3J0IiksIGludFZhbHVlKSkKKyAgICAgICAgY2Fu
ZGlkYXRlLT5zZXRQb3J0KGludFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidGNwVHlwZSIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgIGNh
bmRpZGF0ZS0+c2V0VGNwVHlwZShzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2Jq
ZWN0LmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJlbGF0ZWRBZGRyZXNzIiksIHN0cmluZ1ZhbHVl
KSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRSZWxhdGVkQWRkcmVzcyhzdHJpbmdWYWx1ZSk7CisK
KyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJyZWxhdGVk
UG9ydCIpLCBpbnRWYWx1ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0UmVsYXRlZFBvcnQoaW50
VmFsdWUpOworCisgICAgcmV0dXJuIGNhbmRpZGF0ZTsKK30KKworc3RhdGljIFJlZlB0cjxNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25z
dCBTdHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAg
ICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAg
ICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludFZhbHVlOworICAgIHVuc2ln
bmVkIGxvbmcgbG9uZ1ZhbHVlOworICAgIGJvb2wgYm9vbFZhbHVlOworCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgaWYgKG9iamVjdC0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib3JpZ2luYXRvciIp
LCBvcmlnaW5hdG9yT2JqZWN0KSkgeworICAgICAgICBpZiAob3JpZ2luYXRvck9iamVjdC0+Z2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoInNlc3Npb25JZCIpLCBsb25nVmFsdWUpKQorICAgICAgICAg
ICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvbklkKGxvbmdWYWx1ZSk7CisgICAgICAgIGlmIChv
cmlnaW5hdG9yT2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgic2Vzc2lvblZlcnNpb24i
KSwgaW50VmFsdWUpKQorICAgICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0U2Vzc2lvblZlcnNp
b24oaW50VmFsdWUpOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVkaWFE
ZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBvYmplY3Qt
PmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgibWVkaWFEZXNjcmlwdGlvbnMiKSwgbWVkaWFEZXNjcmlw
dGlvbnNBcnJheSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVkaWFEZXNjcmlw
dGlvbnNBcnJheS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtZGVzY09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXktPmdldChpKS0+YXNPYmplY3QobWRlc2NPYmplY3QpOworCisg
ICAgICAgIFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4gbWRlc2MgPSBQZWVyTWVkaWFEZXNj
cmlwdGlvbjo6Y3JlYXRlKCk7CisKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJ0eXBlIiksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIG1kZXNjLT5z
ZXRUeXBlKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWRlc2NPYmplY3QtPmdldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJwb3J0IiksIGludFZhbHVlKSkKKyAgICAgICAgICAgIG1kZXNjLT5z
ZXRQb3J0KGludFZhbHVlKTsKKworICAgICAgICBpZiAobWRlc2NPYmplY3QtPmdldFN0cmluZyhB
U0NJSUxpdGVyYWwoImFkZHJlc3MiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgbWRlc2Mt
PnNldEFkZHJlc3Moc3RyaW5nVmFsdWUpOworCisgICAgICAgIGlmIChtZGVzY09iamVjdC0+Z2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibW9kZSIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBt
ZGVzYy0+c2V0TW9kZShzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwYXlsb2Fkc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBt
ZGVzY09iamVjdC0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJwYXlsb2FkcyIpLCBwYXlsb2Fkc0Fy
cmF5KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcGF5bG9hZHNBcnJheS0+
bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5
bG9hZHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcGF5
bG9hZHNBcnJheS0+Z2V0KGopLT5hc09iamVjdChwYXlsb2Fkc09iamVjdCk7CisKKyAgICAgICAg
ICAgIFJlZlB0cjxNZWRpYVBheWxvYWQ+IHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgp
OworCisgICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJ0eXBlIiksIGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXRUeXBl
KGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJlbmNvZGluZ05hbWUiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAg
ICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZShzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAg
IGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNsb2NrUmF0ZSIp
LCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKGludFZh
bHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiY2hhbm5lbHMiKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHBheWxvYWQt
PnNldENoYW5uZWxzKGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0
LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiY2NtZmlyIiksIGJvb2xWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgcGF5bG9hZC0+c2V0Q2NtZmlyKGJvb2xWYWx1ZSk7CisKKyAgICAgICAgICAgIGlm
IChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIm5hY2twbGkiKSwgYm9v
bFZhbHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXROYWNrcGxpKGJvb2xWYWx1ZSk7
CisKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVy
YWwoIm5hY2siKSwgYm9vbFZhbHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXROYWNr
KGJvb2xWYWx1ZSk7CisKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
ZXRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgaWYg
KHBheWxvYWRzT2JqZWN0LT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbWV0ZXJzIiksIHBh
cmFtZXRlcnNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3Qt
PmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwYWNrZXRpemF0aW9uTW9kZSIpLCBpbnRWYWx1ZSkp
CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlv
bk1vZGUiLCBpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVj
dC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImFwdCIpLCBpbnRWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigiYXB0IiwgaW50VmFsdWUpOworCisgICAg
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJydHhUaW1lIiksIGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC0+YWRk
UGFyYW1ldGVyKCJydHhUaW1lIiwgaW50VmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtZGVzYy0+YWRkUGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAobWRlc2NPYmplY3QtPmdldE9iamVjdChBU0NJSUxp
dGVyYWwoInJ0Y3AiKSwgcnRjcE9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChydGNwT2JqZWN0
LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgibXV4IiksIGJvb2xWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgbWRlc2MtPnNldFJ0Y3BNdXgoYm9vbFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInJ0Y3BBZGRyZXNzIiksIHN0cmluZ1Zh
bHVlKSkKKyAgICAgICAgICAgICAgICBtZGVzYy0+c2V0UnRjcEFkZHJlc3Moc3RyaW5nVmFsdWUp
OworCisgICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
InJ0Y3BQb3J0IiksIGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZGVzYy0+c2V0UnRjcFBv
cnQoaW50VmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZWRpYVN0cmVhbUlkIiksIHN0cmluZ1ZhbHVlKSkKKyAgICAg
ICAgICAgIG1kZXNjLT5zZXRNZWRpYVN0cmVhbUlkKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBp
ZiAobWRlc2NPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lZGlhU3RyZWFtVHJhY2tJ
ZCIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZGVzYy0+c2V0TWVkaWFTdHJlYW1UcmFj
a0lkKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxz
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKG1kZXNjT2Jq
ZWN0LT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJkdGxzIiksIGR0bHNPYmplY3QpKSB7CisgICAg
ICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2V0dXAiKSwg
c3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1kZXNjLT5zZXREdGxzU2V0dXAoc3RyaW5n
VmFsdWUpOworCisgICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiZmluZ2VycHJpbnRIYXNoRnVuY3Rpb24iKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAg
ICAgICAgIG1kZXNjLT5zZXREdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb24oc3RyaW5nVmFsdWUp
OworCisgICAgICAgICAgICBpZiAoZHRsc09iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
ZmluZ2VycHJpbnQiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1kZXNjLT5zZXRE
dGxzRmluZ2VycHJpbnQoc3RyaW5nVmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBzc3Jjc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwor
ICAgICAgICBtZGVzY09iamVjdC0+Z2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJzc3JjcyIpLCBzc3Jj
c0FycmF5KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3NyY3NBcnJheS0+
bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgc3NyY3NBcnJheS0+Z2V0KGopLT5hc0ludGVn
ZXIoaW50VmFsdWUpOworICAgICAgICAgICAgbWRlc2MtPmFkZFNzcmMoaW50VmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJjbmFtZSIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZGVzYy0+c2V0Q25hbWUoc3Ry
aW5nVmFsdWUpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChtZGVzY09iamVjdC0+Z2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiaWNlIiksIGljZU9iamVjdCkpIHsKKyAgICAgICAgICAgIGlm
IChpY2VPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInVmcmFnIiksIHN0cmluZ1ZhbHVl
KSkKKyAgICAgICAgICAgICAgICBtZGVzYy0+c2V0SWNlVWZyYWcoc3RyaW5nVmFsdWUpOworCisg
ICAgICAgICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXNzd29y
ZCIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWRlc2MtPnNldEljZVBhc3N3b3Jk
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5k
aWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpY2VP
YmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY2FuZGlkYXRlcyIpLCBjYW5kaWRhdGVzQXJy
YXkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2FuZGlkYXRlc0Fy
cmF5LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChqKS0+YXNPYmplY3QoY2FuZGlkYXRlT2Jq
ZWN0KTsKKworICAgICAgICAgICAgICAgIG1kZXNjLT5hZGRJY2VDYW5kaWRhdGUoY3JlYXRlQ2Fu
ZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGNvbmZpZ3VyYXRpb24tPmFkZE1lZGlhRGVzY3JpcHRpb24oV1RGTW92ZShtZGVzYykp
OworICAgIH0KKworICAgIHJldHVybiBjb25maWd1cmF0aW9uOworfQorCitzdGF0aWMgUmVmUHRy
PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlRnJvbUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWU7CisgICAgaWYgKCFJbnNwZWN0b3JW
YWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3Q7CisgICAgaWYgKCF2
YWx1ZS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gY3JlYXRlQ2FuZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpOworfQorCitz
dGF0aWMgU3RyaW5nIGNvbmZpZ3VyYXRpb25Ub0pTT04oY29uc3QgTWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvcmlnaW5hdG9yT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBvcmlnaW5hdG9yT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJzZXNz
aW9uSWQiKSwgY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSk7CisgICAgb3JpZ2luYXRvck9iamVj
dC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoInNlc3Npb25WZXJzaW9uIiksIGNvbmZpZ3VyYXRp
b24uc2Vzc2lvblZlcnNpb24oKSk7CisgICAgb2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJvcmlnaW5hdG9yIiksIG9yaWdpbmF0b3JPYmplY3QpOworCisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBtZWRpYURlc2NyaXB0aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworCisgICAgZm9yIChjb25zdCBSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+JiBtZGVzYyA6
IGNvbmZpZ3VyYXRpb24ubWVkaWFEZXNjcmlwdGlvbnMoKSkgeworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZGVzY09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisK
KyAgICAgICAgbWRlc2NPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgbWRl
c2MtPnR5cGUoKSk7CisgICAgICAgIG1kZXNjT2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgicG9ydCIpLCBtZGVzYy0+cG9ydCgpKTsKKyAgICAgICAgbWRlc2NPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoImFkZHJlc3MiKSwgbWRlc2MtPmFkZHJlc3MoKSk7CisgICAgICAgIG1k
ZXNjT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtb2RlIiksIG1kZXNjLT5tb2RlKCkp
OworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcGF5bG9hZHNBcnJheSA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgICAgICBmb3IgKFJlZlB0cjxNZWRpYVBheWxvYWQ+
IHBheWxvYWQgOiBtZGVzYy0+cGF5bG9hZHMoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGF5bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisK
KyAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJ0eXBl
IiksIHBheWxvYWQtPnR5cGUoKSk7CisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJlbmNvZGluZ05hbWUiKSwgcGF5bG9hZC0+ZW5jb2RpbmdOYW1lKCkp
OworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNs
b2NrUmF0ZSIpLCBwYXlsb2FkLT5jbG9ja1JhdGUoKSk7CisgICAgICAgICAgICBwYXlsb2FkT2Jq
ZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY2hhbm5lbHMiKSwgcGF5bG9hZC0+Y2hhbm5l
bHMoKSk7CisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJh
bCgiY2NtZmlyIiksIHBheWxvYWQtPmNjbWZpcigpKTsKKyAgICAgICAgICAgIHBheWxvYWRPYmpl
Y3QtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJuYWNrcGxpIiksIHBheWxvYWQtPm5hY2twbGko
KSk7CisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgi
bmFjayIpLCBwYXlsb2FkLT5uYWNrKCkpOworCisgICAgICAgICAgICBpZiAoIXBheWxvYWQtPnBh
cmFtZXRlcnMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKwor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHBheWxvYWQtPnBhcmFtZXRlcnMoKS5r
ZXlzKCkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNPYmplY3QtPnNldEludGVnZXIo
bmFtZSwgcGF5bG9hZC0+cGFyYW1ldGVycygpLmdldChuYW1lKSk7CisKKyAgICAgICAgICAgICAg
ICBwYXlsb2FkT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbWV0ZXJzIiksIHBh
cmFtZXRlcnNPYmplY3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXlsb2Fkc0Fy
cmF5LT5wdXNoT2JqZWN0KHBheWxvYWRPYmplY3QpOworICAgICAgICB9CisgICAgICAgIG1kZXNj
T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInBheWxvYWRzIiksIHBheWxvYWRzQXJyYXkp
OworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0Y3BPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBydGNwT2JqZWN0LT5zZXRCb29sZWFuKEFTQ0lJ
TGl0ZXJhbCgibXV4IiksIG1kZXNjLT5ydGNwTXV4KCkpOworICAgICAgICBydGNwT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhZGRyZXNzIiksIG1kZXNjLT5ydGNwQWRkcmVzcygpKTsK
KyAgICAgICAgcnRjcE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoInBvcnQiKSwgbWRl
c2MtPnJ0Y3BQb3J0KCkpOworICAgICAgICBtZGVzY09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicnRjcCIpLCBydGNwT2JqZWN0KTsKKworICAgICAgICBtZGVzY09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWVkaWFTdHJlYW1JZCIpLCBtZGVzYy0+bWVkaWFTdHJlYW1JZCgp
KTsKKyAgICAgICAgbWRlc2NPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lZGlhU3Ry
ZWFtVHJhY2tJZCIpLCBtZGVzYy0+bWVkaWFTdHJlYW1UcmFja0lkKCkpOworCisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzZXR1cCIp
LCBtZGVzYy0+ZHRsc1NldHVwKCkpOworICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJmaW5nZXJwcmludEhhc2hGdW5jdGlvbiIpLCBtZGVzYy0+ZHRsc0ZpbmdlcnBy
aW50SGFzaEZ1bmN0aW9uKCkpOworICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJmaW5nZXJwcmludCIpLCBtZGVzYy0+ZHRsc0ZpbmdlcnByaW50KCkpOworICAgICAg
ICBtZGVzY09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZHRscyIpLCBkdGxzT2JqZWN0
KTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZGVzYy0+c3Ny
Y3MoKSkKKyAgICAgICAgICAgIHNzcmNzQXJyYXktPnB1c2hEb3VibGUoc3NyYyk7CisgICAgICAg
IG1kZXNjT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoInNzcmNzIiksIHNzcmNzQXJyYXkp
OworCisgICAgICAgIG1kZXNjT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjbmFtZSIp
LCBtZGVzYy0+Y25hbWUoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaWNl
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWNlT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ1ZnJhZyIpLCBtZGVzYy0+aWNlVWZyYWcoKSk7CisgICAg
ICAgIGljZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFzc3dvcmQiKSwgbWRlc2Mt
PmljZVBhc3N3b3JkKCkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FuZGlk
YXRlc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoUmVm
UHRyPEljZUNhbmRpZGF0ZT4gY2FuZGlkYXRlIDogbWRlc2MtPmljZUNhbmRpZGF0ZXMoKSkKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZXNBcnJheS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmpl
Y3QoKmNhbmRpZGF0ZSkpOworCisgICAgICAgIGljZU9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJjYW5kaWRhdGVzIiksIGNhbmRpZGF0ZXNBcnJheSk7CisgICAgICAgIG1kZXNjT2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJpY2UiKSwgaWNlT2JqZWN0KTsKKworICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uc0FycmF5LT5wdXNoT2JqZWN0KG1kZXNjT2JqZWN0KTsKKyAgICB9Cisg
ICAgb2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoIm1lZGlhRGVzY3JpcHRpb25zIiksIG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXkpOworCisgICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5n
KCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgaWNlQ2FuZGlkYXRlVG9KU09OKGNvbnN0IEljZUNhbmRp
ZGF0ZSYgY2FuZGlkYXRlKQoreworICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY2Fu
ZGlkYXRlKS0+dG9KU09OU3RyaW5nKCk7Cit9CisKK1NEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFBy
b2Nlc3Nvcjo6Z2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3QKK3sKKyAgICBTdHJp
bmcgc2RwU3RyaW5nOworICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGUiLCBjb25maWd1cmF0
aW9uVG9KU09OKGNvbmZpZ3VyYXRpb24pLCBzZHBTdHJpbmcpKQorICAgICAgICByZXR1cm4gUmVz
dWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgb3V0U2RwU3RyaW5nID0gc2RwU3RyaW5nOworICAg
IHJldHVybiBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK1NEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFBy
b2Nlc3Nvcjo6cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24+JiBvdXRDb25maWd1cmF0aW9uKSBjb25zdAoreworICAgIFN0cmlu
ZyBzY3JpcHRPdXRwdXQ7CisgICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZSIsIHNkcCwgc2NyaXB0
T3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIGlm
IChzY3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJyb3IiKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpQ
YXJzZUVycm9yOworCisgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
bj4gY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihzY3JpcHRPdXRwdXQpOwor
ICAgIGlmICghY29uZmlndXJhdGlvbikKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxF
cnJvcjsKKworICAgIG91dENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHJldHVy
biBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK1NEUFByb2Nlc3Nvcjo6UmVzdWx0IFNEUFByb2Nlc3Nv
cjo6Z2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBT
dHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0Cit7CisgICAgU3RyaW5nIGNhbmRpZGF0ZUxp
bmU7CisgICAgaWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUiLCBpY2VDYW5k
aWRhdGVUb0pTT04oY2FuZGlkYXRlKSwgY2FuZGlkYXRlTGluZSkpCisgICAgICAgIHJldHVybiBS
ZXN1bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBvdXRDYW5kaWRhdGVMaW5lID0gY2FuZGlkYXRl
TGluZTsKKyAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOworfQorCitTRFBQcm9jZXNzb3I6OlJl
c3VsdCBTRFBQcm9jZXNzb3I6OnBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJpbmcmIGNhbmRp
ZGF0ZUxpbmUsIFJlZlB0cjxJY2VDYW5kaWRhdGU+JiBvdXRDYW5kaWRhdGUpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nIHNjcmlwdE91dHB1dDsKKyAgICBpZiAoIWNhbGxTY3JpcHQoInBhcnNlQ2FuZGlk
YXRlTGluZSIsIGNhbmRpZGF0ZUxpbmUsIHNjcmlwdE91dHB1dCkpCisgICAgICAgIHJldHVybiBS
ZXN1bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVy
cm9yIikKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6UGFyc2VFcnJvcjsKKworICAgIFJlZlB0cjxJ
Y2VDYW5kaWRhdGU+IGNhbmRpZGF0ZSA9IGljZUNhbmRpZGF0ZUZyb21KU09OKHNjcmlwdE91dHB1
dCk7CisgICAgaWYgKCFjYW5kaWRhdGUpCisgICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVybmFs
RXJyb3I7CisKKyAgICBvdXRDYW5kaWRhdGUgPSBjYW5kaWRhdGU7CisgICAgcmV0dXJuIFJlc3Vs
dDo6U3VjY2VzczsKK30KKworYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFN0cmluZyYgb3V0UmVz
dWx0KSBjb25zdAoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFt
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faXNvbGF0ZWRXb3JsZCkK
KyAgICAgICAgbV9pc29sYXRlZFdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoSlNET01X
aW5kb3c6OmNvbW1vblZNKCkpOworCisgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJv
bGxlciA9IGRvY3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKTsKKyAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRD
b250cm9sbGVyLmdsb2JhbE9iamVjdCgqbV9pc29sYXRlZFdvcmxkKSk7CisgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgSlNDOjpKU1ZhbHVlIHByb2JlRnVuY3Rpb25WYWx1
ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiZ2VuZXJhdGUiKSk7CisgICAgaWYgKCFwcm9iZUZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlv
bigpKSB7CisgICAgICAgIFVSTCBzY3JpcHRVUkw7CisgICAgICAgIHNjcmlwdENvbnRyb2xsZXIu
ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9pc29sYXRlZFdvcmxkKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVj
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZnVuY3Rpb25OYW1lKSk7CisgICAg
aWYgKCFmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4
ZWMpOworICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlTm9uZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0Owor
ICAgIGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywgYXJndW1lbnQpKTsKKworICAg
IEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgcHJpbnRmKCJTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoKTog
JXMoKSB0aHJld1xuIiwgZnVuY3Rpb25OYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghcmVzdWx0LmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91
dFJlc3VsdCA9IHJlc3VsdC5nZXRTdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nl
c3Nvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I0MTVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3Iu
aApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU0RQUHJvY2Vzc29yX2gKKyNkZWZpbmUg
U0RQUHJvY2Vzc29yX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgIkljZUNhbmRpZGF0ZS5oIgor
I2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBET01XcmFwcGVyV29ybGQ7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworCitjbGFzcyBTRFBQcm9jZXNzb3IgOiBwdWJsaWMgQ29udGV4dERlc3Ry
dWN0aW9uT2JzZXJ2ZXIgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUmVzdWx0IHsKKyAgICAg
ICAgU3VjY2VzcyA9IDEsCisgICAgICAgIEludGVybmFsRXJyb3IgPSAyLAorICAgICAgICBQYXJz
ZUVycm9yID0gMworICAgIH07CisKKyAgICBTRFBQcm9jZXNzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOworCisgICAgUmVzdWx0IGdlbmVyYXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbiYsIFN0cmluZyYgb3V0U2RwU3RyaW5nKSBjb25zdDsKKyAgICBSZXN1bHQg
cGFyc2UoY29uc3QgU3RyaW5nJiBzZHAsIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+JikgY29uc3Q7CisKKyAgICBSZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNv
bnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7CisgICAg
UmVzdWx0IHBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJpbmcmIGNhbmRpZGF0ZUxpbmUsIFJl
ZlB0cjxJY2VDYW5kaWRhdGU+JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjYWxsU2Ny
aXB0KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBT
dHJpbmcmIG91dFJlc3VsdCkgY29uc3Q7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxET01XcmFwcGVy
V29ybGQ+IG1faXNvbGF0ZWRXb3JsZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBTRFBQcm9jZXNzb3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZjODhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanMKQEAgLTAsMCArMSw1OTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworInVzZSBzdHJpY3QiOworCitp
ZiAodHlwZW9mKFNEUCkgPT0gInVuZGVmaW5lZCIpCisgICAgdmFyIFNEUCA9IHt9OworCisoZnVu
Y3Rpb24gKCkgeworICAgIHZhciByZWdleHBzID0geworICAgICAgICAidmxpbmUiOiAiXnY9KFtc
XGRdKykuKiQiLAorICAgICAgICAib2xpbmUiOiAiXm89KFtcXHdcXC1AXFwuXSspIChbXFxkXSsp
IChbXFxkXSspIElOIChJUFs0Nl0pIChbXFxkXFwuYS1mXFw6XSspLiokIiwKKyAgICAgICAgInNs
aW5lIjogIl5zPSguKikkIiwKKyAgICAgICAgInRsaW5lIjogIl50PShbXFxkXSspIChbXFxkXSsp
LiokIiwKKyAgICAgICAgImNsaW5lIjogIl5jPUlOIChJUFs0Nl0pIChbXFxkXFwuYS1mXFw6XSsp
LiokIiwKKyAgICAgICAgIm1zaWRzZW1hbnRpYyI6ICJeYT1tc2lkLXNlbWFudGljOiAqV01TIC4q
JCIsCisgICAgICAgICJtYmxvY2siOiAiXm09KGF1ZGlvfHZpZGVvfGFwcGxpY2F0aW9uKSAoW1xc
ZF0rKSAoW0EtWi9dKykoW1xcZCBdKikkXFxyP1xcbiIsCisgICAgICAgICJtb2RlIjogIl5hPShz
ZW5kcmVjdnxzZW5kb25seXxyZWN2b25seXxpbmFjdGl2ZSkuKiQiLAorICAgICAgICAicnRwbWFw
IjogIl5hPXJ0cG1hcDoke3R5cGV9IChbXFx3XFwtXSspLyhbXFxkXSspLz8oW1xcZF0rKT8uKiQi
LAorICAgICAgICAiZm10cCI6ICJeYT1mbXRwOiR7dHlwZX0gKFtcXHdcXC09O10rKS4qJCIsCisg
ICAgICAgICJwYXJhbSI6ICIoW1xcd1xcLV0rKT0oW1xcd1xcLV0rKTs/IiwKKyAgICAgICAgIm5h
Y2siOiAiXmE9cnRjcC1mYjoke3R5cGV9IG5hY2skIiwKKyAgICAgICAgIm5hY2twbGkiOiAiXmE9
cnRjcC1mYjoke3R5cGV9IG5hY2sgcGxpJCIsCisgICAgICAgICJjY21maXIiOiAiXmE9cnRjcC1m
Yjoke3R5cGV9IGNjbSBmaXIkIiwKKyAgICAgICAgImVyaWNzY3JlYW0iOiAiXmE9cnRjcC1mYjok
e3R5cGV9IGVyaWNzY3JlYW0kIiwKKyAgICAgICAgInJ0Y3AiOiAiXmE9cnRjcDooW1xcZF0rKSgg
SU4gKElQWzQ2XSkgKFtcXGRcXC5hLWZcXDpdKykpPy4qJCIsCisgICAgICAgICJydGNwbXV4Ijog
Il5hPXJ0Y3AtbXV4LiokIiwKKyAgICAgICAgImNuYW1lIjogIl5hPXNzcmM6KFxcZCspIGNuYW1l
OihbXFx3Ky9cXC1AXFwuXFx7XFx9XSspLiokIiwKKyAgICAgICAgIm1zaWQiOiAiXmE9KHNzcmM6
XFxkKyApP21zaWQ6KFtcXHcrL1xcLT1dKykgKyhbXFx3Ky9cXC09XSspLiokIiwKKyAgICAgICAg
InVmcmFnIjogIl5hPWljZS11ZnJhZzooW1xcdysvXSopLiokIiwKKyAgICAgICAgInB3ZCI6ICJe
YT1pY2UtcHdkOihbXFx3Ky9dKikuKiQiLAorICAgICAgICAiY2FuZGlkYXRlIjogIl5hPWNhbmRp
ZGF0ZTooXFxkKykgKFxcZCkgKFVEUHxUQ1ApIChbXFxkXFwuXSopIChbXFxkXFwuYS1mXFw6XSop
IChcXGQqKSIgKworICAgICAgICAgICAgIiB0eXAgKFthLXpdKikoIHJhZGRyIChbXFxkXFwuYS1m
XFw6XSopIHJwb3J0IChcXGQqKSk/IiArCisgICAgICAgICAgICAiKCB0Y3B0eXBlIChhY3RpdmV8
cGFzc2l2ZXxzbykpPy4qJCIsCisgICAgICAgICJmaW5nZXJwcmludCI6ICJeYT1maW5nZXJwcmlu
dDooc2hhLTF8c2hhLTI1NikgKFtBLUZhLWZcXGRcOl0rKS4qJCIsCisgICAgICAgICJzZXR1cCI6
ICJeYT1zZXR1cDooYWN0cGFzc3xhY3RpdmV8cGFzc2l2ZSkuKiQiLAorICAgICAgICAic2N0cG1h
cCI6ICJeYT1zY3RwbWFwOiR7cG9ydH0gKFtcXHdcXC1dKykoIFtcXGRdKyk/LiokIgorICAgIH07
CisKKyAgICB2YXIgdGVtcGxhdGVzID0geworICAgICAgICAic2RwIjoKKyAgICAgICAgICAgICJ2
PSR7dmVyc2lvbn1cclxuIiArCisgICAgICAgICAgICAibz0ke3VzZXJuYW1lfSAke3Nlc3Npb25J
ZH0gJHtzZXNzaW9uVmVyc2lvbn0gJHtuZXRUeXBlfSAke2FkZHJlc3NUeXBlfSAke2FkZHJlc3N9
XHJcbiIgKworICAgICAgICAgICAgInM9JHtzZXNzaW9uTmFtZX1cclxuIiArCisgICAgICAgICAg
ICAidD0ke3N0YXJ0VGltZX0gJHtzdG9wVGltZX1cclxuIiArCisgICAgICAgICAgICAiJHttc2lk
c2VtYW50aWNMaW5lfSIsCisKKyAgICAgICAgIm1zaWRzZW1hbnRpYyI6ICJhPW1zaWQtc2VtYW50
aWM6V01TICR7bWVkaWFTdHJlYW1JZHN9XHJcbiIsCisKKyAgICAgICAgIm1ibG9jayI6CisgICAg
ICAgICAgICAibT0ke3R5cGV9ICR7cG9ydH0gJHtwcm90b2NvbH0gJHtmbXR9XHJcbiIgKworICAg
ICAgICAgICAgImM9JHtuZXRUeXBlfSAke2FkZHJlc3NUeXBlfSAke2FkZHJlc3N9XHJcbiIgKwor
ICAgICAgICAgICAgIiR7cnRjcExpbmV9IiArCisgICAgICAgICAgICAiJHtydGNwTXV4TGluZX0i
ICsKKyAgICAgICAgICAgICJhPSR7bW9kZX1cclxuIiArCisgICAgICAgICAgICAiJHtydHBNYXBM
aW5lc30iICsKKyAgICAgICAgICAgICIke2ZtdHBMaW5lc30iICsKKyAgICAgICAgICAgICIke25h
Y2tMaW5lc30iICsKKyAgICAgICAgICAgICIke25hY2twbGlMaW5lc30iICsKKyAgICAgICAgICAg
ICIke2NjbWZpckxpbmVzfSIgKworICAgICAgICAgICAgIiR7ZXJpY1NjcmVhbUxpbmVzfSIgKwor
ICAgICAgICAgICAgIiR7Y25hbWVMaW5lc30iICsKKyAgICAgICAgICAgICIke21zaWRMaW5lc30i
ICsKKyAgICAgICAgICAgICIke2ljZUNyZWRlbnRpYWxMaW5lc30iICsKKyAgICAgICAgICAgICIk
e2NhbmRpZGF0ZUxpbmVzfSIgKworICAgICAgICAgICAgIiR7ZHRsc0ZpbmdlcnByaW50TGluZX0i
ICsKKyAgICAgICAgICAgICIke2R0bHNTZXR1cExpbmV9IiArCisgICAgICAgICAgICAiJHtzY3Rw
bWFwTGluZX0iLAorCisgICAgICAgICJydGNwIjogImE9cnRjcDoke3BvcnR9JHtbIF1uZXRUeXBl
fSR7WyBdYWRkcmVzc1R5cGV9JHtbIF1hZGRyZXNzfVxyXG4iLAorICAgICAgICAicnRjcE11eCI6
ICJhPXJ0Y3AtbXV4XHJcbiIsCisKKyAgICAgICAgInJ0cE1hcCI6ICJhPXJ0cG1hcDoke3R5cGV9
ICR7ZW5jb2RpbmdOYW1lfS8ke2Nsb2NrUmF0ZX0ke1svXWNoYW5uZWxzfVxyXG4iLAorICAgICAg
ICAiZm10cCI6ICJhPWZtdHA6JHt0eXBlfSAke3BhcmFtZXRlcnN9XHJcbiIsCisgICAgICAgICJu
YWNrIjogImE9cnRjcC1mYjoke3R5cGV9IG5hY2tcclxuIiwKKyAgICAgICAgIm5hY2twbGkiOiAi
YT1ydGNwLWZiOiR7dHlwZX0gbmFjayBwbGlcclxuIiwKKyAgICAgICAgImNjbWZpciI6ICJhPXJ0
Y3AtZmI6JHt0eXBlfSBjY20gZmlyXHJcbiIsCisgICAgICAgICJlcmljc2NyZWFtIjogImE9cnRj
cC1mYjoke3R5cGV9IGVyaWNzY3JlYW1cclxuIiwKKworICAgICAgICAiY25hbWUiOiAiYT1zc3Jj
OiR7c3NyY30gY25hbWU6JHtjbmFtZX1cclxuIiwKKyAgICAgICAgIm1zaWQiOiAiYT1tc2lkOiR7
bWVkaWFTdHJlYW1JZH0gJHttZWRpYVN0cmVhbVRyYWNrSWR9XHJcbiIsCisKKyAgICAgICAgImlj
ZUNyZWRlbnRpYWxzIjoKKyAgICAgICAgICAgICJhPWljZS11ZnJhZzoke3VmcmFnfVxyXG4iICsK
KyAgICAgICAgICAgICJhPWljZS1wd2Q6JHtwYXNzd29yZH1cclxuIiwKKworICAgICAgICAiY2Fu
ZGlkYXRlIjoKKyAgICAgICAgICAgICJhPWNhbmRpZGF0ZToke2ZvdW5kYXRpb259ICR7Y29tcG9u
ZW50SWR9ICR7dHJhbnNwb3J0fSAke3ByaW9yaXR5fSAke2FkZHJlc3N9ICR7cG9ydH0iICsKKyAg
ICAgICAgICAgICIgdHlwICR7dHlwZX0ke1sgcmFkZHIgXXJlbGF0ZWRBZGRyZXNzfSR7WyBycG9y
dCBdcmVsYXRlZFBvcnR9JHtbIHRjcHR5cGUgXXRjcFR5cGV9XHJcbiIsCisKKyAgICAgICAgImR0
bHNGaW5nZXJwcmludCI6ICJhPWZpbmdlcnByaW50OiR7ZmluZ2VycHJpbnRIYXNoRnVuY3Rpb259
ICR7ZmluZ2VycHJpbnR9XHJcbiIsCisgICAgICAgICJkdGxzU2V0dXAiOiAiYT1zZXR1cDoke3Nl
dHVwfVxyXG4iLAorCisgICAgICAgICJzY3RwbWFwIjogImE9c2N0cG1hcDoke3BvcnR9ICR7YXBw
fSR7WyBdc3RyZWFtc31cclxuIgorICAgIH07CisKKyAgICBmdW5jdGlvbiBtYXRjaChkYXRhLCBw
YXR0ZXJuLCBmbGFncywgYWx0KSB7CisgICAgICAgIHZhciByID0gbmV3IFJlZ0V4cChwYXR0ZXJu
LCBmbGFncyk7CisgICAgICAgIHJldHVybiBkYXRhLm1hdGNoKHIpIHx8IGFsdCAmJiBhbHQubWF0
Y2gocikgfHwgbnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGREZWZhdWx0cyhvYmosIGRl
ZmF1bHRzKSB7CisgICAgICAgIGZvciAodmFyIHAgaW4gZGVmYXVsdHMpIHsKKyAgICAgICAgICAg
IGlmICghZGVmYXVsdHMuaGFzT3duUHJvcGVydHkocCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAodHlwZW9mKG9ialtwXSkgPT0gInVuZGVmaW5lZCIpCisgICAg
ICAgICAgICAgICAgb2JqW3BdID0gZGVmYXVsdHNbcF07CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBmaWxsVGVtcGxhdGUodGVtcGxhdGUsIGluZm8pIHsKKyAgICAgICAgdmFyIHRl
eHQgPSB0ZW1wbGF0ZTsKKyAgICAgICAgZm9yICh2YXIgcCBpbiBpbmZvKSB7CisgICAgICAgICAg
ICBpZiAoIWluZm8uaGFzT3duUHJvcGVydHkocCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB2YXIgciA9IG5ldyBSZWdFeHAoIlxcJHsoXFxbW15cXF1dK1xcXSk/IiAr
IHAgKyAiKFxcW1teXFxdXStcXF0pP30iKTsKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxh
Y2UociwgZnVuY3Rpb24gKF8sIHByZWZpeCwgc3VmZml4KSB7CisgICAgICAgICAgICAgICAgaWYg
KCFpbmZvW3BdICYmIGluZm9bcF0gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIi
OworICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeCA/IHByZWZpeC5zdWJzdHIoMSwgcHJl
Zml4Lmxlbmd0aCAtIDIpIDogIiI7CisgICAgICAgICAgICAgICAgc3VmZml4ID0gc3VmZml4ID8g
c3VmZml4LnN1YnN0cigxLCBzdWZmaXgubGVuZ3RoIC0gMikgOiAiIjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcHJlZml4ICsgaW5mb1twXSArIHN1ZmZpeDsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0ZXh0OworICAgIH0KKworICAgIFNEUC5wYXJzZSA9IGZ1
bmN0aW9uIChzZHBUZXh0KSB7CisgICAgICAgIHNkcFRleHQgPSBuZXcgU3RyaW5nKHNkcFRleHQp
OworICAgICAgICB2YXIgc2RwT2JqID0ge307CisgICAgICAgIHZhciBwYXJ0cyA9IHNkcFRleHQu
c3BsaXQobmV3IFJlZ0V4cChyZWdleHBzLm1ibG9jaywgIm0iKSkgfHwgW3NkcFRleHRdOworICAg
ICAgICB2YXIgc2Jsb2NrID0gcGFydHMuc2hpZnQoKTsKKyAgICAgICAgdmFyIHZlcnNpb24gPSBw
YXJzZUludCgobWF0Y2goc2Jsb2NrLCByZWdleHBzLnZsaW5lLCAibSIpIHx8IFtdKVsxXSk7Cisg
ICAgICAgIGlmICghaXNOYU4odmVyc2lvbikpCisgICAgICAgICAgICBzZHBPYmoudmVyc2lvbiA9
IHZlcnNpb247CisgICAgICAgIHZhciBvcmlnaW5hdG9yID0gbWF0Y2goc2Jsb2NrLCByZWdleHBz
Lm9saW5lLCAibSIpOzsKKyAgICAgICAgaWYgKG9yaWdpbmF0b3IpIHsKKyAgICAgICAgICAgIHNk
cE9iai5vcmlnaW5hdG9yID0geworICAgICAgICAgICAgICAgICJ1c2VybmFtZSI6IG9yaWdpbmF0
b3JbMV0sCisgICAgICAgICAgICAgICAgInNlc3Npb25JZCI6IG9yaWdpbmF0b3JbMl0sCisgICAg
ICAgICAgICAgICAgInNlc3Npb25WZXJzaW9uIjogcGFyc2VJbnQob3JpZ2luYXRvclszXSksCisg
ICAgICAgICAgICAgICAgIm5ldFR5cGUiOiAiSU4iLAorICAgICAgICAgICAgICAgICJhZGRyZXNz
VHlwZSI6IG9yaWdpbmF0b3JbNF0sCisgICAgICAgICAgICAgICAgImFkZHJlc3MiOiBvcmlnaW5h
dG9yWzVdCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHZhciBzZXNzaW9uTmFt
ZSA9IG1hdGNoKHNibG9jaywgcmVnZXhwcy5zbGluZSwgIm0iKTsKKyAgICAgICAgaWYgKHNlc3Np
b25OYW1lKQorICAgICAgICAgICAgc2RwT2JqLnNlc3Npb25OYW1lID0gc2Vzc2lvbk5hbWVbMV07
CisgICAgICAgIHZhciBzZXNzaW9uVGltZSA9IG1hdGNoKHNibG9jaywgcmVnZXhwcy50bGluZSwg
Im0iKTsKKyAgICAgICAgaWYgKHNlc3Npb25UaW1lKSB7CisgICAgICAgICAgICBzZHBPYmouc3Rh
cnRUaW1lID0gcGFyc2VJbnQoc2Vzc2lvblRpbWVbMV0pOworICAgICAgICAgICAgc2RwT2JqLnN0
b3BUaW1lID0gcGFyc2VJbnQoc2Vzc2lvblRpbWVbMl0pOworICAgICAgICB9CisgICAgICAgIHZh
ciBoYXNNZWRpYVN0cmVhbUlkID0gISFtYXRjaChzYmxvY2ssIHJlZ2V4cHMubXNpZHNlbWFudGlj
LCAibSIpOworICAgICAgICBzZHBPYmoubWVkaWFEZXNjcmlwdGlvbnMgPSBbXTsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSA1KSB7CisgICAgICAgICAg
ICB2YXIgbWVkaWFEZXNjcmlwdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAidHlwZSI6IHBhcnRz
W2ldLAorICAgICAgICAgICAgICAgICJwb3J0IjogcGFyc2VJbnQocGFydHNbaSArIDFdKSwKKyAg
ICAgICAgICAgICAgICAicHJvdG9jb2wiOiBwYXJ0c1tpICsgMl0sCisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgdmFyIGZtdCA9IHBhcnRzW2kgKyAzXS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhB
MF0rLywgJycpCisgICAgICAgICAgICAgICAgLnNwbGl0KC8gKy8pCisgICAgICAgICAgICAgICAg
Lm1hcChmdW5jdGlvbiAoeCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQo
eCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB2YXIgbWJsb2NrID0gcGFydHNb
aSArIDRdOworCisgICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IG1hdGNoKG1ibG9jaywgcmVn
ZXhwcy5jbGluZSwgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHsK
KyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm5ldFR5cGUgPSAiSU4iOworICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzc1R5cGUgPSBjb25uZWN0aW9uWzFdOwor
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uYWRkcmVzcyA9IGNvbm5lY3Rpb25bMl07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbW9kZSA9IG1hdGNoKG1ibG9jaywgcmVn
ZXhwcy5tb2RlLCAibSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAobW9kZSkKKyAgICAgICAg
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1vZGUgPSBtb2RlWzFdOworCisgICAgICAgICAgICB2
YXIgcGF5bG9hZFR5cGVzID0gW107CisgICAgICAgICAgICBpZiAobWF0Y2gobWVkaWFEZXNjcmlw
dGlvbi5wcm90b2NvbCwgIihVRFAvVExTKT9SVFAvUz9BVlBGPyIpKSB7CisgICAgICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5wYXlsb2FkcyA9IFtdOworICAgICAgICAgICAgICAgIHBheWxv
YWRUeXBlcyA9IGZtdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBheWxvYWRUeXBlcy5m
b3JFYWNoKGZ1bmN0aW9uIChwYXlsb2FkVHlwZSkgeworICAgICAgICAgICAgICAgIHZhciBwYXls
b2FkID0geyAidHlwZSI6IHBheWxvYWRUeXBlIH07CisgICAgICAgICAgICAgICAgdmFyIHJ0cG1h
cExpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhwcy5ydHBtYXAsIHBheWxvYWQpOworICAgICAgICAg
ICAgICAgIHZhciBydHBtYXAgPSBtYXRjaChtYmxvY2ssIHJ0cG1hcExpbmUsICJtIik7CisgICAg
ICAgICAgICAgICAgaWYgKHJ0cG1hcCkgeworICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmVu
Y29kaW5nTmFtZSA9IHJ0cG1hcFsxXTsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jbG9j
a1JhdGUgPSBwYXJzZUludChydHBtYXBbMl0pOworICAgICAgICAgICAgICAgICAgICBpZiAobWVk
aWFEZXNjcmlwdGlvbi50eXBlID09ICJhdWRpbyIpCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXlsb2FkLmNoYW5uZWxzID0gcGFyc2VJbnQocnRwbWFwWzNdKSB8fCAxOworICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChtZWRpYURlc2NyaXB0aW9uLnR5cGUgPT0gInZpZGVvIikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG5hY2tMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMu
bmFjaywgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLm5hY2sgPSAh
IW1hdGNoKG1ibG9jaywgbmFja0xpbmUsICJtIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbmFja3BsaUxpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhwcy5uYWNrcGxpLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQubmFja3BsaSA9ICEhbWF0Y2gobWJsb2Nr
LCBuYWNrcGxpTGluZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjY21maXJM
aW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMuY2NtZmlyLCBwYXlsb2FkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBheWxvYWQuY2NtZmlyID0gISFtYXRjaChtYmxvY2ssIGNjbWZpckxpbmUs
ICJtIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJpY1NjcmVhbUxpbmUgPSBmaWxs
VGVtcGxhdGUocmVnZXhwcy5lcmljc2NyZWFtLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBheWxvYWQuZXJpY3NjcmVhbSA9ICEhbWF0Y2gobWJsb2NrLCBlcmljU2NyZWFtTGlu
ZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGF5bG9hZFR5cGUgPT0gMCB8fCBwYXlsb2FkVHlwZSA9PSA4KSB7CisgICAgICAgICAgICAg
ICAgICAgIHBheWxvYWQuZW5jb2RpbmdOYW1lID0gcGF5bG9hZFR5cGUgPT0gOCA/ICJQQ01BIiA6
ICJQQ01VIjsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jbG9ja1JhdGUgPSA4MDAwOwor
ICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmNoYW5uZWxzID0gMTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFyIGZtdHBMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMu
Zm10cCwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgdmFyIGZtdHAgPSBtYXRjaChtYmxvY2ss
IGZtdHBMaW5lLCAibSIpOworICAgICAgICAgICAgICAgIGlmIChmbXRwKSB7CisgICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQucGFyYW1ldGVycyA9IHt9OworICAgICAgICAgICAgICAgICAgICBm
bXRwWzFdLnJlcGxhY2UobmV3IFJlZ0V4cChyZWdleHBzLnBhcmFtLCAiZyIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oXywga2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAoXywg
YykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50b1VwcGVyQ2Fz
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBheWxvYWQucGFyYW1ldGVyc1trZXldID0gaXNOYU4oK3ZhbHVlKSA/IHZhbHVl
IDogK3ZhbHVlOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5wYXlsb2Fkcy5wdXNoKHBheWxvYWQpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHZhciBydGNwID0gbWF0Y2gobWJsb2NrLCBy
ZWdleHBzLnJ0Y3AsICJtIik7CisgICAgICAgICAgICBpZiAocnRjcCkgeworICAgICAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcCA9IHsKKyAgICAgICAgICAgICAgICAgICAgIm5ldFR5
cGUiOiAiSU4iLAorICAgICAgICAgICAgICAgICAgICAicG9ydCI6IHBhcnNlSW50KHJ0Y3BbMV0p
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpZiAocnRjcFsyXSkgeworICAg
ICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzc1R5cGUgPSBydGNw
WzNdOworICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzcyA9
IHJ0Y3BbNF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIHJ0Y3BtdXggPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMucnRjcG11eCwgIm0iLCBzYmxvY2sp
OworICAgICAgICAgICAgaWYgKHJ0Y3BtdXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlh
RGVzY3JpcHRpb24ucnRjcCkKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5y
dGNwID0ge307CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLm11eCA9IHRy
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjbmFtZUxpbmVzID0gbWF0Y2go
bWJsb2NrLCByZWdleHBzLmNuYW1lLCAibWciKTsKKyAgICAgICAgICAgIGlmIChjbmFtZUxpbmVz
KSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zc3JjcyA9IFtdOworICAgICAg
ICAgICAgICAgIGNuYW1lTGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgY25hbWUgPSBtYXRjaChsaW5lLCByZWdleHBzLmNuYW1lLCAibSIpOwor
ICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNzcmNzLnB1c2gocGFyc2VJbnQo
Y25hbWVbMV0pKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtZWRpYURlc2NyaXB0aW9uLmNu
YW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5jbmFtZSA9IGNu
YW1lWzJdOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaGFzTWVkaWFTdHJlYW1JZCkgeworICAgICAgICAgICAgICAgIHZhciBtc2lkID0gbWF0
Y2gobWJsb2NrLCByZWdleHBzLm1zaWQsICJtIik7CisgICAgICAgICAgICAgICAgaWYgKG1zaWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkID0g
bXNpZFsyXTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVh
bVRyYWNrSWQgPSBtc2lkWzNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmFyIHVmcmFnID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnVmcmFnLCAibSIs
IHNibG9jayk7CisgICAgICAgICAgICB2YXIgcHdkID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnB3
ZCwgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgaWYgKHVmcmFnICYmIHB3ZCkgeworICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlID0geworICAgICAgICAgICAgICAgICAgICAi
dWZyYWciOiB1ZnJhZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIjogcHdkWzFd
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjYW5k
aWRhdGVMaW5lcyA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5jYW5kaWRhdGUsICJtaWciKTsKKyAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGVMaW5lcykgeworICAgICAgICAgICAgICAgIGlmICghbWVk
aWFEZXNjcmlwdGlvbi5pY2UpCisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
aWNlID0ge307CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UuY2FuZGlkYXRl
cyA9IFtdOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUxpbmVzLmZvckVhY2goZnVuY3Rpb24g
KGxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZUxpbmUgPSBtYXRjaChs
aW5lLCByZWdleHBzLmNhbmRpZGF0ZSwgIm1pIik7CisgICAgICAgICAgICAgICAgICAgIHZhciBj
YW5kaWRhdGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZm91bmRhdGlvbiI6IGNhbmRp
ZGF0ZUxpbmVbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcG9uZW50SWQiOiBwYXJz
ZUludChjYW5kaWRhdGVMaW5lWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0cmFuc3Bv
cnQiOiBjYW5kaWRhdGVMaW5lWzNdLnRvVXBwZXJDYXNlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAicHJpb3JpdHkiOiBwYXJzZUludChjYW5kaWRhdGVMaW5lWzRdKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJhZGRyZXNzIjogY2FuZGlkYXRlTGluZVs1XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICJwb3J0IjogcGFyc2VJbnQoY2FuZGlkYXRlTGluZVs2XSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAidHlwZSI6IGNhbmRpZGF0ZUxpbmVbN10KKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUxpbmVbOV0pCisgICAgICAg
ICAgICAgICAgICAgICAgICBjYW5kaWRhdGUucmVsYXRlZEFkZHJlc3MgPSBjYW5kaWRhdGVMaW5l
WzldOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGNhbmRpZGF0ZUxpbmVbMTBdKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCA9IHBhcnNlSW50
KGNhbmRpZGF0ZUxpbmVbMTBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUxp
bmVbMTJdKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlLnRjcFR5cGUgPSBjYW5k
aWRhdGVMaW5lWzEyXTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FuZGlkYXRlLnRy
YW5zcG9ydCA9PSAiVENQIikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS5wb3J0ID09IDAgfHwgY2FuZGlkYXRlLnBvcnQgPT0gOSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZS50Y3BUeXBlID0gImFjdGl2ZSI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlLnBvcnQgPSA5OworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UuY2FuZGlkYXRlcy5wdXNoKGNhbmRpZGF0ZSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBmaW5nZXJw
cmludCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5maW5nZXJwcmludCwgIm1pIiwgc2Jsb2NrKTsK
KyAgICAgICAgICAgIGlmIChmaW5nZXJwcmludCkgeworICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24uZHRscyA9IHsKKyAgICAgICAgICAgICAgICAgICAgImZpbmdlcnByaW50SGFzaEZ1
bmN0aW9uIjogZmluZ2VycHJpbnRbMV0udG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICAgICAgICAg
ICAgImZpbmdlcnByaW50IjogZmluZ2VycHJpbnRbMl0udG9VcHBlckNhc2UoKQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2V0dXAgPSBtYXRjaCht
YmxvY2ssIHJlZ2V4cHMuc2V0dXAsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChzZXR1
cCkgeworICAgICAgICAgICAgICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi5kdGxzKQorICAgICAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHMgPSB7fTsKKyAgICAgICAgICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLmR0bHMuc2V0dXAgPSBzZXR1cFsxXTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ucHJvdG9jb2wgPT0gIkRUTFMvU0NU
UCIpIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNjdHAgPSB7CisgICAgICAg
ICAgICAgICAgICAgICJwb3J0IjogZm10WzBdCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB2YXIgc2N0cG1hcExpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhwcy5zY3RwbWFwLCBt
ZWRpYURlc2NyaXB0aW9uLnNjdHApOworICAgICAgICAgICAgICAgIHZhciBzY3RwbWFwID0gbWF0
Y2gobWJsb2NrLCBzY3RwbWFwTGluZSwgIm0iKTsKKyAgICAgICAgICAgICAgICBpZiAoc2N0cG1h
cCkgeworICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNjdHAuYXBwID0gc2N0
cG1hcFsxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjdHBtYXBbMl0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNjdHAuc3RyZWFtcyA9IHBhcnNlSW50KHNj
dHBtYXBbMl0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zLnB1c2gobWVkaWFEZXNjcmlwdGlvbik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc2RwT2JqOworICAgIH07CisKKyAgICBTRFAuZ2VuZXJh
dGUgPSBmdW5jdGlvbiAoc2RwT2JqKSB7CisgICAgICAgIHNkcE9iaiA9IEpTT04ucGFyc2UoSlNP
Ti5zdHJpbmdpZnkoc2RwT2JqKSk7CisgICAgICAgIGFkZERlZmF1bHRzKHNkcE9iaiwgeworICAg
ICAgICAgICAgInZlcnNpb24iOiAwLAorICAgICAgICAgICAgIm9yaWdpbmF0b3IiOiB7fSwKKyAg
ICAgICAgICAgICJzZXNzaW9uTmFtZSI6ICItIiwKKyAgICAgICAgICAgICJzdGFydFRpbWUiOiAw
LAorICAgICAgICAgICAgInN0b3BUaW1lIjogMCwKKyAgICAgICAgICAgICJtZWRpYURlc2NyaXB0
aW9ucyI6IFtdCisgICAgICAgIH0pOworICAgICAgICBhZGREZWZhdWx0cyhzZHBPYmoub3JpZ2lu
YXRvciwgeworICAgICAgICAgICAgInVzZXJuYW1lIjogIi0iLAorICAgICAgICAgICAgInNlc3Np
b25JZCI6ICIiICsgTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSArICtuZXcgRGF0ZSgpKSAqIDFl
NiksCisgICAgICAgICAgICAic2Vzc2lvblZlcnNpb24iOiAxLAorICAgICAgICAgICAgIm5ldFR5
cGUiOiAiSU4iLAorICAgICAgICAgICAgImFkZHJlc3NUeXBlIjogIklQNCIsCisgICAgICAgICAg
ICAiYWRkcmVzcyI6ICIxMjcuMC4wLjEiCisgICAgICAgIH0pOworICAgICAgICB2YXIgc2RwVGV4
dCA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuc2RwLCBzZHBPYmopOworICAgICAgICBzZHBUZXh0
ID0gZmlsbFRlbXBsYXRlKHNkcFRleHQsIHNkcE9iai5vcmlnaW5hdG9yKTsKKworICAgICAgICB2
YXIgbXNpZHNlbWFudGljTGluZSA9ICIiOworICAgICAgICB2YXIgbWVkaWFTdHJlYW1JZHMgPSBb
XTsKKyAgICAgICAgc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG1k
ZXNjKSB7CisgICAgICAgICAgICBpZiAobWRlc2MubWVkaWFTdHJlYW1JZCAmJiBtZGVzYy5tZWRp
YVN0cmVhbVRyYWNrSWQKKyAgICAgICAgICAgICAgICAmJiBtZWRpYVN0cmVhbUlkcy5pbmRleE9m
KG1kZXNjLm1lZGlhU3RyZWFtSWQpID09IC0xKQorICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFt
SWRzLnB1c2gobWRlc2MubWVkaWFTdHJlYW1JZCk7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
bWVkaWFTdHJlYW1JZHMubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgbXNpZHNlbWFudGljTGlu
ZSA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMubXNpZHNlbWFudGljLAorICAgICAgICAgICAgICAg
IHsgIm1lZGlhU3RyZWFtSWRzIjogbWVkaWFTdHJlYW1JZHMuam9pbigiICIpIH0pOworICAgICAg
ICB9CisgICAgICAgIHNkcFRleHQgPSBmaWxsVGVtcGxhdGUoc2RwVGV4dCwgeyAibXNpZHNlbWFu
dGljTGluZSI6IG1zaWRzZW1hbnRpY0xpbmUgfSk7CisKKyAgICAgICAgc2RwT2JqLm1lZGlhRGVz
Y3JpcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG1lZGlhRGVzY3JpcHRpb24pIHsKKyAgICAgICAg
ICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24sIHsKKyAgICAgICAgICAgICAgICAicG9y
dCI6IDksCisgICAgICAgICAgICAgICAgInByb3RvY29sIjogIlVEUC9UTFMvUlRQL1NBVlBGIiwK
KyAgICAgICAgICAgICAgICAibmV0VHlwZSI6ICJJTiIsCisgICAgICAgICAgICAgICAgImFkZHJl
c3NUeXBlIjogIklQNCIsCisgICAgICAgICAgICAgICAgImFkZHJlc3MiOiAiMC4wLjAuMCIsCisg
ICAgICAgICAgICAgICAgIm1vZGUiOiAic2VuZHJlY3YiLAorICAgICAgICAgICAgICAgICJwYXls
b2FkcyI6IFtdLAorICAgICAgICAgICAgICAgICJydGNwIjoge30KKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgdmFyIG1ibG9jayA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMubWJsb2NrLCBt
ZWRpYURlc2NyaXB0aW9uKTsKKworICAgICAgICAgICAgdmFyIHBheWxvYWRJbmZvID0geyJydHBN
YXBMaW5lcyI6ICIiLCAiZm10cExpbmVzIjogIiIsICJuYWNrTGluZXMiOiAiIiwKKyAgICAgICAg
ICAgICAgICAibmFja3BsaUxpbmVzIjogIiIsICJjY21maXJMaW5lcyI6ICIiLCAiZXJpY1NjcmVh
bUxpbmVzIjogIiJ9OworICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5wYXlsb2Fkcy5mb3JF
YWNoKGZ1bmN0aW9uIChwYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWRJbmZv
LmZtdCkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8uZm10ICs9ICIgIiArIHBheWxv
YWQudHlwZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBheWxv
YWRJbmZvLmZtdCA9IHBheWxvYWQudHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQu
Y2hhbm5lbHMgfHwgcGF5bG9hZC5jaGFubmVscyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBw
YXlsb2FkLmNoYW5uZWxzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5ydHBN
YXBMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLnJ0cE1hcCwgcGF5bG9hZCk7CisgICAg
ICAgICAgICAgICAgaWYgKHBheWxvYWQucGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZm10cEluZm8gPSB7ICJ0eXBlIjogcGF5bG9hZC50eXBlLCAicGFyYW1ldGVycyI6ICIi
IH07CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcGF5bG9hZC5wYXJhbWV0ZXJz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW0gPSBwLnJlcGxhY2UoLyhbQS1a
XSkoW2Etel0pL2csIGZ1bmN0aW9uIChfLCBhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICItIiArIGEudG9Mb3dlckNhc2UoKSArIGI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbXRwSW5mby5wYXJhbWV0
ZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBJbmZvLnBhcmFtZXRlcnMgKz0g
IjsiOworICAgICAgICAgICAgICAgICAgICAgICAgZm10cEluZm8ucGFyYW1ldGVycyArPSBwYXJh
bSArICI9IiArIHBheWxvYWQucGFyYW1ldGVyc1twXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5mbXRwTGluZXMgKz0gZmlsbFRlbXBsYXRl
KHRlbXBsYXRlcy5mbXRwLCBmbXRwSW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChwYXlsb2FkLm5hY2spCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZv
Lm5hY2tMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm5hY2ssIHBheWxvYWQpOworICAg
ICAgICAgICAgICAgIGlmIChwYXlsb2FkLm5hY2twbGkpCisgICAgICAgICAgICAgICAgICAgIHBh
eWxvYWRJbmZvLm5hY2twbGlMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm5hY2twbGks
IHBheWxvYWQpOworICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmNjbWZpcikKKyAgICAgICAg
ICAgICAgICAgICAgcGF5bG9hZEluZm8uY2NtZmlyTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBs
YXRlcy5jY21maXIsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmVyaWNz
Y3JlYW0pCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmVyaWNTY3JlYW1MaW5lcyAr
PSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmVyaWNzY3JlYW0sIHBheWxvYWQpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJsb2NrLCBwYXlsb2Fk
SW5mbyk7CisKKyAgICAgICAgICAgIHZhciBydGNwSW5mbyA9IHsicnRjcExpbmUiOiAiIiwgInJ0
Y3BNdXhMaW5lIjogIiJ9OworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ucnRjcC5w
b3J0KSB7CisgICAgICAgICAgICAgICAgYWRkRGVmYXVsdHMobWVkaWFEZXNjcmlwdGlvbi5ydGNw
LCB7CisgICAgICAgICAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAg
ICAgICAgImFkZHJlc3NUeXBlIjogIklQNCIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNz
IjogIiIKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRGVz
Y3JpcHRpb24ucnRjcC5hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLnJ0Y3AubmV0VHlwZSA9IG1lZGlhRGVzY3JpcHRpb24ucnRjcC5hZGRyZXNzVHlwZSA9ICIi
OworICAgICAgICAgICAgICAgIHJ0Y3BJbmZvLnJ0Y3BMaW5lID0gZmlsbFRlbXBsYXRlKHRlbXBs
YXRlcy5ydGNwLCBtZWRpYURlc2NyaXB0aW9uLnJ0Y3ApOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ucnRjcC5tdXgpCisgICAgICAgICAgICAgICAgcnRj
cEluZm8ucnRjcE11eExpbmUgPSB0ZW1wbGF0ZXMucnRjcE11eDsKKyAgICAgICAgICAgIG1ibG9j
ayA9IGZpbGxUZW1wbGF0ZShtYmxvY2ssIHJ0Y3BJbmZvKTsKKworICAgICAgICAgICAgdmFyIHNy
Y0F0dHJpYnV0ZUxpbmVzID0geyAiY25hbWVMaW5lcyI6ICIiLCAibXNpZExpbmVzIjogIiIgfTsK
KyAgICAgICAgICAgIHZhciBzcmNBdHRyaWJ1dGVzID0geworICAgICAgICAgICAgICAgICJjbmFt
ZSI6IG1lZGlhRGVzY3JpcHRpb24uY25hbWUsCisgICAgICAgICAgICAgICAgIm1lZGlhU3RyZWFt
SWQiOiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQsCisgICAgICAgICAgICAgICAgIm1l
ZGlhU3RyZWFtVHJhY2tJZCI6IG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24uY25hbWUgJiYg
bWVkaWFEZXNjcmlwdGlvbi5zc3JjcykgeworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRp
b24uc3NyY3MuZm9yRWFjaChmdW5jdGlvbiAoc3NyYykgeworICAgICAgICAgICAgICAgICAgICBz
cmNBdHRyaWJ1dGVzLnNzcmMgPSBzc3JjOworICAgICAgICAgICAgICAgICAgICBzcmNBdHRyaWJ1
dGVMaW5lcy5jbmFtZUxpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuY25hbWUsIHNyY0F0
dHJpYnV0ZXMpOworICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5tZWRp
YVN0cmVhbUlkICYmIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjQXR0cmlidXRlTGluZXMubXNpZExpbmVzICs9IGZpbGxUZW1w
bGF0ZSh0ZW1wbGF0ZXMubXNpZCwgc3JjQXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCAm
JiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJZCkgeworICAgICAgICAgICAgICAg
IHNyY0F0dHJpYnV0ZXMuc3NyYyA9IG51bGw7CisgICAgICAgICAgICAgICAgc3JjQXR0cmlidXRl
TGluZXMubXNpZExpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMubXNpZCwgc3JjQXR0cmli
dXRlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUo
bWJsb2NrLCBzcmNBdHRyaWJ1dGVMaW5lcyk7CisKKyAgICAgICAgICAgIHZhciBpY2VJbmZvID0g
eyJpY2VDcmVkZW50aWFsTGluZXMiOiAiIiwgImNhbmRpZGF0ZUxpbmVzIjogIiJ9OworICAgICAg
ICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24uaWNlKSB7CisgICAgICAgICAgICAgICAgaWNlSW5m
by5pY2VDcmVkZW50aWFsTGluZXMgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmljZUNyZWRlbnRp
YWxzLAorICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZSk7CisgICAgICAg
ICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UuY2FuZGlkYXRlcy5mb3JFYWNoKGZ1bmN0
aW9uIChjYW5kaWRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKGNh
bmRpZGF0ZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGVkQWRkcmVzcyI6
IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0ZWRQb3J0IjogbnVsbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGNwVHlwZSI6IG51bGwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWNlSW5mby5jYW5kaWRh
dGVMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmNhbmRpZGF0ZSwgY2FuZGlkYXRlKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgaWNlSW5mbyk7CisK
KyAgICAgICAgICAgIHZhciBkdGxzSW5mbyA9IHsgImR0bHNGaW5nZXJwcmludExpbmUiOiAiIiwg
ImR0bHNTZXR1cExpbmUiOiAiIiB9OworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24u
ZHRscykgeworICAgICAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmR0bHMuZmluZ2Vy
cHJpbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZHRsc0luZm8uZHRsc0ZpbmdlcnByaW50TGlu
ZSA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuZHRsc0ZpbmdlcnByaW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYWRkRGVmYXVsdHMobWVkaWFEZXNjcmlwdGlvbi5kdGxzLCB7InNldHVw
IjogImFjdHBhc3MifSk7CisgICAgICAgICAgICAgICAgZHRsc0luZm8uZHRsc1NldHVwTGluZSA9
IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuZHRsc1NldHVwLCBtZWRpYURlc2NyaXB0aW9uLmR0bHMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9j
aywgZHRsc0luZm8pOworCisgICAgICAgICAgICB2YXIgc2N0cEluZm8gPSB7InNjdHBtYXBMaW5l
IjogIiIsICJmbXQiOiAiIn07CisgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5zY3Rw
KSB7CisgICAgICAgICAgICAgICAgYWRkRGVmYXVsdHMobWVkaWFEZXNjcmlwdGlvbi5zY3RwLCB7
InN0cmVhbXMiOiBudWxsfSk7CisgICAgICAgICAgICAgICAgc2N0cEluZm8uc2N0cG1hcExpbmUg
PSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLnNjdHBtYXAsIG1lZGlhRGVzY3JpcHRpb24uc2N0cCk7
CisgICAgICAgICAgICAgICAgc2N0cEluZm8uZm10ID0gbWVkaWFEZXNjcmlwdGlvbi5zY3RwLnBv
cnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJs
b2NrLCBzY3RwSW5mbyk7CisKKyAgICAgICAgICAgIHNkcFRleHQgKz0gbWJsb2NrOworICAgICAg
ICB9KTsKKworICAgICAgICByZXR1cm4gc2RwVGV4dDsKKyAgICB9OworCisgICAgU0RQLmdlbmVy
YXRlQ2FuZGlkYXRlTGluZSA9IGZ1bmN0aW9uIChjYW5kaWRhdGVPYmopIHsKKyAgICAgICAgYWRk
RGVmYXVsdHMoY2FuZGlkYXRlT2JqLCB7CisgICAgICAgICAgICAicmVsYXRlZEFkZHJlc3MiOiBu
dWxsLAorICAgICAgICAgICAgInJlbGF0ZWRQb3J0IjogbnVsbCwKKyAgICAgICAgICAgICJ0Y3BU
eXBlIjogbnVsbAorICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gZmlsbFRlbXBsYXRlKHRl
bXBsYXRlcy5jYW5kaWRhdGUsIGNhbmRpZGF0ZU9iaik7CisgICAgfTsKKworICAgIHZhciBleHBl
Y3RlZFByb3BlcnRpZXMgPSB7CisgICAgICAgICJzZXNzaW9uIjogWyAidmVyc2lvbiIsICJvcmln
aW5hdG9yIiwgInNlc3Npb25OYW1lIiwgInN0YXJ0VGltZSIsICJzdG9wVGltZSIgXSwKKyAgICAg
ICAgIm1saW5lIjogWyAidHlwZSIsICJwb3J0IiwgInByb3RvY29sIiwgIm1vZGUiLCAicGF5bG9h
ZHMiLCAicnRjcCIsICJtZWRpYVN0cmVhbUlkIiwKKyAgICAgICAgICAgICJtZWRpYVN0cmVhbVRy
YWNrSWQiLCAiZHRscyIsICJzc3JjcyIsICJjbmFtZSIsICJpY2UiIF0sCisgICAgICAgICJtbGlu
ZVN1Yk9iamVjdHMiOiB7CisgICAgICAgICAgICAicnRjcCI6IFsgIm11eCIgXSwKKyAgICAgICAg
ICAgICJpY2UiOiBbICJ1ZnJhZyIsICJwYXNzd29yZCIgXSwKKyAgICAgICAgICAgICJkdGxzIjog
WyAic2V0dXAiLCAiZmluZ2VycHJpbnRIYXNoRnVuY3Rpb24iLCAiZmluZ2VycHJpbnQiIF0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBoYXNBbGxQcm9wZXJ0aWVzKG9iamVjdCwg
cHJvcGVydGllcykgeworICAgICAgICB2YXIgbWlzc2luZyA9IHByb3BlcnRpZXMuZmlsdGVyKGZ1
bmN0aW9uIChwcm9wZXJ0eSkgeworICAgICAgICAgICAgcmV0dXJuICFvYmplY3QuaGFzT3duUHJv
cGVydHkocHJvcGVydHkpOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gIW1pc3Npbmcu
bGVuZ3RoOworICAgIH0KKworICAgIFNEUC52ZXJpZnlPYmplY3QgPSBmdW5jdGlvbiAoc2RwT2Jq
KSB7CisgICAgICAgIGlmICghaGFzQWxsUHJvcGVydGllcyhzZHBPYmosIGV4cGVjdGVkUHJvcGVy
dGllcy5zZXNzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgdmFyIG1lZGlhRGVzY3JpcHRpb24gPSBzZHBPYmoubWVkaWFEZXNjcmlwdGlv
bnNbaV07CisKKyAgICAgICAgICAgIGlmICghaGFzQWxsUHJvcGVydGllcyhtZWRpYURlc2NyaXB0
aW9uLCBleHBlY3RlZFByb3BlcnRpZXMubWxpbmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBleHBlY3RlZFByb3BlcnRpZXMubWxp
bmVTdWJPYmplY3RzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbGxQcm9wZXJ0aWVzKG1l
ZGlhRGVzY3JpcHRpb25bcF0sIGV4cGVjdGVkUHJvcGVydGllcy5tbGluZVN1Yk9iamVjdHNbcF0p
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCit9KSgpOworCitmdW5jdGlv
biBnZW5lcmF0ZShqc29uKSB7CisgICAgdmFyIG9iamVjdCA9IEpTT04ucGFyc2UoanNvbik7Cisg
ICAgcmV0dXJuIFNEUC5nZW5lcmF0ZShvYmplY3QpOworfQorCitmdW5jdGlvbiBwYXJzZShzZHAp
IHsKKyAgICB2YXIgb2JqZWN0ID0gU0RQLnBhcnNlKHNkcCk7CisKKyAgICBpZiAoIVNEUC52ZXJp
ZnlPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIjsKKworICAgIHJl
dHVybiBKU09OLnN0cmluZ2lmeShvYmplY3QpOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZUNhbmRp
ZGF0ZUxpbmUoanNvbikgeworICAgIHZhciBjYW5kaWRhdGUgPSBKU09OLnBhcnNlKGpzb24pOwor
ICAgIHJldHVybiBTRFAuZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNhbmRpZGF0ZSkuc3Vic3RyKDIp
OworfQorCitmdW5jdGlvbiBwYXJzZUNhbmRpZGF0ZUxpbmUoY2FuZGlkYXRlTGluZSkgeworICAg
IHZhciBtZGVzYyA9IFNEUC5wYXJzZSgibT1hcHBsaWNhdGlvbiAwIE5PTkVcclxuYT0iICsgY2Fu
ZGlkYXRlTGluZSArICJcclxuIikubWVkaWFEZXNjcmlwdGlvbnNbMF07CisgICAgaWYgKCFtZGVz
Yy5pY2UpCisgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciI7CisKKyAgICByZXR1cm4gSlNPTi5z
dHJpbmdpZnkobWRlc2MuaWNlLmNhbmRpZGF0ZXNbMF0pOworfQorCitpZiAodHlwZW9mKG1vZHVs
ZSkgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mKGV4cG9ydHMpICE9ICJ1bmRlZmluZWQiKQorICAg
IG1vZHVsZS5leHBvcnRzID0gU0RQOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA3ZDEy
NmI1Li5jM2ZmMTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDQsNiArNDQsNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL3dheWxhbmQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL3gxMSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vbmV0d29yay9zb3VwIgpAQCAtMTUyLDYgKzE1Myw4IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwCiAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCisKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKQEAgLTI0Niw2ICsyNDksOSBAQCBzZXQoV2ViQ29y
ZV9VU0VSX0FHRU5UX1NDUklQVFMKIAogc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTX0RF
UEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
KQogCitzZXQoV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgJHtXRUJDT1JFX0RJUn0vTW9k
dWxlcy9tZWRpYXN0cmVhbS9zZHAuanMpCitzZXQoV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQ
VFNfREVQRU5ERU5DSUVTICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9T
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHApCisKIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElC
UkFSSUVTCiAgICAgJHtBVEtfTElCUkFSSUVTfQogICAgICR7Q0FJUk9fTElCUkFSSUVTfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGZkNTRlYjQuLmViZDhmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0MzYsNiArMjQzNiwxMiBAQAogCQk1RTJDNDM3NDFC
Q0YwRDc1MDAwMUUyQkMgLyogSlNSVENSdHBTZW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0MzcwMUJDRjBENjkwMDAxRTJCQyAvKiBKU1JU
Q1J0cFNlbmRlci5oICovOyB9OwogCQk1RTJDNDM3QjFCQ0Y5QTU3MDAwMUUyQkMgLyogUlRDUGVl
ckNvbm5lY3Rpb25CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9u
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1RTJDNDM3QzFCQ0Y5QTg0MDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUUyQzQzNzkxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkRFMUM4NTlE
NTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovOyB9OworCQk1RUEzRDZFMDFDODU5
RDg0MDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1v
Y2tNZWRpYUVuZHBvaW50LmNwcCAqLzsgfTsKKwkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8q
IFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCAqLzsg
fTsKKwkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTIxQzg1OURBQTAw
MzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovOyB9OworCQk1RUEzRDZFNzFDODVBOURCMDAzMDBC
QkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNE
UFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLzsgfTsKKwkJNUVBM0Q2RTgxQzg1QTlEQjAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNjFDODVBOUMzMDAzMDBCQkIgLyog
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLzsgfTsKIAkJNUVBNzI1RDIxQUNBQkQ0NzAw
RUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDRDFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2Vz
LmNwcCAqLzsgfTsKIAkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0Ux
QUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVFQTcyNUQ1MUFDQUJENTcwMEVBRDE3QiAvKiBO
YXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUVBNzI1Q0ExQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5jcHAgKi87IH07CkBAIC0xMDAzNCw2ICsxMDA0MCwxMiBAQAogCQk1RTJDNDM3NjFC
Q0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUyQkMgLyog
UlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2Nr
TWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b2NrTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNE
NkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3Nvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJv
Y2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkU1MUM4NUE5QzMw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBT
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNCMUFDQUJD
QjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVFQTcyNUNDMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ4NSw2ICsxNTQ5Nyw4IEBACiAJ
CQkJNUUyQzQzNjQxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuY3BwICovLAogCQkJ
CTVFMkM0MzY1MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmggKi8sCiAJCQkJNUUy
QzQzNjYxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaWRsICovLAorCQkJCTVFQTNE
NkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovLAorCQkJCTVFQTNENkUy
MUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLywKIAkJCQkwNzYzMDZENDE3RTE0
OUNGMDA1QTdDNEUgLyogU291cmNlSW5mby5jcHAgKi8sCiAJCQkJMDc2MzA2RDUxN0UxNDlDRjAw
NUE3QzRFIC8qIFNvdXJjZUluZm8uaCAqLywKIAkJCQkwNzYzMDZENjE3RTE0OUNGMDA1QTdDNEUg
LyogU291cmNlSW5mby5pZGwgKi8sCkBAIC0xNTU0Niw2ICsxNTU2MCw4IEBACiAJCQkJMDcyMjFC
QUUxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1N0YXRzUmVxdWVzdC5oICovLAogCQkJCTA3MjIxQkFG
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENTdGF0c1Jlc3BvbnNlQmFzZS5oICovLAogCQkJCTA3MjIx
QkIwMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENWb2lkUmVxdWVzdC5oICovLAorCQkJCTVFQTNENkU1
MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8sCisJ
CQkJNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
LmggKi8sCiAJCQkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRl
TWVkaWFTdHJlYW0uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWVkaWFzdHJlYW07CkBAIC0xNzUz
Miw2ICsxNzU0OCw4IEBACiAJCQkJMDc3QjY0MTUxQjk1RjcwMzAwM0U5QUQ1IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRNb2NrLmggKi8sCiAJCQkJMDc3QjY0MTAxQjk0RjEyRTAwM0U5QUQ1IC8qIE1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmNwcCAqLywKIAkJCQkwNzdCNjQxMTFCOTRGMTJF
MDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1vY2suaCAqLywKKwkJCQk1RUEz
RDZERDFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovLAorCQkJCTVF
QTNENkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovLAogCQkJCTA3
RDZBNEYxMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8s
CiAJCQkJMDdENkE0RjIxQkVENUY4ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNl
LmggKi8sCiAJCQkJMDdENkE0RUQxQkVDRjJEMjAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZU1lZGlh
U291cmNlLmNwcCAqLywKQEAgLTI1NzE0LDYgKzI1NzMyLDcgQEAKIAkJCQk4NUU3MTFBNjBBQzVE
NTM1MDA1MzI3MEYgLyogRE9NSFRNTERvY3VtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg1REYyRUVEMEFBMzg3Q0IwMEFENjRDNSAvKiBET01IVE1MRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODVFNzExQTcwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxFbGVtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBN
b2NrTWVkaWFFbmRwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MDc1NkEwQUQ2Q0JGOTAw
NjIwQzU3IC8qIERPTUhUTUxFbWJlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NTI0
N0QwMEFEODUwQjgwMDEyMDkzQiAvKiBET01IVE1MRW1iZWRFbGVtZW50SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkE0Q0RGMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MRmllbGRT
ZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1OTA5LDYgKzI1OTI4LDcgQEAKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QzdGNUU3MEFBRkJB
RkIwMDQwMTRERCAvKiBET01XaGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUEzRDZF
NDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTQxMjk5MDFDNjAxQUNDMDA1OUU3MTQgLyogU2NvcGVHdWFyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODU5ODlERDEwQUNDOEJCRDAwQTBCQzUxIC8qIERPTVdoZWVsRXZlbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNzQwNyw2ICsyNzQyNyw3IEBACiAJCQkJQ0Q1RTVCNUYxQTE1
Q0U1NDAwMEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
MzgyMDg5MzE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJREFFRDIwMzExNkYyNDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1RUEzRDZFODFDODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QTJBRjBDMTgyOTczNDMw
MERFMTcyOSAvKiBQYWdlRGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM0NzQyREQx
MzQzNjJGMDAwNTMxQkMyIC8qIFBhZ2VEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywK
QEAgLTMwMzU2LDYgKzMwMzc3LDcgQEAKIAkJCQlCQzQ5MThDNjBCRkVBMDUwMDA5RDYzMTYgLyog
SlNIVE1MRnJhbWVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMkVEN0E1MEM2QzBG
MzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM5MjZGODAwQzA1NTI0NzAwODI3NzZCIC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1RUEzRDZFMzFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRDQxQUJCMEMwNjBERTgwMEMwRTQ0NiAv
KiBKU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgw
RTdCMTQwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTEhlYWRFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBRTJBQTJFMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIZWFkaW5nRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMxNDE2LDYgKzMxNDM4LDcgQEAKIAkJCQk1RTJDNDM2
NzFCQ0VFMzc3MDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1ODI0QUJBMjFBRTgxMTE2MDA5MDc0QjcgLyogUnVieUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTgyNEFCQTYxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1RUEzRDZFNzFDODVBOURCMDAzMDBCQkIgLyogU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc5QkFEQTExNjFFN0Yz
RjAwQzJFNjUyIC8qIFJ1bGVGZWF0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OUJBREEz
MTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENzZC
Qjg0MTk0NTZGODEwMENGRDI5QSAvKiBSdW5Mb29wT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMTQ2MCw2ICszMTQ4Myw3IEBACiAJCQkJMEZDNEU0MEUxODdGODJFMTAwNDU4ODJDIC8q
IFNjcm9sbGluZ0Nvb3JkaW5hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNjJFRTYx
NERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNDMzhCRkUxNjQ0NzNDNzAwMDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWRO
b2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVFQTNENkUwMUM4NTlEODQwMDMwMEJCQiAvKiBN
b2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBM0U3QzE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZBODhFQkQxNkE4RDFCRDAwRjk5OTg0IC8qIFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMxQ0JEMEMxNjFBNDRF
OTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5j
cHAKaW5kZXggMDFmYjZjNy4uMmMzODY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5k
cG9pbnQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCopCitzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnQoTWVkaWFF
bmRwb2ludENsaWVudCYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKaW5kZXggNTcw
Njg4ZC4uNjEyOTc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFFbmRwb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnQuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+TWVkaWFFbmRwb2ludENsaWVudCgpIHsgfQogfTsKIAotdHlwZWRlZiBzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFFbmRwb2ludD4gKCpDcmVhdGVNZWRpYUVuZHBvaW50KShNZWRpYUVuZHBvaW50
Q2xpZW50Kik7Cit0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiAoKkNyZWF0
ZU1lZGlhRW5kcG9pbnQpKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKIAogY2xhc3MgTWVkaWFFbmRw
b2ludCB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3MTUxYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UgeworCitTdHJpbmcgc2NyaXB0U3RyaW5nKCkKK3sKKyAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2UKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjExZjlhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9o
CisjZGVmaW5lIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitT
dHJpbmcgc2NyaXB0U3RyaW5nKCk7CisKK30gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJv
Y2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjI0ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJl
c291cmNlR3RrLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2Ugewor
CitTdHJpbmcgc2NyaXB0U3RyaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHNkcEphdmFTY3Jp
cHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2lu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc5OWQ3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5j
cHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgorCisjaW5j
bHVkZSAiTWVkaWFQYXlsb2FkLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogZmluZ2VycHJpbnQgPSAiOEI6
ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6
NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IiOworc3RhdGljIGNvbnN0IGNoYXIq
IGZpbmdlcnByaW50RnVuY3Rpb24gPSAic2hhLTI1NiI7CisKK3N0ZDo6dW5pcXVlX3B0cjxNZWRp
YUVuZHBvaW50PiBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQm
IGNsaWVudCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+KG5l
dyBNb2NrTWVkaWFFbmRwb2ludChjbGllbnQpKTsKK30KKworTW9ja01lZGlhRW5kcG9pbnQ6Ok1v
Y2tNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKK3sKK30KKworTW9ja01lZGlhRW5kcG9pbnQ6On5Nb2NrTWVkaWFFbmRwb2lu
dCgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzZXRDb25m
aWd1cmF0aW9uKFJlZlB0cjxNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0
aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShjb25maWd1cmF0aW9uKTsKK30KKwordm9pZCBNb2Nr
TWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbygpCit7CisgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpc10oKSB7CisgICAgICAgIG1fY2xpZW50LmdvdER0bHNGaW5nZXJwcmludChTdHJpbmco
ZmluZ2VycHJpbnQpLCBTdHJpbmcoZmluZ2VycHJpbnRGdW5jdGlvbikpOworICAgIH0pOworfQor
CitWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IE1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZh
dWx0QXVkaW9QYXlsb2FkcygpCit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBw
YXlsb2FkczsKKworICAgIFJlZlB0cjxNZWRpYVBheWxvYWQ+IHBheWxvYWQgPSBNZWRpYVBheWxv
YWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMTExKTsKKyAgICBwYXlsb2FkLT5z
ZXRFbmNvZGluZ05hbWUoIk9QVVMiKTsKKyAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUoNDgwMDAp
OworICAgIHBheWxvYWQtPnNldENoYW5uZWxzKDIpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXls
b2FkKTsKKworICAgIHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxv
YWQtPnNldFR5cGUoOCk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJQQ01BIik7Cisg
ICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDgwMDApOworICAgIHBheWxvYWQtPnNldENoYW5uZWxz
KDEpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBheWxvYWQgPSBNZWRp
YVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMCk7CisgICAgcGF5bG9h
ZC0+c2V0RW5jb2RpbmdOYW1lKCJQQ01VIik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDgw
MDApOworICAgIHBheWxvYWQtPnNldENoYW5uZWxzKDEpOworICAgIHBheWxvYWRzLmFwcGVuZChw
YXlsb2FkKTsKKworICAgIHJldHVybiBwYXlsb2FkczsKK30KKworVmVjdG9yPFJlZlB0cjxNZWRp
YVBheWxvYWQ+PiBNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKQor
eworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gcGF5bG9hZHM7CisKKyAgICBSZWZQ
dHI8TWVkaWFQYXlsb2FkPiBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBw
YXlsb2FkLT5zZXRUeXBlKDEwMyk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJIMjY0
Iik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDkwMDAwKTsKKyAgICBwYXlsb2FkLT5zZXRD
Y21maXIodHJ1ZSk7CisgICAgcGF5bG9hZC0+c2V0TmFja3BsaSh0cnVlKTsKKyAgICBwYXlsb2Fk
LT5hZGRQYXJhbWV0ZXIoInBhY2tldGl6YXRpb25Nb2RlIiwgMSk7CisgICAgcGF5bG9hZHMuYXBw
ZW5kKHBheWxvYWQpOworCisgICAgcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7Cisg
ICAgcGF5bG9hZC0+c2V0VHlwZSgxMDApOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgi
VlA4Iik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDkwMDAwKTsKKyAgICBwYXlsb2FkLT5z
ZXRDY21maXIodHJ1ZSk7CisgICAgcGF5bG9hZC0+c2V0TmFja3BsaSh0cnVlKTsKKyAgICBwYXls
b2FkLT5zZXROYWNrKHRydWUpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAg
IHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUo
MTIwKTsKKyAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoIlJUWCIpOworICAgIHBheWxvYWQt
PnNldENsb2NrUmF0ZSg5MDAwMCk7CisgICAgcGF5bG9hZC0+YWRkUGFyYW1ldGVyKCJhcHQiLCAx
MDApOworICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7CisgICAgcGF5
bG9hZHMuYXBwZW5kKHBheWxvYWQpOworCisgICAgcmV0dXJuIHBheWxvYWRzOworfQorCitNZWRp
YUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVJlY2VpdmVD
b25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJh
dGlvbiwgYm9vbCBpc0luaXRpYXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oY29uZmlndXJhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKGlzSW5pdGlhdG9yKTsKKworICAgIHJldHVybiBVcGRhdGVS
ZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK01lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBNb2NrTWVk
aWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlhdG9yKQoreworICAgIFVO
VVNFRF9QQVJBTShjb25maWd1cmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oaXNJbml0aWF0b3Ip
OworCisgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3VjY2VzczsKK30KKwordm9pZCBNb2NrTWVk
aWFFbmRwb2ludDo6YWRkUmVtb3RlQ2FuZGlkYXRlKEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCB1
bnNpZ25lZCBtZGVzY0luZGV4LCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQoreworICAgIFVOVVNFRF9QQVJBTShjYW5kaWRhdGUpOworICAgIFVOVVNFRF9QQVJB
TShtZGVzY0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0odWZyYWcpOworICAgIFVOVVNFRF9QQVJB
TShwYXNzd29yZCk7Cit9CisKK3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291
cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2UmIG5ld1NvdXJjZSwgdW5zaWduZWQgbWRlc2NJbmRleCkK
K3sKKyAgICBVTlVTRURfUEFSQU0obmV3U291cmNlKTsKKyAgICBVTlVTRURfUEFSQU0obWRlc2NJ
bmRleCk7Cit9CisKK3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnN0b3AoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzJiZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1vY2tNZWRpYUVuZHBvaW50X2gKKyNkZWZpbmUgTW9j
a01lZGlhRW5kcG9pbnRfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
Ik1lZGlhRW5kcG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrTWVk
aWFFbmRwb2ludCA6IHB1YmxpYyBNZWRpYUVuZHBvaW50IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShNZWRp
YUVuZHBvaW50Q2xpZW50Jik7CisKKyAgICBNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50
Q2xpZW50Jik7CisgICAgfk1vY2tNZWRpYUVuZHBvaW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29uZmlndXJhdGlvbihSZWZQdHI8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+JiYpIG92
ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gZ2V0RGVmYXVsdEF1ZGlv
UGF5bG9hZHMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXls
b2FkPj4gZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
VXBkYXRlUmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgVXBkYXRlUmVzdWx0IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOworCisgICAgdmly
dHVhbCB2b2lkIGFkZFJlbW90ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUmLCB1bnNpZ25lZCBtZGVz
Y0luZGV4LCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlh
U291cmNlJiwgdW5zaWduZWQgbWRlc2NJbmRleCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcCgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE1lZGlhRW5kcG9pbnRDbGllbnQm
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1vY2tNZWRpYUVuZHBvaW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBhOWI1MjRkLi45MjFhMjkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNzUsNiArMTc1LDcgQEAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5o
IgogI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjaW5jbHVkZSAi
UlRDUGVlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJN
b2NrLmgiCkBAIC00MTUsNiArNDE2LDcgQEAgSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQq
IGRvY3VtZW50KQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBzZXRNb2NrTWVkaWFD
YXB0dXJlRGV2aWNlc0VuYWJsZWQodHJ1ZSk7CisgICAgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQo
KTsKICAgICBlbmFibGVNb2NrUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKCk7CiAjZW5kaWYKIApA
QCAtMTAxNSw2ICsxMDE3LDExIEBAIHZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrU3BlZWNoU3lu
dGhlc2l6ZXIoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQordm9pZCBJbnRl
cm5hbHM6OmVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBNZWRpYUVuZHBvaW50Ojpj
cmVhdGUgPSBNb2NrTWVkaWFFbmRwb2ludDo6Y3JlYXRlOworfQorCiB2b2lkIEludGVybmFsczo6
ZW5hYmxlTW9ja1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcigpCiB7CiAgICAgUlRDUGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpjcmVhdGUgPSBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJNb2NrOjpjcmVh
dGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA2N2EwMTkzLi4xNGExYzgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTM2OCw2ICszNjgsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBlbmFibGVNb2Nr
TWVkaWFFbmRwb2ludCgpOwogICAgIHZvaWQgZW5hYmxlTW9ja1JUQ1BlZXJDb25uZWN0aW9uSGFu
ZGxlcigpOwogICAgIHZvaWQgc2V0TW9ja01lZGlhQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wp
OwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272685</attachid>
            <date>2016-03-02 14:10:56 -0800</date>
            <delta_ts>2016-03-04 11:12:54 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>mepc-create-offer_1.patch</filename>
            <type>text/plain</type>
            <size>105103</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzNiNjFiLi42OTJjMmNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MDEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogSW1wbGVtZW50IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
T2ZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIG91dHB1dCBTRFAgZnJvbSBjcmVhdGVPZmZlcigpIGlzIHByb2Nlc3NlZCBieSB2ZXJpZnlp
bmcgYWxsIHZhcmlhYmxlCisgICAgICAgIGlkZW50aWZpZXJzLCBzdWNoIGFzIHNlc3Npb24gYW5k
IHVzZXIgaWQsIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoCisgICAgICAgIHByZWRlZmluZWQgdmFs
dWVzIHRvIG1ha2UgdGhlIFNEUCBjb21wYXJhYmxlIHdpdGggYW4gZXhwZWN0ZWQgcmVzdWx0Lgor
CisgICAgICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRoZSBtYWMgcG9ydCB1
bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBKYXZhU2NyaXB0
IHJlc291cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE2LTAy
LTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogRXhwb3NlIFByb3h5IHRhcmdldCBhbmQgaGFuZGxlciBpbnRlcm5hbCBwcm9w
ZXJ0aWVzIHRvIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZWUzNgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24taW5zcGVjdC1vZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3NiBAQAorSW5z
cGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCkKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgR290IG9mZmVyCis9PT0gUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uID09PQordHlwZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0tIHtzZXNzaW9uLWlk
Ok9LfSAwIElOIElQNCAxMjcuMC4wLjEKK3M9LQordD0wIDAKK2E9bXNpZC1zZW1hbnRpYzpXTVMg
e21lZGlhLXN0cmVhbS1pZDpPS30KK209YXVkaW8gOSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgOCAw
CitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMTEg
T1BVUy80ODAwMC8yCithPXJ0cG1hcDo4IFBDTUEvODAwMAorYT1ydHBtYXA6MCBQQ01VLzgwMDAK
K2E9c3NyYzp7c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQorYT1tc2lkOnttZWRpYS1zdHJlYW0t
aWQ6T0t9IHttZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9CithPWljZS11ZnJhZzp7aWNlLXVmcmFn
Ok9LfQorYT1pY2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9CithPWZpbmdlcnByaW50OnNoYS0yNTYg
OEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6
MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0dXA6YWN0cGFzcwor
PT09CisKK1BBU1MgR290IG9mZmVyCis9PT0gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uID09PQordHlw
ZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0tIHtzZXNzaW9uLWlkOk9LfSAxIElOIElQNCAxMjcuMC4w
LjEKK3M9LQordD0wIDAKK2E9bXNpZC1zZW1hbnRpYzpXTVMge21lZGlhLXN0cmVhbS1pZDpPS30K
K209YXVkaW8gOSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgOCAwCitjPUlOIElQNCAwLjAuMC4wCith
PXJ0Y3AtbXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMTEgT1BVUy80ODAwMC8yCithPXJ0cG1h
cDo4IFBDTUEvODAwMAorYT1ydHBtYXA6MCBQQ01VLzgwMDAKK2E9c3NyYzp7c3NyYzpPS30gY25h
bWU6e2NuYW1lOk9LfQorYT1tc2lkOnttZWRpYS1zdHJlYW0taWQ6T0t9IHttZWRpYS1zdHJlYW0t
dHJhY2staWQ6T0t9CithPWljZS11ZnJhZzp7aWNlLXVmcmFnOk9LfQorYT1pY2UtcHdkOntpY2Ut
cGFzc3dvcmQ6T0t9CithPWZpbmdlcnByaW50OnNoYS0yNTYgOEI6ODc6MDk6OEE6NUQ6QzI6RjM6
MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6Q0U6
ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0dXA6YWN0cGFzcworbT12aWRlbyA5IFVEUC9UTFMvUlRQ
L1NBVlBGIDEwMyAxMDAgMTIwCitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRy
ZWN2CithPXJ0cG1hcDoxMDMgSDI2NC85MDAwMAorYT1ydHBtYXA6MTAwIFZQOC85MDAwMAorYT1y
dHBtYXA6MTIwIFJUWC85MDAwMAorYT1mbXRwOjEwMyBwYWNrZXRpemF0aW9uLW1vZGU9MQorYT1m
bXRwOjEyMCBhcHQ9MTAwO3J0eC10aW1lPTIwMAorYT1ydGNwLWZiOjEwMCBuYWNrCithPXJ0Y3At
ZmI6MTAzIG5hY2sgcGxpCithPXJ0Y3AtZmI6MTAwIG5hY2sgcGxpCithPXJ0Y3AtZmI6MTAzIGNj
bSBmaXIKK2E9cnRjcC1mYjoxMDAgY2NtIGZpcgorYT1zc3JjOntzc3JjOk9LfSBjbmFtZTp7Y25h
bWU6T0t9CithPW1zaWQ6e21lZGlhLXN0cmVhbS1pZDpPS30ge21lZGlhLXN0cmVhbS10cmFjay1p
ZDpPS30KK2E9aWNlLXVmcmFnOntpY2UtdWZyYWc6T0t9CithPWljZS1wd2Q6e2ljZS1wYXNzd29y
ZDpPS30KK2E9ZmluZ2VycHJpbnQ6c2hhLTI1NiA4Qjo4NzowOTo4QTo1RDpDMjpGMzozMzpFRjpD
NTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0NjozQjoxQjpDRTo4NDo5ODpE
RDo4RTpBRjo3QgorYT1zZXR1cDphY3RwYXNzCis9PT0KKworUEFTUyBFbmQgb2YgcHJvbWlzZSBj
aGFpbgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taW5zcGVjdC1vZmZlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMmQxYzFhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sCkBAIC0wLDAg
KzEsMTQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAg
ICAgICA8c2NyaXB0PgorICAgICAgICAgICAgdmFyIHN0cmVhbTsKKyAgICAgICAgICAgIHZhciBh
dWRpb1RyYWNrOworICAgICAgICAgICAgdmFyIHZpZGVvVHJhY2s7CisgICAgICAgICAgICB2YXIg
bWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyA9IFtdOworCisgICAgICAgICAgICBkZXNjcmlwdGlv
bigiSW5zcGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKCki
KTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0
aG91dCB0aGUgdGVzdFJ1bm5lciIpOworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcGMgPSBuZXcgd2Via2l0UlRDUGVlckNv
bm5lY3Rpb24oe2ljZVNlcnZlcnM6W3t1cmxzOidzdHVuOmZvby5jb20nfV19KTsKKworICAgICAg
ICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyAiYXVkaW8iOiB0cnVl
LCAidmlkZW8iOiB0cnVlIH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocykgeworICAg
ICAgICAgICAgICAgIHN0cmVhbSA9IHM7CisgICAgICAgICAgICAgICAgYXVkaW9UcmFjayA9IHN0
cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdOworICAgICAgICAgICAgICAgIHZpZGVvVHJhY2sgPSBz
dHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTsKKworICAgICAgICAgICAgICAgIHBjLmFkZFRyYWNr
KGF1ZGlvVHJhY2ssIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9m
ZmVyKCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG9mZmVy
KSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiR290IG9mZmVyIik7CisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcy5wdXNoKHsgInRyYWNrSWQiOiBhdWRpb1Ry
YWNrLmlkLCAic3RyZWFtSWQiOiBzdHJlYW0uaWQgfSk7CisgICAgICAgICAgICAgICAgcHJpbnRD
b21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKG9mZmVyLCBtZWRpYURlc2NyaXB0aW9uVmFyaWFi
bGVzKTsKKworICAgICAgICAgICAgICAgIHBjLmFkZFRyYWNrKHZpZGVvVHJhY2ssIHN0cmVhbSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9mZmVyKCk7CisgICAgICAgICAgICB9
KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG9mZmVyKSB7CisgICAgICAgICAgICAgICAg
dGVzdFBhc3NlZCgiR290IG9mZmVyIik7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
blZhcmlhYmxlcy5wdXNoKHsgInRyYWNrSWQiOiB2aWRlb1RyYWNrLmlkLCAic3RyZWFtSWQiOiBz
dHJlYW0uaWQgfSk7CisgICAgICAgICAgICAgICAgcHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2Ny
aXB0aW9uKG9mZmVyLCBtZWRpYURlc2NyaXB0aW9uVmFyaWFibGVzKTsKKworICAgICAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIkVuZCBvZiBwcm9taXNlIGNoYWluIik7CisgICAgICAgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLmNhdGNoKGZ1bmN0
aW9uIChlcnJvcikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVycm9yIGNhdWdodCBp
biBwcm9taXNlIGNoYWluOiAiICsgZXJyb3IpOworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIFZhcmlhYmxlIGZpZWxkcyAo
ZS5nLiBnZW5lcmF0ZWQgaWRzKSBhcmUgdmVyaWZpZWQgYW5kIHJlcGxhY2VkIHdpdGggcHJlZGlj
dGFibGUKKyAgICAgICAgICAgIC8vIGxhYmxlcy4gVGhlIHJlc3VsdCBjYW4gYmUgY29tcGFyZWQg
d2l0aCBhIHByZWRlZmluZWQgZXhwZWN0ZWQgb3V0cHV0LgorICAgICAgICAgICAgZnVuY3Rpb24g
cHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiwgbWRl
c2NWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiPT09IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiA9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygidHlwZTogIiArIHNlc3Npb25E
ZXNjcmlwdGlvbi50eXBlICsgIiwgc2RwOiIpOworCisgICAgICAgICAgICAgICAgdmFyIHNkcCA9
IHNlc3Npb25EZXNjcmlwdGlvbi5zZHA7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVnZXhwID0g
eworICAgICAgICAgICAgICAgICAgICAib2xpbmUiOiAiXm89KC0pIChbXFxkXSspIC4qJCIsCisg
ICAgICAgICAgICAgICAgICAgICJtc2lkc2VtYW50aWMiOiAiXmE9bXNpZC1zZW1hbnRpYzogKldN
UyAuKiQiLAorICAgICAgICAgICAgICAgICAgICAibWxpbmUiOiAiXm09LiokIiwKKyAgICAgICAg
ICAgICAgICAgICAgImNuYW1lIjogIl5hPXNzcmM6KFxcZCspIGNuYW1lOihbXFx3Ky9cXC1AXFwu
XFx7XFx9XSspLiokIiwKKyAgICAgICAgICAgICAgICAgICAgIm1zaWQiOiAiXmE9KHNzcmM6XFxk
KyApP21zaWQ6KFtcXHcrL1xcLT1dKykgKyhbXFx3Ky9cXC09XSspLiokIiwKKyAgICAgICAgICAg
ICAgICAgICAgImljZXVmcmFnIjogIl5hPWljZS11ZnJhZzooW1xcdysvXSopLiokIiwKKyAgICAg
ICAgICAgICAgICAgICAgImljZXB3ZCI6ICJeYT1pY2UtcHdkOihbXFx3Ky9dKj0qKS4qJCIsCisg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHZhciBtZGVzY0luZGV4ID0gLTE7
CisgICAgICAgICAgICAgICAgc2RwLnNwbGl0KCJcclxuIikuZm9yRWFjaChmdW5jdGlvbiAobGlu
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gobGluZSwgcmVnZXhwLm1saW5lKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVkaWEgYmxvY2sgKCJoZWFkZXIiIGxpbmUp
CisgICAgICAgICAgICAgICAgICAgICAgICBtZGVzY0luZGV4Kys7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobWRlc2NJbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNlc3Npb24gYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGluZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9saW5lID0gbWF0Y2gobGluZSwgcmVnZXhwLm9s
aW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG9s
aW5lWzJdLCB2ZXJpZmllZCgic2Vzc2lvbi1pZCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG1hdGNoKGxpbmUsIHJlZ2V4cC5tc2lkc2VtYW50aWMpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWRlc2NWYXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAodmFyaWFi
bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxh
Y2UodmFyaWFibGVzLnN0cmVhbUlkLCB2ZXJpZmllZCgibWVkaWEtc3RyZWFtLWlkIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TWVkaWEgYmxvY2sgKGNvbnRlbnQgbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
Y25hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNpZDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBpY2V1ZnJhZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpY2Vw
d2Q7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbmFtZSA9IG1hdGNoKGxpbmUsIHJl
Z2V4cC5jbmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5y
ZXBsYWNlKGNuYW1lWzFdLCB2ZXJpZmllZCgic3NyYyIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGNuYW1lWzJdLCB2ZXJpZmllZCgiY25hbWUiKSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNpZCA9IG1hdGNoKGxpbmUs
IHJlZ2V4cC5tc2lkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2lkWzFd
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG1z
aWRbMV0sIHZlcmlmaWVkKCJzc3JjIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHZhcmlhYmxlcyA9IG1kZXNjVmFyaWFibGVzW21kZXNjSW5kZXhdOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhU3RyZWFtSWQgPSBtc2lkWzJdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZFZlcmlmaWVkID0gdmVyaWZpZWQoIm1lZGlh
LXN0cmVhbS1pZCIsIG1lZGlhU3RyZWFtSWQgIT0gdmFyaWFibGVzLnN0cmVhbUlkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG1lZGlhU3RyZWFtSWQs
IHN0cmVhbUlkVmVyaWZpZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1l
ZGlhU3RyZWFtVHJhY2tJZCA9IG1zaWRbM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHRyYWNrSWRWZXJpZmllZCA9IHZlcmlmaWVkKCJtZWRpYS1zdHJlYW0tdHJhY2staWQiLCBt
ZWRpYVN0cmVhbVRyYWNrSWQgIT0gdmFyaWFibGVzLnRyYWNrSWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UobWVkaWFTdHJlYW1UcmFja0lkLCB0cmFj
a0lkVmVyaWZpZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGljZXVm
cmFnID0gbWF0Y2gobGluZSwgcmVnZXhwLmljZXVmcmFnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGljZXVmcmFnWzFdLCB2ZXJpZmllZCgiaWNlLXVm
cmFnIikpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWNlcHdkID0gbWF0Y2go
bGluZSwgcmVnZXhwLmljZXB3ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9
IGxpbmUucmVwbGFjZShpY2Vwd2RbMV0sIHZlcmlmaWVkKCJpY2UtcGFzc3dvcmQiKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAobGluZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlYnVnKGxpbmUpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgZGVidWcoIj09PSIpOworICAgICAgICAgICAgICAgIGRlYnVnKCIiKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gdmVyaWZpZWQobmFtZSwgaXNG
YWlsdXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJ7IiArIG5hbWUgKyAiOiIgKyAoaXNG
YWlsdXJlID8gIkZBSUxFRCIgOiAiT0siKSArICJ9IjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZnVuY3Rpb24gbWF0Y2goZGF0YSwgcGF0dGVybikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhLm1hdGNoKG5ldyBSZWdFeHAocGF0dGVybikpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICB3aW5k
b3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgICAgICA8L3NjcmlwdD4KKyAgICAg
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggN2I2OWQ5YS4uM2RmMTYzMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE3OCw2ICsxNzgsNyBAQCBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzLmh0bWwKIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tc3RhdHNTZWxlY3Rvci5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXN0YWJsZS5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmh0
bWwKK2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1s
CiAKICMgQXNzZXJ0cyBpbiBkZWJ1Zy4KIFsgRGVidWcgXSBmYXN0L2ltYWdlcy9sYXJnZS1zaXpl
LWltYWdlLWNyYXNoLmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWM2NmQx
YS4uNmI0MzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTk2Miw2ICs5NjIsNyBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5j
cHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVzcG9uc2UuY3BwCiAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENUcmFja0V2ZW50LmNwcAorICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vU0RQUHJvY2Vzc29yLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vU291cmNlSW5mby5j
cHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xsZXIuY3BwCiAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwCkBAIC0yMzE2
LDYgKzIzMTcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbW9jay9EZXZp
Y2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlv
bkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0cmFpbnRzTW9jay5j
cHAKKyAgICBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcAogICAgIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcApAQCAtMzYwMiw2ICszNjA0LDIyIEBAIGlmIChXZWJDb3JlX1VT
RVJfQUdFTlRfU0NSSVBUUykKICAgICBBRERfU09VUkNFX1dFQkNPUkVfREVSSVZFRF9ERVBFTkRF
TkNJRVMoJHtXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBUU19ERVBFTkRFTkNJRVN9IFVzZXJBZ2Vu
dFNjcmlwdHNEYXRhLmNwcCBVc2VyQWdlbnRTY3JpcHRzLmgpCiBlbmRpZiAoKQogCitpZiAoV2Vi
Q29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMpCisgICAgIyBOZWNlc3NhcnkgdmFyaWFibGVzOgor
ICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgY29udGFpbmluZyB0aGUgSmF2YVNj
cmlwdCBzb3VyY2VzIGxpc3QKKyAgICAjIFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RF
UEVOREVOQ0lFUyBjb250YWluaW5nIHRoZSBzb3VyY2UgZmlsZSB0aGF0IHdpbGwgbG9hZCB0aGUg
c2NyaXB0cyB0byBhZGQgdGhlIHByb3BlcgorICAgICMgICBkZXBlbmRlbmN5IGFuZCBoYXZpbmcg
dGhlbSBidWlsdCBhdCB0aGUgcmlnaHQgbW9tZW50CisKKyAgICBhZGRfY3VzdG9tX2NvbW1hbmQo
CisgICAgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vz
c29yU2NyaXB0c0RhdGEuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9j
ZXNzb3JTY3JpcHRzLmgKKyAgICAgICAgTUFJTl9ERVBFTkRFTkNZICR7V0VCQ09SRV9ESVJ9L1Nj
cmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weQorICAgICAgICBERVBFTkRTICR7V2ViQ29yZV9T
RFBfUFJPQ0VTU09SX1NDUklQVFN9CisgICAgICAgIENPTU1BTkQgIlBZVEhPTlBBVEg9JHtKYXZh
U2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0iICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V0VCQ09SRV9E
SVJ9L1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weSAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0cy5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgJHtXZWJDb3JlX1NEUF9QUk9DRVNTT1Jf
U0NSSVBUU30KKyAgICAgICAgVkVSQkFUSU0pCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0
YS5jcHApCisgICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7V2Vi
Q29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTfSBTRFBQcm9jZXNzb3JTY3Jp
cHRzRGF0YS5jcHAgU0RQUHJvY2Vzc29yU2NyaXB0cy5oKQorZW5kaWYgKCkKKwogIyBHZW5lcmF0
ZSBwbHVnLWluIHJlc291cmNlcwogYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2VzLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBlZThkOTlmLi5lNWNjOWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA3IEBACisyMDE2LTAz
LTAxICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAg
ICAgICBXZWJSVEM6IEltcGxlbWVudCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0
ZU9mZmVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDg2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOiBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9m
IGNyZWF0ZU9mZmVyKCkKKyAgICAgICAgYWRkZWQuIGNyZWF0ZU9mZmVyKCkgaXMgc3BsaXQgdXAg
aW50byBhIHN5bmNocm9ub3VzIHBhcnQsIGFuZCBhCisgICAgICAgIHNjaGVkdWxlZCB0YXNrLiBU
aGUgdGFzayB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGluZm9ybWF0aW9uLCByZXF1aXJpbmcKKyAg
ICAgICAgc29tZSBhbW91bnQgb2Ygd29yaywgc3VjaCBhcyB0aGUgRFRMUyBmaW5nZXJwcmludCBp
cyBhdmFpbGFibGUuIE90aGVyCisgICAgICAgIGFzeW5jIEFQSSBmdW5jdGlvbnMgd2lsbCBhbHNv
IGZvbGxvdyB0aGlzIHBhdHRlcm4uCisKKyAgICAgICAgLSBTRFBQcm9jZXNzb3IgKGFkZGVkKTog
VGhlIFNEUFByb2Nlc3NvcnMgcGFyc2VzIFNEUCB0byBhCisgICAgICAgIE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbiBvYmplY3QgYW5kIGdlbmVyYXRlcyBTRFAgaW4gdGhlCisgICAg
ICAgIHJldmVyc2UgZGlyZWN0aW9uLiBBbnkgU0RQIHN0cmluZyBoYW5kbGluZyBpcyBjb25maW5l
ZCB0byB0aGUKKyAgICAgICAgU0RQUHJvY2Vzc29yIGFuZCBhbGwgY29uZmlndXJhdGlvbiBvZiB0
aGUgbWVkaWEgc2Vzc2lvbiBpcyBkb25lIHZpYSB0aGUKKyAgICAgICAgTWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uIG9iamVjdC4KKworICAgICAgICBUaGUgU0RQIHBhcnNlciBhbmQg
Z2VuZXJhdG9yIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgYW5kCisgICAgICAg
IHdvcmtzIHdpdGggSlNPTiAoU0RQLT5KU09OLCBKU09OLT5TRFApLiBUaGUgU0RQUHJvY2Vzc29y
IHJ1bnMgSlMgaW4gYW4KKyAgICAgICAgaXNvbGF0ZWQgc2NvcGUgYW5kIGNvbnZlcnRzIEpTT04g
dG8gYSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24KKyAgICAgICAgb2JqZWN0IGFu
ZCB0aGUgcmV2ZXJzZS4gVXNpbmcgSlNPTiBzaWduYWxpbmcgKG5vbnN0YW5kYXJkKSBjYW4gYmUK
KyAgICAgICAgaGVscGZ1bCBkdXJpbmcgZGVidWdnaW5nLgorCisgICAgICAgIC0gTW9ja01lZGlh
RW5kcG9pbnQgKGFkZGVkKTogTW9jayBNZWRpYUVuZHBvaW50IGltcGxlbWVudGF0aW9uIHdpdGgK
KyAgICAgICAgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBvZmZlcnMuIERUTFMgaW5mb3JtYXRpb24s
IHN1Y2ggYXMgZmluZ2VycHJpbnQsCisgICAgICAgIGlzIGhhcmQgY29kZWQgdG8gZmFjaWxpdGF0
ZSB0ZXN0aW5nIHdpdGggZXhwZWN0ZWQgdmFsdWVzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sCisKKyAgICAgICAg
VGhlIHRlc3QgaXMgY3VycmVudGx5IHNraXBwZWQgb24gdGhlIG1hYyBwb3J0IHVudGlsIHN1cHBv
cnQgdG8gcmVhZCB0aGUKKyAgICAgICAgU0RQUHJvY2Vzc29yIEphdmFTY3JpcHQgcmVzb3VyY2Ug
aXMgYWRkZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldyYXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlOjpwcm9taXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlOjpXcmFw
cGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpyYW5kb21T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpN
ZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uOjpydW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5k
cG9pbnRQZWVyQ29ubmVjdGlvbjo6c3RhcnRSdW5uaW5nVGFza3MpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVyVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdER0bHNGaW5n
ZXJwcmludCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpTRFBQcm9jZXNz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2FuZGlkYXRlT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25maWd1cmF0
aW9uRnJvbUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6aWNlQ2FuZGlkYXRlRnJvbUpTT04pOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uZmlndXJhdGlvblRvSlNPTik6CisgICAgICAgIChXZWJDb3Jl
OjppY2VDYW5kaWRhdGVUb0pTT04pOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OnBhcnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Z2VuZXJhdGVDYW5kaWRhdGVMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6cGFyc2VDYW5kaWRhdGVMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdCk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9zZHAuanM6IEFkZGVkLgorICAgICAgICAobWF0Y2gpOgorICAgICAgICAoYWRkRGVm
YXVsdHMpOgorICAgICAgICAoZmlsbFRlbXBsYXRlKToKKyAgICAgICAgKFNEUC5wYXJzZSk6Cisg
ICAgICAgIChTRFAuZ2VuZXJhdGUpOgorICAgICAgICAoU0RQLmdlbmVyYXRlQ2FuZGlkYXRlTGlu
ZSk6CisgICAgICAgIChoYXNBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFNEUC52ZXJpZnlPYmpl
Y3QpOgorICAgICAgICAoZ2VuZXJhdGUpOgorICAgICAgICAocGFyc2UpOgorICAgICAgICAoZ2Vu
ZXJhdGVDYW5kaWRhdGVMaW5lKToKKyAgICAgICAgKHBhcnNlQ2FuZGlkYXRlTGluZSk6CisgICAg
ICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9p
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWVkaWFFbmRwb2ludCk6CisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpzY3JpcHRTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291
cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFF
bmRwb2ludDo6TW9ja01lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
RW5kcG9pbnQ6On5Nb2NrTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVk
aWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVk
aWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVk
aWFFbmRwb2ludDo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRWaWRlb1BheWxvYWRzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZUNhbmRp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6cmVwbGFjZVNlbmRT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OnN0b3ApOgorICAg
ICAgICAqIHBsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJ
bnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFF
bmRwb2ludCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKwogMjAxNi0wMi0yNCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgW1RyZWF0UmV0
dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gV2ViS2l0LXNwZWNpZmljIElETCBhdHRyaWJ1dGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAppbmRleCBlZDY4M2Q0Li44ZWUzMDA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCkBAIC0zNSw3ICszNSwxNCBAQAog
CiAjaW5jbHVkZSAiRE9NRXJyb3IuaCIKICNpbmNsdWRlICJKU0RPTUVycm9yLmgiCisjaW5jbHVk
ZSAiSlNSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCisjaW5j
bHVkZSAiUlRDT2ZmZXJBbnN3ZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgi
CisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00OCwxOCArNTUsMTE0IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25C
YWNrZW5kPiBjcmVhdGVNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24oCiAKIENyZWF0ZVBlZXJD
b25uZWN0aW9uQmFja2VuZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZU1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjsKIAorY2xhc3MgV3JhcHBlZFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9u
UHJvbWlzZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V3JhcHBlZFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2U+IGNyZWF0ZShTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAqYWRvcHRSZWYobmV3IFdyYXBwZWRTZXNzaW9uRGVzY3Jp
cHRpb25Qcm9taXNlKFdURk1vdmUocHJvbWlzZSkpKTsKKyAgICB9CisKKyAgICBTZXNzaW9uRGVz
Y3JpcHRpb25Qcm9taXNlJiBwcm9taXNlKCkgeyByZXR1cm4gbV9wcm9taXNlOyB9CisKK3ByaXZh
dGU6CisgICAgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UoU2Vzc2lvbkRlc2NyaXB0
aW9uUHJvbWlzZSYmIHByb21pc2UpCisgICAgICAgIDogbV9wcm9taXNlKFdURk1vdmUocHJvbWlz
ZSkpCisgICAgeyB9CisKKyAgICBTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlIG1fcHJvbWlzZTsK
K307CisKK3N0YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKHNpemVfdCBsZW5ndGgpCit7CisgICAg
Y29uc3Qgc2l6ZV90IHNpemUgPSBjZWlsKGxlbmd0aCAqIDMgLyA0KTsKKyAgICB1bnNpZ25lZCBj
aGFyIHJhbmRvbVZhbHVlc1tzaXplXTsKKyAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVl
cyhyYW5kb21WYWx1ZXMsIHNpemUpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUocmFuZG9tVmFs
dWVzLCBzaXplKTsKK30KKwogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpNZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24oUGVlckNvbm5lY3Rpb25CYWNrZW5kQ2xpZW50KiBjbGllbnQpCisg
ICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3NkcFByb2Nlc3NvcihzdGQ6OnVuaXF1ZV9w
dHI8U0RQUHJvY2Vzc29yPihuZXcgU0RQUHJvY2Vzc29yKG1fY2xpZW50LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpKSkKKyAgICAsIG1fY25hbWUocmFuZG9tU3RyaW5nKDE2KSkKKyAgICAsIG1f
aWNlVWZyYWcocmFuZG9tU3RyaW5nKDQpKQorICAgICwgbV9pY2VQYXNzd29yZChyYW5kb21TdHJp
bmcoMjIpKQoreworICAgIG1fbWVkaWFFbmRwb2ludCA9IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgq
dGhpcyk7CisgICAgQVNTRVJUKG1fbWVkaWFFbmRwb2ludCk7CisKKyAgICBtX2RlZmF1bHRBdWRp
b1BheWxvYWRzID0gbV9tZWRpYUVuZHBvaW50LT5nZXREZWZhdWx0QXVkaW9QYXlsb2FkcygpOwor
ICAgIG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERlZmF1bHRW
aWRlb1BheWxvYWRzKCk7CisKKyAgICAvLyBUYXNrcyAoc2VlIHJ1blRhc2soKSkgd2lsbCBiZSBk
ZWZlcnJlZCB1bnRpbCB3ZSBnZXQgdGhlIERUTFMgZmluZ2VycHJpbnQuCisgICAgbV9tZWRpYUVu
ZHBvaW50LT5nZW5lcmF0ZUR0bHNJbmZvKCk7Cit9CisKK3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uOjpydW5UYXNrKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB0YXNrKQoreworICAgIGlm
IChtX2R0bHNGaW5nZXJwcmludC5pc051bGwoKSkgeworICAgICAgICAvLyBPbmx5IG9uZSB0YXNr
IG5lZWRzIHRvIGJlIGRlZmVycmVkIHNpbmNlIGl0IHdpbGwgaG9sZCBvZmYgYW55IG90aGVycyB1
bnRpbCBjb21wbGV0ZWQuCisgICAgICAgIEFTU0VSVCghbV9pbml0aWFsRGVmZXJyZWRUYXNrKTsK
KyAgICAgICAgbV9pbml0aWFsRGVmZXJyZWRUYXNrID0gdGFzazsKKyAgICB9IGVsc2UKKyAgICAg
ICAgY2FsbE9uTWFpblRocmVhZCh0YXNrKTsKK30KKwordm9pZCBNZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb246OnN0YXJ0UnVubmluZ1Rhc2tzKCkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50
KTsKKyAgICBpZiAoIW1faW5pdGlhbERlZmVycmVkVGFzaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbml0aWFsRGVmZXJyZWRUYXNrKCk7CisgICAgbV9pbml0aWFsRGVmZXJyZWRUYXNrID0g
bnVsbHB0cjsKIH0KIAogdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmNyZWF0ZU9m
ZmVyKFJUQ09mZmVyT3B0aW9ucyYgb3B0aW9ucywgU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYm
IHByb21pc2UpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAgIGNvbnN0IFJlZlB0
cjxSVENPZmZlck9wdGlvbnM+IHByb3RlY3RlZE9wdGlvbnMgPSAmb3B0aW9uczsKKyAgICBSZWZQ
dHI8V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U+IHdyYXBwZWRQcm9taXNlID0gV3Jh
cHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U6OmNyZWF0ZShXVEZNb3ZlKHByb21pc2UpKTsK
IAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcnVuVGFzayhbdGhpcywgcHJvdGVjdGVkT3B0
aW9ucywgd3JhcHBlZFByb21pc2VdKCkgeworICAgICAgICBjcmVhdGVPZmZlclRhc2soKnByb3Rl
Y3RlZE9wdGlvbnMsIHdyYXBwZWRQcm9taXNlLT5wcm9taXNlKCkpOworICAgIH0pOworfQogCi0g
ICAgcHJvbWlzZS5yZWplY3QoRE9NRXJyb3I6OmNyZWF0ZSgiTm90U3VwcG9ydGVkRXJyb3IiKSk7
Cit2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXJUYXNrKFJUQ09m
ZmVyT3B0aW9ucyYsIFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UmIHByb21pc2UpCit7CisgICAg
QVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5KCkpOworCisgICAgUmVmUHRyPE1lZGlh
RW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvblNuYXBzaG90ID0gTWVk
aWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKworICAgIGNvbmZpZ3Vy
YXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24obV9zZHBTZXNzaW9uVmVyc2lvbisrKTsK
KworICAgIFJ0cFNlbmRlclZlY3RvciBzZW5kZXJzID0gbV9jbGllbnQtPmdldFNlbmRlcnMoKTsK
KworICAgIC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMgZm9yIHNlbmRlcnMuCisgICAgZm9yIChh
dXRvJiBzZW5kZXIgOiBzZW5kZXJzKSB7CisgICAgICAgIFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlw
dGlvbj4gbWVkaWFEZXNjcmlwdGlvbiA9IFBlZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUoKTsK
KyAgICAgICAgTWVkaWFTdHJlYW1UcmFjayogdHJhY2sgPSBzZW5kZXItPnRyYWNrKCk7CisKKyAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0TWVkaWFTdHJlYW1JZChzZW5kZXItPm1lZGlhU3Ry
ZWFtSWRzKClbMF0pOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNZWRpYVN0cmVhbVRy
YWNrSWQodHJhY2stPmlkKCkpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRUeXBlKHRy
YWNrLT5raW5kKCkpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRQYXlsb2Fkcyh0cmFj
ay0+a2luZCgpID09ICJhdWRpbyIgPyBtX2RlZmF1bHRBdWRpb1BheWxvYWRzIDogbV9kZWZhdWx0
VmlkZW9QYXlsb2Fkcyk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldER0bHNGaW5nZXJw
cmludEhhc2hGdW5jdGlvbihtX2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uKTsKKyAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50KG1fZHRsc0ZpbmdlcnByaW50KTsKKyAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0Q25hbWUobV9jbmFtZSk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPmFkZFNzcmMoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7Cisg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVVmcmFnKG1faWNlVWZyYWcpOworICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLT5zZXRJY2VQYXNzd29yZChtX2ljZVBhc3N3b3JkKTsKKworICAg
ICAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPmFkZE1lZGlhRGVzY3JpcHRpb24oV1RGTW92ZSht
ZWRpYURlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgU3RyaW5nIHNkcFN0cmluZzsKKyAgICBT
RFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3NkcFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNv
bmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwU3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ICE9IFNEUFBy
b2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7CisgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vz
c29yIGludGVybmFsIGVycm9yIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm9t
aXNlLnJlc29sdmUoUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOjpjcmVhdGUoIm9mZmVyIiwgc2RwU3Ry
aW5nKSk7CiB9CiAKIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVBbnN3
ZXIoUlRDQW5zd2VyT3B0aW9ucyYgb3B0aW9ucywgU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYm
IHByb21pc2UpCkBAIC0xNzksMTAgKzI4MiwxMCBAQCB2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQsCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIFVOVVNFRF9QQVJBTShmaW5nZXJw
cmludCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50RnVuY3Rpb24pOworICAgIG1fZHRs
c0ZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAgbV9kdGxzRmluZ2VycHJpbnRGdW5jdGlv
biA9IGZpbmdlcnByaW50RnVuY3Rpb247CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXJ0UnVubmluZ1Rhc2tzKCk7CiB9CiAKIHZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
Ojpnb3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNhbmRpZGF0
ZT4mJiBjYW5kaWRhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaAppbmRleCBmYjZm
NGYxLi4zY2E5ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmgKQEAgLTQyLDYg
KzQyLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsK
K2NsYXNzIFNEUFByb2Nlc3NvcjsKKwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPFJUQ1J0cFNlbmRl
cj4+IFJ0cFNlbmRlclZlY3RvcjsKIAogY2xhc3MgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
IDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCwgcHVibGljIE1lZGlhRW5kcG9pbnRDbGll
bnQgewogcHVibGljOgpAQCAtNzQsMTEgKzc3LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
TmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRlIHsgbm90SW1wbGVtZW50ZWQoKTsgfTsK
IAogcHJpdmF0ZToKKyAgICB2b2lkIHJ1blRhc2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAg
ICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tzKCk7CisKKyAgICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhS
VENPZmZlck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlz
ZSYpOworCiAgICAgLy8gTWVkaWFFbmRwb2ludENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBnb3RE
dGxzRmluZ2VycHJpbnQoY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludCwgY29uc3QgU3RyaW5nJiBm
aW5nZXJwcmludEZ1bmN0aW9uKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ290SWNlQ2Fu
ZGlkYXRlKHVuc2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0cjxJY2VDYW5kaWRhdGU+JiYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBkb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyh1bnNpZ25lZCBt
ZGVzY0luZGV4KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZ290UmVtb3RlU291cmNlKHVu
c2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiYmKSBvdmVycmlk
ZTsKKworICAgIFBlZXJDb25uZWN0aW9uQmFja2VuZENsaWVudCogbV9jbGllbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IG1fbWVkaWFFbmRwb2ludDsKKworICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBtX2luaXRpYWxEZWZlcnJlZFRhc2s7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U0RQUHJvY2Vzc29yPiBtX3NkcFByb2Nlc3NvcjsKKworICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFQYXlsb2FkPj4gbV9kZWZhdWx0QXVkaW9QYXlsb2FkczsKKyAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhUGF5bG9hZD4+IG1fZGVmYXVsdFZpZGVvUGF5bG9hZHM7CisKKyAgICBTdHJpbmcgbV9j
bmFtZTsKKyAgICBTdHJpbmcgbV9pY2VVZnJhZzsKKyAgICBTdHJpbmcgbV9pY2VQYXNzd29yZDsK
KyAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnQ7CisgICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnBy
aW50RnVuY3Rpb247CisgICAgdW5zaWduZWQgbV9zZHBTZXNzaW9uVmVyc2lvbiB7IDAgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45OGUwM2NjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCkBAIC0wLDAgKzEsNDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVk
ZSAiU0RQUHJvY2Vzc29yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKKyNpbmNsdWRl
ICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0R2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgImluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaCIKKyNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRPYmplY3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTRFBQcm9jZXNz
b3I6OlNEUFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDog
Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoY29udGV4dCkKK3sKK30KKworLy8gTm90ZSB0aGF0
IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBpcyBhICJmbGF0dGVyIiBzdHJ1Y3R1
cmUgdGhhdCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbi4gRm9yCisvLyBleGFtcGxlLCB0aGUgSlNP
TiByZXByZXNlbnRhdGlvbiBoYXMgYW4gImljZSIgb2JqZWN0IHdoaWNoIGNvbGxlY3RzIGEgc2V0
IG9mIHByb3BlcnRpZXMgdW5kZXIgYQorLy8gbmFtZXNwYWNlLiBNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24gaGFzICJpY2UiLXByZWZpeGVzIG9uIHRoZSBjb3JyZXNwb25kaW5nIHBy
b3BlcnRpZXMuCisKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVDYW5kaWRh
dGVPYmplY3QoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidHlwZSIp
LCBjYW5kaWRhdGUudHlwZSgpKTsKKyAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoImZvdW5kYXRpb24iKSwgY2FuZGlkYXRlLmZvdW5kYXRpb24oKSk7CisgICAgY2Fu
ZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29tcG9uZW50SWQiKSwgY2Fu
ZGlkYXRlLmNvbXBvbmVudElkKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgidHJhbnNwb3J0IiksIGNhbmRpZGF0ZS50cmFuc3BvcnQoKSk7CisgICAgY2Fu
ZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicHJpb3JpdHkiKSwgY2FuZGlk
YXRlLnByaW9yaXR5KCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiYWRkcmVzcyIpLCBjYW5kaWRhdGUuYWRkcmVzcygpKTsKKyAgICBjYW5kaWRhdGVPYmpl
Y3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwb3J0IiksIGNhbmRpZGF0ZS5wb3J0KCkpOwor
ICAgIGlmICghY2FuZGlkYXRlLnRjcFR5cGUoKS5pc0VtcHR5KCkpCisgICAgICAgIGNhbmRpZGF0
ZU9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidGNwVHlwZSIpLCBjYW5kaWRhdGUudGNw
VHlwZSgpKTsKKyAgICBpZiAoY2FuZGlkYXRlLnR5cGUoKS5jb252ZXJ0VG9BU0NJSVVwcGVyY2Fz
ZSgpICE9ICJIT1NUIikgeworICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInJlbGF0ZWRBZGRyZXNzIiksIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcygpKTsK
KyAgICAgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicmVsYXRl
ZFBvcnQiKSwgY2FuZGlkYXRlLnJlbGF0ZWRQb3J0KCkpOworICAgIH0KKworICAgIHJldHVybiBj
YW5kaWRhdGVPYmplY3Q7Cit9CisKK3N0YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjcmVhdGVD
YW5kaWRhdGUoY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBjYW5kaWRhdGVPYmplY3QpCit7CisgICAg
UmVmUHRyPEljZUNhbmRpZGF0ZT4gY2FuZGlkYXRlID0gSWNlQ2FuZGlkYXRlOjpjcmVhdGUoKTsK
KyAgICBTdHJpbmcgc3RyaW5nVmFsdWU7CisgICAgdW5zaWduZWQgaW50VmFsdWU7CisKKyAgICBp
ZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgc3RyaW5n
VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldFR5cGUoc3RyaW5nVmFsdWUpOworCisgICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJmb3VuZGF0aW9uIiks
IHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRGb3VuZGF0aW9uKHN0cmluZ1Zh
bHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
ImNvbXBvbmVudElkIiksIGludFZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRDb21wb25l
bnRJZChpbnRWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInRyYW5zcG9ydCIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+
c2V0VHJhbnNwb3J0KHN0cmluZ1ZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoInByaW9yaXR5IiksIGludFZhbHVlKSkKKyAgICAgICAgY2Fu
ZGlkYXRlLT5zZXRQcmlvcml0eShpbnRWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0
LmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImFkZHJlc3MiKSwgc3RyaW5nVmFsdWUpKQorICAgICAg
ICBjYW5kaWRhdGUtPnNldEFkZHJlc3Moc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0
ZU9iamVjdC5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicG9ydCIpLCBpbnRWYWx1ZSkpCisgICAg
ICAgIGNhbmRpZGF0ZS0+c2V0UG9ydChpbnRWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2Jq
ZWN0LmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInRjcFR5cGUiKSwgc3RyaW5nVmFsdWUpKQorICAg
ICAgICBjYW5kaWRhdGUtPnNldFRjcFR5cGUoc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRp
ZGF0ZU9iamVjdC5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZWxhdGVkQWRkcmVzcyIpLCBzdHJp
bmdWYWx1ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0UmVsYXRlZEFkZHJlc3Moc3RyaW5nVmFs
dWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
cmVsYXRlZFBvcnQiKSwgaW50VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldFJlbGF0ZWRQ
b3J0KGludFZhbHVlKTsKKworICAgIHJldHVybiBjYW5kaWRhdGU7Cit9CisKK3N0YXRpYyBSZWZQ
dHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRnJvbUpT
T04oY29uc3QgU3RyaW5nJiBqc29uKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFs
dWU7CisgICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7CisgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBj
b25maWd1cmF0aW9uID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpjcmVhdGUo
KTsKKworICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBpbnRWYWx1ZTsKKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmdWYWx1ZTsKKyAgICBib29sIGJvb2xWYWx1ZTsKKworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGlmIChvYmplY3QtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoIm9yaWdp
bmF0b3IiKSwgb3JpZ2luYXRvck9iamVjdCkpIHsKKyAgICAgICAgaWYgKG9yaWdpbmF0b3JPYmpl
Y3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzZXNzaW9uSWQiKSwgbG9uZ1ZhbHVlKSkKKyAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlc3Npb25JZChsb25nVmFsdWUpOworICAgICAg
ICBpZiAob3JpZ2luYXRvck9iamVjdC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoInNlc3Npb25W
ZXJzaW9uIiksIGludFZhbHVlKSkKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlc3Np
b25WZXJzaW9uKGludFZhbHVlKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG1lZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
b2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVyYWwoIm1lZGlhRGVzY3JpcHRpb25zIiksIG1lZGlh
RGVzY3JpcHRpb25zQXJyYXkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1lZGlh
RGVzY3JpcHRpb25zQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbWRlc2NPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KG1kZXNjT2JqZWN0
KTsKKworICAgICAgICBSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+IG1kZXNjID0gUGVlck1l
ZGlhRGVzY3JpcHRpb246OmNyZWF0ZSgpOworCisgICAgICAgIGlmIChtZGVzY09iamVjdC0+Z2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidHlwZSIpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBt
ZGVzYy0+c2V0VHlwZShzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5n
ZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicG9ydCIpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICBt
ZGVzYy0+c2V0UG9ydChpbnRWYWx1ZSk7CisKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJhZGRyZXNzIiksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAg
IG1kZXNjLT5zZXRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWRlc2NPYmpl
Y3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1vZGUiKSwgc3RyaW5nVmFsdWUpKQorICAgICAg
ICAgICAgbWRlc2MtPnNldE1vZGUoc3RyaW5nVmFsdWUpOworCisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcGF5bG9hZHNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICAgICAgbWRlc2NPYmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZHMiKSwgcGF5
bG9hZHNBcnJheSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHBheWxvYWRz
QXJyYXktPmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBheWxvYWRzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIHBheWxvYWRzQXJyYXktPmdldChqKS0+YXNPYmplY3QocGF5bG9hZHNPYmplY3QpOworCisg
ICAgICAgICAgICBSZWZQdHI8TWVkaWFQYXlsb2FkPiBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpj
cmVhdGUoKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRJbnRlZ2VyKEFT
Q0lJTGl0ZXJhbCgidHlwZSIpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+
c2V0VHlwZShpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZW5jb2RpbmdOYW1lIiksIHN0cmluZ1ZhbHVlKSkKKyAgICAg
ICAgICAgICAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoc3RyaW5nVmFsdWUpOworCisgICAg
ICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjbG9j
a1JhdGUiKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHBheWxvYWQtPnNldENsb2NrUmF0
ZShpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0SW50ZWdl
cihBU0NJSUxpdGVyYWwoImNoYW5uZWxzIiksIGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICBw
YXlsb2FkLT5zZXRDaGFubmVscyhpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChwYXlsb2Fk
c09iamVjdC0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoImNjbWZpciIpLCBib29sVmFsdWUpKQor
ICAgICAgICAgICAgICAgIHBheWxvYWQtPnNldENjbWZpcihib29sVmFsdWUpOworCisgICAgICAg
ICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJuYWNrcGxp
IiksIGJvb2xWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0TmFja3BsaShib29s
VmFsdWUpOworCisgICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEJvb2xlYW4oQVND
SUlMaXRlcmFsKCJuYWNrIiksIGJvb2xWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+
c2V0TmFjayhib29sVmFsdWUpOworCisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbWV0ZXJzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVy
cyIpLCBwYXJhbWV0ZXJzT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJz
T2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgicGFja2V0aXphdGlvbk1vZGUiKSwgaW50
VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoInBhY2tl
dGl6YXRpb25Nb2RlIiwgaW50VmFsdWUpOworCisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRl
cnNPYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJhcHQiKSwgaW50VmFsdWUpKQorICAg
ICAgICAgICAgICAgICAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoImFwdCIsIGludFZhbHVlKTsK
KworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgicnR4VGltZSIpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHBheWxv
YWQtPmFkZFBhcmFtZXRlcigicnR4VGltZSIsIGludFZhbHVlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbWRlc2MtPmFkZFBheWxvYWQoV1RGTW92ZShwYXlsb2FkKSk7CisgICAgICAg
IH0KKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBydGNwT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJydGNwIiksIHJ0Y3BPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAocnRj
cE9iamVjdC0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIm11eCIpLCBib29sVmFsdWUpKQorICAg
ICAgICAgICAgICAgIG1kZXNjLT5zZXRSdGNwTXV4KGJvb2xWYWx1ZSk7CisKKyAgICAgICAgICAg
IGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJydGNwQWRkcmVzcyIpLCBz
dHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWRlc2MtPnNldFJ0Y3BBZGRyZXNzKHN0cmlu
Z1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHJ0Y3BPYmplY3QtPmdldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJydGNwUG9ydCIpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWRlc2MtPnNl
dFJ0Y3BQb3J0KGludFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZGVzY09iamVj
dC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVkaWFTdHJlYW1JZCIpLCBzdHJpbmdWYWx1ZSkp
CisgICAgICAgICAgICBtZGVzYy0+c2V0TWVkaWFTdHJlYW1JZChzdHJpbmdWYWx1ZSk7CisKKyAg
ICAgICAgaWYgKG1kZXNjT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZWRpYVN0cmVh
bVRyYWNrSWQiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgbWRlc2MtPnNldE1lZGlhU3Ry
ZWFtVHJhY2tJZChzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZHRsc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICht
ZGVzY09iamVjdC0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZHRscyIpLCBkdGxzT2JqZWN0KSkg
eworICAgICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInNl
dHVwIiksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZGVzYy0+c2V0RHRsc1NldHVw
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhB
U0NJSUxpdGVyYWwoImZpbmdlcnByaW50SGFzaEZ1bmN0aW9uIiksIHN0cmluZ1ZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBtZGVzYy0+c2V0RHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKHN0cmlu
Z1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhBU0NJSUxp
dGVyYWwoImZpbmdlcnByaW50IiksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZGVz
Yy0+c2V0RHRsc0ZpbmdlcnByaW50KHN0cmluZ1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3NyY3NBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICAgICAgbWRlc2NPYmplY3QtPmdldEFycmF5KEFTQ0lJTGl0ZXJhbCgic3NyY3Mi
KSwgc3NyY3NBcnJheSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNzcmNz
QXJyYXktPmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgIHNzcmNzQXJyYXktPmdldChqKS0+
YXNJbnRlZ2VyKGludFZhbHVlKTsKKyAgICAgICAgICAgIG1kZXNjLT5hZGRTc3JjKGludFZhbHVl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZGVzY09iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiY25hbWUiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgbWRlc2MtPnNldENu
YW1lKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpY2VP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAobWRlc2NPYmpl
Y3QtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoImljZSIpLCBpY2VPYmplY3QpKSB7CisgICAgICAg
ICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ1ZnJhZyIpLCBzdHJp
bmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWRlc2MtPnNldEljZVVmcmFnKHN0cmluZ1ZhbHVl
KTsKKworICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
cGFzc3dvcmQiKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1kZXNjLT5zZXRJY2VQ
YXNzd29yZChzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gY2FuZGlkYXRlc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICAg
ICAgaWNlT2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImNhbmRpZGF0ZXMiKSwgY2FuZGlk
YXRlc0FycmF5KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbmRp
ZGF0ZXNBcnJheS0+bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KGNhbmRp
ZGF0ZU9iamVjdCk7CisKKyAgICAgICAgICAgICAgICBtZGVzYy0+YWRkSWNlQ2FuZGlkYXRlKGNy
ZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBjb25maWd1cmF0aW9uLT5hZGRNZWRpYURlc2NyaXB0aW9uKFdURk1vdmUo
bWRlc2MpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKK30KKworc3RhdGlj
IFJlZlB0cjxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYg
anNvbikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghSW5z
cGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0OworICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KTsK
K30KKworc3RhdGljIFN0cmluZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3JpZ2luYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgb3JpZ2luYXRvck9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJh
bCgic2Vzc2lvbklkIiksIGNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkKCkpOworICAgIG9yaWdpbmF0
b3JPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJzZXNzaW9uVmVyc2lvbiIpLCBjb25m
aWd1cmF0aW9uLnNlc3Npb25WZXJzaW9uKCkpOworICAgIG9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgib3JpZ2luYXRvciIpLCBvcmlnaW5hdG9yT2JqZWN0KTsKKworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKworICAgIGZvciAoY29uc3QgUmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiYg
bWRlc2MgOiBjb25maWd1cmF0aW9uLm1lZGlhRGVzY3JpcHRpb25zKCkpIHsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbWRlc2NPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworCisgICAgICAgIG1kZXNjT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBl
IiksIG1kZXNjLT50eXBlKCkpOworICAgICAgICBtZGVzY09iamVjdC0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoInBvcnQiKSwgbWRlc2MtPnBvcnQoKSk7CisgICAgICAgIG1kZXNjT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhZGRyZXNzIiksIG1kZXNjLT5hZGRyZXNzKCkpOworICAg
ICAgICBtZGVzY09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibW9kZSIpLCBtZGVzYy0+
bW9kZSgpKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgZm9yIChSZWZQdHI8TWVkaWFQ
YXlsb2FkPiBwYXlsb2FkIDogbWRlc2MtPnBheWxvYWRzKCkpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworCisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgidHlwZSIpLCBwYXlsb2FkLT50eXBlKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZW5jb2RpbmdOYW1lIiksIHBheWxvYWQtPmVuY29kaW5n
TmFtZSgpKTsKKyAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJjbG9ja1JhdGUiKSwgcGF5bG9hZC0+Y2xvY2tSYXRlKCkpOworICAgICAgICAgICAgcGF5
bG9hZE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNoYW5uZWxzIiksIHBheWxvYWQt
PmNoYW5uZWxzKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihBU0NJ
SUxpdGVyYWwoImNjbWZpciIpLCBwYXlsb2FkLT5jY21maXIoKSk7CisgICAgICAgICAgICBwYXls
b2FkT2JqZWN0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgibmFja3BsaSIpLCBwYXlsb2FkLT5u
YWNrcGxpKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihBU0NJSUxp
dGVyYWwoIm5hY2siKSwgcGF5bG9hZC0+bmFjaygpKTsKKworICAgICAgICAgICAgaWYgKCFwYXls
b2FkLT5wYXJhbWV0ZXJzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXlsb2FkLT5wYXJhbWV0
ZXJzKCkua2V5cygpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2JqZWN0LT5zZXRJ
bnRlZ2VyKG5hbWUsIHBheWxvYWQtPnBhcmFtZXRlcnMoKS5nZXQobmFtZSkpOworCisgICAgICAg
ICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVy
cyIpLCBwYXJhbWV0ZXJzT2JqZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGF5
bG9hZHNBcnJheS0+cHVzaE9iamVjdChwYXlsb2FkT2JqZWN0KTsKKyAgICAgICAgfQorICAgICAg
ICBtZGVzY09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJwYXlsb2FkcyIpLCBwYXlsb2Fk
c0FycmF5KTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBydGNwT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcnRjcE9iamVjdC0+c2V0Qm9vbGVh
bihBU0NJSUxpdGVyYWwoIm11eCIpLCBtZGVzYy0+cnRjcE11eCgpKTsKKyAgICAgICAgcnRjcE9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYWRkcmVzcyIpLCBtZGVzYy0+cnRjcEFkZHJl
c3MoKSk7CisgICAgICAgIHJ0Y3BPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJwb3J0
IiksIG1kZXNjLT5ydGNwUG9ydCgpKTsKKyAgICAgICAgbWRlc2NPYmplY3QtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInJ0Y3AiKSwgcnRjcE9iamVjdCk7CisKKyAgICAgICAgbWRlc2NPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lZGlhU3RyZWFtSWQiKSwgbWRlc2MtPm1lZGlhU3Ry
ZWFtSWQoKSk7CisgICAgICAgIG1kZXNjT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZWRpYVN0cmVhbVRyYWNrSWQiKSwgbWRlc2MtPm1lZGlhU3RyZWFtVHJhY2tJZCgpKTsKKworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2V0dXAiKSwgbWRlc2MtPmR0bHNTZXR1cCgpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiZmluZ2VycHJpbnRIYXNoRnVuY3Rpb24iKSwgbWRlc2MtPmR0bHNG
aW5nZXJwcmludEhhc2hGdW5jdGlvbigpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgiZmluZ2VycHJpbnQiKSwgbWRlc2MtPmR0bHNGaW5nZXJwcmludCgpKTsK
KyAgICAgICAgbWRlc2NPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImR0bHMiKSwgZHRs
c09iamVjdCk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0FycmF5ID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoYXV0byBzc3JjIDogbWRl
c2MtPnNzcmNzKCkpCisgICAgICAgICAgICBzc3Jjc0FycmF5LT5wdXNoRG91YmxlKHNzcmMpOwor
ICAgICAgICBtZGVzY09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJzc3JjcyIpLCBzc3Jj
c0FycmF5KTsKKworICAgICAgICBtZGVzY09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
Y25hbWUiKSwgbWRlc2MtPmNuYW1lKCkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGljZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGljZU9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidWZyYWciKSwgbWRlc2MtPmljZVVmcmFnKCkp
OworICAgICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhc3N3b3JkIiks
IG1kZXNjLT5pY2VQYXNzd29yZCgpKTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgICAgICBm
b3IgKFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNhbmRpZGF0ZSA6IG1kZXNjLT5pY2VDYW5kaWRhdGVz
KCkpCisgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPnB1c2hPYmplY3QoY3JlYXRlQ2FuZGlk
YXRlT2JqZWN0KCpjYW5kaWRhdGUpKTsKKworICAgICAgICBpY2VPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY2FuZGlkYXRlcyIpLCBjYW5kaWRhdGVzQXJyYXkpOworICAgICAgICBtZGVz
Y09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiaWNlIiksIGljZU9iamVjdCk7CisKKyAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+cHVzaE9iamVjdChtZGVzY09iamVjdCk7Cisg
ICAgfQorICAgIG9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJtZWRpYURlc2NyaXB0aW9u
cyIpLCBtZWRpYURlc2NyaXB0aW9uc0FycmF5KTsKKworICAgIHJldHVybiBvYmplY3QtPnRvSlNP
TlN0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGljZUNhbmRpZGF0ZVRvSlNPTihjb25zdCBJ
Y2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQ2FuZGlkYXRlT2Jq
ZWN0KGNhbmRpZGF0ZSktPnRvSlNPTlN0cmluZygpOworfQorCitTRFBQcm9jZXNzb3I6OlJlc3Vs
dCBTRFBQcm9jZXNzb3I6OmdlbmVyYXRlKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbiYgY29uZmlndXJhdGlvbiwgU3RyaW5nJiBvdXRTZHBTdHJpbmcpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nIHNkcFN0cmluZzsKKyAgICBpZiAoIWNhbGxTY3JpcHQoImdlbmVyYXRlIiwgY29u
ZmlndXJhdGlvblRvSlNPTihjb25maWd1cmF0aW9uKSwgc2RwU3RyaW5nKSkKKyAgICAgICAgcmV0
dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIG91dFNkcFN0cmluZyA9IHNkcFN0cmlu
ZzsKKyAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOworfQorCitTRFBQcm9jZXNzb3I6OlJlc3Vs
dCBTRFBQcm9jZXNzb3I6OnBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRw
b2ludFNlc3Npb25Db25maWd1cmF0aW9uPiYgb3V0Q29uZmlndXJhdGlvbikgY29uc3QKK3sKKyAg
ICBTdHJpbmcgc2NyaXB0T3V0cHV0OworICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2UiLCBzZHAs
IHNjcmlwdE91dHB1dCkpCisgICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVybmFsRXJyb3I7CisK
KyAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVycm9yIikKKyAgICAgICAgcmV0dXJuIFJl
c3VsdDo6UGFyc2VFcnJvcjsKKworICAgIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRnJvbUpTT04oc2NyaXB0T3V0
cHV0KTsKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24pCisgICAgICAgIHJldHVybiBSZXN1bHQ6Oklu
dGVybmFsRXJyb3I7CisKKyAgICBvdXRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKKyAg
ICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOworfQorCitTRFBQcm9jZXNzb3I6OlJlc3VsdCBTRFBQ
cm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdAoreworICAgIFN0cmluZyBjYW5k
aWRhdGVMaW5lOworICAgIGlmICghY2FsbFNjcmlwdCgiZ2VuZXJhdGVDYW5kaWRhdGVMaW5lIiwg
aWNlQ2FuZGlkYXRlVG9KU09OKGNhbmRpZGF0ZSksIGNhbmRpZGF0ZUxpbmUpKQorICAgICAgICBy
ZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgb3V0Q2FuZGlkYXRlTGluZSA9IGNh
bmRpZGF0ZUxpbmU7CisgICAgcmV0dXJuIFJlc3VsdDo6U3VjY2VzczsKK30KKworU0RQUHJvY2Vz
c29yOjpSZXN1bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5n
JiBjYW5kaWRhdGVMaW5lLCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYgb3V0Q2FuZGlkYXRlKSBjb25z
dAoreworICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7CisgICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJz
ZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBzY3JpcHRPdXRwdXQpKQorICAgICAgICBy
ZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgaWYgKHNjcmlwdE91dHB1dCA9PSAi
UGFyc2VFcnJvciIpCisgICAgICAgIHJldHVybiBSZXN1bHQ6OlBhcnNlRXJyb3I7CisKKyAgICBS
ZWZQdHI8SWNlQ2FuZGlkYXRlPiBjYW5kaWRhdGUgPSBpY2VDYW5kaWRhdGVGcm9tSlNPTihzY3Jp
cHRPdXRwdXQpOworICAgIGlmICghY2FuZGlkYXRlKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJ
bnRlcm5hbEVycm9yOworCisgICAgb3V0Q2FuZGlkYXRlID0gY2FuZGlkYXRlOworICAgIHJldHVy
biBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK2Jvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcm
IG91dFJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFkb2N1bWVu
dC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2lzb2xhdGVk
V29ybGQpCisgICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRl
KEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKworICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlw
dENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCk7CisgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1faXNvbGF0ZWRXb3JsZCkpOworICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0
aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImdlbmVyYXRlIikpOworICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlz
RnVuY3Rpb24oKSkgeworICAgICAgICBVUkwgc2NyaXB0VVJMOworICAgICAgICBzY3JpcHRDb250
cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGZ1bmN0aW9uTmFtZSkp
OworICAgIGlmICghZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09i
amVjdChleGVjKTsKKyAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZU5vbmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
TGlzdDsKKyAgICBhcmdMaXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7
CisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIHNjcmlw
dCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBvdXRSZXN1bHQgPSByZXN1bHQuZ2V0U3RyaW5nKGV4ZWMpOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9TRFBQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNDE1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNEUFByb2Nlc3Nvcl9o
CisjZGVmaW5lIFNEUFByb2Nlc3Nvcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJJY2VDYW5k
aWRhdGUuaCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NV3JhcHBlcldvcmxkOworY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgU0RQUHJvY2Vzc29yIDogcHVibGljIENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlc3Vs
dCB7CisgICAgICAgIFN1Y2Nlc3MgPSAxLAorICAgICAgICBJbnRlcm5hbEVycm9yID0gMiwKKyAg
ICAgICAgUGFyc2VFcnJvciA9IDMKKyAgICB9OworCisgICAgU0RQUHJvY2Vzc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIFJlc3VsdCBnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3Q7Cisg
ICAgUmVzdWx0IHBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNl
c3Npb25Db25maWd1cmF0aW9uPiYpIGNvbnN0OworCisgICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlk
YXRlTGluZShjb25zdCBJY2VDYW5kaWRhdGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNv
bnN0OworICAgIFJlc3VsdCBwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRh
dGVMaW5lLCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJv
b2wgY2FsbFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBh
cmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0OworCisgICAgbXV0YWJsZSBSZWZQdHI8
RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gU0RQ
UHJvY2Vzc29yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vc2RwLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmYzg4YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzCkBAIC0wLDAgKzEs
NTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyJ1c2Ugc3Ry
aWN0IjsKKworaWYgKHR5cGVvZihTRFApID09ICJ1bmRlZmluZWQiKQorICAgIHZhciBTRFAgPSB7
fTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcmVnZXhwcyA9IHsKKyAgICAgICAgInZsaW5l
IjogIl52PShbXFxkXSspLiokIiwKKyAgICAgICAgIm9saW5lIjogIl5vPShbXFx3XFwtQFxcLl0r
KSAoW1xcZF0rKSAoW1xcZF0rKSBJTiAoSVBbNDZdKSAoW1xcZFxcLmEtZlxcOl0rKS4qJCIsCisg
ICAgICAgICJzbGluZSI6ICJecz0oLiopJCIsCisgICAgICAgICJ0bGluZSI6ICJedD0oW1xcZF0r
KSAoW1xcZF0rKS4qJCIsCisgICAgICAgICJjbGluZSI6ICJeYz1JTiAoSVBbNDZdKSAoW1xcZFxc
LmEtZlxcOl0rKS4qJCIsCisgICAgICAgICJtc2lkc2VtYW50aWMiOiAiXmE9bXNpZC1zZW1hbnRp
YzogKldNUyAuKiQiLAorICAgICAgICAibWJsb2NrIjogIl5tPShhdWRpb3x2aWRlb3xhcHBsaWNh
dGlvbikgKFtcXGRdKykgKFtBLVovXSspKFtcXGQgXSopJFxccj9cXG4iLAorICAgICAgICAibW9k
ZSI6ICJeYT0oc2VuZHJlY3Z8c2VuZG9ubHl8cmVjdm9ubHl8aW5hY3RpdmUpLiokIiwKKyAgICAg
ICAgInJ0cG1hcCI6ICJeYT1ydHBtYXA6JHt0eXBlfSAoW1xcd1xcLV0rKS8oW1xcZF0rKS8/KFtc
XGRdKyk/LiokIiwKKyAgICAgICAgImZtdHAiOiAiXmE9Zm10cDoke3R5cGV9IChbXFx3XFwtPTtd
KykuKiQiLAorICAgICAgICAicGFyYW0iOiAiKFtcXHdcXC1dKyk9KFtcXHdcXC1dKyk7PyIsCisg
ICAgICAgICJuYWNrIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrJCIsCisgICAgICAgICJuYWNr
cGxpIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrIHBsaSQiLAorICAgICAgICAiY2NtZmlyIjog
Il5hPXJ0Y3AtZmI6JHt0eXBlfSBjY20gZmlyJCIsCisgICAgICAgICJlcmljc2NyZWFtIjogIl5h
PXJ0Y3AtZmI6JHt0eXBlfSBlcmljc2NyZWFtJCIsCisgICAgICAgICJydGNwIjogIl5hPXJ0Y3A6
KFtcXGRdKykoIElOIChJUFs0Nl0pIChbXFxkXFwuYS1mXFw6XSspKT8uKiQiLAorICAgICAgICAi
cnRjcG11eCI6ICJeYT1ydGNwLW11eC4qJCIsCisgICAgICAgICJjbmFtZSI6ICJeYT1zc3JjOihc
XGQrKSBjbmFtZTooW1xcdysvXFwtQFxcLlxce1xcfV0rKS4qJCIsCisgICAgICAgICJtc2lkIjog
Il5hPShzc3JjOlxcZCsgKT9tc2lkOihbXFx3Ky9cXC09XSspICsoW1xcdysvXFwtPV0rKS4qJCIs
CisgICAgICAgICJ1ZnJhZyI6ICJeYT1pY2UtdWZyYWc6KFtcXHcrL10qKS4qJCIsCisgICAgICAg
ICJwd2QiOiAiXmE9aWNlLXB3ZDooW1xcdysvXSopLiokIiwKKyAgICAgICAgImNhbmRpZGF0ZSI6
ICJeYT1jYW5kaWRhdGU6KFxcZCspIChcXGQpIChVRFB8VENQKSAoW1xcZFxcLl0qKSAoW1xcZFxc
LmEtZlxcOl0qKSAoXFxkKikiICsKKyAgICAgICAgICAgICIgdHlwIChbYS16XSopKCByYWRkciAo
W1xcZFxcLmEtZlxcOl0qKSBycG9ydCAoXFxkKikpPyIgKworICAgICAgICAgICAgIiggdGNwdHlw
ZSAoYWN0aXZlfHBhc3NpdmV8c28pKT8uKiQiLAorICAgICAgICAiZmluZ2VycHJpbnQiOiAiXmE9
ZmluZ2VycHJpbnQ6KHNoYS0xfHNoYS0yNTYpIChbQS1GYS1mXFxkXDpdKykuKiQiLAorICAgICAg
ICAic2V0dXAiOiAiXmE9c2V0dXA6KGFjdHBhc3N8YWN0aXZlfHBhc3NpdmUpLiokIiwKKyAgICAg
ICAgInNjdHBtYXAiOiAiXmE9c2N0cG1hcDoke3BvcnR9IChbXFx3XFwtXSspKCBbXFxkXSspPy4q
JCIKKyAgICB9OworCisgICAgdmFyIHRlbXBsYXRlcyA9IHsKKyAgICAgICAgInNkcCI6CisgICAg
ICAgICAgICAidj0ke3ZlcnNpb259XHJcbiIgKworICAgICAgICAgICAgIm89JHt1c2VybmFtZX0g
JHtzZXNzaW9uSWR9ICR7c2Vzc2lvblZlcnNpb259ICR7bmV0VHlwZX0gJHthZGRyZXNzVHlwZX0g
JHthZGRyZXNzfVxyXG4iICsKKyAgICAgICAgICAgICJzPSR7c2Vzc2lvbk5hbWV9XHJcbiIgKwor
ICAgICAgICAgICAgInQ9JHtzdGFydFRpbWV9ICR7c3RvcFRpbWV9XHJcbiIgKworICAgICAgICAg
ICAgIiR7bXNpZHNlbWFudGljTGluZX0iLAorCisgICAgICAgICJtc2lkc2VtYW50aWMiOiAiYT1t
c2lkLXNlbWFudGljOldNUyAke21lZGlhU3RyZWFtSWRzfVxyXG4iLAorCisgICAgICAgICJtYmxv
Y2siOgorICAgICAgICAgICAgIm09JHt0eXBlfSAke3BvcnR9ICR7cHJvdG9jb2x9ICR7Zm10fVxy
XG4iICsKKyAgICAgICAgICAgICJjPSR7bmV0VHlwZX0gJHthZGRyZXNzVHlwZX0gJHthZGRyZXNz
fVxyXG4iICsKKyAgICAgICAgICAgICIke3J0Y3BMaW5lfSIgKworICAgICAgICAgICAgIiR7cnRj
cE11eExpbmV9IiArCisgICAgICAgICAgICAiYT0ke21vZGV9XHJcbiIgKworICAgICAgICAgICAg
IiR7cnRwTWFwTGluZXN9IiArCisgICAgICAgICAgICAiJHtmbXRwTGluZXN9IiArCisgICAgICAg
ICAgICAiJHtuYWNrTGluZXN9IiArCisgICAgICAgICAgICAiJHtuYWNrcGxpTGluZXN9IiArCisg
ICAgICAgICAgICAiJHtjY21maXJMaW5lc30iICsKKyAgICAgICAgICAgICIke2VyaWNTY3JlYW1M
aW5lc30iICsKKyAgICAgICAgICAgICIke2NuYW1lTGluZXN9IiArCisgICAgICAgICAgICAiJHtt
c2lkTGluZXN9IiArCisgICAgICAgICAgICAiJHtpY2VDcmVkZW50aWFsTGluZXN9IiArCisgICAg
ICAgICAgICAiJHtjYW5kaWRhdGVMaW5lc30iICsKKyAgICAgICAgICAgICIke2R0bHNGaW5nZXJw
cmludExpbmV9IiArCisgICAgICAgICAgICAiJHtkdGxzU2V0dXBMaW5lfSIgKworICAgICAgICAg
ICAgIiR7c2N0cG1hcExpbmV9IiwKKworICAgICAgICAicnRjcCI6ICJhPXJ0Y3A6JHtwb3J0fSR7
WyBdbmV0VHlwZX0ke1sgXWFkZHJlc3NUeXBlfSR7WyBdYWRkcmVzc31cclxuIiwKKyAgICAgICAg
InJ0Y3BNdXgiOiAiYT1ydGNwLW11eFxyXG4iLAorCisgICAgICAgICJydHBNYXAiOiAiYT1ydHBt
YXA6JHt0eXBlfSAke2VuY29kaW5nTmFtZX0vJHtjbG9ja1JhdGV9JHtbL11jaGFubmVsc31cclxu
IiwKKyAgICAgICAgImZtdHAiOiAiYT1mbXRwOiR7dHlwZX0gJHtwYXJhbWV0ZXJzfVxyXG4iLAor
ICAgICAgICAibmFjayI6ICJhPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrXHJcbiIsCisgICAgICAgICJu
YWNrcGxpIjogImE9cnRjcC1mYjoke3R5cGV9IG5hY2sgcGxpXHJcbiIsCisgICAgICAgICJjY21m
aXIiOiAiYT1ydGNwLWZiOiR7dHlwZX0gY2NtIGZpclxyXG4iLAorICAgICAgICAiZXJpY3NjcmVh
bSI6ICJhPXJ0Y3AtZmI6JHt0eXBlfSBlcmljc2NyZWFtXHJcbiIsCisKKyAgICAgICAgImNuYW1l
IjogImE9c3NyYzoke3NzcmN9IGNuYW1lOiR7Y25hbWV9XHJcbiIsCisgICAgICAgICJtc2lkIjog
ImE9bXNpZDoke21lZGlhU3RyZWFtSWR9ICR7bWVkaWFTdHJlYW1UcmFja0lkfVxyXG4iLAorCisg
ICAgICAgICJpY2VDcmVkZW50aWFscyI6CisgICAgICAgICAgICAiYT1pY2UtdWZyYWc6JHt1ZnJh
Z31cclxuIiArCisgICAgICAgICAgICAiYT1pY2UtcHdkOiR7cGFzc3dvcmR9XHJcbiIsCisKKyAg
ICAgICAgImNhbmRpZGF0ZSI6CisgICAgICAgICAgICAiYT1jYW5kaWRhdGU6JHtmb3VuZGF0aW9u
fSAke2NvbXBvbmVudElkfSAke3RyYW5zcG9ydH0gJHtwcmlvcml0eX0gJHthZGRyZXNzfSAke3Bv
cnR9IiArCisgICAgICAgICAgICAiIHR5cCAke3R5cGV9JHtbIHJhZGRyIF1yZWxhdGVkQWRkcmVz
c30ke1sgcnBvcnQgXXJlbGF0ZWRQb3J0fSR7WyB0Y3B0eXBlIF10Y3BUeXBlfVxyXG4iLAorCisg
ICAgICAgICJkdGxzRmluZ2VycHJpbnQiOiAiYT1maW5nZXJwcmludDoke2ZpbmdlcnByaW50SGFz
aEZ1bmN0aW9ufSAke2ZpbmdlcnByaW50fVxyXG4iLAorICAgICAgICAiZHRsc1NldHVwIjogImE9
c2V0dXA6JHtzZXR1cH1cclxuIiwKKworICAgICAgICAic2N0cG1hcCI6ICJhPXNjdHBtYXA6JHtw
b3J0fSAke2FwcH0ke1sgXXN0cmVhbXN9XHJcbiIKKyAgICB9OworCisgICAgZnVuY3Rpb24gbWF0
Y2goZGF0YSwgcGF0dGVybiwgZmxhZ3MsIGFsdCkgeworICAgICAgICB2YXIgciA9IG5ldyBSZWdF
eHAocGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZXR1cm4gZGF0YS5tYXRjaChyKSB8fCBhbHQg
JiYgYWx0Lm1hdGNoKHIpIHx8IG51bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkRGVmYXVs
dHMob2JqLCBkZWZhdWx0cykgeworICAgICAgICBmb3IgKHZhciBwIGluIGRlZmF1bHRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlZmF1bHRzLmhhc093blByb3BlcnR5KHApKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHR5cGVvZihvYmpbcF0pID09ICJ1bmRlZmlu
ZWQiKQorICAgICAgICAgICAgICAgIG9ialtwXSA9IGRlZmF1bHRzW3BdOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gZmlsbFRlbXBsYXRlKHRlbXBsYXRlLCBpbmZvKSB7CisgICAg
ICAgIHZhciB0ZXh0ID0gdGVtcGxhdGU7CisgICAgICAgIGZvciAodmFyIHAgaW4gaW5mbykgewor
ICAgICAgICAgICAgaWYgKCFpbmZvLmhhc093blByb3BlcnR5KHApKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHIgPSBuZXcgUmVnRXhwKCJcXCR7KFxcW1teXFxd
XStcXF0pPyIgKyBwICsgIihcXFtbXlxcXV0rXFxdKT99Iik7CisgICAgICAgICAgICB0ZXh0ID0g
dGV4dC5yZXBsYWNlKHIsIGZ1bmN0aW9uIChfLCBwcmVmaXgsIHN1ZmZpeCkgeworICAgICAgICAg
ICAgICAgIGlmICghaW5mb1twXSAmJiBpbmZvW3BdICE9IDApCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiIjsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXggPyBwcmVmaXguc3Vi
c3RyKDEsIHByZWZpeC5sZW5ndGggLSAyKSA6ICIiOworICAgICAgICAgICAgICAgIHN1ZmZpeCA9
IHN1ZmZpeCA/IHN1ZmZpeC5zdWJzdHIoMSwgc3VmZml4Lmxlbmd0aCAtIDIpIDogIiI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIGluZm9bcF0gKyBzdWZmaXg7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9CisKKyAgICBTRFAu
cGFyc2UgPSBmdW5jdGlvbiAoc2RwVGV4dCkgeworICAgICAgICBzZHBUZXh0ID0gbmV3IFN0cmlu
ZyhzZHBUZXh0KTsKKyAgICAgICAgdmFyIHNkcE9iaiA9IHt9OworICAgICAgICB2YXIgcGFydHMg
PSBzZHBUZXh0LnNwbGl0KG5ldyBSZWdFeHAocmVnZXhwcy5tYmxvY2ssICJtIikpIHx8IFtzZHBU
ZXh0XTsKKyAgICAgICAgdmFyIHNibG9jayA9IHBhcnRzLnNoaWZ0KCk7CisgICAgICAgIHZhciB2
ZXJzaW9uID0gcGFyc2VJbnQoKG1hdGNoKHNibG9jaywgcmVnZXhwcy52bGluZSwgIm0iKSB8fCBb
XSlbMV0pOworICAgICAgICBpZiAoIWlzTmFOKHZlcnNpb24pKQorICAgICAgICAgICAgc2RwT2Jq
LnZlcnNpb24gPSB2ZXJzaW9uOworICAgICAgICB2YXIgb3JpZ2luYXRvciA9IG1hdGNoKHNibG9j
aywgcmVnZXhwcy5vbGluZSwgIm0iKTs7CisgICAgICAgIGlmIChvcmlnaW5hdG9yKSB7CisgICAg
ICAgICAgICBzZHBPYmoub3JpZ2luYXRvciA9IHsKKyAgICAgICAgICAgICAgICAidXNlcm5hbWUi
OiBvcmlnaW5hdG9yWzFdLAorICAgICAgICAgICAgICAgICJzZXNzaW9uSWQiOiBvcmlnaW5hdG9y
WzJdLAorICAgICAgICAgICAgICAgICJzZXNzaW9uVmVyc2lvbiI6IHBhcnNlSW50KG9yaWdpbmF0
b3JbM10pLAorICAgICAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAg
ICAiYWRkcmVzc1R5cGUiOiBvcmlnaW5hdG9yWzRdLAorICAgICAgICAgICAgICAgICJhZGRyZXNz
Ijogb3JpZ2luYXRvcls1XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
c2Vzc2lvbk5hbWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4cHMuc2xpbmUsICJtIik7CisgICAgICAg
IGlmIChzZXNzaW9uTmFtZSkKKyAgICAgICAgICAgIHNkcE9iai5zZXNzaW9uTmFtZSA9IHNlc3Np
b25OYW1lWzFdOworICAgICAgICB2YXIgc2Vzc2lvblRpbWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4
cHMudGxpbmUsICJtIik7CisgICAgICAgIGlmIChzZXNzaW9uVGltZSkgeworICAgICAgICAgICAg
c2RwT2JqLnN0YXJ0VGltZSA9IHBhcnNlSW50KHNlc3Npb25UaW1lWzFdKTsKKyAgICAgICAgICAg
IHNkcE9iai5zdG9wVGltZSA9IHBhcnNlSW50KHNlc3Npb25UaW1lWzJdKTsKKyAgICAgICAgfQor
ICAgICAgICB2YXIgaGFzTWVkaWFTdHJlYW1JZCA9ICEhbWF0Y2goc2Jsb2NrLCByZWdleHBzLm1z
aWRzZW1hbnRpYywgIm0iKTsKKyAgICAgICAgc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zID0gW107
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gNSkgewor
ICAgICAgICAgICAgdmFyIG1lZGlhRGVzY3JpcHRpb24gPSB7CisgICAgICAgICAgICAgICAgInR5
cGUiOiBwYXJ0c1tpXSwKKyAgICAgICAgICAgICAgICAicG9ydCI6IHBhcnNlSW50KHBhcnRzW2kg
KyAxXSksCisgICAgICAgICAgICAgICAgInByb3RvY29sIjogcGFydHNbaSArIDJdLAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIHZhciBmbXQgPSBwYXJ0c1tpICsgM10ucmVwbGFjZSgvXltc
c1x1RkVGRlx4QTBdKy8sICcnKQorICAgICAgICAgICAgICAgIC5zcGxpdCgvICsvKQorICAgICAg
ICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlSW50KHgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIG1ibG9j
ayA9IHBhcnRzW2kgKyA0XTsKKworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBtYXRjaCht
YmxvY2ssIHJlZ2V4cHMuY2xpbmUsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChjb25u
ZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5uZXRUeXBlID0gIklO
IjsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZHJlc3NUeXBlID0gY29ubmVj
dGlvblsxXTsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZHJlc3MgPSBjb25u
ZWN0aW9uWzJdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1vZGUgPSBtYXRjaCht
YmxvY2ssIHJlZ2V4cHMubW9kZSwgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgaWYgKG1vZGUp
CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2RlID0gbW9kZVsxXTsKKworICAg
ICAgICAgICAgdmFyIHBheWxvYWRUeXBlcyA9IFtdOworICAgICAgICAgICAgaWYgKG1hdGNoKG1l
ZGlhRGVzY3JpcHRpb24ucHJvdG9jb2wsICIoVURQL1RMUyk/UlRQL1M/QVZQRj8iKSkgeworICAg
ICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBbXTsKKyAgICAgICAgICAg
ICAgICBwYXlsb2FkVHlwZXMgPSBmbXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXls
b2FkVHlwZXMuZm9yRWFjaChmdW5jdGlvbiAocGF5bG9hZFR5cGUpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGF5bG9hZCA9IHsgInR5cGUiOiBwYXlsb2FkVHlwZSB9OworICAgICAgICAgICAgICAg
IHZhciBydHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMucnRwbWFwLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICB2YXIgcnRwbWFwID0gbWF0Y2gobWJsb2NrLCBydHBtYXBMaW5lLCAi
bSIpOworICAgICAgICAgICAgICAgIGlmIChydHBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAg
cGF5bG9hZC5lbmNvZGluZ05hbWUgPSBydHBtYXBbMV07CisgICAgICAgICAgICAgICAgICAgIHBh
eWxvYWQuY2xvY2tSYXRlID0gcGFyc2VJbnQocnRwbWFwWzJdKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAiYXVkaW8iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IHBhcnNlSW50KHJ0cG1hcFszXSkgfHwgMTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWVkaWFEZXNjcmlwdGlvbi50eXBlID09ICJ2aWRl
byIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYWNrTGluZSA9IGZpbGxUZW1wbGF0
ZShyZWdleHBzLm5hY2ssIHBheWxvYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9h
ZC5uYWNrID0gISFtYXRjaChtYmxvY2ssIG5hY2tMaW5lLCAibSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG5hY2twbGlMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMubmFja3BsaSwg
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLm5hY2twbGkgPSAhIW1h
dGNoKG1ibG9jaywgbmFja3BsaUxpbmUsICJtIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY2NtZmlyTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLmNjbWZpciwgcGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmNjbWZpciA9ICEhbWF0Y2gobWJsb2NrLCBj
Y21maXJMaW5lLCAibSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyaWNTY3JlYW1M
aW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMuZXJpY3NjcmVhbSwgcGF5bG9hZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXlsb2FkLmVyaWNzY3JlYW0gPSAhIW1hdGNoKG1ibG9jaywgZXJp
Y1NjcmVhbUxpbmUsICJtIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHBheWxvYWRUeXBlID09IDAgfHwgcGF5bG9hZFR5cGUgPT0gOCkgeworICAg
ICAgICAgICAgICAgICAgICBwYXlsb2FkLmVuY29kaW5nTmFtZSA9IHBheWxvYWRUeXBlID09IDgg
PyAiUENNQSIgOiAiUENNVSI7CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRl
ID0gODAwMDsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IDE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBmbXRwTGluZSA9IGZpbGxUZW1wbGF0
ZShyZWdleHBzLmZtdHAsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIHZhciBmbXRwID0gbWF0
Y2gobWJsb2NrLCBmbXRwTGluZSwgIm0iKTsKKyAgICAgICAgICAgICAgICBpZiAoZm10cCkgewor
ICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFtZXRlcnMgPSB7fTsKKyAgICAgICAgICAg
ICAgICAgICAgZm10cFsxXS5yZXBsYWNlKG5ldyBSZWdFeHAocmVnZXhwcy5wYXJhbSwgImciKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIGtleSwgdmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvLShbYS16XSkvZywgZnVu
Y3Rpb24gKF8sIGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMu
dG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFtZXRlcnNba2V5XSA9IGlzTmFOKCt2YWx1
ZSkgPyB2YWx1ZSA6ICt2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMucHVzaChw
YXlsb2FkKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB2YXIgcnRjcCA9IG1hdGNo
KG1ibG9jaywgcmVnZXhwcy5ydGNwLCAibSIpOworICAgICAgICAgICAgaWYgKHJ0Y3ApIHsKKyAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AgPSB7CisgICAgICAgICAgICAgICAg
ICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAgICAgICAgInBvcnQiOiBwYXJzZUlu
dChydGNwWzFdKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKHJ0Y3Bb
Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3NU
eXBlID0gcnRjcFszXTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNw
LmFkZHJlc3MgPSBydGNwWzRdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHZhciBydGNwbXV4ID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnJ0Y3BtdXgsICJt
Iiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChydGNwbXV4KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFtZWRpYURlc2NyaXB0aW9uLnJ0Y3ApCisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucnRjcCA9IHt9OworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRj
cC5tdXggPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY25hbWVMaW5l
cyA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5jbmFtZSwgIm1nIik7CisgICAgICAgICAgICBpZiAo
Y25hbWVMaW5lcykgeworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc3NyY3MgPSBb
XTsKKyAgICAgICAgICAgICAgICBjbmFtZUxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lID0gbWF0Y2gobGluZSwgcmVnZXhwcy5jbmFt
ZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5wdXNo
KHBhcnNlSW50KGNuYW1lWzFdKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWVkaWFEZXNj
cmlwdGlvbi5jbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
Y25hbWUgPSBjbmFtZVsyXTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGhhc01lZGlhU3RyZWFtSWQpIHsKKyAgICAgICAgICAgICAgICB2YXIg
bXNpZCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5tc2lkLCAibSIpOworICAgICAgICAgICAgICAg
IGlmIChtc2lkKSB7CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFT
dHJlYW1JZCA9IG1zaWRbMl07CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24u
bWVkaWFTdHJlYW1UcmFja0lkID0gbXNpZFszXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciB1ZnJhZyA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy51
ZnJhZywgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgdmFyIHB3ZCA9IG1hdGNoKG1ibG9jaywg
cmVnZXhwcy5wd2QsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmICh1ZnJhZyAmJiBwd2Qp
IHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZSA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgInVmcmFnIjogdWZyYWdbMV0sCisgICAgICAgICAgICAgICAgICAgICJwYXNzd29y
ZCI6IHB3ZFsxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgY2FuZGlkYXRlTGluZXMgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMuY2FuZGlkYXRlLCAi
bWlnIik7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlTGluZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1lZGlhRGVzY3JpcHRpb24uaWNlKQorICAgICAgICAgICAgICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLmljZSA9IHt9OworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNl
LmNhbmRpZGF0ZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVMaW5lcy5mb3JFYWNo
KGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGVMaW5l
ID0gbWF0Y2gobGluZSwgcmVnZXhwcy5jYW5kaWRhdGUsICJtaSIpOworICAgICAgICAgICAgICAg
ICAgICB2YXIgY2FuZGlkYXRlID0geworICAgICAgICAgICAgICAgICAgICAgICAgImZvdW5kYXRp
b24iOiBjYW5kaWRhdGVMaW5lWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVu
dElkIjogcGFyc2VJbnQoY2FuZGlkYXRlTGluZVsyXSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAidHJhbnNwb3J0IjogY2FuZGlkYXRlTGluZVszXS50b1VwcGVyQ2FzZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgInByaW9yaXR5IjogcGFyc2VJbnQoY2FuZGlkYXRlTGluZVs0XSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6IGNhbmRpZGF0ZUxpbmVbNV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAicG9ydCI6IHBhcnNlSW50KGNhbmRpZGF0ZUxpbmVbNl0pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiBjYW5kaWRhdGVMaW5lWzddCisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVMaW5lWzld
KQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlLnJlbGF0ZWRBZGRyZXNzID0gY2Fu
ZGlkYXRlTGluZVs5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihjYW5kaWRhdGVM
aW5lWzEwXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUucmVsYXRlZFBvcnQg
PSBwYXJzZUludChjYW5kaWRhdGVMaW5lWzEwXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
YW5kaWRhdGVMaW5lWzEyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS50Y3BU
eXBlID0gY2FuZGlkYXRlTGluZVsxMl07CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNh
bmRpZGF0ZS50cmFuc3BvcnQgPT0gIlRDUCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjYW5kaWRhdGUucG9ydCA9PSAwIHx8IGNhbmRpZGF0ZS5wb3J0ID09IDkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9ICJhY3RpdmUiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5wb3J0ID0gOTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMucHVzaChjYW5kaWRh
dGUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIgZmluZ2VycHJpbnQgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMuZmluZ2VycHJpbnQsICJtaSIs
IHNibG9jayk7CisgICAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHsKKyAgICAgICAgICAgICAg
ICBtZWRpYURlc2NyaXB0aW9uLmR0bHMgPSB7CisgICAgICAgICAgICAgICAgICAgICJmaW5nZXJw
cmludEhhc2hGdW5jdGlvbiI6IGZpbmdlcnByaW50WzFdLnRvTG93ZXJDYXNlKCksCisgICAgICAg
ICAgICAgICAgICAgICJmaW5nZXJwcmludCI6IGZpbmdlcnByaW50WzJdLnRvVXBwZXJDYXNlKCkK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNldHVw
ID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnNldHVwLCAibSIsIHNibG9jayk7CisgICAgICAgICAg
ICBpZiAoc2V0dXApIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24uZHRs
cykKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzID0ge307CisgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzLnNldHVwID0gc2V0dXBbMV07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnByb3RvY29sID09
ICJEVExTL1NDVFAiKSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwID0g
eworICAgICAgICAgICAgICAgICAgICAicG9ydCI6IGZtdFswXQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICAgICAgdmFyIHNjdHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMu
c2N0cG1hcCwgbWVkaWFEZXNjcmlwdGlvbi5zY3RwKTsKKyAgICAgICAgICAgICAgICB2YXIgc2N0
cG1hcCA9IG1hdGNoKG1ibG9jaywgc2N0cG1hcExpbmUsICJtIik7CisgICAgICAgICAgICAgICAg
aWYgKHNjdHBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3Rw
LmFwcCA9IHNjdHBtYXBbMV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzY3RwbWFwWzJdKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwLnN0cmVhbXMgPSBw
YXJzZUludChzY3RwbWFwWzJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5wdXNoKG1lZGlhRGVzY3JpcHRp
b24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNkcE9iajsKKyAgICB9OworCisgICAg
U0RQLmdlbmVyYXRlID0gZnVuY3Rpb24gKHNkcE9iaikgeworICAgICAgICBzZHBPYmogPSBKU09O
LnBhcnNlKEpTT04uc3RyaW5naWZ5KHNkcE9iaikpOworICAgICAgICBhZGREZWZhdWx0cyhzZHBP
YmosIHsKKyAgICAgICAgICAgICJ2ZXJzaW9uIjogMCwKKyAgICAgICAgICAgICJvcmlnaW5hdG9y
Ijoge30sCisgICAgICAgICAgICAic2Vzc2lvbk5hbWUiOiAiLSIsCisgICAgICAgICAgICAic3Rh
cnRUaW1lIjogMCwKKyAgICAgICAgICAgICJzdG9wVGltZSI6IDAsCisgICAgICAgICAgICAibWVk
aWFEZXNjcmlwdGlvbnMiOiBbXQorICAgICAgICB9KTsKKyAgICAgICAgYWRkRGVmYXVsdHMoc2Rw
T2JqLm9yaWdpbmF0b3IsIHsKKyAgICAgICAgICAgICJ1c2VybmFtZSI6ICItIiwKKyAgICAgICAg
ICAgICJzZXNzaW9uSWQiOiAiIiArIE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKyArbmV3IERh
dGUoKSkgKiAxZTYpLAorICAgICAgICAgICAgInNlc3Npb25WZXJzaW9uIjogMSwKKyAgICAgICAg
ICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAor
ICAgICAgICAgICAgImFkZHJlc3MiOiAiMTI3LjAuMC4xIgorICAgICAgICB9KTsKKyAgICAgICAg
dmFyIHNkcFRleHQgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLnNkcCwgc2RwT2JqKTsKKyAgICAg
ICAgc2RwVGV4dCA9IGZpbGxUZW1wbGF0ZShzZHBUZXh0LCBzZHBPYmoub3JpZ2luYXRvcik7CisK
KyAgICAgICAgdmFyIG1zaWRzZW1hbnRpY0xpbmUgPSAiIjsKKyAgICAgICAgdmFyIG1lZGlhU3Ry
ZWFtSWRzID0gW107CisgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1
bmN0aW9uIChtZGVzYykgeworICAgICAgICAgICAgaWYgKG1kZXNjLm1lZGlhU3RyZWFtSWQgJiYg
bWRlc2MubWVkaWFTdHJlYW1UcmFja0lkCisgICAgICAgICAgICAgICAgJiYgbWVkaWFTdHJlYW1J
ZHMuaW5kZXhPZihtZGVzYy5tZWRpYVN0cmVhbUlkKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBt
ZWRpYVN0cmVhbUlkcy5wdXNoKG1kZXNjLm1lZGlhU3RyZWFtSWQpOworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKG1lZGlhU3RyZWFtSWRzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG1zaWRz
ZW1hbnRpY0xpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWRzZW1hbnRpYywKKyAgICAg
ICAgICAgICAgICB7ICJtZWRpYVN0cmVhbUlkcyI6IG1lZGlhU3RyZWFtSWRzLmpvaW4oIiAiKSB9
KTsKKyAgICAgICAgfQorICAgICAgICBzZHBUZXh0ID0gZmlsbFRlbXBsYXRlKHNkcFRleHQsIHsg
Im1zaWRzZW1hbnRpY0xpbmUiOiBtc2lkc2VtYW50aWNMaW5lIH0pOworCisgICAgICAgIHNkcE9i
ai5tZWRpYURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtZWRpYURlc2NyaXB0aW9uKSB7
CisgICAgICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURlc2NyaXB0aW9uLCB7CisgICAgICAgICAg
ICAgICAgInBvcnQiOiA5LAorICAgICAgICAgICAgICAgICJwcm90b2NvbCI6ICJVRFAvVExTL1JU
UC9TQVZQRiIsCisgICAgICAgICAgICAgICAgIm5ldFR5cGUiOiAiSU4iLAorICAgICAgICAgICAg
ICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjAu
MC4wLjAiLAorICAgICAgICAgICAgICAgICJtb2RlIjogInNlbmRyZWN2IiwKKyAgICAgICAgICAg
ICAgICAicGF5bG9hZHMiOiBbXSwKKyAgICAgICAgICAgICAgICAicnRjcCI6IHt9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHZhciBtYmxvY2sgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVz
Lm1ibG9jaywgbWVkaWFEZXNjcmlwdGlvbik7CisKKyAgICAgICAgICAgIHZhciBwYXlsb2FkSW5m
byA9IHsicnRwTWFwTGluZXMiOiAiIiwgImZtdHBMaW5lcyI6ICIiLCAibmFja0xpbmVzIjogIiIs
CisgICAgICAgICAgICAgICAgIm5hY2twbGlMaW5lcyI6ICIiLCAiY2NtZmlyTGluZXMiOiAiIiwg
ImVyaWNTY3JlYW1MaW5lcyI6ICIifTsKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMuZm9yRWFjaChmdW5jdGlvbiAocGF5bG9hZCkgeworICAgICAgICAgICAgICAgIGlmIChw
YXlsb2FkSW5mby5mbXQpCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmZtdCArPSAi
ICIgKyBwYXlsb2FkLnR5cGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkSW5mby5mbXQgPSBwYXlsb2FkLnR5cGU7CisgICAgICAgICAgICAgICAgaWYg
KCFwYXlsb2FkLmNoYW5uZWxzIHx8IHBheWxvYWQuY2hhbm5lbHMgPT0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IG51bGw7CisgICAgICAgICAgICAgICAgcGF5bG9h
ZEluZm8ucnRwTWFwTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5ydHBNYXAsIHBheWxv
YWQpOworICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnBhcmFtZXRlcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGZtdHBJbmZvID0geyAidHlwZSI6IHBheWxvYWQudHlwZSwgInBhcmFt
ZXRlcnMiOiAiIiB9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHBheWxvYWQu
cGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcC5yZXBs
YWNlKC8oW0EtWl0pKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgYSwgYikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiLSIgKyBhLnRvTG93ZXJDYXNlKCkgKyBiOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm10cElu
Zm8ucGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRwSW5mby5wYXJh
bWV0ZXJzICs9ICI7IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBJbmZvLnBhcmFtZXRl
cnMgKz0gcGFyYW0gKyAiPSIgKyBwYXlsb2FkLnBhcmFtZXRlcnNbcF07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8uZm10cExpbmVzICs9IGZp
bGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuZm10cCwgZm10cEluZm8pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYWNrKQorICAgICAgICAgICAgICAgICAgICBw
YXlsb2FkSW5mby5uYWNrTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5uYWNrLCBwYXls
b2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYWNrcGxpKQorICAgICAgICAgICAg
ICAgICAgICBwYXlsb2FkSW5mby5uYWNrcGxpTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRl
cy5uYWNrcGxpLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5jY21maXIp
CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmNjbWZpckxpbmVzICs9IGZpbGxUZW1w
bGF0ZSh0ZW1wbGF0ZXMuY2NtZmlyLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5
bG9hZC5lcmljc2NyZWFtKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5lcmljU2Ny
ZWFtTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5lcmljc2NyZWFtLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9j
aywgcGF5bG9hZEluZm8pOworCisgICAgICAgICAgICB2YXIgcnRjcEluZm8gPSB7InJ0Y3BMaW5l
IjogIiIsICJydGNwTXV4TGluZSI6ICIifTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uLnJ0Y3AucG9ydCkgeworICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3Jp
cHRpb24ucnRjcCwgeworICAgICAgICAgICAgICAgICAgICAibmV0VHlwZSI6ICJJTiIsCisgICAg
ICAgICAgICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAgICAgICAgICAgICAg
ICAiYWRkcmVzcyI6ICIiCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYg
KCFtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5ydGNwLm5ldFR5cGUgPSBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVz
c1R5cGUgPSAiIjsKKyAgICAgICAgICAgICAgICBydGNwSW5mby5ydGNwTGluZSA9IGZpbGxUZW1w
bGF0ZSh0ZW1wbGF0ZXMucnRjcCwgbWVkaWFEZXNjcmlwdGlvbi5ydGNwKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnJ0Y3AubXV4KQorICAgICAgICAg
ICAgICAgIHJ0Y3BJbmZvLnJ0Y3BNdXhMaW5lID0gdGVtcGxhdGVzLnJ0Y3BNdXg7CisgICAgICAg
ICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJsb2NrLCBydGNwSW5mbyk7CisKKyAgICAgICAg
ICAgIHZhciBzcmNBdHRyaWJ1dGVMaW5lcyA9IHsgImNuYW1lTGluZXMiOiAiIiwgIm1zaWRMaW5l
cyI6ICIiIH07CisgICAgICAgICAgICB2YXIgc3JjQXR0cmlidXRlcyA9IHsKKyAgICAgICAgICAg
ICAgICAiY25hbWUiOiBtZWRpYURlc2NyaXB0aW9uLmNuYW1lLAorICAgICAgICAgICAgICAgICJt
ZWRpYVN0cmVhbUlkIjogbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkLAorICAgICAgICAg
ICAgICAgICJtZWRpYVN0cmVhbVRyYWNrSWQiOiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFt
VHJhY2tJZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9u
LmNuYW1lICYmIG1lZGlhRGVzY3JpcHRpb24uc3NyY3MpIHsKKyAgICAgICAgICAgICAgICBtZWRp
YURlc2NyaXB0aW9uLnNzcmNzLmZvckVhY2goZnVuY3Rpb24gKHNzcmMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3JjQXR0cmlidXRlcy5zc3JjID0gc3NyYzsKKyAgICAgICAgICAgICAgICAgICAg
c3JjQXR0cmlidXRlTGluZXMuY25hbWVMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmNu
YW1lLCBzcmNBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3Jp
cHRpb24ubWVkaWFTdHJlYW1JZCAmJiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY0F0dHJpYnV0ZUxpbmVzLm1zaWRMaW5lcyAr
PSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWQsIHNyY0F0dHJpYnV0ZXMpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYURlc2NyaXB0aW9uLm1lZGlh
U3RyZWFtSWQgJiYgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQpIHsKKyAgICAg
ICAgICAgICAgICBzcmNBdHRyaWJ1dGVzLnNzcmMgPSBudWxsOworICAgICAgICAgICAgICAgIHNy
Y0F0dHJpYnV0ZUxpbmVzLm1zaWRMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWQs
IHNyY0F0dHJpYnV0ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJsb2NrID0gZmls
bFRlbXBsYXRlKG1ibG9jaywgc3JjQXR0cmlidXRlTGluZXMpOworCisgICAgICAgICAgICB2YXIg
aWNlSW5mbyA9IHsiaWNlQ3JlZGVudGlhbExpbmVzIjogIiIsICJjYW5kaWRhdGVMaW5lcyI6ICIi
fTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmljZSkgeworICAgICAgICAgICAg
ICAgIGljZUluZm8uaWNlQ3JlZGVudGlhbExpbmVzID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5p
Y2VDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2Up
OworICAgICAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmljZS5jYW5kaWRhdGVzKSB7
CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMuZm9y
RWFjaChmdW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRE
ZWZhdWx0cyhjYW5kaWRhdGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRl
ZEFkZHJlc3MiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGVkUG9y
dCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRjcFR5cGUiOiBudWxsCisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGljZUlu
Zm8uY2FuZGlkYXRlTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5jYW5kaWRhdGUsIGNh
bmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZShtYmxvY2ssIGlj
ZUluZm8pOworCisgICAgICAgICAgICB2YXIgZHRsc0luZm8gPSB7ICJkdGxzRmluZ2VycHJpbnRM
aW5lIjogIiIsICJkdGxzU2V0dXBMaW5lIjogIiIgfTsKKyAgICAgICAgICAgIGlmIChtZWRpYURl
c2NyaXB0aW9uLmR0bHMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5k
dGxzLmZpbmdlcnByaW50KSB7CisgICAgICAgICAgICAgICAgICAgIGR0bHNJbmZvLmR0bHNGaW5n
ZXJwcmludExpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmR0bHNGaW5nZXJwcmludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRscyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24uZHRs
cywgeyJzZXR1cCI6ICJhY3RwYXNzIn0pOworICAgICAgICAgICAgICAgIGR0bHNJbmZvLmR0bHNT
ZXR1cExpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmR0bHNTZXR1cCwgbWVkaWFEZXNjcmlw
dGlvbi5kdGxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1w
bGF0ZShtYmxvY2ssIGR0bHNJbmZvKTsKKworICAgICAgICAgICAgdmFyIHNjdHBJbmZvID0geyJz
Y3RwbWFwTGluZSI6ICIiLCAiZm10IjogIiJ9OworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3Jp
cHRpb24uc2N0cCkgeworICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRp
b24uc2N0cCwgeyJzdHJlYW1zIjogbnVsbH0pOworICAgICAgICAgICAgICAgIHNjdHBJbmZvLnNj
dHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5zY3RwbWFwLCBtZWRpYURlc2NyaXB0
aW9uLnNjdHApOworICAgICAgICAgICAgICAgIHNjdHBJbmZvLmZtdCA9IG1lZGlhRGVzY3JpcHRp
b24uc2N0cC5wb3J0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRl
bXBsYXRlKG1ibG9jaywgc2N0cEluZm8pOworCisgICAgICAgICAgICBzZHBUZXh0ICs9IG1ibG9j
azsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHNkcFRleHQ7CisgICAgfTsKKworICAg
IFNEUC5nZW5lcmF0ZUNhbmRpZGF0ZUxpbmUgPSBmdW5jdGlvbiAoY2FuZGlkYXRlT2JqKSB7Cisg
ICAgICAgIGFkZERlZmF1bHRzKGNhbmRpZGF0ZU9iaiwgeworICAgICAgICAgICAgInJlbGF0ZWRB
ZGRyZXNzIjogbnVsbCwKKyAgICAgICAgICAgICJyZWxhdGVkUG9ydCI6IG51bGwsCisgICAgICAg
ICAgICAidGNwVHlwZSI6IG51bGwKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIGZpbGxU
ZW1wbGF0ZSh0ZW1wbGF0ZXMuY2FuZGlkYXRlLCBjYW5kaWRhdGVPYmopOworICAgIH07CisKKyAg
ICB2YXIgZXhwZWN0ZWRQcm9wZXJ0aWVzID0geworICAgICAgICAic2Vzc2lvbiI6IFsgInZlcnNp
b24iLCAib3JpZ2luYXRvciIsICJzZXNzaW9uTmFtZSIsICJzdGFydFRpbWUiLCAic3RvcFRpbWUi
IF0sCisgICAgICAgICJtbGluZSI6IFsgInR5cGUiLCAicG9ydCIsICJwcm90b2NvbCIsICJtb2Rl
IiwgInBheWxvYWRzIiwgInJ0Y3AiLCAibWVkaWFTdHJlYW1JZCIsCisgICAgICAgICAgICAibWVk
aWFTdHJlYW1UcmFja0lkIiwgImR0bHMiLCAic3NyY3MiLCAiY25hbWUiLCAiaWNlIiBdLAorICAg
ICAgICAibWxpbmVTdWJPYmplY3RzIjogeworICAgICAgICAgICAgInJ0Y3AiOiBbICJtdXgiIF0s
CisgICAgICAgICAgICAiaWNlIjogWyAidWZyYWciLCAicGFzc3dvcmQiIF0sCisgICAgICAgICAg
ICAiZHRscyI6IFsgInNldHVwIiwgImZpbmdlcnByaW50SGFzaEZ1bmN0aW9uIiwgImZpbmdlcnBy
aW50IiBdCisgICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gaGFzQWxsUHJvcGVydGll
cyhvYmplY3QsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG1pc3NpbmcgPSBwcm9wZXJ0aWVz
LmZpbHRlcihmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgIHJldHVybiAhb2JqZWN0
Lmhhc093blByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJu
ICFtaXNzaW5nLmxlbmd0aDsKKyAgICB9CisKKyAgICBTRFAudmVyaWZ5T2JqZWN0ID0gZnVuY3Rp
b24gKHNkcE9iaikgeworICAgICAgICBpZiAoIWhhc0FsbFByb3BlcnRpZXMoc2RwT2JqLCBleHBl
Y3RlZFByb3BlcnRpZXMuc2Vzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZHBPYmoubWVkaWFEZXNjcmlwdGlvbnMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBtZWRpYURlc2NyaXB0aW9uID0gc2RwT2JqLm1lZGlh
RGVzY3JpcHRpb25zW2ldOworCisgICAgICAgICAgICBpZiAoIWhhc0FsbFByb3BlcnRpZXMobWVk
aWFEZXNjcmlwdGlvbiwgZXhwZWN0ZWRQcm9wZXJ0aWVzLm1saW5lKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAodmFyIHAgaW4gZXhwZWN0ZWRQcm9w
ZXJ0aWVzLm1saW5lU3ViT2JqZWN0cykgeworICAgICAgICAgICAgICAgIGlmICghaGFzQWxsUHJv
cGVydGllcyhtZWRpYURlc2NyaXB0aW9uW3BdLCBleHBlY3RlZFByb3BlcnRpZXMubWxpbmVTdWJP
YmplY3RzW3BdKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworfSkoKTsK
KworZnVuY3Rpb24gZ2VuZXJhdGUoanNvbikgeworICAgIHZhciBvYmplY3QgPSBKU09OLnBhcnNl
KGpzb24pOworICAgIHJldHVybiBTRFAuZ2VuZXJhdGUob2JqZWN0KTsKK30KKworZnVuY3Rpb24g
cGFyc2Uoc2RwKSB7CisgICAgdmFyIG9iamVjdCA9IFNEUC5wYXJzZShzZHApOworCisgICAgaWYg
KCFTRFAudmVyaWZ5T2JqZWN0KG9iamVjdCkpCisgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciI7
CisKKyAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTsKK30KKworZnVuY3Rpb24gZ2Vu
ZXJhdGVDYW5kaWRhdGVMaW5lKGpzb24pIHsKKyAgICB2YXIgY2FuZGlkYXRlID0gSlNPTi5wYXJz
ZShqc29uKTsKKyAgICByZXR1cm4gU0RQLmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjYW5kaWRhdGUp
LnN1YnN0cigyKTsKK30KKworZnVuY3Rpb24gcGFyc2VDYW5kaWRhdGVMaW5lKGNhbmRpZGF0ZUxp
bmUpIHsKKyAgICB2YXIgbWRlc2MgPSBTRFAucGFyc2UoIm09YXBwbGljYXRpb24gMCBOT05FXHJc
bmE9IiArIGNhbmRpZGF0ZUxpbmUgKyAiXHJcbiIpLm1lZGlhRGVzY3JpcHRpb25zWzBdOworICAg
IGlmICghbWRlc2MuaWNlKQorICAgICAgICByZXR1cm4gIlBhcnNlRXJyb3IiOworCisgICAgcmV0
dXJuIEpTT04uc3RyaW5naWZ5KG1kZXNjLmljZS5jYW5kaWRhdGVzWzBdKTsKK30KKworaWYgKHR5
cGVvZihtb2R1bGUpICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZihleHBvcnRzKSAhPSAidW5kZWZp
bmVkIikKKyAgICBtb2R1bGUuZXhwb3J0cyA9IFNEUDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UK
aW5kZXggN2QxMjZiNS4uYzNmZjExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQ0
LDYgKzQ0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kIgogICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ncmFwaGljcy94MTEiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21lZGlh
c3RyZWFtL2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9ndGsiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKQEAgLTE1Miw2ICsxNTMsOCBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAogCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAorCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsv
c291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCkBAIC0yNDYsNiArMjQ5LDkgQEAg
c2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTCiAKIHNldChXZWJDb3JlX1VTRVJfQUdFTlRf
U0NSSVBUU19ERVBFTkRFTkNJRVMgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmNwcCkKIAorc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTICR7V0VCQ09S
RV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzKQorc2V0KFdlYkNvcmVfU0RQX1BST0NF
U1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwKQorCiBsaXN0KEFQUEVORCBX
ZWJDb3JlX0xJQlJBUklFUwogICAgICR7QVRLX0xJQlJBUklFU30KICAgICAke0NBSVJPX0xJQlJB
UklFU30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBmZDU0ZWI0Li5lYmQ4ZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDM2LDYgKzI0MzYsMTIgQEAKIAkJ
NUUyQzQzNzQxQkNGMEQ3NTAwMDFFMkJDIC8qIEpTUlRDUnRwU2VuZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3MDFCQ0YwRDY5MDAwMUUy
QkMgLyogSlNSVENSdHBTZW5kZXIuaCAqLzsgfTsKIAkJNUUyQzQzN0IxQkNGOUE1NzAwMDFFMkJD
IC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc2MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVy
Q29ubmVjdGlvbkJ1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNUUyQzQzN0MxQkNGOUE4NDAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0
aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVFMkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlv
bkludGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNUVBM0Q2REYxQzg1OUQ3RjAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEz
RDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLzsgfTsKKwkJNUVB
M0Q2RTAxQzg1OUQ4NDAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkREMUM4NTlENTMwMDMw
MEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi87IH07CisJCTVFQTNENkUzMUM4NTlEQzEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nv
ci5jcHAgKi87IH07CisJCTVFQTNENkU0MUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkUy
MUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLzsgfTsKKwkJNUVBM0Q2RTcxQzg1
QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU1MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi87IH07CisJCTVFQTNENkU4
MUM4NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTYxQzg1QTlDMzAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi87IH07CiAJCTVFQTcyNUQy
MUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1l
ZGlhRGV2aWNlcy5jcHAgKi87IH07CiAJCTVFQTcyNUQzMUFDQUJENDcwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVFQTcyNUNFMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RUE3MjVENTFBQ0FCRDU3MDBF
QUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZp
Z2F0b3JNZWRpYURldmljZXMuY3BwICovOyB9OwpAQCAtMTAwMzQsNiArMTAwNDAsMTIgQEAKIAkJ
NUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlu
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUy
QkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0
aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQzNzkxQkNGOUEwQjAw
MDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlu
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUEzRDZERDFDODU5RDUzMDAzMDBC
QkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTW9ja01lZGlhRW5kcG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja01lZGlhRW5kcG9pbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFBy
b2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTRFBQcm9j
ZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUEzRDZFMjFDODU5REFB
MDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNEUFByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUEzRDZF
NTFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUEzRDZFNjFDODVBOUMzMDAz
MDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0ExQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1l
ZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZp
Z2F0b3JNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3
MjVDQjFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDQzFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNZWRp
YURldmljZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU0ODUsNiArMTU0
OTcsOCBAQAogCQkJCTVFMkM0MzY0MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmNw
cCAqLywKIAkJCQk1RTJDNDM2NTFCQ0VFMzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5oICov
LAogCQkJCTVFMkM0MzY2MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmlkbCAqLywK
KwkJCQk1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNwcCAqLywKKwkJ
CQk1RUEzRDZFMjFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi8sCiAJCQkJMDc2
MzA2RDQxN0UxNDlDRjAwNUE3QzRFIC8qIFNvdXJjZUluZm8uY3BwICovLAogCQkJCTA3NjMwNkQ1
MTdFMTQ5Q0YwMDVBN0M0RSAvKiBTb3VyY2VJbmZvLmggKi8sCiAJCQkJMDc2MzA2RDYxN0UxNDlD
RjAwNUE3QzRFIC8qIFNvdXJjZUluZm8uaWRsICovLApAQCAtMTU1NDYsNiArMTU1NjAsOCBAQAog
CQkJCTA3MjIxQkFFMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENTdGF0c1JlcXVlc3QuaCAqLywKIAkJ
CQkwNzIyMUJBRjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDU3RhdHNSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQkwNzIyMUJCMDE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDVm9pZFJlcXVlc3QuaCAqLywKKwkJ
CQk1RUEzRDZFNTFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2Uu
Y3BwICovLAorCQkJCTVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3Jp
cHRSZXNvdXJjZS5oICovLAogCQkJCTA3MEU4MUQwMUJGMjc2NTYwMDFGREE0OCAvKiBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1lZGlhc3RyZWFt
OwpAQCAtMTc1MzIsNiArMTc1NDgsOCBAQAogCQkJCTA3N0I2NDE1MUI5NUY3MDMwMDNFOUFENSAv
KiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3N0I2NDEwMUI5NEYxMkUwMDNF
OUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5jcHAgKi8sCiAJCQkJMDc3QjY0
MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmggKi8s
CisJCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCAq
LywKKwkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAq
LywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3Vy
Y2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVB
dWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJFQ0YyRDIwMDE3NDE0NiAvKiBNb2NrUmVh
bHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0yNTcxNCw2ICsyNTczMiw3IEBACiAJCQkJODVF
NzExQTYwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxEb2N1bWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NURGMkVFRDBBQTM4N0NCMDBBRDY0QzUgLyogRE9NSFRNTEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE3MEFDNUQ1MzUwMDUzMjcwRiAvKiBET01IVE1M
RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUEzRDZERjFDODU5RDdGMDAz
MDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDA3NTZB
MEFENkNCRjkwMDYyMEM1NyAvKiBET01IVE1MRW1iZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTUyNDdEMDBBRDg1MEI4MDAxMjA5M0IgLyogRE9NSFRNTEVtYmVkRWxlbWVudEludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNENERjBBQTY4NjFCMDA4ODA1MkQgLyogRE9N
SFRNTEZpZWxkU2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTkwOSw2ICsyNTkyOCw3
IEBACiAJCQkJMzFDMEZGNEMwRTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGNEUwRTRDRUZERDAwN0Q2RkU1IC8qIERP
TVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUM3
RjVFNzBBQUZCQUZCMDA0MDE0REQgLyogRE9NV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE0MTI5OTAxQzYwMUFDQzAwNTlFNzE0IC8qIFNjb3BlR3VhcmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1OTg5REQxMEFDQzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBE
T01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0MDcsNiArMjc0MjcsNyBAQAogCQkJCUNE
NUU1QjVGMUExNUNFNTQwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjM4MjA4OTMxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQYWdlQ29uc29s
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8q
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUEyQUYw
QzE4Mjk3MzQzMDBERTE3MjkgLyogUGFnZURlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUYzNDc0MkREMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDM1Niw2ICszMDM3Nyw3IEBACiAJCQkJQkM0OTE4QzYwQkZFQTA1MDAw
OUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJF
RDdBNTBDNkMwRjM2MDA5MjBCRkYgLyogSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDOTI2RjgwMEMwNTUyNDcwMDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNl
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q0MUFCQjBDMDYwREU4
MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4MEU3QjE0MEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxIZWFkRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUEyRTBBMUNEQUI0MDBCNDJCMjUgLyogSlNIVE1MSGVh
ZGluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTQxNiw2ICszMTQzOCw3IEBACiAJ
CQkJNUUyQzQzNjcxQkNFRTM3NzAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTgyNEFCQTIxQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTU4MjRBQkE2MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVBM0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8q
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OUJB
REExMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzlCQURBMzE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyRDc2QkI4NDE5NDU2RjgxMDBDRkQyOUEgLyogUnVuTG9vcE9ic2VydmVyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMzE0NjAsNiArMzE0ODMsNyBAQAogCQkJCTBGQzRFNDBFMTg3RjgyRTEw
MDQ1ODgyQyAvKiBTY3JvbGxpbmdDb29yZGluYXRvcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBRjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzQzM4QkZFMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1RUEzRDZFMDFDODU5RDg0MDAz
MDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTNF
N0MxOTFCMkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTg4RUJEMTZBOEQxQkQwMEY5OTk4NCAvKiBTY3JvbGxp
bmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNC
RDBDMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnQuY3BwCmluZGV4IDAxZmI2YzcuLjJjMzg2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQq
KQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBv
aW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5o
CmluZGV4IDU3MDY4OGQuLjYxMjk3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KIH07CiAKLXR5cGVkZWYg
c3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRlTWVkaWFFbmRwb2ludCkoTWVk
aWFFbmRwb2ludENsaWVudCopOwordHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2lu
dD4gKCpDcmVhdGVNZWRpYUVuZHBvaW50KShNZWRpYUVuZHBvaW50Q2xpZW50Jik7CiAKIGNsYXNz
IE1lZGlhRW5kcG9pbnQgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmgKaW5kZXggYWM2YzZk
NC4uMWMxMzg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oCkBAIC0xNTAsMjAgKzE1MCwyMCBAQCBw
cml2YXRlOgogICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uKCkgeyB9CiAKICAgICBTdHJpbmcgbV90
eXBlOwotICAgIHVuc2lnbmVkIHNob3J0IG1fcG9ydCB7IDAgfTsKLSAgICBTdHJpbmcgbV9hZGRy
ZXNzOwotICAgIFN0cmluZyBtX21vZGU7CisgICAgdW5zaWduZWQgc2hvcnQgbV9wb3J0IHsgOSB9
OworICAgIFN0cmluZyBtX2FkZHJlc3MgeyAiMC4wLjAuMCIgfTsKKyAgICBTdHJpbmcgbV9tb2Rl
IHsgInNlbmRyZWN2IiB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBtX3Bh
eWxvYWRzOwogCi0gICAgYm9vbCBtX3J0Y3BNdXggeyBmYWxzZSB9OworICAgIGJvb2wgbV9ydGNw
TXV4IHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX3J0Y3BBZGRyZXNzOwogICAgIHVuc2lnbmVkIHNo
b3J0IG1fcnRjcFBvcnQgeyAwIH07CiAKICAgICBTdHJpbmcgbV9tZWRpYVN0cmVhbUlkOwogICAg
IFN0cmluZyBtX21lZGlhU3RyZWFtVHJhY2tJZDsKIAotICAgIFN0cmluZyBtX2R0bHNTZXR1cDsK
KyAgICBTdHJpbmcgbV9kdGxzU2V0dXAgeyAiYWN0cGFzcyIgfTsKICAgICBTdHJpbmcgbV9kdGxz
RmluZ2VycHJpbnRIYXNoRnVuY3Rpb247CiAgICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTQ3MTUxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcApAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2Ug
eworCitTdHJpbmcgc2NyaXB0U3RyaW5nKCkKK3sKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNj
cmlwdFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjExZjlhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCisjZGVmaW5lIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitTdHJpbmcgc2NyaXB0U3Ry
aW5nKCk7CisKK30gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisK
KyNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NE
UFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kMjI0ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcApA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKKwor
I2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitTdHJpbmcgc2NyaXB0
U3RyaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHNkcEphdmFTY3JpcHQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTc5OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCArMSwx
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
RXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAq
ICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyNpbmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgorCisjaW5jbHVkZSAiTWVkaWFQYXls
b2FkLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgY29uc3QgY2hhciogZmluZ2VycHJpbnQgPSAiOEI6ODc6MDk6OEE6NUQ6QzI6
RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6
Q0U6ODQ6OTg6REQ6OEU6QUY6N0IiOworc3RhdGljIGNvbnN0IGNoYXIqIGZpbmdlcnByaW50RnVu
Y3Rpb24gPSAic2hhLTI1NiI7CisKK3N0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBNb2Nr
TWVkaWFFbmRwb2ludDo6Y3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+KG5ldyBNb2NrTWVkaWFFbmRw
b2ludChjbGllbnQpKTsKK30KKworTW9ja01lZGlhRW5kcG9pbnQ6Ok1vY2tNZWRpYUVuZHBvaW50
KE1lZGlhRW5kcG9pbnRDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sK
K30KKworTW9ja01lZGlhRW5kcG9pbnQ6On5Nb2NrTWVkaWFFbmRwb2ludCgpCit7CisgICAgc3Rv
cCgpOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKFJlZlB0
cjxNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uKQoreworICAgIFVO
VVNFRF9QQVJBTShjb25maWd1cmF0aW9uKTsKK30KKwordm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6
Z2VuZXJhdGVEdGxzSW5mbygpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10oKSB7Cisg
ICAgICAgIG1fY2xpZW50LmdvdER0bHNGaW5nZXJwcmludChTdHJpbmcoZmluZ2VycHJpbnQpLCBT
dHJpbmcoZmluZ2VycHJpbnRGdW5jdGlvbikpOworICAgIH0pOworfQorCitWZWN0b3I8UmVmUHRy
PE1lZGlhUGF5bG9hZD4+IE1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0QXVkaW9QYXlsb2Fk
cygpCit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBwYXlsb2FkczsKKworICAg
IFJlZlB0cjxNZWRpYVBheWxvYWQ+IHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOwor
ICAgIHBheWxvYWQtPnNldFR5cGUoMTExKTsKKyAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUo
Ik9QVVMiKTsKKyAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUoNDgwMDApOworICAgIHBheWxvYWQt
PnNldENoYW5uZWxzKDIpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBh
eWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoOCk7
CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJQQ01BIik7CisgICAgcGF5bG9hZC0+c2V0
Q2xvY2tSYXRlKDgwMDApOworICAgIHBheWxvYWQtPnNldENoYW5uZWxzKDEpOworICAgIHBheWxv
YWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0
ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMCk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdO
YW1lKCJQQ01VIik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDgwMDApOworICAgIHBheWxv
YWQtPnNldENoYW5uZWxzKDEpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAg
IHJldHVybiBwYXlsb2FkczsKK30KKworVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBNb2Nr
TWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKQoreworICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFQYXlsb2FkPj4gcGF5bG9hZHM7CisKKyAgICBSZWZQdHI8TWVkaWFQYXlsb2Fk
PiBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBl
KDEwMyk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJIMjY0Iik7CisgICAgcGF5bG9h
ZC0+c2V0Q2xvY2tSYXRlKDkwMDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDY21maXIodHJ1ZSk7Cisg
ICAgcGF5bG9hZC0+c2V0TmFja3BsaSh0cnVlKTsKKyAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIo
InBhY2tldGl6YXRpb25Nb2RlIiwgMSk7CisgICAgcGF5bG9hZHMuYXBwZW5kKHBheWxvYWQpOwor
CisgICAgcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisgICAgcGF5bG9hZC0+c2V0
VHlwZSgxMDApOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiVlA4Iik7CisgICAgcGF5
bG9hZC0+c2V0Q2xvY2tSYXRlKDkwMDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDY21maXIodHJ1ZSk7
CisgICAgcGF5bG9hZC0+c2V0TmFja3BsaSh0cnVlKTsKKyAgICBwYXlsb2FkLT5zZXROYWNrKHRy
dWUpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBheWxvYWQgPSBNZWRp
YVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMTIwKTsKKyAgICBwYXls
b2FkLT5zZXRFbmNvZGluZ05hbWUoIlJUWCIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg5
MDAwMCk7CisgICAgcGF5bG9hZC0+YWRkUGFyYW1ldGVyKCJhcHQiLCAxMDApOworICAgIHBheWxv
YWQtPmFkZFBhcmFtZXRlcigicnR4VGltZSIsIDIwMCk7CisgICAgcGF5bG9hZHMuYXBwZW5kKHBh
eWxvYWQpOworCisgICAgcmV0dXJuIHBheWxvYWRzOworfQorCitNZWRpYUVuZHBvaW50OjpVcGRh
dGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgYm9vbCBpc0lu
aXRpYXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oY29uZmlndXJhdGlvbik7CisgICAgVU5VU0VE
X1BBUkFNKGlzSW5pdGlhdG9yKTsKKworICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7
Cit9CisKK01lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBNb2NrTWVkaWFFbmRwb2ludDo6dXBk
YXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uKiBj
b25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlhdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShjb25m
aWd1cmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oaXNJbml0aWF0b3IpOworCisgICAgcmV0dXJu
IFVwZGF0ZVJlc3VsdDo6U3VjY2VzczsKK30KKwordm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6YWRk
UmVtb3RlQ2FuZGlkYXRlKEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCB1bnNpZ25lZCBtZGVzY0lu
ZGV4LCBjb25zdCBTdHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAg
IFVOVVNFRF9QQVJBTShjYW5kaWRhdGUpOworICAgIFVOVVNFRF9QQVJBTShtZGVzY0luZGV4KTsK
KyAgICBVTlVTRURfUEFSQU0odWZyYWcpOworICAgIFVOVVNFRF9QQVJBTShwYXNzd29yZCk7Cit9
CisKK3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VTZW5kU291cmNlKFJlYWx0aW1lTWVk
aWFTb3VyY2UmIG5ld1NvdXJjZSwgdW5zaWduZWQgbWRlc2NJbmRleCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obmV3U291cmNlKTsKKyAgICBVTlVTRURfUEFSQU0obWRlc2NJbmRleCk7Cit9CisKK3Zv
aWQgTW9ja01lZGlhRW5kcG9pbnQ6OnN0b3AoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjliMzJiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIE1vY2tNZWRpYUVuZHBvaW50X2gKKyNkZWZpbmUgTW9ja01lZGlhRW5kcG9pbnRf
aAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb2NrTWVkaWFFbmRwb2ludCA6IHB1
YmxpYyBNZWRpYUVuZHBvaW50IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShNZWRpYUVuZHBvaW50Q2xpZW50
Jik7CisKKyAgICBNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50Jik7CisgICAg
fk1vY2tNZWRpYUVuZHBvaW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29uZmlndXJhdGlv
bihSZWZQdHI8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+JiYpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlRHRsc0luZm8oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZl
Y3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gZ2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gZ2V0RGVmYXVs
dFZpZGVvUGF5bG9hZHMoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0IHVw
ZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgVXBkYXRlUmVzdWx0
IHVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biosIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGFkZFJl
bW90ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUmLCB1bnNpZ25lZCBtZGVzY0luZGV4LCBjb25zdCBT
dHJpbmcmIHVmcmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgdm9pZCByZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgdW5zaWdu
ZWQgbWRlc2NJbmRleCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIE1lZGlhRW5kcG9pbnRDbGllbnQmIG1fY2xpZW50OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKKworI2VuZGlmIC8vIE1vY2tNZWRpYUVuZHBvaW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAppbmRleCBhOWI1MjRkLi45MjFhMjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0xNzUsNiArMTc1LDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyNpbmNsdWRlICJNb2NrTWVkaWFFbmRwb2ludC5oIgogI2luY2x1ZGUgIk1v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJNb2NrLmgiCkBAIC00MTUs
NiArNDE2LDcgQEAgSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQqIGRvY3VtZW50KQogCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBzZXRNb2NrTWVkaWFDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQodHJ1ZSk7CisgICAgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKICAgICBlbmFibGVN
b2NrUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKCk7CiAjZW5kaWYKIApAQCAtMTAxNSw2ICsxMDE3
LDExIEBAIHZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrU3BlZWNoU3ludGhlc2l6ZXIoKQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQordm9pZCBJbnRlcm5hbHM6OmVuYWJsZU1v
Y2tNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBNZWRpYUVuZHBvaW50OjpjcmVhdGUgPSBNb2NrTWVk
aWFFbmRwb2ludDo6Y3JlYXRlOworfQorCiB2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja1JUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlcigpCiB7CiAgICAgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpj
cmVhdGUgPSBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJNb2NrOjpjcmVhdGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAppbmRleCA2N2EwMTkzLi4xNGExYzgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKQEAgLTM2OCw2ICszNjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgdm9pZCBlbmFibGVNb2NrTWVkaWFFbmRwb2ludCgp
OwogICAgIHZvaWQgZW5hYmxlTW9ja1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcigpOwogICAgIHZv
aWQgc2V0TW9ja01lZGlhQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wpOwogI2VuZGlmCg==
</data>
<flag name="review"
          id="297444"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273169</attachid>
            <date>2016-03-07 03:00:55 -0800</date>
            <delta_ts>2016-03-07 05:45:07 -0800</delta_ts>
            <desc>Candidate for landing</desc>
            <filename>mepc-create-offer_2.patch</filename>
            <type>text/plain</type>
            <size>106664</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYzNiNjFiLi4xMmVkMDhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MDcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogSW1wbGVtZW50IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
T2ZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uIGFuZCBKZXIgTm9ibGUu
CisKKyAgICAgICAgVGhlIG91dHB1dCBTRFAgZnJvbSBjcmVhdGVPZmZlcigpIGlzIHByb2Nlc3Nl
ZCBieSB2ZXJpZnlpbmcgYWxsIHZhcmlhYmxlCisgICAgICAgIGlkZW50aWZpZXJzLCBzdWNoIGFz
IHNlc3Npb24gYW5kIHVzZXIgaWQsIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoCisgICAgICAgIHBy
ZWRlZmluZWQgdmFsdWVzIHRvIG1ha2UgdGhlIFNEUCBjb21wYXJhYmxlIHdpdGggYW4gZXhwZWN0
ZWQgcmVzdWx0LgorCisgICAgICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRo
ZSBtYWMgcG9ydCB1bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3Nv
ciBKYXZhU2NyaXB0IHJlc291cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9m
ZmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDE2LTAyLTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogRXhwb3NlIFByb3h5IHRhcmdldCBhbmQgaGFuZGxlciBp
bnRlcm5hbCBwcm9wZXJ0aWVzIHRvIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5z
cGVjdC1vZmZlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDNhZWUzNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw3NiBAQAorSW5zcGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNyZWF0ZU9m
ZmVyKCkKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgR290IG9mZmVyCis9
PT0gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uID09PQordHlwZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0t
IHtzZXNzaW9uLWlkOk9LfSAwIElOIElQNCAxMjcuMC4wLjEKK3M9LQordD0wIDAKK2E9bXNpZC1z
ZW1hbnRpYzpXTVMge21lZGlhLXN0cmVhbS1pZDpPS30KK209YXVkaW8gOSBVRFAvVExTL1JUUC9T
QVZQRiAxMTEgOCAwCitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRyZWN2Cith
PXJ0cG1hcDoxMTEgT1BVUy80ODAwMC8yCithPXJ0cG1hcDo4IFBDTUEvODAwMAorYT1ydHBtYXA6
MCBQQ01VLzgwMDAKK2E9c3NyYzp7c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQorYT1tc2lkOntt
ZWRpYS1zdHJlYW0taWQ6T0t9IHttZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9CithPWljZS11ZnJh
Zzp7aWNlLXVmcmFnOk9LfQorYT1pY2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9CithPWZpbmdlcnBy
aW50OnNoYS0yNTYgOEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6
RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0
dXA6YWN0cGFzcworPT09CisKK1BBU1MgR290IG9mZmVyCis9PT0gUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uID09PQordHlwZTogb2ZmZXIsIHNkcDoKK3Y9MAorbz0tIHtzZXNzaW9uLWlkOk9LfSAxIElO
IElQNCAxMjcuMC4wLjEKK3M9LQordD0wIDAKK2E9bXNpZC1zZW1hbnRpYzpXTVMge21lZGlhLXN0
cmVhbS1pZDpPS30KK209YXVkaW8gOSBVRFAvVExTL1JUUC9TQVZQRiAxMTEgOCAwCitjPUlOIElQ
NCAwLjAuMC4wCithPXJ0Y3AtbXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMTEgT1BVUy80ODAw
MC8yCithPXJ0cG1hcDo4IFBDTUEvODAwMAorYT1ydHBtYXA6MCBQQ01VLzgwMDAKK2E9c3NyYzp7
c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQorYT1tc2lkOnttZWRpYS1zdHJlYW0taWQ6T0t9IHtt
ZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9CithPWljZS11ZnJhZzp7aWNlLXVmcmFnOk9LfQorYT1p
Y2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9CithPWZpbmdlcnByaW50OnNoYS0yNTYgOEI6ODc6MDk6
OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6
NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6N0IKK2E9c2V0dXA6YWN0cGFzcworbT12aWRlbyA5
IFVEUC9UTFMvUlRQL1NBVlBGIDEwMyAxMDAgMTIwCitjPUlOIElQNCAwLjAuMC4wCithPXJ0Y3At
bXV4CithPXNlbmRyZWN2CithPXJ0cG1hcDoxMDMgSDI2NC85MDAwMAorYT1ydHBtYXA6MTAwIFZQ
OC85MDAwMAorYT1ydHBtYXA6MTIwIFJUWC85MDAwMAorYT1mbXRwOjEwMyBwYWNrZXRpemF0aW9u
LW1vZGU9MQorYT1mbXRwOjEyMCBhcHQ9MTAwO3J0eC10aW1lPTIwMAorYT1ydGNwLWZiOjEwMCBu
YWNrCithPXJ0Y3AtZmI6MTAzIG5hY2sgcGxpCithPXJ0Y3AtZmI6MTAwIG5hY2sgcGxpCithPXJ0
Y3AtZmI6MTAzIGNjbSBmaXIKK2E9cnRjcC1mYjoxMDAgY2NtIGZpcgorYT1zc3JjOntzc3JjOk9L
fSBjbmFtZTp7Y25hbWU6T0t9CithPW1zaWQ6e21lZGlhLXN0cmVhbS1pZDpPS30ge21lZGlhLXN0
cmVhbS10cmFjay1pZDpPS30KK2E9aWNlLXVmcmFnOntpY2UtdWZyYWc6T0t9CithPWljZS1wd2Q6
e2ljZS1wYXNzd29yZDpPS30KK2E9ZmluZ2VycHJpbnQ6c2hhLTI1NiA4Qjo4NzowOTo4QTo1RDpD
MjpGMzozMzpFRjpDNTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0NjozQjox
QjpDRTo4NDo5ODpERDo4RTpBRjo3QgorYT1zZXR1cDphY3RwYXNzCis9PT0KKworUEFTUyBFbmQg
b2YgcHJvbWlzZSBjaGFpbgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxYzFhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5o
dG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAg
IDxib2R5PgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgdmFyIHN0cmVhbTsKKyAgICAg
ICAgICAgIHZhciBhdWRpb1RyYWNrOworICAgICAgICAgICAgdmFyIHZpZGVvVHJhY2s7CisgICAg
ICAgICAgICB2YXIgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyA9IFtdOworCisgICAgICAgICAg
ICBkZXNjcmlwdGlvbigiSW5zcGVjdCB0aGUgcmVzdWx0IG9mIFJUQ1BlZXJDb25uZWN0aW9uLmNy
ZWF0ZU9mZmVyKCkiKTsKKworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0VXNlck1lZGlhUGVybWlzc2lvbih0cnVlKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgY2FuIG5v
dCBiZSBydW4gd2l0aG91dCB0aGUgdGVzdFJ1bm5lciIpOworICAgICAgICAgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcGMgPSBuZXcgd2Vi
a2l0UlRDUGVlckNvbm5lY3Rpb24oe2ljZVNlcnZlcnM6W3t1cmxzOidzdHVuOmZvby5jb20nfV19
KTsKKworICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyAi
YXVkaW8iOiB0cnVlLCAidmlkZW8iOiB0cnVlIH0pCisgICAgICAgICAgICAudGhlbihmdW5jdGlv
biAocykgeworICAgICAgICAgICAgICAgIHN0cmVhbSA9IHM7CisgICAgICAgICAgICAgICAgYXVk
aW9UcmFjayA9IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdOworICAgICAgICAgICAgICAgIHZp
ZGVvVHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTsKKworICAgICAgICAgICAgICAg
IHBjLmFkZFRyYWNrKGF1ZGlvVHJhY2ssIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBjLmNyZWF0ZU9mZmVyKCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oZnVu
Y3Rpb24gKG9mZmVyKSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiR290IG9mZmVyIik7
CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcy5wdXNoKHsgInRyYWNr
SWQiOiBhdWRpb1RyYWNrLmlkLCAic3RyZWFtSWQiOiBzdHJlYW0uaWQgfSk7CisgICAgICAgICAg
ICAgICAgcHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKG9mZmVyLCBtZWRpYURlc2Ny
aXB0aW9uVmFyaWFibGVzKTsKKworICAgICAgICAgICAgICAgIHBjLmFkZFRyYWNrKHZpZGVvVHJh
Y2ssIHN0cmVhbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9mZmVyKCk7Cisg
ICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG9mZmVyKSB7CisgICAg
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiR290IG9mZmVyIik7CisgICAgICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvblZhcmlhYmxlcy5wdXNoKHsgInRyYWNrSWQiOiB2aWRlb1RyYWNrLmlkLCAi
c3RyZWFtSWQiOiBzdHJlYW0uaWQgfSk7CisgICAgICAgICAgICAgICAgcHJpbnRDb21wYXJhYmxl
U2Vzc2lvbkRlc2NyaXB0aW9uKG9mZmVyLCBtZWRpYURlc2NyaXB0aW9uVmFyaWFibGVzKTsKKwor
ICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkVuZCBvZiBwcm9taXNlIGNoYWluIik7CisgICAg
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB9KQorICAgICAgICAgICAg
LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVy
cm9yIGNhdWdodCBpbiBwcm9taXNlIGNoYWluOiAiICsgZXJyb3IpOworICAgICAgICAgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIFZhcmlh
YmxlIGZpZWxkcyAoZS5nLiBnZW5lcmF0ZWQgaWRzKSBhcmUgdmVyaWZpZWQgYW5kIHJlcGxhY2Vk
IHdpdGggcHJlZGljdGFibGUKKyAgICAgICAgICAgIC8vIGxhYmxlcy4gVGhlIHJlc3VsdCBjYW4g
YmUgY29tcGFyZWQgd2l0aCBhIHByZWRlZmluZWQgZXhwZWN0ZWQgb3V0cHV0LgorICAgICAgICAg
ICAgZnVuY3Rpb24gcHJpbnRDb21wYXJhYmxlU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNj
cmlwdGlvbiwgbWRlc2NWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiPT09IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbiA9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygidHlwZTog
IiArIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlICsgIiwgc2RwOiIpOworCisgICAgICAgICAgICAg
ICAgdmFyIHNkcCA9IHNlc3Npb25EZXNjcmlwdGlvbi5zZHA7CisKKyAgICAgICAgICAgICAgICB2
YXIgcmVnZXhwID0geworICAgICAgICAgICAgICAgICAgICAib2xpbmUiOiAiXm89KC0pIChbXFxk
XSspIC4qJCIsCisgICAgICAgICAgICAgICAgICAgICJtc2lkc2VtYW50aWMiOiAiXmE9bXNpZC1z
ZW1hbnRpYzogKldNUyAuKiQiLAorICAgICAgICAgICAgICAgICAgICAibWxpbmUiOiAiXm09Liok
IiwKKyAgICAgICAgICAgICAgICAgICAgImNuYW1lIjogIl5hPXNzcmM6KFxcZCspIGNuYW1lOihb
XFx3Ky9cXC1AXFwuXFx7XFx9XSspLiokIiwKKyAgICAgICAgICAgICAgICAgICAgIm1zaWQiOiAi
XmE9KHNzcmM6XFxkKyApP21zaWQ6KFtcXHcrL1xcLT1dKykgKyhbXFx3Ky9cXC09XSspLiokIiwK
KyAgICAgICAgICAgICAgICAgICAgImljZXVmcmFnIjogIl5hPWljZS11ZnJhZzooW1xcdysvXSop
LiokIiwKKyAgICAgICAgICAgICAgICAgICAgImljZXB3ZCI6ICJeYT1pY2UtcHdkOihbXFx3Ky9d
Kj0qKS4qJCIsCisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHZhciBtZGVz
Y0luZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgc2RwLnNwbGl0KCJcclxuIikuZm9yRWFjaChm
dW5jdGlvbiAobGluZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gobGluZSwgcmVn
ZXhwLm1saW5lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVkaWEgYmxvY2sgKCJo
ZWFkZXIiIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBtZGVzY0luZGV4Kys7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWRlc2NJbmRleCA8IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNlc3Npb24gYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBvbGluZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9saW5lID0gbWF0Y2gobGlu
ZSwgcmVnZXhwLm9saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlu
ZS5yZXBsYWNlKG9saW5lWzJdLCB2ZXJpZmllZCgic2Vzc2lvbi1pZCIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoKGxpbmUsIHJlZ2V4cC5tc2lkc2VtYW50aWMpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRlc2NWYXJpYWJsZXMuZm9yRWFjaChmdW5j
dGlvbiAodmFyaWFibGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUg
PSBsaW5lLnJlcGxhY2UodmFyaWFibGVzLnN0cmVhbUlkLCB2ZXJpZmllZCgibWVkaWEtc3RyZWFt
LWlkIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWVkaWEgYmxvY2sgKGNvbnRlbnQgbGluZXMpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY25hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNpZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpY2V1ZnJhZzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpY2Vwd2Q7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbmFtZSA9IG1h
dGNoKGxpbmUsIHJlZ2V4cC5jbmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lID0gbGluZS5yZXBsYWNlKGNuYW1lWzFdLCB2ZXJpZmllZCgic3NyYyIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGNuYW1lWzJdLCB2ZXJpZmll
ZCgiY25hbWUiKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNpZCA9
IG1hdGNoKGxpbmUsIHJlZ2V4cC5tc2lkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtc2lkWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlu
ZS5yZXBsYWNlKG1zaWRbMV0sIHZlcmlmaWVkKCJzc3JjIikpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHZhcmlhYmxlcyA9IG1kZXNjVmFyaWFibGVzW21kZXNjSW5kZXhdOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhU3RyZWFtSWQgPSBtc2lkWzJd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZFZlcmlmaWVkID0gdmVy
aWZpZWQoIm1lZGlhLXN0cmVhbS1pZCIsIG1lZGlhU3RyZWFtSWQgIT0gdmFyaWFibGVzLnN0cmVh
bUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG1l
ZGlhU3RyZWFtSWQsIHN0cmVhbUlkVmVyaWZpZWQpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG1lZGlhU3RyZWFtVHJhY2tJZCA9IG1zaWRbM107CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHRyYWNrSWRWZXJpZmllZCA9IHZlcmlmaWVkKCJtZWRpYS1zdHJlYW0t
dHJhY2staWQiLCBtZWRpYVN0cmVhbVRyYWNrSWQgIT0gdmFyaWFibGVzLnRyYWNrSWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UobWVkaWFTdHJlYW1U
cmFja0lkLCB0cmFja0lkVmVyaWZpZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGljZXVmcmFnID0gbWF0Y2gobGluZSwgcmVnZXhwLmljZXVmcmFnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGljZXVmcmFnWzFdLCB2ZXJp
ZmllZCgiaWNlLXVmcmFnIikpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWNl
cHdkID0gbWF0Y2gobGluZSwgcmVnZXhwLmljZXB3ZCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShpY2Vwd2RbMV0sIHZlcmlmaWVkKCJpY2UtcGFzc3dv
cmQiKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAo
bGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGxpbmUpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgZGVidWcoIj09PSIpOworICAgICAgICAgICAgICAg
IGRlYnVnKCIiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gdmVyaWZp
ZWQobmFtZSwgaXNGYWlsdXJlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJ7IiArIG5hbWUg
KyAiOiIgKyAoaXNGYWlsdXJlID8gIkZBSUxFRCIgOiAiT0siKSArICJ9IjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZnVuY3Rpb24gbWF0Y2goZGF0YSwgcGF0dGVybikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhLm1hdGNoKG5ldyBSZWdFeHAocGF0dGVybikpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAg
ICAgICAgICB3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgICAgICA8L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggN2I2OWQ5YS4uM2RmMTYzMyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE3OCw2ICsxNzgsNyBAQCBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzLmh0bWwKIGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhdHNTZWxlY3Rvci5odG1sCiBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmh0bWwKK2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVj
dC1vZmZlci5odG1sCiAKICMgQXNzZXJ0cyBpbiBkZWJ1Zy4KIFsgRGVidWcgXSBmYXN0L2ltYWdl
cy9sYXJnZS1zaXplLWltYWdlLWNyYXNoLmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggOWM2NmQxYS4uNmI0MzVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTk2Miw2ICs5
NjIsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENT
dGF0c1JlcG9ydC5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVzcG9uc2Uu
Y3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENUcmFja0V2ZW50LmNwcAorICAgIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
U291cmNlSW5mby5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNvbnRyb2xs
ZXIuY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2su
Y3BwCkBAIC0yMzE2LDYgKzIzMTcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9j
ay9HZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwCiAgICAgcGxhdGZvcm0vbW9jay9NZWRpYUNvbnN0
cmFpbnRzTW9jay5jcHAKKyAgICBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcAog
ICAgIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwCiAgICAgcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcApAQCAtMzYwMiw2ICszNjA0LDIyIEBAIGlm
IChXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBUUykKICAgICBBRERfU09VUkNFX1dFQkNPUkVfREVS
SVZFRF9ERVBFTkRFTkNJRVMoJHtXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBUU19ERVBFTkRFTkNJ
RVN9IFVzZXJBZ2VudFNjcmlwdHNEYXRhLmNwcCBVc2VyQWdlbnRTY3JpcHRzLmgpCiBlbmRpZiAo
KQogCitpZiAoV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMpCisgICAgIyBOZWNlc3Nhcnkg
dmFyaWFibGVzOgorICAgICMgV2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFMgY29udGFpbmlu
ZyB0aGUgSmF2YVNjcmlwdCBzb3VyY2VzIGxpc3QKKyAgICAjIFdlYkNvcmVfU0RQX1BST0NFU1NP
Ul9TQ1JJUFRTX0RFUEVOREVOQ0lFUyBjb250YWluaW5nIHRoZSBzb3VyY2UgZmlsZSB0aGF0IHdp
bGwgbG9hZCB0aGUgc2NyaXB0cyB0byBhZGQgdGhlIHByb3BlcgorICAgICMgICBkZXBlbmRlbmN5
IGFuZCBoYXZpbmcgdGhlbSBidWlsdCBhdCB0aGUgcmlnaHQgbW9tZW50CisKKyAgICBhZGRfY3Vz
dG9tX2NvbW1hbmQoCisgICAgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzLmgKKyAgICAgICAgTUFJTl9ERVBFTkRFTkNZICR7V0VC
Q09SRV9ESVJ9L1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weQorICAgICAgICBERVBFTkRT
ICR7V2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFN9CisgICAgICAgIENPTU1BTkQgIlBZVEhP
TlBBVEg9JHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0iICR7UFlUSE9OX0VYRUNVVEFCTEV9
ICR7V0VCQ09SRV9ESVJ9L1NjcmlwdHMvbWFrZS1qcy1maWxlLWFycmF5cy5weSAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0cy5oICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgJHtXZWJDb3JlX1NE
UF9QUk9DRVNTT1JfU0NSSVBUU30KKyAgICAgICAgVkVSQkFUSU0pCisgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TRFBQcm9jZXNz
b3JTY3JpcHRzRGF0YS5jcHApCisgICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5E
RU5DSUVTKCR7V2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFNfREVQRU5ERU5DSUVTfSBTRFBQ
cm9jZXNzb3JTY3JpcHRzRGF0YS5jcHAgU0RQUHJvY2Vzc29yU2NyaXB0cy5oKQorZW5kaWYgKCkK
KwogIyBHZW5lcmF0ZSBwbHVnLWluIHJlc291cmNlcwogYWRkX2N1c3RvbV9jb21tYW5kKAogICAg
IE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vUGx1Z0luc1Jlc291cmNlc0Rh
dGEuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9QbHVnSW5zUmVzb3VyY2VzLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZThkOTlmLi4xNzIwNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA3
IEBACisyMDE2LTAzLTA3ICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29u
LmNvbT4KKworICAgICAgICBXZWJSVEM6IEltcGxlbWVudCBNZWRpYUVuZHBvaW50UGVlckNvbm5l
Y3Rpb246OmNyZWF0ZU9mZmVyKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDg2NworCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbiBh
bmQgSmVyIE5vYmxlLgorCisgICAgICAgIC0gTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOiBJ
bml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGNyZWF0ZU9mZmVyKCkKKyAgICAgICAgYWRkZWQuIGNy
ZWF0ZU9mZmVyKCkgaXMgc3BsaXQgdXAgaW50byBhIHN5bmNocm9ub3VzIHBhcnQsIGFuZCBhCisg
ICAgICAgIHNjaGVkdWxlZCB0YXNrLiBUaGUgdGFzayB3aWxsIGJlIGRlZmVycmVkIHVudGlsIGlu
Zm9ybWF0aW9uLCByZXF1aXJpbmcKKyAgICAgICAgc29tZSBhbW91bnQgb2Ygd29yaywgc3VjaCBh
cyB0aGUgRFRMUyBmaW5nZXJwcmludCBpcyBhdmFpbGFibGUuIE90aGVyCisgICAgICAgIGFzeW5j
IEFQSSBmdW5jdGlvbnMgd2lsbCBhbHNvIGZvbGxvdyB0aGlzIHBhdHRlcm4uCisKKyAgICAgICAg
LSBTRFBQcm9jZXNzb3IgKGFkZGVkKTogVGhlIFNEUFByb2Nlc3NvcnMgcGFyc2VzIFNEUCB0byBh
CisgICAgICAgIE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiBvYmplY3QgYW5kIGdl
bmVyYXRlcyBTRFAgaW4gdGhlCisgICAgICAgIHJldmVyc2UgZGlyZWN0aW9uLiBBbnkgU0RQIHN0
cmluZyBoYW5kbGluZyBpcyBjb25maW5lZCB0byB0aGUKKyAgICAgICAgU0RQUHJvY2Vzc29yIGFu
ZCBhbGwgY29uZmlndXJhdGlvbiBvZiB0aGUgbWVkaWEgc2Vzc2lvbiBpcyBkb25lIHZpYSB0aGUK
KyAgICAgICAgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIG9iamVjdC4KKworICAg
ICAgICBUaGUgU0RQIHBhcnNlciBhbmQgZ2VuZXJhdG9yIGxvZ2ljIGlzIGltcGxlbWVudGVkIGlu
IEphdmFTY3JpcHQgYW5kCisgICAgICAgIHdvcmtzIHdpdGggSlNPTiAoU0RQLT5KU09OLCBKU09O
LT5TRFApLiBUaGUgU0RQUHJvY2Vzc29yIHJ1bnMgSlMgaW4gYW4KKyAgICAgICAgaXNvbGF0ZWQg
c2NvcGUgYW5kIGNvbnZlcnRzIEpTT04gdG8gYSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3Vy
YXRpb24KKyAgICAgICAgb2JqZWN0IGFuZCB0aGUgcmV2ZXJzZS4gVXNpbmcgSlNPTiBzaWduYWxp
bmcgKG5vbnN0YW5kYXJkKSBjYW4gYmUKKyAgICAgICAgaGVscGZ1bCBkdXJpbmcgZGVidWdnaW5n
LgorCisgICAgICAgIC0gTW9ja01lZGlhRW5kcG9pbnQgKGFkZGVkKTogTW9jayBNZWRpYUVuZHBv
aW50IGltcGxlbWVudGF0aW9uIHdpdGgKKyAgICAgICAgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBv
ZmZlcnMuIERUTFMgaW5mb3JtYXRpb24sIHN1Y2ggYXMgZmluZ2VycHJpbnQsCisgICAgICAgIGlz
IGhhcmQgY29kZWQgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nIHdpdGggZXhwZWN0ZWQgdmFsdWVzLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVj
dC1vZmZlci5odG1sCisKKyAgICAgICAgVGhlIHRlc3QgaXMgY3VycmVudGx5IHNraXBwZWQgb24g
dGhlIG1hYyBwb3J0IHVudGlsIHN1cHBvcnQgdG8gcmVhZCB0aGUKKyAgICAgICAgU0RQUHJvY2Vz
c29yIEphdmFTY3JpcHQgcmVzb3VyY2UgaXMgYWRkZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9u
UHJvbWlzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRTZXNzaW9uRGVzY3Jp
cHRpb25Qcm9taXNlOjpwcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRTZXNzaW9u
RGVzY3JpcHRpb25Qcm9taXNlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpyYW5kb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bmRwb2ludFBlZXJDb25uZWN0aW9uOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpydW5UYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c3RhcnRSdW5uaW5n
VGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpj
cmVhdGVPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OmNyZWF0ZU9mZmVyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246OmdvdER0bHNGaW5nZXJwcmludCk6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U0RQUHJvY2Vzc29yOjpTRFBQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ2Fu
ZGlkYXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbmRpZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb25maWd1cmF0aW9uRnJvbUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6
aWNlQ2FuZGlkYXRlRnJvbUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6Y29uZmlndXJhdGlvblRv
SlNPTik6CisgICAgICAgIChXZWJDb3JlOjppY2VDYW5kaWRhdGVUb0pTT04pOgorICAgICAgICAo
V2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpnZW5lcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTRFBQ
cm9jZXNzb3I6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Z2VuZXJh
dGVDYW5kaWRhdGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6cGFyc2VD
YW5kaWRhdGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlw
dCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaDogQWRkZWQu
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanM6IEFkZGVkLgorICAgICAgICAo
bWF0Y2gpOgorICAgICAgICAoYWRkRGVmYXVsdHMpOgorICAgICAgICAoZmlsbFRlbXBsYXRlKToK
KyAgICAgICAgKFNEUC5wYXJzZSk6CisgICAgICAgIChTRFAuZ2VuZXJhdGUpOgorICAgICAgICAo
U0RQLmdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgIChoYXNBbGxQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFNEUC52ZXJpZnlPYmplY3QpOgorICAgICAgICAoZ2VuZXJhdGUpOgorICAgICAg
ICAocGFyc2UpOgorICAgICAgICAoZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKToKKyAgICAgICAgKHBh
cnNlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
TWVkaWFFbmRwb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRw
b2ludC5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0
aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlOjpzY3JpcHRTdHJpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0
cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6TW9ja01lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6On5Nb2NrTWVkaWFFbmRwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6Z2VuZXJhdGVEdGxzSW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9h
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRWaWRl
b1BheWxvYWRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2lu
dDo6dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
RW5kcG9pbnQ6OmFkZFJlbW90ZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVk
aWFFbmRwb2ludDo6cmVwbGFjZVNlbmRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01l
ZGlhRW5kcG9pbnQ6OnN0b3ApOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja01lZGlhRW5k
cG9pbnQuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCk6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuaDoKKwogMjAxNi0wMi0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIERyb3AgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gV2ViS2l0LXNw
ZWNpZmljIElETCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcApp
bmRleCBlZDY4M2Q0Li44ZWUzMDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
Y3BwCkBAIC0zNSw3ICszNSwxNCBAQAogCiAjaW5jbHVkZSAiRE9NRXJyb3IuaCIKICNpbmNsdWRl
ICJKU0RPTUVycm9yLmgiCisjaW5jbHVkZSAiSlNSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNp
bmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrLmgiCisjaW5jbHVkZSAiUlRDT2ZmZXJBbnN3ZXJPcHRpb25zLmgiCisj
aW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgiCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OCwxOCArNTUsMTE0IEBAIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25CYWNrZW5kPiBjcmVhdGVNZWRpYUVuZHBvaW50UGVlckNv
bm5lY3Rpb24oCiAKIENyZWF0ZVBlZXJDb25uZWN0aW9uQmFja2VuZCBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjsKIAorY2xh
c3MgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxX
cmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZT4geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U+IGNyZWF0ZShTZXNzaW9uRGVzY3Jp
cHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKKyAgICB7CisgICAgICAgIHJldHVybiAqYWRvcHRSZWYo
bmV3IFdyYXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlKFdURk1vdmUocHJvbWlzZSkpKTsK
KyAgICB9CisKKyAgICBTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiBwcm9taXNlKCkgeyByZXR1
cm4gbV9wcm9taXNlOyB9CisKK3ByaXZhdGU6CisgICAgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlv
blByb21pc2UoU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYmIHByb21pc2UpCisgICAgICAgIDog
bV9wcm9taXNlKFdURk1vdmUocHJvbWlzZSkpCisgICAgeyB9CisKKyAgICBTZXNzaW9uRGVzY3Jp
cHRpb25Qcm9taXNlIG1fcHJvbWlzZTsKK307CisKK3N0YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5n
KHNpemVfdCBsZW5ndGgpCit7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBjZWlsKGxlbmd0aCAq
IDMgLyA0KTsKKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRvbVZhbHVlc1tzaXplXTsKKyAgICBjcnlw
dG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhyYW5kb21WYWx1ZXMsIHNpemUpOworICAgIHJldHVy
biBiYXNlNjRFbmNvZGUocmFuZG9tVmFsdWVzLCBzaXplKTsKK30KKwogTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24oUGVlckNvbm5lY3Rpb25C
YWNrZW5kQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nk
cFByb2Nlc3NvcihzdGQ6OnVuaXF1ZV9wdHI8U0RQUHJvY2Vzc29yPihuZXcgU0RQUHJvY2Vzc29y
KG1fY2xpZW50LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSkKKyAgICAsIG1fY25hbWUocmFu
ZG9tU3RyaW5nKDE2KSkKKyAgICAsIG1faWNlVWZyYWcocmFuZG9tU3RyaW5nKDQpKQorICAgICwg
bV9pY2VQYXNzd29yZChyYW5kb21TdHJpbmcoMjIpKQoreworICAgIG1fbWVkaWFFbmRwb2ludCA9
IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgQVNTRVJUKG1fbWVkaWFFbmRwb2lu
dCk7CisKKyAgICBtX2RlZmF1bHRBdWRpb1BheWxvYWRzID0gbV9tZWRpYUVuZHBvaW50LT5nZXRE
ZWZhdWx0QXVkaW9QYXlsb2FkcygpOworICAgIG1fZGVmYXVsdFZpZGVvUGF5bG9hZHMgPSBtX21l
ZGlhRW5kcG9pbnQtPmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCk7CisKKyAgICAvLyBUYXNrcyAo
c2VlIHJ1blRhc2soKSkgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB3ZSBnZXQgdGhlIERUTFMgZmlu
Z2VycHJpbnQuCisgICAgbV9tZWRpYUVuZHBvaW50LT5nZW5lcmF0ZUR0bHNJbmZvKCk7Cit9CisK
K3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpydW5UYXNrKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiB0YXNrKQoreworICAgIGlmIChtX2R0bHNGaW5nZXJwcmludC5pc051bGwoKSkgewor
ICAgICAgICAvLyBPbmx5IG9uZSB0YXNrIG5lZWRzIHRvIGJlIGRlZmVycmVkIHNpbmNlIGl0IHdp
bGwgaG9sZCBvZmYgYW55IG90aGVycyB1bnRpbCBjb21wbGV0ZWQuCisgICAgICAgIEFTU0VSVCgh
bV9pbml0aWFsRGVmZXJyZWRUYXNrKTsKKyAgICAgICAgbV9pbml0aWFsRGVmZXJyZWRUYXNrID0g
dGFzazsKKyAgICB9IGVsc2UKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZCh0YXNrKTsKK30KKwor
dm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnN0YXJ0UnVubmluZ1Rhc2tzKCkKIHsK
LSAgICBVTlVTRURfUEFSQU0oY2xpZW50KTsKKyAgICBpZiAoIW1faW5pdGlhbERlZmVycmVkVGFz
aykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsRGVmZXJyZWRUYXNrKCk7CisgICAg
bV9pbml0aWFsRGVmZXJyZWRUYXNrID0gbnVsbHB0cjsKIH0KIAogdm9pZCBNZWRpYUVuZHBvaW50
UGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYgb3B0aW9ucywgU2Vz
c2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYmIHByb21pc2UpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9w
dGlvbnMpOworICAgIGNvbnN0IFJlZlB0cjxSVENPZmZlck9wdGlvbnM+IHByb3RlY3RlZE9wdGlv
bnMgPSAmb3B0aW9uczsKKyAgICBSZWZQdHI8V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21p
c2U+IHdyYXBwZWRQcm9taXNlID0gV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U6OmNy
ZWF0ZShXVEZNb3ZlKHByb21pc2UpKTsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcnVu
VGFzayhbdGhpcywgcHJvdGVjdGVkT3B0aW9ucywgd3JhcHBlZFByb21pc2VdKCkgeworICAgICAg
ICBjcmVhdGVPZmZlclRhc2soKnByb3RlY3RlZE9wdGlvbnMsIHdyYXBwZWRQcm9taXNlLT5wcm9t
aXNlKCkpOworICAgIH0pOworfQogCi0gICAgcHJvbWlzZS5yZWplY3QoRE9NRXJyb3I6OmNyZWF0
ZSgiTm90U3VwcG9ydGVkRXJyb3IiKSk7Cit2b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bjo6Y3JlYXRlT2ZmZXJUYXNrKFJUQ09mZmVyT3B0aW9ucyYsIFNlc3Npb25EZXNjcmlwdGlvblBy
b21pc2UmIHByb21pc2UpCit7CisgICAgQVNTRVJUKCFtX2R0bHNGaW5nZXJwcmludC5pc0VtcHR5
KCkpOworCisgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvblNuYXBzaG90ID0gTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uOjpj
cmVhdGUoKTsKKworICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+c2V0U2Vzc2lvblZlcnNpb24o
bV9zZHBTZXNzaW9uVmVyc2lvbisrKTsKKworICAgIFJ0cFNlbmRlclZlY3RvciBzZW5kZXJzID0g
bV9jbGllbnQtPmdldFNlbmRlcnMoKTsKKworICAgIC8vIEFkZCBtZWRpYSBkZXNjcmlwdGlvbnMg
Zm9yIHNlbmRlcnMuCisgICAgZm9yIChhdXRvJiBzZW5kZXIgOiBzZW5kZXJzKSB7CisgICAgICAg
IFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4gbWVkaWFEZXNjcmlwdGlvbiA9IFBlZXJNZWRp
YURlc2NyaXB0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgTWVkaWFTdHJlYW1UcmFjayogdHJhY2sg
PSBzZW5kZXItPnRyYWNrKCk7CisKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0TWVkaWFT
dHJlYW1JZChzZW5kZXItPm1lZGlhU3RyZWFtSWRzKClbMF0pOworICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLT5zZXRNZWRpYVN0cmVhbVRyYWNrSWQodHJhY2stPmlkKCkpOworICAgICAgICBtZWRp
YURlc2NyaXB0aW9uLT5zZXRUeXBlKHRyYWNrLT5raW5kKCkpOworICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLT5zZXRQYXlsb2Fkcyh0cmFjay0+a2luZCgpID09ICJhdWRpbyIgPyBtX2RlZmF1bHRB
dWRpb1BheWxvYWRzIDogbV9kZWZhdWx0VmlkZW9QYXlsb2Fkcyk7CisgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24tPnNldER0bHNGaW5nZXJwcmludEhhc2hGdW5jdGlvbihtX2R0bHNGaW5nZXJwcmlu
dEZ1bmN0aW9uKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50
KG1fZHRsc0ZpbmdlcnByaW50KTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0Q25hbWUo
bV9jbmFtZSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPmFkZFNzcmMoY3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVVm
cmFnKG1faWNlVWZyYWcpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRJY2VQYXNzd29y
ZChtX2ljZVBhc3N3b3JkKTsKKworICAgICAgICBjb25maWd1cmF0aW9uU25hcHNob3QtPmFkZE1l
ZGlhRGVzY3JpcHRpb24oV1RGTW92ZShtZWRpYURlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAg
U3RyaW5nIHNkcFN0cmluZzsKKyAgICBTRFBQcm9jZXNzb3I6OlJlc3VsdCByZXN1bHQgPSBtX3Nk
cFByb2Nlc3Nvci0+Z2VuZXJhdGUoKmNvbmZpZ3VyYXRpb25TbmFwc2hvdCwgc2RwU3RyaW5nKTsK
KyAgICBpZiAocmVzdWx0ICE9IFNEUFByb2Nlc3Nvcjo6UmVzdWx0OjpTdWNjZXNzKSB7CisgICAg
ICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIGludGVybmFsIGVycm9yIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBwcm9taXNlLnJlc29sdmUoUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
OjpjcmVhdGUoIm9mZmVyIiwgc2RwU3RyaW5nKSk7CiB9CiAKIHZvaWQgTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uOjpjcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYgb3B0aW9ucywgU2Vz
c2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYmIHByb21pc2UpCkBAIC0xNzksMTAgKzI4MiwxMCBAQCB2
b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Z290RHRsc0ZpbmdlcnByaW50KGNvbnN0
IFN0cmluZyYgZmluZ2VycHJpbnQsCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAot
ICAgIFVOVVNFRF9QQVJBTShmaW5nZXJwcmludCk7Ci0gICAgVU5VU0VEX1BBUkFNKGZpbmdlcnBy
aW50RnVuY3Rpb24pOworICAgIG1fZHRsc0ZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAg
bV9kdGxzRmluZ2VycHJpbnRGdW5jdGlvbiA9IGZpbmdlcnByaW50RnVuY3Rpb247CiAKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXJ0UnVubmluZ1Rhc2tzKCk7CiB9CiAKIHZvaWQgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJ
bmRleCwgUmVmUHRyPEljZUNhbmRpZGF0ZT4mJiBjYW5kaWRhdGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24uaAppbmRleCBmYjZmNGYxLi4zY2E5ODkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmgKQEAgLTQyLDYgKzQyLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFNEUFByb2Nlc3NvcjsKKwordHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPFJUQ1J0cFNlbmRlcj4+IFJ0cFNlbmRlclZlY3RvcjsKIAogY2xhc3MgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uIDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCwg
cHVibGljIE1lZGlhRW5kcG9pbnRDbGllbnQgewogcHVibGljOgpAQCAtNzQsMTEgKzc3LDMzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRl
IHsgbm90SW1wbGVtZW50ZWQoKTsgfTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHJ1blRhc2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tzKCk7CisKKyAg
ICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhSVENPZmZlck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6
U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYpOworCiAgICAgLy8gTWVkaWFFbmRwb2ludENsaWVu
dAogICAgIHZpcnR1YWwgdm9pZCBnb3REdGxzRmluZ2VycHJpbnQoY29uc3QgU3RyaW5nJiBmaW5n
ZXJwcmludCwgY29uc3QgU3RyaW5nJiBmaW5nZXJwcmludEZ1bmN0aW9uKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ290SWNlQ2FuZGlkYXRlKHVuc2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0
cjxJY2VDYW5kaWRhdGU+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkb25lR2F0aGVy
aW5nQ2FuZGlkYXRlcyh1bnNpZ25lZCBtZGVzY0luZGV4KSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgZ290UmVtb3RlU291cmNlKHVuc2lnbmVkIG1kZXNjSW5kZXgsIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlPiYmKSBvdmVycmlkZTsKKworICAgIFBlZXJDb25uZWN0aW9uQmFja2VuZENs
aWVudCogbV9jbGllbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IG1fbWVk
aWFFbmRwb2ludDsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX2luaXRpYWxEZWZlcnJl
ZFRhc2s7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U0RQUHJvY2Vzc29yPiBtX3NkcFByb2Nlc3Nv
cjsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gbV9kZWZhdWx0QXVkaW9QYXls
b2FkczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IG1fZGVmYXVsdFZpZGVvUGF5
bG9hZHM7CisKKyAgICBTdHJpbmcgbV9jbmFtZTsKKyAgICBTdHJpbmcgbV9pY2VVZnJhZzsKKyAg
ICBTdHJpbmcgbV9pY2VQYXNzd29yZDsKKyAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnQ7Cisg
ICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50RnVuY3Rpb247CisgICAgdW5zaWduZWQgbV9zZHBT
ZXNzaW9uVmVyc2lvbiB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODk4MmY1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3Bw
CkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVyaWNz
c29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yLmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU0RQUHJvY2Vz
c29yU2NyaXB0UmVzb3VyY2UuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiU2NyaXB0R2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5o
IgorI2luY2x1ZGUgImluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlIDxiaW5k
aW5ncy9TY3JpcHRPYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVm
aW5lIFNUUklOR19GVU5DVElPTihuYW1lKSBcCisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgbmFt
ZSMjU3RyaW5nKCkgXAorICAgIHsgXAorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBuYW1lIHsgQVNDSUlMaXRlcmFsKCNuYW1lKSB9OyBcCisgICAgICAgIHJldHVy
biBuYW1lOyBcCisgICAgfQorCitTVFJJTkdfRlVOQ1RJT04oYWRkcmVzcykKK1NUUklOR19GVU5D
VElPTihhcHQpCitTVFJJTkdfRlVOQ1RJT04oY2FuZGlkYXRlcykKK1NUUklOR19GVU5DVElPTihj
Y21maXIpCitTVFJJTkdfRlVOQ1RJT04oY2hhbm5lbHMpCitTVFJJTkdfRlVOQ1RJT04oY2xvY2tS
YXRlKQorU1RSSU5HX0ZVTkNUSU9OKGNuYW1lKQorU1RSSU5HX0ZVTkNUSU9OKGNvbXBvbmVudElk
KQorU1RSSU5HX0ZVTkNUSU9OKGR0bHMpCitTVFJJTkdfRlVOQ1RJT04oZW5jb2RpbmdOYW1lKQor
U1RSSU5HX0ZVTkNUSU9OKGZpbmdlcnByaW50KQorU1RSSU5HX0ZVTkNUSU9OKGZpbmdlcnByaW50
SGFzaEZ1bmN0aW9uKQorU1RSSU5HX0ZVTkNUSU9OKGZvdW5kYXRpb24pCitTVFJJTkdfRlVOQ1RJ
T04oaWNlKQorU1RSSU5HX0ZVTkNUSU9OKG1lZGlhRGVzY3JpcHRpb25zKQorU1RSSU5HX0ZVTkNU
SU9OKG1lZGlhU3RyZWFtSWQpCitTVFJJTkdfRlVOQ1RJT04obWVkaWFTdHJlYW1UcmFja0lkKQor
U1RSSU5HX0ZVTkNUSU9OKG1vZGUpCitTVFJJTkdfRlVOQ1RJT04obXV4KQorU1RSSU5HX0ZVTkNU
SU9OKG5hY2spCitTVFJJTkdfRlVOQ1RJT04obmFja3BsaSkKK1NUUklOR19GVU5DVElPTihvcmln
aW5hdG9yKQorU1RSSU5HX0ZVTkNUSU9OKHBhY2tldGl6YXRpb25Nb2RlKQorU1RSSU5HX0ZVTkNU
SU9OKHBhcmFtZXRlcnMpCitTVFJJTkdfRlVOQ1RJT04ocGFzc3dvcmQpCitTVFJJTkdfRlVOQ1RJ
T04ocGF5bG9hZHMpCitTVFJJTkdfRlVOQ1RJT04ocG9ydCkKK1NUUklOR19GVU5DVElPTihwcmlv
cml0eSkKK1NUUklOR19GVU5DVElPTihyZWxhdGVkQWRkcmVzcykKK1NUUklOR19GVU5DVElPTihy
ZWxhdGVkUG9ydCkKK1NUUklOR19GVU5DVElPTihydGNwKQorU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BB
ZGRyZXNzKQorU1RSSU5HX0ZVTkNUSU9OKHJ0Y3BQb3J0KQorU1RSSU5HX0ZVTkNUSU9OKHJ0eFRp
bWUpCitTVFJJTkdfRlVOQ1RJT04oc2Vzc2lvbklkKQorU1RSSU5HX0ZVTkNUSU9OKHNlc3Npb25W
ZXJzaW9uKQorU1RSSU5HX0ZVTkNUSU9OKHNldHVwKQorU1RSSU5HX0ZVTkNUSU9OKHNzcmNzKQor
U1RSSU5HX0ZVTkNUSU9OKHRjcFR5cGUpCitTVFJJTkdfRlVOQ1RJT04odHJhbnNwb3J0KQorU1RS
SU5HX0ZVTkNUSU9OKHR5cGUpCitTVFJJTkdfRlVOQ1RJT04odWZyYWcpCisKK1NEUFByb2Nlc3Nv
cjo6U0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQoreworfQorCisvLyBOb3RlIHRoYXQg
TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uIGlzIGEgImZsYXR0ZXIiIHN0cnVjdHVy
ZSB0aGF0IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLiBGb3IKKy8vIGV4YW1wbGUsIHRoZSBKU09O
IHJlcHJlc2VudGF0aW9uIGhhcyBhbiAiaWNlIiBvYmplY3Qgd2hpY2ggY29sbGVjdHMgYSBzZXQg
b2YgcHJvcGVydGllcyB1bmRlciBhCisvLyBuYW1lc3BhY2UuIE1lZGlhRW5kcG9pbnRTZXNzaW9u
Q29uZmlndXJhdGlvbiBoYXMgImljZSItcHJlZml4ZXMgb24gdGhlIGNvcnJlc3BvbmRpbmcgcHJv
cGVydGllcy4KKworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUNhbmRpZGF0
ZU9iamVjdChjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjYW5kaWRhdGVPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworCisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0cmluZygpLCBjYW5kaWRh
dGUudHlwZSgpKTsKKyAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyhmb3VuZGF0aW9uU3Ry
aW5nKCksIGNhbmRpZGF0ZS5mb3VuZGF0aW9uKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0
SW50ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBjYW5kaWRhdGUuY29tcG9uZW50SWQoKSk7Cisg
ICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCksIGNhbmRpZGF0
ZS50cmFuc3BvcnQoKSk7CisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKHByaW9yaXR5
U3RyaW5nKCksIGNhbmRpZGF0ZS5wcmlvcml0eSgpKTsKKyAgICBjYW5kaWRhdGVPYmplY3QtPnNl
dFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIGNhbmRpZGF0ZS5hZGRyZXNzKCkpOworICAgIGNhbmRp
ZGF0ZU9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGNhbmRpZGF0ZS5wb3J0KCkpOwor
ICAgIGlmICghY2FuZGlkYXRlLnRjcFR5cGUoKS5pc0VtcHR5KCkpCisgICAgICAgIGNhbmRpZGF0
ZU9iamVjdC0+c2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgY2FuZGlkYXRlLnRjcFR5cGUoKSk7
CisgICAgaWYgKGNhbmRpZGF0ZS50eXBlKCkuY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKSAhPSAi
SE9TVCIpIHsKKyAgICAgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcocmVsYXRlZEFkZHJl
c3NTdHJpbmcoKSwgY2FuZGlkYXRlLnJlbGF0ZWRBZGRyZXNzKCkpOworICAgICAgICBjYW5kaWRh
dGVPYmplY3QtPnNldEludGVnZXIocmVsYXRlZFBvcnRTdHJpbmcoKSwgY2FuZGlkYXRlLnJlbGF0
ZWRQb3J0KCkpOworICAgIH0KKworICAgIHJldHVybiBjYW5kaWRhdGVPYmplY3Q7Cit9CisKK3N0
YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjcmVhdGVDYW5kaWRhdGUoY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBjYW5kaWRhdGVPYmplY3QpCit7CisgICAgUmVmUHRyPEljZUNhbmRpZGF0ZT4gY2Fu
ZGlkYXRlID0gSWNlQ2FuZGlkYXRlOjpjcmVhdGUoKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
CisgICAgdW5zaWduZWQgaW50VmFsdWU7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0
cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRU
eXBlKHN0cmluZ1ZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3RyaW5nKGZv
dW5kYXRpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldEZv
dW5kYXRpb24oc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKGNvbXBvbmVudElkU3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5z
ZXRDb21wb25lbnRJZChpbnRWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0
cmluZyh0cmFuc3BvcnRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUt
PnNldFRyYW5zcG9ydChzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0Lmdl
dEludGVnZXIocHJpb3JpdHlTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUt
PnNldFByaW9yaXR5KGludFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVPYmplY3QuZ2V0U3Ry
aW5nKGFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNl
dEFkZHJlc3Moc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICBjYW5kaWRhdGUtPnNldFBvcnQo
aW50VmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcodGNwVHlwZVN0
cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0VGNwVHlwZShzdHJp
bmdWYWx1ZSk7CisKKyAgICBpZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhyZWxhdGVkQWRk
cmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0UmVsYXRl
ZEFkZHJlc3Moc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRl
Z2VyKHJlbGF0ZWRQb3J0U3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5z
ZXRSZWxhdGVkUG9ydChpbnRWYWx1ZSk7CisKKyAgICByZXR1cm4gY2FuZGlkYXRlOworfQorCitz
dGF0aWMgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbj4gY29uZmlndXJh
dGlvbkZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlOworICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihqc29uLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb2JqZWN0OworICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
bjo6Y3JlYXRlKCk7CisKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWU7CisgICAgdW5zaWduZWQgaW50
VmFsdWU7CisgICAgdW5zaWduZWQgbG9uZyBsb25nVmFsdWU7CisgICAgYm9vbCBib29sVmFsdWU7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvcmlnaW5hdG9yT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAob2JqZWN0LT5nZXRPYmplY3Qob3JpZ2luYXRv
clN0cmluZygpLCBvcmlnaW5hdG9yT2JqZWN0KSkgeworICAgICAgICBpZiAob3JpZ2luYXRvck9i
amVjdC0+Z2V0SW50ZWdlcihzZXNzaW9uSWRTdHJpbmcoKSwgbG9uZ1ZhbHVlKSkKKyAgICAgICAg
ICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlc3Npb25JZChsb25nVmFsdWUpOworICAgICAgICBpZiAo
b3JpZ2luYXRvck9iamVjdC0+Z2V0SW50ZWdlcihzZXNzaW9uVmVyc2lvblN0cmluZygpLCBpbnRW
YWx1ZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRTZXNzaW9uVmVyc2lvbihpbnRW
YWx1ZSk7CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtZWRpYURlc2NyaXB0
aW9uc0FycmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+Z2V0QXJy
YXkobWVkaWFEZXNjcmlwdGlvbnNTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheSk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+bGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbnNBcnJheS0+Z2V0KGkpLT5hc09iamVjdChtZWRpYURlc2NyaXB0aW9uT2JqZWN0
KTsKKworICAgICAgICBSZWZQdHI8UGVlck1lZGlhRGVzY3JpcHRpb24+IG1lZGlhRGVzY3JpcHRp
b24gPSBQZWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7CisKKyAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyh0eXBlU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
KyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldFR5cGUoc3RyaW5nVmFsdWUpOworCisg
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKHBvcnRTdHJpbmco
KSwgaW50VmFsdWUpKQorICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0UG9ydChpbnRW
YWx1ZSk7CisKKyAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhh
ZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRp
b24tPnNldEFkZHJlc3Moc3RyaW5nVmFsdWUpOworCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uT2JqZWN0LT5nZXRTdHJpbmcobW9kZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNb2RlKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFycmF5KHBheWxvYWRz
U3RyaW5nKCksIHBheWxvYWRzQXJyYXkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBwYXlsb2Fkc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2Fkc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgICAgICBwYXlsb2Fkc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KHBheWxvYWRz
T2JqZWN0KTsKKworICAgICAgICAgICAgUmVmUHRyPE1lZGlhUGF5bG9hZD4gcGF5bG9hZCA9IE1l
ZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+
Z2V0SW50ZWdlcih0eXBlU3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICBwYXls
b2FkLT5zZXRUeXBlKGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0
LT5nZXRTdHJpbmcoZW5jb2RpbmdOYW1lU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoc3RyaW5nVmFsdWUpOworCisgICAgICAg
ICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoY2xvY2tSYXRlU3RyaW5nKCksIGlu
dFZhbHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUoaW50VmFsdWUp
OworCisgICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIoY2hhbm5lbHNT
dHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHBheWxvYWQtPnNldENoYW5uZWxz
KGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFu
KGNjbWZpclN0cmluZygpLCBib29sVmFsdWUpKQorICAgICAgICAgICAgICAgIHBheWxvYWQtPnNl
dENjbWZpcihib29sVmFsdWUpOworCisgICAgICAgICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdl
dEJvb2xlYW4obmFja3BsaVN0cmluZygpLCBib29sVmFsdWUpKQorICAgICAgICAgICAgICAgIHBh
eWxvYWQtPnNldE5hY2twbGkoYm9vbFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRz
T2JqZWN0LT5nZXRCb29sZWFuKG5hY2tTdHJpbmcoKSwgYm9vbFZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBwYXlsb2FkLT5zZXROYWNrKGJvb2xWYWx1ZSk7CisKKyAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRPYmplY3QocGFyYW1ldGVy
c1N0cmluZygpLCBwYXJhbWV0ZXJzT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXJzT2JqZWN0LT5nZXRJbnRlZ2VyKHBhY2tldGl6YXRpb25Nb2RlU3RyaW5nKCksIGludFZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC0+YWRkUGFyYW1ldGVyKCJwYWNrZXRp
emF0aW9uTW9kZSIsIGludFZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJz
T2JqZWN0LT5nZXRJbnRlZ2VyKGFwdFN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAg
ICAgICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigiYXB0IiwgaW50VmFsdWUpOworCisgICAgICAg
ICAgICAgICAgaWYgKHBhcmFtZXRlcnNPYmplY3QtPmdldEludGVnZXIocnR4VGltZVN0cmluZygp
LCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigi
cnR4VGltZSIsIGludFZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbi0+YWRkUGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0T2Jq
ZWN0KHJ0Y3BTdHJpbmcoKSwgcnRjcE9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChydGNwT2Jq
ZWN0LT5nZXRCb29sZWFuKG11eFN0cmluZygpLCBib29sVmFsdWUpKQorICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24tPnNldFJ0Y3BNdXgoYm9vbFZhbHVlKTsKKworICAgICAgICAgICAg
aWYgKHJ0Y3BPYmplY3QtPmdldFN0cmluZyhydGNwQWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1
ZSkpCisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0UnRjcEFkZHJlc3Moc3Ry
aW5nVmFsdWUpOworCisgICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0SW50ZWdlcihydGNw
UG9ydFN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi0+c2V0UnRjcFBvcnQoaW50VmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPmdldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIHN0cmlu
Z1ZhbHVlKSkKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldE1lZGlhU3RyZWFtSWQo
c3RyaW5nVmFsdWUpOworCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRT
dHJpbmcobWVkaWFTdHJlYW1UcmFja0lkU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldE1lZGlhU3RyZWFtVHJhY2tJZChzdHJpbmdWYWx1ZSk7
CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZHRsc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKGR0
bHNPYmplY3QtPmdldFN0cmluZyhzZXR1cFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0RHRsc1NldHVwKHN0cmluZ1ZhbHVlKTsKKwor
ICAgICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhmaW5nZXJwcmludEhhc2hGdW5j
dGlvblN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKHN0cmluZ1ZhbHVlKTsKKworICAg
ICAgICAgICAgaWYgKGR0bHNPYmplY3QtPmdldFN0cmluZyhmaW5nZXJwcmludFN0cmluZygpLCBz
dHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0RHRsc0Zp
bmdlcnByaW50KHN0cmluZ1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gc3NyY3NBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NB
cnJheSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNzcmNzQXJyYXktPmxl
bmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgIHNzcmNzQXJyYXktPmdldChqKS0+YXNJbnRlZ2Vy
KGludFZhbHVlKTsKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPmFkZFNzcmMoaW50VmFs
dWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdl
dFN0cmluZyhjbmFtZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLT5zZXRDbmFtZShzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gaWNlT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgaWYgKG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChpY2VTdHJpbmcoKSwgaWNl
T2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKGljZU9iamVjdC0+Z2V0U3RyaW5nKHVmcmFnU3Ry
aW5nKCksIHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5z
ZXRJY2VVZnJhZyhzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChpY2VPYmplY3QtPmdl
dFN0cmluZyhwYXNzd29yZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlUGFzc3dvcmQoc3RyaW5nVmFsdWUpOworCisgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGljZU9iamVjdC0+Z2V0QXJyYXkoY2FuZGlkYXRl
c1N0cmluZygpLCBjYW5kaWRhdGVzQXJyYXkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgY2FuZGlkYXRlc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPmdldChq
KS0+YXNPYmplY3QoY2FuZGlkYXRlT2JqZWN0KTsKKworICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24tPmFkZEljZUNhbmRpZGF0ZShjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9iamVj
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uZmlndXJhdGlvbi0+
YWRkTWVkaWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKKyAgICB9CisK
KyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKK30KKworc3RhdGljIFJlZlB0cjxJY2VDYW5kaWRh
dGU+IGljZUNhbmRpZGF0ZUZyb21KU09OKGNvbnN0IFN0cmluZyYganNvbikKK3sKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlOworICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNl
SlNPTihqc29uLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0OworICAgIGlmICghdmFsdWUtPmFzT2Jq
ZWN0KGNhbmRpZGF0ZU9iamVjdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIGNyZWF0ZUNhbmRpZGF0ZSgqY2FuZGlkYXRlT2JqZWN0KTsKK30KKworc3RhdGljIFN0cmlu
ZyBjb25maWd1cmF0aW9uVG9KU09OKGNvbnN0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb3JpZ2luYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
b3JpZ2luYXRvck9iamVjdC0+c2V0RG91YmxlKHNlc3Npb25JZFN0cmluZygpLCBjb25maWd1cmF0
aW9uLnNlc3Npb25JZCgpKTsKKyAgICBvcmlnaW5hdG9yT2JqZWN0LT5zZXRJbnRlZ2VyKHNlc3Np
b25WZXJzaW9uU3RyaW5nKCksIGNvbmZpZ3VyYXRpb24uc2Vzc2lvblZlcnNpb24oKSk7CisgICAg
b2JqZWN0LT5zZXRPYmplY3Qob3JpZ2luYXRvclN0cmluZygpLCBvcmlnaW5hdG9yT2JqZWN0KTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgIGZvciAoY29uc3QgUmVmUHRyPFBlZXJNZWRp
YURlc2NyaXB0aW9uPiYgbWVkaWFEZXNjcmlwdGlvbiA6IGNvbmZpZ3VyYXRpb24ubWVkaWFEZXNj
cmlwdGlvbnMoKSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgICAgICBtZWRp
YURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcodHlwZVN0cmluZygpLCBtZWRpYURlc2NyaXB0
aW9uLT50eXBlKCkpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRJbnRlZ2Vy
KHBvcnRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+cG9ydCgpKTsKKyAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGFkZHJlc3NTdHJpbmcoKSwgbWVkaWFEZXNjcmlw
dGlvbi0+YWRkcmVzcygpKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3Ry
aW5nKG1vZGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+bW9kZSgpKTsKKworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWRzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgZm9yIChSZWZQdHI8TWVkaWFQYXlsb2FkPiBwYXlsb2FkIDogbWVk
aWFEZXNjcmlwdGlvbi0+cGF5bG9hZHMoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGF5bG9hZE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAg
ICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEludGVnZXIodHlwZVN0cmluZygpLCBwYXlsb2Fk
LT50eXBlKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0U3RyaW5nKGVuY29kaW5n
TmFtZVN0cmluZygpLCBwYXlsb2FkLT5lbmNvZGluZ05hbWUoKSk7CisgICAgICAgICAgICBwYXls
b2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNsb2NrUmF0ZVN0cmluZygpLCBwYXlsb2FkLT5jbG9ja1Jh
dGUoKSk7CisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRlZ2VyKGNoYW5uZWxzU3Ry
aW5nKCksIHBheWxvYWQtPmNoYW5uZWxzKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+
c2V0Qm9vbGVhbihjY21maXJTdHJpbmcoKSwgcGF5bG9hZC0+Y2NtZmlyKCkpOworICAgICAgICAg
ICAgcGF5bG9hZE9iamVjdC0+c2V0Qm9vbGVhbihuYWNrcGxpU3RyaW5nKCksIHBheWxvYWQtPm5h
Y2twbGkoKSk7CisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRCb29sZWFuKG5hY2tTdHJp
bmcoKSwgcGF5bG9hZC0+bmFjaygpKTsKKworICAgICAgICAgICAgaWYgKCFwYXlsb2FkLT5wYXJh
bWV0ZXJzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1ldGVyc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwYXlsb2FkLT5wYXJhbWV0ZXJzKCkua2V5
cygpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzT2JqZWN0LT5zZXRJbnRlZ2VyKG5h
bWUsIHBheWxvYWQtPnBhcmFtZXRlcnMoKS5nZXQobmFtZSkpOworCisgICAgICAgICAgICAgICAg
cGF5bG9hZE9iamVjdC0+c2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmcoKSwgcGFyYW1ldGVyc09i
amVjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBheWxvYWRzQXJyYXktPnB1c2hP
YmplY3QocGF5bG9hZE9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bk9iamVjdC0+c2V0QXJyYXkocGF5bG9hZHNTdHJpbmcoKSwgcGF5bG9hZHNBcnJheSk7CisKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcnRjcE9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIHJ0Y3BPYmplY3QtPnNldEJvb2xlYW4obXV4U3RyaW5nKCks
IG1lZGlhRGVzY3JpcHRpb24tPnJ0Y3BNdXgoKSk7CisgICAgICAgIHJ0Y3BPYmplY3QtPnNldFN0
cmluZyhhZGRyZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPnJ0Y3BBZGRyZXNzKCkpOwor
ICAgICAgICBydGNwT2JqZWN0LT5zZXRJbnRlZ2VyKHBvcnRTdHJpbmcoKSwgbWVkaWFEZXNjcmlw
dGlvbi0+cnRjcFBvcnQoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldE9i
amVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpOworCisgICAgICAgIG1lZGlhRGVzY3JpcHRp
b25PYmplY3QtPnNldFN0cmluZyhtZWRpYVN0cmVhbUlkU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRp
b24tPm1lZGlhU3RyZWFtSWQoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNl
dFN0cmluZyhtZWRpYVN0cmVhbVRyYWNrSWRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+bWVk
aWFTdHJlYW1UcmFja0lkKCkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGR0
bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBkdGxzT2JqZWN0
LT5zZXRTdHJpbmcoc2V0dXBTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+ZHRsc1NldHVwKCkp
OworICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25T
dHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+ZHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKCkp
OworICAgICAgICBkdGxzT2JqZWN0LT5zZXRTdHJpbmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbi0+ZHRsc0ZpbmdlcnByaW50KCkpOworICAgICAgICBtZWRpYURlc2NyaXB0
aW9uT2JqZWN0LT5zZXRPYmplY3QoZHRsc1N0cmluZygpLCBkdGxzT2JqZWN0KTsKKworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgZm9yIChhdXRvIHNzcmMgOiBtZWRpYURlc2NyaXB0aW9uLT5zc3Jj
cygpKQorICAgICAgICAgICAgc3NyY3NBcnJheS0+cHVzaERvdWJsZShzc3JjKTsKKyAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0QXJyYXkoc3NyY3NTdHJpbmcoKSwgc3NyY3NBcnJh
eSk7CisKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKGNuYW1lU3Ry
aW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmNuYW1lKCkpOworCisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGljZU9iamVjdC0+c2V0U3RyaW5nKHVmcmFnU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24t
PmljZVVmcmFnKCkpOworICAgICAgICBpY2VPYmplY3QtPnNldFN0cmluZyhwYXNzd29yZFN0cmlu
ZygpLCBtZWRpYURlc2NyaXB0aW9uLT5pY2VQYXNzd29yZCgpKTsKKworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNhbmRpZGF0ZXNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKworICAgICAgICBmb3IgKFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNhbmRpZGF0ZSA6IG1lZGlh
RGVzY3JpcHRpb24tPmljZUNhbmRpZGF0ZXMoKSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXNBcnJh
eS0+cHVzaE9iamVjdChjcmVhdGVDYW5kaWRhdGVPYmplY3QoKmNhbmRpZGF0ZSkpOworCisgICAg
ICAgIGljZU9iamVjdC0+c2V0QXJyYXkoY2FuZGlkYXRlc1N0cmluZygpLCBjYW5kaWRhdGVzQXJy
YXkpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRPYmplY3QoaWNlU3RyaW5n
KCksIGljZU9iamVjdCk7CisKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbnNBcnJheS0+cHVzaE9i
amVjdChtZWRpYURlc2NyaXB0aW9uT2JqZWN0KTsKKyAgICB9CisgICAgb2JqZWN0LT5zZXRBcnJh
eShtZWRpYURlc2NyaXB0aW9uc1N0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uc0FycmF5KTsKKwor
ICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGlj
ZUNhbmRpZGF0ZVRvSlNPTihjb25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlQ2FuZGlkYXRlT2JqZWN0KGNhbmRpZGF0ZSktPnRvSlNPTlN0cmluZygpOwor
fQorCitTRFBQcm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OmdlbmVyYXRlKGNvbnN0IE1l
ZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbiwgU3RyaW5nJiBv
dXRTZHBTdHJpbmcpIGNvbnN0Cit7CisgICAgU3RyaW5nIHNkcFN0cmluZzsKKyAgICBpZiAoIWNh
bGxTY3JpcHQoImdlbmVyYXRlIiwgY29uZmlndXJhdGlvblRvSlNPTihjb25maWd1cmF0aW9uKSwg
c2RwU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAg
IG91dFNkcFN0cmluZyA9IHNkcFN0cmluZzsKKyAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOwor
fQorCitTRFBQcm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OnBhcnNlKGNvbnN0IFN0cmlu
ZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiYgb3V0Q29u
ZmlndXJhdGlvbikgY29uc3QKK3sKKyAgICBTdHJpbmcgc2NyaXB0T3V0cHV0OworICAgIGlmICgh
Y2FsbFNjcmlwdCgicGFyc2UiLCBzZHAsIHNjcmlwdE91dHB1dCkpCisgICAgICAgIHJldHVybiBS
ZXN1bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBpZiAoc2NyaXB0T3V0cHV0ID09ICJQYXJzZUVy
cm9yIikKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6UGFyc2VFcnJvcjsKKworICAgIFJlZlB0cjxN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBjb25maWd1
cmF0aW9uRnJvbUpTT04oc2NyaXB0T3V0cHV0KTsKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24pCisg
ICAgICAgIHJldHVybiBSZXN1bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBvdXRDb25maWd1cmF0
aW9uID0gY29uZmlndXJhdGlvbjsKKyAgICByZXR1cm4gUmVzdWx0OjpTdWNjZXNzOworfQorCitT
RFBQcm9jZXNzb3I6OlJlc3VsdCBTRFBQcm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZShj
b25zdCBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBj
b25zdAoreworICAgIFN0cmluZyBjYW5kaWRhdGVMaW5lOworICAgIGlmICghY2FsbFNjcmlwdCgi
Z2VuZXJhdGVDYW5kaWRhdGVMaW5lIiwgaWNlQ2FuZGlkYXRlVG9KU09OKGNhbmRpZGF0ZSksIGNh
bmRpZGF0ZUxpbmUpKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisg
ICAgb3V0Q2FuZGlkYXRlTGluZSA9IGNhbmRpZGF0ZUxpbmU7CisgICAgcmV0dXJuIFJlc3VsdDo6
U3VjY2VzczsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29yOjpwYXJzZUNh
bmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lLCBSZWZQdHI8SWNlQ2FuZGlk
YXRlPiYgb3V0Q2FuZGlkYXRlKSBjb25zdAoreworICAgIFN0cmluZyBzY3JpcHRPdXRwdXQ7Cisg
ICAgaWYgKCFjYWxsU2NyaXB0KCJwYXJzZUNhbmRpZGF0ZUxpbmUiLCBjYW5kaWRhdGVMaW5lLCBz
Y3JpcHRPdXRwdXQpKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisg
ICAgaWYgKHNjcmlwdE91dHB1dCA9PSAiUGFyc2VFcnJvciIpCisgICAgICAgIHJldHVybiBSZXN1
bHQ6OlBhcnNlRXJyb3I7CisKKyAgICBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBjYW5kaWRhdGUgPSBp
Y2VDYW5kaWRhdGVGcm9tSlNPTihzY3JpcHRPdXRwdXQpOworICAgIGlmICghY2FuZGlkYXRlKQor
ICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgb3V0Q2FuZGlkYXRl
ID0gY2FuZGlkYXRlOworICAgIHJldHVybiBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK2Jvb2wgU0RQ
UHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50LCBTdHJpbmcmIG91dFJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7CisgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtX2lzb2xhdGVkV29ybGQpCisgICAgICAgIG1faXNvbGF0ZWRXb3JsZCA9
IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKTsKKworICAg
IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+
c2NyaXB0KCk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoKm1f
aXNvbGF0ZWRXb3JsZCkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAg
IEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVj
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImdlbmVyYXRlIikpOworICAgIGlm
ICghcHJvYmVGdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICBVUkwgc2NyaXB0
VVJMOworICAgICAgICBzY3JpcHRDb250cm9sbGVyLmV2YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3Vy
Y2VDb2RlKFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpzY3JpcHRTdHJpbmcoKSwgc2NyaXB0
VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
blZhbHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIGZ1bmN0aW9uTmFtZSkpOworICAgIGlmICghZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0
aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0
aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU0M6OkNhbGxEYXRhIGNh
bGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFi
bGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUg
PT0gSlNDOjpDYWxsVHlwZU5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBhcmdMaXN0LmFwcGVuZChKU0M6Ompz
U3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CisKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlND
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwg
YXJnTGlzdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIExPR19F
UlJPUigiU0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9u
TmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBvdXRSZXN1bHQgPSByZXN1bHQuZ2V0U3Ry
aW5nKGV4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjNiNDE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFNEUFByb2Nlc3Nvcl9oCisjZGVmaW5lIFNEUFByb2Nlc3Nvcl9oCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50
U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3Mg
U0RQUHJvY2Vzc29yIDogcHVibGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIFJlc3VsdCB7CisgICAgICAgIFN1Y2Nlc3MgPSAxLAorICAgICAg
ICBJbnRlcm5hbEVycm9yID0gMiwKKyAgICAgICAgUGFyc2VFcnJvciA9IDMKKyAgICB9OworCisg
ICAgU0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIFJlc3VsdCBn
ZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mLCBTdHJpbmcm
IG91dFNkcFN0cmluZykgY29uc3Q7CisgICAgUmVzdWx0IHBhcnNlKGNvbnN0IFN0cmluZyYgc2Rw
LCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiYpIGNvbnN0OworCisg
ICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJY2VDYW5kaWRhdGUmLCBTdHJp
bmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0OworICAgIFJlc3VsdCBwYXJzZUNhbmRpZGF0ZUxp
bmUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lLCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGJvb2wgY2FsbFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0
OworCisgICAgbXV0YWJsZSBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjZW5kaWYgLy8gU0RQUHJvY2Vzc29yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9zZHAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjRmYzg4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vc2RwLmpzCkBAIC0wLDAgKzEsNTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKworaWYgKHR5cGVvZihTRFApID09ICJ1bmRl
ZmluZWQiKQorICAgIHZhciBTRFAgPSB7fTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcmVn
ZXhwcyA9IHsKKyAgICAgICAgInZsaW5lIjogIl52PShbXFxkXSspLiokIiwKKyAgICAgICAgIm9s
aW5lIjogIl5vPShbXFx3XFwtQFxcLl0rKSAoW1xcZF0rKSAoW1xcZF0rKSBJTiAoSVBbNDZdKSAo
W1xcZFxcLmEtZlxcOl0rKS4qJCIsCisgICAgICAgICJzbGluZSI6ICJecz0oLiopJCIsCisgICAg
ICAgICJ0bGluZSI6ICJedD0oW1xcZF0rKSAoW1xcZF0rKS4qJCIsCisgICAgICAgICJjbGluZSI6
ICJeYz1JTiAoSVBbNDZdKSAoW1xcZFxcLmEtZlxcOl0rKS4qJCIsCisgICAgICAgICJtc2lkc2Vt
YW50aWMiOiAiXmE9bXNpZC1zZW1hbnRpYzogKldNUyAuKiQiLAorICAgICAgICAibWJsb2NrIjog
Il5tPShhdWRpb3x2aWRlb3xhcHBsaWNhdGlvbikgKFtcXGRdKykgKFtBLVovXSspKFtcXGQgXSop
JFxccj9cXG4iLAorICAgICAgICAibW9kZSI6ICJeYT0oc2VuZHJlY3Z8c2VuZG9ubHl8cmVjdm9u
bHl8aW5hY3RpdmUpLiokIiwKKyAgICAgICAgInJ0cG1hcCI6ICJeYT1ydHBtYXA6JHt0eXBlfSAo
W1xcd1xcLV0rKS8oW1xcZF0rKS8/KFtcXGRdKyk/LiokIiwKKyAgICAgICAgImZtdHAiOiAiXmE9
Zm10cDoke3R5cGV9IChbXFx3XFwtPTtdKykuKiQiLAorICAgICAgICAicGFyYW0iOiAiKFtcXHdc
XC1dKyk9KFtcXHdcXC1dKyk7PyIsCisgICAgICAgICJuYWNrIjogIl5hPXJ0Y3AtZmI6JHt0eXBl
fSBuYWNrJCIsCisgICAgICAgICJuYWNrcGxpIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrIHBs
aSQiLAorICAgICAgICAiY2NtZmlyIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBjY20gZmlyJCIsCisg
ICAgICAgICJlcmljc2NyZWFtIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBlcmljc2NyZWFtJCIsCisg
ICAgICAgICJydGNwIjogIl5hPXJ0Y3A6KFtcXGRdKykoIElOIChJUFs0Nl0pIChbXFxkXFwuYS1m
XFw6XSspKT8uKiQiLAorICAgICAgICAicnRjcG11eCI6ICJeYT1ydGNwLW11eC4qJCIsCisgICAg
ICAgICJjbmFtZSI6ICJeYT1zc3JjOihcXGQrKSBjbmFtZTooW1xcdysvXFwtQFxcLlxce1xcfV0r
KS4qJCIsCisgICAgICAgICJtc2lkIjogIl5hPShzc3JjOlxcZCsgKT9tc2lkOihbXFx3Ky9cXC09
XSspICsoW1xcdysvXFwtPV0rKS4qJCIsCisgICAgICAgICJ1ZnJhZyI6ICJeYT1pY2UtdWZyYWc6
KFtcXHcrL10qKS4qJCIsCisgICAgICAgICJwd2QiOiAiXmE9aWNlLXB3ZDooW1xcdysvXSopLiok
IiwKKyAgICAgICAgImNhbmRpZGF0ZSI6ICJeYT1jYW5kaWRhdGU6KFxcZCspIChcXGQpIChVRFB8
VENQKSAoW1xcZFxcLl0qKSAoW1xcZFxcLmEtZlxcOl0qKSAoXFxkKikiICsKKyAgICAgICAgICAg
ICIgdHlwIChbYS16XSopKCByYWRkciAoW1xcZFxcLmEtZlxcOl0qKSBycG9ydCAoXFxkKikpPyIg
KworICAgICAgICAgICAgIiggdGNwdHlwZSAoYWN0aXZlfHBhc3NpdmV8c28pKT8uKiQiLAorICAg
ICAgICAiZmluZ2VycHJpbnQiOiAiXmE9ZmluZ2VycHJpbnQ6KHNoYS0xfHNoYS0yNTYpIChbQS1G
YS1mXFxkXDpdKykuKiQiLAorICAgICAgICAic2V0dXAiOiAiXmE9c2V0dXA6KGFjdHBhc3N8YWN0
aXZlfHBhc3NpdmUpLiokIiwKKyAgICAgICAgInNjdHBtYXAiOiAiXmE9c2N0cG1hcDoke3BvcnR9
IChbXFx3XFwtXSspKCBbXFxkXSspPy4qJCIKKyAgICB9OworCisgICAgdmFyIHRlbXBsYXRlcyA9
IHsKKyAgICAgICAgInNkcCI6CisgICAgICAgICAgICAidj0ke3ZlcnNpb259XHJcbiIgKworICAg
ICAgICAgICAgIm89JHt1c2VybmFtZX0gJHtzZXNzaW9uSWR9ICR7c2Vzc2lvblZlcnNpb259ICR7
bmV0VHlwZX0gJHthZGRyZXNzVHlwZX0gJHthZGRyZXNzfVxyXG4iICsKKyAgICAgICAgICAgICJz
PSR7c2Vzc2lvbk5hbWV9XHJcbiIgKworICAgICAgICAgICAgInQ9JHtzdGFydFRpbWV9ICR7c3Rv
cFRpbWV9XHJcbiIgKworICAgICAgICAgICAgIiR7bXNpZHNlbWFudGljTGluZX0iLAorCisgICAg
ICAgICJtc2lkc2VtYW50aWMiOiAiYT1tc2lkLXNlbWFudGljOldNUyAke21lZGlhU3RyZWFtSWRz
fVxyXG4iLAorCisgICAgICAgICJtYmxvY2siOgorICAgICAgICAgICAgIm09JHt0eXBlfSAke3Bv
cnR9ICR7cHJvdG9jb2x9ICR7Zm10fVxyXG4iICsKKyAgICAgICAgICAgICJjPSR7bmV0VHlwZX0g
JHthZGRyZXNzVHlwZX0gJHthZGRyZXNzfVxyXG4iICsKKyAgICAgICAgICAgICIke3J0Y3BMaW5l
fSIgKworICAgICAgICAgICAgIiR7cnRjcE11eExpbmV9IiArCisgICAgICAgICAgICAiYT0ke21v
ZGV9XHJcbiIgKworICAgICAgICAgICAgIiR7cnRwTWFwTGluZXN9IiArCisgICAgICAgICAgICAi
JHtmbXRwTGluZXN9IiArCisgICAgICAgICAgICAiJHtuYWNrTGluZXN9IiArCisgICAgICAgICAg
ICAiJHtuYWNrcGxpTGluZXN9IiArCisgICAgICAgICAgICAiJHtjY21maXJMaW5lc30iICsKKyAg
ICAgICAgICAgICIke2VyaWNTY3JlYW1MaW5lc30iICsKKyAgICAgICAgICAgICIke2NuYW1lTGlu
ZXN9IiArCisgICAgICAgICAgICAiJHttc2lkTGluZXN9IiArCisgICAgICAgICAgICAiJHtpY2VD
cmVkZW50aWFsTGluZXN9IiArCisgICAgICAgICAgICAiJHtjYW5kaWRhdGVMaW5lc30iICsKKyAg
ICAgICAgICAgICIke2R0bHNGaW5nZXJwcmludExpbmV9IiArCisgICAgICAgICAgICAiJHtkdGxz
U2V0dXBMaW5lfSIgKworICAgICAgICAgICAgIiR7c2N0cG1hcExpbmV9IiwKKworICAgICAgICAi
cnRjcCI6ICJhPXJ0Y3A6JHtwb3J0fSR7WyBdbmV0VHlwZX0ke1sgXWFkZHJlc3NUeXBlfSR7WyBd
YWRkcmVzc31cclxuIiwKKyAgICAgICAgInJ0Y3BNdXgiOiAiYT1ydGNwLW11eFxyXG4iLAorCisg
ICAgICAgICJydHBNYXAiOiAiYT1ydHBtYXA6JHt0eXBlfSAke2VuY29kaW5nTmFtZX0vJHtjbG9j
a1JhdGV9JHtbL11jaGFubmVsc31cclxuIiwKKyAgICAgICAgImZtdHAiOiAiYT1mbXRwOiR7dHlw
ZX0gJHtwYXJhbWV0ZXJzfVxyXG4iLAorICAgICAgICAibmFjayI6ICJhPXJ0Y3AtZmI6JHt0eXBl
fSBuYWNrXHJcbiIsCisgICAgICAgICJuYWNrcGxpIjogImE9cnRjcC1mYjoke3R5cGV9IG5hY2sg
cGxpXHJcbiIsCisgICAgICAgICJjY21maXIiOiAiYT1ydGNwLWZiOiR7dHlwZX0gY2NtIGZpclxy
XG4iLAorICAgICAgICAiZXJpY3NjcmVhbSI6ICJhPXJ0Y3AtZmI6JHt0eXBlfSBlcmljc2NyZWFt
XHJcbiIsCisKKyAgICAgICAgImNuYW1lIjogImE9c3NyYzoke3NzcmN9IGNuYW1lOiR7Y25hbWV9
XHJcbiIsCisgICAgICAgICJtc2lkIjogImE9bXNpZDoke21lZGlhU3RyZWFtSWR9ICR7bWVkaWFT
dHJlYW1UcmFja0lkfVxyXG4iLAorCisgICAgICAgICJpY2VDcmVkZW50aWFscyI6CisgICAgICAg
ICAgICAiYT1pY2UtdWZyYWc6JHt1ZnJhZ31cclxuIiArCisgICAgICAgICAgICAiYT1pY2UtcHdk
OiR7cGFzc3dvcmR9XHJcbiIsCisKKyAgICAgICAgImNhbmRpZGF0ZSI6CisgICAgICAgICAgICAi
YT1jYW5kaWRhdGU6JHtmb3VuZGF0aW9ufSAke2NvbXBvbmVudElkfSAke3RyYW5zcG9ydH0gJHtw
cmlvcml0eX0gJHthZGRyZXNzfSAke3BvcnR9IiArCisgICAgICAgICAgICAiIHR5cCAke3R5cGV9
JHtbIHJhZGRyIF1yZWxhdGVkQWRkcmVzc30ke1sgcnBvcnQgXXJlbGF0ZWRQb3J0fSR7WyB0Y3B0
eXBlIF10Y3BUeXBlfVxyXG4iLAorCisgICAgICAgICJkdGxzRmluZ2VycHJpbnQiOiAiYT1maW5n
ZXJwcmludDoke2ZpbmdlcnByaW50SGFzaEZ1bmN0aW9ufSAke2ZpbmdlcnByaW50fVxyXG4iLAor
ICAgICAgICAiZHRsc1NldHVwIjogImE9c2V0dXA6JHtzZXR1cH1cclxuIiwKKworICAgICAgICAi
c2N0cG1hcCI6ICJhPXNjdHBtYXA6JHtwb3J0fSAke2FwcH0ke1sgXXN0cmVhbXN9XHJcbiIKKyAg
ICB9OworCisgICAgZnVuY3Rpb24gbWF0Y2goZGF0YSwgcGF0dGVybiwgZmxhZ3MsIGFsdCkgewor
ICAgICAgICB2YXIgciA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZXR1
cm4gZGF0YS5tYXRjaChyKSB8fCBhbHQgJiYgYWx0Lm1hdGNoKHIpIHx8IG51bGw7CisgICAgfQor
CisgICAgZnVuY3Rpb24gYWRkRGVmYXVsdHMob2JqLCBkZWZhdWx0cykgeworICAgICAgICBmb3Ig
KHZhciBwIGluIGRlZmF1bHRzKSB7CisgICAgICAgICAgICBpZiAoIWRlZmF1bHRzLmhhc093blBy
b3BlcnR5KHApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHR5
cGVvZihvYmpbcF0pID09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgIG9ialtwXSA9IGRl
ZmF1bHRzW3BdOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsbFRlbXBsYXRl
KHRlbXBsYXRlLCBpbmZvKSB7CisgICAgICAgIHZhciB0ZXh0ID0gdGVtcGxhdGU7CisgICAgICAg
IGZvciAodmFyIHAgaW4gaW5mbykgeworICAgICAgICAgICAgaWYgKCFpbmZvLmhhc093blByb3Bl
cnR5KHApKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHIgPSBu
ZXcgUmVnRXhwKCJcXCR7KFxcW1teXFxdXStcXF0pPyIgKyBwICsgIihcXFtbXlxcXV0rXFxdKT99
Iik7CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHIsIGZ1bmN0aW9uIChfLCBwcmVm
aXgsIHN1ZmZpeCkgeworICAgICAgICAgICAgICAgIGlmICghaW5mb1twXSAmJiBpbmZvW3BdICE9
IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgICAgICBwcmVm
aXggPSBwcmVmaXggPyBwcmVmaXguc3Vic3RyKDEsIHByZWZpeC5sZW5ndGggLSAyKSA6ICIiOwor
ICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHN1ZmZpeCA/IHN1ZmZpeC5zdWJzdHIoMSwgc3VmZml4
Lmxlbmd0aCAtIDIpIDogIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIGluZm9b
cF0gKyBzdWZmaXg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dGV4dDsKKyAgICB9CisKKyAgICBTRFAucGFyc2UgPSBmdW5jdGlvbiAoc2RwVGV4dCkgeworICAg
ICAgICBzZHBUZXh0ID0gbmV3IFN0cmluZyhzZHBUZXh0KTsKKyAgICAgICAgdmFyIHNkcE9iaiA9
IHt9OworICAgICAgICB2YXIgcGFydHMgPSBzZHBUZXh0LnNwbGl0KG5ldyBSZWdFeHAocmVnZXhw
cy5tYmxvY2ssICJtIikpIHx8IFtzZHBUZXh0XTsKKyAgICAgICAgdmFyIHNibG9jayA9IHBhcnRz
LnNoaWZ0KCk7CisgICAgICAgIHZhciB2ZXJzaW9uID0gcGFyc2VJbnQoKG1hdGNoKHNibG9jaywg
cmVnZXhwcy52bGluZSwgIm0iKSB8fCBbXSlbMV0pOworICAgICAgICBpZiAoIWlzTmFOKHZlcnNp
b24pKQorICAgICAgICAgICAgc2RwT2JqLnZlcnNpb24gPSB2ZXJzaW9uOworICAgICAgICB2YXIg
b3JpZ2luYXRvciA9IG1hdGNoKHNibG9jaywgcmVnZXhwcy5vbGluZSwgIm0iKTs7CisgICAgICAg
IGlmIChvcmlnaW5hdG9yKSB7CisgICAgICAgICAgICBzZHBPYmoub3JpZ2luYXRvciA9IHsKKyAg
ICAgICAgICAgICAgICAidXNlcm5hbWUiOiBvcmlnaW5hdG9yWzFdLAorICAgICAgICAgICAgICAg
ICJzZXNzaW9uSWQiOiBvcmlnaW5hdG9yWzJdLAorICAgICAgICAgICAgICAgICJzZXNzaW9uVmVy
c2lvbiI6IHBhcnNlSW50KG9yaWdpbmF0b3JbM10pLAorICAgICAgICAgICAgICAgICJuZXRUeXBl
IjogIklOIiwKKyAgICAgICAgICAgICAgICAiYWRkcmVzc1R5cGUiOiBvcmlnaW5hdG9yWzRdLAor
ICAgICAgICAgICAgICAgICJhZGRyZXNzIjogb3JpZ2luYXRvcls1XQorICAgICAgICAgICAgfTsK
KyAgICAgICAgfQorICAgICAgICB2YXIgc2Vzc2lvbk5hbWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4
cHMuc2xpbmUsICJtIik7CisgICAgICAgIGlmIChzZXNzaW9uTmFtZSkKKyAgICAgICAgICAgIHNk
cE9iai5zZXNzaW9uTmFtZSA9IHNlc3Npb25OYW1lWzFdOworICAgICAgICB2YXIgc2Vzc2lvblRp
bWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4cHMudGxpbmUsICJtIik7CisgICAgICAgIGlmIChzZXNz
aW9uVGltZSkgeworICAgICAgICAgICAgc2RwT2JqLnN0YXJ0VGltZSA9IHBhcnNlSW50KHNlc3Np
b25UaW1lWzFdKTsKKyAgICAgICAgICAgIHNkcE9iai5zdG9wVGltZSA9IHBhcnNlSW50KHNlc3Np
b25UaW1lWzJdKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaGFzTWVkaWFTdHJlYW1JZCA9ICEh
bWF0Y2goc2Jsb2NrLCByZWdleHBzLm1zaWRzZW1hbnRpYywgIm0iKTsKKyAgICAgICAgc2RwT2Jq
Lm1lZGlhRGVzY3JpcHRpb25zID0gW107CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
YXJ0cy5sZW5ndGg7IGkgKz0gNSkgeworICAgICAgICAgICAgdmFyIG1lZGlhRGVzY3JpcHRpb24g
PSB7CisgICAgICAgICAgICAgICAgInR5cGUiOiBwYXJ0c1tpXSwKKyAgICAgICAgICAgICAgICAi
cG9ydCI6IHBhcnNlSW50KHBhcnRzW2kgKyAxXSksCisgICAgICAgICAgICAgICAgInByb3RvY29s
IjogcGFydHNbaSArIDJdLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZhciBmbXQgPSBw
YXJ0c1tpICsgM10ucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdKy8sICcnKQorICAgICAgICAgICAg
ICAgIC5zcGxpdCgvICsvKQorICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgdmFyIG1ibG9jayA9IHBhcnRzW2kgKyA0XTsKKworICAgICAgICAgICAg
dmFyIGNvbm5lY3Rpb24gPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMuY2xpbmUsICJtIiwgc2Jsb2Nr
KTsKKyAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbi5uZXRUeXBlID0gIklOIjsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLmFkZHJlc3NUeXBlID0gY29ubmVjdGlvblsxXTsKKyAgICAgICAgICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLmFkZHJlc3MgPSBjb25uZWN0aW9uWzJdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIG1vZGUgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMubW9kZSwgIm0iLCBzYmxvY2sp
OworICAgICAgICAgICAgaWYgKG1vZGUpCisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5tb2RlID0gbW9kZVsxXTsKKworICAgICAgICAgICAgdmFyIHBheWxvYWRUeXBlcyA9IFtdOwor
ICAgICAgICAgICAgaWYgKG1hdGNoKG1lZGlhRGVzY3JpcHRpb24ucHJvdG9jb2wsICIoVURQL1RM
Uyk/UlRQL1M/QVZQRj8iKSkgeworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5
bG9hZHMgPSBbXTsKKyAgICAgICAgICAgICAgICBwYXlsb2FkVHlwZXMgPSBmbXQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBwYXlsb2FkVHlwZXMuZm9yRWFjaChmdW5jdGlvbiAocGF5bG9h
ZFR5cGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IHsgInR5cGUiOiBwYXlsb2Fk
VHlwZSB9OworICAgICAgICAgICAgICAgIHZhciBydHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHJl
Z2V4cHMucnRwbWFwLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICB2YXIgcnRwbWFwID0gbWF0
Y2gobWJsb2NrLCBydHBtYXBMaW5lLCAibSIpOworICAgICAgICAgICAgICAgIGlmIChydHBtYXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5lbmNvZGluZ05hbWUgPSBydHBtYXBbMV07
CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gcGFyc2VJbnQocnRwbWFw
WzJdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAi
YXVkaW8iKQorICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IHBhcnNl
SW50KHJ0cG1hcFszXSkgfHwgMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWVkaWFE
ZXNjcmlwdGlvbi50eXBlID09ICJ2aWRlbyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBuYWNrTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLm5hY2ssIHBheWxvYWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrID0gISFtYXRjaChtYmxvY2ssIG5hY2tMaW5l
LCAibSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hY2twbGlMaW5lID0gZmlsbFRl
bXBsYXRlKHJlZ2V4cHMubmFja3BsaSwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXlsb2FkLm5hY2twbGkgPSAhIW1hdGNoKG1ibG9jaywgbmFja3BsaUxpbmUsICJtIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2NtZmlyTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdl
eHBzLmNjbWZpciwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmNj
bWZpciA9ICEhbWF0Y2gobWJsb2NrLCBjY21maXJMaW5lLCAibSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGVyaWNTY3JlYW1MaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMuZXJpY3Nj
cmVhbSwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmVyaWNzY3Jl
YW0gPSAhIW1hdGNoKG1ibG9jaywgZXJpY1NjcmVhbUxpbmUsICJtIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRUeXBlID09IDAgfHwg
cGF5bG9hZFR5cGUgPT0gOCkgeworICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmVuY29kaW5n
TmFtZSA9IHBheWxvYWRUeXBlID09IDggPyAiUENNQSIgOiAiUENNVSI7CisgICAgICAgICAgICAg
ICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gODAwMDsKKyAgICAgICAgICAgICAgICAgICAgcGF5
bG9hZC5jaGFubmVscyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZh
ciBmbXRwTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLmZtdHAsIHBheWxvYWQpOworICAgICAg
ICAgICAgICAgIHZhciBmbXRwID0gbWF0Y2gobWJsb2NrLCBmbXRwTGluZSwgIm0iKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZm10cCkgeworICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFt
ZXRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgZm10cFsxXS5yZXBsYWNlKG5ldyBSZWdF
eHAocmVnZXhwcy5wYXJhbSwgImciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KF8sIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXku
cmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24gKF8sIGMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFt
ZXRlcnNba2V5XSA9IGlzTmFOKCt2YWx1ZSkgPyB2YWx1ZSA6ICt2YWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lZGlhRGVz
Y3JpcHRpb24ucGF5bG9hZHMucHVzaChwYXlsb2FkKTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICB2YXIgcnRjcCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5ydGNwLCAibSIpOworICAg
ICAgICAgICAgaWYgKHJ0Y3ApIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0
Y3AgPSB7CisgICAgICAgICAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAg
ICAgICAgICAgInBvcnQiOiBwYXJzZUludChydGNwWzFdKQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgaWYgKHJ0Y3BbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3NUeXBlID0gcnRjcFszXTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3MgPSBydGNwWzRdOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBydGNwbXV4ID0gbWF0Y2gobWJs
b2NrLCByZWdleHBzLnJ0Y3BtdXgsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChydGNw
bXV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZWRpYURlc2NyaXB0aW9uLnJ0Y3ApCisgICAg
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcCA9IHt9OworICAgICAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcC5tdXggPSB0cnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgY25hbWVMaW5lcyA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5jbmFtZSwg
Im1nIik7CisgICAgICAgICAgICBpZiAoY25hbWVMaW5lcykgeworICAgICAgICAgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb24uc3NyY3MgPSBbXTsKKyAgICAgICAgICAgICAgICBjbmFtZUxpbmVzLmZv
ckVhY2goZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lID0g
bWF0Y2gobGluZSwgcmVnZXhwcy5jbmFtZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgbWVk
aWFEZXNjcmlwdGlvbi5zc3Jjcy5wdXNoKHBhcnNlSW50KGNuYW1lWzFdKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbWVkaWFEZXNjcmlwdGlvbi5jbmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24uY25hbWUgPSBjbmFtZVsyXTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhhc01lZGlhU3RyZWFtSWQp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbXNpZCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5tc2lk
LCAibSIpOworICAgICAgICAgICAgICAgIGlmIChtc2lkKSB7CisgICAgICAgICAgICAgICAgICAg
IG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCA9IG1zaWRbMl07CisgICAgICAgICAgICAg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkID0gbXNpZFszXTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciB1ZnJhZyA9
IG1hdGNoKG1ibG9jaywgcmVnZXhwcy51ZnJhZywgIm0iLCBzYmxvY2spOworICAgICAgICAgICAg
dmFyIHB3ZCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5wd2QsICJtIiwgc2Jsb2NrKTsKKyAgICAg
ICAgICAgIGlmICh1ZnJhZyAmJiBwd2QpIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLmljZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgInVmcmFnIjogdWZyYWdbMV0sCisgICAg
ICAgICAgICAgICAgICAgICJwYXNzd29yZCI6IHB3ZFsxXQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgY2FuZGlkYXRlTGluZXMgPSBtYXRjaChtYmxv
Y2ssIHJlZ2V4cHMuY2FuZGlkYXRlLCAibWlnIik7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
TGluZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24uaWNlKQorICAg
ICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZSA9IHt9OworICAgICAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMgPSBbXTsKKyAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVMaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBjYW5kaWRhdGVMaW5lID0gbWF0Y2gobGluZSwgcmVnZXhwcy5jYW5kaWRhdGUs
ICJtaSIpOworICAgICAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgImZvdW5kYXRpb24iOiBjYW5kaWRhdGVMaW5lWzFdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgImNvbXBvbmVudElkIjogcGFyc2VJbnQoY2FuZGlkYXRlTGluZVsyXSks
CisgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0IjogY2FuZGlkYXRlTGluZVszXS50
b1VwcGVyQ2FzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgInByaW9yaXR5IjogcGFyc2VJ
bnQoY2FuZGlkYXRlTGluZVs0XSksCisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6
IGNhbmRpZGF0ZUxpbmVbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAicG9ydCI6IHBhcnNl
SW50KGNhbmRpZGF0ZUxpbmVbNl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiBj
YW5kaWRhdGVMaW5lWzddCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGVMaW5lWzldKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlk
YXRlLnJlbGF0ZWRBZGRyZXNzID0gY2FuZGlkYXRlTGluZVs5XTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc05hTihjYW5kaWRhdGVMaW5lWzEwXSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGUucmVsYXRlZFBvcnQgPSBwYXJzZUludChjYW5kaWRhdGVMaW5lWzEwXSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVMaW5lWzEyXSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZS50Y3BUeXBlID0gY2FuZGlkYXRlTGluZVsxMl07CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGNhbmRpZGF0ZS50cmFuc3BvcnQgPT0gIlRDUCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUucG9ydCA9PSAwIHx8IGNhbmRpZGF0
ZS5wb3J0ID09IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUudGNw
VHlwZSA9ICJhY3RpdmUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5w
b3J0ID0gOTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNl
LmNhbmRpZGF0ZXMucHVzaChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgZmluZ2VycHJpbnQgPSBtYXRjaChtYmxvY2ssIHJl
Z2V4cHMuZmluZ2VycHJpbnQsICJtaSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAoZmluZ2Vy
cHJpbnQpIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHMgPSB7CisgICAg
ICAgICAgICAgICAgICAgICJmaW5nZXJwcmludEhhc2hGdW5jdGlvbiI6IGZpbmdlcnByaW50WzFd
LnRvTG93ZXJDYXNlKCksCisgICAgICAgICAgICAgICAgICAgICJmaW5nZXJwcmludCI6IGZpbmdl
cnByaW50WzJdLnRvVXBwZXJDYXNlKCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFyIHNldHVwID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnNldHVwLCAi
bSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAoc2V0dXApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1lZGlhRGVzY3JpcHRpb24uZHRscykKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbi5kdGxzID0ge307CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxz
LnNldHVwID0gc2V0dXBbMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtZWRp
YURlc2NyaXB0aW9uLnByb3RvY29sID09ICJEVExTL1NDVFAiKSB7CisgICAgICAgICAgICAgICAg
bWVkaWFEZXNjcmlwdGlvbi5zY3RwID0geworICAgICAgICAgICAgICAgICAgICAicG9ydCI6IGZt
dFswXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIHNjdHBtYXBMaW5l
ID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMuc2N0cG1hcCwgbWVkaWFEZXNjcmlwdGlvbi5zY3RwKTsK
KyAgICAgICAgICAgICAgICB2YXIgc2N0cG1hcCA9IG1hdGNoKG1ibG9jaywgc2N0cG1hcExpbmUs
ICJtIik7CisgICAgICAgICAgICAgICAgaWYgKHNjdHBtYXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwLmFwcCA9IHNjdHBtYXBbMV07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzY3RwbWFwWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbi5zY3RwLnN0cmVhbXMgPSBwYXJzZUludChzY3RwbWFwWzJdKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0
aW9ucy5wdXNoKG1lZGlhRGVzY3JpcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHNkcE9iajsKKyAgICB9OworCisgICAgU0RQLmdlbmVyYXRlID0gZnVuY3Rpb24gKHNkcE9iaikg
eworICAgICAgICBzZHBPYmogPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNkcE9iaikpOwor
ICAgICAgICBhZGREZWZhdWx0cyhzZHBPYmosIHsKKyAgICAgICAgICAgICJ2ZXJzaW9uIjogMCwK
KyAgICAgICAgICAgICJvcmlnaW5hdG9yIjoge30sCisgICAgICAgICAgICAic2Vzc2lvbk5hbWUi
OiAiLSIsCisgICAgICAgICAgICAic3RhcnRUaW1lIjogMCwKKyAgICAgICAgICAgICJzdG9wVGlt
ZSI6IDAsCisgICAgICAgICAgICAibWVkaWFEZXNjcmlwdGlvbnMiOiBbXQorICAgICAgICB9KTsK
KyAgICAgICAgYWRkRGVmYXVsdHMoc2RwT2JqLm9yaWdpbmF0b3IsIHsKKyAgICAgICAgICAgICJ1
c2VybmFtZSI6ICItIiwKKyAgICAgICAgICAgICJzZXNzaW9uSWQiOiAiIiArIE1hdGguZmxvb3Io
KE1hdGgucmFuZG9tKCkgKyArbmV3IERhdGUoKSkgKiAxZTYpLAorICAgICAgICAgICAgInNlc3Np
b25WZXJzaW9uIjogMSwKKyAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAg
ICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAgICAgICAgImFkZHJlc3MiOiAiMTI3LjAuMC4x
IgorICAgICAgICB9KTsKKyAgICAgICAgdmFyIHNkcFRleHQgPSBmaWxsVGVtcGxhdGUodGVtcGxh
dGVzLnNkcCwgc2RwT2JqKTsKKyAgICAgICAgc2RwVGV4dCA9IGZpbGxUZW1wbGF0ZShzZHBUZXh0
LCBzZHBPYmoub3JpZ2luYXRvcik7CisKKyAgICAgICAgdmFyIG1zaWRzZW1hbnRpY0xpbmUgPSAi
IjsKKyAgICAgICAgdmFyIG1lZGlhU3RyZWFtSWRzID0gW107CisgICAgICAgIHNkcE9iai5tZWRp
YURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtZGVzYykgeworICAgICAgICAgICAgaWYg
KG1kZXNjLm1lZGlhU3RyZWFtSWQgJiYgbWRlc2MubWVkaWFTdHJlYW1UcmFja0lkCisgICAgICAg
ICAgICAgICAgJiYgbWVkaWFTdHJlYW1JZHMuaW5kZXhPZihtZGVzYy5tZWRpYVN0cmVhbUlkKSA9
PSAtMSkKKyAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbUlkcy5wdXNoKG1kZXNjLm1lZGlhU3Ry
ZWFtSWQpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1lZGlhU3RyZWFtSWRzLmxlbmd0aCkg
eworICAgICAgICAgICAgdmFyIG1zaWRzZW1hbnRpY0xpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxh
dGVzLm1zaWRzZW1hbnRpYywKKyAgICAgICAgICAgICAgICB7ICJtZWRpYVN0cmVhbUlkcyI6IG1l
ZGlhU3RyZWFtSWRzLmpvaW4oIiAiKSB9KTsKKyAgICAgICAgfQorICAgICAgICBzZHBUZXh0ID0g
ZmlsbFRlbXBsYXRlKHNkcFRleHQsIHsgIm1zaWRzZW1hbnRpY0xpbmUiOiBtc2lkc2VtYW50aWNM
aW5lIH0pOworCisgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0
aW9uIChtZWRpYURlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURl
c2NyaXB0aW9uLCB7CisgICAgICAgICAgICAgICAgInBvcnQiOiA5LAorICAgICAgICAgICAgICAg
ICJwcm90b2NvbCI6ICJVRFAvVExTL1JUUC9TQVZQRiIsCisgICAgICAgICAgICAgICAgIm5ldFR5
cGUiOiAiSU4iLAorICAgICAgICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAg
ICAgICAgICAgICJhZGRyZXNzIjogIjAuMC4wLjAiLAorICAgICAgICAgICAgICAgICJtb2RlIjog
InNlbmRyZWN2IiwKKyAgICAgICAgICAgICAgICAicGF5bG9hZHMiOiBbXSwKKyAgICAgICAgICAg
ICAgICAicnRjcCI6IHt9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBtYmxvY2sg
PSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1ibG9jaywgbWVkaWFEZXNjcmlwdGlvbik7CisKKyAg
ICAgICAgICAgIHZhciBwYXlsb2FkSW5mbyA9IHsicnRwTWFwTGluZXMiOiAiIiwgImZtdHBMaW5l
cyI6ICIiLCAibmFja0xpbmVzIjogIiIsCisgICAgICAgICAgICAgICAgIm5hY2twbGlMaW5lcyI6
ICIiLCAiY2NtZmlyTGluZXMiOiAiIiwgImVyaWNTY3JlYW1MaW5lcyI6ICIifTsKKyAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMuZm9yRWFjaChmdW5jdGlvbiAocGF5bG9hZCkg
eworICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkSW5mby5mbXQpCisgICAgICAgICAgICAgICAg
ICAgIHBheWxvYWRJbmZvLmZtdCArPSAiICIgKyBwYXlsb2FkLnR5cGU7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5mbXQgPSBwYXlsb2FkLnR5
cGU7CisgICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmNoYW5uZWxzIHx8IHBheWxvYWQuY2hh
bm5lbHMgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IG51bGw7
CisgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8ucnRwTWFwTGluZXMgKz0gZmlsbFRlbXBsYXRl
KHRlbXBsYXRlcy5ydHBNYXAsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIGlmIChwYXlsb2Fk
LnBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZtdHBJbmZvID0geyAidHlw
ZSI6IHBheWxvYWQudHlwZSwgInBhcmFtZXRlcnMiOiAiIiB9OworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBwIGluIHBheWxvYWQucGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHBhcmFtID0gcC5yZXBsYWNlKC8oW0EtWl0pKFthLXpdKS9nLCBmdW5jdGlvbiAo
XywgYSwgYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLSIgKyBhLnRv
TG93ZXJDYXNlKCkgKyBiOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm10cEluZm8ucGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbXRwSW5mby5wYXJhbWV0ZXJzICs9ICI7IjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZtdHBJbmZvLnBhcmFtZXRlcnMgKz0gcGFyYW0gKyAiPSIgKyBwYXlsb2FkLnBhcmFt
ZXRlcnNbcF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGF5
bG9hZEluZm8uZm10cExpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuZm10cCwgZm10cElu
Zm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYWNr
KQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5uYWNrTGluZXMgKz0gZmlsbFRlbXBs
YXRlKHRlbXBsYXRlcy5uYWNrLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9h
ZC5uYWNrcGxpKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5uYWNrcGxpTGluZXMg
Kz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5uYWNrcGxpLCBwYXlsb2FkKTsKKyAgICAgICAgICAg
ICAgICBpZiAocGF5bG9hZC5jY21maXIpCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZv
LmNjbWZpckxpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuY2NtZmlyLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5lcmljc2NyZWFtKQorICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkSW5mby5lcmljU2NyZWFtTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRl
cy5lcmljc2NyZWFtLCBwYXlsb2FkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbWJs
b2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgcGF5bG9hZEluZm8pOworCisgICAgICAgICAgICB2
YXIgcnRjcEluZm8gPSB7InJ0Y3BMaW5lIjogIiIsICJydGNwTXV4TGluZSI6ICIifTsKKyAgICAg
ICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnJ0Y3AucG9ydCkgeworICAgICAgICAgICAgICAg
IGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24ucnRjcCwgeworICAgICAgICAgICAgICAgICAg
ICAibmV0VHlwZSI6ICJJTiIsCisgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJ
UDQiLAorICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIiCisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzcykK
KyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLm5ldFR5cGUgPSBtZWRp
YURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzc1R5cGUgPSAiIjsKKyAgICAgICAgICAgICAgICBydGNw
SW5mby5ydGNwTGluZSA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMucnRjcCwgbWVkaWFEZXNjcmlw
dGlvbi5ydGNwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uLnJ0Y3AubXV4KQorICAgICAgICAgICAgICAgIHJ0Y3BJbmZvLnJ0Y3BNdXhMaW5lID0gdGVt
cGxhdGVzLnJ0Y3BNdXg7CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJsb2Nr
LCBydGNwSW5mbyk7CisKKyAgICAgICAgICAgIHZhciBzcmNBdHRyaWJ1dGVMaW5lcyA9IHsgImNu
YW1lTGluZXMiOiAiIiwgIm1zaWRMaW5lcyI6ICIiIH07CisgICAgICAgICAgICB2YXIgc3JjQXR0
cmlidXRlcyA9IHsKKyAgICAgICAgICAgICAgICAiY25hbWUiOiBtZWRpYURlc2NyaXB0aW9uLmNu
YW1lLAorICAgICAgICAgICAgICAgICJtZWRpYVN0cmVhbUlkIjogbWVkaWFEZXNjcmlwdGlvbi5t
ZWRpYVN0cmVhbUlkLAorICAgICAgICAgICAgICAgICJtZWRpYVN0cmVhbVRyYWNrSWQiOiBtZWRp
YURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJZAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmNuYW1lICYmIG1lZGlhRGVzY3JpcHRpb24uc3NyY3Mp
IHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNzcmNzLmZvckVhY2goZnVuY3Rp
b24gKHNzcmMpIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjQXR0cmlidXRlcy5zc3JjID0gc3Ny
YzsKKyAgICAgICAgICAgICAgICAgICAgc3JjQXR0cmlidXRlTGluZXMuY25hbWVMaW5lcyArPSBm
aWxsVGVtcGxhdGUodGVtcGxhdGVzLmNuYW1lLCBzcmNBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCAmJiBtZWRpYURlc2Ny
aXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY0F0
dHJpYnV0ZUxpbmVzLm1zaWRMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWQsIHNy
Y0F0dHJpYnV0ZXMpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIGlm
IChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQgJiYgbWVkaWFEZXNjcmlwdGlvbi5tZWRp
YVN0cmVhbVRyYWNrSWQpIHsKKyAgICAgICAgICAgICAgICBzcmNBdHRyaWJ1dGVzLnNzcmMgPSBu
dWxsOworICAgICAgICAgICAgICAgIHNyY0F0dHJpYnV0ZUxpbmVzLm1zaWRMaW5lcyArPSBmaWxs
VGVtcGxhdGUodGVtcGxhdGVzLm1zaWQsIHNyY0F0dHJpYnV0ZXMpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgc3JjQXR0cmlidXRlTGlu
ZXMpOworCisgICAgICAgICAgICB2YXIgaWNlSW5mbyA9IHsiaWNlQ3JlZGVudGlhbExpbmVzIjog
IiIsICJjYW5kaWRhdGVMaW5lcyI6ICIifTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uLmljZSkgeworICAgICAgICAgICAgICAgIGljZUluZm8uaWNlQ3JlZGVudGlhbExpbmVzID0g
ZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5pY2VDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAg
ICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UpOworICAgICAgICAgICAgICAgIGlmIChtZWRpYURlc2Ny
aXB0aW9uLmljZS5jYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uaWNlLmNhbmRpZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGREZWZhdWx0cyhjYW5kaWRhdGUsIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVsYXRlZEFkZHJlc3MiOiBudWxsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZWxhdGVkUG9ydCI6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRjcFR5cGUiOiBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGljZUluZm8uY2FuZGlkYXRlTGluZXMgKz0gZmlsbFRlbXBsYXRl
KHRlbXBsYXRlcy5jYW5kaWRhdGUsIGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9
IGZpbGxUZW1wbGF0ZShtYmxvY2ssIGljZUluZm8pOworCisgICAgICAgICAgICB2YXIgZHRsc0lu
Zm8gPSB7ICJkdGxzRmluZ2VycHJpbnRMaW5lIjogIiIsICJkdGxzU2V0dXBMaW5lIjogIiIgfTsK
KyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmR0bHMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobWVkaWFEZXNjcmlwdGlvbi5kdGxzLmZpbmdlcnByaW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIGR0bHNJbmZvLmR0bHNGaW5nZXJwcmludExpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxh
dGVzLmR0bHNGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24uZHRscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZERlZmF1
bHRzKG1lZGlhRGVzY3JpcHRpb24uZHRscywgeyJzZXR1cCI6ICJhY3RwYXNzIn0pOworICAgICAg
ICAgICAgICAgIGR0bHNJbmZvLmR0bHNTZXR1cExpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVz
LmR0bHNTZXR1cCwgbWVkaWFEZXNjcmlwdGlvbi5kdGxzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZShtYmxvY2ssIGR0bHNJbmZvKTsKKworICAgICAg
ICAgICAgdmFyIHNjdHBJbmZvID0geyJzY3RwbWFwTGluZSI6ICIiLCAiZm10IjogIiJ9OworICAg
ICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24uc2N0cCkgeworICAgICAgICAgICAgICAgIGFk
ZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24uc2N0cCwgeyJzdHJlYW1zIjogbnVsbH0pOworICAg
ICAgICAgICAgICAgIHNjdHBJbmZvLnNjdHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRl
cy5zY3RwbWFwLCBtZWRpYURlc2NyaXB0aW9uLnNjdHApOworICAgICAgICAgICAgICAgIHNjdHBJ
bmZvLmZtdCA9IG1lZGlhRGVzY3JpcHRpb24uc2N0cC5wb3J0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgc2N0cEluZm8pOworCisgICAg
ICAgICAgICBzZHBUZXh0ICs9IG1ibG9jazsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJu
IHNkcFRleHQ7CisgICAgfTsKKworICAgIFNEUC5nZW5lcmF0ZUNhbmRpZGF0ZUxpbmUgPSBmdW5j
dGlvbiAoY2FuZGlkYXRlT2JqKSB7CisgICAgICAgIGFkZERlZmF1bHRzKGNhbmRpZGF0ZU9iaiwg
eworICAgICAgICAgICAgInJlbGF0ZWRBZGRyZXNzIjogbnVsbCwKKyAgICAgICAgICAgICJyZWxh
dGVkUG9ydCI6IG51bGwsCisgICAgICAgICAgICAidGNwVHlwZSI6IG51bGwKKyAgICAgICAgfSk7
CisKKyAgICAgICAgcmV0dXJuIGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuY2FuZGlkYXRlLCBjYW5k
aWRhdGVPYmopOworICAgIH07CisKKyAgICB2YXIgZXhwZWN0ZWRQcm9wZXJ0aWVzID0geworICAg
ICAgICAic2Vzc2lvbiI6IFsgInZlcnNpb24iLCAib3JpZ2luYXRvciIsICJzZXNzaW9uTmFtZSIs
ICJzdGFydFRpbWUiLCAic3RvcFRpbWUiIF0sCisgICAgICAgICJtbGluZSI6IFsgInR5cGUiLCAi
cG9ydCIsICJwcm90b2NvbCIsICJtb2RlIiwgInBheWxvYWRzIiwgInJ0Y3AiLCAibWVkaWFTdHJl
YW1JZCIsCisgICAgICAgICAgICAibWVkaWFTdHJlYW1UcmFja0lkIiwgImR0bHMiLCAic3NyY3Mi
LCAiY25hbWUiLCAiaWNlIiBdLAorICAgICAgICAibWxpbmVTdWJPYmplY3RzIjogeworICAgICAg
ICAgICAgInJ0Y3AiOiBbICJtdXgiIF0sCisgICAgICAgICAgICAiaWNlIjogWyAidWZyYWciLCAi
cGFzc3dvcmQiIF0sCisgICAgICAgICAgICAiZHRscyI6IFsgInNldHVwIiwgImZpbmdlcnByaW50
SGFzaEZ1bmN0aW9uIiwgImZpbmdlcnByaW50IiBdCisgICAgICAgIH0KKyAgICB9OworCisgICAg
ZnVuY3Rpb24gaGFzQWxsUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKKyAgICAgICAg
dmFyIG1pc3NpbmcgPSBwcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAg
ICAgICAgICAgIHJldHVybiAhb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgcmV0dXJuICFtaXNzaW5nLmxlbmd0aDsKKyAgICB9CisKKyAgICBT
RFAudmVyaWZ5T2JqZWN0ID0gZnVuY3Rpb24gKHNkcE9iaikgeworICAgICAgICBpZiAoIWhhc0Fs
bFByb3BlcnRpZXMoc2RwT2JqLCBleHBlY3RlZFByb3BlcnRpZXMuc2Vzc2lvbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZHBPYmou
bWVkaWFEZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBtZWRpYURl
c2NyaXB0aW9uID0gc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zW2ldOworCisgICAgICAgICAgICBp
ZiAoIWhhc0FsbFByb3BlcnRpZXMobWVkaWFEZXNjcmlwdGlvbiwgZXhwZWN0ZWRQcm9wZXJ0aWVz
Lm1saW5lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZv
ciAodmFyIHAgaW4gZXhwZWN0ZWRQcm9wZXJ0aWVzLm1saW5lU3ViT2JqZWN0cykgeworICAgICAg
ICAgICAgICAgIGlmICghaGFzQWxsUHJvcGVydGllcyhtZWRpYURlc2NyaXB0aW9uW3BdLCBleHBl
Y3RlZFByb3BlcnRpZXMubWxpbmVTdWJPYmplY3RzW3BdKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfTsKKworfSkoKTsKKworZnVuY3Rpb24gZ2VuZXJhdGUoanNvbikgeworICAg
IHZhciBvYmplY3QgPSBKU09OLnBhcnNlKGpzb24pOworICAgIHJldHVybiBTRFAuZ2VuZXJhdGUo
b2JqZWN0KTsKK30KKworZnVuY3Rpb24gcGFyc2Uoc2RwKSB7CisgICAgdmFyIG9iamVjdCA9IFNE
UC5wYXJzZShzZHApOworCisgICAgaWYgKCFTRFAudmVyaWZ5T2JqZWN0KG9iamVjdCkpCisgICAg
ICAgIHJldHVybiAiUGFyc2VFcnJvciI7CisKKyAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2Jq
ZWN0KTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGpzb24pIHsKKyAgICB2
YXIgY2FuZGlkYXRlID0gSlNPTi5wYXJzZShqc29uKTsKKyAgICByZXR1cm4gU0RQLmdlbmVyYXRl
Q2FuZGlkYXRlTGluZShjYW5kaWRhdGUpLnN1YnN0cigyKTsKK30KKworZnVuY3Rpb24gcGFyc2VD
YW5kaWRhdGVMaW5lKGNhbmRpZGF0ZUxpbmUpIHsKKyAgICB2YXIgbWRlc2MgPSBTRFAucGFyc2Uo
Im09YXBwbGljYXRpb24gMCBOT05FXHJcbmE9IiArIGNhbmRpZGF0ZUxpbmUgKyAiXHJcbiIpLm1l
ZGlhRGVzY3JpcHRpb25zWzBdOworICAgIGlmICghbWRlc2MuaWNlKQorICAgICAgICByZXR1cm4g
IlBhcnNlRXJyb3IiOworCisgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1kZXNjLmljZS5jYW5k
aWRhdGVzWzBdKTsKK30KKworaWYgKHR5cGVvZihtb2R1bGUpICE9ICJ1bmRlZmluZWQiICYmIHR5
cGVvZihleHBvcnRzKSAhPSAidW5kZWZpbmVkIikKKyAgICBtb2R1bGUuZXhwb3J0cyA9IFNEUDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggN2QxMjZiNS4uYzNmZjExZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTQ0LDYgKzQ0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5k
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy94MTEiCisgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL21lZGlhc3RyZWFtL2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
bmV0d29yay9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIK
QEAgLTE1Miw2ICsxNTMsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAogCisgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNw
cAorCiAgICAgcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAK
IAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAu
Y3BwCkBAIC0yNDYsNiArMjQ5LDkgQEAgc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTCiAK
IHNldChXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBUU19ERVBFTkRFTkNJRVMgJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCkKIAorc2V0KFdlYkNvcmVfU0RQX1BS
T0NFU1NPUl9TQ1JJUFRTICR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpz
KQorc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UuY3BwKQorCiBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICR7QVRLX0xJQlJB
UklFU30KICAgICAke0NBSVJPX0xJQlJBUklFU30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDU0ZWI0Li5lYmQ4ZjYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yNDM2LDYgKzI0MzYsMTIgQEAKIAkJNUUyQzQzNzQxQkNGMEQ3NTAwMDFFMkJDIC8qIEpTUlRD
UnRwU2VuZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RTJDNDM3MDFCQ0YwRDY5MDAwMUUyQkMgLyogSlNSVENSdHBTZW5kZXIuaCAqLzsgfTsKIAkJ
NUUyQzQzN0IxQkNGOUE1NzAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc2MUJD
RjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUUyQzQzN0MxQkNGOUE4NDAw
MDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc5MUJDRjlBMEIwMDAx
RTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUVBM0Q2REYxQzg1OUQ3RjAw
MzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlh
RW5kcG9pbnQuaCAqLzsgfTsKKwkJNUVBM0Q2RTAxQzg1OUQ4NDAwMzAwQkJCIC8qIE1vY2tNZWRp
YUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi87
IH07CisJCTVFQTNENkUzMUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTExQzg1OURB
QTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi87IH07CisJCTVFQTNENkU0MUM4NTlEQzEw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
aCAqLzsgfTsKKwkJNUVBM0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZS5jcHAgKi87IH07CisJCTVFQTNENkU4MUM4NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291
cmNlLmggKi87IH07CiAJCTVFQTcyNUQyMUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1
Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5jcHAgKi87IH07CiAJCTVFQTcyNUQz
MUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNFMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRp
YURldmljZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1RUE3MjVENTFBQ0FCRDU3MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNB
MUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwICovOyB9OwpAQCAt
MTAwMzQsNiArMTAwNDAsMTIgQEAKIAkJNUUyQzQzNzYxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1Bl
ZXJDb25uZWN0aW9uQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RTJDNDM3ODFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNC
dWlsdGlucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENQZWVy
Q29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUUyQzQzNzkxQkNGOUEwQjAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDUGVlckNv
bm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1RUEzRDZERDFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja01lZGlhRW5kcG9pbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIgLyog
TW9ja01lZGlhRW5kcG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9j
a01lZGlhRW5kcG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2RTEx
Qzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTRFBQcm9jZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1RUEzRDZFMjFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNEUFByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1RUEzRDZFNTFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1RUEzRDZFNjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJvY2Vzc29yU2NyaXB0
UmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0ExQUNBQkNC
NTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDQjFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9y
TWVkaWFEZXZpY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRv
ck1lZGlhRGV2aWNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RUE3MjVDQzFB
Q0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU0ODUsNiArMTU0OTcsOCBAQAogCQkJCTVFMkM0MzY0MUJDRUUzNzIwMDAx
RTJCQyAvKiBSVENUcmFja0V2ZW50LmNwcCAqLywKIAkJCQk1RTJDNDM2NTFCQ0VFMzcyMDAwMUUy
QkMgLyogUlRDVHJhY2tFdmVudC5oICovLAogCQkJCTVFMkM0MzY2MUJDRUUzNzIwMDAxRTJCQyAv
KiBSVENUcmFja0V2ZW50LmlkbCAqLywKKwkJCQk1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyog
U0RQUHJvY2Vzc29yLmNwcCAqLywKKwkJCQk1RUEzRDZFMjFDODU5REFBMDAzMDBCQkIgLyogU0RQ
UHJvY2Vzc29yLmggKi8sCiAJCQkJMDc2MzA2RDQxN0UxNDlDRjAwNUE3QzRFIC8qIFNvdXJjZUlu
Zm8uY3BwICovLAogCQkJCTA3NjMwNkQ1MTdFMTQ5Q0YwMDVBN0M0RSAvKiBTb3VyY2VJbmZvLmgg
Ki8sCiAJCQkJMDc2MzA2RDYxN0UxNDlDRjAwNUE3QzRFIC8qIFNvdXJjZUluZm8uaWRsICovLApA
QCAtMTU1NDYsNiArMTU1NjAsOCBAQAogCQkJCTA3MjIxQkFFMTdDRjBBRDQwMDg0OEU1MSAvKiBS
VENTdGF0c1JlcXVlc3QuaCAqLywKIAkJCQkwNzIyMUJBRjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRD
U3RhdHNSZXNwb25zZUJhc2UuaCAqLywKIAkJCQkwNzIyMUJCMDE3Q0YwQUQ0MDA4NDhFNTEgLyog
UlRDVm9pZFJlcXVlc3QuaCAqLywKKwkJCQk1RUEzRDZFNTFDODVBOUMzMDAzMDBCQkIgLyogU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovLAorCQkJCTVFQTNENkU2MUM4NUE5QzMwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovLAogCQkJCTA3MEU4MUQwMUJG
Mjc2NTYwMDFGREE0OCAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IG1lZGlhc3RyZWFtOwpAQCAtMTc1MzIsNiArMTc1NDgsOCBAQAogCQkJCTA3
N0I2NDE1MUI5NUY3MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAog
CQkJCTA3N0I2NDEwMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
TW9jay5jcHAgKi8sCiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJh
Y2tUYXJnZXRQaWNrZXJNb2NrLmggKi8sCisJCQkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8q
IE1vY2tNZWRpYUVuZHBvaW50LmNwcCAqLywKKwkJCQk1RUEzRDZERTFDODU5RDUzMDAzMDBCQkIg
LyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLywKIAkJCQkwN0Q2QTRGMTFCRUQ1Rjg4MDAxNzQxNDYg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAogCQkJCTA3RDZBNEYyMUJFRDVGODgw
MDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5oICovLAogCQkJCTA3RDZBNEVEMUJF
Q0YyRDIwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCkBAIC0yNTcx
NCw2ICsyNTczMiw3IEBACiAJCQkJODVFNzExQTYwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxE
b2N1bWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NURGMkVFRDBBQTM4N0NCMDBB
RDY0QzUgLyogRE9NSFRNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMUE3MEFD
NUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1RUEzRDZERjFDODU5RDdGMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1NDA3NTZBMEFENkNCRjkwMDYyMEM1NyAvKiBET01IVE1MRW1iZWRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTUyNDdEMDBBRDg1MEI4MDAxMjA5M0IgLyog
RE9NSFRNTEVtYmVkRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNENE
RjBBQTY4NjFCMDA4ODA1MkQgLyogRE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNTkwOSw2ICsyNTkyOCw3IEBACiAJCQkJMzFDMEZGNEMwRTRDRUZERDAwN0Q2RkU1
IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZG
NEUwRTRDRUZERDAwN0Q2RkU1IC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NUM3RjVFNzBBQUZCQUZCMDA0MDE0REQgLyogRE9NV2hlZWxF
dmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVBM0Q2RTQxQzg1OURDMTAwMzAwQkJCIC8qIFNE
UFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MTI5OTAxQzYwMUFDQzAwNTlFNzE0
IC8qIFNjb3BlR3VhcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OTg5REQxMEFDQzhCQkQwMEEw
QkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDNC
OTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0
MDcsNiArMjc0MjcsNyBAQAogCQkJCUNENUU1QjVGMUExNUNFNTQwMDBDNjA5RSAvKiBQYWdlQ29u
ZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MjA4OTMxNDdEMzVGOTAwMTBCQzA2
IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCURBRUQyMDMxMTZGMjQ0
NDgwMDcwRUMwRiAvKiBQYWdlQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVB
M0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUEyQUYwQzE4Mjk3MzQzMDBERTE3MjkgLyogUGFnZURlYnVnZ2Fi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0MkREMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdl
RGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdF
RTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDM1Niw2ICszMDM3Nyw3IEBA
CiAJCQkJQkM0OTE4QzYwQkZFQTA1MDAwOUQ2MzE2IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDdBNTBDNkMwRjM2MDA5MjBCRkYgLyogSlNIVE1MRnJh
bWVFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTI2RjgwMEMwNTUyNDcw
MDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0Q0MUFCQjBDMDYwREU4MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU3QjE0MEExOUQ2MDYwMDdGQjhDNSAv
KiBKU0hUTUxIZWFkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUEyRTBBMUNE
QUI0MDBCNDJCMjUgLyogSlNIVE1MSGVhZGluZ0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMTQxNiw2ICszMTQzOCw3IEBACiAJCQkJNUUyQzQzNjcxQkNFRTM3NzAwMDFFMkJDIC8qIFJU
Q1RyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTgyNEFCQTIxQUU4MTExNjAwOTA3
NEI3IC8qIFJ1YnlFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU4MjRBQkE2MUFFODEz
ODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVB
M0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3OUJBREExMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVy
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzlCQURBMzE2MUU3RjNGMDBDMkU2NTIgLyogUnVs
ZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDc2QkI4NDE5NDU2RjgxMDBDRkQyOUEgLyog
UnVuTG9vcE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE0NjAsNiArMzE0ODMsNyBA
QAogCQkJCTBGQzRFNDBFMTg3RjgyRTEwMDQ1ODgyQyAvKiBTY3JvbGxpbmdDb29yZGluYXRvcklP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3Jv
bGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQzM4QkZFMTY0NDcz
QzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZFQTNFN0MxOTFCMkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTg4RUJEMTZB
OEQxQkQwMEY5OTk4NCAvKiBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzMUNCRDBDMTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdT
dGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCmluZGV4IDAxZmI2YzcuLjJjMzg2
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
RW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhRW5kcG9pbnQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBv
aW50KE1lZGlhRW5kcG9pbnRDbGllbnQqKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVu
ZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKQogewogICAg
IHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCmluZGV4IDU3MDY4OGQuLjYxMjk3OGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgK
QEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGll
bnQoKSB7IH0KIH07CiAKLXR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgq
Q3JlYXRlTWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCopOwordHlwZWRlZiBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gKCpDcmVhdGVNZWRpYUVuZHBvaW50KShNZWRpYUVu
ZHBvaW50Q2xpZW50Jik7CiAKIGNsYXNzIE1lZGlhRW5kcG9pbnQgewogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3Jp
cHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURl
c2NyaXB0aW9uLmgKaW5kZXggYWM2YzZkNC4uMWMxMzg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5o
CkBAIC0xNTAsMjAgKzE1MCwyMCBAQCBwcml2YXRlOgogICAgIFBlZXJNZWRpYURlc2NyaXB0aW9u
KCkgeyB9CiAKICAgICBTdHJpbmcgbV90eXBlOwotICAgIHVuc2lnbmVkIHNob3J0IG1fcG9ydCB7
IDAgfTsKLSAgICBTdHJpbmcgbV9hZGRyZXNzOwotICAgIFN0cmluZyBtX21vZGU7CisgICAgdW5z
aWduZWQgc2hvcnQgbV9wb3J0IHsgOSB9OworICAgIFN0cmluZyBtX2FkZHJlc3MgeyAiMC4wLjAu
MCIgfTsKKyAgICBTdHJpbmcgbV9tb2RlIHsgInNlbmRyZWN2IiB9OwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxNZWRpYVBheWxvYWQ+PiBtX3BheWxvYWRzOwogCi0gICAgYm9vbCBtX3J0Y3BNdXggeyBm
YWxzZSB9OworICAgIGJvb2wgbV9ydGNwTXV4IHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX3J0Y3BB
ZGRyZXNzOwogICAgIHVuc2lnbmVkIHNob3J0IG1fcnRjcFBvcnQgeyAwIH07CiAKICAgICBTdHJp
bmcgbV9tZWRpYVN0cmVhbUlkOwogICAgIFN0cmluZyBtX21lZGlhU3RyZWFtVHJhY2tJZDsKIAot
ICAgIFN0cmluZyBtX2R0bHNTZXR1cDsKKyAgICBTdHJpbmcgbV9kdGxzU2V0dXAgeyAiYWN0cGFz
cyIgfTsKICAgICBTdHJpbmcgbV9kdGxzRmluZ2VycHJpbnRIYXNoRnVuY3Rpb247CiAgICAgU3Ry
aW5nIG1fZHRsc0ZpbmdlcnByaW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiOTVhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
clNjcmlwdFJlc291cmNlLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygp
Cit7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2RjN2M5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU0RQUHJvY2Vzc29y
U2NyaXB0UmVzb3VyY2VfaAorI2RlZmluZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlw
dFJlc291cmNlIHsKKworY29uc3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcoKTsKKworfSAvLyBuYW1l
c3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFNEUFByb2Nl
c3NvclNjcmlwdFJlc291cmNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2VHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI4MDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
dGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24g
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNs
dWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiU0RQUHJvY2Vz
c29yU2NyaXB0cy5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZSB7CisK
K2NvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiBzY3JpcHQgPSBTdHJpbmcoc2RwSmF2YVNjcmlwdCk7CisgICAgcmV0
dXJuIHNjcmlwdDsKK30KKworfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlh
RW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRw
b2ludC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3OTlkNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5k
cG9pbnQuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiTW9ja01lZGlhRW5kcG9pbnQuaCIK
KworI2luY2x1ZGUgIk1lZGlhUGF5bG9hZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGZpbmdlcnByaW50
ID0gIjhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVGOkM1OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUy
OjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4OkREOjhFOkFGOjdCIjsKK3N0YXRpYyBjb25z
dCBjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uID0gInNoYS0yNTYiOworCitzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFFbmRwb2ludD4gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZShNZWRpYUVuZHBvaW50
Q2xpZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBv
aW50PihuZXcgTW9ja01lZGlhRW5kcG9pbnQoY2xpZW50KSk7Cit9CisKK01vY2tNZWRpYUVuZHBv
aW50OjpNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50JiBjbGllbnQpCisgICAg
OiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK01vY2tNZWRpYUVuZHBvaW50Ojp+TW9ja01lZGlh
RW5kcG9pbnQoKQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6
c2V0Q29uZmlndXJhdGlvbihSZWZQdHI8TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24+JiYgY29u
ZmlndXJhdGlvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oY29uZmlndXJhdGlvbik7Cit9CisKK3Zv
aWQgTW9ja01lZGlhRW5kcG9pbnQ6OmdlbmVyYXRlRHRsc0luZm8oKQoreworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3RoaXNdKCkgeworICAgICAgICBtX2NsaWVudC5nb3REdGxzRmluZ2VycHJpbnQo
U3RyaW5nKGZpbmdlcnByaW50KSwgU3RyaW5nKGZpbmdlcnByaW50RnVuY3Rpb24pKTsKKyAgICB9
KTsKK30KKworVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBNb2NrTWVkaWFFbmRwb2ludDo6
Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKQoreworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXls
b2FkPj4gcGF5bG9hZHM7CisKKyAgICBSZWZQdHI8TWVkaWFQYXlsb2FkPiBwYXlsb2FkID0gTWVk
aWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBlKDExMSk7CisgICAgcGF5
bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJPUFVTIik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRl
KDQ4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDaGFubmVscygyKTsKKyAgICBwYXlsb2Fkcy5hcHBl
bmQocGF5bG9hZCk7CisKKyAgICBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAg
ICBwYXlsb2FkLT5zZXRUeXBlKDgpOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiUENN
QSIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRD
aGFubmVscygxKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisKKyAgICBwYXlsb2Fk
ID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBlKDApOworICAg
IHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiUENNVSIpOworICAgIHBheWxvYWQtPnNldENsb2Nr
UmF0ZSg4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDaGFubmVscygxKTsKKyAgICBwYXlsb2Fkcy5h
cHBlbmQocGF5bG9hZCk7CisKKyAgICByZXR1cm4gcGF5bG9hZHM7Cit9CisKK1ZlY3RvcjxSZWZQ
dHI8TWVkaWFQYXlsb2FkPj4gTW9ja01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRWaWRlb1BheWxv
YWRzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IHBheWxvYWRzOworCisg
ICAgUmVmUHRyPE1lZGlhUGF5bG9hZD4gcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7
CisgICAgcGF5bG9hZC0+c2V0VHlwZSgxMDMpOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFt
ZSgiSDI2NCIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg5MDAwMCk7CisgICAgcGF5bG9h
ZC0+c2V0Q2NtZmlyKHRydWUpOworICAgIHBheWxvYWQtPnNldE5hY2twbGkodHJ1ZSk7CisgICAg
cGF5bG9hZC0+YWRkUGFyYW1ldGVyKCJwYWNrZXRpemF0aW9uTW9kZSIsIDEpOworICAgIHBheWxv
YWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0
ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMTAwKTsKKyAgICBwYXlsb2FkLT5zZXRFbmNvZGlu
Z05hbWUoIlZQOCIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg5MDAwMCk7CisgICAgcGF5
bG9hZC0+c2V0Q2NtZmlyKHRydWUpOworICAgIHBheWxvYWQtPnNldE5hY2twbGkodHJ1ZSk7Cisg
ICAgcGF5bG9hZC0+c2V0TmFjayh0cnVlKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7
CisKKyAgICBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5z
ZXRUeXBlKDEyMCk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJSVFgiKTsKKyAgICBw
YXlsb2FkLT5zZXRDbG9ja1JhdGUoOTAwMDApOworICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigi
YXB0IiwgMTAwKTsKKyAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCAyMDApOwor
ICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHJldHVybiBwYXlsb2FkczsKK30K
KworTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVS
ZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIGNv
bmZpZ3VyYXRpb24sIGJvb2wgaXNJbml0aWF0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmZp
Z3VyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7CisKKyAgICByZXR1cm4g
VXBkYXRlUmVzdWx0OjpTdWNjZXNzOworfQorCitNZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQg
TW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVNlbmRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRT
ZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJhdGlvbiwgYm9vbCBpc0luaXRpYXRvcikKK3sK
KyAgICBVTlVTRURfUEFSQU0oY29uZmlndXJhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGlzSW5p
dGlhdG9yKTsKKworICAgIHJldHVybiBVcGRhdGVSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK3ZvaWQg
TW9ja01lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSwgdW5zaWduZWQgbWRlc2NJbmRleCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3Ry
aW5nJiBwYXNzd29yZCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2FuZGlkYXRlKTsKKyAgICBVTlVT
RURfUEFSQU0obWRlc2NJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKHVmcmFnKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFzc3dvcmQpOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpyZXBsYWNl
U2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiBuZXdTb3VyY2UsIHVuc2lnbmVkIG1kZXNj
SW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKG5ld1NvdXJjZSk7CisgICAgVU5VU0VEX1BBUkFN
KG1kZXNjSW5kZXgpOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5k
cG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjMyYmUzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrTWVkaWFFbmRwb2ludF9oCisjZGVm
aW5lIE1vY2tNZWRpYUVuZHBvaW50X2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNp
bmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TW9ja01lZGlhRW5kcG9pbnQgOiBwdWJsaWMgTWVkaWFFbmRwb2ludCB7CitwdWJsaWM6CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVh
dGUoTWVkaWFFbmRwb2ludENsaWVudCYpOworCisgICAgTW9ja01lZGlhRW5kcG9pbnQoTWVkaWFF
bmRwb2ludENsaWVudCYpOworICAgIH5Nb2NrTWVkaWFFbmRwb2ludCgpOworCisgICAgdmlydHVh
bCB2b2lkIHNldENvbmZpZ3VyYXRpb24oUmVmUHRyPE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
PiYmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUR0bHNJbmZvKCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IGdldERlZmF1
bHRBdWRpb1BheWxvYWRzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBWZWN0b3I8UmVmUHRyPE1l
ZGlhUGF5bG9hZD4+IGdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFVwZGF0ZVJlc3VsdCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRSZW1vdGVDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlJiwgdW5zaWdu
ZWQgbWRlc2NJbmRleCwgY29uc3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRp
bWVNZWRpYVNvdXJjZSYsIHVuc2lnbmVkIG1kZXNjSW5kZXgpIG92ZXJyaWRlOworCisgICAgdmly
dHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBNZWRpYUVuZHBvaW50
Q2xpZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNb2NrTWVkaWFFbmRwb2ludF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYTliNTI0ZC4uOTIxYTI5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTc1LDYgKzE3NSw3IEBACiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiTW9ja01lZGlhRW5k
cG9pbnQuaCIKICNpbmNsdWRlICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2lu
Y2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyTW9jay5oIgpAQCAtNDE1LDYgKzQxNiw3IEBAIEludGVybmFsczo6SW50ZXJuYWxzKERv
Y3VtZW50KiBkb2N1bWVudCkKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgc2V0TW9j
a01lZGlhQ2FwdHVyZURldmljZXNFbmFibGVkKHRydWUpOworICAgIGVuYWJsZU1vY2tNZWRpYUVu
ZHBvaW50KCk7CiAgICAgZW5hYmxlTW9ja1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcigpOwogI2Vu
ZGlmCiAKQEAgLTEwMTUsNiArMTAxNywxMSBAQCB2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja1Nw
ZWVjaFN5bnRoZXNpemVyKCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK3Zv
aWQgSW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCgpCit7CisgICAgTWVkaWFFbmRw
b2ludDo6Y3JlYXRlID0gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZTsKK30KKwogdm9pZCBJbnRl
cm5hbHM6OmVuYWJsZU1vY2tSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKQogewogICAgIFJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlID0gUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyTW9j
azo6Y3JlYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggNjdhMDE5My4uMTRh
MWM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0zNjgsNiArMzY4LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHZvaWQgZW5h
YmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKICAgICB2b2lkIGVuYWJsZU1vY2tSVENQZWVyQ29ubmVj
dGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHNldE1vY2tNZWRpYUNhcHR1cmVEZXZpY2VzRW5hYmxl
ZChib29sKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273176</attachid>
            <date>2016-03-07 05:44:51 -0800</date>
            <delta_ts>2016-03-07 06:42:19 -0800</delta_ts>
            <desc>Candidate for landing (rebased)</desc>
            <filename>mepc-create-offer_3.patch</filename>
            <type>text/plain</type>
            <size>106560</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MWIyMDc5Li4wODA5YTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MDcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogSW1wbGVtZW50IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
T2ZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uIGFuZCBKZXIgTm9ibGUu
CisKKyAgICAgICAgVGhlIG91dHB1dCBTRFAgZnJvbSBjcmVhdGVPZmZlcigpIGlzIHByb2Nlc3Nl
ZCBieSB2ZXJpZnlpbmcgYWxsIHZhcmlhYmxlCisgICAgICAgIGlkZW50aWZpZXJzLCBzdWNoIGFz
IHNlc3Npb24gYW5kIHVzZXIgaWQsIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoCisgICAgICAgIHBy
ZWRlZmluZWQgdmFsdWVzIHRvIG1ha2UgdGhlIFNEUCBjb21wYXJhYmxlIHdpdGggYW4gZXhwZWN0
ZWQgcmVzdWx0LgorCisgICAgICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRo
ZSBtYWMgcG9ydCB1bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3Nv
ciBKYXZhU2NyaXB0IHJlc291cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9m
ZmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDE2LTAzLTA3ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtjc3MtZ3JpZF0gQWRkIG1pc3NpbmcgdGVzdCBmb3IgZ3JpZC10ZW1wbGF0
ZSBzaG9ydGhhbmQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXItZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWVlMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LWluc3BlY3Qtb2ZmZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNzYgQEAKK0luc3BlY3QgdGhl
IHJlc3VsdCBvZiBSVENQZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcigpCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIEdvdCBvZmZlcgorPT09IFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiA9PT0KK3R5cGU6IG9mZmVyLCBzZHA6Cit2PTAKK289LSB7c2Vzc2lvbi1pZDpPS30gMCBJ
TiBJUDQgMTI3LjAuMC4xCitzPS0KK3Q9MCAwCithPW1zaWQtc2VtYW50aWM6V01TIHttZWRpYS1z
dHJlYW0taWQ6T0t9CittPWF1ZGlvIDkgVURQL1RMUy9SVFAvU0FWUEYgMTExIDggMAorYz1JTiBJ
UDQgMC4wLjAuMAorYT1ydGNwLW11eAorYT1zZW5kcmVjdgorYT1ydHBtYXA6MTExIE9QVVMvNDgw
MDAvMgorYT1ydHBtYXA6OCBQQ01BLzgwMDAKK2E9cnRwbWFwOjAgUENNVS84MDAwCithPXNzcmM6
e3NzcmM6T0t9IGNuYW1lOntjbmFtZTpPS30KK2E9bXNpZDp7bWVkaWEtc3RyZWFtLWlkOk9LfSB7
bWVkaWEtc3RyZWFtLXRyYWNrLWlkOk9LfQorYT1pY2UtdWZyYWc6e2ljZS11ZnJhZzpPS30KK2E9
aWNlLXB3ZDp7aWNlLXBhc3N3b3JkOk9LfQorYT1maW5nZXJwcmludDpzaGEtMjU2IDhCOjg3OjA5
OjhBOjVEOkMyOkYzOjMzOkVGOkM1OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3
OjQ2OjNCOjFCOkNFOjg0Ojk4OkREOjhFOkFGOjdCCithPXNldHVwOmFjdHBhc3MKKz09PQorCitQ
QVNTIEdvdCBvZmZlcgorPT09IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiA9PT0KK3R5cGU6IG9mZmVy
LCBzZHA6Cit2PTAKK289LSB7c2Vzc2lvbi1pZDpPS30gMSBJTiBJUDQgMTI3LjAuMC4xCitzPS0K
K3Q9MCAwCithPW1zaWQtc2VtYW50aWM6V01TIHttZWRpYS1zdHJlYW0taWQ6T0t9CittPWF1ZGlv
IDkgVURQL1RMUy9SVFAvU0FWUEYgMTExIDggMAorYz1JTiBJUDQgMC4wLjAuMAorYT1ydGNwLW11
eAorYT1zZW5kcmVjdgorYT1ydHBtYXA6MTExIE9QVVMvNDgwMDAvMgorYT1ydHBtYXA6OCBQQ01B
LzgwMDAKK2E9cnRwbWFwOjAgUENNVS84MDAwCithPXNzcmM6e3NzcmM6T0t9IGNuYW1lOntjbmFt
ZTpPS30KK2E9bXNpZDp7bWVkaWEtc3RyZWFtLWlkOk9LfSB7bWVkaWEtc3RyZWFtLXRyYWNrLWlk
Ok9LfQorYT1pY2UtdWZyYWc6e2ljZS11ZnJhZzpPS30KK2E9aWNlLXB3ZDp7aWNlLXBhc3N3b3Jk
Ok9LfQorYT1maW5nZXJwcmludDpzaGEtMjU2IDhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVGOkM1
OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4OkRE
OjhFOkFGOjdCCithPXNldHVwOmFjdHBhc3MKK209dmlkZW8gOSBVRFAvVExTL1JUUC9TQVZQRiAx
MDMgMTAwIDEyMAorYz1JTiBJUDQgMC4wLjAuMAorYT1ydGNwLW11eAorYT1zZW5kcmVjdgorYT1y
dHBtYXA6MTAzIEgyNjQvOTAwMDAKK2E9cnRwbWFwOjEwMCBWUDgvOTAwMDAKK2E9cnRwbWFwOjEy
MCBSVFgvOTAwMDAKK2E9Zm10cDoxMDMgcGFja2V0aXphdGlvbi1tb2RlPTEKK2E9Zm10cDoxMjAg
YXB0PTEwMDtydHgtdGltZT0yMDAKK2E9cnRjcC1mYjoxMDAgbmFjaworYT1ydGNwLWZiOjEwMyBu
YWNrIHBsaQorYT1ydGNwLWZiOjEwMCBuYWNrIHBsaQorYT1ydGNwLWZiOjEwMyBjY20gZmlyCith
PXJ0Y3AtZmI6MTAwIGNjbSBmaXIKK2E9c3NyYzp7c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQor
YT1tc2lkOnttZWRpYS1zdHJlYW0taWQ6T0t9IHttZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9Cith
PWljZS11ZnJhZzp7aWNlLXVmcmFnOk9LfQorYT1pY2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9Cith
PWZpbmdlcnByaW50OnNoYS0yNTYgOEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6
ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6
N0IKK2E9c2V0dXA6YWN0cGFzcworPT09CisKK1BBU1MgRW5kIG9mIHByb21pc2UgY2hhaW4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3Bl
Y3Qtb2ZmZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taW5zcGVjdC1vZmZlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJkMWMxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbApAQCAtMCwwICsxLDE0MSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHNj
cmlwdD4KKyAgICAgICAgICAgIHZhciBzdHJlYW07CisgICAgICAgICAgICB2YXIgYXVkaW9UcmFj
azsKKyAgICAgICAgICAgIHZhciB2aWRlb1RyYWNrOworICAgICAgICAgICAgdmFyIG1lZGlhRGVz
Y3JpcHRpb25WYXJpYWJsZXMgPSBbXTsKKworICAgICAgICAgICAgZGVzY3JpcHRpb24oIkluc3Bl
Y3QgdGhlIHJlc3VsdCBvZiBSVENQZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcigpIik7CisKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLnNldFVzZXJNZWRpYVBlcm1pc3Npb24odHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhl
IHRlc3RSdW5uZXIiKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIHBjID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9u
KHtpY2VTZXJ2ZXJzOlt7dXJsczonc3R1bjpmb28uY29tJ31dfSk7CisKKyAgICAgICAgICAgIG5h
dmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgImF1ZGlvIjogdHJ1ZSwgInZpZGVv
IjogdHJ1ZSB9KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHMpIHsKKyAgICAgICAgICAg
ICAgICBzdHJlYW0gPSBzOworICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2sgPSBzdHJlYW0uZ2V0
QXVkaW9UcmFja3MoKVswXTsKKyAgICAgICAgICAgICAgICB2aWRlb1RyYWNrID0gc3RyZWFtLmdl
dFZpZGVvVHJhY2tzKClbMF07CisKKyAgICAgICAgICAgICAgICBwYy5hZGRUcmFjayhhdWRpb1Ry
YWNrLCBzdHJlYW0pOworICAgICAgICAgICAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwor
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChvZmZlcikgeworICAg
ICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkdvdCBvZmZlciIpOworICAgICAgICAgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb25WYXJpYWJsZXMucHVzaCh7ICJ0cmFja0lkIjogYXVkaW9UcmFjay5pZCwg
InN0cmVhbUlkIjogc3RyZWFtLmlkIH0pOworICAgICAgICAgICAgICAgIHByaW50Q29tcGFyYWJs
ZVNlc3Npb25EZXNjcmlwdGlvbihvZmZlciwgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyk7CisK
KyAgICAgICAgICAgICAgICBwYy5hZGRUcmFjayh2aWRlb1RyYWNrLCBzdHJlYW0pOworICAgICAg
ICAgICAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOworICAgICAgICAgICAgfSkKKyAgICAg
ICAgICAgIC50aGVuKGZ1bmN0aW9uIChvZmZlcikgeworICAgICAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIkdvdCBvZmZlciIpOworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb25WYXJpYWJs
ZXMucHVzaCh7ICJ0cmFja0lkIjogdmlkZW9UcmFjay5pZCwgInN0cmVhbUlkIjogc3RyZWFtLmlk
IH0pOworICAgICAgICAgICAgICAgIHByaW50Q29tcGFyYWJsZVNlc3Npb25EZXNjcmlwdGlvbihv
ZmZlciwgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyk7CisKKyAgICAgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJFbmQgb2YgcHJvbWlzZSBjaGFpbiIpOworICAgICAgICAgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJy
b3IpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJFcnJvciBjYXVnaHQgaW4gcHJvbWlz
ZSBjaGFpbjogIiArIGVycm9yKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBWYXJpYWJsZSBmaWVsZHMgKGUuZy4gZ2Vu
ZXJhdGVkIGlkcykgYXJlIHZlcmlmaWVkIGFuZCByZXBsYWNlZCB3aXRoIHByZWRpY3RhYmxlCisg
ICAgICAgICAgICAvLyBsYWJsZXMuIFRoZSByZXN1bHQgY2FuIGJlIGNvbXBhcmVkIHdpdGggYSBw
cmVkZWZpbmVkIGV4cGVjdGVkIG91dHB1dC4KKyAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50Q29t
cGFyYWJsZVNlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24sIG1kZXNjVmFyaWFi
bGVzKSB7CisgICAgICAgICAgICAgICAgZGVidWcoIj09PSBSVENTZXNzaW9uRGVzY3JpcHRpb24g
PT09Iik7CisgICAgICAgICAgICAgICAgZGVidWcoInR5cGU6ICIgKyBzZXNzaW9uRGVzY3JpcHRp
b24udHlwZSArICIsIHNkcDoiKTsKKworICAgICAgICAgICAgICAgIHZhciBzZHAgPSBzZXNzaW9u
RGVzY3JpcHRpb24uc2RwOworCisgICAgICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgIm9saW5lIjogIl5vPSgtKSAoW1xcZF0rKSAuKiQiLAorICAgICAgICAg
ICAgICAgICAgICAibXNpZHNlbWFudGljIjogIl5hPW1zaWQtc2VtYW50aWM6ICpXTVMgLiokIiwK
KyAgICAgICAgICAgICAgICAgICAgIm1saW5lIjogIl5tPS4qJCIsCisgICAgICAgICAgICAgICAg
ICAgICJjbmFtZSI6ICJeYT1zc3JjOihcXGQrKSBjbmFtZTooW1xcdysvXFwtQFxcLlxce1xcfV0r
KS4qJCIsCisgICAgICAgICAgICAgICAgICAgICJtc2lkIjogIl5hPShzc3JjOlxcZCsgKT9tc2lk
OihbXFx3Ky9cXC09XSspICsoW1xcdysvXFwtPV0rKS4qJCIsCisgICAgICAgICAgICAgICAgICAg
ICJpY2V1ZnJhZyI6ICJeYT1pY2UtdWZyYWc6KFtcXHcrL10qKS4qJCIsCisgICAgICAgICAgICAg
ICAgICAgICJpY2Vwd2QiOiAiXmE9aWNlLXB3ZDooW1xcdysvXSo9KikuKiQiLAorICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB2YXIgbWRlc2NJbmRleCA9IC0xOworICAgICAg
ICAgICAgICAgIHNkcC5zcGxpdCgiXHJcbiIpLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKGxpbmUsIHJlZ2V4cC5tbGluZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE1lZGlhIGJsb2NrICgiaGVhZGVyIiBsaW5lKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWRlc2NJbmRleCsrOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1kZXNjSW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXNz
aW9uIGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xpbmU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvbGluZSA9IG1hdGNoKGxpbmUsIHJlZ2V4cC5vbGluZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShvbGluZVsyXSwg
dmVyaWZpZWQoInNlc3Npb24taWQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChtYXRjaChsaW5lLCByZWdleHAubXNpZHNlbWFudGljKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1kZXNjVmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHZhcmlh
Ymxlcy5zdHJlYW1JZCwgdmVyaWZpZWQoIm1lZGlhLXN0cmVhbS1pZCIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lZGlhIGJs
b2NrIChjb250ZW50IGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zaWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaWNldWZyYWc7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWNlcHdkOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY25hbWUgPSBtYXRjaChsaW5lLCByZWdleHAuY25h
bWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShj
bmFtZVsxXSwgdmVyaWZpZWQoInNzcmMiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZShjbmFtZVsyXSwgdmVyaWZpZWQoImNuYW1lIikpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zaWQgPSBtYXRjaChsaW5lLCByZWdleHAu
bXNpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNpZFsxXSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtc2lkWzFdLCB2
ZXJpZmllZCgic3NyYyIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YXJp
YWJsZXMgPSBtZGVzY1ZhcmlhYmxlc1ttZGVzY0luZGV4XTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBtZWRpYVN0cmVhbUlkID0gbXNpZFsyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RyZWFtSWRWZXJpZmllZCA9IHZlcmlmaWVkKCJtZWRpYS1zdHJlYW0t
aWQiLCBtZWRpYVN0cmVhbUlkICE9IHZhcmlhYmxlcy5zdHJlYW1JZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtZWRpYVN0cmVhbUlkLCBzdHJlYW1J
ZFZlcmlmaWVkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVN0cmVh
bVRyYWNrSWQgPSBtc2lkWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFj
a0lkVmVyaWZpZWQgPSB2ZXJpZmllZCgibWVkaWEtc3RyZWFtLXRyYWNrLWlkIiwgbWVkaWFTdHJl
YW1UcmFja0lkICE9IHZhcmlhYmxlcy50cmFja0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG1lZGlhU3RyZWFtVHJhY2tJZCwgdHJhY2tJZFZlcmlm
aWVkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpY2V1ZnJhZyA9IG1h
dGNoKGxpbmUsIHJlZ2V4cC5pY2V1ZnJhZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZShpY2V1ZnJhZ1sxXSwgdmVyaWZpZWQoImljZS11ZnJhZyIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGljZXB3ZCA9IG1hdGNoKGxpbmUsIHJl
Z2V4cC5pY2Vwd2QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJl
cGxhY2UoaWNlcHdkWzFdLCB2ZXJpZmllZCgiaWNlLXBhc3N3b3JkIikpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWJ1ZyhsaW5lKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGRlYnVnKCI9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZlcmlmaWVkKG5hbWUsIGlzRmFpbHVyZSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAieyIgKyBuYW1lICsgIjoiICsgKGlzRmFpbHVyZSA/
ICJGQUlMRUQiIDogIk9LIikgKyAifSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1
bmN0aW9uIG1hdGNoKGRhdGEsIHBhdHRlcm4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YS5tYXRjaChuZXcgUmVnRXhwKHBhdHRlcm4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAgICAgd2luZG93LnN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgICA8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDkxOGE4Y2IuLmNjZmJkOTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0
RXhwZWN0YXRpb25zCkBAIC0xNzgsNiArMTc4LDcgQEAgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1zdGF0cy5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXN0YXRzU2VsZWN0b3IuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1z
dGFibGUuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5odG1sCitmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAogCiAjIEFz
c2VydHMgaW4gZGVidWcuCiBbIERlYnVnIF0gZmFzdC9pbWFnZXMvbGFyZ2Utc2l6ZS1pbWFnZS1j
cmFzaC5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDRmZWJjNDkuLmZmZTI5
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05NDAsNiArOTQwLDcgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCiAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1Jlc3BvbnNlLmNwcAogICAgIE1vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDVHJhY2tFdmVudC5jcHAKKyAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NvdXJjZUluZm8uY3BwCiAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAogICAgIE1vZHVsZXMv
bWVkaWFzdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcApAQCAtMjI5Nyw2ICsyMjk4
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50
YXRpb25DbGllbnRNb2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRN
b2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2suY3BwCisgICAg
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlci5jcHAKQEAgLTM1ODMsNiArMzU4NSwyMiBAQCBpZiAoV2ViQ29yZV9VU0VSX0FHRU5U
X1NDUklQVFMpCiAgICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7
V2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQVFNfREVQRU5ERU5DSUVTfSBVc2VyQWdlbnRTY3JpcHRz
RGF0YS5jcHAgVXNlckFnZW50U2NyaXB0cy5oKQogZW5kaWYgKCkKIAoraWYgKFdlYkNvcmVfU0RQ
X1BST0NFU1NPUl9TQ1JJUFRTKQorICAgICMgTmVjZXNzYXJ5IHZhcmlhYmxlczoKKyAgICAjIFdl
YkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTIGNvbnRhaW5pbmcgdGhlIEphdmFTY3JpcHQgc291
cmNlcyBsaXN0CisgICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUU19ERVBFTkRFTkNJ
RVMgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGUgdGhhdCB3aWxsIGxvYWQgdGhlIHNjcmlwdHMg
dG8gYWRkIHRoZSBwcm9wZXIKKyAgICAjICAgZGVwZW5kZW5jeSBhbmQgaGF2aW5nIHRoZW0gYnVp
bHQgYXQgdGhlIHJpZ2h0IG1vbWVudAorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NEUFByb2Nlc3NvclNjcmlw
dHNEYXRhLmNwcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2Ny
aXB0cy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9TY3JpcHRzL21h
a2UtanMtZmlsZS1hcnJheXMucHkKKyAgICAgICAgREVQRU5EUyAke1dlYkNvcmVfU0RQX1BST0NF
U1NPUl9TQ1JJUFRTfQorICAgICAgICBDT01NQU5EICJQWVRIT05QQVRIPSR7SmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVJ9IiAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9TY3Jp
cHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L1NEUFByb2Nlc3NvclNjcmlwdHMuaCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQ
UHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICR7V2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFN9
CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwKQor
ICAgIEFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dlYkNvcmVfU0RQ
X1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFU30gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEu
Y3BwIFNEUFByb2Nlc3NvclNjcmlwdHMuaCkKK2VuZGlmICgpCisKICMgR2VuZXJhdGUgcGx1Zy1p
biByZXNvdXJjZXMKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXNEYXRhLmNwcCAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vUGx1Z0luc1Jlc291cmNlcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE0ZWMz
OS4uNDc5ZTNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxNi0wMy0wNyAgQWRh
bSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgV2Vi
UlRDOiBJbXBsZW1lbnQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlcigp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ4NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24gYW5kIEplciBOb2JsZS4KKworICAg
ICAgICAtIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjogSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiBjcmVhdGVPZmZlcigpCisgICAgICAgIGFkZGVkLiBjcmVhdGVPZmZlcigpIGlzIHNwbGl0
IHVwIGludG8gYSBzeW5jaHJvbm91cyBwYXJ0LCBhbmQgYQorICAgICAgICBzY2hlZHVsZWQgdGFz
ay4gVGhlIHRhc2sgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBpbmZvcm1hdGlvbiwgcmVxdWlyaW5n
CisgICAgICAgIHNvbWUgYW1vdW50IG9mIHdvcmssIHN1Y2ggYXMgdGhlIERUTFMgZmluZ2VycHJp
bnQgaXMgYXZhaWxhYmxlLiBPdGhlcgorICAgICAgICBhc3luYyBBUEkgZnVuY3Rpb25zIHdpbGwg
YWxzbyBmb2xsb3cgdGhpcyBwYXR0ZXJuLgorCisgICAgICAgIC0gU0RQUHJvY2Vzc29yIChhZGRl
ZCk6IFRoZSBTRFBQcm9jZXNzb3JzIHBhcnNlcyBTRFAgdG8gYQorICAgICAgICBNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gb2JqZWN0IGFuZCBnZW5lcmF0ZXMgU0RQIGluIHRoZQor
ICAgICAgICByZXZlcnNlIGRpcmVjdGlvbi4gQW55IFNEUCBzdHJpbmcgaGFuZGxpbmcgaXMgY29u
ZmluZWQgdG8gdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBhbmQgYWxsIGNvbmZpZ3VyYXRpb24g
b2YgdGhlIG1lZGlhIHNlc3Npb24gaXMgZG9uZSB2aWEgdGhlCisgICAgICAgIE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiBvYmplY3QuCisKKyAgICAgICAgVGhlIFNEUCBwYXJzZXIg
YW5kIGdlbmVyYXRvciBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGFuZAorICAg
ICAgICB3b3JrcyB3aXRoIEpTT04gKFNEUC0+SlNPTiwgSlNPTi0+U0RQKS4gVGhlIFNEUFByb2Nl
c3NvciBydW5zIEpTIGluIGFuCisgICAgICAgIGlzb2xhdGVkIHNjb3BlIGFuZCBjb252ZXJ0cyBK
U09OIHRvIGEgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uCisgICAgICAgIG9iamVj
dCBhbmQgdGhlIHJldmVyc2UuIFVzaW5nIEpTT04gc2lnbmFsaW5nIChub25zdGFuZGFyZCkgY2Fu
IGJlCisgICAgICAgIGhlbHBmdWwgZHVyaW5nIGRlYnVnZ2luZy4KKworICAgICAgICAtIE1vY2tN
ZWRpYUVuZHBvaW50IChhZGRlZCk6IE1vY2sgTWVkaWFFbmRwb2ludCBpbXBsZW1lbnRhdGlvbiB3
aXRoCisgICAgICAgIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgb2ZmZXJzLiBEVExTIGluZm9ybWF0
aW9uLCBzdWNoIGFzIGZpbmdlcnByaW50LAorICAgICAgICBpcyBoYXJkIGNvZGVkIHRvIGZhY2ls
aXRhdGUgdGVzdGluZyB3aXRoIGV4cGVjdGVkIHZhbHVlcy4KKworICAgICAgICBUZXN0OiBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAorCisgICAg
ICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRoZSBtYWMgcG9ydCB1bnRpbCBz
dXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBKYXZhU2NyaXB0IHJlc291
cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6cHJvbWlz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6
V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmFu
ZG9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bjo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnN0YXJ0UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlclRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3REdGxz
RmluZ2VycHJpbnQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6U0RQUHJv
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbmRpZGF0ZU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uZmln
dXJhdGlvbkZyb21KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OmljZUNhbmRpZGF0ZUZyb21KU09O
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbmZpZ3VyYXRpb25Ub0pTT04pOgorICAgICAgICAoV2Vi
Q29yZTo6aWNlQ2FuZGlkYXRlVG9KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nv
cjo6Z2VuZXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OnBhcnNlQ2FuZGlkYXRlTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vc2RwLmpzOiBBZGRlZC4KKyAgICAgICAgKG1hdGNoKToKKyAgICAgICAgKGFk
ZERlZmF1bHRzKToKKyAgICAgICAgKGZpbGxUZW1wbGF0ZSk6CisgICAgICAgIChTRFAucGFyc2Up
OgorICAgICAgICAoU0RQLmdlbmVyYXRlKToKKyAgICAgICAgKFNEUC5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUpOgorICAgICAgICAoaGFzQWxsUHJvcGVydGllcyk6CisgICAgICAgIChTRFAudmVyaWZ5
T2JqZWN0KToKKyAgICAgICAgKGdlbmVyYXRlKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAg
KGdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgIChwYXJzZUNhbmRpZGF0ZUxpbmUpOgor
ICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZTo6c2NyaXB0U3Ry
aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpzY3JpcHRTdHJpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01l
ZGlhRW5kcG9pbnQ6Ok1vY2tNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tN
ZWRpYUVuZHBvaW50Ojp+TW9ja01lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OmdlbmVyYXRlRHRsc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRBdWRpb1BheWxvYWRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0VmlkZW9QYXlsb2Fkcyk6CisgICAgICAg
IChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVNlbmRDb25maWd1
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VT
ZW5kU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50Lmg6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6SW50ZXJuYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZW5hYmxlTW9ja01l
ZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisKIDIwMTYtMDMt
MDcgIE1pZ3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbVGV4dHVy
ZU1hcHBlcl0gW0JpdG1hcFRleHR1cmVQb29sXSBVc2UgYXBwcm9wcmlhdGUgbGlzdCBzaXplIHdo
ZW4gZnJlZWluZyB0ZXh0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmlu
ZGV4IGVkNjgzZDQuLjhlZTMwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5j
cHAKQEAgLTM1LDcgKzM1LDE0IEBACiAKICNpbmNsdWRlICJET01FcnJvci5oIgogI2luY2x1ZGUg
IkpTRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2suaCIKKyNpbmNsdWRlICJSVENPZmZlckFuc3dlck9wdGlvbnMuaCIKKyNp
bmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJTRFBQcm9jZXNzb3IuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDE4ICs1NSwxMTQgQEAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbigKIAogQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwogCitjbGFz
cyBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdy
YXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZT4gY3JlYXRlKFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2UmJiBwcm9taXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICphZG9wdFJlZihu
ZXcgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UoV1RGTW92ZShwcm9taXNlKSkpOwor
ICAgIH0KKworICAgIFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UmIHByb21pc2UoKSB7IHJldHVy
biBtX3Byb21pc2U7IH0KKworcHJpdmF0ZToKKyAgICBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9u
UHJvbWlzZShTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKKyAgICAgICAgOiBt
X3Byb21pc2UoV1RGTW92ZShwcm9taXNlKSkKKyAgICB7IH0KKworICAgIFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2UgbV9wcm9taXNlOworfTsKKworc3RhdGljIFN0cmluZyByYW5kb21TdHJpbmco
c2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGNlaWwobGVuZ3RoICog
MyAvIDQpOworICAgIHVuc2lnbmVkIGNoYXIgcmFuZG9tVmFsdWVzW3NpemVdOworICAgIGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJhbmRvbVZhbHVlcywgc2l6ZSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZShyYW5kb21WYWx1ZXMsIHNpemUpOworfQorCiBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihQZWVyQ29ubmVjdGlvbkJh
Y2tlbmRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2Rw
UHJvY2Vzc29yKHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+KG5ldyBTRFBQcm9jZXNzb3Io
bV9jbGllbnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpKQorICAgICwgbV9jbmFtZShyYW5k
b21TdHJpbmcoMTYpKQorICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoNCkpCisgICAgLCBt
X2ljZVBhc3N3b3JkKHJhbmRvbVN0cmluZygyMikpCit7CisgICAgbV9tZWRpYUVuZHBvaW50ID0g
TWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKTsKKyAgICBBU1NFUlQobV9tZWRpYUVuZHBvaW50
KTsKKworICAgIG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERl
ZmF1bHRBdWRpb1BheWxvYWRzKCk7CisgICAgbV9kZWZhdWx0VmlkZW9QYXlsb2FkcyA9IG1fbWVk
aWFFbmRwb2ludC0+Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKTsKKworICAgIC8vIFRhc2tzIChz
ZWUgcnVuVGFzaygpKSB3aWxsIGJlIGRlZmVycmVkIHVudGlsIHdlIGdldCB0aGUgRFRMUyBmaW5n
ZXJwcmludC4KKyAgICBtX21lZGlhRW5kcG9pbnQtPmdlbmVyYXRlRHRsc0luZm8oKTsKK30KKwor
dm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJ1blRhc2soc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHRhc2spCit7CisgICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50LmlzTnVsbCgpKSB7Cisg
ICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQgc2luY2UgaXQgd2ls
bCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KKyAgICAgICAgQVNTRVJUKCFt
X2luaXRpYWxEZWZlcnJlZFRhc2spOworICAgICAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSB0
YXNrOworICAgIH0gZWxzZQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKHRhc2spOworfQorCit2
b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQogewot
ICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOworICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRUYXNr
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKKyAgICBt
X2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwogfQogCiB2b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zLCBTZXNz
aW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3B0
aW9ucyk7CisgICAgY29uc3QgUmVmUHRyPFJUQ09mZmVyT3B0aW9ucz4gcHJvdGVjdGVkT3B0aW9u
cyA9ICZvcHRpb25zOworICAgIFJlZlB0cjxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlz
ZT4gd3JhcHBlZFByb21pc2UgPSBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6Y3Jl
YXRlKFdURk1vdmUocHJvbWlzZSkpOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBydW5U
YXNrKFt0aGlzLCBwcm90ZWN0ZWRPcHRpb25zLCB3cmFwcGVkUHJvbWlzZV0oKSB7CisgICAgICAg
IGNyZWF0ZU9mZmVyVGFzaygqcHJvdGVjdGVkT3B0aW9ucywgd3JhcHBlZFByb21pc2UtPnByb21p
c2UoKSk7CisgICAgfSk7Cit9CiAKLSAgICBwcm9taXNlLnJlamVjdChET01FcnJvcjo6Y3JlYXRl
KCJOb3RTdXBwb3J0ZWRFcnJvciIpKTsKK3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
OjpjcmVhdGVPZmZlclRhc2soUlRDT2ZmZXJPcHRpb25zJiwgU2Vzc2lvbkRlc2NyaXB0aW9uUHJv
bWlzZSYgcHJvbWlzZSkKK3sKKyAgICBBU1NFUlQoIW1fZHRsc0ZpbmdlcnByaW50LmlzRW1wdHko
KSk7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uU25hcHNob3QgPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpOworCisgICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5zZXRTZXNzaW9uVmVyc2lvbiht
X3NkcFNlc3Npb25WZXJzaW9uKyspOworCisgICAgUnRwU2VuZGVyVmVjdG9yIHNlbmRlcnMgPSBt
X2NsaWVudC0+Z2V0U2VuZGVycygpOworCisgICAgLy8gQWRkIG1lZGlhIGRlc2NyaXB0aW9ucyBm
b3Igc2VuZGVycy4KKyAgICBmb3IgKGF1dG8mIHNlbmRlciA6IHNlbmRlcnMpIHsKKyAgICAgICAg
UmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiBtZWRpYURlc2NyaXB0aW9uID0gUGVlck1lZGlh
RGVzY3JpcHRpb246OmNyZWF0ZSgpOworICAgICAgICBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjayA9
IHNlbmRlci0+dHJhY2soKTsKKworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNZWRpYVN0
cmVhbUlkKHNlbmRlci0+bWVkaWFTdHJlYW1JZHMoKVswXSk7CisgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldE1lZGlhU3RyZWFtVHJhY2tJZCh0cmFjay0+aWQoKSk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPnNldFR5cGUodHJhY2stPmtpbmQoKSk7CisgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldFBheWxvYWRzKHRyYWNrLT5raW5kKCkgPT0gImF1ZGlvIiA/IG1fZGVmYXVsdEF1
ZGlvUGF5bG9hZHMgOiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzKTsKKyAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKG1fZHRsc0ZpbmdlcnByaW50
RnVuY3Rpb24pOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXREdGxzRmluZ2VycHJpbnQo
bV9kdGxzRmluZ2VycHJpbnQpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRDbmFtZSht
X2NuYW1lKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+YWRkU3NyYyhjcnlwdG9ncmFwaGlj
YWxseVJhbmRvbU51bWJlcigpKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlVWZy
YWcobV9pY2VVZnJhZyk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVBhc3N3b3Jk
KG1faWNlUGFzc3dvcmQpOworCisgICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVk
aWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgc2RwU3RyaW5nOworICAgIFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2Rw
UHJvY2Vzc29yLT5nZW5lcmF0ZSgqY29uZmlndXJhdGlvblNuYXBzaG90LCBzZHBTdHJpbmcpOwor
ICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHByb21pc2UucmVzb2x2ZShSVENTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZSgib2ZmZXIiLCBzZHBTdHJpbmcpKTsKIH0KIAogdm9pZCBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiBvcHRpb25zLCBTZXNz
aW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKQEAgLTE3OSwxMCArMjgyLDEwIEBAIHZv
aWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3REdGxzRmluZ2VycHJpbnQoY29uc3Qg
U3RyaW5nJiBmaW5nZXJwcmludCwKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmluZ2VycHJp
bnRGdW5jdGlvbik7CisgICAgbV9kdGxzRmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKKyAgICBt
X2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uID0gZmluZ2VycHJpbnRGdW5jdGlvbjsKIAotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgc3RhcnRSdW5uaW5nVGFza3MoKTsKIH0KIAogdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdEljZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0lu
ZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYmIGNhbmRpZGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbi5oCmluZGV4IGY2ZDI1NmEuLmYxNWU3NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmgKQEAgLTQyLDYgKzQyLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFNEUFByb2Nlc3NvcjsKKwordHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPFJUQ1J0cFNlbmRlcj4+IFJ0cFNlbmRlclZlY3RvcjsKIAogY2xhc3MgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uIDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCwg
cHVibGljIE1lZGlhRW5kcG9pbnRDbGllbnQgewogcHVibGljOgpAQCAtNzQsMTEgKzc3LDMzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRl
IHsgbm90SW1wbGVtZW50ZWQoKTsgfTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHJ1blRhc2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tzKCk7CisKKyAg
ICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhSVENPZmZlck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6
U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYpOworCiAgICAgLy8gTWVkaWFFbmRwb2ludENsaWVu
dAogICAgIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQs
IGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgb3ZlcnJpZGU7CiAgICAgdm9pZCBn
b3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNhbmRpZGF0ZT4m
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyh1bnNpZ25lZCBt
ZGVzY0luZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGdvdFJlbW90ZVNvdXJjZSh1bnNpZ25lZCBt
ZGVzY0luZGV4LCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4mJikgb3ZlcnJpZGU7CisKKyAg
ICBQZWVyQ29ubmVjdGlvbkJhY2tlbmRDbGllbnQqIG1fY2xpZW50OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZWRpYUVuZHBvaW50PiBtX21lZGlhRW5kcG9pbnQ7CisKKyAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gbV9pbml0aWFsRGVmZXJyZWRUYXNrOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNE
UFByb2Nlc3Nvcj4gbV9zZHBQcm9jZXNzb3I7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5
bG9hZD4+IG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBh
eWxvYWQ+PiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOworCisgICAgU3RyaW5nIG1fY25hbWU7Cisg
ICAgU3RyaW5nIG1faWNlVWZyYWc7CisgICAgU3RyaW5nIG1faWNlUGFzc3dvcmQ7CisgICAgU3Ry
aW5nIG1fZHRsc0ZpbmdlcnByaW50OworICAgIFN0cmluZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0
aW9uOworICAgIHVuc2lnbmVkIG1fc2RwU2Vzc2lvblZlcnNpb24geyAwIH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzg5ODJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcApAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IlNEUFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgiCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdEdsb2JhbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0T2JqZWN0Lmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBTVFJJTkdfRlVOQ1RJT04obmFtZSkgXAorICAg
IHN0YXRpYyBjb25zdCBTdHJpbmcmIG5hbWUjI1N0cmluZygpIFwKKyAgICB7IFwKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZSB7IEFTQ0lJTGl0ZXJhbCgj
bmFtZSkgfTsgXAorICAgICAgICByZXR1cm4gbmFtZTsgXAorICAgIH0KKworU1RSSU5HX0ZVTkNU
SU9OKGFkZHJlc3MpCitTVFJJTkdfRlVOQ1RJT04oYXB0KQorU1RSSU5HX0ZVTkNUSU9OKGNhbmRp
ZGF0ZXMpCitTVFJJTkdfRlVOQ1RJT04oY2NtZmlyKQorU1RSSU5HX0ZVTkNUSU9OKGNoYW5uZWxz
KQorU1RSSU5HX0ZVTkNUSU9OKGNsb2NrUmF0ZSkKK1NUUklOR19GVU5DVElPTihjbmFtZSkKK1NU
UklOR19GVU5DVElPTihjb21wb25lbnRJZCkKK1NUUklOR19GVU5DVElPTihkdGxzKQorU1RSSU5H
X0ZVTkNUSU9OKGVuY29kaW5nTmFtZSkKK1NUUklOR19GVU5DVElPTihmaW5nZXJwcmludCkKK1NU
UklOR19GVU5DVElPTihmaW5nZXJwcmludEhhc2hGdW5jdGlvbikKK1NUUklOR19GVU5DVElPTihm
b3VuZGF0aW9uKQorU1RSSU5HX0ZVTkNUSU9OKGljZSkKK1NUUklOR19GVU5DVElPTihtZWRpYURl
c2NyaXB0aW9ucykKK1NUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbUlkKQorU1RSSU5HX0ZVTkNU
SU9OKG1lZGlhU3RyZWFtVHJhY2tJZCkKK1NUUklOR19GVU5DVElPTihtb2RlKQorU1RSSU5HX0ZV
TkNUSU9OKG11eCkKK1NUUklOR19GVU5DVElPTihuYWNrKQorU1RSSU5HX0ZVTkNUSU9OKG5hY2tw
bGkpCitTVFJJTkdfRlVOQ1RJT04ob3JpZ2luYXRvcikKK1NUUklOR19GVU5DVElPTihwYWNrZXRp
emF0aW9uTW9kZSkKK1NUUklOR19GVU5DVElPTihwYXJhbWV0ZXJzKQorU1RSSU5HX0ZVTkNUSU9O
KHBhc3N3b3JkKQorU1RSSU5HX0ZVTkNUSU9OKHBheWxvYWRzKQorU1RSSU5HX0ZVTkNUSU9OKHBv
cnQpCitTVFJJTkdfRlVOQ1RJT04ocHJpb3JpdHkpCitTVFJJTkdfRlVOQ1RJT04ocmVsYXRlZEFk
ZHJlc3MpCitTVFJJTkdfRlVOQ1RJT04ocmVsYXRlZFBvcnQpCitTVFJJTkdfRlVOQ1RJT04ocnRj
cCkKK1NUUklOR19GVU5DVElPTihydGNwQWRkcmVzcykKK1NUUklOR19GVU5DVElPTihydGNwUG9y
dCkKK1NUUklOR19GVU5DVElPTihydHhUaW1lKQorU1RSSU5HX0ZVTkNUSU9OKHNlc3Npb25JZCkK
K1NUUklOR19GVU5DVElPTihzZXNzaW9uVmVyc2lvbikKK1NUUklOR19GVU5DVElPTihzZXR1cCkK
K1NUUklOR19GVU5DVElPTihzc3JjcykKK1NUUklOR19GVU5DVElPTih0Y3BUeXBlKQorU1RSSU5H
X0ZVTkNUSU9OKHRyYW5zcG9ydCkKK1NUUklOR19GVU5DVElPTih0eXBlKQorU1RSSU5HX0ZVTkNU
SU9OKHVmcmFnKQorCitTRFBQcm9jZXNzb3I6OlNEUFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQorICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoY29udGV4
dCkKK3sKK30KKworLy8gTm90ZSB0aGF0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biBpcyBhICJmbGF0dGVyIiBzdHJ1Y3R1cmUgdGhhdCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbi4g
Rm9yCisvLyBleGFtcGxlLCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBoYXMgYW4gImljZSIgb2Jq
ZWN0IHdoaWNoIGNvbGxlY3RzIGEgc2V0IG9mIHByb3BlcnRpZXMgdW5kZXIgYQorLy8gbmFtZXNw
YWNlLiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gaGFzICJpY2UiLXByZWZpeGVz
IG9uIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMuCisKK3N0YXRpYyBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3Ry
aW5nKHR5cGVTdHJpbmcoKSwgY2FuZGlkYXRlLnR5cGUoKSk7CisgICAgY2FuZGlkYXRlT2JqZWN0
LT5zZXRTdHJpbmcoZm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbigpKTsK
KyAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIoY29tcG9uZW50SWRTdHJpbmcoKSwgY2Fu
ZGlkYXRlLmNvbXBvbmVudElkKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHRy
YW5zcG9ydFN0cmluZygpLCBjYW5kaWRhdGUudHJhbnNwb3J0KCkpOworICAgIGNhbmRpZGF0ZU9i
amVjdC0+c2V0SW50ZWdlcihwcmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkoKSk7
CisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBjYW5kaWRh
dGUuYWRkcmVzcygpKTsKKyAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocG9ydFN0cmlu
ZygpLCBjYW5kaWRhdGUucG9ydCgpKTsKKyAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlKCkuaXNF
bXB0eSgpKQorICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyh0Y3BUeXBlU3RyaW5n
KCksIGNhbmRpZGF0ZS50Y3BUeXBlKCkpOworICAgIGlmIChjYW5kaWRhdGUudHlwZSgpLmNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1QiKSB7CisgICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3RyaW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRk
cmVzcygpKTsKKyAgICAgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKHJlbGF0ZWRQb3J0
U3RyaW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y2FuZGlkYXRlT2JqZWN0OworfQorCitzdGF0aWMgUmVmUHRyPEljZUNhbmRpZGF0ZT4gY3JlYXRl
Q2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRlT2JqZWN0KQoreworICAg
IFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNhbmRpZGF0ZSA9IEljZUNhbmRpZGF0ZTo6Y3JlYXRlKCk7
CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludFZhbHVlOworCisgICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkp
CisgICAgICAgIGNhbmRpZGF0ZS0+c2V0VHlwZShzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2Fu
ZGlkYXRlT2JqZWN0LmdldFN0cmluZyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
KyAgICAgICAgY2FuZGlkYXRlLT5zZXRGb3VuZGF0aW9uKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0Q29tcG9uZW50SWQoaW50VmFsdWUpOworCisgICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1Zh
bHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRUcmFuc3BvcnQoc3RyaW5nVmFsdWUpOworCisg
ICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZh
bHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRQcmlvcml0eShpbnRWYWx1ZSk7CisKKyAgICBp
ZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVl
KSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGludFZhbHVlKSkKKyAg
ICAgICAgY2FuZGlkYXRlLT5zZXRQb3J0KGludFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVP
YmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICBj
YW5kaWRhdGUtPnNldFRjcFR5cGUoc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9i
amVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAg
ICAgICBjYW5kaWRhdGUtPnNldFJlbGF0ZWRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0UmVsYXRlZFBvcnQoaW50VmFsdWUpOworCisgICAg
cmV0dXJuIGNhbmRpZGF0ZTsKK30KKworc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJpbmcmIGpzb24p
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBpZiAoIUluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIXZhbHVlLT5h
c09iamVjdChvYmplY3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOworICAgIHVuc2lnbmVkIGludFZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZ1Zh
bHVlOworICAgIGJvb2wgYm9vbFZhbHVlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b3JpZ2luYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKG9i
amVjdC0+Z2V0T2JqZWN0KG9yaWdpbmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsK
KyAgICAgICAgaWYgKG9yaWdpbmF0b3JPYmplY3QtPmdldEludGVnZXIoc2Vzc2lvbklkU3RyaW5n
KCksIGxvbmdWYWx1ZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRTZXNzaW9uSWQo
bG9uZ1ZhbHVlKTsKKyAgICAgICAgaWYgKG9yaWdpbmF0b3JPYmplY3QtPmdldEludGVnZXIoc2Vz
c2lvblZlcnNpb25TdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgY29uZmlndXJhdGlv
bi0+c2V0U2Vzc2lvblZlcnNpb24oaW50VmFsdWUpOworICAgIH0KKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBvYmplY3QtPmdldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVkaWFEZXNjcmlwdGlvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25zQXJyYXktPmdldChpKS0+YXNPYmpl
Y3QobWVkaWFEZXNjcmlwdGlvbk9iamVjdCk7CisKKyAgICAgICAgUmVmUHRyPFBlZXJNZWRpYURl
c2NyaXB0aW9uPiBtZWRpYURlc2NyaXB0aW9uID0gUGVlck1lZGlhRGVzY3JpcHRpb246OmNyZWF0
ZSgpOworCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcodHlw
ZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5z
ZXRUeXBlKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVj
dC0+Z2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPnNldFBvcnQoaW50VmFsdWUpOworCisgICAgICAgIGlmIChtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisg
ICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKwor
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1vZGVTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0TW9kZShz
dHJpbmdWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRBcnJheShwYXlsb2Fkc1N0cmluZygpLCBwYXlsb2Fkc0FycmF5KTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcGF5bG9hZHNBcnJheS0+bGVuZ3RoKCk7ICsr
aikgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZHNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcGF5bG9hZHNBcnJheS0+
Z2V0KGopLT5hc09iamVjdChwYXlsb2Fkc09iamVjdCk7CisKKyAgICAgICAgICAgIFJlZlB0cjxN
ZWRpYVBheWxvYWQ+IHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworCisgICAgICAg
ICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIodHlwZVN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0VHlwZShpbnRWYWx1ZSk7CisKKyAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1l
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9h
ZC0+c2V0Q2xvY2tSYXRlKGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2Jq
ZWN0LT5nZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBwYXlsb2FkLT5zZXRDaGFubmVscyhpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChw
YXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihjY21maXJTdHJpbmcoKSwgYm9vbFZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBwYXlsb2FkLT5zZXRDY21maXIoYm9vbFZhbHVlKTsKKworICAgICAgICAg
ICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFuKG5hY2twbGlTdHJpbmcoKSwgYm9vbFZh
bHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXROYWNrcGxpKGJvb2xWYWx1ZSk7CisK
KyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrU3RyaW5nKCks
IGJvb2xWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0TmFjayhib29sVmFsdWUp
OworCisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09i
amVjdC0+Z2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmcoKSwgcGFyYW1ldGVyc09iamVjdCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihwYWNrZXRp
emF0aW9uTW9kZVN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHBheWxv
YWQtPmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRTdHJpbmcoKSwg
aW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoImFw
dCIsIGludFZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHJ0eFRpbWVTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAg
ICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCBpbnRWYWx1ZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPmFkZFBheWxvYWQoV1RGTW92ZShw
YXlsb2FkKSk7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
dGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpKSB7
CisgICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmcoKSwgYm9v
bFZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRSdGNwTXV4KGJv
b2xWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRjcEFk
ZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldFJ0Y3BBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldFJ0Y3BQb3J0KGludFZhbHVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVk
aWFTdHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLT5zZXRNZWRpYVN0cmVhbUlkKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWVk
aWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNZWRpYVN0
cmVhbVRyYWNrSWQoc3RyaW5nVmFsdWUpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGR0bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAo
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVj
dCkpIHsKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldER0
bHNTZXR1cChzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRT
dHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAg
ICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldER0bHNGaW5nZXJwcmludEhhc2hGdW5j
dGlvbihzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJp
bmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb24tPnNldER0bHNGaW5nZXJwcmludChzdHJpbmdWYWx1ZSk7CisgICAgICAg
IH0KKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFy
cmF5KHNzcmNzU3RyaW5nKCksIHNzcmNzQXJyYXkpOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBzc3Jjc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICBzc3Jj
c0FycmF5LT5nZXQoaiktPmFzSW50ZWdlcihpbnRWYWx1ZSk7CisgICAgICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLT5hZGRTc3JjKGludFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
ZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoY25hbWVTdHJpbmcoKSwgc3RyaW5nVmFs
dWUpKQorICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0Q25hbWUoc3RyaW5nVmFsdWUp
OworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRPYmplY3QoaWNlU3RyaW5nKCksIGljZU9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChpY2VP
YmplY3QtPmdldFN0cmluZyh1ZnJhZ1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlVWZyYWcoc3RyaW5nVmFsdWUpOworCisgICAg
ICAgICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVBhc3N3b3Jk
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5k
aWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpY2VP
YmplY3QtPmdldEFycmF5KGNhbmRpZGF0ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbmRpZGF0ZXNBcnJheS0+bGVu
Z3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNh
bmRpZGF0ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCk7CisK
KyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5hZGRJY2VDYW5kaWRhdGUoY3JlYXRl
Q2FuZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGNvbmZpZ3VyYXRpb24tPmFkZE1lZGlhRGVzY3JpcHRpb24oV1RGTW92ZShtZWRp
YURlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247Cit9CisK
K3N0YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVGcm9tSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBp
ZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVj
dDsKKyAgICBpZiAoIXZhbHVlLT5hc09iamVjdChjYW5kaWRhdGVPYmplY3QpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9i
amVjdCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29uZmlndXJhdGlvblRvSlNPTihjb25zdCBNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldERvdWJsZShzZXNz
aW9uSWRTdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSk7CisgICAgb3JpZ2luYXRv
ck9iamVjdC0+c2V0SW50ZWdlcihzZXNzaW9uVmVyc2lvblN0cmluZygpLCBjb25maWd1cmF0aW9u
LnNlc3Npb25WZXJzaW9uKCkpOworICAgIG9iamVjdC0+c2V0T2JqZWN0KG9yaWdpbmF0b3JTdHJp
bmcoKSwgb3JpZ2luYXRvck9iamVjdCk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICBm
b3IgKGNvbnN0IFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4mIG1lZGlhRGVzY3JpcHRpb24g
OiBjb25maWd1cmF0aW9uLm1lZGlhRGVzY3JpcHRpb25zKCkpIHsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVkaWFEZXNjcmlwdGlvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKHR5
cGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+dHlwZSgpKTsKKyAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24t
PnBvcnQoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmFkZHJlc3MoKSk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtb2RlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRp
b24tPm1vZGUoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoUmVmUHRyPE1l
ZGlhUGF5bG9hZD4gcGF5bG9hZCA6IG1lZGlhRGVzY3JpcHRpb24tPnBheWxvYWRzKCkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKHR5cGVTdHJpbmcoKSwgcGF5bG9hZC0+dHlwZSgpKTsKKyAgICAgICAgICAgIHBheWxvYWRP
YmplY3QtPnNldFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgcGF5bG9hZC0+ZW5jb2RpbmdO
YW1lKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihjbG9ja1JhdGVT
dHJpbmcoKSwgcGF5bG9hZC0+Y2xvY2tSYXRlKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVj
dC0+c2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBwYXlsb2FkLT5jaGFubmVscygpKTsKKyAg
ICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4oY2NtZmlyU3RyaW5nKCksIHBheWxv
YWQtPmNjbWZpcigpKTsKKyAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4obmFj
a3BsaVN0cmluZygpLCBwYXlsb2FkLT5uYWNrcGxpKCkpOworICAgICAgICAgICAgcGF5bG9hZE9i
amVjdC0+c2V0Qm9vbGVhbihuYWNrU3RyaW5nKCksIHBheWxvYWQtPm5hY2soKSk7CisKKyAgICAg
ICAgICAgIGlmICghcGF5bG9hZC0+cGFyYW1ldGVycygpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDog
cGF5bG9hZC0+cGFyYW1ldGVycygpLmtleXMoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1l
dGVyc09iamVjdC0+c2V0SW50ZWdlcihuYW1lLCBwYXlsb2FkLT5wYXJhbWV0ZXJzKCkuZ2V0KG5h
bWUpKTsKKworICAgICAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldE9iamVjdChwYXJhbWV0
ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNPYmplY3QpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwYXlsb2Fkc0FycmF5LT5wdXNoT2JqZWN0KHBheWxvYWRPYmplY3QpOworICAgICAgICB9
CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5KHBheWxvYWRzU3RyaW5n
KCksIHBheWxvYWRzQXJyYXkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0
Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBydGNwT2JqZWN0
LT5zZXRCb29sZWFuKG11eFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5ydGNwTXV4KCkpOwor
ICAgICAgICBydGNwT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uLT5ydGNwQWRkcmVzcygpKTsKKyAgICAgICAgcnRjcE9iamVjdC0+c2V0SW50ZWdlcihw
b3J0U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPnJ0Y3BQb3J0KCkpOworICAgICAgICBtZWRp
YURlc2NyaXB0aW9uT2JqZWN0LT5zZXRPYmplY3QocnRjcFN0cmluZygpLCBydGNwT2JqZWN0KTsK
KworICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1J
ZFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5tZWRpYVN0cmVhbUlkKCkpOworICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1UcmFja0lkU3RyaW5n
KCksIG1lZGlhRGVzY3JpcHRpb24tPm1lZGlhU3RyZWFtVHJhY2tJZCgpKTsKKworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKHNldHVwU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24tPmR0bHNTZXR1cCgpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmR0bHNG
aW5nZXJwcmludEhhc2hGdW5jdGlvbigpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KGZpbmdlcnByaW50U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmR0bHNGaW5nZXJwcmludCgp
KTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KGR0bHNTdHJpbmco
KSwgZHRsc09iamVjdCk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoYXV0byBzc3Jj
IDogbWVkaWFEZXNjcmlwdGlvbi0+c3NyY3MoKSkKKyAgICAgICAgICAgIHNzcmNzQXJyYXktPnB1
c2hEb3VibGUoc3NyYyk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5
KHNzcmNzU3RyaW5nKCksIHNzcmNzQXJyYXkpOworCisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25P
YmplY3QtPnNldFN0cmluZyhjbmFtZVN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZSgp
KTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpY2VPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpY2VPYmplY3QtPnNldFN0cmluZyh1ZnJhZ1N0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5pY2VVZnJhZygpKTsKKyAgICAgICAgaWNlT2JqZWN0
LT5zZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+aWNlUGFzc3dv
cmQoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5kaWRhdGVzQXJyYXkg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgZm9yIChSZWZQdHI8SWNlQ2Fu
ZGlkYXRlPiBjYW5kaWRhdGUgOiBtZWRpYURlc2NyaXB0aW9uLT5pY2VDYW5kaWRhdGVzKCkpCisg
ICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPnB1c2hPYmplY3QoY3JlYXRlQ2FuZGlkYXRlT2Jq
ZWN0KCpjYW5kaWRhdGUpKTsKKworICAgICAgICBpY2VPYmplY3QtPnNldEFycmF5KGNhbmRpZGF0
ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9i
amVjdC0+c2V0T2JqZWN0KGljZVN0cmluZygpLCBpY2VPYmplY3QpOworCisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb25zQXJyYXktPnB1c2hPYmplY3QobWVkaWFEZXNjcmlwdGlvbk9iamVjdCk7Cisg
ICAgfQorICAgIG9iamVjdC0+c2V0QXJyYXkobWVkaWFEZXNjcmlwdGlvbnNTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbnNBcnJheSk7CisKKyAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmco
KTsKK30KKworc3RhdGljIFN0cmluZyBpY2VDYW5kaWRhdGVUb0pTT04oY29uc3QgSWNlQ2FuZGlk
YXRlJiBjYW5kaWRhdGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjYW5k
aWRhdGUpLT50b0pTT05TdHJpbmcoKTsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJv
Y2Vzc29yOjpnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24m
IGNvbmZpZ3VyYXRpb24sIFN0cmluZyYgb3V0U2RwU3RyaW5nKSBjb25zdAoreworICAgIFN0cmlu
ZyBzZHBTdHJpbmc7CisgICAgaWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZSIsIGNvbmZpZ3VyYXRp
b25Ub0pTT04oY29uZmlndXJhdGlvbiksIHNkcFN0cmluZykpCisgICAgICAgIHJldHVybiBSZXN1
bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBvdXRTZHBTdHJpbmcgPSBzZHBTdHJpbmc7CisgICAg
cmV0dXJuIFJlc3VsdDo6U3VjY2VzczsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJv
Y2Vzc29yOjpwYXJzZShjb25zdCBTdHJpbmcmIHNkcCwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbj4mIG91dENvbmZpZ3VyYXRpb24pIGNvbnN0Cit7CisgICAgU3RyaW5n
IHNjcmlwdE91dHB1dDsKKyAgICBpZiAoIWNhbGxTY3JpcHQoInBhcnNlIiwgc2RwLCBzY3JpcHRP
dXRwdXQpKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgaWYg
KHNjcmlwdE91dHB1dCA9PSAiUGFyc2VFcnJvciIpCisgICAgICAgIHJldHVybiBSZXN1bHQ6OlBh
cnNlRXJyb3I7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZyb21KU09OKHNjcmlwdE91dHB1dCk7Cisg
ICAgaWYgKCFjb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVy
cm9yOworCisgICAgb3V0Q29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247CisgICAgcmV0dXJu
IFJlc3VsdDo6U3VjY2VzczsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29y
OjpnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIFN0
cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgY2FuZGlkYXRlTGlu
ZTsKKyAgICBpZiAoIWNhbGxTY3JpcHQoImdlbmVyYXRlQ2FuZGlkYXRlTGluZSIsIGljZUNhbmRp
ZGF0ZVRvSlNPTihjYW5kaWRhdGUpLCBjYW5kaWRhdGVMaW5lKSkKKyAgICAgICAgcmV0dXJuIFJl
c3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIG91dENhbmRpZGF0ZUxpbmUgPSBjYW5kaWRhdGVM
aW5lOworICAgIHJldHVybiBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK1NEUFByb2Nlc3Nvcjo6UmVz
dWx0IFNEUFByb2Nlc3Nvcjo6cGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2FuZGlk
YXRlTGluZSwgUmVmUHRyPEljZUNhbmRpZGF0ZT4mIG91dENhbmRpZGF0ZSkgY29uc3QKK3sKKyAg
ICBTdHJpbmcgc2NyaXB0T3V0cHV0OworICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2VDYW5kaWRh
dGVMaW5lIiwgY2FuZGlkYXRlTGluZSwgc2NyaXB0T3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIFJl
c3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIGlmIChzY3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJy
b3IiKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9yOworCisgICAgUmVmUHRyPElj
ZUNhbmRpZGF0ZT4gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04oc2NyaXB0T3V0cHV0
KTsKKyAgICBpZiAoIWNhbmRpZGF0ZSkKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxF
cnJvcjsKKworICAgIG91dENhbmRpZGF0ZSA9IGNhbmRpZGF0ZTsKKyAgICByZXR1cm4gUmVzdWx0
OjpTdWNjZXNzOworfQorCitib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1
bHQpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1l
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9pc29sYXRlZFdvcmxkKQor
ICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSk7CisKKyAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9s
bGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENv
bnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICBKU0M6OkpTVmFsdWUgcHJvYmVGdW5jdGlvblZhbHVl
ID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJnZW5lcmF0ZSIpKTsKKyAgICBpZiAoIXByb2JlRnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKKyAgICAgICAgVVJMIHNjcmlwdFVSTDsKKyAgICAgICAgc2NyaXB0Q29udHJvbGxlci5l
dmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZTo6c2NyaXB0U3RyaW5nKCksIHNjcmlwdFVSTCksICptX2lzb2xhdGVkV29ybGQpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlvbk5hbWUpKTsKKyAgICBp
ZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxs
RGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGVOb25lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Cisg
ICAgYXJnTGlzdC5hcHBlbmQoSlNDOjpqc1N0cmluZyhleGVjLCBhcmd1bWVudCkpOworCisgICAg
SlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgeworICAgICAgICBMT0dfRVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcg
aW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlvbk5hbWUuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKCFyZXN1bHQuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
b3V0UmVzdWx0ID0gcmVzdWx0LmdldFN0cmluZyhleGVjKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJv
Y2Vzc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjQxNWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nv
ci5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTRFBQcm9jZXNzb3JfaAorI2RlZmlu
ZSBTRFBQcm9jZXNzb3JfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUg
IkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgi
CisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdyYXBwZXJXb3JsZDsKK2NsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIFNEUFByb2Nlc3NvciA6IHB1YmxpYyBDb250ZXh0RGVz
dHJ1Y3Rpb25PYnNlcnZlciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBSZXN1bHQgeworICAg
ICAgICBTdWNjZXNzID0gMSwKKyAgICAgICAgSW50ZXJuYWxFcnJvciA9IDIsCisgICAgICAgIFBh
cnNlRXJyb3IgPSAzCisgICAgfTsKKworICAgIFNEUFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CisKKyAgICBSZXN1bHQgZ2VuZXJhdGUoY29uc3QgTWVkaWFFbmRwb2ludFNlc3Np
b25Db25maWd1cmF0aW9uJiwgU3RyaW5nJiBvdXRTZHBTdHJpbmcpIGNvbnN0OworICAgIFJlc3Vs
dCBwYXJzZShjb25zdCBTdHJpbmcmIHNkcCwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbj4mKSBjb25zdDsKKworICAgIFJlc3VsdCBnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUo
Y29uc3QgSWNlQ2FuZGlkYXRlJiwgU3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdDsKKyAg
ICBSZXN1bHQgcGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlTGluZSwg
UmVmUHRyPEljZUNhbmRpZGF0ZT4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGNhbGxT
Y3JpcHQoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQs
IFN0cmluZyYgb3V0UmVzdWx0KSBjb25zdDsKKworICAgIG11dGFibGUgUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gbV9pc29sYXRlZFdvcmxkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIFNEUFByb2Nlc3Nv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5q
cyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZmM4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcwpAQCAtMCwwICsxLDU5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisidXNlIHN0cmljdCI7CisK
K2lmICh0eXBlb2YoU0RQKSA9PSAidW5kZWZpbmVkIikKKyAgICB2YXIgU0RQID0ge307CisKKyhm
dW5jdGlvbiAoKSB7CisgICAgdmFyIHJlZ2V4cHMgPSB7CisgICAgICAgICJ2bGluZSI6ICJedj0o
W1xcZF0rKS4qJCIsCisgICAgICAgICJvbGluZSI6ICJebz0oW1xcd1xcLUBcXC5dKykgKFtcXGRd
KykgKFtcXGRdKykgSU4gKElQWzQ2XSkgKFtcXGRcXC5hLWZcXDpdKykuKiQiLAorICAgICAgICAi
c2xpbmUiOiAiXnM9KC4qKSQiLAorICAgICAgICAidGxpbmUiOiAiXnQ9KFtcXGRdKykgKFtcXGRd
KykuKiQiLAorICAgICAgICAiY2xpbmUiOiAiXmM9SU4gKElQWzQ2XSkgKFtcXGRcXC5hLWZcXDpd
KykuKiQiLAorICAgICAgICAibXNpZHNlbWFudGljIjogIl5hPW1zaWQtc2VtYW50aWM6ICpXTVMg
LiokIiwKKyAgICAgICAgIm1ibG9jayI6ICJebT0oYXVkaW98dmlkZW98YXBwbGljYXRpb24pIChb
XFxkXSspIChbQS1aL10rKShbXFxkIF0qKSRcXHI/XFxuIiwKKyAgICAgICAgIm1vZGUiOiAiXmE9
KHNlbmRyZWN2fHNlbmRvbmx5fHJlY3Zvbmx5fGluYWN0aXZlKS4qJCIsCisgICAgICAgICJydHBt
YXAiOiAiXmE9cnRwbWFwOiR7dHlwZX0gKFtcXHdcXC1dKykvKFtcXGRdKykvPyhbXFxkXSspPy4q
JCIsCisgICAgICAgICJmbXRwIjogIl5hPWZtdHA6JHt0eXBlfSAoW1xcd1xcLT07XSspLiokIiwK
KyAgICAgICAgInBhcmFtIjogIihbXFx3XFwtXSspPShbXFx3XFwtXSspOz8iLAorICAgICAgICAi
bmFjayI6ICJeYT1ydGNwLWZiOiR7dHlwZX0gbmFjayQiLAorICAgICAgICAibmFja3BsaSI6ICJe
YT1ydGNwLWZiOiR7dHlwZX0gbmFjayBwbGkkIiwKKyAgICAgICAgImNjbWZpciI6ICJeYT1ydGNw
LWZiOiR7dHlwZX0gY2NtIGZpciQiLAorICAgICAgICAiZXJpY3NjcmVhbSI6ICJeYT1ydGNwLWZi
OiR7dHlwZX0gZXJpY3NjcmVhbSQiLAorICAgICAgICAicnRjcCI6ICJeYT1ydGNwOihbXFxkXSsp
KCBJTiAoSVBbNDZdKSAoW1xcZFxcLmEtZlxcOl0rKSk/LiokIiwKKyAgICAgICAgInJ0Y3BtdXgi
OiAiXmE9cnRjcC1tdXguKiQiLAorICAgICAgICAiY25hbWUiOiAiXmE9c3NyYzooXFxkKykgY25h
bWU6KFtcXHcrL1xcLUBcXC5cXHtcXH1dKykuKiQiLAorICAgICAgICAibXNpZCI6ICJeYT0oc3Ny
YzpcXGQrICk/bXNpZDooW1xcdysvXFwtPV0rKSArKFtcXHcrL1xcLT1dKykuKiQiLAorICAgICAg
ICAidWZyYWciOiAiXmE9aWNlLXVmcmFnOihbXFx3Ky9dKikuKiQiLAorICAgICAgICAicHdkIjog
Il5hPWljZS1wd2Q6KFtcXHcrL10qKS4qJCIsCisgICAgICAgICJjYW5kaWRhdGUiOiAiXmE9Y2Fu
ZGlkYXRlOihcXGQrKSAoXFxkKSAoVURQfFRDUCkgKFtcXGRcXC5dKikgKFtcXGRcXC5hLWZcXDpd
KikgKFxcZCopIiArCisgICAgICAgICAgICAiIHR5cCAoW2Etel0qKSggcmFkZHIgKFtcXGRcXC5h
LWZcXDpdKikgcnBvcnQgKFxcZCopKT8iICsKKyAgICAgICAgICAgICIoIHRjcHR5cGUgKGFjdGl2
ZXxwYXNzaXZlfHNvKSk/LiokIiwKKyAgICAgICAgImZpbmdlcnByaW50IjogIl5hPWZpbmdlcnBy
aW50OihzaGEtMXxzaGEtMjU2KSAoW0EtRmEtZlxcZFw6XSspLiokIiwKKyAgICAgICAgInNldHVw
IjogIl5hPXNldHVwOihhY3RwYXNzfGFjdGl2ZXxwYXNzaXZlKS4qJCIsCisgICAgICAgICJzY3Rw
bWFwIjogIl5hPXNjdHBtYXA6JHtwb3J0fSAoW1xcd1xcLV0rKSggW1xcZF0rKT8uKiQiCisgICAg
fTsKKworICAgIHZhciB0ZW1wbGF0ZXMgPSB7CisgICAgICAgICJzZHAiOgorICAgICAgICAgICAg
InY9JHt2ZXJzaW9ufVxyXG4iICsKKyAgICAgICAgICAgICJvPSR7dXNlcm5hbWV9ICR7c2Vzc2lv
bklkfSAke3Nlc3Npb25WZXJzaW9ufSAke25ldFR5cGV9ICR7YWRkcmVzc1R5cGV9ICR7YWRkcmVz
c31cclxuIiArCisgICAgICAgICAgICAicz0ke3Nlc3Npb25OYW1lfVxyXG4iICsKKyAgICAgICAg
ICAgICJ0PSR7c3RhcnRUaW1lfSAke3N0b3BUaW1lfVxyXG4iICsKKyAgICAgICAgICAgICIke21z
aWRzZW1hbnRpY0xpbmV9IiwKKworICAgICAgICAibXNpZHNlbWFudGljIjogImE9bXNpZC1zZW1h
bnRpYzpXTVMgJHttZWRpYVN0cmVhbUlkc31cclxuIiwKKworICAgICAgICAibWJsb2NrIjoKKyAg
ICAgICAgICAgICJtPSR7dHlwZX0gJHtwb3J0fSAke3Byb3RvY29sfSAke2ZtdH1cclxuIiArCisg
ICAgICAgICAgICAiYz0ke25ldFR5cGV9ICR7YWRkcmVzc1R5cGV9ICR7YWRkcmVzc31cclxuIiAr
CisgICAgICAgICAgICAiJHtydGNwTGluZX0iICsKKyAgICAgICAgICAgICIke3J0Y3BNdXhMaW5l
fSIgKworICAgICAgICAgICAgImE9JHttb2RlfVxyXG4iICsKKyAgICAgICAgICAgICIke3J0cE1h
cExpbmVzfSIgKworICAgICAgICAgICAgIiR7Zm10cExpbmVzfSIgKworICAgICAgICAgICAgIiR7
bmFja0xpbmVzfSIgKworICAgICAgICAgICAgIiR7bmFja3BsaUxpbmVzfSIgKworICAgICAgICAg
ICAgIiR7Y2NtZmlyTGluZXN9IiArCisgICAgICAgICAgICAiJHtlcmljU2NyZWFtTGluZXN9IiAr
CisgICAgICAgICAgICAiJHtjbmFtZUxpbmVzfSIgKworICAgICAgICAgICAgIiR7bXNpZExpbmVz
fSIgKworICAgICAgICAgICAgIiR7aWNlQ3JlZGVudGlhbExpbmVzfSIgKworICAgICAgICAgICAg
IiR7Y2FuZGlkYXRlTGluZXN9IiArCisgICAgICAgICAgICAiJHtkdGxzRmluZ2VycHJpbnRMaW5l
fSIgKworICAgICAgICAgICAgIiR7ZHRsc1NldHVwTGluZX0iICsKKyAgICAgICAgICAgICIke3Nj
dHBtYXBMaW5lfSIsCisKKyAgICAgICAgInJ0Y3AiOiAiYT1ydGNwOiR7cG9ydH0ke1sgXW5ldFR5
cGV9JHtbIF1hZGRyZXNzVHlwZX0ke1sgXWFkZHJlc3N9XHJcbiIsCisgICAgICAgICJydGNwTXV4
IjogImE9cnRjcC1tdXhcclxuIiwKKworICAgICAgICAicnRwTWFwIjogImE9cnRwbWFwOiR7dHlw
ZX0gJHtlbmNvZGluZ05hbWV9LyR7Y2xvY2tSYXRlfSR7Wy9dY2hhbm5lbHN9XHJcbiIsCisgICAg
ICAgICJmbXRwIjogImE9Zm10cDoke3R5cGV9ICR7cGFyYW1ldGVyc31cclxuIiwKKyAgICAgICAg
Im5hY2siOiAiYT1ydGNwLWZiOiR7dHlwZX0gbmFja1xyXG4iLAorICAgICAgICAibmFja3BsaSI6
ICJhPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrIHBsaVxyXG4iLAorICAgICAgICAiY2NtZmlyIjogImE9
cnRjcC1mYjoke3R5cGV9IGNjbSBmaXJcclxuIiwKKyAgICAgICAgImVyaWNzY3JlYW0iOiAiYT1y
dGNwLWZiOiR7dHlwZX0gZXJpY3NjcmVhbVxyXG4iLAorCisgICAgICAgICJjbmFtZSI6ICJhPXNz
cmM6JHtzc3JjfSBjbmFtZToke2NuYW1lfVxyXG4iLAorICAgICAgICAibXNpZCI6ICJhPW1zaWQ6
JHttZWRpYVN0cmVhbUlkfSAke21lZGlhU3RyZWFtVHJhY2tJZH1cclxuIiwKKworICAgICAgICAi
aWNlQ3JlZGVudGlhbHMiOgorICAgICAgICAgICAgImE9aWNlLXVmcmFnOiR7dWZyYWd9XHJcbiIg
KworICAgICAgICAgICAgImE9aWNlLXB3ZDoke3Bhc3N3b3JkfVxyXG4iLAorCisgICAgICAgICJj
YW5kaWRhdGUiOgorICAgICAgICAgICAgImE9Y2FuZGlkYXRlOiR7Zm91bmRhdGlvbn0gJHtjb21w
b25lbnRJZH0gJHt0cmFuc3BvcnR9ICR7cHJpb3JpdHl9ICR7YWRkcmVzc30gJHtwb3J0fSIgKwor
ICAgICAgICAgICAgIiB0eXAgJHt0eXBlfSR7WyByYWRkciBdcmVsYXRlZEFkZHJlc3N9JHtbIHJw
b3J0IF1yZWxhdGVkUG9ydH0ke1sgdGNwdHlwZSBddGNwVHlwZX1cclxuIiwKKworICAgICAgICAi
ZHRsc0ZpbmdlcnByaW50IjogImE9ZmluZ2VycHJpbnQ6JHtmaW5nZXJwcmludEhhc2hGdW5jdGlv
bn0gJHtmaW5nZXJwcmludH1cclxuIiwKKyAgICAgICAgImR0bHNTZXR1cCI6ICJhPXNldHVwOiR7
c2V0dXB9XHJcbiIsCisKKyAgICAgICAgInNjdHBtYXAiOiAiYT1zY3RwbWFwOiR7cG9ydH0gJHth
cHB9JHtbIF1zdHJlYW1zfVxyXG4iCisgICAgfTsKKworICAgIGZ1bmN0aW9uIG1hdGNoKGRhdGEs
IHBhdHRlcm4sIGZsYWdzLCBhbHQpIHsKKyAgICAgICAgdmFyIHIgPSBuZXcgUmVnRXhwKHBhdHRl
cm4sIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIGRhdGEubWF0Y2gocikgfHwgYWx0ICYmIGFsdC5t
YXRjaChyKSB8fCBudWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZERlZmF1bHRzKG9iaiwg
ZGVmYXVsdHMpIHsKKyAgICAgICAgZm9yICh2YXIgcCBpbiBkZWZhdWx0cykgeworICAgICAgICAg
ICAgaWYgKCFkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShwKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Yob2JqW3BdKSA9PSAidW5kZWZpbmVkIikKKyAg
ICAgICAgICAgICAgICBvYmpbcF0gPSBkZWZhdWx0c1twXTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZSwgaW5mbykgeworICAgICAgICB2YXIg
dGV4dCA9IHRlbXBsYXRlOworICAgICAgICBmb3IgKHZhciBwIGluIGluZm8pIHsKKyAgICAgICAg
ICAgIGlmICghaW5mby5oYXNPd25Qcm9wZXJ0eShwKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHZhciByID0gbmV3IFJlZ0V4cCgiXFwkeyhcXFtbXlxcXV0rXFxdKT8i
ICsgcCArICIoXFxbW15cXF1dK1xcXSk/fSIpOworICAgICAgICAgICAgdGV4dCA9IHRleHQucmVw
bGFjZShyLCBmdW5jdGlvbiAoXywgcHJlZml4LCBzdWZmaXgpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWluZm9bcF0gJiYgaW5mb1twXSAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IiI7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4ID8gcHJlZml4LnN1YnN0cigxLCBw
cmVmaXgubGVuZ3RoIC0gMikgOiAiIjsKKyAgICAgICAgICAgICAgICBzdWZmaXggPSBzdWZmaXgg
PyBzdWZmaXguc3Vic3RyKDEsIHN1ZmZpeC5sZW5ndGggLSAyKSA6ICIiOworICAgICAgICAgICAg
ICAgIHJldHVybiBwcmVmaXggKyBpbmZvW3BdICsgc3VmZml4OworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgfQorCisgICAgU0RQLnBhcnNlID0g
ZnVuY3Rpb24gKHNkcFRleHQpIHsKKyAgICAgICAgc2RwVGV4dCA9IG5ldyBTdHJpbmcoc2RwVGV4
dCk7CisgICAgICAgIHZhciBzZHBPYmogPSB7fTsKKyAgICAgICAgdmFyIHBhcnRzID0gc2RwVGV4
dC5zcGxpdChuZXcgUmVnRXhwKHJlZ2V4cHMubWJsb2NrLCAibSIpKSB8fCBbc2RwVGV4dF07Cisg
ICAgICAgIHZhciBzYmxvY2sgPSBwYXJ0cy5zaGlmdCgpOworICAgICAgICB2YXIgdmVyc2lvbiA9
IHBhcnNlSW50KChtYXRjaChzYmxvY2ssIHJlZ2V4cHMudmxpbmUsICJtIikgfHwgW10pWzFdKTsK
KyAgICAgICAgaWYgKCFpc05hTih2ZXJzaW9uKSkKKyAgICAgICAgICAgIHNkcE9iai52ZXJzaW9u
ID0gdmVyc2lvbjsKKyAgICAgICAgdmFyIG9yaWdpbmF0b3IgPSBtYXRjaChzYmxvY2ssIHJlZ2V4
cHMub2xpbmUsICJtIik7OworICAgICAgICBpZiAob3JpZ2luYXRvcikgeworICAgICAgICAgICAg
c2RwT2JqLm9yaWdpbmF0b3IgPSB7CisgICAgICAgICAgICAgICAgInVzZXJuYW1lIjogb3JpZ2lu
YXRvclsxXSwKKyAgICAgICAgICAgICAgICAic2Vzc2lvbklkIjogb3JpZ2luYXRvclsyXSwKKyAg
ICAgICAgICAgICAgICAic2Vzc2lvblZlcnNpb24iOiBwYXJzZUludChvcmlnaW5hdG9yWzNdKSwK
KyAgICAgICAgICAgICAgICAibmV0VHlwZSI6ICJJTiIsCisgICAgICAgICAgICAgICAgImFkZHJl
c3NUeXBlIjogb3JpZ2luYXRvcls0XSwKKyAgICAgICAgICAgICAgICAiYWRkcmVzcyI6IG9yaWdp
bmF0b3JbNV0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgdmFyIHNlc3Npb25O
YW1lID0gbWF0Y2goc2Jsb2NrLCByZWdleHBzLnNsaW5lLCAibSIpOworICAgICAgICBpZiAoc2Vz
c2lvbk5hbWUpCisgICAgICAgICAgICBzZHBPYmouc2Vzc2lvbk5hbWUgPSBzZXNzaW9uTmFtZVsx
XTsKKyAgICAgICAgdmFyIHNlc3Npb25UaW1lID0gbWF0Y2goc2Jsb2NrLCByZWdleHBzLnRsaW5l
LCAibSIpOworICAgICAgICBpZiAoc2Vzc2lvblRpbWUpIHsKKyAgICAgICAgICAgIHNkcE9iai5z
dGFydFRpbWUgPSBwYXJzZUludChzZXNzaW9uVGltZVsxXSk7CisgICAgICAgICAgICBzZHBPYmou
c3RvcFRpbWUgPSBwYXJzZUludChzZXNzaW9uVGltZVsyXSk7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIGhhc01lZGlhU3RyZWFtSWQgPSAhIW1hdGNoKHNibG9jaywgcmVnZXhwcy5tc2lkc2VtYW50
aWMsICJtIik7CisgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucyA9IFtdOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDUpIHsKKyAgICAgICAg
ICAgIHZhciBtZWRpYURlc2NyaXB0aW9uID0geworICAgICAgICAgICAgICAgICJ0eXBlIjogcGFy
dHNbaV0sCisgICAgICAgICAgICAgICAgInBvcnQiOiBwYXJzZUludChwYXJ0c1tpICsgMV0pLAor
ICAgICAgICAgICAgICAgICJwcm90b2NvbCI6IHBhcnRzW2kgKyAyXSwKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICB2YXIgZm10ID0gcGFydHNbaSArIDNdLnJlcGxhY2UoL15bXHNcdUZFRkZc
eEEwXSsvLCAnJykKKyAgICAgICAgICAgICAgICAuc3BsaXQoLyArLykKKyAgICAgICAgICAgICAg
ICAubWFwKGZ1bmN0aW9uICh4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUlu
dCh4KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHZhciBtYmxvY2sgPSBwYXJ0
c1tpICsgNF07CisKKyAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gbWF0Y2gobWJsb2NrLCBy
ZWdleHBzLmNsaW5lLCAibSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikg
eworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubmV0VHlwZSA9ICJJTiI7CisgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRyZXNzVHlwZSA9IGNvbm5lY3Rpb25bMV07
CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5hZGRyZXNzID0gY29ubmVjdGlvblsy
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBtb2RlID0gbWF0Y2gobWJsb2NrLCBy
ZWdleHBzLm1vZGUsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChtb2RlKQorICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubW9kZSA9IG1vZGVbMV07CisKKyAgICAgICAgICAg
IHZhciBwYXlsb2FkVHlwZXMgPSBbXTsKKyAgICAgICAgICAgIGlmIChtYXRjaChtZWRpYURlc2Ny
aXB0aW9uLnByb3RvY29sLCAiKFVEUC9UTFMpP1JUUC9TP0FWUEY/IikpIHsKKyAgICAgICAgICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzID0gW107CisgICAgICAgICAgICAgICAgcGF5
bG9hZFR5cGVzID0gZm10OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF5bG9hZFR5cGVz
LmZvckVhY2goZnVuY3Rpb24gKHBheWxvYWRUeXBlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBh
eWxvYWQgPSB7ICJ0eXBlIjogcGF5bG9hZFR5cGUgfTsKKyAgICAgICAgICAgICAgICB2YXIgcnRw
bWFwTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLnJ0cG1hcCwgcGF5bG9hZCk7CisgICAgICAg
ICAgICAgICAgdmFyIHJ0cG1hcCA9IG1hdGNoKG1ibG9jaywgcnRwbWFwTGluZSwgIm0iKTsKKyAg
ICAgICAgICAgICAgICBpZiAocnRwbWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQu
ZW5jb2RpbmdOYW1lID0gcnRwbWFwWzFdOworICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmNs
b2NrUmF0ZSA9IHBhcnNlSW50KHJ0cG1hcFsyXSk7CisgICAgICAgICAgICAgICAgICAgIGlmICht
ZWRpYURlc2NyaXB0aW9uLnR5cGUgPT0gImF1ZGlvIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBheWxvYWQuY2hhbm5lbHMgPSBwYXJzZUludChydHBtYXBbM10pIHx8IDE7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAidmlkZW8iKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFja0xpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhw
cy5uYWNrLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQubmFjayA9
ICEhbWF0Y2gobWJsb2NrLCBuYWNrTGluZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBuYWNrcGxpTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLm5hY2twbGksIHBheWxvYWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNrcGxpID0gISFtYXRjaChtYmxv
Y2ssIG5hY2twbGlMaW5lLCAibSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNjbWZp
ckxpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhwcy5jY21maXIsIHBheWxvYWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcGF5bG9hZC5jY21maXIgPSAhIW1hdGNoKG1ibG9jaywgY2NtZmlyTGlu
ZSwgIm0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcmljU2NyZWFtTGluZSA9IGZp
bGxUZW1wbGF0ZShyZWdleHBzLmVyaWNzY3JlYW0sIHBheWxvYWQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcGF5bG9hZC5lcmljc2NyZWFtID0gISFtYXRjaChtYmxvY2ssIGVyaWNTY3JlYW1M
aW5lLCAibSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChwYXlsb2FkVHlwZSA9PSAwIHx8IHBheWxvYWRUeXBlID09IDgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGF5bG9hZC5lbmNvZGluZ05hbWUgPSBwYXlsb2FkVHlwZSA9PSA4ID8gIlBDTUEi
IDogIlBDTVUiOworICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmNsb2NrUmF0ZSA9IDgwMDA7
CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2hhbm5lbHMgPSAxOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgZm10cExpbmUgPSBmaWxsVGVtcGxhdGUocmVnZXhw
cy5mbXRwLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICB2YXIgZm10cCA9IG1hdGNoKG1ibG9j
aywgZm10cExpbmUsICJtIik7CisgICAgICAgICAgICAgICAgaWYgKGZtdHApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGF5bG9hZC5wYXJhbWV0ZXJzID0ge307CisgICAgICAgICAgICAgICAgICAg
IGZtdHBbMV0ucmVwbGFjZShuZXcgUmVnRXhwKHJlZ2V4cHMucGFyYW0sICJnIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbihfLCBrZXksIHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoLy0oW2Etel0pL2csIGZ1bmN0aW9uIChf
LCBjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjLnRvVXBwZXJD
YXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGF5bG9hZC5wYXJhbWV0ZXJzW2tleV0gPSBpc05hTigrdmFsdWUpID8gdmFs
dWUgOiArdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzLnB1c2gocGF5bG9hZCk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdmFyIHJ0Y3AgPSBtYXRjaChtYmxvY2ss
IHJlZ2V4cHMucnRjcCwgIm0iKTsKKyAgICAgICAgICAgIGlmIChydGNwKSB7CisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwID0geworICAgICAgICAgICAgICAgICAgICAibmV0
VHlwZSI6ICJJTiIsCisgICAgICAgICAgICAgICAgICAgICJwb3J0IjogcGFyc2VJbnQocnRjcFsx
XSkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGlmIChydGNwWzJdKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcC5hZGRyZXNzVHlwZSA9IHJ0
Y3BbM107CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcC5hZGRyZXNz
ID0gcnRjcFs0XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB2YXIgcnRjcG11eCA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5ydGNwbXV4LCAibSIsIHNibG9j
ayk7CisgICAgICAgICAgICBpZiAocnRjcG11eCkgeworICAgICAgICAgICAgICAgIGlmICghbWVk
aWFEZXNjcmlwdGlvbi5ydGNwKQorICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9u
LnJ0Y3AgPSB7fTsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AubXV4ID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNuYW1lTGluZXMgPSBtYXRj
aChtYmxvY2ssIHJlZ2V4cHMuY25hbWUsICJtZyIpOworICAgICAgICAgICAgaWYgKGNuYW1lTGlu
ZXMpIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnNzcmNzID0gW107CisgICAg
ICAgICAgICAgICAgY25hbWVMaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjbmFtZSA9IG1hdGNoKGxpbmUsIHJlZ2V4cHMuY25hbWUsICJtIik7
CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc3NyY3MucHVzaChwYXJzZUlu
dChjbmFtZVsxXSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24u
Y25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmNuYW1lID0g
Y25hbWVbMl07CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChoYXNNZWRpYVN0cmVhbUlkKSB7CisgICAgICAgICAgICAgICAgdmFyIG1zaWQgPSBt
YXRjaChtYmxvY2ssIHJlZ2V4cHMubXNpZCwgIm0iKTsKKyAgICAgICAgICAgICAgICBpZiAobXNp
ZCkgeworICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtSWQg
PSBtc2lkWzJdOworICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3Ry
ZWFtVHJhY2tJZCA9IG1zaWRbM107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2YXIgdWZyYWcgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMudWZyYWcsICJt
Iiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIHZhciBwd2QgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMu
cHdkLCAibSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAodWZyYWcgJiYgcHdkKSB7CisgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UgPSB7CisgICAgICAgICAgICAgICAgICAg
ICJ1ZnJhZyI6IHVmcmFnWzFdLAorICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQiOiBwd2Rb
MV0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGNh
bmRpZGF0ZUxpbmVzID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLmNhbmRpZGF0ZSwgIm1pZyIpOwor
ICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUxpbmVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
ZWRpYURlc2NyaXB0aW9uLmljZSkKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlv
bi5pY2UgPSB7fTsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZS5jYW5kaWRh
dGVzID0gW107CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlTGluZXMuZm9yRWFjaChmdW5jdGlv
biAobGluZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlTGluZSA9IG1hdGNo
KGxpbmUsIHJlZ2V4cHMuY2FuZGlkYXRlLCAibWkiKTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGNhbmRpZGF0ZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZGF0aW9uIjogY2Fu
ZGlkYXRlTGluZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21wb25lbnRJZCI6IHBh
cnNlSW50KGNhbmRpZGF0ZUxpbmVbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgInRyYW5z
cG9ydCI6IGNhbmRpZGF0ZUxpbmVbM10udG9VcHBlckNhc2UoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJwcmlvcml0eSI6IHBhcnNlSW50KGNhbmRpZGF0ZUxpbmVbNF0pLAorICAgICAgICAg
ICAgICAgICAgICAgICAgImFkZHJlc3MiOiBjYW5kaWRhdGVMaW5lWzVdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgInBvcnQiOiBwYXJzZUludChjYW5kaWRhdGVMaW5lWzZdKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICJ0eXBlIjogY2FuZGlkYXRlTGluZVs3XQorICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlTGluZVs5XSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5yZWxhdGVkQWRkcmVzcyA9IGNhbmRpZGF0ZUxp
bmVbOV07CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oY2FuZGlkYXRlTGluZVsxMF0p
KQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlLnJlbGF0ZWRQb3J0ID0gcGFyc2VJ
bnQoY2FuZGlkYXRlTGluZVsxMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
TGluZVsxMl0pCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9IGNh
bmRpZGF0ZUxpbmVbMTJdOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYW5kaWRhdGUu
dHJhbnNwb3J0ID09ICJUQ1AiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlLnBvcnQgPT0gMCB8fCBjYW5kaWRhdGUucG9ydCA9PSA5KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlLnRjcFR5cGUgPSAiYWN0aXZlIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYW5kaWRhdGUucG9ydCA9IDk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBtZWRpYURlc2NyaXB0aW9uLmljZS5jYW5kaWRhdGVzLnB1c2goY2FuZGlkYXRlKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGZpbmdl
cnByaW50ID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLmZpbmdlcnByaW50LCAibWkiLCBzYmxvY2sp
OworICAgICAgICAgICAgaWYgKGZpbmdlcnByaW50KSB7CisgICAgICAgICAgICAgICAgbWVkaWFE
ZXNjcmlwdGlvbi5kdGxzID0geworICAgICAgICAgICAgICAgICAgICAiZmluZ2VycHJpbnRIYXNo
RnVuY3Rpb24iOiBmaW5nZXJwcmludFsxXS50b0xvd2VyQ2FzZSgpLAorICAgICAgICAgICAgICAg
ICAgICAiZmluZ2VycHJpbnQiOiBmaW5nZXJwcmludFsyXS50b1VwcGVyQ2FzZSgpCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzZXR1cCA9IG1hdGNo
KG1ibG9jaywgcmVnZXhwcy5zZXR1cCwgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgaWYgKHNl
dHVwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZWRpYURlc2NyaXB0aW9uLmR0bHMpCisgICAg
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRscyA9IHt9OworICAgICAgICAgICAg
ICAgIG1lZGlhRGVzY3JpcHRpb24uZHRscy5zZXR1cCA9IHNldHVwWzFdOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5wcm90b2NvbCA9PSAiRFRMUy9T
Q1RQIikgeworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc2N0cCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgInBvcnQiOiBmbXRbMF0KKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIHZhciBzY3RwbWFwTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLnNjdHBtYXAs
IG1lZGlhRGVzY3JpcHRpb24uc2N0cCk7CisgICAgICAgICAgICAgICAgdmFyIHNjdHBtYXAgPSBt
YXRjaChtYmxvY2ssIHNjdHBtYXBMaW5lLCAibSIpOworICAgICAgICAgICAgICAgIGlmIChzY3Rw
bWFwKSB7CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc2N0cC5hcHAgPSBz
Y3RwbWFwWzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoc2N0cG1hcFsyXSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc2N0cC5zdHJlYW1zID0gcGFyc2VJbnQo
c2N0cG1hcFsyXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzZHBPYmoubWVkaWFEZXNjcmlwdGlvbnMucHVzaChtZWRpYURlc2NyaXB0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBzZHBPYmo7CisgICAgfTsKKworICAgIFNEUC5nZW5l
cmF0ZSA9IGZ1bmN0aW9uIChzZHBPYmopIHsKKyAgICAgICAgc2RwT2JqID0gSlNPTi5wYXJzZShK
U09OLnN0cmluZ2lmeShzZHBPYmopKTsKKyAgICAgICAgYWRkRGVmYXVsdHMoc2RwT2JqLCB7Cisg
ICAgICAgICAgICAidmVyc2lvbiI6IDAsCisgICAgICAgICAgICAib3JpZ2luYXRvciI6IHt9LAor
ICAgICAgICAgICAgInNlc3Npb25OYW1lIjogIi0iLAorICAgICAgICAgICAgInN0YXJ0VGltZSI6
IDAsCisgICAgICAgICAgICAic3RvcFRpbWUiOiAwLAorICAgICAgICAgICAgIm1lZGlhRGVzY3Jp
cHRpb25zIjogW10KKyAgICAgICAgfSk7CisgICAgICAgIGFkZERlZmF1bHRzKHNkcE9iai5vcmln
aW5hdG9yLCB7CisgICAgICAgICAgICAidXNlcm5hbWUiOiAiLSIsCisgICAgICAgICAgICAic2Vz
c2lvbklkIjogIiIgKyBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICsgK25ldyBEYXRlKCkpICog
MWU2KSwKKyAgICAgICAgICAgICJzZXNzaW9uVmVyc2lvbiI6IDEsCisgICAgICAgICAgICAibmV0
VHlwZSI6ICJJTiIsCisgICAgICAgICAgICAiYWRkcmVzc1R5cGUiOiAiSVA0IiwKKyAgICAgICAg
ICAgICJhZGRyZXNzIjogIjEyNy4wLjAuMSIKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBzZHBU
ZXh0ID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5zZHAsIHNkcE9iaik7CisgICAgICAgIHNkcFRl
eHQgPSBmaWxsVGVtcGxhdGUoc2RwVGV4dCwgc2RwT2JqLm9yaWdpbmF0b3IpOworCisgICAgICAg
IHZhciBtc2lkc2VtYW50aWNMaW5lID0gIiI7CisgICAgICAgIHZhciBtZWRpYVN0cmVhbUlkcyA9
IFtdOworICAgICAgICBzZHBPYmoubWVkaWFEZXNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAo
bWRlc2MpIHsKKyAgICAgICAgICAgIGlmIChtZGVzYy5tZWRpYVN0cmVhbUlkICYmIG1kZXNjLm1l
ZGlhU3RyZWFtVHJhY2tJZAorICAgICAgICAgICAgICAgICYmIG1lZGlhU3RyZWFtSWRzLmluZGV4
T2YobWRlc2MubWVkaWFTdHJlYW1JZCkgPT0gLTEpCisgICAgICAgICAgICAgICAgbWVkaWFTdHJl
YW1JZHMucHVzaChtZGVzYy5tZWRpYVN0cmVhbUlkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlm
IChtZWRpYVN0cmVhbUlkcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBtc2lkc2VtYW50aWNM
aW5lID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5tc2lkc2VtYW50aWMsCisgICAgICAgICAgICAg
ICAgeyAibWVkaWFTdHJlYW1JZHMiOiBtZWRpYVN0cmVhbUlkcy5qb2luKCIgIikgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgc2RwVGV4dCA9IGZpbGxUZW1wbGF0ZShzZHBUZXh0LCB7ICJtc2lkc2Vt
YW50aWNMaW5lIjogbXNpZHNlbWFudGljTGluZSB9KTsKKworICAgICAgICBzZHBPYmoubWVkaWFE
ZXNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobWVkaWFEZXNjcmlwdGlvbikgeworICAgICAg
ICAgICAgYWRkRGVmYXVsdHMobWVkaWFEZXNjcmlwdGlvbiwgeworICAgICAgICAgICAgICAgICJw
b3J0IjogOSwKKyAgICAgICAgICAgICAgICAicHJvdG9jb2wiOiAiVURQL1RMUy9SVFAvU0FWUEYi
LAorICAgICAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAgICAiYWRk
cmVzc1R5cGUiOiAiSVA0IiwKKyAgICAgICAgICAgICAgICAiYWRkcmVzcyI6ICIwLjAuMC4wIiwK
KyAgICAgICAgICAgICAgICAibW9kZSI6ICJzZW5kcmVjdiIsCisgICAgICAgICAgICAgICAgInBh
eWxvYWRzIjogW10sCisgICAgICAgICAgICAgICAgInJ0Y3AiOiB7fQorICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB2YXIgbWJsb2NrID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5tYmxvY2ss
IG1lZGlhRGVzY3JpcHRpb24pOworCisgICAgICAgICAgICB2YXIgcGF5bG9hZEluZm8gPSB7InJ0
cE1hcExpbmVzIjogIiIsICJmbXRwTGluZXMiOiAiIiwgIm5hY2tMaW5lcyI6ICIiLAorICAgICAg
ICAgICAgICAgICJuYWNrcGxpTGluZXMiOiAiIiwgImNjbWZpckxpbmVzIjogIiIsICJlcmljU2Ny
ZWFtTGluZXMiOiAiIn07CisgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnBheWxvYWRzLmZv
ckVhY2goZnVuY3Rpb24gKHBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZElu
Zm8uZm10KQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5mbXQgKz0gIiAiICsgcGF5
bG9hZC50eXBlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGF5
bG9hZEluZm8uZm10ID0gcGF5bG9hZC50eXBlOworICAgICAgICAgICAgICAgIGlmICghcGF5bG9h
ZC5jaGFubmVscyB8fCBwYXlsb2FkLmNoYW5uZWxzID09IDEpCisgICAgICAgICAgICAgICAgICAg
IHBheWxvYWQuY2hhbm5lbHMgPSBudWxsOworICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLnJ0
cE1hcExpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMucnRwTWFwLCBwYXlsb2FkKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGF5bG9hZC5wYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBmbXRwSW5mbyA9IHsgInR5cGUiOiBwYXlsb2FkLnR5cGUsICJwYXJhbWV0ZXJzIjog
IiIgfTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBwYXlsb2FkLnBhcmFtZXRl
cnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHAucmVwbGFjZSgvKFtB
LVpdKShbYS16XSkvZywgZnVuY3Rpb24gKF8sIGEsIGIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIi0iICsgYS50b0xvd2VyQ2FzZSgpICsgYjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZtdHBJbmZvLnBhcmFt
ZXRlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10cEluZm8ucGFyYW1ldGVycyAr
PSAiOyI7CisgICAgICAgICAgICAgICAgICAgICAgICBmbXRwSW5mby5wYXJhbWV0ZXJzICs9IHBh
cmFtICsgIj0iICsgcGF5bG9hZC5wYXJhbWV0ZXJzW3BdOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmZtdHBMaW5lcyArPSBmaWxsVGVtcGxh
dGUodGVtcGxhdGVzLmZtdHAsIGZtdHBJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHBheWxvYWQubmFjaykKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZElu
Zm8ubmFja0xpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMubmFjaywgcGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmFja3BsaSkKKyAgICAgICAgICAgICAgICAgICAg
cGF5bG9hZEluZm8ubmFja3BsaUxpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMubmFja3Bs
aSwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuY2NtZmlyKQorICAgICAg
ICAgICAgICAgICAgICBwYXlsb2FkSW5mby5jY21maXJMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVt
cGxhdGVzLmNjbWZpciwgcGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXJp
Y3NjcmVhbSkKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8uZXJpY1NjcmVhbUxpbmVz
ICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuZXJpY3NjcmVhbSwgcGF5bG9hZCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZShtYmxvY2ssIHBheWxv
YWRJbmZvKTsKKworICAgICAgICAgICAgdmFyIHJ0Y3BJbmZvID0geyJydGNwTGluZSI6ICIiLCAi
cnRjcE11eExpbmUiOiAiIn07CisgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5ydGNw
LnBvcnQpIHsKKyAgICAgICAgICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURlc2NyaXB0aW9uLnJ0
Y3AsIHsKKyAgICAgICAgICAgICAgICAgICAgIm5ldFR5cGUiOiAiSU4iLAorICAgICAgICAgICAg
ICAgICAgICAiYWRkcmVzc1R5cGUiOiAiSVA0IiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHJl
c3MiOiAiIgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmICghbWVkaWFE
ZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24ucnRjcC5uZXRUeXBlID0gbWVkaWFEZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3NUeXBlID0g
IiI7CisgICAgICAgICAgICAgICAgcnRjcEluZm8ucnRjcExpbmUgPSBmaWxsVGVtcGxhdGUodGVt
cGxhdGVzLnJ0Y3AsIG1lZGlhRGVzY3JpcHRpb24ucnRjcCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5ydGNwLm11eCkKKyAgICAgICAgICAgICAgICBy
dGNwSW5mby5ydGNwTXV4TGluZSA9IHRlbXBsYXRlcy5ydGNwTXV4OworICAgICAgICAgICAgbWJs
b2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgcnRjcEluZm8pOworCisgICAgICAgICAgICB2YXIg
c3JjQXR0cmlidXRlTGluZXMgPSB7ICJjbmFtZUxpbmVzIjogIiIsICJtc2lkTGluZXMiOiAiIiB9
OworICAgICAgICAgICAgdmFyIHNyY0F0dHJpYnV0ZXMgPSB7CisgICAgICAgICAgICAgICAgImNu
YW1lIjogbWVkaWFEZXNjcmlwdGlvbi5jbmFtZSwKKyAgICAgICAgICAgICAgICAibWVkaWFTdHJl
YW1JZCI6IG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1JZCwKKyAgICAgICAgICAgICAgICAi
bWVkaWFTdHJlYW1UcmFja0lkIjogbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5jbmFtZSAm
JiBtZWRpYURlc2NyaXB0aW9uLnNzcmNzKSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlw
dGlvbi5zc3Jjcy5mb3JFYWNoKGZ1bmN0aW9uIChzc3JjKSB7CisgICAgICAgICAgICAgICAgICAg
IHNyY0F0dHJpYnV0ZXMuc3NyYyA9IHNzcmM7CisgICAgICAgICAgICAgICAgICAgIHNyY0F0dHJp
YnV0ZUxpbmVzLmNuYW1lTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5jbmFtZSwgc3Jj
QXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLm1l
ZGlhU3RyZWFtSWQgJiYgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzcmNBdHRyaWJ1dGVMaW5lcy5tc2lkTGluZXMgKz0gZmlsbFRl
bXBsYXRlKHRlbXBsYXRlcy5tc2lkLCBzcmNBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlk
ICYmIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1UcmFja0lkKSB7CisgICAgICAgICAgICAg
ICAgc3JjQXR0cmlidXRlcy5zc3JjID0gbnVsbDsKKyAgICAgICAgICAgICAgICBzcmNBdHRyaWJ1
dGVMaW5lcy5tc2lkTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5tc2lkLCBzcmNBdHRy
aWJ1dGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0
ZShtYmxvY2ssIHNyY0F0dHJpYnV0ZUxpbmVzKTsKKworICAgICAgICAgICAgdmFyIGljZUluZm8g
PSB7ImljZUNyZWRlbnRpYWxMaW5lcyI6ICIiLCAiY2FuZGlkYXRlTGluZXMiOiAiIn07CisgICAg
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5pY2UpIHsKKyAgICAgICAgICAgICAgICBpY2VJ
bmZvLmljZUNyZWRlbnRpYWxMaW5lcyA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuaWNlQ3JlZGVu
dGlhbHMsCisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlKTsKKyAgICAg
ICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5pY2UuY2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZS5jYW5kaWRhdGVzLmZvckVhY2goZnVu
Y3Rpb24gKGNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkRGVmYXVsdHMo
Y2FuZGlkYXRlLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbGF0ZWRBZGRyZXNz
IjogbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRlZFBvcnQiOiBudWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0Y3BUeXBlIjogbnVsbAorICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpY2VJbmZvLmNhbmRp
ZGF0ZUxpbmVzICs9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuY2FuZGlkYXRlLCBjYW5kaWRhdGUp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJsb2NrLCBpY2VJbmZvKTsK
KworICAgICAgICAgICAgdmFyIGR0bHNJbmZvID0geyAiZHRsc0ZpbmdlcnByaW50TGluZSI6ICIi
LCAiZHRsc1NldHVwTGluZSI6ICIiIH07CisgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlv
bi5kdGxzKSB7CisgICAgICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24uZHRscy5maW5n
ZXJwcmludCkgeworICAgICAgICAgICAgICAgICAgICBkdGxzSW5mby5kdGxzRmluZ2VycHJpbnRM
aW5lID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5kdGxzRmluZ2VycHJpbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmR0bHMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURlc2NyaXB0aW9uLmR0bHMsIHsic2V0
dXAiOiAiYWN0cGFzcyJ9KTsKKyAgICAgICAgICAgICAgICBkdGxzSW5mby5kdGxzU2V0dXBMaW5l
ID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5kdGxzU2V0dXAsIG1lZGlhRGVzY3JpcHRpb24uZHRs
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmxvY2sgPSBmaWxsVGVtcGxhdGUobWJs
b2NrLCBkdGxzSW5mbyk7CisKKyAgICAgICAgICAgIHZhciBzY3RwSW5mbyA9IHsic2N0cG1hcExp
bmUiOiAiIiwgImZtdCI6ICIifTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnNj
dHApIHsKKyAgICAgICAgICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURlc2NyaXB0aW9uLnNjdHAs
IHsic3RyZWFtcyI6IG51bGx9KTsKKyAgICAgICAgICAgICAgICBzY3RwSW5mby5zY3RwbWFwTGlu
ZSA9IGZpbGxUZW1wbGF0ZSh0ZW1wbGF0ZXMuc2N0cG1hcCwgbWVkaWFEZXNjcmlwdGlvbi5zY3Rw
KTsKKyAgICAgICAgICAgICAgICBzY3RwSW5mby5mbXQgPSBtZWRpYURlc2NyaXB0aW9uLnNjdHAu
cG9ydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZSht
YmxvY2ssIHNjdHBJbmZvKTsKKworICAgICAgICAgICAgc2RwVGV4dCArPSBtYmxvY2s7CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybiBzZHBUZXh0OworICAgIH07CisKKyAgICBTRFAuZ2Vu
ZXJhdGVDYW5kaWRhdGVMaW5lID0gZnVuY3Rpb24gKGNhbmRpZGF0ZU9iaikgeworICAgICAgICBh
ZGREZWZhdWx0cyhjYW5kaWRhdGVPYmosIHsKKyAgICAgICAgICAgICJyZWxhdGVkQWRkcmVzcyI6
IG51bGwsCisgICAgICAgICAgICAicmVsYXRlZFBvcnQiOiBudWxsLAorICAgICAgICAgICAgInRj
cFR5cGUiOiBudWxsCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBmaWxsVGVtcGxhdGUo
dGVtcGxhdGVzLmNhbmRpZGF0ZSwgY2FuZGlkYXRlT2JqKTsKKyAgICB9OworCisgICAgdmFyIGV4
cGVjdGVkUHJvcGVydGllcyA9IHsKKyAgICAgICAgInNlc3Npb24iOiBbICJ2ZXJzaW9uIiwgIm9y
aWdpbmF0b3IiLCAic2Vzc2lvbk5hbWUiLCAic3RhcnRUaW1lIiwgInN0b3BUaW1lIiBdLAorICAg
ICAgICAibWxpbmUiOiBbICJ0eXBlIiwgInBvcnQiLCAicHJvdG9jb2wiLCAibW9kZSIsICJwYXls
b2FkcyIsICJydGNwIiwgIm1lZGlhU3RyZWFtSWQiLAorICAgICAgICAgICAgIm1lZGlhU3RyZWFt
VHJhY2tJZCIsICJkdGxzIiwgInNzcmNzIiwgImNuYW1lIiwgImljZSIgXSwKKyAgICAgICAgIm1s
aW5lU3ViT2JqZWN0cyI6IHsKKyAgICAgICAgICAgICJydGNwIjogWyAibXV4IiBdLAorICAgICAg
ICAgICAgImljZSI6IFsgInVmcmFnIiwgInBhc3N3b3JkIiBdLAorICAgICAgICAgICAgImR0bHMi
OiBbICJzZXR1cCIsICJmaW5nZXJwcmludEhhc2hGdW5jdGlvbiIsICJmaW5nZXJwcmludCIgXQor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGhhc0FsbFByb3BlcnRpZXMob2JqZWN0
LCBwcm9wZXJ0aWVzKSB7CisgICAgICAgIHZhciBtaXNzaW5nID0gcHJvcGVydGllcy5maWx0ZXIo
ZnVuY3Rpb24gKHByb3BlcnR5KSB7CisgICAgICAgICAgICByZXR1cm4gIW9iamVjdC5oYXNPd25Q
cm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiAhbWlzc2lu
Zy5sZW5ndGg7CisgICAgfQorCisgICAgU0RQLnZlcmlmeU9iamVjdCA9IGZ1bmN0aW9uIChzZHBP
YmopIHsKKyAgICAgICAgaWYgKCFoYXNBbGxQcm9wZXJ0aWVzKHNkcE9iaiwgZXhwZWN0ZWRQcm9w
ZXJ0aWVzLnNlc3Npb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgbWVkaWFEZXNjcmlwdGlvbiA9IHNkcE9iai5tZWRpYURlc2NyaXB0
aW9uc1tpXTsKKworICAgICAgICAgICAgaWYgKCFoYXNBbGxQcm9wZXJ0aWVzKG1lZGlhRGVzY3Jp
cHRpb24sIGV4cGVjdGVkUHJvcGVydGllcy5tbGluZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHZhciBwIGluIGV4cGVjdGVkUHJvcGVydGllcy5t
bGluZVN1Yk9iamVjdHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FsbFByb3BlcnRpZXMo
bWVkaWFEZXNjcmlwdGlvbltwXSwgZXhwZWN0ZWRQcm9wZXJ0aWVzLm1saW5lU3ViT2JqZWN0c1tw
XSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKK30pKCk7CisKK2Z1bmN0
aW9uIGdlbmVyYXRlKGpzb24pIHsKKyAgICB2YXIgb2JqZWN0ID0gSlNPTi5wYXJzZShqc29uKTsK
KyAgICByZXR1cm4gU0RQLmdlbmVyYXRlKG9iamVjdCk7Cit9CisKK2Z1bmN0aW9uIHBhcnNlKHNk
cCkgeworICAgIHZhciBvYmplY3QgPSBTRFAucGFyc2Uoc2RwKTsKKworICAgIGlmICghU0RQLnZl
cmlmeU9iamVjdChvYmplY3QpKQorICAgICAgICByZXR1cm4gIlBhcnNlRXJyb3IiOworCisgICAg
cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVjdCk7Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRlQ2Fu
ZGlkYXRlTGluZShqc29uKSB7CisgICAgdmFyIGNhbmRpZGF0ZSA9IEpTT04ucGFyc2UoanNvbik7
CisgICAgcmV0dXJuIFNEUC5nZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY2FuZGlkYXRlKS5zdWJzdHIo
Mik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlQ2FuZGlkYXRlTGluZShjYW5kaWRhdGVMaW5lKSB7Cisg
ICAgdmFyIG1kZXNjID0gU0RQLnBhcnNlKCJtPWFwcGxpY2F0aW9uIDAgTk9ORVxyXG5hPSIgKyBj
YW5kaWRhdGVMaW5lICsgIlxyXG4iKS5tZWRpYURlc2NyaXB0aW9uc1swXTsKKyAgICBpZiAoIW1k
ZXNjLmljZSkKKyAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIjsKKworICAgIHJldHVybiBKU09O
LnN0cmluZ2lmeShtZGVzYy5pY2UuY2FuZGlkYXRlc1swXSk7Cit9CisKK2lmICh0eXBlb2YobW9k
dWxlKSAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YoZXhwb3J0cykgIT0gInVuZGVmaW5lZCIpCisg
ICAgbW9kdWxlLmV4cG9ydHMgPSBTRFA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDgx
OWY1ZWIuLmU2Yzg3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC00NCw2ICs0NCw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvd2F5bGFuZCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MveDExIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
dGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvZ3RrIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAiCkBAIC0xNTQsNiArMTU1LDggQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZURlY29kZXJDYWlyby5jcHAKIAorICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKKwogICAgIHBsYXRmb3JtL25ldHdvcmsvZ3RrL0Ny
ZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcApAQCAtMjQ4LDYgKzI1MSw5IEBAIHNldChXZWJD
b3JlX1VTRVJfQUdFTlRfU0NSSVBUUwogCiBzZXQoV2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQVFNf
REVQRU5ERU5DSUVTICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHApCiAKK3NldChXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUUyAke1dFQkNPUkVfRElSfS9N
b2R1bGVzL21lZGlhc3RyZWFtL3NkcC5qcykKK3NldChXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NS
SVBUU19ERVBFTkRFTkNJRVMgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3Rr
L1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCkKKwogbGlzdChBUFBFTkQgV2ViQ29yZV9M
SUJSQVJJRVMKICAgICAke0FUS19MSUJSQVJJRVN9CiAgICAgJHtDQUlST19MSUJSQVJJRVN9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggM2Y5NzJiOC4uODYyMmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM5Niw2ICsyMzk2LDEyIEBACiAJCTVFMkM0Mzc0
MUJDRjBENzUwMDAxRTJCQyAvKiBKU1JUQ1J0cFNlbmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUUyQzQzNzAxQkNGMEQ2OTAwMDFFMkJDIC8qIEpT
UlRDUnRwU2VuZGVyLmggKi87IH07CiAJCTVFMkM0MzdCMUJDRjlBNTcwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RTJDNDM3NjFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rp
b25CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTVFMkM0MzdDMUJDRjlBODQwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2REUxQzg1
OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi87IH07CisJCTVFQTNENkUwMUM4
NTlEODQwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERDFDODU5RDUzMDAzMDBCQkIgLyog
TW9ja01lZGlhRW5kcG9pbnQuY3BwICovOyB9OworCQk1RUEzRDZFMzFDODU5REMxMDAzMDBCQkIg
LyogU0RQUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICov
OyB9OworCQk1RUEzRDZFNDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFMjFDODU5REFB
MDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggKi87IH07CisJCTVFQTNENkU3MUM4NUE5REIwMDMw
MEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZFNTFDODVBOUMzMDAzMDBCQkIgLyog
U0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwICovOyB9OworCQk1RUEzRDZFODFDODVBOURC
MDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovOyB9OwogCQk1RUE3MjVEMjFBQ0FCRDQ3
MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNEMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmlj
ZXMuY3BwICovOyB9OwogCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyogTWVkaWFEZXZpY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVD
RTFBQ0FCQ0Q5MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUVBNzI1RDUxQUNBQkQ1NzAwRUFEMTdCIC8q
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVk
aWFEZXZpY2VzLmNwcCAqLzsgfTsKQEAgLTk5NzIsNiArOTk3OCwxMiBAQAogCQk1RTJDNDM3NjFC
Q0Y5QTBCMDAwMUUyQkMgLyogUlRDUGVlckNvbm5lY3Rpb25CdWlsdGlucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc4MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQ
ZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTJDNDM3OTFCQ0Y5QTBCMDAwMUUyQkMgLyog
UlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2Nr
TWVkaWFFbmRwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
b2NrTWVkaWFFbmRwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNE
NkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrTWVkaWFFbmRwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1RUEzRDZFMTFDODU5REFBMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3Nvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkUyMUM4NTlEQUEwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU0RQUHJv
Y2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkU1MUM4NUE5QzMw
MDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVFQTNENkU2MUM4NUE5QzMwMDMwMEJCQiAvKiBT
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1RUE3MjVDQTFBQ0FCQ0I1MDBFQUQxN0IgLyogTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFQTcyNUNCMUFDQUJD
QjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmljZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVFQTcyNUNDMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURl
dmljZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQ0MSw2ICsxNTQ1Myw4IEBACiAJ
CQkJNUUyQzQzNjQxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuY3BwICovLAogCQkJ
CTVFMkM0MzY1MUJDRUUzNzIwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmggKi8sCiAJCQkJNUUy
QzQzNjYxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaWRsICovLAorCQkJCTVFQTNE
NkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuY3BwICovLAorCQkJCTVFQTNENkUy
MUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLywKIAkJCQkwNzYzMDZENDE3RTE0
OUNGMDA1QTdDNEUgLyogU291cmNlSW5mby5jcHAgKi8sCiAJCQkJMDc2MzA2RDUxN0UxNDlDRjAw
NUE3QzRFIC8qIFNvdXJjZUluZm8uaCAqLywKIAkJCQkwNzYzMDZENjE3RTE0OUNGMDA1QTdDNEUg
LyogU291cmNlSW5mby5pZGwgKi8sCkBAIC0xNTUwMiw2ICsxNTUxNiw4IEBACiAJCQkJMDcyMjFC
QUUxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1N0YXRzUmVxdWVzdC5oICovLAogCQkJCTA3MjIxQkFG
MTdDRjBBRDQwMDg0OEU1MSAvKiBSVENTdGF0c1Jlc3BvbnNlQmFzZS5oICovLAogCQkJCTA3MjIx
QkIwMTdDRjBBRDQwMDg0OEU1MSAvKiBSVENWb2lkUmVxdWVzdC5oICovLAorCQkJCTVFQTNENkU1
MUM4NUE5QzMwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi8sCisJ
CQkJNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
LmggKi8sCiAJCQkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRl
TWVkaWFTdHJlYW0uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWVkaWFzdHJlYW07CkBAIC0xNzQz
OCw2ICsxNzQ1NCw4IEBACiAJCQkJMDc3QjY0MTUxQjk1RjcwMzAwM0U5QUQ1IC8qIE1lZGlhUGxh
eWJhY2tUYXJnZXRNb2NrLmggKi8sCiAJCQkJMDc3QjY0MTAxQjk0RjEyRTAwM0U5QUQ1IC8qIE1l
ZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmNwcCAqLywKIAkJCQkwNzdCNjQxMTFCOTRGMTJF
MDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1vY2suaCAqLywKKwkJCQk1RUEz
RDZERDFDODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuY3BwICovLAorCQkJCTVF
QTNENkRFMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5oICovLAogCQkJCTA3
RDZBNEYxMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8s
CiAJCQkJMDdENkE0RjIxQkVENUY4ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNl
LmggKi8sCiAJCQkJMDdENkE0RUQxQkVDRjJEMjAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZU1lZGlh
U291cmNlLmNwcCAqLywKQEAgLTI1NjYxLDYgKzI1Njc5LDcgQEAKIAkJCQk4NUU3MTFBNjBBQzVE
NTM1MDA1MzI3MEYgLyogRE9NSFRNTERvY3VtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg1REYyRUVEMEFBMzg3Q0IwMEFENjRDNSAvKiBET01IVE1MRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODVFNzExQTcwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxFbGVtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVFQTNENkRGMUM4NTlEN0YwMDMwMEJCQiAvKiBN
b2NrTWVkaWFFbmRwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MDc1NkEwQUQ2Q0JGOTAw
NjIwQzU3IC8qIERPTUhUTUxFbWJlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NTI0
N0QwMEFEODUwQjgwMDEyMDkzQiAvKiBET01IVE1MRW1iZWRFbGVtZW50SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1QkE0Q0RGMEFBNjg2MUIwMDg4MDUyRCAvKiBET01IVE1MRmllbGRT
ZXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI1ODYyLDYgKzI1ODgxLDcgQEAKIAkJCQkz
MUMwRkY0QzBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUMwRkY0RTBFNENFRkREMDA3RDZGRTUgLyogRE9NV2ViS2l0VHJh
bnNpdGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QzdGNUU3MEFBRkJB
RkIwMDQwMTRERCAvKiBET01XaGVlbEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1RUEzRDZF
NDFDODU5REMxMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTk4OUREMTBBQ0M4QkJEMDBBMEJDNTEgLyogRE9NV2hlZWxFdmVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDAzQjk5NzA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQzlBMEY3NTE2NDA5NENGMDAzRDZCOEQgLyogRE9NV2luZG93Q1NT
LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MzM1LDYgKzI3MzU1LDcgQEAKIAkJCQlDRDVFNUI1RjFB
MTVDRTU0MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUYzODIwODkzMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFnZUNvbnNvbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVFQTNENkU4MUM4NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVBMkFGMEMxODI5NzM0
MzAwREUxNzI5IC8qIFBhZ2VEZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJE
RDEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICov
LApAQCAtMzAyOTksNiArMzAzMjAsNyBAQAogCQkJCUJDNDkxOEM2MEJGRUEwNTAwMDlENjMxNiAv
KiBKU0hUTUxGcmFtZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ3QTUwQzZD
MEYzNjAwOTIwQkZGIC8qIEpTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzkyNkY4MDBDMDU1MjQ3MDA4Mjc3NkIgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVFQTNENkUzMUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQ
cm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNENDFBQkIwQzA2MERFODAwQzBFNDQ2
IC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODBFN0IxNDBBMTlENjA2MDA3RkI4QzUgLyogSlNIVE1MSGVhZEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFFMkFBMkUwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEhlYWRpbmdFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzEzNDEsNiArMzEzNjMsNyBAQAogCQkJCTVFMkM0
MzY3MUJDRUUzNzcwMDAxRTJCQyAvKiBSVENUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTU4MjRBQkEyMUFFODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1ODI0QUJBNjFBRTgxMzg0MDA5MDc0QjcgLyogUnVieVRleHRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTVFQTNENkU3MUM4NUE5REIwMDMwMEJCQiAvKiBTRFBQcm9j
ZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzlCQURBMTE2MUU3
RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc5QkFE
QTMxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ3
NkJCODQxOTQ1NkY4MTAwQ0ZEMjlBIC8qIFJ1bkxvb3BPYnNlcnZlci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMxMzg0LDYgKzMxNDA3LDcgQEAKIAkJCQkwRkM0RTQwRTE4N0Y4MkUxMDA0NTg4MkMg
LyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUY2MkVF
NjE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5M0MzOEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVBM0Q2RTAxQzg1OUQ4NDAwMzAwQkJCIC8q
IE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEzRTdDMTkxQjJG
QzUwMDBGMUI1NSAvKiBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkE4OEVCRDE2QThEMUJEMDBGOTk5ODQgLyogU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzFDQkQwQzE2MUE0
NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50
LmNwcAppbmRleCAwMWZiNmM3Li4yYzM4NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmNwcApAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFF
bmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludChNZWRpYUVuZHBvaW50Q2xpZW50KikKK3N0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlTWVkaWFFbmRwb2ludChNZWRp
YUVuZHBvaW50Q2xpZW50JikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAppbmRleCA1
NzA2ODhkLi42MTI5NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5NZWRpYUVuZHBvaW50Q2xpZW50KCkgeyB9CiB9OwogCi10eXBlZGVmIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiAoKkNyZWF0ZU1lZGlhRW5kcG9pbnQpKE1lZGlhRW5kcG9p
bnRDbGllbnQqKTsKK3R5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3Jl
YXRlTWVkaWFFbmRwb2ludCkoTWVkaWFFbmRwb2ludENsaWVudCYpOwogCiBjbGFzcyBNZWRpYUVu
ZHBvaW50IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oCmluZGV4IGFjNmM2ZDQuLjFjMTM4
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1BlZXJN
ZWRpYURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaApAQCAtMTUwLDIwICsxNTAsMjAgQEAgcHJpdmF0ZToK
ICAgICBQZWVyTWVkaWFEZXNjcmlwdGlvbigpIHsgfQogCiAgICAgU3RyaW5nIG1fdHlwZTsKLSAg
ICB1bnNpZ25lZCBzaG9ydCBtX3BvcnQgeyAwIH07Ci0gICAgU3RyaW5nIG1fYWRkcmVzczsKLSAg
ICBTdHJpbmcgbV9tb2RlOworICAgIHVuc2lnbmVkIHNob3J0IG1fcG9ydCB7IDkgfTsKKyAgICBT
dHJpbmcgbV9hZGRyZXNzIHsgIjAuMC4wLjAiIH07CisgICAgU3RyaW5nIG1fbW9kZSB7ICJzZW5k
cmVjdiIgfTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gbV9wYXlsb2FkczsK
IAotICAgIGJvb2wgbV9ydGNwTXV4IHsgZmFsc2UgfTsKKyAgICBib29sIG1fcnRjcE11eCB7IHRy
dWUgfTsKICAgICBTdHJpbmcgbV9ydGNwQWRkcmVzczsKICAgICB1bnNpZ25lZCBzaG9ydCBtX3J0
Y3BQb3J0IHsgMCB9OwogCiAgICAgU3RyaW5nIG1fbWVkaWFTdHJlYW1JZDsKICAgICBTdHJpbmcg
bV9tZWRpYVN0cmVhbVRyYWNrSWQ7CiAKLSAgICBTdHJpbmcgbV9kdGxzU2V0dXA7CisgICAgU3Ry
aW5nIG1fZHRsc1NldHVwIHsgImFjdHBhc3MiIH07CiAgICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnBy
aW50SGFzaEZ1bmN0aW9uOwogICAgIFN0cmluZyBtX2R0bHNGaW5nZXJwcmludDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmJjYjk1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBF
cmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICog
ICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKKworY29u
c3QgU3RyaW5nJiBzY3JpcHRTdHJpbmcoKQoreworICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWNkYzdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKKyNkZWZpbmUgU0RQUHJv
Y2Vzc29yU2NyaXB0UmVzb3VyY2VfaAorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZSB7CisKK2NvbnN0IFN0cmluZyYgc2Ny
aXB0U3RyaW5nKCk7CisKK30gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNl
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNlbmRpZiAvLyBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2Ny
aXB0UmVzb3VyY2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hZDYyODA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3Rr
LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2Uu
aCIKKworI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdHMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJv
Y2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitjb25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc2NyaXB0ID0gU3RyaW5n
KHNkcEphdmFTY3JpcHQpOworICAgIHJldHVybiBzY3JpcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmIxNzk5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1
ZGUgIk1vY2tNZWRpYUVuZHBvaW50LmgiCisKKyNpbmNsdWRlICJNZWRpYVBheWxvYWQuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBmaW5nZXJwcmludCA9ICI4Qjo4NzowOTo4QTo1RDpDMjpGMzozMzpFRjpD
NTpCMTpGNjo4NDozQTozRDpENjpBMzpFMjo5QzoxNzo0QzpFNzo0NjozQjoxQjpDRTo4NDo5ODpE
RDo4RTpBRjo3QiI7CitzdGF0aWMgY29uc3QgY2hhciogZmluZ2VycHJpbnRGdW5jdGlvbiA9ICJz
aGEtMjU2IjsKKworc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IE1vY2tNZWRpYUVuZHBv
aW50OjpjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYgY2xpZW50KQoreworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4obmV3IE1vY2tNZWRpYUVuZHBvaW50KGNsaWVu
dCkpOworfQorCitNb2NrTWVkaWFFbmRwb2ludDo6TW9ja01lZGlhRW5kcG9pbnQoTWVkaWFFbmRw
b2ludENsaWVudCYgY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitNb2Nr
TWVkaWFFbmRwb2ludDo6fk1vY2tNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBzdG9wKCk7Cit9CisK
K3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oUmVmUHRyPE1lZGlhRW5k
cG9pbnRDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgVU5VU0VEX1BBUkFN
KGNvbmZpZ3VyYXRpb24pOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjpnZW5lcmF0ZUR0
bHNJbmZvKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSgpIHsKKyAgICAgICAgbV9j
bGllbnQuZ290RHRsc0ZpbmdlcnByaW50KFN0cmluZyhmaW5nZXJwcmludCksIFN0cmluZyhmaW5n
ZXJwcmludEZ1bmN0aW9uKSk7CisgICAgfSk7Cit9CisKK1ZlY3RvcjxSZWZQdHI8TWVkaWFQYXls
b2FkPj4gTW9ja01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRBdWRpb1BheWxvYWRzKCkKK3sKKyAg
ICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IHBheWxvYWRzOworCisgICAgUmVmUHRyPE1l
ZGlhUGF5bG9hZD4gcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisgICAgcGF5bG9h
ZC0+c2V0VHlwZSgxMTEpOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiT1BVUyIpOwor
ICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg0ODAwMCk7CisgICAgcGF5bG9hZC0+c2V0Q2hhbm5l
bHMoMik7CisgICAgcGF5bG9hZHMuYXBwZW5kKHBheWxvYWQpOworCisgICAgcGF5bG9hZCA9IE1l
ZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisgICAgcGF5bG9hZC0+c2V0VHlwZSg4KTsKKyAgICBwYXls
b2FkLT5zZXRFbmNvZGluZ05hbWUoIlBDTUEiKTsKKyAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUo
ODAwMCk7CisgICAgcGF5bG9hZC0+c2V0Q2hhbm5lbHMoMSk7CisgICAgcGF5bG9hZHMuYXBwZW5k
KHBheWxvYWQpOworCisgICAgcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisgICAg
cGF5bG9hZC0+c2V0VHlwZSgwKTsKKyAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoIlBDTVUi
KTsKKyAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUoODAwMCk7CisgICAgcGF5bG9hZC0+c2V0Q2hh
bm5lbHMoMSk7CisgICAgcGF5bG9hZHMuYXBwZW5kKHBheWxvYWQpOworCisgICAgcmV0dXJuIHBh
eWxvYWRzOworfQorCitWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IE1vY2tNZWRpYUVuZHBv
aW50OjpnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpCit7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRp
YVBheWxvYWQ+PiBwYXlsb2FkczsKKworICAgIFJlZlB0cjxNZWRpYVBheWxvYWQ+IHBheWxvYWQg
PSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMTAzKTsKKyAg
ICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoIkgyNjQiKTsKKyAgICBwYXlsb2FkLT5zZXRDbG9j
a1JhdGUoOTAwMDApOworICAgIHBheWxvYWQtPnNldENjbWZpcih0cnVlKTsKKyAgICBwYXlsb2Fk
LT5zZXROYWNrcGxpKHRydWUpOworICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigicGFja2V0aXph
dGlvbk1vZGUiLCAxKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisKKyAgICBwYXls
b2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBlKDEwMCk7
CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJWUDgiKTsKKyAgICBwYXlsb2FkLT5zZXRD
bG9ja1JhdGUoOTAwMDApOworICAgIHBheWxvYWQtPnNldENjbWZpcih0cnVlKTsKKyAgICBwYXls
b2FkLT5zZXROYWNrcGxpKHRydWUpOworICAgIHBheWxvYWQtPnNldE5hY2sodHJ1ZSk7CisgICAg
cGF5bG9hZHMuYXBwZW5kKHBheWxvYWQpOworCisgICAgcGF5bG9hZCA9IE1lZGlhUGF5bG9hZDo6
Y3JlYXRlKCk7CisgICAgcGF5bG9hZC0+c2V0VHlwZSgxMjApOworICAgIHBheWxvYWQtPnNldEVu
Y29kaW5nTmFtZSgiUlRYIik7CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDkwMDAwKTsKKyAg
ICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoImFwdCIsIDEwMCk7CisgICAgcGF5bG9hZC0+YWRkUGFy
YW1ldGVyKCJydHhUaW1lIiwgMjAwKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisK
KyAgICByZXR1cm4gcGF5bG9hZHM7Cit9CisKK01lZGlhRW5kcG9pbnQ6OlVwZGF0ZVJlc3VsdCBN
b2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2lu
dFNlc3Npb25Db25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uLCBib29sIGlzSW5pdGlhdG9yKQor
eworICAgIFVOVVNFRF9QQVJBTShjb25maWd1cmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oaXNJ
bml0aWF0b3IpOworCisgICAgcmV0dXJuIFVwZGF0ZVJlc3VsdDo6U3VjY2VzczsKK30KKworTWVk
aWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0IE1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVTZW5kQ29u
ZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRp
b24sIGJvb2wgaXNJbml0aWF0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmZpZ3VyYXRpb24p
OworICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYXRvcik7CisKKyAgICByZXR1cm4gVXBkYXRlUmVz
dWx0OjpTdWNjZXNzOworfQorCit2b2lkIE1vY2tNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVDYW5k
aWRhdGUoSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIHVuc2lnbmVkIG1kZXNjSW5kZXgsIGNvbnN0
IFN0cmluZyYgdWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNhbmRpZGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKG1kZXNjSW5kZXgpOworICAgIFVOVVNF
RF9QQVJBTSh1ZnJhZyk7CisgICAgVU5VU0VEX1BBUkFNKHBhc3N3b3JkKTsKK30KKwordm9pZCBN
b2NrTWVkaWFFbmRwb2ludDo6cmVwbGFjZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYg
bmV3U291cmNlLCB1bnNpZ25lZCBtZGVzY0luZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShuZXdT
b3VyY2UpOworICAgIFVOVVNFRF9QQVJBTShtZGVzY0luZGV4KTsKK30KKwordm9pZCBNb2NrTWVk
aWFFbmRwb2ludDo6c3RvcCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tNZWRpYUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODczODlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja01lZGlhRW5kcG9pbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TW9ja01lZGlhRW5kcG9pbnRfaAorI2RlZmluZSBNb2NrTWVkaWFFbmRwb2ludF9oCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1vY2tNZWRpYUVuZHBvaW50IDogcHVibGljIE1lZGlh
RW5kcG9pbnQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFFbmRwb2ludD4gY3JlYXRlKE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKKworICAg
IE1vY2tNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQmKTsKKyAgICB+TW9ja01lZGlh
RW5kcG9pbnQoKTsKKworICAgIHZvaWQgc2V0Q29uZmlndXJhdGlvbihSZWZQdHI8TWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBnZW5lcmF0ZUR0bHNJ
bmZvKCkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBnZXREZWZh
dWx0QXVkaW9QYXlsb2FkcygpIG92ZXJyaWRlOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXls
b2FkPj4gZ2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKSBvdmVycmlkZTsKKworICAgIFVwZGF0ZVJl
c3VsdCB1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZp
Z3VyYXRpb24qLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKKyAgICBVcGRhdGVSZXN1bHQg
dXBkYXRlU2VuZENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
KiwgYm9vbCBpc0luaXRpYXRvcikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZFJlbW90ZUNhbmRp
ZGF0ZShJY2VDYW5kaWRhdGUmLCB1bnNpZ25lZCBtZGVzY0luZGV4LCBjb25zdCBTdHJpbmcmIHVm
cmFnLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVwbGFj
ZVNlbmRTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZSYsIHVuc2lnbmVkIG1kZXNjSW5kZXgpIG92
ZXJyaWRlOworCisgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgTWVk
aWFFbmRwb2ludENsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gTW9ja01lZGlh
RW5kcG9pbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFmMGViOGUu
LmQ2ZDAzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE3Niw2ICsx
NzYsNyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIk1v
Y2tNZWRpYUVuZHBvaW50LmgiCiAjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXIuaCIKICNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlJUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlck1vY2suaCIKQEAgLTQxNiw2ICs0MTcsNyBAQCBJbnRlcm5hbHM6Oklu
dGVybmFscyhEb2N1bWVudCogZG9jdW1lbnQpCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
ICAgIHNldE1vY2tNZWRpYUNhcHR1cmVEZXZpY2VzRW5hYmxlZCh0cnVlKTsKKyAgICBlbmFibGVN
b2NrTWVkaWFFbmRwb2ludCgpOwogICAgIGVuYWJsZU1vY2tSVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIoKTsKICNlbmRpZgogCkBAIC0xMDE2LDYgKzEwMTgsMTEgQEAgdm9pZCBJbnRlcm5hbHM6OmVu
YWJsZU1vY2tTcGVlY2hTeW50aGVzaXplcigpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCit2b2lkIEludGVybmFsczo6ZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKQoreworICAg
IE1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSA9IE1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGU7Cit9CisK
IHZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKCkKIHsK
ICAgICBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZSA9IFJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlck1vY2s6OmNyZWF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDQ2
YWVlZGUuLmYzOTQyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMzcwLDYg
KzM3MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAg
ICB2b2lkIGVuYWJsZU1vY2tNZWRpYUVuZHBvaW50KCk7CiAgICAgdm9pZCBlbmFibGVNb2NrUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyKCk7CiAgICAgdm9pZCBzZXRNb2NrTWVkaWFDYXB0dXJlRGV2
aWNlc0VuYWJsZWQoYm9vbCk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273177</attachid>
            <date>2016-03-07 07:29:09 -0800</date>
            <delta_ts>2016-03-07 13:24:53 -0800</delta_ts>
            <desc>Candidate for landing (rebased)</desc>
            <filename>mepc-create-offer_4.patch</filename>
            <type>text/plain</type>
            <size>106562</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MWIyMDc5Li4wODA5YTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDMt
MDcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFdlYlJUQzogSW1wbGVtZW50IE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
T2ZmZXIoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uIGFuZCBKZXIgTm9ibGUu
CisKKyAgICAgICAgVGhlIG91dHB1dCBTRFAgZnJvbSBjcmVhdGVPZmZlcigpIGlzIHByb2Nlc3Nl
ZCBieSB2ZXJpZnlpbmcgYWxsIHZhcmlhYmxlCisgICAgICAgIGlkZW50aWZpZXJzLCBzdWNoIGFz
IHNlc3Npb24gYW5kIHVzZXIgaWQsIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoCisgICAgICAgIHBy
ZWRlZmluZWQgdmFsdWVzIHRvIG1ha2UgdGhlIFNEUCBjb21wYXJhYmxlIHdpdGggYW4gZXhwZWN0
ZWQgcmVzdWx0LgorCisgICAgICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRo
ZSBtYWMgcG9ydCB1bnRpbCBzdXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3Nv
ciBKYXZhU2NyaXB0IHJlc291cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9m
ZmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDE2LTAzLTA3ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtjc3MtZ3JpZF0gQWRkIG1pc3NpbmcgdGVzdCBmb3IgZ3JpZC10ZW1wbGF0
ZSBzaG9ydGhhbmQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXItZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWVlMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LWluc3BlY3Qtb2ZmZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNzYgQEAKK0luc3BlY3QgdGhl
IHJlc3VsdCBvZiBSVENQZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcigpCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIEdvdCBvZmZlcgorPT09IFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiA9PT0KK3R5cGU6IG9mZmVyLCBzZHA6Cit2PTAKK289LSB7c2Vzc2lvbi1pZDpPS30gMCBJ
TiBJUDQgMTI3LjAuMC4xCitzPS0KK3Q9MCAwCithPW1zaWQtc2VtYW50aWM6V01TIHttZWRpYS1z
dHJlYW0taWQ6T0t9CittPWF1ZGlvIDkgVURQL1RMUy9SVFAvU0FWUEYgMTExIDggMAorYz1JTiBJ
UDQgMC4wLjAuMAorYT1ydGNwLW11eAorYT1zZW5kcmVjdgorYT1ydHBtYXA6MTExIE9QVVMvNDgw
MDAvMgorYT1ydHBtYXA6OCBQQ01BLzgwMDAKK2E9cnRwbWFwOjAgUENNVS84MDAwCithPXNzcmM6
e3NzcmM6T0t9IGNuYW1lOntjbmFtZTpPS30KK2E9bXNpZDp7bWVkaWEtc3RyZWFtLWlkOk9LfSB7
bWVkaWEtc3RyZWFtLXRyYWNrLWlkOk9LfQorYT1pY2UtdWZyYWc6e2ljZS11ZnJhZzpPS30KK2E9
aWNlLXB3ZDp7aWNlLXBhc3N3b3JkOk9LfQorYT1maW5nZXJwcmludDpzaGEtMjU2IDhCOjg3OjA5
OjhBOjVEOkMyOkYzOjMzOkVGOkM1OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3
OjQ2OjNCOjFCOkNFOjg0Ojk4OkREOjhFOkFGOjdCCithPXNldHVwOmFjdHBhc3MKKz09PQorCitQ
QVNTIEdvdCBvZmZlcgorPT09IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiA9PT0KK3R5cGU6IG9mZmVy
LCBzZHA6Cit2PTAKK289LSB7c2Vzc2lvbi1pZDpPS30gMSBJTiBJUDQgMTI3LjAuMC4xCitzPS0K
K3Q9MCAwCithPW1zaWQtc2VtYW50aWM6V01TIHttZWRpYS1zdHJlYW0taWQ6T0t9CittPWF1ZGlv
IDkgVURQL1RMUy9SVFAvU0FWUEYgMTExIDggMAorYz1JTiBJUDQgMC4wLjAuMAorYT1ydGNwLW11
eAorYT1zZW5kcmVjdgorYT1ydHBtYXA6MTExIE9QVVMvNDgwMDAvMgorYT1ydHBtYXA6OCBQQ01B
LzgwMDAKK2E9cnRwbWFwOjAgUENNVS84MDAwCithPXNzcmM6e3NzcmM6T0t9IGNuYW1lOntjbmFt
ZTpPS30KK2E9bXNpZDp7bWVkaWEtc3RyZWFtLWlkOk9LfSB7bWVkaWEtc3RyZWFtLXRyYWNrLWlk
Ok9LfQorYT1pY2UtdWZyYWc6e2ljZS11ZnJhZzpPS30KK2E9aWNlLXB3ZDp7aWNlLXBhc3N3b3Jk
Ok9LfQorYT1maW5nZXJwcmludDpzaGEtMjU2IDhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVGOkM1
OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4OkRE
OjhFOkFGOjdCCithPXNldHVwOmFjdHBhc3MKK209dmlkZW8gOSBVRFAvVExTL1JUUC9TQVZQRiAx
MDMgMTAwIDEyMAorYz1JTiBJUDQgMC4wLjAuMAorYT1ydGNwLW11eAorYT1zZW5kcmVjdgorYT1y
dHBtYXA6MTAzIEgyNjQvOTAwMDAKK2E9cnRwbWFwOjEwMCBWUDgvOTAwMDAKK2E9cnRwbWFwOjEy
MCBSVFgvOTAwMDAKK2E9Zm10cDoxMDMgcGFja2V0aXphdGlvbi1tb2RlPTEKK2E9Zm10cDoxMjAg
YXB0PTEwMDtydHgtdGltZT0yMDAKK2E9cnRjcC1mYjoxMDAgbmFjaworYT1ydGNwLWZiOjEwMyBu
YWNrIHBsaQorYT1ydGNwLWZiOjEwMCBuYWNrIHBsaQorYT1ydGNwLWZiOjEwMyBjY20gZmlyCith
PXJ0Y3AtZmI6MTAwIGNjbSBmaXIKK2E9c3NyYzp7c3NyYzpPS30gY25hbWU6e2NuYW1lOk9LfQor
YT1tc2lkOnttZWRpYS1zdHJlYW0taWQ6T0t9IHttZWRpYS1zdHJlYW0tdHJhY2staWQ6T0t9Cith
PWljZS11ZnJhZzp7aWNlLXVmcmFnOk9LfQorYT1pY2UtcHdkOntpY2UtcGFzc3dvcmQ6T0t9Cith
PWZpbmdlcnByaW50OnNoYS0yNTYgOEI6ODc6MDk6OEE6NUQ6QzI6RjM6MzM6RUY6QzU6QjE6RjY6
ODQ6M0E6M0Q6RDY6QTM6RTI6OUM6MTc6NEM6RTc6NDY6M0I6MUI6Q0U6ODQ6OTg6REQ6OEU6QUY6
N0IKK2E9c2V0dXA6YWN0cGFzcworPT09CisKK1BBU1MgRW5kIG9mIHByb21pc2UgY2hhaW4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3Bl
Y3Qtb2ZmZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24taW5zcGVjdC1vZmZlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJkMWMxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbApAQCAtMCwwICsxLDE0MSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHNj
cmlwdD4KKyAgICAgICAgICAgIHZhciBzdHJlYW07CisgICAgICAgICAgICB2YXIgYXVkaW9UcmFj
azsKKyAgICAgICAgICAgIHZhciB2aWRlb1RyYWNrOworICAgICAgICAgICAgdmFyIG1lZGlhRGVz
Y3JpcHRpb25WYXJpYWJsZXMgPSBbXTsKKworICAgICAgICAgICAgZGVzY3JpcHRpb24oIkluc3Bl
Y3QgdGhlIHJlc3VsdCBvZiBSVENQZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcigpIik7CisKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLnNldFVzZXJNZWRpYVBlcm1pc3Npb24odHJ1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhl
IHRlc3RSdW5uZXIiKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIHBjID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9u
KHtpY2VTZXJ2ZXJzOlt7dXJsczonc3R1bjpmb28uY29tJ31dfSk7CisKKyAgICAgICAgICAgIG5h
dmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgImF1ZGlvIjogdHJ1ZSwgInZpZGVv
IjogdHJ1ZSB9KQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHMpIHsKKyAgICAgICAgICAg
ICAgICBzdHJlYW0gPSBzOworICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2sgPSBzdHJlYW0uZ2V0
QXVkaW9UcmFja3MoKVswXTsKKyAgICAgICAgICAgICAgICB2aWRlb1RyYWNrID0gc3RyZWFtLmdl
dFZpZGVvVHJhY2tzKClbMF07CisKKyAgICAgICAgICAgICAgICBwYy5hZGRUcmFjayhhdWRpb1Ry
YWNrLCBzdHJlYW0pOworICAgICAgICAgICAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwor
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChvZmZlcikgeworICAg
ICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkdvdCBvZmZlciIpOworICAgICAgICAgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb25WYXJpYWJsZXMucHVzaCh7ICJ0cmFja0lkIjogYXVkaW9UcmFjay5pZCwg
InN0cmVhbUlkIjogc3RyZWFtLmlkIH0pOworICAgICAgICAgICAgICAgIHByaW50Q29tcGFyYWJs
ZVNlc3Npb25EZXNjcmlwdGlvbihvZmZlciwgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyk7CisK
KyAgICAgICAgICAgICAgICBwYy5hZGRUcmFjayh2aWRlb1RyYWNrLCBzdHJlYW0pOworICAgICAg
ICAgICAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOworICAgICAgICAgICAgfSkKKyAgICAg
ICAgICAgIC50aGVuKGZ1bmN0aW9uIChvZmZlcikgeworICAgICAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIkdvdCBvZmZlciIpOworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb25WYXJpYWJs
ZXMucHVzaCh7ICJ0cmFja0lkIjogdmlkZW9UcmFjay5pZCwgInN0cmVhbUlkIjogc3RyZWFtLmlk
IH0pOworICAgICAgICAgICAgICAgIHByaW50Q29tcGFyYWJsZVNlc3Npb25EZXNjcmlwdGlvbihv
ZmZlciwgbWVkaWFEZXNjcmlwdGlvblZhcmlhYmxlcyk7CisKKyAgICAgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJFbmQgb2YgcHJvbWlzZSBjaGFpbiIpOworICAgICAgICAgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJy
b3IpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJFcnJvciBjYXVnaHQgaW4gcHJvbWlz
ZSBjaGFpbjogIiArIGVycm9yKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBWYXJpYWJsZSBmaWVsZHMgKGUuZy4gZ2Vu
ZXJhdGVkIGlkcykgYXJlIHZlcmlmaWVkIGFuZCByZXBsYWNlZCB3aXRoIHByZWRpY3RhYmxlCisg
ICAgICAgICAgICAvLyBsYWJsZXMuIFRoZSByZXN1bHQgY2FuIGJlIGNvbXBhcmVkIHdpdGggYSBw
cmVkZWZpbmVkIGV4cGVjdGVkIG91dHB1dC4KKyAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50Q29t
cGFyYWJsZVNlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24sIG1kZXNjVmFyaWFi
bGVzKSB7CisgICAgICAgICAgICAgICAgZGVidWcoIj09PSBSVENTZXNzaW9uRGVzY3JpcHRpb24g
PT09Iik7CisgICAgICAgICAgICAgICAgZGVidWcoInR5cGU6ICIgKyBzZXNzaW9uRGVzY3JpcHRp
b24udHlwZSArICIsIHNkcDoiKTsKKworICAgICAgICAgICAgICAgIHZhciBzZHAgPSBzZXNzaW9u
RGVzY3JpcHRpb24uc2RwOworCisgICAgICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgIm9saW5lIjogIl5vPSgtKSAoW1xcZF0rKSAuKiQiLAorICAgICAgICAg
ICAgICAgICAgICAibXNpZHNlbWFudGljIjogIl5hPW1zaWQtc2VtYW50aWM6ICpXTVMgLiokIiwK
KyAgICAgICAgICAgICAgICAgICAgIm1saW5lIjogIl5tPS4qJCIsCisgICAgICAgICAgICAgICAg
ICAgICJjbmFtZSI6ICJeYT1zc3JjOihcXGQrKSBjbmFtZTooW1xcdysvXFwtQFxcLlxce1xcfV0r
KS4qJCIsCisgICAgICAgICAgICAgICAgICAgICJtc2lkIjogIl5hPShzc3JjOlxcZCsgKT9tc2lk
OihbXFx3Ky9cXC09XSspICsoW1xcdysvXFwtPV0rKS4qJCIsCisgICAgICAgICAgICAgICAgICAg
ICJpY2V1ZnJhZyI6ICJeYT1pY2UtdWZyYWc6KFtcXHcrL10qKS4qJCIsCisgICAgICAgICAgICAg
ICAgICAgICJpY2Vwd2QiOiAiXmE9aWNlLXB3ZDooW1xcdysvXSo9KikuKiQiLAorICAgICAgICAg
ICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB2YXIgbWRlc2NJbmRleCA9IC0xOworICAgICAg
ICAgICAgICAgIHNkcC5zcGxpdCgiXHJcbiIpLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKGxpbmUsIHJlZ2V4cC5tbGluZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE1lZGlhIGJsb2NrICgiaGVhZGVyIiBsaW5lKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWRlc2NJbmRleCsrOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1kZXNjSW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXNz
aW9uIGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xpbmU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvbGluZSA9IG1hdGNoKGxpbmUsIHJlZ2V4cC5vbGluZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShvbGluZVsyXSwg
dmVyaWZpZWQoInNlc3Npb24taWQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChtYXRjaChsaW5lLCByZWdleHAubXNpZHNlbWFudGljKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1kZXNjVmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHZhcmlhYmxlcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKHZhcmlh
Ymxlcy5zdHJlYW1JZCwgdmVyaWZpZWQoIm1lZGlhLXN0cmVhbS1pZCIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lZGlhIGJs
b2NrIChjb250ZW50IGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zaWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaWNldWZyYWc7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWNlcHdkOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY25hbWUgPSBtYXRjaChsaW5lLCByZWdleHAuY25h
bWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShj
bmFtZVsxXSwgdmVyaWZpZWQoInNzcmMiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZShjbmFtZVsyXSwgdmVyaWZpZWQoImNuYW1lIikpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zaWQgPSBtYXRjaChsaW5lLCByZWdleHAu
bXNpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXNpZFsxXSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtc2lkWzFdLCB2
ZXJpZmllZCgic3NyYyIpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YXJp
YWJsZXMgPSBtZGVzY1ZhcmlhYmxlc1ttZGVzY0luZGV4XTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBtZWRpYVN0cmVhbUlkID0gbXNpZFsyXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RyZWFtSWRWZXJpZmllZCA9IHZlcmlmaWVkKCJtZWRpYS1zdHJlYW0t
aWQiLCBtZWRpYVN0cmVhbUlkICE9IHZhcmlhYmxlcy5zdHJlYW1JZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShtZWRpYVN0cmVhbUlkLCBzdHJlYW1J
ZFZlcmlmaWVkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVN0cmVh
bVRyYWNrSWQgPSBtc2lkWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFj
a0lkVmVyaWZpZWQgPSB2ZXJpZmllZCgibWVkaWEtc3RyZWFtLXRyYWNrLWlkIiwgbWVkaWFTdHJl
YW1UcmFja0lkICE9IHZhcmlhYmxlcy50cmFja0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG1lZGlhU3RyZWFtVHJhY2tJZCwgdHJhY2tJZFZlcmlm
aWVkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpY2V1ZnJhZyA9IG1h
dGNoKGxpbmUsIHJlZ2V4cC5pY2V1ZnJhZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZSA9IGxpbmUucmVwbGFjZShpY2V1ZnJhZ1sxXSwgdmVyaWZpZWQoImljZS11ZnJhZyIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGljZXB3ZCA9IG1hdGNoKGxpbmUsIHJl
Z2V4cC5pY2Vwd2QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJl
cGxhY2UoaWNlcHdkWzFdLCB2ZXJpZmllZCgiaWNlLXBhc3N3b3JkIikpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWJ1ZyhsaW5lKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGRlYnVnKCI9PT0iKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZygiIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHZlcmlmaWVkKG5hbWUsIGlzRmFpbHVyZSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAieyIgKyBuYW1lICsgIjoiICsgKGlzRmFpbHVyZSA/
ICJGQUlMRUQiIDogIk9LIikgKyAifSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1
bmN0aW9uIG1hdGNoKGRhdGEsIHBhdHRlcm4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YS5tYXRjaChuZXcgUmVnRXhwKHBhdHRlcm4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAgICAgd2luZG93LnN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgICA8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDkxOGE4Y2IuLmNjZmJkOTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0
RXhwZWN0YXRpb25zCkBAIC0xNzgsNiArMTc4LDcgQEAgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1zdGF0cy5odG1sCiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXN0YXRzU2VsZWN0b3IuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1z
dGFibGUuaHRtbAogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5odG1sCitmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAogCiAjIEFz
c2VydHMgaW4gZGVidWcuCiBbIERlYnVnIF0gZmFzdC9pbWFnZXMvbGFyZ2Utc2l6ZS1pbWFnZS1j
cmFzaC5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDRmZWJjNDkuLmZmZTI5
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05NDAsNiArOTQwLDcgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCiAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1Jlc3BvbnNlLmNwcAogICAgIE1vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDVHJhY2tFdmVudC5jcHAKKyAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL1NvdXJjZUluZm8uY3BwCiAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDb250cm9sbGVyLmNwcAogICAgIE1vZHVsZXMv
bWVkaWFzdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcApAQCAtMjI5Nyw2ICsyMjk4
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL21vY2svRGV2aWNlT3JpZW50
YXRpb25DbGllbnRNb2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRN
b2NrLmNwcAogICAgIHBsYXRmb3JtL21vY2svTWVkaWFDb25zdHJhaW50c01vY2suY3BwCisgICAg
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKICAgICBwbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcAogICAgIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlci5jcHAKQEAgLTM1ODMsNiArMzU4NSwyMiBAQCBpZiAoV2ViQ29yZV9VU0VSX0FHRU5U
X1NDUklQVFMpCiAgICAgQUREX1NPVVJDRV9XRUJDT1JFX0RFUklWRURfREVQRU5ERU5DSUVTKCR7
V2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQVFNfREVQRU5ERU5DSUVTfSBVc2VyQWdlbnRTY3JpcHRz
RGF0YS5jcHAgVXNlckFnZW50U2NyaXB0cy5oKQogZW5kaWYgKCkKIAoraWYgKFdlYkNvcmVfU0RQ
X1BST0NFU1NPUl9TQ1JJUFRTKQorICAgICMgTmVjZXNzYXJ5IHZhcmlhYmxlczoKKyAgICAjIFdl
YkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTIGNvbnRhaW5pbmcgdGhlIEphdmFTY3JpcHQgc291
cmNlcyBsaXN0CisgICAgIyBXZWJDb3JlX1NEUF9QUk9DRVNTT1JfU0NSSVBUU19ERVBFTkRFTkNJ
RVMgY29udGFpbmluZyB0aGUgc291cmNlIGZpbGUgdGhhdCB3aWxsIGxvYWQgdGhlIHNjcmlwdHMg
dG8gYWRkIHRoZSBwcm9wZXIKKyAgICAjICAgZGVwZW5kZW5jeSBhbmQgaGF2aW5nIHRoZW0gYnVp
bHQgYXQgdGhlIHJpZ2h0IG1vbWVudAorCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKAorICAgICAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NEUFByb2Nlc3NvclNjcmlw
dHNEYXRhLmNwcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2Ny
aXB0cy5oCisgICAgICAgIE1BSU5fREVQRU5ERU5DWSAke1dFQkNPUkVfRElSfS9TY3JpcHRzL21h
a2UtanMtZmlsZS1hcnJheXMucHkKKyAgICAgICAgREVQRU5EUyAke1dlYkNvcmVfU0RQX1BST0NF
U1NPUl9TQ1JJUFRTfQorICAgICAgICBDT01NQU5EICJQWVRIT05QQVRIPSR7SmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVJ9IiAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9TY3Jp
cHRzL21ha2UtanMtZmlsZS1hcnJheXMucHkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L1NEUFByb2Nlc3NvclNjcmlwdHMuaCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQ
UHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwICR7V2ViQ29yZV9TRFBfUFJPQ0VTU09SX1NDUklQVFN9
CisgICAgICAgIFZFUkJBVElNKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEuY3BwKQor
ICAgIEFERF9TT1VSQ0VfV0VCQ09SRV9ERVJJVkVEX0RFUEVOREVOQ0lFUygke1dlYkNvcmVfU0RQ
X1BST0NFU1NPUl9TQ1JJUFRTX0RFUEVOREVOQ0lFU30gU0RQUHJvY2Vzc29yU2NyaXB0c0RhdGEu
Y3BwIFNEUFByb2Nlc3NvclNjcmlwdHMuaCkKK2VuZGlmICgpCisKICMgR2VuZXJhdGUgcGx1Zy1p
biByZXNvdXJjZXMKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L1BsdWdJbnNSZXNvdXJjZXNEYXRhLmNwcCAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vUGx1Z0luc1Jlc291cmNlcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE0ZWMz
OS4uNDc5ZTNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxNi0wMy0wNyAgQWRh
bSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgV2Vi
UlRDOiBJbXBsZW1lbnQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlcigp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ4NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24gYW5kIEplciBOb2JsZS4KKworICAg
ICAgICAtIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjogSW5pdGlhbCBpbXBsZW1lbnRhdGlv
biBvZiBjcmVhdGVPZmZlcigpCisgICAgICAgIGFkZGVkLiBjcmVhdGVPZmZlcigpIGlzIHNwbGl0
IHVwIGludG8gYSBzeW5jaHJvbm91cyBwYXJ0LCBhbmQgYQorICAgICAgICBzY2hlZHVsZWQgdGFz
ay4gVGhlIHRhc2sgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBpbmZvcm1hdGlvbiwgcmVxdWlyaW5n
CisgICAgICAgIHNvbWUgYW1vdW50IG9mIHdvcmssIHN1Y2ggYXMgdGhlIERUTFMgZmluZ2VycHJp
bnQgaXMgYXZhaWxhYmxlLiBPdGhlcgorICAgICAgICBhc3luYyBBUEkgZnVuY3Rpb25zIHdpbGwg
YWxzbyBmb2xsb3cgdGhpcyBwYXR0ZXJuLgorCisgICAgICAgIC0gU0RQUHJvY2Vzc29yIChhZGRl
ZCk6IFRoZSBTRFBQcm9jZXNzb3JzIHBhcnNlcyBTRFAgdG8gYQorICAgICAgICBNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gb2JqZWN0IGFuZCBnZW5lcmF0ZXMgU0RQIGluIHRoZQor
ICAgICAgICByZXZlcnNlIGRpcmVjdGlvbi4gQW55IFNEUCBzdHJpbmcgaGFuZGxpbmcgaXMgY29u
ZmluZWQgdG8gdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBhbmQgYWxsIGNvbmZpZ3VyYXRpb24g
b2YgdGhlIG1lZGlhIHNlc3Npb24gaXMgZG9uZSB2aWEgdGhlCisgICAgICAgIE1lZGlhRW5kcG9p
bnRTZXNzaW9uQ29uZmlndXJhdGlvbiBvYmplY3QuCisKKyAgICAgICAgVGhlIFNEUCBwYXJzZXIg
YW5kIGdlbmVyYXRvciBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGFuZAorICAg
ICAgICB3b3JrcyB3aXRoIEpTT04gKFNEUC0+SlNPTiwgSlNPTi0+U0RQKS4gVGhlIFNEUFByb2Nl
c3NvciBydW5zIEpTIGluIGFuCisgICAgICAgIGlzb2xhdGVkIHNjb3BlIGFuZCBjb252ZXJ0cyBK
U09OIHRvIGEgTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uCisgICAgICAgIG9iamVj
dCBhbmQgdGhlIHJldmVyc2UuIFVzaW5nIEpTT04gc2lnbmFsaW5nIChub25zdGFuZGFyZCkgY2Fu
IGJlCisgICAgICAgIGhlbHBmdWwgZHVyaW5nIGRlYnVnZ2luZy4KKworICAgICAgICAtIE1vY2tN
ZWRpYUVuZHBvaW50IChhZGRlZCk6IE1vY2sgTWVkaWFFbmRwb2ludCBpbXBsZW1lbnRhdGlvbiB3
aXRoCisgICAgICAgIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgb2ZmZXJzLiBEVExTIGluZm9ybWF0
aW9uLCBzdWNoIGFzIGZpbmdlcnByaW50LAorICAgICAgICBpcyBoYXJkIGNvZGVkIHRvIGZhY2ls
aXRhdGUgdGVzdGluZyB3aXRoIGV4cGVjdGVkIHZhbHVlcy4KKworICAgICAgICBUZXN0OiBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbAorCisgICAg
ICAgIFRoZSB0ZXN0IGlzIGN1cnJlbnRseSBza2lwcGVkIG9uIHRoZSBtYWMgcG9ydCB1bnRpbCBz
dXBwb3J0IHRvIHJlYWQgdGhlCisgICAgICAgIFNEUFByb2Nlc3NvciBKYXZhU2NyaXB0IHJlc291
cmNlIGlzIGFkZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6cHJvbWlz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6
V3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6cmFu
ZG9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlv
bjo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
RW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnN0YXJ0UnVubmluZ1Rhc2tzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlclRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3REdGxz
RmluZ2VycHJpbnQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2lu
dFBlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6U0RQUHJv
Y2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbmRpZGF0ZU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uZmln
dXJhdGlvbkZyb21KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OmljZUNhbmRpZGF0ZUZyb21KU09O
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbmZpZ3VyYXRpb25Ub0pTT04pOgorICAgICAgICAoV2Vi
Q29yZTo6aWNlQ2FuZGlkYXRlVG9KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nv
cjo6Z2VuZXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpwYXJzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OnBhcnNlQ2FuZGlkYXRlTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vc2RwLmpzOiBBZGRlZC4KKyAgICAgICAgKG1hdGNoKToKKyAgICAgICAgKGFk
ZERlZmF1bHRzKToKKyAgICAgICAgKGZpbGxUZW1wbGF0ZSk6CisgICAgICAgIChTRFAucGFyc2Up
OgorICAgICAgICAoU0RQLmdlbmVyYXRlKToKKyAgICAgICAgKFNEUC5nZW5lcmF0ZUNhbmRpZGF0
ZUxpbmUpOgorICAgICAgICAoaGFzQWxsUHJvcGVydGllcyk6CisgICAgICAgIChTRFAudmVyaWZ5
T2JqZWN0KToKKyAgICAgICAgKGdlbmVyYXRlKToKKyAgICAgICAgKHBhcnNlKToKKyAgICAgICAg
KGdlbmVyYXRlQ2FuZGlkYXRlTGluZSk6CisgICAgICAgIChwYXJzZUNhbmRpZGF0ZUxpbmUpOgor
ICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZTo6c2NyaXB0U3Ry
aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JTY3JpcHRS
ZXNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpzY3JpcHRTdHJpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01l
ZGlhRW5kcG9pbnQ6Ok1vY2tNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tN
ZWRpYUVuZHBvaW50Ojp+TW9ja01lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OmdlbmVyYXRlRHRsc0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a01lZGlhRW5kcG9pbnQ6OmdldERlZmF1bHRBdWRpb1BheWxvYWRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpnZXREZWZhdWx0VmlkZW9QYXlsb2Fkcyk6CisgICAgICAg
IChXZWJDb3JlOjpNb2NrTWVkaWFFbmRwb2ludDo6dXBkYXRlUmVjZWl2ZUNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVNlbmRDb25maWd1
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVD
YW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRW5kcG9pbnQ6OnJlcGxhY2VT
ZW5kU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYUVuZHBvaW50OjpzdG9wKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYUVuZHBvaW50Lmg6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6SW50ZXJuYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6ZW5hYmxlTW9ja01l
ZGlhRW5kcG9pbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisKIDIwMTYtMDMt
MDcgIE1pZ3VlbCBHb21leiAgPG1hZ29tZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbVGV4dHVy
ZU1hcHBlcl0gW0JpdG1hcFRleHR1cmVQb29sXSBVc2UgYXBwcm9wcmlhdGUgbGlzdCBzaXplIHdo
ZW4gZnJlZWluZyB0ZXh0dXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmlu
ZGV4IGVkNjgzZDQuLjhlZTMwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5j
cHAKQEAgLTM1LDcgKzM1LDE0IEBACiAKICNpbmNsdWRlICJET01FcnJvci5oIgogI2luY2x1ZGUg
IkpTRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIk1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtVHJhY2suaCIKKyNpbmNsdWRlICJSVENPZmZlckFuc3dlck9wdGlvbnMuaCIKKyNp
bmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJTRFBQcm9jZXNzb3IuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4LDE4ICs1NSwxMTQgQEAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZU1lZGlhRW5kcG9pbnRQZWVyQ29u
bmVjdGlvbigKIAogQ3JlYXRlUGVlckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Y3JlYXRlID0gY3JlYXRlTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOwogCitjbGFz
cyBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdy
YXBwZWRTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZT4gY3JlYXRlKFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2UmJiBwcm9taXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICphZG9wdFJlZihu
ZXcgV3JhcHBlZFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UoV1RGTW92ZShwcm9taXNlKSkpOwor
ICAgIH0KKworICAgIFNlc3Npb25EZXNjcmlwdGlvblByb21pc2UmIHByb21pc2UoKSB7IHJldHVy
biBtX3Byb21pc2U7IH0KKworcHJpdmF0ZToKKyAgICBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9u
UHJvbWlzZShTZXNzaW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKKyAgICAgICAgOiBt
X3Byb21pc2UoV1RGTW92ZShwcm9taXNlKSkKKyAgICB7IH0KKworICAgIFNlc3Npb25EZXNjcmlw
dGlvblByb21pc2UgbV9wcm9taXNlOworfTsKKworc3RhdGljIFN0cmluZyByYW5kb21TdHJpbmco
c2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IGNlaWwobGVuZ3RoICog
MyAvIDQpOworICAgIHVuc2lnbmVkIGNoYXIgcmFuZG9tVmFsdWVzW3NpemVdOworICAgIGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHJhbmRvbVZhbHVlcywgc2l6ZSk7CisgICAgcmV0dXJu
IGJhc2U2NEVuY29kZShyYW5kb21WYWx1ZXMsIHNpemUpOworfQorCiBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246Ok1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbihQZWVyQ29ubmVjdGlvbkJh
Y2tlbmRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2Rw
UHJvY2Vzc29yKHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+KG5ldyBTRFBQcm9jZXNzb3Io
bV9jbGllbnQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpKQorICAgICwgbV9jbmFtZShyYW5k
b21TdHJpbmcoMTYpKQorICAgICwgbV9pY2VVZnJhZyhyYW5kb21TdHJpbmcoNCkpCisgICAgLCBt
X2ljZVBhc3N3b3JkKHJhbmRvbVN0cmluZygyMikpCit7CisgICAgbV9tZWRpYUVuZHBvaW50ID0g
TWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKTsKKyAgICBBU1NFUlQobV9tZWRpYUVuZHBvaW50
KTsKKworICAgIG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHMgPSBtX21lZGlhRW5kcG9pbnQtPmdldERl
ZmF1bHRBdWRpb1BheWxvYWRzKCk7CisgICAgbV9kZWZhdWx0VmlkZW9QYXlsb2FkcyA9IG1fbWVk
aWFFbmRwb2ludC0+Z2V0RGVmYXVsdFZpZGVvUGF5bG9hZHMoKTsKKworICAgIC8vIFRhc2tzIChz
ZWUgcnVuVGFzaygpKSB3aWxsIGJlIGRlZmVycmVkIHVudGlsIHdlIGdldCB0aGUgRFRMUyBmaW5n
ZXJwcmludC4KKyAgICBtX21lZGlhRW5kcG9pbnQtPmdlbmVyYXRlRHRsc0luZm8oKTsKK30KKwor
dm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJ1blRhc2soc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHRhc2spCit7CisgICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50LmlzTnVsbCgpKSB7Cisg
ICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQgc2luY2UgaXQgd2ls
bCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KKyAgICAgICAgQVNTRVJUKCFt
X2luaXRpYWxEZWZlcnJlZFRhc2spOworICAgICAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2sgPSB0
YXNrOworICAgIH0gZWxzZQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKHRhc2spOworfQorCit2
b2lkIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6c3RhcnRSdW5uaW5nVGFza3MoKQogewot
ICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOworICAgIGlmICghbV9pbml0aWFsRGVmZXJyZWRUYXNr
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luaXRpYWxEZWZlcnJlZFRhc2soKTsKKyAgICBt
X2luaXRpYWxEZWZlcnJlZFRhc2sgPSBudWxscHRyOwogfQogCiB2b2lkIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zLCBTZXNz
aW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3B0
aW9ucyk7CisgICAgY29uc3QgUmVmUHRyPFJUQ09mZmVyT3B0aW9ucz4gcHJvdGVjdGVkT3B0aW9u
cyA9ICZvcHRpb25zOworICAgIFJlZlB0cjxXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlz
ZT4gd3JhcHBlZFByb21pc2UgPSBXcmFwcGVkU2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZTo6Y3Jl
YXRlKFdURk1vdmUocHJvbWlzZSkpOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBydW5U
YXNrKFt0aGlzLCBwcm90ZWN0ZWRPcHRpb25zLCB3cmFwcGVkUHJvbWlzZV0oKSB7CisgICAgICAg
IGNyZWF0ZU9mZmVyVGFzaygqcHJvdGVjdGVkT3B0aW9ucywgd3JhcHBlZFByb21pc2UtPnByb21p
c2UoKSk7CisgICAgfSk7Cit9CiAKLSAgICBwcm9taXNlLnJlamVjdChET01FcnJvcjo6Y3JlYXRl
KCJOb3RTdXBwb3J0ZWRFcnJvciIpKTsKK3ZvaWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
OjpjcmVhdGVPZmZlclRhc2soUlRDT2ZmZXJPcHRpb25zJiwgU2Vzc2lvbkRlc2NyaXB0aW9uUHJv
bWlzZSYgcHJvbWlzZSkKK3sKKyAgICBBU1NFUlQoIW1fZHRsc0ZpbmdlcnByaW50LmlzRW1wdHko
KSk7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uU25hcHNob3QgPSBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpOworCisgICAgY29uZmlndXJhdGlvblNuYXBzaG90LT5zZXRTZXNzaW9uVmVyc2lvbiht
X3NkcFNlc3Npb25WZXJzaW9uKyspOworCisgICAgUnRwU2VuZGVyVmVjdG9yIHNlbmRlcnMgPSBt
X2NsaWVudC0+Z2V0U2VuZGVycygpOworCisgICAgLy8gQWRkIG1lZGlhIGRlc2NyaXB0aW9ucyBm
b3Igc2VuZGVycy4KKyAgICBmb3IgKGF1dG8mIHNlbmRlciA6IHNlbmRlcnMpIHsKKyAgICAgICAg
UmVmUHRyPFBlZXJNZWRpYURlc2NyaXB0aW9uPiBtZWRpYURlc2NyaXB0aW9uID0gUGVlck1lZGlh
RGVzY3JpcHRpb246OmNyZWF0ZSgpOworICAgICAgICBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjayA9
IHNlbmRlci0+dHJhY2soKTsKKworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNZWRpYVN0
cmVhbUlkKHNlbmRlci0+bWVkaWFTdHJlYW1JZHMoKVswXSk7CisgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldE1lZGlhU3RyZWFtVHJhY2tJZCh0cmFjay0+aWQoKSk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPnNldFR5cGUodHJhY2stPmtpbmQoKSk7CisgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldFBheWxvYWRzKHRyYWNrLT5raW5kKCkgPT0gImF1ZGlvIiA/IG1fZGVmYXVsdEF1
ZGlvUGF5bG9hZHMgOiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzKTsKKyAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbi0+c2V0RHRsc0ZpbmdlcnByaW50SGFzaEZ1bmN0aW9uKG1fZHRsc0ZpbmdlcnByaW50
RnVuY3Rpb24pOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXREdGxzRmluZ2VycHJpbnQo
bV9kdGxzRmluZ2VycHJpbnQpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRDbmFtZSht
X2NuYW1lKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+YWRkU3NyYyhjcnlwdG9ncmFwaGlj
YWxseVJhbmRvbU51bWJlcigpKTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlVWZy
YWcobV9pY2VVZnJhZyk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVBhc3N3b3Jk
KG1faWNlUGFzc3dvcmQpOworCisgICAgICAgIGNvbmZpZ3VyYXRpb25TbmFwc2hvdC0+YWRkTWVk
aWFEZXNjcmlwdGlvbihXVEZNb3ZlKG1lZGlhRGVzY3JpcHRpb24pKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgc2RwU3RyaW5nOworICAgIFNEUFByb2Nlc3Nvcjo6UmVzdWx0IHJlc3VsdCA9IG1fc2Rw
UHJvY2Vzc29yLT5nZW5lcmF0ZSgqY29uZmlndXJhdGlvblNuYXBzaG90LCBzZHBTdHJpbmcpOwor
ICAgIGlmIChyZXN1bHQgIT0gU0RQUHJvY2Vzc29yOjpSZXN1bHQ6OlN1Y2Nlc3MpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3IgaW50ZXJuYWwgZXJyb3IiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHByb21pc2UucmVzb2x2ZShSVENTZXNzaW9uRGVzY3JpcHRpb246
OmNyZWF0ZSgib2ZmZXIiLCBzZHBTdHJpbmcpKTsKIH0KIAogdm9pZCBNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb246OmNyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiBvcHRpb25zLCBTZXNz
aW9uRGVzY3JpcHRpb25Qcm9taXNlJiYgcHJvbWlzZSkKQEAgLTE3OSwxMCArMjgyLDEwIEBAIHZv
aWQgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpnb3REdGxzRmluZ2VycHJpbnQoY29uc3Qg
U3RyaW5nJiBmaW5nZXJwcmludCwKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgVU5VU0VEX1BBUkFNKGZpbmdlcnByaW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmluZ2VycHJp
bnRGdW5jdGlvbik7CisgICAgbV9kdGxzRmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKKyAgICBt
X2R0bHNGaW5nZXJwcmludEZ1bmN0aW9uID0gZmluZ2VycHJpbnRGdW5jdGlvbjsKIAotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgc3RhcnRSdW5uaW5nVGFza3MoKTsKIH0KIAogdm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OmdvdEljZUNhbmRpZGF0ZSh1bnNpZ25lZCBtZGVzY0lu
ZGV4LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYmIGNhbmRpZGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbi5oCmluZGV4IGY2ZDI1NmEuLmYxNWU3NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmgKQEAgLTQyLDYgKzQyLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFNEUFByb2Nlc3NvcjsKKwordHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPFJUQ1J0cFNlbmRlcj4+IFJ0cFNlbmRlclZlY3RvcjsKIAogY2xhc3MgTWVk
aWFFbmRwb2ludFBlZXJDb25uZWN0aW9uIDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCwg
cHVibGljIE1lZGlhRW5kcG9pbnRDbGllbnQgewogcHVibGljOgpAQCAtNzQsMTEgKzc3LDMzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRl
IHsgbm90SW1wbGVtZW50ZWQoKTsgfTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHJ1blRhc2soc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KTsKKyAgICB2b2lkIHN0YXJ0UnVubmluZ1Rhc2tzKCk7CisKKyAg
ICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhSVENPZmZlck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6
U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYpOworCiAgICAgLy8gTWVkaWFFbmRwb2ludENsaWVu
dAogICAgIHZvaWQgZ290RHRsc0ZpbmdlcnByaW50KGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnQs
IGNvbnN0IFN0cmluZyYgZmluZ2VycHJpbnRGdW5jdGlvbikgb3ZlcnJpZGU7CiAgICAgdm9pZCBn
b3RJY2VDYW5kaWRhdGUodW5zaWduZWQgbWRlc2NJbmRleCwgUmVmUHRyPEljZUNhbmRpZGF0ZT4m
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkb25lR2F0aGVyaW5nQ2FuZGlkYXRlcyh1bnNpZ25lZCBt
ZGVzY0luZGV4KSBvdmVycmlkZTsKICAgICB2b2lkIGdvdFJlbW90ZVNvdXJjZSh1bnNpZ25lZCBt
ZGVzY0luZGV4LCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4mJikgb3ZlcnJpZGU7CisKKyAg
ICBQZWVyQ29ubmVjdGlvbkJhY2tlbmRDbGllbnQqIG1fY2xpZW50OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZWRpYUVuZHBvaW50PiBtX21lZGlhRW5kcG9pbnQ7CisKKyAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gbV9pbml0aWFsRGVmZXJyZWRUYXNrOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNE
UFByb2Nlc3Nvcj4gbV9zZHBQcm9jZXNzb3I7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5
bG9hZD4+IG1fZGVmYXVsdEF1ZGlvUGF5bG9hZHM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBh
eWxvYWQ+PiBtX2RlZmF1bHRWaWRlb1BheWxvYWRzOworCisgICAgU3RyaW5nIG1fY25hbWU7Cisg
ICAgU3RyaW5nIG1faWNlVWZyYWc7CisgICAgU3RyaW5nIG1faWNlUGFzc3dvcmQ7CisgICAgU3Ry
aW5nIG1fZHRsc0ZpbmdlcnByaW50OworICAgIFN0cmluZyBtX2R0bHNGaW5nZXJwcmludEZ1bmN0
aW9uOworICAgIHVuc2lnbmVkIG1fc2RwU2Vzc2lvblZlcnNpb24geyAwIH07CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDRmMjI5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcApAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUg
IlNEUFByb2Nlc3Nvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIlNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmgiCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdEdsb2JhbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0T2JqZWN0Lmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBTVFJJTkdfRlVOQ1RJT04obmFtZSkgXAorICAg
IHN0YXRpYyBjb25zdCBTdHJpbmcmIG5hbWUjI1N0cmluZygpIFwKKyAgICB7IFwKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbmFtZSB7IEFTQ0lJTGl0ZXJhbCgj
bmFtZSkgfTsgXAorICAgICAgICByZXR1cm4gbmFtZTsgXAorICAgIH0KKworU1RSSU5HX0ZVTkNU
SU9OKGFkZHJlc3MpCitTVFJJTkdfRlVOQ1RJT04oYXB0KQorU1RSSU5HX0ZVTkNUSU9OKGNhbmRp
ZGF0ZXMpCitTVFJJTkdfRlVOQ1RJT04oY2NtZmlyKQorU1RSSU5HX0ZVTkNUSU9OKGNoYW5uZWxz
KQorU1RSSU5HX0ZVTkNUSU9OKGNsb2NrUmF0ZSkKK1NUUklOR19GVU5DVElPTihjbmFtZSkKK1NU
UklOR19GVU5DVElPTihjb21wb25lbnRJZCkKK1NUUklOR19GVU5DVElPTihkdGxzKQorU1RSSU5H
X0ZVTkNUSU9OKGVuY29kaW5nTmFtZSkKK1NUUklOR19GVU5DVElPTihmaW5nZXJwcmludCkKK1NU
UklOR19GVU5DVElPTihmaW5nZXJwcmludEhhc2hGdW5jdGlvbikKK1NUUklOR19GVU5DVElPTihm
b3VuZGF0aW9uKQorU1RSSU5HX0ZVTkNUSU9OKGljZSkKK1NUUklOR19GVU5DVElPTihtZWRpYURl
c2NyaXB0aW9ucykKK1NUUklOR19GVU5DVElPTihtZWRpYVN0cmVhbUlkKQorU1RSSU5HX0ZVTkNU
SU9OKG1lZGlhU3RyZWFtVHJhY2tJZCkKK1NUUklOR19GVU5DVElPTihtb2RlKQorU1RSSU5HX0ZV
TkNUSU9OKG11eCkKK1NUUklOR19GVU5DVElPTihuYWNrKQorU1RSSU5HX0ZVTkNUSU9OKG5hY2tw
bGkpCitTVFJJTkdfRlVOQ1RJT04ob3JpZ2luYXRvcikKK1NUUklOR19GVU5DVElPTihwYWNrZXRp
emF0aW9uTW9kZSkKK1NUUklOR19GVU5DVElPTihwYXJhbWV0ZXJzKQorU1RSSU5HX0ZVTkNUSU9O
KHBhc3N3b3JkKQorU1RSSU5HX0ZVTkNUSU9OKHBheWxvYWRzKQorU1RSSU5HX0ZVTkNUSU9OKHBv
cnQpCitTVFJJTkdfRlVOQ1RJT04ocHJpb3JpdHkpCitTVFJJTkdfRlVOQ1RJT04ocmVsYXRlZEFk
ZHJlc3MpCitTVFJJTkdfRlVOQ1RJT04ocmVsYXRlZFBvcnQpCitTVFJJTkdfRlVOQ1RJT04ocnRj
cCkKK1NUUklOR19GVU5DVElPTihydGNwQWRkcmVzcykKK1NUUklOR19GVU5DVElPTihydGNwUG9y
dCkKK1NUUklOR19GVU5DVElPTihydHhUaW1lKQorU1RSSU5HX0ZVTkNUSU9OKHNlc3Npb25JZCkK
K1NUUklOR19GVU5DVElPTihzZXNzaW9uVmVyc2lvbikKK1NUUklOR19GVU5DVElPTihzZXR1cCkK
K1NUUklOR19GVU5DVElPTihzc3JjcykKK1NUUklOR19GVU5DVElPTih0Y3BUeXBlKQorU1RSSU5H
X0ZVTkNUSU9OKHRyYW5zcG9ydCkKK1NUUklOR19GVU5DVElPTih0eXBlKQorU1RSSU5HX0ZVTkNU
SU9OKHVmcmFnKQorCitTRFBQcm9jZXNzb3I6OlNEUFByb2Nlc3NvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQorICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIoY29udGV4
dCkKK3sKK30KKworLy8gTm90ZSB0aGF0IE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlv
biBpcyBhICJmbGF0dGVyIiBzdHJ1Y3R1cmUgdGhhdCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbi4g
Rm9yCisvLyBleGFtcGxlLCB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBoYXMgYW4gImljZSIgb2Jq
ZWN0IHdoaWNoIGNvbGxlY3RzIGEgc2V0IG9mIHByb3BlcnRpZXMgdW5kZXIgYQorLy8gbmFtZXNw
YWNlLiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24gaGFzICJpY2UiLXByZWZpeGVz
IG9uIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMuCisKK3N0YXRpYyBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVDYW5kaWRhdGVPYmplY3QoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FuZGlkYXRlT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3Ry
aW5nKHR5cGVTdHJpbmcoKSwgY2FuZGlkYXRlLnR5cGUoKSk7CisgICAgY2FuZGlkYXRlT2JqZWN0
LT5zZXRTdHJpbmcoZm91bmRhdGlvblN0cmluZygpLCBjYW5kaWRhdGUuZm91bmRhdGlvbigpKTsK
KyAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIoY29tcG9uZW50SWRTdHJpbmcoKSwgY2Fu
ZGlkYXRlLmNvbXBvbmVudElkKCkpOworICAgIGNhbmRpZGF0ZU9iamVjdC0+c2V0U3RyaW5nKHRy
YW5zcG9ydFN0cmluZygpLCBjYW5kaWRhdGUudHJhbnNwb3J0KCkpOworICAgIGNhbmRpZGF0ZU9i
amVjdC0+c2V0SW50ZWdlcihwcmlvcml0eVN0cmluZygpLCBjYW5kaWRhdGUucHJpb3JpdHkoKSk7
CisgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBjYW5kaWRh
dGUuYWRkcmVzcygpKTsKKyAgICBjYW5kaWRhdGVPYmplY3QtPnNldEludGVnZXIocG9ydFN0cmlu
ZygpLCBjYW5kaWRhdGUucG9ydCgpKTsKKyAgICBpZiAoIWNhbmRpZGF0ZS50Y3BUeXBlKCkuaXNF
bXB0eSgpKQorICAgICAgICBjYW5kaWRhdGVPYmplY3QtPnNldFN0cmluZyh0Y3BUeXBlU3RyaW5n
KCksIGNhbmRpZGF0ZS50Y3BUeXBlKCkpOworICAgIGlmIChjYW5kaWRhdGUudHlwZSgpLmNvbnZl
cnRUb0FTQ0lJVXBwZXJjYXNlKCkgIT0gIkhPU1QiKSB7CisgICAgICAgIGNhbmRpZGF0ZU9iamVj
dC0+c2V0U3RyaW5nKHJlbGF0ZWRBZGRyZXNzU3RyaW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkQWRk
cmVzcygpKTsKKyAgICAgICAgY2FuZGlkYXRlT2JqZWN0LT5zZXRJbnRlZ2VyKHJlbGF0ZWRQb3J0
U3RyaW5nKCksIGNhbmRpZGF0ZS5yZWxhdGVkUG9ydCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y2FuZGlkYXRlT2JqZWN0OworfQorCitzdGF0aWMgUmVmUHRyPEljZUNhbmRpZGF0ZT4gY3JlYXRl
Q2FuZGlkYXRlKGNvbnN0IEluc3BlY3Rvck9iamVjdCYgY2FuZGlkYXRlT2JqZWN0KQoreworICAg
IFJlZlB0cjxJY2VDYW5kaWRhdGU+IGNhbmRpZGF0ZSA9IEljZUNhbmRpZGF0ZTo6Y3JlYXRlKCk7
CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludFZhbHVlOworCisgICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcodHlwZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkp
CisgICAgICAgIGNhbmRpZGF0ZS0+c2V0VHlwZShzdHJpbmdWYWx1ZSk7CisKKyAgICBpZiAoY2Fu
ZGlkYXRlT2JqZWN0LmdldFN0cmluZyhmb3VuZGF0aW9uU3RyaW5nKCksIHN0cmluZ1ZhbHVlKSkK
KyAgICAgICAgY2FuZGlkYXRlLT5zZXRGb3VuZGF0aW9uKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihjb21wb25lbnRJZFN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0Q29tcG9uZW50SWQoaW50VmFsdWUpOworCisgICAg
aWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRTdHJpbmcodHJhbnNwb3J0U3RyaW5nKCksIHN0cmluZ1Zh
bHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRUcmFuc3BvcnQoc3RyaW5nVmFsdWUpOworCisg
ICAgaWYgKGNhbmRpZGF0ZU9iamVjdC5nZXRJbnRlZ2VyKHByaW9yaXR5U3RyaW5nKCksIGludFZh
bHVlKSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRQcmlvcml0eShpbnRWYWx1ZSk7CisKKyAgICBp
ZiAoY2FuZGlkYXRlT2JqZWN0LmdldFN0cmluZyhhZGRyZXNzU3RyaW5nKCksIHN0cmluZ1ZhbHVl
KSkKKyAgICAgICAgY2FuZGlkYXRlLT5zZXRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGludFZhbHVlKSkKKyAg
ICAgICAgY2FuZGlkYXRlLT5zZXRQb3J0KGludFZhbHVlKTsKKworICAgIGlmIChjYW5kaWRhdGVP
YmplY3QuZ2V0U3RyaW5nKHRjcFR5cGVTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICBj
YW5kaWRhdGUtPnNldFRjcFR5cGUoc3RyaW5nVmFsdWUpOworCisgICAgaWYgKGNhbmRpZGF0ZU9i
amVjdC5nZXRTdHJpbmcocmVsYXRlZEFkZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAg
ICAgICBjYW5kaWRhdGUtPnNldFJlbGF0ZWRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgIGlm
IChjYW5kaWRhdGVPYmplY3QuZ2V0SW50ZWdlcihyZWxhdGVkUG9ydFN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgIGNhbmRpZGF0ZS0+c2V0UmVsYXRlZFBvcnQoaW50VmFsdWUpOworCisgICAg
cmV0dXJuIGNhbmRpZGF0ZTsKK30KKworc3RhdGljIFJlZlB0cjxNZWRpYUVuZHBvaW50U2Vzc2lv
bkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gcm9tSlNPTihjb25zdCBTdHJpbmcmIGpzb24p
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBpZiAoIUluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBpZiAoIXZhbHVlLT5h
c09iamVjdChvYmplY3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxN
ZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBNZWRpYUVu
ZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOworICAgIHVuc2lnbmVkIGludFZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZ1Zh
bHVlOworICAgIGJvb2wgYm9vbFZhbHVlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b3JpZ2luYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKG9i
amVjdC0+Z2V0T2JqZWN0KG9yaWdpbmF0b3JTdHJpbmcoKSwgb3JpZ2luYXRvck9iamVjdCkpIHsK
KyAgICAgICAgaWYgKG9yaWdpbmF0b3JPYmplY3QtPmdldEludGVnZXIoc2Vzc2lvbklkU3RyaW5n
KCksIGxvbmdWYWx1ZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLT5zZXRTZXNzaW9uSWQo
bG9uZ1ZhbHVlKTsKKyAgICAgICAgaWYgKG9yaWdpbmF0b3JPYmplY3QtPmdldEludGVnZXIoc2Vz
c2lvblZlcnNpb25TdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgY29uZmlndXJhdGlv
bi0+c2V0U2Vzc2lvblZlcnNpb24oaW50VmFsdWUpOworICAgIH0KKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gbWVkaWFEZXNjcmlwdGlvbnNBcnJheSA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBvYmplY3QtPmdldEFycmF5KG1lZGlhRGVzY3JpcHRpb25zU3RyaW5nKCksIG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVkaWFEZXNjcmlwdGlvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25zQXJyYXktPmdldChpKS0+YXNPYmpl
Y3QobWVkaWFEZXNjcmlwdGlvbk9iamVjdCk7CisKKyAgICAgICAgUmVmUHRyPFBlZXJNZWRpYURl
c2NyaXB0aW9uPiBtZWRpYURlc2NyaXB0aW9uID0gUGVlck1lZGlhRGVzY3JpcHRpb246OmNyZWF0
ZSgpOworCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcodHlw
ZVN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5z
ZXRUeXBlKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVj
dC0+Z2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgICAgIG1lZGlh
RGVzY3JpcHRpb24tPnNldFBvcnQoaW50VmFsdWUpOworCisgICAgICAgIGlmIChtZWRpYURlc2Ny
aXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisg
ICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKwor
ICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1vZGVTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0TW9kZShz
dHJpbmdWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBtZWRpYURlc2NyaXB0aW9u
T2JqZWN0LT5nZXRBcnJheShwYXlsb2Fkc1N0cmluZygpLCBwYXlsb2Fkc0FycmF5KTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcGF5bG9hZHNBcnJheS0+bGVuZ3RoKCk7ICsr
aikgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGF5bG9hZHNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcGF5bG9hZHNBcnJheS0+
Z2V0KGopLT5hc09iamVjdChwYXlsb2Fkc09iamVjdCk7CisKKyAgICAgICAgICAgIFJlZlB0cjxN
ZWRpYVBheWxvYWQ+IHBheWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworCisgICAgICAg
ICAgICBpZiAocGF5bG9hZHNPYmplY3QtPmdldEludGVnZXIodHlwZVN0cmluZygpLCBpbnRWYWx1
ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0VHlwZShpbnRWYWx1ZSk7CisKKyAgICAg
ICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0U3RyaW5nKGVuY29kaW5nTmFtZVN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1l
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRJbnRl
Z2VyKGNsb2NrUmF0ZVN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9h
ZC0+c2V0Q2xvY2tSYXRlKGludFZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHBheWxvYWRzT2Jq
ZWN0LT5nZXRJbnRlZ2VyKGNoYW5uZWxzU3RyaW5nKCksIGludFZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBwYXlsb2FkLT5zZXRDaGFubmVscyhpbnRWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChw
YXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihjY21maXJTdHJpbmcoKSwgYm9vbFZhbHVlKSkKKyAg
ICAgICAgICAgICAgICBwYXlsb2FkLT5zZXRDY21maXIoYm9vbFZhbHVlKTsKKworICAgICAgICAg
ICAgaWYgKHBheWxvYWRzT2JqZWN0LT5nZXRCb29sZWFuKG5hY2twbGlTdHJpbmcoKSwgYm9vbFZh
bHVlKSkKKyAgICAgICAgICAgICAgICBwYXlsb2FkLT5zZXROYWNrcGxpKGJvb2xWYWx1ZSk7CisK
KyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09iamVjdC0+Z2V0Qm9vbGVhbihuYWNrU3RyaW5nKCks
IGJvb2xWYWx1ZSkpCisgICAgICAgICAgICAgICAgcGF5bG9hZC0+c2V0TmFjayhib29sVmFsdWUp
OworCisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGlmIChwYXlsb2Fkc09i
amVjdC0+Z2V0T2JqZWN0KHBhcmFtZXRlcnNTdHJpbmcoKSwgcGFyYW1ldGVyc09iamVjdCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihwYWNrZXRp
emF0aW9uTW9kZVN0cmluZygpLCBpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHBheWxv
YWQtPmFkZFBhcmFtZXRlcigicGFja2V0aXphdGlvbk1vZGUiLCBpbnRWYWx1ZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAocGFyYW1ldGVyc09iamVjdC0+Z2V0SW50ZWdlcihhcHRTdHJpbmcoKSwg
aW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoImFw
dCIsIGludFZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzT2JqZWN0LT5n
ZXRJbnRlZ2VyKHJ0eFRpbWVTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAg
ICBwYXlsb2FkLT5hZGRQYXJhbWV0ZXIoInJ0eFRpbWUiLCBpbnRWYWx1ZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPmFkZFBheWxvYWQoV1RGTW92ZShw
YXlsb2FkKSk7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
dGNwT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPmdldE9iamVjdChydGNwU3RyaW5nKCksIHJ0Y3BPYmplY3QpKSB7
CisgICAgICAgICAgICBpZiAocnRjcE9iamVjdC0+Z2V0Qm9vbGVhbihtdXhTdHJpbmcoKSwgYm9v
bFZhbHVlKSkKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRSdGNwTXV4KGJv
b2xWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChydGNwT2JqZWN0LT5nZXRTdHJpbmcocnRjcEFk
ZHJlc3NTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3Jp
cHRpb24tPnNldFJ0Y3BBZGRyZXNzKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKHJ0
Y3BPYmplY3QtPmdldEludGVnZXIocnRjcFBvcnRTdHJpbmcoKSwgaW50VmFsdWUpKQorICAgICAg
ICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldFJ0Y3BQb3J0KGludFZhbHVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcobWVk
aWFTdHJlYW1JZFN0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLT5zZXRNZWRpYVN0cmVhbUlkKHN0cmluZ1ZhbHVlKTsKKworICAgICAgICBpZiAobWVk
aWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0U3RyaW5nKG1lZGlhU3RyZWFtVHJhY2tJZFN0cmluZygp
LCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5zZXRNZWRpYVN0
cmVhbVRyYWNrSWQoc3RyaW5nVmFsdWUpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGR0bHNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAo
bWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+Z2V0T2JqZWN0KGR0bHNTdHJpbmcoKSwgZHRsc09iamVj
dCkpIHsKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJpbmcoc2V0dXBTdHJpbmco
KSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldER0
bHNTZXR1cChzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRT
dHJpbmcoZmluZ2VycHJpbnRIYXNoRnVuY3Rpb25TdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAg
ICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldER0bHNGaW5nZXJwcmludEhhc2hGdW5j
dGlvbihzdHJpbmdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChkdGxzT2JqZWN0LT5nZXRTdHJp
bmcoZmluZ2VycHJpbnRTdHJpbmcoKSwgc3RyaW5nVmFsdWUpKQorICAgICAgICAgICAgICAgIG1l
ZGlhRGVzY3JpcHRpb24tPnNldER0bHNGaW5nZXJwcmludChzdHJpbmdWYWx1ZSk7CisgICAgICAg
IH0KKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNzcmNzQXJyYXkgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPmdldEFy
cmF5KHNzcmNzU3RyaW5nKCksIHNzcmNzQXJyYXkpOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBzc3Jjc0FycmF5LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICBzc3Jj
c0FycmF5LT5nZXQoaiktPmFzSW50ZWdlcihpbnRWYWx1ZSk7CisgICAgICAgICAgICBtZWRpYURl
c2NyaXB0aW9uLT5hZGRTc3JjKGludFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
ZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5nZXRTdHJpbmcoY25hbWVTdHJpbmcoKSwgc3RyaW5nVmFs
dWUpKQorICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0Q25hbWUoc3RyaW5nVmFsdWUp
OworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGljZU9iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5n
ZXRPYmplY3QoaWNlU3RyaW5nKCksIGljZU9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChpY2VP
YmplY3QtPmdldFN0cmluZyh1ZnJhZ1N0cmluZygpLCBzdHJpbmdWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi0+c2V0SWNlVWZyYWcoc3RyaW5nVmFsdWUpOworCisgICAg
ICAgICAgICBpZiAoaWNlT2JqZWN0LT5nZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwgc3RyaW5n
VmFsdWUpKQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24tPnNldEljZVBhc3N3b3Jk
KHN0cmluZ1ZhbHVlKTsKKworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5k
aWRhdGVzQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpY2VP
YmplY3QtPmdldEFycmF5KGNhbmRpZGF0ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNhbmRpZGF0ZXNBcnJheS0+bGVu
Z3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNh
bmRpZGF0ZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlc0FycmF5LT5nZXQoaiktPmFzT2JqZWN0KGNhbmRpZGF0ZU9iamVjdCk7CisK
KyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLT5hZGRJY2VDYW5kaWRhdGUoY3JlYXRl
Q2FuZGlkYXRlKCpjYW5kaWRhdGVPYmplY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGNvbmZpZ3VyYXRpb24tPmFkZE1lZGlhRGVzY3JpcHRpb24oV1RGTW92ZShtZWRp
YURlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247Cit9CisK
K3N0YXRpYyBSZWZQdHI8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVGcm9tSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBp
ZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNhbmRpZGF0ZU9iamVj
dDsKKyAgICBpZiAoIXZhbHVlLT5hc09iamVjdChjYW5kaWRhdGVPYmplY3QpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVDYW5kaWRhdGUoKmNhbmRpZGF0ZU9i
amVjdCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29uZmlndXJhdGlvblRvSlNPTihjb25zdCBNZWRp
YUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9yaWdpbmF0b3JPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG9yaWdpbmF0b3JPYmplY3QtPnNldERvdWJsZShzZXNz
aW9uSWRTdHJpbmcoKSwgY29uZmlndXJhdGlvbi5zZXNzaW9uSWQoKSk7CisgICAgb3JpZ2luYXRv
ck9iamVjdC0+c2V0SW50ZWdlcihzZXNzaW9uVmVyc2lvblN0cmluZygpLCBjb25maWd1cmF0aW9u
LnNlc3Npb25WZXJzaW9uKCkpOworICAgIG9iamVjdC0+c2V0T2JqZWN0KG9yaWdpbmF0b3JTdHJp
bmcoKSwgb3JpZ2luYXRvck9iamVjdCk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1l
ZGlhRGVzY3JpcHRpb25zQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICBm
b3IgKGNvbnN0IFJlZlB0cjxQZWVyTWVkaWFEZXNjcmlwdGlvbj4mIG1lZGlhRGVzY3JpcHRpb24g
OiBjb25maWd1cmF0aW9uLm1lZGlhRGVzY3JpcHRpb25zKCkpIHsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVkaWFEZXNjcmlwdGlvbk9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0U3RyaW5nKHR5
cGVTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+dHlwZSgpKTsKKyAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbk9iamVjdC0+c2V0SW50ZWdlcihwb3J0U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24t
PnBvcnQoKSk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhhZGRy
ZXNzU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmFkZHJlc3MoKSk7CisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb25PYmplY3QtPnNldFN0cmluZyhtb2RlU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRp
b24tPm1vZGUoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwYXlsb2Fkc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoUmVmUHRyPE1l
ZGlhUGF5bG9hZD4gcGF5bG9hZCA6IG1lZGlhRGVzY3JpcHRpb24tPnBheWxvYWRzKCkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBheWxvYWRPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgICAgICBwYXlsb2FkT2JqZWN0LT5zZXRJbnRl
Z2VyKHR5cGVTdHJpbmcoKSwgcGF5bG9hZC0+dHlwZSgpKTsKKyAgICAgICAgICAgIHBheWxvYWRP
YmplY3QtPnNldFN0cmluZyhlbmNvZGluZ05hbWVTdHJpbmcoKSwgcGF5bG9hZC0+ZW5jb2RpbmdO
YW1lKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVjdC0+c2V0SW50ZWdlcihjbG9ja1JhdGVT
dHJpbmcoKSwgcGF5bG9hZC0+Y2xvY2tSYXRlKCkpOworICAgICAgICAgICAgcGF5bG9hZE9iamVj
dC0+c2V0SW50ZWdlcihjaGFubmVsc1N0cmluZygpLCBwYXlsb2FkLT5jaGFubmVscygpKTsKKyAg
ICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4oY2NtZmlyU3RyaW5nKCksIHBheWxv
YWQtPmNjbWZpcigpKTsKKyAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldEJvb2xlYW4obmFj
a3BsaVN0cmluZygpLCBwYXlsb2FkLT5uYWNrcGxpKCkpOworICAgICAgICAgICAgcGF5bG9hZE9i
amVjdC0+c2V0Qm9vbGVhbihuYWNrU3RyaW5nKCksIHBheWxvYWQtPm5hY2soKSk7CisKKyAgICAg
ICAgICAgIGlmICghcGF5bG9hZC0+cGFyYW1ldGVycygpLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDog
cGF5bG9hZC0+cGFyYW1ldGVycygpLmtleXMoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1l
dGVyc09iamVjdC0+c2V0SW50ZWdlcihuYW1lLCBwYXlsb2FkLT5wYXJhbWV0ZXJzKCkuZ2V0KG5h
bWUpKTsKKworICAgICAgICAgICAgICAgIHBheWxvYWRPYmplY3QtPnNldE9iamVjdChwYXJhbWV0
ZXJzU3RyaW5nKCksIHBhcmFtZXRlcnNPYmplY3QpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwYXlsb2Fkc0FycmF5LT5wdXNoT2JqZWN0KHBheWxvYWRPYmplY3QpOworICAgICAgICB9
CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5KHBheWxvYWRzU3RyaW5n
KCksIHBheWxvYWRzQXJyYXkpOworCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ0
Y3BPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBydGNwT2JqZWN0
LT5zZXRCb29sZWFuKG11eFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5ydGNwTXV4KCkpOwor
ICAgICAgICBydGNwT2JqZWN0LT5zZXRTdHJpbmcoYWRkcmVzc1N0cmluZygpLCBtZWRpYURlc2Ny
aXB0aW9uLT5ydGNwQWRkcmVzcygpKTsKKyAgICAgICAgcnRjcE9iamVjdC0+c2V0SW50ZWdlcihw
b3J0U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPnJ0Y3BQb3J0KCkpOworICAgICAgICBtZWRp
YURlc2NyaXB0aW9uT2JqZWN0LT5zZXRPYmplY3QocnRjcFN0cmluZygpLCBydGNwT2JqZWN0KTsK
KworICAgICAgICBtZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1J
ZFN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5tZWRpYVN0cmVhbUlkKCkpOworICAgICAgICBt
ZWRpYURlc2NyaXB0aW9uT2JqZWN0LT5zZXRTdHJpbmcobWVkaWFTdHJlYW1UcmFja0lkU3RyaW5n
KCksIG1lZGlhRGVzY3JpcHRpb24tPm1lZGlhU3RyZWFtVHJhY2tJZCgpKTsKKworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkdGxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5nKHNldHVwU3RyaW5nKCksIG1lZGlh
RGVzY3JpcHRpb24tPmR0bHNTZXR1cCgpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KGZpbmdlcnByaW50SGFzaEZ1bmN0aW9uU3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmR0bHNG
aW5nZXJwcmludEhhc2hGdW5jdGlvbigpKTsKKyAgICAgICAgZHRsc09iamVjdC0+c2V0U3RyaW5n
KGZpbmdlcnByaW50U3RyaW5nKCksIG1lZGlhRGVzY3JpcHRpb24tPmR0bHNGaW5nZXJwcmludCgp
KTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9iamVjdC0+c2V0T2JqZWN0KGR0bHNTdHJpbmco
KSwgZHRsc09iamVjdCk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzc3Jjc0Fy
cmF5ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgIGZvciAoYXV0byBzc3Jj
IDogbWVkaWFEZXNjcmlwdGlvbi0+c3NyY3MoKSkKKyAgICAgICAgICAgIHNzcmNzQXJyYXktPnB1
c2hEb3VibGUoc3NyYyk7CisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25PYmplY3QtPnNldEFycmF5
KHNzcmNzU3RyaW5nKCksIHNzcmNzQXJyYXkpOworCisgICAgICAgIG1lZGlhRGVzY3JpcHRpb25P
YmplY3QtPnNldFN0cmluZyhjbmFtZVN0cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5jbmFtZSgp
KTsKKworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpY2VPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpY2VPYmplY3QtPnNldFN0cmluZyh1ZnJhZ1N0
cmluZygpLCBtZWRpYURlc2NyaXB0aW9uLT5pY2VVZnJhZygpKTsKKyAgICAgICAgaWNlT2JqZWN0
LT5zZXRTdHJpbmcocGFzc3dvcmRTdHJpbmcoKSwgbWVkaWFEZXNjcmlwdGlvbi0+aWNlUGFzc3dv
cmQoKSk7CisKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYW5kaWRhdGVzQXJyYXkg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgZm9yIChSZWZQdHI8SWNlQ2Fu
ZGlkYXRlPiBjYW5kaWRhdGUgOiBtZWRpYURlc2NyaXB0aW9uLT5pY2VDYW5kaWRhdGVzKCkpCisg
ICAgICAgICAgICBjYW5kaWRhdGVzQXJyYXktPnB1c2hPYmplY3QoY3JlYXRlQ2FuZGlkYXRlT2Jq
ZWN0KCpjYW5kaWRhdGUpKTsKKworICAgICAgICBpY2VPYmplY3QtPnNldEFycmF5KGNhbmRpZGF0
ZXNTdHJpbmcoKSwgY2FuZGlkYXRlc0FycmF5KTsKKyAgICAgICAgbWVkaWFEZXNjcmlwdGlvbk9i
amVjdC0+c2V0T2JqZWN0KGljZVN0cmluZygpLCBpY2VPYmplY3QpOworCisgICAgICAgIG1lZGlh
RGVzY3JpcHRpb25zQXJyYXktPnB1c2hPYmplY3QobWVkaWFEZXNjcmlwdGlvbk9iamVjdCk7Cisg
ICAgfQorICAgIG9iamVjdC0+c2V0QXJyYXkobWVkaWFEZXNjcmlwdGlvbnNTdHJpbmcoKSwgbWVk
aWFEZXNjcmlwdGlvbnNBcnJheSk7CisKKyAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmco
KTsKK30KKworc3RhdGljIFN0cmluZyBpY2VDYW5kaWRhdGVUb0pTT04oY29uc3QgSWNlQ2FuZGlk
YXRlJiBjYW5kaWRhdGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNhbmRpZGF0ZU9iamVjdChjYW5k
aWRhdGUpLT50b0pTT05TdHJpbmcoKTsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJv
Y2Vzc29yOjpnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24m
IGNvbmZpZ3VyYXRpb24sIFN0cmluZyYgb3V0U2RwU3RyaW5nKSBjb25zdAoreworICAgIFN0cmlu
ZyBzZHBTdHJpbmc7CisgICAgaWYgKCFjYWxsU2NyaXB0KCJnZW5lcmF0ZSIsIGNvbmZpZ3VyYXRp
b25Ub0pTT04oY29uZmlndXJhdGlvbiksIHNkcFN0cmluZykpCisgICAgICAgIHJldHVybiBSZXN1
bHQ6OkludGVybmFsRXJyb3I7CisKKyAgICBvdXRTZHBTdHJpbmcgPSBzZHBTdHJpbmc7CisgICAg
cmV0dXJuIFJlc3VsdDo6U3VjY2VzczsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJv
Y2Vzc29yOjpwYXJzZShjb25zdCBTdHJpbmcmIHNkcCwgUmVmUHRyPE1lZGlhRW5kcG9pbnRTZXNz
aW9uQ29uZmlndXJhdGlvbj4mIG91dENvbmZpZ3VyYXRpb24pIGNvbnN0Cit7CisgICAgU3RyaW5n
IHNjcmlwdE91dHB1dDsKKyAgICBpZiAoIWNhbGxTY3JpcHQoInBhcnNlIiwgc2RwLCBzY3JpcHRP
dXRwdXQpKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVycm9yOworCisgICAgaWYg
KHNjcmlwdE91dHB1dCA9PSAiUGFyc2VFcnJvciIpCisgICAgICAgIHJldHVybiBSZXN1bHQ6OlBh
cnNlRXJyb3I7CisKKyAgICBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZyb21KU09OKHNjcmlwdE91dHB1dCk7Cisg
ICAgaWYgKCFjb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpJbnRlcm5hbEVy
cm9yOworCisgICAgb3V0Q29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247CisgICAgcmV0dXJu
IFJlc3VsdDo6U3VjY2VzczsKK30KKworU0RQUHJvY2Vzc29yOjpSZXN1bHQgU0RQUHJvY2Vzc29y
OjpnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIFN0
cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgY2FuZGlkYXRlTGlu
ZTsKKyAgICBpZiAoIWNhbGxTY3JpcHQoImdlbmVyYXRlQ2FuZGlkYXRlTGluZSIsIGljZUNhbmRp
ZGF0ZVRvSlNPTihjYW5kaWRhdGUpLCBjYW5kaWRhdGVMaW5lKSkKKyAgICAgICAgcmV0dXJuIFJl
c3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIG91dENhbmRpZGF0ZUxpbmUgPSBjYW5kaWRhdGVM
aW5lOworICAgIHJldHVybiBSZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK1NEUFByb2Nlc3Nvcjo6UmVz
dWx0IFNEUFByb2Nlc3Nvcjo6cGFyc2VDYW5kaWRhdGVMaW5lKGNvbnN0IFN0cmluZyYgY2FuZGlk
YXRlTGluZSwgUmVmUHRyPEljZUNhbmRpZGF0ZT4mIG91dENhbmRpZGF0ZSkgY29uc3QKK3sKKyAg
ICBTdHJpbmcgc2NyaXB0T3V0cHV0OworICAgIGlmICghY2FsbFNjcmlwdCgicGFyc2VDYW5kaWRh
dGVMaW5lIiwgY2FuZGlkYXRlTGluZSwgc2NyaXB0T3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIFJl
c3VsdDo6SW50ZXJuYWxFcnJvcjsKKworICAgIGlmIChzY3JpcHRPdXRwdXQgPT0gIlBhcnNlRXJy
b3IiKQorICAgICAgICByZXR1cm4gUmVzdWx0OjpQYXJzZUVycm9yOworCisgICAgUmVmUHRyPElj
ZUNhbmRpZGF0ZT4gY2FuZGlkYXRlID0gaWNlQ2FuZGlkYXRlRnJvbUpTT04oc2NyaXB0T3V0cHV0
KTsKKyAgICBpZiAoIWNhbmRpZGF0ZSkKKyAgICAgICAgcmV0dXJuIFJlc3VsdDo6SW50ZXJuYWxF
cnJvcjsKKworICAgIG91dENhbmRpZGF0ZSA9IGNhbmRpZGF0ZTsKKyAgICByZXR1cm4gUmVzdWx0
OjpTdWNjZXNzOworfQorCitib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgU3RyaW5nJiBvdXRSZXN1
bHQpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1l
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9pc29sYXRlZFdvcmxkKQor
ICAgICAgICBtX2lzb2xhdGVkV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdp
bmRvdzo6Y29tbW9uVk0oKSk7CisKKyAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9s
bGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENv
bnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICBKU0M6OkpTVmFsdWUgcHJvYmVGdW5jdGlvblZhbHVl
ID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJnZW5lcmF0ZSIpKTsKKyAgICBpZiAoIXByb2JlRnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKKyAgICAgICAgVVJMIHNjcmlwdFVSTDsKKyAgICAgICAgc2NyaXB0Q29udHJvbGxlci5l
dmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZTo6c2NyaXB0U3RyaW5nKCksIHNjcmlwdFVSTCksICptX2lzb2xhdGVkV29ybGQpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBmdW5jdGlvbk5hbWUpKTsKKyAgICBp
ZiAoIWZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxU
eXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxs
RGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsK
KyAgICBhcmdMaXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CisKKyAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgICAgIExPR19FUlJPUigiU0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJl
dyBpbiBmdW5jdGlvbiAlcyIsIGZ1bmN0aW9uTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIXJlc3VsdC5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBvdXRSZXN1bHQgPSByZXN1bHQuZ2V0U3RyaW5nKGV4ZWMpOworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vz
c29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNDE1ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vz
c29yLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFcmljc3Nv
biBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNEUFByb2Nlc3Nvcl9oCisjZGVm
aW5lIFNEUFByb2Nlc3Nvcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVk
ZSAiQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGUu
aCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NV3JhcHBlcldvcmxkOworY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgU0RQUHJvY2Vzc29yIDogcHVibGljIENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFJlc3VsdCB7Cisg
ICAgICAgIFN1Y2Nlc3MgPSAxLAorICAgICAgICBJbnRlcm5hbEVycm9yID0gMiwKKyAgICAgICAg
UGFyc2VFcnJvciA9IDMKKyAgICB9OworCisgICAgU0RQUHJvY2Vzc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKTsKKworICAgIFJlc3VsdCBnZW5lcmF0ZShjb25zdCBNZWRpYUVuZHBvaW50U2Vz
c2lvbkNvbmZpZ3VyYXRpb24mLCBTdHJpbmcmIG91dFNkcFN0cmluZykgY29uc3Q7CisgICAgUmVz
dWx0IHBhcnNlKGNvbnN0IFN0cmluZyYgc2RwLCBSZWZQdHI8TWVkaWFFbmRwb2ludFNlc3Npb25D
b25maWd1cmF0aW9uPiYpIGNvbnN0OworCisgICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGlu
ZShjb25zdCBJY2VDYW5kaWRhdGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0Owor
ICAgIFJlc3VsdCBwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5l
LCBSZWZQdHI8SWNlQ2FuZGlkYXRlPiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgY2Fs
bFNjcmlwdChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCwgU3RyaW5nJiBvdXRSZXN1bHQpIGNvbnN0OworCisgICAgbXV0YWJsZSBSZWZQdHI8RE9NV3Jh
cHBlcldvcmxkPiBtX2lzb2xhdGVkV29ybGQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjZW5kaWYgLy8gU0RQUHJvY2Vz
c29yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vc2Rw
LmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9zZHAuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmYzg4YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzCkBAIC0wLDAgKzEsNTk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyJ1c2Ugc3RyaWN0IjsK
KworaWYgKHR5cGVvZihTRFApID09ICJ1bmRlZmluZWQiKQorICAgIHZhciBTRFAgPSB7fTsKKwor
KGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcmVnZXhwcyA9IHsKKyAgICAgICAgInZsaW5lIjogIl52
PShbXFxkXSspLiokIiwKKyAgICAgICAgIm9saW5lIjogIl5vPShbXFx3XFwtQFxcLl0rKSAoW1xc
ZF0rKSAoW1xcZF0rKSBJTiAoSVBbNDZdKSAoW1xcZFxcLmEtZlxcOl0rKS4qJCIsCisgICAgICAg
ICJzbGluZSI6ICJecz0oLiopJCIsCisgICAgICAgICJ0bGluZSI6ICJedD0oW1xcZF0rKSAoW1xc
ZF0rKS4qJCIsCisgICAgICAgICJjbGluZSI6ICJeYz1JTiAoSVBbNDZdKSAoW1xcZFxcLmEtZlxc
Ol0rKS4qJCIsCisgICAgICAgICJtc2lkc2VtYW50aWMiOiAiXmE9bXNpZC1zZW1hbnRpYzogKldN
UyAuKiQiLAorICAgICAgICAibWJsb2NrIjogIl5tPShhdWRpb3x2aWRlb3xhcHBsaWNhdGlvbikg
KFtcXGRdKykgKFtBLVovXSspKFtcXGQgXSopJFxccj9cXG4iLAorICAgICAgICAibW9kZSI6ICJe
YT0oc2VuZHJlY3Z8c2VuZG9ubHl8cmVjdm9ubHl8aW5hY3RpdmUpLiokIiwKKyAgICAgICAgInJ0
cG1hcCI6ICJeYT1ydHBtYXA6JHt0eXBlfSAoW1xcd1xcLV0rKS8oW1xcZF0rKS8/KFtcXGRdKyk/
LiokIiwKKyAgICAgICAgImZtdHAiOiAiXmE9Zm10cDoke3R5cGV9IChbXFx3XFwtPTtdKykuKiQi
LAorICAgICAgICAicGFyYW0iOiAiKFtcXHdcXC1dKyk9KFtcXHdcXC1dKyk7PyIsCisgICAgICAg
ICJuYWNrIjogIl5hPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrJCIsCisgICAgICAgICJuYWNrcGxpIjog
Il5hPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrIHBsaSQiLAorICAgICAgICAiY2NtZmlyIjogIl5hPXJ0
Y3AtZmI6JHt0eXBlfSBjY20gZmlyJCIsCisgICAgICAgICJlcmljc2NyZWFtIjogIl5hPXJ0Y3At
ZmI6JHt0eXBlfSBlcmljc2NyZWFtJCIsCisgICAgICAgICJydGNwIjogIl5hPXJ0Y3A6KFtcXGRd
KykoIElOIChJUFs0Nl0pIChbXFxkXFwuYS1mXFw6XSspKT8uKiQiLAorICAgICAgICAicnRjcG11
eCI6ICJeYT1ydGNwLW11eC4qJCIsCisgICAgICAgICJjbmFtZSI6ICJeYT1zc3JjOihcXGQrKSBj
bmFtZTooW1xcdysvXFwtQFxcLlxce1xcfV0rKS4qJCIsCisgICAgICAgICJtc2lkIjogIl5hPShz
c3JjOlxcZCsgKT9tc2lkOihbXFx3Ky9cXC09XSspICsoW1xcdysvXFwtPV0rKS4qJCIsCisgICAg
ICAgICJ1ZnJhZyI6ICJeYT1pY2UtdWZyYWc6KFtcXHcrL10qKS4qJCIsCisgICAgICAgICJwd2Qi
OiAiXmE9aWNlLXB3ZDooW1xcdysvXSopLiokIiwKKyAgICAgICAgImNhbmRpZGF0ZSI6ICJeYT1j
YW5kaWRhdGU6KFxcZCspIChcXGQpIChVRFB8VENQKSAoW1xcZFxcLl0qKSAoW1xcZFxcLmEtZlxc
Ol0qKSAoXFxkKikiICsKKyAgICAgICAgICAgICIgdHlwIChbYS16XSopKCByYWRkciAoW1xcZFxc
LmEtZlxcOl0qKSBycG9ydCAoXFxkKikpPyIgKworICAgICAgICAgICAgIiggdGNwdHlwZSAoYWN0
aXZlfHBhc3NpdmV8c28pKT8uKiQiLAorICAgICAgICAiZmluZ2VycHJpbnQiOiAiXmE9ZmluZ2Vy
cHJpbnQ6KHNoYS0xfHNoYS0yNTYpIChbQS1GYS1mXFxkXDpdKykuKiQiLAorICAgICAgICAic2V0
dXAiOiAiXmE9c2V0dXA6KGFjdHBhc3N8YWN0aXZlfHBhc3NpdmUpLiokIiwKKyAgICAgICAgInNj
dHBtYXAiOiAiXmE9c2N0cG1hcDoke3BvcnR9IChbXFx3XFwtXSspKCBbXFxkXSspPy4qJCIKKyAg
ICB9OworCisgICAgdmFyIHRlbXBsYXRlcyA9IHsKKyAgICAgICAgInNkcCI6CisgICAgICAgICAg
ICAidj0ke3ZlcnNpb259XHJcbiIgKworICAgICAgICAgICAgIm89JHt1c2VybmFtZX0gJHtzZXNz
aW9uSWR9ICR7c2Vzc2lvblZlcnNpb259ICR7bmV0VHlwZX0gJHthZGRyZXNzVHlwZX0gJHthZGRy
ZXNzfVxyXG4iICsKKyAgICAgICAgICAgICJzPSR7c2Vzc2lvbk5hbWV9XHJcbiIgKworICAgICAg
ICAgICAgInQ9JHtzdGFydFRpbWV9ICR7c3RvcFRpbWV9XHJcbiIgKworICAgICAgICAgICAgIiR7
bXNpZHNlbWFudGljTGluZX0iLAorCisgICAgICAgICJtc2lkc2VtYW50aWMiOiAiYT1tc2lkLXNl
bWFudGljOldNUyAke21lZGlhU3RyZWFtSWRzfVxyXG4iLAorCisgICAgICAgICJtYmxvY2siOgor
ICAgICAgICAgICAgIm09JHt0eXBlfSAke3BvcnR9ICR7cHJvdG9jb2x9ICR7Zm10fVxyXG4iICsK
KyAgICAgICAgICAgICJjPSR7bmV0VHlwZX0gJHthZGRyZXNzVHlwZX0gJHthZGRyZXNzfVxyXG4i
ICsKKyAgICAgICAgICAgICIke3J0Y3BMaW5lfSIgKworICAgICAgICAgICAgIiR7cnRjcE11eExp
bmV9IiArCisgICAgICAgICAgICAiYT0ke21vZGV9XHJcbiIgKworICAgICAgICAgICAgIiR7cnRw
TWFwTGluZXN9IiArCisgICAgICAgICAgICAiJHtmbXRwTGluZXN9IiArCisgICAgICAgICAgICAi
JHtuYWNrTGluZXN9IiArCisgICAgICAgICAgICAiJHtuYWNrcGxpTGluZXN9IiArCisgICAgICAg
ICAgICAiJHtjY21maXJMaW5lc30iICsKKyAgICAgICAgICAgICIke2VyaWNTY3JlYW1MaW5lc30i
ICsKKyAgICAgICAgICAgICIke2NuYW1lTGluZXN9IiArCisgICAgICAgICAgICAiJHttc2lkTGlu
ZXN9IiArCisgICAgICAgICAgICAiJHtpY2VDcmVkZW50aWFsTGluZXN9IiArCisgICAgICAgICAg
ICAiJHtjYW5kaWRhdGVMaW5lc30iICsKKyAgICAgICAgICAgICIke2R0bHNGaW5nZXJwcmludExp
bmV9IiArCisgICAgICAgICAgICAiJHtkdGxzU2V0dXBMaW5lfSIgKworICAgICAgICAgICAgIiR7
c2N0cG1hcExpbmV9IiwKKworICAgICAgICAicnRjcCI6ICJhPXJ0Y3A6JHtwb3J0fSR7WyBdbmV0
VHlwZX0ke1sgXWFkZHJlc3NUeXBlfSR7WyBdYWRkcmVzc31cclxuIiwKKyAgICAgICAgInJ0Y3BN
dXgiOiAiYT1ydGNwLW11eFxyXG4iLAorCisgICAgICAgICJydHBNYXAiOiAiYT1ydHBtYXA6JHt0
eXBlfSAke2VuY29kaW5nTmFtZX0vJHtjbG9ja1JhdGV9JHtbL11jaGFubmVsc31cclxuIiwKKyAg
ICAgICAgImZtdHAiOiAiYT1mbXRwOiR7dHlwZX0gJHtwYXJhbWV0ZXJzfVxyXG4iLAorICAgICAg
ICAibmFjayI6ICJhPXJ0Y3AtZmI6JHt0eXBlfSBuYWNrXHJcbiIsCisgICAgICAgICJuYWNrcGxp
IjogImE9cnRjcC1mYjoke3R5cGV9IG5hY2sgcGxpXHJcbiIsCisgICAgICAgICJjY21maXIiOiAi
YT1ydGNwLWZiOiR7dHlwZX0gY2NtIGZpclxyXG4iLAorICAgICAgICAiZXJpY3NjcmVhbSI6ICJh
PXJ0Y3AtZmI6JHt0eXBlfSBlcmljc2NyZWFtXHJcbiIsCisKKyAgICAgICAgImNuYW1lIjogImE9
c3NyYzoke3NzcmN9IGNuYW1lOiR7Y25hbWV9XHJcbiIsCisgICAgICAgICJtc2lkIjogImE9bXNp
ZDoke21lZGlhU3RyZWFtSWR9ICR7bWVkaWFTdHJlYW1UcmFja0lkfVxyXG4iLAorCisgICAgICAg
ICJpY2VDcmVkZW50aWFscyI6CisgICAgICAgICAgICAiYT1pY2UtdWZyYWc6JHt1ZnJhZ31cclxu
IiArCisgICAgICAgICAgICAiYT1pY2UtcHdkOiR7cGFzc3dvcmR9XHJcbiIsCisKKyAgICAgICAg
ImNhbmRpZGF0ZSI6CisgICAgICAgICAgICAiYT1jYW5kaWRhdGU6JHtmb3VuZGF0aW9ufSAke2Nv
bXBvbmVudElkfSAke3RyYW5zcG9ydH0gJHtwcmlvcml0eX0gJHthZGRyZXNzfSAke3BvcnR9IiAr
CisgICAgICAgICAgICAiIHR5cCAke3R5cGV9JHtbIHJhZGRyIF1yZWxhdGVkQWRkcmVzc30ke1sg
cnBvcnQgXXJlbGF0ZWRQb3J0fSR7WyB0Y3B0eXBlIF10Y3BUeXBlfVxyXG4iLAorCisgICAgICAg
ICJkdGxzRmluZ2VycHJpbnQiOiAiYT1maW5nZXJwcmludDoke2ZpbmdlcnByaW50SGFzaEZ1bmN0
aW9ufSAke2ZpbmdlcnByaW50fVxyXG4iLAorICAgICAgICAiZHRsc1NldHVwIjogImE9c2V0dXA6
JHtzZXR1cH1cclxuIiwKKworICAgICAgICAic2N0cG1hcCI6ICJhPXNjdHBtYXA6JHtwb3J0fSAk
e2FwcH0ke1sgXXN0cmVhbXN9XHJcbiIKKyAgICB9OworCisgICAgZnVuY3Rpb24gbWF0Y2goZGF0
YSwgcGF0dGVybiwgZmxhZ3MsIGFsdCkgeworICAgICAgICB2YXIgciA9IG5ldyBSZWdFeHAocGF0
dGVybiwgZmxhZ3MpOworICAgICAgICByZXR1cm4gZGF0YS5tYXRjaChyKSB8fCBhbHQgJiYgYWx0
Lm1hdGNoKHIpIHx8IG51bGw7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkRGVmYXVsdHMob2Jq
LCBkZWZhdWx0cykgeworICAgICAgICBmb3IgKHZhciBwIGluIGRlZmF1bHRzKSB7CisgICAgICAg
ICAgICBpZiAoIWRlZmF1bHRzLmhhc093blByb3BlcnR5KHApKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKHR5cGVvZihvYmpbcF0pID09ICJ1bmRlZmluZWQiKQor
ICAgICAgICAgICAgICAgIG9ialtwXSA9IGRlZmF1bHRzW3BdOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZmlsbFRlbXBsYXRlKHRlbXBsYXRlLCBpbmZvKSB7CisgICAgICAgIHZh
ciB0ZXh0ID0gdGVtcGxhdGU7CisgICAgICAgIGZvciAodmFyIHAgaW4gaW5mbykgeworICAgICAg
ICAgICAgaWYgKCFpbmZvLmhhc093blByb3BlcnR5KHApKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgdmFyIHIgPSBuZXcgUmVnRXhwKCJcXCR7KFxcW1teXFxdXStcXF0p
PyIgKyBwICsgIihcXFtbXlxcXV0rXFxdKT99Iik7CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5y
ZXBsYWNlKHIsIGZ1bmN0aW9uIChfLCBwcmVmaXgsIHN1ZmZpeCkgeworICAgICAgICAgICAgICAg
IGlmICghaW5mb1twXSAmJiBpbmZvW3BdICE9IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiIjsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXggPyBwcmVmaXguc3Vic3RyKDEs
IHByZWZpeC5sZW5ndGggLSAyKSA6ICIiOworICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHN1ZmZp
eCA/IHN1ZmZpeC5zdWJzdHIoMSwgc3VmZml4Lmxlbmd0aCAtIDIpIDogIiI7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHByZWZpeCArIGluZm9bcF0gKyBzdWZmaXg7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9CisKKyAgICBTRFAucGFyc2Ug
PSBmdW5jdGlvbiAoc2RwVGV4dCkgeworICAgICAgICBzZHBUZXh0ID0gbmV3IFN0cmluZyhzZHBU
ZXh0KTsKKyAgICAgICAgdmFyIHNkcE9iaiA9IHt9OworICAgICAgICB2YXIgcGFydHMgPSBzZHBU
ZXh0LnNwbGl0KG5ldyBSZWdFeHAocmVnZXhwcy5tYmxvY2ssICJtIikpIHx8IFtzZHBUZXh0XTsK
KyAgICAgICAgdmFyIHNibG9jayA9IHBhcnRzLnNoaWZ0KCk7CisgICAgICAgIHZhciB2ZXJzaW9u
ID0gcGFyc2VJbnQoKG1hdGNoKHNibG9jaywgcmVnZXhwcy52bGluZSwgIm0iKSB8fCBbXSlbMV0p
OworICAgICAgICBpZiAoIWlzTmFOKHZlcnNpb24pKQorICAgICAgICAgICAgc2RwT2JqLnZlcnNp
b24gPSB2ZXJzaW9uOworICAgICAgICB2YXIgb3JpZ2luYXRvciA9IG1hdGNoKHNibG9jaywgcmVn
ZXhwcy5vbGluZSwgIm0iKTs7CisgICAgICAgIGlmIChvcmlnaW5hdG9yKSB7CisgICAgICAgICAg
ICBzZHBPYmoub3JpZ2luYXRvciA9IHsKKyAgICAgICAgICAgICAgICAidXNlcm5hbWUiOiBvcmln
aW5hdG9yWzFdLAorICAgICAgICAgICAgICAgICJzZXNzaW9uSWQiOiBvcmlnaW5hdG9yWzJdLAor
ICAgICAgICAgICAgICAgICJzZXNzaW9uVmVyc2lvbiI6IHBhcnNlSW50KG9yaWdpbmF0b3JbM10p
LAorICAgICAgICAgICAgICAgICJuZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAgICAiYWRk
cmVzc1R5cGUiOiBvcmlnaW5hdG9yWzRdLAorICAgICAgICAgICAgICAgICJhZGRyZXNzIjogb3Jp
Z2luYXRvcls1XQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2Vzc2lv
bk5hbWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4cHMuc2xpbmUsICJtIik7CisgICAgICAgIGlmIChz
ZXNzaW9uTmFtZSkKKyAgICAgICAgICAgIHNkcE9iai5zZXNzaW9uTmFtZSA9IHNlc3Npb25OYW1l
WzFdOworICAgICAgICB2YXIgc2Vzc2lvblRpbWUgPSBtYXRjaChzYmxvY2ssIHJlZ2V4cHMudGxp
bmUsICJtIik7CisgICAgICAgIGlmIChzZXNzaW9uVGltZSkgeworICAgICAgICAgICAgc2RwT2Jq
LnN0YXJ0VGltZSA9IHBhcnNlSW50KHNlc3Npb25UaW1lWzFdKTsKKyAgICAgICAgICAgIHNkcE9i
ai5zdG9wVGltZSA9IHBhcnNlSW50KHNlc3Npb25UaW1lWzJdKTsKKyAgICAgICAgfQorICAgICAg
ICB2YXIgaGFzTWVkaWFTdHJlYW1JZCA9ICEhbWF0Y2goc2Jsb2NrLCByZWdleHBzLm1zaWRzZW1h
bnRpYywgIm0iKTsKKyAgICAgICAgc2RwT2JqLm1lZGlhRGVzY3JpcHRpb25zID0gW107CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gNSkgeworICAgICAg
ICAgICAgdmFyIG1lZGlhRGVzY3JpcHRpb24gPSB7CisgICAgICAgICAgICAgICAgInR5cGUiOiBw
YXJ0c1tpXSwKKyAgICAgICAgICAgICAgICAicG9ydCI6IHBhcnNlSW50KHBhcnRzW2kgKyAxXSks
CisgICAgICAgICAgICAgICAgInByb3RvY29sIjogcGFydHNbaSArIDJdLAorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHZhciBmbXQgPSBwYXJ0c1tpICsgM10ucmVwbGFjZSgvXltcc1x1RkVG
Rlx4QTBdKy8sICcnKQorICAgICAgICAgICAgICAgIC5zcGxpdCgvICsvKQorICAgICAgICAgICAg
ICAgIC5tYXAoZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
SW50KHgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdmFyIG1ibG9jayA9IHBh
cnRzW2kgKyA0XTsKKworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBtYXRjaChtYmxvY2ss
IHJlZ2V4cHMuY2xpbmUsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmIChjb25uZWN0aW9u
KSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5uZXRUeXBlID0gIklOIjsKKyAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZHJlc3NUeXBlID0gY29ubmVjdGlvblsx
XTsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmFkZHJlc3MgPSBjb25uZWN0aW9u
WzJdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1vZGUgPSBtYXRjaChtYmxvY2ss
IHJlZ2V4cHMubW9kZSwgIm0iLCBzYmxvY2spOworICAgICAgICAgICAgaWYgKG1vZGUpCisgICAg
ICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5tb2RlID0gbW9kZVsxXTsKKworICAgICAgICAg
ICAgdmFyIHBheWxvYWRUeXBlcyA9IFtdOworICAgICAgICAgICAgaWYgKG1hdGNoKG1lZGlhRGVz
Y3JpcHRpb24ucHJvdG9jb2wsICIoVURQL1RMUyk/UlRQL1M/QVZQRj8iKSkgeworICAgICAgICAg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMgPSBbXTsKKyAgICAgICAgICAgICAgICBw
YXlsb2FkVHlwZXMgPSBmbXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXlsb2FkVHlw
ZXMuZm9yRWFjaChmdW5jdGlvbiAocGF5bG9hZFR5cGUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
cGF5bG9hZCA9IHsgInR5cGUiOiBwYXlsb2FkVHlwZSB9OworICAgICAgICAgICAgICAgIHZhciBy
dHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMucnRwbWFwLCBwYXlsb2FkKTsKKyAgICAg
ICAgICAgICAgICB2YXIgcnRwbWFwID0gbWF0Y2gobWJsb2NrLCBydHBtYXBMaW5lLCAibSIpOwor
ICAgICAgICAgICAgICAgIGlmIChydHBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9h
ZC5lbmNvZGluZ05hbWUgPSBydHBtYXBbMV07CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQu
Y2xvY2tSYXRlID0gcGFyc2VJbnQocnRwbWFwWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1lZGlhRGVzY3JpcHRpb24udHlwZSA9PSAiYXVkaW8iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC5jaGFubmVscyA9IHBhcnNlSW50KHJ0cG1hcFszXSkgfHwgMTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobWVkaWFEZXNjcmlwdGlvbi50eXBlID09ICJ2aWRlbyIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYWNrTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdl
eHBzLm5hY2ssIHBheWxvYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5uYWNr
ID0gISFtYXRjaChtYmxvY2ssIG5hY2tMaW5lLCAibSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5hY2twbGlMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMubmFja3BsaSwgcGF5bG9h
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLm5hY2twbGkgPSAhIW1hdGNoKG1i
bG9jaywgbmFja3BsaUxpbmUsICJtIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2Nt
ZmlyTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdleHBzLmNjbWZpciwgcGF5bG9hZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXlsb2FkLmNjbWZpciA9ICEhbWF0Y2gobWJsb2NrLCBjY21maXJM
aW5lLCAibSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyaWNTY3JlYW1MaW5lID0g
ZmlsbFRlbXBsYXRlKHJlZ2V4cHMuZXJpY3NjcmVhbSwgcGF5bG9hZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXlsb2FkLmVyaWNzY3JlYW0gPSAhIW1hdGNoKG1ibG9jaywgZXJpY1NjcmVh
bUxpbmUsICJtIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHBheWxvYWRUeXBlID09IDAgfHwgcGF5bG9hZFR5cGUgPT0gOCkgeworICAgICAgICAg
ICAgICAgICAgICBwYXlsb2FkLmVuY29kaW5nTmFtZSA9IHBheWxvYWRUeXBlID09IDggPyAiUENN
QSIgOiAiUENNVSI7CisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuY2xvY2tSYXRlID0gODAw
MDsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5jaGFubmVscyA9IDE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBmbXRwTGluZSA9IGZpbGxUZW1wbGF0ZShyZWdl
eHBzLmZtdHAsIHBheWxvYWQpOworICAgICAgICAgICAgICAgIHZhciBmbXRwID0gbWF0Y2gobWJs
b2NrLCBmbXRwTGluZSwgIm0iKTsKKyAgICAgICAgICAgICAgICBpZiAoZm10cCkgeworICAgICAg
ICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFtZXRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAg
ICAgZm10cFsxXS5yZXBsYWNlKG5ldyBSZWdFeHAocmVnZXhwcy5wYXJhbSwgImciKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKF8sIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvLShbYS16XSkvZywgZnVuY3Rpb24g
KF8sIGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMudG9VcHBl
ckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXlsb2FkLnBhcmFtZXRlcnNba2V5XSA9IGlzTmFOKCt2YWx1ZSkgPyB2
YWx1ZSA6ICt2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMucHVzaChwYXlsb2Fk
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB2YXIgcnRjcCA9IG1hdGNoKG1ibG9j
aywgcmVnZXhwcy5ydGNwLCAibSIpOworICAgICAgICAgICAgaWYgKHJ0Y3ApIHsKKyAgICAgICAg
ICAgICAgICBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AgPSB7CisgICAgICAgICAgICAgICAgICAgICJu
ZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICAgICAgICAgInBvcnQiOiBwYXJzZUludChydGNw
WzFdKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaWYgKHJ0Y3BbMl0pIHsK
KyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLmFkZHJlc3NUeXBlID0g
cnRjcFszXTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5ydGNwLmFkZHJl
c3MgPSBydGNwWzRdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBydGNwbXV4ID0gbWF0Y2gobWJsb2NrLCByZWdleHBzLnJ0Y3BtdXgsICJtIiwgc2Js
b2NrKTsKKyAgICAgICAgICAgIGlmIChydGNwbXV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
ZWRpYURlc2NyaXB0aW9uLnJ0Y3ApCisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRp
b24ucnRjcCA9IHt9OworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucnRjcC5tdXgg
PSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY25hbWVMaW5lcyA9IG1h
dGNoKG1ibG9jaywgcmVnZXhwcy5jbmFtZSwgIm1nIik7CisgICAgICAgICAgICBpZiAoY25hbWVM
aW5lcykgeworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uc3NyY3MgPSBbXTsKKyAg
ICAgICAgICAgICAgICBjbmFtZUxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGNuYW1lID0gbWF0Y2gobGluZSwgcmVnZXhwcy5jbmFtZSwgIm0i
KTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zc3Jjcy5wdXNoKHBhcnNl
SW50KGNuYW1lWzFdKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWVkaWFEZXNjcmlwdGlv
bi5jbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uY25hbWUg
PSBjbmFtZVsyXTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGhhc01lZGlhU3RyZWFtSWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbXNpZCA9
IG1hdGNoKG1ibG9jaywgcmVnZXhwcy5tc2lkLCAibSIpOworICAgICAgICAgICAgICAgIGlmICht
c2lkKSB7CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFTdHJlYW1J
ZCA9IG1zaWRbMl07CisgICAgICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ubWVkaWFT
dHJlYW1UcmFja0lkID0gbXNpZFszXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciB1ZnJhZyA9IG1hdGNoKG1ibG9jaywgcmVnZXhwcy51ZnJhZywg
Im0iLCBzYmxvY2spOworICAgICAgICAgICAgdmFyIHB3ZCA9IG1hdGNoKG1ibG9jaywgcmVnZXhw
cy5wd2QsICJtIiwgc2Jsb2NrKTsKKyAgICAgICAgICAgIGlmICh1ZnJhZyAmJiBwd2QpIHsKKyAg
ICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0aW9uLmljZSA9IHsKKyAgICAgICAgICAgICAgICAg
ICAgInVmcmFnIjogdWZyYWdbMV0sCisgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCI6IHB3
ZFsxXQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
Y2FuZGlkYXRlTGluZXMgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMuY2FuZGlkYXRlLCAibWlnIik7
CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlTGluZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1lZGlhRGVzY3JpcHRpb24uaWNlKQorICAgICAgICAgICAgICAgICAgICBtZWRpYURlc2NyaXB0
aW9uLmljZSA9IHt9OworICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRp
ZGF0ZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVMaW5lcy5mb3JFYWNoKGZ1bmN0
aW9uIChsaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYW5kaWRhdGVMaW5lID0gbWF0
Y2gobGluZSwgcmVnZXhwcy5jYW5kaWRhdGUsICJtaSIpOworICAgICAgICAgICAgICAgICAgICB2
YXIgY2FuZGlkYXRlID0geworICAgICAgICAgICAgICAgICAgICAgICAgImZvdW5kYXRpb24iOiBj
YW5kaWRhdGVMaW5lWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudElkIjog
cGFyc2VJbnQoY2FuZGlkYXRlTGluZVsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAidHJh
bnNwb3J0IjogY2FuZGlkYXRlTGluZVszXS50b1VwcGVyQ2FzZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgInByaW9yaXR5IjogcGFyc2VJbnQoY2FuZGlkYXRlTGluZVs0XSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAiYWRkcmVzcyI6IGNhbmRpZGF0ZUxpbmVbNV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAicG9ydCI6IHBhcnNlSW50KGNhbmRpZGF0ZUxpbmVbNl0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgInR5cGUiOiBjYW5kaWRhdGVMaW5lWzddCisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVMaW5lWzldKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlLnJlbGF0ZWRBZGRyZXNzID0gY2FuZGlkYXRl
TGluZVs5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihjYW5kaWRhdGVMaW5lWzEw
XSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUucmVsYXRlZFBvcnQgPSBwYXJz
ZUludChjYW5kaWRhdGVMaW5lWzEwXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRh
dGVMaW5lWzEyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS50Y3BUeXBlID0g
Y2FuZGlkYXRlTGluZVsxMl07CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhbmRpZGF0
ZS50cmFuc3BvcnQgPT0gIlRDUCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUucG9ydCA9PSAwIHx8IGNhbmRpZGF0ZS5wb3J0ID09IDkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYW5kaWRhdGUudGNwVHlwZSA9ICJhY3RpdmUiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5wb3J0ID0gOTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMucHVzaChjYW5kaWRhdGUpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgZmlu
Z2VycHJpbnQgPSBtYXRjaChtYmxvY2ssIHJlZ2V4cHMuZmluZ2VycHJpbnQsICJtaSIsIHNibG9j
ayk7CisgICAgICAgICAgICBpZiAoZmluZ2VycHJpbnQpIHsKKyAgICAgICAgICAgICAgICBtZWRp
YURlc2NyaXB0aW9uLmR0bHMgPSB7CisgICAgICAgICAgICAgICAgICAgICJmaW5nZXJwcmludEhh
c2hGdW5jdGlvbiI6IGZpbmdlcnByaW50WzFdLnRvTG93ZXJDYXNlKCksCisgICAgICAgICAgICAg
ICAgICAgICJmaW5nZXJwcmludCI6IGZpbmdlcnByaW50WzJdLnRvVXBwZXJDYXNlKCkKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNldHVwID0gbWF0
Y2gobWJsb2NrLCByZWdleHBzLnNldHVwLCAibSIsIHNibG9jayk7CisgICAgICAgICAgICBpZiAo
c2V0dXApIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlhRGVzY3JpcHRpb24uZHRscykKKyAg
ICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzID0ge307CisgICAgICAgICAg
ICAgICAgbWVkaWFEZXNjcmlwdGlvbi5kdGxzLnNldHVwID0gc2V0dXBbMV07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnByb3RvY29sID09ICJEVExT
L1NDVFAiKSB7CisgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwID0geworICAg
ICAgICAgICAgICAgICAgICAicG9ydCI6IGZtdFswXQorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgdmFyIHNjdHBtYXBMaW5lID0gZmlsbFRlbXBsYXRlKHJlZ2V4cHMuc2N0cG1h
cCwgbWVkaWFEZXNjcmlwdGlvbi5zY3RwKTsKKyAgICAgICAgICAgICAgICB2YXIgc2N0cG1hcCA9
IG1hdGNoKG1ibG9jaywgc2N0cG1hcExpbmUsICJtIik7CisgICAgICAgICAgICAgICAgaWYgKHNj
dHBtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwLmFwcCA9
IHNjdHBtYXBbMV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzY3RwbWFwWzJdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5zY3RwLnN0cmVhbXMgPSBwYXJzZUlu
dChzY3RwbWFwWzJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5wdXNoKG1lZGlhRGVzY3JpcHRpb24pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNkcE9iajsKKyAgICB9OworCisgICAgU0RQLmdl
bmVyYXRlID0gZnVuY3Rpb24gKHNkcE9iaikgeworICAgICAgICBzZHBPYmogPSBKU09OLnBhcnNl
KEpTT04uc3RyaW5naWZ5KHNkcE9iaikpOworICAgICAgICBhZGREZWZhdWx0cyhzZHBPYmosIHsK
KyAgICAgICAgICAgICJ2ZXJzaW9uIjogMCwKKyAgICAgICAgICAgICJvcmlnaW5hdG9yIjoge30s
CisgICAgICAgICAgICAic2Vzc2lvbk5hbWUiOiAiLSIsCisgICAgICAgICAgICAic3RhcnRUaW1l
IjogMCwKKyAgICAgICAgICAgICJzdG9wVGltZSI6IDAsCisgICAgICAgICAgICAibWVkaWFEZXNj
cmlwdGlvbnMiOiBbXQorICAgICAgICB9KTsKKyAgICAgICAgYWRkRGVmYXVsdHMoc2RwT2JqLm9y
aWdpbmF0b3IsIHsKKyAgICAgICAgICAgICJ1c2VybmFtZSI6ICItIiwKKyAgICAgICAgICAgICJz
ZXNzaW9uSWQiOiAiIiArIE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKyArbmV3IERhdGUoKSkg
KiAxZTYpLAorICAgICAgICAgICAgInNlc3Npb25WZXJzaW9uIjogMSwKKyAgICAgICAgICAgICJu
ZXRUeXBlIjogIklOIiwKKyAgICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAg
ICAgICAgImFkZHJlc3MiOiAiMTI3LjAuMC4xIgorICAgICAgICB9KTsKKyAgICAgICAgdmFyIHNk
cFRleHQgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLnNkcCwgc2RwT2JqKTsKKyAgICAgICAgc2Rw
VGV4dCA9IGZpbGxUZW1wbGF0ZShzZHBUZXh0LCBzZHBPYmoub3JpZ2luYXRvcik7CisKKyAgICAg
ICAgdmFyIG1zaWRzZW1hbnRpY0xpbmUgPSAiIjsKKyAgICAgICAgdmFyIG1lZGlhU3RyZWFtSWRz
ID0gW107CisgICAgICAgIHNkcE9iai5tZWRpYURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9u
IChtZGVzYykgeworICAgICAgICAgICAgaWYgKG1kZXNjLm1lZGlhU3RyZWFtSWQgJiYgbWRlc2Mu
bWVkaWFTdHJlYW1UcmFja0lkCisgICAgICAgICAgICAgICAgJiYgbWVkaWFTdHJlYW1JZHMuaW5k
ZXhPZihtZGVzYy5tZWRpYVN0cmVhbUlkKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBtZWRpYVN0
cmVhbUlkcy5wdXNoKG1kZXNjLm1lZGlhU3RyZWFtSWQpOworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKG1lZGlhU3RyZWFtSWRzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG1zaWRzZW1hbnRp
Y0xpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWRzZW1hbnRpYywKKyAgICAgICAgICAg
ICAgICB7ICJtZWRpYVN0cmVhbUlkcyI6IG1lZGlhU3RyZWFtSWRzLmpvaW4oIiAiKSB9KTsKKyAg
ICAgICAgfQorICAgICAgICBzZHBUZXh0ID0gZmlsbFRlbXBsYXRlKHNkcFRleHQsIHsgIm1zaWRz
ZW1hbnRpY0xpbmUiOiBtc2lkc2VtYW50aWNMaW5lIH0pOworCisgICAgICAgIHNkcE9iai5tZWRp
YURlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtZWRpYURlc2NyaXB0aW9uKSB7CisgICAg
ICAgICAgICBhZGREZWZhdWx0cyhtZWRpYURlc2NyaXB0aW9uLCB7CisgICAgICAgICAgICAgICAg
InBvcnQiOiA5LAorICAgICAgICAgICAgICAgICJwcm90b2NvbCI6ICJVRFAvVExTL1JUUC9TQVZQ
RiIsCisgICAgICAgICAgICAgICAgIm5ldFR5cGUiOiAiSU4iLAorICAgICAgICAgICAgICAgICJh
ZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAgICAgICAgICAgICJhZGRyZXNzIjogIjAuMC4wLjAi
LAorICAgICAgICAgICAgICAgICJtb2RlIjogInNlbmRyZWN2IiwKKyAgICAgICAgICAgICAgICAi
cGF5bG9hZHMiOiBbXSwKKyAgICAgICAgICAgICAgICAicnRjcCI6IHt9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHZhciBtYmxvY2sgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1ibG9j
aywgbWVkaWFEZXNjcmlwdGlvbik7CisKKyAgICAgICAgICAgIHZhciBwYXlsb2FkSW5mbyA9IHsi
cnRwTWFwTGluZXMiOiAiIiwgImZtdHBMaW5lcyI6ICIiLCAibmFja0xpbmVzIjogIiIsCisgICAg
ICAgICAgICAgICAgIm5hY2twbGlMaW5lcyI6ICIiLCAiY2NtZmlyTGluZXMiOiAiIiwgImVyaWNT
Y3JlYW1MaW5lcyI6ICIifTsKKyAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24ucGF5bG9hZHMu
Zm9yRWFjaChmdW5jdGlvbiAocGF5bG9hZCkgeworICAgICAgICAgICAgICAgIGlmIChwYXlsb2Fk
SW5mby5mbXQpCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmZtdCArPSAiICIgKyBw
YXlsb2FkLnR5cGU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBw
YXlsb2FkSW5mby5mbXQgPSBwYXlsb2FkLnR5cGU7CisgICAgICAgICAgICAgICAgaWYgKCFwYXls
b2FkLmNoYW5uZWxzIHx8IHBheWxvYWQuY2hhbm5lbHMgPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC5jaGFubmVscyA9IG51bGw7CisgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8u
cnRwTWFwTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5ydHBNYXAsIHBheWxvYWQpOwor
ICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGZtdHBJbmZvID0geyAidHlwZSI6IHBheWxvYWQudHlwZSwgInBhcmFtZXRlcnMi
OiAiIiB9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHBheWxvYWQucGFyYW1l
dGVycykgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcC5yZXBsYWNlKC8o
W0EtWl0pKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgYSwgYikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiLSIgKyBhLnRvTG93ZXJDYXNlKCkgKyBiOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm10cEluZm8ucGFy
YW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRwSW5mby5wYXJhbWV0ZXJz
ICs9ICI7IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBJbmZvLnBhcmFtZXRlcnMgKz0g
cGFyYW0gKyAiPSIgKyBwYXlsb2FkLnBhcmFtZXRlcnNbcF07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZEluZm8uZm10cExpbmVzICs9IGZpbGxUZW1w
bGF0ZSh0ZW1wbGF0ZXMuZm10cCwgZm10cEluZm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAocGF5bG9hZC5uYWNrKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk
SW5mby5uYWNrTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5uYWNrLCBwYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYWNrcGxpKQorICAgICAgICAgICAgICAgICAg
ICBwYXlsb2FkSW5mby5uYWNrcGxpTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5uYWNr
cGxpLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5jY21maXIpCisgICAg
ICAgICAgICAgICAgICAgIHBheWxvYWRJbmZvLmNjbWZpckxpbmVzICs9IGZpbGxUZW1wbGF0ZSh0
ZW1wbGF0ZXMuY2NtZmlyLCBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5l
cmljc2NyZWFtKQorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkSW5mby5lcmljU2NyZWFtTGlu
ZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5lcmljc2NyZWFtLCBwYXlsb2FkKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRlKG1ibG9jaywgcGF5
bG9hZEluZm8pOworCisgICAgICAgICAgICB2YXIgcnRjcEluZm8gPSB7InJ0Y3BMaW5lIjogIiIs
ICJydGNwTXV4TGluZSI6ICIifTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnJ0
Y3AucG9ydCkgeworICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24u
cnRjcCwgeworICAgICAgICAgICAgICAgICAgICAibmV0VHlwZSI6ICJJTiIsCisgICAgICAgICAg
ICAgICAgICAgICJhZGRyZXNzVHlwZSI6ICJJUDQiLAorICAgICAgICAgICAgICAgICAgICAiYWRk
cmVzcyI6ICIiCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKCFtZWRp
YURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNj
cmlwdGlvbi5ydGNwLm5ldFR5cGUgPSBtZWRpYURlc2NyaXB0aW9uLnJ0Y3AuYWRkcmVzc1R5cGUg
PSAiIjsKKyAgICAgICAgICAgICAgICBydGNwSW5mby5ydGNwTGluZSA9IGZpbGxUZW1wbGF0ZSh0
ZW1wbGF0ZXMucnRjcCwgbWVkaWFEZXNjcmlwdGlvbi5ydGNwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLnJ0Y3AubXV4KQorICAgICAgICAgICAgICAg
IHJ0Y3BJbmZvLnJ0Y3BNdXhMaW5lID0gdGVtcGxhdGVzLnJ0Y3BNdXg7CisgICAgICAgICAgICBt
YmxvY2sgPSBmaWxsVGVtcGxhdGUobWJsb2NrLCBydGNwSW5mbyk7CisKKyAgICAgICAgICAgIHZh
ciBzcmNBdHRyaWJ1dGVMaW5lcyA9IHsgImNuYW1lTGluZXMiOiAiIiwgIm1zaWRMaW5lcyI6ICIi
IH07CisgICAgICAgICAgICB2YXIgc3JjQXR0cmlidXRlcyA9IHsKKyAgICAgICAgICAgICAgICAi
Y25hbWUiOiBtZWRpYURlc2NyaXB0aW9uLmNuYW1lLAorICAgICAgICAgICAgICAgICJtZWRpYVN0
cmVhbUlkIjogbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbUlkLAorICAgICAgICAgICAgICAg
ICJtZWRpYVN0cmVhbVRyYWNrSWQiOiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJ
ZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmNuYW1l
ICYmIG1lZGlhRGVzY3JpcHRpb24uc3NyY3MpIHsKKyAgICAgICAgICAgICAgICBtZWRpYURlc2Ny
aXB0aW9uLnNzcmNzLmZvckVhY2goZnVuY3Rpb24gKHNzcmMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3JjQXR0cmlidXRlcy5zc3JjID0gc3NyYzsKKyAgICAgICAgICAgICAgICAgICAgc3JjQXR0
cmlidXRlTGluZXMuY25hbWVMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmNuYW1lLCBz
cmNBdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24u
bWVkaWFTdHJlYW1JZCAmJiBtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFtVHJhY2tJZCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNyY0F0dHJpYnV0ZUxpbmVzLm1zaWRMaW5lcyArPSBmaWxs
VGVtcGxhdGUodGVtcGxhdGVzLm1zaWQsIHNyY0F0dHJpYnV0ZXMpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSBlbHNlIGlmIChtZWRpYURlc2NyaXB0aW9uLm1lZGlhU3RyZWFt
SWQgJiYgbWVkaWFEZXNjcmlwdGlvbi5tZWRpYVN0cmVhbVRyYWNrSWQpIHsKKyAgICAgICAgICAg
ICAgICBzcmNBdHRyaWJ1dGVzLnNzcmMgPSBudWxsOworICAgICAgICAgICAgICAgIHNyY0F0dHJp
YnV0ZUxpbmVzLm1zaWRMaW5lcyArPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLm1zaWQsIHNyY0F0
dHJpYnV0ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBs
YXRlKG1ibG9jaywgc3JjQXR0cmlidXRlTGluZXMpOworCisgICAgICAgICAgICB2YXIgaWNlSW5m
byA9IHsiaWNlQ3JlZGVudGlhbExpbmVzIjogIiIsICJjYW5kaWRhdGVMaW5lcyI6ICIifTsKKyAg
ICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmljZSkgeworICAgICAgICAgICAgICAgIGlj
ZUluZm8uaWNlQ3JlZGVudGlhbExpbmVzID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5pY2VDcmVk
ZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFEZXNjcmlwdGlvbi5pY2UpOworICAg
ICAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0aW9uLmljZS5jYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uaWNlLmNhbmRpZGF0ZXMuZm9yRWFjaChm
dW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGREZWZhdWx0
cyhjYW5kaWRhdGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVsYXRlZEFkZHJl
c3MiOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWxhdGVkUG9ydCI6IG51
bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRjcFR5cGUiOiBudWxsCisgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGljZUluZm8uY2Fu
ZGlkYXRlTGluZXMgKz0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5jYW5kaWRhdGUsIGNhbmRpZGF0
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZShtYmxvY2ssIGljZUluZm8p
OworCisgICAgICAgICAgICB2YXIgZHRsc0luZm8gPSB7ICJkdGxzRmluZ2VycHJpbnRMaW5lIjog
IiIsICJkdGxzU2V0dXBMaW5lIjogIiIgfTsKKyAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0
aW9uLmR0bHMpIHsKKyAgICAgICAgICAgICAgICBpZiAobWVkaWFEZXNjcmlwdGlvbi5kdGxzLmZp
bmdlcnByaW50KSB7CisgICAgICAgICAgICAgICAgICAgIGR0bHNJbmZvLmR0bHNGaW5nZXJwcmlu
dExpbmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmR0bHNGaW5nZXJwcmludCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1lZGlhRGVzY3JpcHRpb24uZHRscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24uZHRscywgeyJz
ZXR1cCI6ICJhY3RwYXNzIn0pOworICAgICAgICAgICAgICAgIGR0bHNJbmZvLmR0bHNTZXR1cExp
bmUgPSBmaWxsVGVtcGxhdGUodGVtcGxhdGVzLmR0bHNTZXR1cCwgbWVkaWFEZXNjcmlwdGlvbi5k
dGxzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ibG9jayA9IGZpbGxUZW1wbGF0ZSht
YmxvY2ssIGR0bHNJbmZvKTsKKworICAgICAgICAgICAgdmFyIHNjdHBJbmZvID0geyJzY3RwbWFw
TGluZSI6ICIiLCAiZm10IjogIiJ9OworICAgICAgICAgICAgaWYgKG1lZGlhRGVzY3JpcHRpb24u
c2N0cCkgeworICAgICAgICAgICAgICAgIGFkZERlZmF1bHRzKG1lZGlhRGVzY3JpcHRpb24uc2N0
cCwgeyJzdHJlYW1zIjogbnVsbH0pOworICAgICAgICAgICAgICAgIHNjdHBJbmZvLnNjdHBtYXBM
aW5lID0gZmlsbFRlbXBsYXRlKHRlbXBsYXRlcy5zY3RwbWFwLCBtZWRpYURlc2NyaXB0aW9uLnNj
dHApOworICAgICAgICAgICAgICAgIHNjdHBJbmZvLmZtdCA9IG1lZGlhRGVzY3JpcHRpb24uc2N0
cC5wb3J0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJsb2NrID0gZmlsbFRlbXBsYXRl
KG1ibG9jaywgc2N0cEluZm8pOworCisgICAgICAgICAgICBzZHBUZXh0ICs9IG1ibG9jazsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHNkcFRleHQ7CisgICAgfTsKKworICAgIFNEUC5n
ZW5lcmF0ZUNhbmRpZGF0ZUxpbmUgPSBmdW5jdGlvbiAoY2FuZGlkYXRlT2JqKSB7CisgICAgICAg
IGFkZERlZmF1bHRzKGNhbmRpZGF0ZU9iaiwgeworICAgICAgICAgICAgInJlbGF0ZWRBZGRyZXNz
IjogbnVsbCwKKyAgICAgICAgICAgICJyZWxhdGVkUG9ydCI6IG51bGwsCisgICAgICAgICAgICAi
dGNwVHlwZSI6IG51bGwKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIGZpbGxUZW1wbGF0
ZSh0ZW1wbGF0ZXMuY2FuZGlkYXRlLCBjYW5kaWRhdGVPYmopOworICAgIH07CisKKyAgICB2YXIg
ZXhwZWN0ZWRQcm9wZXJ0aWVzID0geworICAgICAgICAic2Vzc2lvbiI6IFsgInZlcnNpb24iLCAi
b3JpZ2luYXRvciIsICJzZXNzaW9uTmFtZSIsICJzdGFydFRpbWUiLCAic3RvcFRpbWUiIF0sCisg
ICAgICAgICJtbGluZSI6IFsgInR5cGUiLCAicG9ydCIsICJwcm90b2NvbCIsICJtb2RlIiwgInBh
eWxvYWRzIiwgInJ0Y3AiLCAibWVkaWFTdHJlYW1JZCIsCisgICAgICAgICAgICAibWVkaWFTdHJl
YW1UcmFja0lkIiwgImR0bHMiLCAic3NyY3MiLCAiY25hbWUiLCAiaWNlIiBdLAorICAgICAgICAi
bWxpbmVTdWJPYmplY3RzIjogeworICAgICAgICAgICAgInJ0Y3AiOiBbICJtdXgiIF0sCisgICAg
ICAgICAgICAiaWNlIjogWyAidWZyYWciLCAicGFzc3dvcmQiIF0sCisgICAgICAgICAgICAiZHRs
cyI6IFsgInNldHVwIiwgImZpbmdlcnByaW50SGFzaEZ1bmN0aW9uIiwgImZpbmdlcnByaW50IiBd
CisgICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gaGFzQWxsUHJvcGVydGllcyhvYmpl
Y3QsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG1pc3NpbmcgPSBwcm9wZXJ0aWVzLmZpbHRl
cihmdW5jdGlvbiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgIHJldHVybiAhb2JqZWN0Lmhhc093
blByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuICFtaXNz
aW5nLmxlbmd0aDsKKyAgICB9CisKKyAgICBTRFAudmVyaWZ5T2JqZWN0ID0gZnVuY3Rpb24gKHNk
cE9iaikgeworICAgICAgICBpZiAoIWhhc0FsbFByb3BlcnRpZXMoc2RwT2JqLCBleHBlY3RlZFBy
b3BlcnRpZXMuc2Vzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzZHBPYmoubWVkaWFEZXNjcmlwdGlvbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIHZhciBtZWRpYURlc2NyaXB0aW9uID0gc2RwT2JqLm1lZGlhRGVzY3Jp
cHRpb25zW2ldOworCisgICAgICAgICAgICBpZiAoIWhhc0FsbFByb3BlcnRpZXMobWVkaWFEZXNj
cmlwdGlvbiwgZXhwZWN0ZWRQcm9wZXJ0aWVzLm1saW5lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAodmFyIHAgaW4gZXhwZWN0ZWRQcm9wZXJ0aWVz
Lm1saW5lU3ViT2JqZWN0cykgeworICAgICAgICAgICAgICAgIGlmICghaGFzQWxsUHJvcGVydGll
cyhtZWRpYURlc2NyaXB0aW9uW3BdLCBleHBlY3RlZFByb3BlcnRpZXMubWxpbmVTdWJPYmplY3Rz
W3BdKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworfSkoKTsKKworZnVu
Y3Rpb24gZ2VuZXJhdGUoanNvbikgeworICAgIHZhciBvYmplY3QgPSBKU09OLnBhcnNlKGpzb24p
OworICAgIHJldHVybiBTRFAuZ2VuZXJhdGUob2JqZWN0KTsKK30KKworZnVuY3Rpb24gcGFyc2Uo
c2RwKSB7CisgICAgdmFyIG9iamVjdCA9IFNEUC5wYXJzZShzZHApOworCisgICAgaWYgKCFTRFAu
dmVyaWZ5T2JqZWN0KG9iamVjdCkpCisgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciI7CisKKyAg
ICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVD
YW5kaWRhdGVMaW5lKGpzb24pIHsKKyAgICB2YXIgY2FuZGlkYXRlID0gSlNPTi5wYXJzZShqc29u
KTsKKyAgICByZXR1cm4gU0RQLmdlbmVyYXRlQ2FuZGlkYXRlTGluZShjYW5kaWRhdGUpLnN1YnN0
cigyKTsKK30KKworZnVuY3Rpb24gcGFyc2VDYW5kaWRhdGVMaW5lKGNhbmRpZGF0ZUxpbmUpIHsK
KyAgICB2YXIgbWRlc2MgPSBTRFAucGFyc2UoIm09YXBwbGljYXRpb24gMCBOT05FXHJcbmE9IiAr
IGNhbmRpZGF0ZUxpbmUgKyAiXHJcbiIpLm1lZGlhRGVzY3JpcHRpb25zWzBdOworICAgIGlmICgh
bWRlc2MuaWNlKQorICAgICAgICByZXR1cm4gIlBhcnNlRXJyb3IiOworCisgICAgcmV0dXJuIEpT
T04uc3RyaW5naWZ5KG1kZXNjLmljZS5jYW5kaWRhdGVzWzBdKTsKK30KKworaWYgKHR5cGVvZiht
b2R1bGUpICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZihleHBvcnRzKSAhPSAidW5kZWZpbmVkIikK
KyAgICBtb2R1bGUuZXhwb3J0cyA9IFNEUDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
ODE5ZjVlYi4uZTZjODdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQ0LDYgKzQ0
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy94MTEiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL21lZGlhc3RyZWFt
L2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZSIKICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9ndGsiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKQEAgLTE1NCw2ICsxNTUsOCBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlRGVjb2RlckNhaXJvLmNwcAogCisgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAorCiAgICAgcGxhdGZvcm0vbmV0d29yay9ndGsv
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCkBAIC0yNDgsNiArMjUxLDkgQEAgc2V0KFdl
YkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTCiAKIHNldChXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBU
U19ERVBFTkRFTkNJRVMgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcCkKIAorc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9TQ1JJUFRTICR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvbWVkaWFzdHJlYW0vc2RwLmpzKQorc2V0KFdlYkNvcmVfU0RQX1BST0NFU1NPUl9T
Q1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
dGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuY3BwKQorCiBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUwogICAgICR7QVRLX0xJQlJBUklFU30KICAgICAke0NBSVJPX0xJQlJBUklFU30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzZjk3MmI4Li44NjIyYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzk2LDYgKzIzOTYsMTIgQEAKIAkJNUUyQzQz
NzQxQkNGMEQ3NTAwMDFFMkJDIC8qIEpTUlRDUnRwU2VuZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTJDNDM3MDFCQ0YwRDY5MDAwMUUyQkMgLyog
SlNSVENSdHBTZW5kZXIuaCAqLzsgfTsKIAkJNUUyQzQzN0IxQkNGOUE1NzAwMDFFMkJDIC8qIFJU
Q1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVFMkM0Mzc2MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVj
dGlvbkJ1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNUUyQzQzN0MxQkNGOUE4NDAwMDFFMkJDIC8qIFJUQ1BlZXJDb25uZWN0aW9uSW50
ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVFMkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkludGVy
bmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNUVBM0Q2REYxQzg1OUQ3RjAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RUEzRDZERTFD
ODU5RDUzMDAzMDBCQkIgLyogTW9ja01lZGlhRW5kcG9pbnQuaCAqLzsgfTsKKwkJNUVBM0Q2RTAx
Qzg1OUQ4NDAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkREMUM4NTlENTMwMDMwMEJCQiAv
KiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi87IH07CisJCTVFQTNENkUzMUM4NTlEQzEwMDMwMEJC
QiAvKiBTRFBQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUVBM0Q2RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAg
Ki87IH07CisJCTVFQTNENkU0MUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkUyMUM4NTlE
QUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCAqLzsgfTsKKwkJNUVBM0Q2RTcxQzg1QTlEQjAw
MzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTNENkU1MUM4NUE5QzMwMDMwMEJCQiAv
KiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAgKi87IH07CisJCTVFQTNENkU4MUM4NUE5
REIwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJC
IC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi87IH07CiAJCTVFQTcyNUQyMUFDQUJE
NDcwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUVBNzI1Q0QxQUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2
aWNlcy5jcHAgKi87IH07CiAJCTVFQTcyNUQzMUFDQUJENDcwMEVBRDE3QiAvKiBNZWRpYURldmlj
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcy
NUNFMUFDQUJDRDkwMEVBRDE3QiAvKiBNZWRpYURldmljZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1RUE3MjVENTFBQ0FCRDU3MDBFQUQxN0Ig
LyogTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JN
ZWRpYURldmljZXMuY3BwICovOyB9OwpAQCAtOTk3Miw2ICs5OTc4LDEyIEBACiAJCTVFMkM0Mzc2
MUJDRjlBMEIwMDAxRTJCQyAvKiBSVENQZWVyQ29ubmVjdGlvbkJ1aWx0aW5zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uQnVpbHRpbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUUyQzQzNzgxQkNGOUEwQjAwMDFFMkJDIC8qIFJU
Q1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHNCdWlsdGlucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVFMkM0Mzc5MUJDRjlBMEIwMDAxRTJCQyAv
KiBSVENQZWVyQ29ubmVjdGlvbkludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2REQxQzg1OUQ1MzAwMzAwQkJCIC8qIE1v
Y2tNZWRpYUVuZHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1vY2tNZWRpYUVuZHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVB
M0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tNZWRpYUVuZHBvaW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVFQTNENkUxMUM4NTlEQUEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU0RQUHJvY2Vzc29yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2RTIxQzg1OURBQTAwMzAwQkJC
IC8qIFNEUFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTRFBQ
cm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2RTUxQzg1QTlD
MzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUVBM0Q2RTYxQzg1QTlDMzAwMzAwQkJCIC8q
IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVFQTcyNUNBMUFDQUJDQjUwMEVBRDE3QiAvKiBOYXZpZ2F0b3JNZWRpYURldmlj
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yTWVk
aWFEZXZpY2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0IxQUNB
QkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlhRGV2aWNlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JNZWRpYURldmljZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUVBNzI1Q0MxQUNBQkNCNTAwRUFEMTdCIC8qIE5hdmlnYXRvck1lZGlh
RGV2aWNlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDQxLDYgKzE1NDUzLDggQEAK
IAkJCQk1RTJDNDM2NDFCQ0VFMzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5jcHAgKi8sCiAJ
CQkJNUUyQzQzNjUxQkNFRTM3MjAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuaCAqLywKIAkJCQk1
RTJDNDM2NjFCQ0VFMzcyMDAwMUUyQkMgLyogUlRDVHJhY2tFdmVudC5pZGwgKi8sCisJCQkJNUVB
M0Q2RTExQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5jcHAgKi8sCisJCQkJNUVBM0Q2
RTIxQzg1OURBQTAwMzAwQkJCIC8qIFNEUFByb2Nlc3Nvci5oICovLAogCQkJCTA3NjMwNkQ0MTdF
MTQ5Q0YwMDVBN0M0RSAvKiBTb3VyY2VJbmZvLmNwcCAqLywKIAkJCQkwNzYzMDZENTE3RTE0OUNG
MDA1QTdDNEUgLyogU291cmNlSW5mby5oICovLAogCQkJCTA3NjMwNkQ2MTdFMTQ5Q0YwMDVBN0M0
RSAvKiBTb3VyY2VJbmZvLmlkbCAqLywKQEAgLTE1NTAyLDYgKzE1NTE2LDggQEAKIAkJCQkwNzIy
MUJBRTE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDU3RhdHNSZXF1ZXN0LmggKi8sCiAJCQkJMDcyMjFC
QUYxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1N0YXRzUmVzcG9uc2VCYXNlLmggKi8sCiAJCQkJMDcy
MjFCQjAxN0NGMEFENDAwODQ4RTUxIC8qIFJUQ1ZvaWRSZXF1ZXN0LmggKi8sCisJCQkJNUVBM0Q2
RTUxQzg1QTlDMzAwMzAwQkJCIC8qIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCAqLywK
KwkJCQk1RUEzRDZFNjFDODVBOUMzMDAzMDBCQkIgLyogU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UuaCAqLywKIAkJCQkwNzBFODFEMDFCRjI3NjU2MDAxRkRBNDggLyogVmlkZW9UcmFja1ByaXZh
dGVNZWRpYVN0cmVhbS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBtZWRpYXN0cmVhbTsKQEAgLTE3
NDM4LDYgKzE3NDU0LDggQEAKIAkJCQkwNzdCNjQxNTFCOTVGNzAzMDAzRTlBRDUgLyogTWVkaWFQ
bGF5YmFja1RhcmdldE1vY2suaCAqLywKIAkJCQkwNzdCNjQxMDFCOTRGMTJFMDAzRTlBRDUgLyog
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1vY2suY3BwICovLAogCQkJCTA3N0I2NDExMUI5NEYx
MkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5oICovLAorCQkJCTVF
QTNENkREMUM4NTlENTMwMDMwMEJCQiAvKiBNb2NrTWVkaWFFbmRwb2ludC5jcHAgKi8sCisJCQkJ
NUVBM0Q2REUxQzg1OUQ1MzAwMzAwQkJCIC8qIE1vY2tNZWRpYUVuZHBvaW50LmggKi8sCiAJCQkJ
MDdENkE0RjExQkVENUY4ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAq
LywKIAkJCQkwN0Q2QTRGMjFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3Vy
Y2UuaCAqLywKIAkJCQkwN0Q2QTRFRDFCRUNGMkQyMDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuY3BwICovLApAQCAtMjU2NjEsNiArMjU2NzksNyBAQAogCQkJCTg1RTcxMUE2MEFD
NUQ1MzUwMDUzMjcwRiAvKiBET01IVE1MRG9jdW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODVERjJFRUQwQUEzODdDQjAwQUQ2NEM1IC8qIERPTUhUTUxFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NUU3MTFBNzBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTEVsZW1lbnRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVBM0Q2REYxQzg1OUQ3RjAwMzAwQkJCIC8q
IE1vY2tNZWRpYUVuZHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTQwNzU2QTBBRDZDQkY5
MDA2MjBDNTcgLyogRE9NSFRNTEVtYmVkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU1
MjQ3RDAwQUQ4NTBCODAwMTIwOTNCIC8qIERPTUhUTUxFbWJlZEVsZW1lbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODVCQTRDREYwQUE2ODYxQjAwODgwNTJEIC8qIERPTUhUTUxGaWVs
ZFNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU4NjIsNiArMjU4ODEsNyBAQAogCQkJ
CTMxQzBGRjRDMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxQzBGRjRFMEU0Q0VGREQwMDdENkZFNSAvKiBET01XZWJLaXRU
cmFuc2l0aW9uRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVDN0Y1RTcwQUFG
QkFGQjAwNDAxNEREIC8qIERPTVdoZWVsRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVFQTNE
NkU0MUM4NTlEQzEwMDMwMEJCQiAvKiBTRFBQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1OTg5REQxMEFDQzhCQkQwMEEwQkM1MSAvKiBET01XaGVlbEV2ZW50SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCBp
biBIZWFkZXJzICovLAogCQkJCUZDOUEwRjc1MTY0MDk0Q0YwMDNENkI4RCAvKiBET01XaW5kb3dD
U1MuaCBpbiBIZWFkZXJzICovLApAQCAtMjczMzUsNiArMjczNTUsNyBAQAogCQkJCUNENUU1QjVG
MUExNUNFNTQwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjM4MjA4OTMxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VDb25zb2xlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQYWdlQ29uc29sZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUVBM0Q2RTgxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUEyQUYwQzE4Mjk3
MzQzMDBERTE3MjkgLyogUGFnZURlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0
MkREMTM0MzYyRjAwMDUzMUJDMiAvKiBQYWdlRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMDI5OSw2ICszMDMyMCw3IEBACiAJCQkJQkM0OTE4QzYwQkZFQTA1MDAwOUQ2MzE2
IC8qIEpTSFRNTEZyYW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDdBNTBD
NkMwRjM2MDA5MjBCRkYgLyogSlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDOTI2RjgwMEMwNTUyNDcwMDgyNzc2QiAvKiBKU0hUTUxGcmFtZVNldEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVBM0Q2RTMxQzg1OURDMTAwMzAwQkJCIC8qIFNE
UFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q0MUFCQjBDMDYwREU4MDBDMEU0
NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4MEU3QjE0MEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxIZWFkRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUUyQUEyRTBBMUNEQUI0MDBCNDJCMjUgLyogSlNIVE1MSGVhZGluZ0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTM0MSw2ICszMTM2Myw3IEBACiAJCQkJNUUy
QzQzNjcxQkNFRTM3NzAwMDFFMkJDIC8qIFJUQ1RyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTgyNEFCQTIxQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTU4MjRBQkE2MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUVBM0Q2RTcxQzg1QTlEQjAwMzAwQkJCIC8qIFNEUFBy
b2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OUJBREExMTYx
RTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzlC
QURBMzE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
RDc2QkI4NDE5NDU2RjgxMDBDRkQyOUEgLyogUnVuTG9vcE9ic2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMzEzODQsNiArMzE0MDcsNyBAQAogCQkJCTBGQzRFNDBFMTg3RjgyRTEwMDQ1ODgy
QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRjYy
RUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzQzM4QkZFMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZp
eGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1RUEzRDZFMDFDODU5RDg0MDAzMDBCQkIg
LyogTW9ja01lZGlhRW5kcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTNFN0MxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQTg4RUJEMTZBOEQxQkQwMEY5OTk4NCAvKiBTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzMUNCRDBDMTYx
QTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUVuZHBv
aW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9p
bnQuY3BwCmluZGV4IDAxZmI2YzcuLjJjMzg2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuY3BwCkBAIC0zNSw3ICszNSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1lZGlhRW5kcG9pbnRDbGllbnQqKQorc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGVNZWRpYUVuZHBvaW50KE1l
ZGlhRW5kcG9pbnRDbGllbnQmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludC5oCmluZGV4
IDU3MDY4OGQuLjYxMjk3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50LmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfk1lZGlhRW5kcG9pbnRDbGllbnQoKSB7IH0KIH07CiAKLXR5cGVkZWYgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+ICgqQ3JlYXRlTWVkaWFFbmRwb2ludCkoTWVkaWFFbmRw
b2ludENsaWVudCopOwordHlwZWRlZiBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gKCpD
cmVhdGVNZWRpYUVuZHBvaW50KShNZWRpYUVuZHBvaW50Q2xpZW50Jik7CiAKIGNsYXNzIE1lZGlh
RW5kcG9pbnQgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUGVlck1lZGlhRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1BlZXJNZWRpYURlc2NyaXB0aW9uLmgKaW5kZXggYWM2YzZkNC4uMWMx
Mzg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUGVl
ck1lZGlhRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9QZWVyTWVkaWFEZXNjcmlwdGlvbi5oCkBAIC0xNTAsMjAgKzE1MCwyMCBAQCBwcml2YXRl
OgogICAgIFBlZXJNZWRpYURlc2NyaXB0aW9uKCkgeyB9CiAKICAgICBTdHJpbmcgbV90eXBlOwot
ICAgIHVuc2lnbmVkIHNob3J0IG1fcG9ydCB7IDAgfTsKLSAgICBTdHJpbmcgbV9hZGRyZXNzOwot
ICAgIFN0cmluZyBtX21vZGU7CisgICAgdW5zaWduZWQgc2hvcnQgbV9wb3J0IHsgOSB9OworICAg
IFN0cmluZyBtX2FkZHJlc3MgeyAiMC4wLjAuMCIgfTsKKyAgICBTdHJpbmcgbV9tb2RlIHsgInNl
bmRyZWN2IiB9OwogCiAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBheWxvYWQ+PiBtX3BheWxvYWRz
OwogCi0gICAgYm9vbCBtX3J0Y3BNdXggeyBmYWxzZSB9OworICAgIGJvb2wgbV9ydGNwTXV4IHsg
dHJ1ZSB9OwogICAgIFN0cmluZyBtX3J0Y3BBZGRyZXNzOwogICAgIHVuc2lnbmVkIHNob3J0IG1f
cnRjcFBvcnQgeyAwIH07CiAKICAgICBTdHJpbmcgbV9tZWRpYVN0cmVhbUlkOwogICAgIFN0cmlu
ZyBtX21lZGlhU3RyZWFtVHJhY2tJZDsKIAotICAgIFN0cmluZyBtX2R0bHNTZXR1cDsKKyAgICBT
dHJpbmcgbV9kdGxzU2V0dXAgeyAiYWN0cGFzcyIgfTsKICAgICBTdHJpbmcgbV9kdGxzRmluZ2Vy
cHJpbnRIYXNoRnVuY3Rpb247CiAgICAgU3RyaW5nIG1fZHRsc0ZpbmdlcnByaW50OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9T
RFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYmNiOTVhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlLmNwcApAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisg
KiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UgeworCitj
b25zdCBTdHJpbmcmIHNjcmlwdFN0cmluZygpCit7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xY2RjN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UuaApAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNz
c29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VfaAorI2RlZmluZSBTRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlIHsKKworY29uc3QgU3RyaW5nJiBz
Y3JpcHRTdHJpbmcoKTsKKworfSAvLyBuYW1lc3BhY2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3Vy
Y2UKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2VuZGlmIC8vIFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VH
dGsuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRXJpY3Nz
b24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKKyNpbmNsdWRlICJTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZS5oIgorCisjaW5jbHVkZSAiU0RQUHJvY2Vzc29yU2NyaXB0cy5oIgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTRFBQ
cm9jZXNzb3JTY3JpcHRSZXNvdXJjZSB7CisKK2NvbnN0IFN0cmluZyYgc2NyaXB0U3RyaW5nKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzY3JpcHQgPSBTdHJp
bmcoc2RwSmF2YVNjcmlwdCk7CisgICAgcmV0dXJuIHNjcmlwdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2UKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjE3OTlkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5j
bHVkZSAiTW9ja01lZGlhRW5kcG9pbnQuaCIKKworI2luY2x1ZGUgIk1lZGlhUGF5bG9hZC5oIgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGZpbmdlcnByaW50ID0gIjhCOjg3OjA5OjhBOjVEOkMyOkYzOjMzOkVG
OkM1OkIxOkY2Ojg0OjNBOjNEOkQ2OkEzOkUyOjlDOjE3OjRDOkU3OjQ2OjNCOjFCOkNFOjg0Ojk4
OkREOjhFOkFGOjdCIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBmaW5nZXJwcmludEZ1bmN0aW9uID0g
InNoYS0yNTYiOworCitzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFFbmRwb2ludD4gTW9ja01lZGlhRW5k
cG9pbnQ6OmNyZWF0ZShNZWRpYUVuZHBvaW50Q2xpZW50JiBjbGllbnQpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PihuZXcgTW9ja01lZGlhRW5kcG9pbnQoY2xp
ZW50KSk7Cit9CisKK01vY2tNZWRpYUVuZHBvaW50OjpNb2NrTWVkaWFFbmRwb2ludChNZWRpYUVu
ZHBvaW50Q2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK01v
Y2tNZWRpYUVuZHBvaW50Ojp+TW9ja01lZGlhRW5kcG9pbnQoKQoreworICAgIHN0b3AoKTsKK30K
Kwordm9pZCBNb2NrTWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbihSZWZQdHI8TWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24+JiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBVTlVTRURfUEFS
QU0oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmdlbmVyYXRl
RHRsc0luZm8oKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdKCkgeworICAgICAgICBt
X2NsaWVudC5nb3REdGxzRmluZ2VycHJpbnQoU3RyaW5nKGZpbmdlcnByaW50KSwgU3RyaW5nKGZp
bmdlcnByaW50RnVuY3Rpb24pKTsKKyAgICB9KTsKK30KKworVmVjdG9yPFJlZlB0cjxNZWRpYVBh
eWxvYWQ+PiBNb2NrTWVkaWFFbmRwb2ludDo6Z2V0RGVmYXVsdEF1ZGlvUGF5bG9hZHMoKQorewor
ICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gcGF5bG9hZHM7CisKKyAgICBSZWZQdHI8
TWVkaWFQYXlsb2FkPiBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXls
b2FkLT5zZXRUeXBlKDExMSk7CisgICAgcGF5bG9hZC0+c2V0RW5jb2RpbmdOYW1lKCJPUFVTIik7
CisgICAgcGF5bG9hZC0+c2V0Q2xvY2tSYXRlKDQ4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDaGFu
bmVscygyKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisKKyAgICBwYXlsb2FkID0g
TWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBlKDgpOworICAgIHBh
eWxvYWQtPnNldEVuY29kaW5nTmFtZSgiUENNQSIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0
ZSg4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRDaGFubmVscygxKTsKKyAgICBwYXlsb2Fkcy5hcHBl
bmQocGF5bG9hZCk7CisKKyAgICBwYXlsb2FkID0gTWVkaWFQYXlsb2FkOjpjcmVhdGUoKTsKKyAg
ICBwYXlsb2FkLT5zZXRUeXBlKDApOworICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiUENN
VSIpOworICAgIHBheWxvYWQtPnNldENsb2NrUmF0ZSg4MDAwKTsKKyAgICBwYXlsb2FkLT5zZXRD
aGFubmVscygxKTsKKyAgICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisKKyAgICByZXR1cm4g
cGF5bG9hZHM7Cit9CisKK1ZlY3RvcjxSZWZQdHI8TWVkaWFQYXlsb2FkPj4gTW9ja01lZGlhRW5k
cG9pbnQ6OmdldERlZmF1bHRWaWRlb1BheWxvYWRzKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPE1l
ZGlhUGF5bG9hZD4+IHBheWxvYWRzOworCisgICAgUmVmUHRyPE1lZGlhUGF5bG9hZD4gcGF5bG9h
ZCA9IE1lZGlhUGF5bG9hZDo6Y3JlYXRlKCk7CisgICAgcGF5bG9hZC0+c2V0VHlwZSgxMDMpOwor
ICAgIHBheWxvYWQtPnNldEVuY29kaW5nTmFtZSgiSDI2NCIpOworICAgIHBheWxvYWQtPnNldENs
b2NrUmF0ZSg5MDAwMCk7CisgICAgcGF5bG9hZC0+c2V0Q2NtZmlyKHRydWUpOworICAgIHBheWxv
YWQtPnNldE5hY2twbGkodHJ1ZSk7CisgICAgcGF5bG9hZC0+YWRkUGFyYW1ldGVyKCJwYWNrZXRp
emF0aW9uTW9kZSIsIDEpOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsKKworICAgIHBh
eWxvYWQgPSBNZWRpYVBheWxvYWQ6OmNyZWF0ZSgpOworICAgIHBheWxvYWQtPnNldFR5cGUoMTAw
KTsKKyAgICBwYXlsb2FkLT5zZXRFbmNvZGluZ05hbWUoIlZQOCIpOworICAgIHBheWxvYWQtPnNl
dENsb2NrUmF0ZSg5MDAwMCk7CisgICAgcGF5bG9hZC0+c2V0Q2NtZmlyKHRydWUpOworICAgIHBh
eWxvYWQtPnNldE5hY2twbGkodHJ1ZSk7CisgICAgcGF5bG9hZC0+c2V0TmFjayh0cnVlKTsKKyAg
ICBwYXlsb2Fkcy5hcHBlbmQocGF5bG9hZCk7CisKKyAgICBwYXlsb2FkID0gTWVkaWFQYXlsb2Fk
OjpjcmVhdGUoKTsKKyAgICBwYXlsb2FkLT5zZXRUeXBlKDEyMCk7CisgICAgcGF5bG9hZC0+c2V0
RW5jb2RpbmdOYW1lKCJSVFgiKTsKKyAgICBwYXlsb2FkLT5zZXRDbG9ja1JhdGUoOTAwMDApOwor
ICAgIHBheWxvYWQtPmFkZFBhcmFtZXRlcigiYXB0IiwgMTAwKTsKKyAgICBwYXlsb2FkLT5hZGRQ
YXJhbWV0ZXIoInJ0eFRpbWUiLCAyMDApOworICAgIHBheWxvYWRzLmFwcGVuZChwYXlsb2FkKTsK
KworICAgIHJldHVybiBwYXlsb2FkczsKK30KKworTWVkaWFFbmRwb2ludDo6VXBkYXRlUmVzdWx0
IE1vY2tNZWRpYUVuZHBvaW50Ojp1cGRhdGVSZWNlaXZlQ29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24sIGJvb2wgaXNJbml0aWF0b3Ip
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNvbmZpZ3VyYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShp
c0luaXRpYXRvcik7CisKKyAgICByZXR1cm4gVXBkYXRlUmVzdWx0OjpTdWNjZXNzOworfQorCitN
ZWRpYUVuZHBvaW50OjpVcGRhdGVSZXN1bHQgTW9ja01lZGlhRW5kcG9pbnQ6OnVwZGF0ZVNlbmRD
b25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29uZmlndXJhdGlvbiogY29uZmlndXJh
dGlvbiwgYm9vbCBpc0luaXRpYXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oY29uZmlndXJhdGlv
bik7CisgICAgVU5VU0VEX1BBUkFNKGlzSW5pdGlhdG9yKTsKKworICAgIHJldHVybiBVcGRhdGVS
ZXN1bHQ6OlN1Y2Nlc3M7Cit9CisKK3ZvaWQgTW9ja01lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZUNh
bmRpZGF0ZShJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgdW5zaWduZWQgbWRlc2NJbmRleCwgY29u
c3QgU3RyaW5nJiB1ZnJhZywgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oY2FuZGlkYXRlKTsKKyAgICBVTlVTRURfUEFSQU0obWRlc2NJbmRleCk7CisgICAgVU5V
U0VEX1BBUkFNKHVmcmFnKTsKKyAgICBVTlVTRURfUEFSQU0ocGFzc3dvcmQpOworfQorCit2b2lk
IE1vY2tNZWRpYUVuZHBvaW50OjpyZXBsYWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNl
JiBuZXdTb3VyY2UsIHVuc2lnbmVkIG1kZXNjSW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKG5l
d1NvdXJjZSk7CisgICAgVU5VU0VEX1BBUkFNKG1kZXNjSW5kZXgpOworfQorCit2b2lkIE1vY2tN
ZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja01lZGlhRW5kcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44NzM4OWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrTWVkaWFFbmRwb2ludC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBNb2NrTWVkaWFFbmRwb2ludF9oCisjZGVmaW5lIE1vY2tNZWRpYUVuZHBvaW50X2gKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTW9ja01lZGlhRW5kcG9pbnQgOiBwdWJsaWMgTWVk
aWFFbmRwb2ludCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYUVuZHBvaW50PiBjcmVhdGUoTWVkaWFFbmRwb2ludENsaWVudCYpOworCisg
ICAgTW9ja01lZGlhRW5kcG9pbnQoTWVkaWFFbmRwb2ludENsaWVudCYpOworICAgIH5Nb2NrTWVk
aWFFbmRwb2ludCgpOworCisgICAgdm9pZCBzZXRDb25maWd1cmF0aW9uKFJlZlB0cjxNZWRpYUVu
ZHBvaW50Q29uZmlndXJhdGlvbj4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdlbmVyYXRlRHRs
c0luZm8oKSBvdmVycmlkZTsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUGF5bG9hZD4+IGdldERl
ZmF1bHRBdWRpb1BheWxvYWRzKCkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVBh
eWxvYWQ+PiBnZXREZWZhdWx0VmlkZW9QYXlsb2FkcygpIG92ZXJyaWRlOworCisgICAgVXBkYXRl
UmVzdWx0IHVwZGF0ZVJlY2VpdmVDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRTZXNzaW9uQ29u
ZmlndXJhdGlvbiosIGJvb2wgaXNJbml0aWF0b3IpIG92ZXJyaWRlOworICAgIFVwZGF0ZVJlc3Vs
dCB1cGRhdGVTZW5kQ29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRp
b24qLCBib29sIGlzSW5pdGlhdG9yKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkUmVtb3RlQ2Fu
ZGlkYXRlKEljZUNhbmRpZGF0ZSYsIHVuc2lnbmVkIG1kZXNjSW5kZXgsIGNvbnN0IFN0cmluZyYg
dWZyYWcsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXBs
YWNlU2VuZFNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlJiwgdW5zaWduZWQgbWRlc2NJbmRleCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBN
ZWRpYUVuZHBvaW50Q2xpZW50JiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBNb2NrTWVk
aWFFbmRwb2ludF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMWYwZWI4
ZS4uZDZkMDM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTc2LDYg
KzE3Niw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAi
TW9ja01lZGlhRW5kcG9pbnQuaCIKICNpbmNsdWRlICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlci5oIgogI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUlRDUGVl
ckNvbm5lY3Rpb25IYW5kbGVyTW9jay5oIgpAQCAtNDE2LDYgKzQxNyw3IEBAIEludGVybmFsczo6
SW50ZXJuYWxzKERvY3VtZW50KiBkb2N1bWVudCkKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAgICAgc2V0TW9ja01lZGlhQ2FwdHVyZURldmljZXNFbmFibGVkKHRydWUpOworICAgIGVuYWJs
ZU1vY2tNZWRpYUVuZHBvaW50KCk7CiAgICAgZW5hYmxlTW9ja1JUQ1BlZXJDb25uZWN0aW9uSGFu
ZGxlcigpOwogI2VuZGlmCiAKQEAgLTEwMTYsNiArMTAxOCwxMSBAQCB2b2lkIEludGVybmFsczo6
ZW5hYmxlTW9ja1NwZWVjaFN5bnRoZXNpemVyKCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKK3ZvaWQgSW50ZXJuYWxzOjplbmFibGVNb2NrTWVkaWFFbmRwb2ludCgpCit7Cisg
ICAgTWVkaWFFbmRwb2ludDo6Y3JlYXRlID0gTW9ja01lZGlhRW5kcG9pbnQ6OmNyZWF0ZTsKK30K
Kwogdm9pZCBJbnRlcm5hbHM6OmVuYWJsZU1vY2tSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKQog
ewogICAgIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlID0gUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyTW9jazo6Y3JlYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXgg
NDZhZWVkZS4uZjM5NDI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0zNzAs
NiArMzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
ICAgIHZvaWQgZW5hYmxlTW9ja01lZGlhRW5kcG9pbnQoKTsKICAgICB2b2lkIGVuYWJsZU1vY2tS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKTsKICAgICB2b2lkIHNldE1vY2tNZWRpYUNhcHR1cmVE
ZXZpY2VzRW5hYmxlZChib29sKTsKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>