<?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>206730</bug_id>
          
          <creation_ts>2020-01-24 01:44:40 -0800</creation_ts>
          <short_desc>[EME][GStreamer] Introduce CDMProxy</short_desc>
          <delta_ts>2020-02-12 06:12:38 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=207628</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Charlie Turner">cturner</reporter>
          <assigned_to name="Charlie Turner">cturner</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>lmoura</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1610567</commentid>
    <comment_count>0</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-24 01:44:40 -0800</bug_when>
    <thetext>[EME][GStreamer] Introduce CDMProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610573</commentid>
    <comment_count>1</comment_count>
      <attachid>388662</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-24 02:02:35 -0800</bug_when>
    <thetext>Created attachment 388662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610579</commentid>
    <comment_count>2</comment_count>
      <attachid>388665</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-24 02:17:50 -0800</bug_when>
    <thetext>Created attachment 388665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610796</commentid>
    <comment_count>3</comment_count>
      <attachid>388665</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-24 11:51:08 -0800</bug_when>
    <thetext>Comment on attachment 388665
Patch

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

Since there are some missing files in the patch (and I have to call it a day and a working week), I&apos;ll continue on Tuesday (taking Monday off). Anyway, some comments:

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:506
&gt; +    keyIDVec.reserveInitialCapacity(in.keyIDNumBytes);

Since you&apos;re appending be passing an array with size and you aren&apos;t appending anything else, I&apos;d say this is not needed since the first thing the append is going to do is reserving the size that you specify.

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:523
&gt; +    // uin8_t* bufferToDecrypt, size_t bufferNumBytes);

?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:696
&gt; +            keysChanged = keysChanged || m_keyStore.add(decodedKey);

Short-circuit evaluation is biting you here. I think you should either reverse both arguments or accumulate some other way.

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:137
&gt; +        const uint8_t* keyID;

I think it is better to capitalize as keyId, I see Id instead of ID more used outside our code. Do you mind checking it patch-wide, please?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:138
&gt; +        size_t keyIDNumBytes;

keyIdSize?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:141
&gt; +        size_t ivNumBytes;

ivSize?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:144
&gt; +        size_t encryptedBufferNumBytes;

encryptedBufferSize?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:147
&gt; +        const uint8_t* subSamplesBuffer;

subsamplesBuffer

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:148
&gt; +        size_t subSamplesBufferNumBytes;

subsamplesBufferSize? Mind that the word is subsample, so we should capitalize it like that IMHO.

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt; +        size_t numSubSamples;

numberOfSubsamples?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:164
&gt; +    // resuse some Crypto APIs in WebCore?

reuse

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:168
&gt; +    bool CENCSetCounterVector(const CENCDecryptContext&amp;);
&gt; +    bool CENCSetDecryptionKey(const CENCDecryptContext&amp;);
&gt; +    bool CENCDecryptFullSample(CENCDecryptContext&amp;);
&gt; +    bool CENCDecryptSubSampled(CENCDecryptContext&amp;);

I would call these methods cenc*

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:176
&gt; +

I don&apos;t think we need this extra line

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1797
&gt; +            m_handledProtectionEvents.add(GST_EVENT_SEQNUM(event.get()));

/me dreams of getting rid of this at some point.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:117
&gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));

Mein Gott, we really need to have a look at the style of this file at some point...

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:142
&gt; +    RefPtr&lt;GstMappedBuffer&gt; mappedSubSamplesBuffer;

This should be moved to just above the if

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:143
&gt; +    CDMProxyClearKey::CENCDecryptContext ctx;

context

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:202
&gt; +    auto removeProtectionMetaOnReturn = makeScopeExit([buffer, protectionMeta] {
&gt; +        gst_buffer_remove_meta(buffer, reinterpret_cast&lt;GstMeta*&gt;(protectionMeta));
&gt; +    });

Beautiful!

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:277
&gt; +    GRefPtr&lt;GstContext&gt; context = adoptGRef(gst_element_get_context(GST_ELEMENT(self), &quot;drm-cdm-instance&quot;));

We might want to rename this context name to drm-cdm-proxy

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:286
&gt; +        const GValue* value = gst_structure_get_value(gst_context_get_structure(context.get()), &quot;cdm-instance&quot;);

cdm-proxy

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:290
&gt; +                GST_DEBUG_OBJECT(self, &quot;received a new CDM proxy instance %p, refcount %u&quot;, proxy, proxy-&gt;refCount());

Do we really need the refcount?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:342
&gt;          // We should be handling protection events in this class in
&gt;          // addition to out-of-band data. In regular playback, after a
&gt;          // preferred system ID context is set, any future protection
&gt; -        // events will not be handled by the demuxer, so the must be
&gt; +        // events will not be handled by the demuxer, so they must be
&gt;          // handled in here.

I think this descryption does not belong here cause protection events are not OOB, are they? I think this should be maybe before the switch.

Another concern of mine is that we are reacting to all OOB events, I guess we should at least filter by structure name, right?

Which event are we reacting to here?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:-350
&gt; -    if (gst_structure_has_name(gst_query_get_structure(query), &quot;any-decryptor-waiting-for-key&quot;)) {

Good!

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:386
&gt; +        priv-&gt;cdmProxy = value ? reinterpret_cast&lt;CDMProxy*&gt;(g_value_get_pointer(value)) : nullptr;

Wouldn&apos;t it be nice to create a boxed type of a RefPtr&lt;CDMProxy&gt;, something like:

GType WEBKIT_G_TYPE_REF_PTR_CDM_PROXY = g_boxed_type_register_static (&quot;RefPtrCDMProxy&quot;, (GBoxedCopyFunc) WTF::refIfNotNull&lt;CDMProxy&gt;, (GBoxedFreeFunc) WTF::derefIfNotNull&lt;CDMProxy&gt;);

Then we could use WEBKIT_G_TYPE_REF_PTR_CDM_PROXY (or maybe something more adecuate to WebKit style) when we declare the content of the GstStructure and this way we would be able to maintain references inside the structures and not just loose pointers. I guess we might have as well something like:

template&lt;typename T&gt;
webkitGValueSet(GValue* value, const RefPtr&lt;T&gt;&amp;);
webkitGValueTake(GValue* value, RefPtr&lt;T&gt;&amp;&amp;); // We could even forget this and overload the Set method for both const &amp; and &amp;&amp;.
RefPtr&lt;T&gt; webkitGValueGet(GValue* value); // In this case I don&apos;t think we need to mimic the get/dup GValue API as we&apos;re dealing in smart pointers.


I might be missing anything but I think it can work nicely.

If you think it is too much for now or you are not in the mood of implementing this so cool stuff, we can give it a try later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611010</commentid>
    <comment_count>4</comment_count>
      <attachid>388765</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-25 01:37:00 -0800</bug_when>
    <thetext>Created attachment 388765
Patch

Add missing CDMProxy files that were left behind in the working tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611346</commentid>
    <comment_count>5</comment_count>
      <attachid>388843</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-27 02:43:11 -0800</bug_when>
    <thetext>Created attachment 388843
Patch

Remove dependency on CDMClearKey.h from Apple CDM, since I haven&apos;t added CDMProxy to the Apple build system, and I don&apos;t believe they need ClearKey support? Or at least it is falsely advertised as supported? If it is I&apos;ll do the extra steps to add the CDMProxy to the X-Files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611347</commentid>
    <comment_count>6</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-27 02:43:41 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #3)
&gt; Comment on attachment 388665 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=388665&amp;action=review
&gt; 
&gt; Since there are some missing files in the patch (and I have to call it a day
&gt; and a working week), I&apos;ll continue on Tuesday (taking Monday off). Anyway,
&gt; some comments:
&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:506
&gt; &gt; +    keyIDVec.reserveInitialCapacity(in.keyIDNumBytes);
&gt; 
&gt; Since you&apos;re appending be passing an array with size and you aren&apos;t
&gt; appending anything else, I&apos;d say this is not needed since the first thing
&gt; the append is going to do is reserving the size that you specify.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:523
&gt; &gt; +    // uin8_t* bufferToDecrypt, size_t bufferNumBytes);
&gt; 
&gt; ?

Removed.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:696
&gt; &gt; +            keysChanged = keysChanged || m_keyStore.add(decodedKey);
&gt; 
&gt; Short-circuit evaluation is biting you here. I think you should either
&gt; reverse both arguments or accumulate some other way.

The problem being I wouldn&apos;t add any keys after a key was added that did change the key store... Oops. Changed to if(m_keyStore.add(decodedKey) keysChanged=true. 
I need to get some more &quot;exotic&quot; ClearKey tests in the tree, I think we only have one multikey test and its skipped for other reasons... Anyway, future work :-)

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:137
&gt; &gt; +        const uint8_t* keyID;
&gt; 
&gt; I think it is better to capitalize as keyId, I see Id instead of ID more
&gt; used outside our code. Do you mind checking it patch-wide, please?

That&apos;s a really big change for no clear reason apart from your personal taste, I&apos;ll leave it as is since ID and Id are used in interchangeable in the WebKit codebase and I don&apos;t see any room for confusion here.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:138
&gt; &gt; +        size_t keyIDNumBytes;
&gt; 
&gt; keyIdSize?

I prefer having the unit in my variables names, Size gives no information, i.e., Size of what? Having Bytes in the name can help when using lower level functions operating on the byte level.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:141
&gt; &gt; +        size_t ivNumBytes;
&gt; 
&gt; ivSize?

Ditto.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:144
&gt; &gt; +        size_t encryptedBufferNumBytes;
&gt; 
&gt; encryptedBufferSize?

Ditto.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:147
&gt; &gt; +        const uint8_t* subSamplesBuffer;
&gt; 
&gt; subsamplesBuffer

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:148
&gt; &gt; +        size_t subSamplesBufferNumBytes;
&gt; 
&gt; subsamplesBufferSize? Mind that the word is subsample, so we should
&gt; capitalize it like that IMHO.

This was following the existing naming convention in the GStreamer decryptors, which you initially reviewed! I don&apos;t think it makes any difference aside from work changing all the names in my patch, but I did it anyway because I do agree it &quot;looks better&quot;. It&apos;s shame we&apos;re not consistent on these things because it takes a lot of time to change these inconsistent nits, especially when 3 years later you might decide the other way is better again. I&apos;m not attacking you btw, my aesthetics change over time too; because of this I believe such nits should not be enforced in reviews.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt; &gt; +        size_t numSubSamples;
&gt; 
&gt; numberOfSubsamples?

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:164
&gt; &gt; +    // resuse some Crypto APIs in WebCore?
&gt; 
&gt; reuse

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:168
&gt; &gt; +    bool CENCSetCounterVector(const CENCDecryptContext&amp;);
&gt; &gt; +    bool CENCSetDecryptionKey(const CENCDecryptContext&amp;);
&gt; &gt; +    bool CENCDecryptFullSample(CENCDecryptContext&amp;);
&gt; &gt; +    bool CENCDecryptSubSampled(CENCDecryptContext&amp;);
&gt; 
&gt; I would call these methods cenc*

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:176
&gt; &gt; +
&gt; 
&gt; I don&apos;t think we need this extra line

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1797
&gt; &gt; +            m_handledProtectionEvents.add(GST_EVENT_SEQNUM(event.get()));
&gt; 
&gt; /me dreams of getting rid of this at some point.

Agreed, future work though :-)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:117
&gt; &gt; +    WebKitMediaClearKeyDecryptPrivate* priv = WEBKIT_MEDIA_CK_DECRYPT_GET_PRIVATE(WEBKIT_MEDIA_CK_DECRYPT(self));
&gt; 
&gt; Mein Gott, we really need to have a look at the style of this file at some
&gt; point...

Agreed :-)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:142
&gt; &gt; +    RefPtr&lt;GstMappedBuffer&gt; mappedSubSamplesBuffer;
&gt; 
&gt; This should be moved to just above the if

Which if and why?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:143
&gt; &gt; +    CDMProxyClearKey::CENCDecryptContext ctx;
&gt; 
&gt; context

Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:277
&gt; &gt; +    GRefPtr&lt;GstContext&gt; context = adoptGRef(gst_element_get_context(GST_ELEMENT(self), &quot;drm-cdm-instance&quot;));
&gt; 
&gt; We might want to rename this context name to drm-cdm-proxy

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:286
&gt; &gt; +        const GValue* value = gst_structure_get_value(gst_context_get_structure(context.get()), &quot;cdm-instance&quot;);
&gt; 
&gt; cdm-proxy

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:290
&gt; &gt; +                GST_DEBUG_OBJECT(self, &quot;received a new CDM proxy instance %p, refcount %u&quot;, proxy, proxy-&gt;refCount());
&gt; 
&gt; Do we really need the refcount?

It&apos;s been a very useful debug output in the past, may as well keep it.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:342
&gt; &gt;          // We should be handling protection events in this class in
&gt; &gt;          // addition to out-of-band data. In regular playback, after a
&gt; &gt;          // preferred system ID context is set, any future protection
&gt; &gt; -        // events will not be handled by the demuxer, so the must be
&gt; &gt; +        // events will not be handled by the demuxer, so they must be
&gt; &gt;          // handled in here.
&gt; 
&gt; I think this descryption does not belong here cause protection events are
&gt; not OOB, are they?

The comment says &quot;in addition to out-of-band data&quot;, so it appears the comment is suggesting we add things to sink event handler.

&gt; I think this should be maybe before the switch.

Aye, done.

&gt; 
&gt; Another concern of mine is that we are reacting to all OOB events, I guess
&gt; we should at least filter by structure name, right?
&gt; 
&gt; Which event are we reacting to here?

We only send one, attempt-to-decrypt, so there&apos;s no worries reacting to more events. If we ever added another one I&apos;d agree with you.


&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:386
&gt; &gt; +        priv-&gt;cdmProxy = value ? reinterpret_cast&lt;CDMProxy*&gt;(g_value_get_pointer(value)) : nullptr;
&gt; 
&gt; Wouldn&apos;t it be nice to create a boxed type of a RefPtr&lt;CDMProxy&gt;, something
&gt; like:
&gt; 
&gt; GType WEBKIT_G_TYPE_REF_PTR_CDM_PROXY = g_boxed_type_register_static
&gt; (&quot;RefPtrCDMProxy&quot;, (GBoxedCopyFunc) WTF::refIfNotNull&lt;CDMProxy&gt;,
&gt; (GBoxedFreeFunc) WTF::derefIfNotNull&lt;CDMProxy&gt;);
&gt; 
&gt; Then we could use WEBKIT_G_TYPE_REF_PTR_CDM_PROXY (or maybe something more
&gt; adecuate to WebKit style) when we declare the content of the GstStructure
&gt; and this way we would be able to maintain references inside the structures
&gt; and not just loose pointers. I guess we might have as well something like:
&gt; 
&gt; template&lt;typename T&gt;
&gt; webkitGValueSet(GValue* value, const RefPtr&lt;T&gt;&amp;);
&gt; webkitGValueTake(GValue* value, RefPtr&lt;T&gt;&amp;&amp;); // We could even forget this
&gt; and overload the Set method for both const &amp; and &amp;&amp;.
&gt; RefPtr&lt;T&gt; webkitGValueGet(GValue* value); // In this case I don&apos;t think we
&gt; need to mimic the get/dup GValue API as we&apos;re dealing in smart pointers.
&gt; 
&gt; 
&gt; I might be missing anything but I think it can work nicely.
&gt; 
&gt; If you think it is too much for now or you are not in the mood of
&gt; implementing this so cool stuff, we can give it a try later.

That does seem like a lovely improvement, I&apos;m not familiar with that API but I&apos;ll take a look and if its a simple addition I&apos;ll bundle it in a future rev of this patch.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611870</commentid>
    <comment_count>7</comment_count>
      <attachid>388665</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-28 04:53:52 -0800</bug_when>
    <thetext>Comment on attachment 388665
Patch

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

That was answering your comments, I&apos;ll continue the review or the new patch.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:137
&gt;&gt;&gt; +        const uint8_t* keyID;
&gt;&gt; 
&gt;&gt; I think it is better to capitalize as keyId, I see Id instead of ID more used outside our code. Do you mind checking it patch-wide, please?
&gt; 
&gt; That&apos;s a really big change for no clear reason apart from your personal taste, I&apos;ll leave it as is since ID and Id are used in interchangeable in the WebKit codebase and I don&apos;t see any room for confusion here.

Forget this, as I&apos;ll explain below.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:138
&gt;&gt;&gt; +        size_t keyIDNumBytes;
&gt;&gt; 
&gt;&gt; keyIdSize?
&gt; 
&gt; I prefer having the unit in my variables names, Size gives no information, i.e., Size of what? Having Bytes in the name can help when using lower level functions operating on the byte level.

According to the style you should use complete words and num is no complete word. In order to make it shorter I thought &quot;size&quot; was better and I still think there is no ambiguity here as key ids are bytes. Please keep size or SizeInBytes if you want as there are other parts of WebKit with that scheme.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:141
&gt;&gt;&gt; +        size_t ivNumBytes;
&gt;&gt; 
&gt;&gt; ivSize?
&gt; 
&gt; Ditto.

Ditto

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:144
&gt;&gt;&gt; +        size_t encryptedBufferNumBytes;
&gt;&gt; 
&gt;&gt; encryptedBufferSize?
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:148
&gt;&gt;&gt; +        size_t subSamplesBufferNumBytes;
&gt;&gt; 
&gt;&gt; subsamplesBufferSize? Mind that the word is subsample, so we should capitalize it like that IMHO.
&gt; 
&gt; This was following the existing naming convention in the GStreamer decryptors, which you initially reviewed! I don&apos;t think it makes any difference aside from work changing all the names in my patch, but I did it anyway because I do agree it &quot;looks better&quot;. It&apos;s shame we&apos;re not consistent on these things because it takes a lot of time to change these inconsistent nits, especially when 3 years later you might decide the other way is better again. I&apos;m not attacking you btw, my aesthetics change over time too; because of this I believe such nits should not be enforced in reviews.

I don&apos;t enforce the nits, at least all of them. And yes, my aesthetics change with time and so does my proficiency in English. In this case, when I saw the code, I decided to search the diccionary and found subsample, which makes it a full word leading to the suggestion of changing it. In the case of ID, I searched the diccionary and found id and didn&apos;t read any longer. Now I checked again and saw that the id is something and ID with our intended meaning is spelled as ID, therefore the current scheme you followed is perfect. I guess I should check better my linguistic suggestions or consult them with people like you, who definitely know more about English than me.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:142
&gt;&gt;&gt; +    RefPtr&lt;GstMappedBuffer&gt; mappedSubSamplesBuffer;
&gt;&gt; 
&gt;&gt; This should be moved to just above the if
&gt; 
&gt; Which if and why?

I meant &quot;if (!subSampleCount)&quot; and because of the rule of having variable declarations as closest to the point of use. This is not a big deal anyway.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:342
&gt;&gt;&gt;          // handled in here.
&gt;&gt; 
&gt;&gt; I think this descryption does not belong here cause protection events are not OOB, are they? I think this should be maybe before the switch.
&gt;&gt; 
&gt;&gt; Another concern of mine is that we are reacting to all OOB events, I guess we should at least filter by structure name, right?
&gt;&gt; 
&gt;&gt; Which event are we reacting to here?
&gt; 
&gt; The comment says &quot;in addition to out-of-band data&quot;, so it appears the comment is suggesting we add things to sink event handler.

Ok, but then please ASSERT on the structure name even if we don&apos;t actively check it in release. I think it&apos;s a good failsafe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612050</commentid>
    <comment_count>8</comment_count>
      <attachid>388843</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-28 10:55:52 -0800</bug_when>
    <thetext>Comment on attachment 388843
Patch

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

I didn&apos;t finish. It&apos;s a dense patch. Step by step :)

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:40
&gt; +namespace {

Why do you need this?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:81
&gt; +    LOG(EME, &quot;EME - CDMProxy - key store now has %u keys&quot;, numKeys());
&gt; +    std::for_each(m_keys.begin(), m_keys.end(),
&gt; +        [](const Key&amp; key) {
&gt; +            LOG(EME, &quot;\tEME - CDMProxy - Key ID: %s&quot;, key.idAsString().ascii().data());
&gt; +        });

Maybe we can flag this as #ifndef NDEBUG

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:155
&gt; +        // data are small in number, so probably its fine.

it&apos;s

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:163
&gt; +    {

Not needed.

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:237
&gt; +bool CDMProxy::getOrWaitForKey(const Vector&lt;char&gt;&amp; keyID, Vector&lt;char&gt;&amp; keyValueOut) const

I would recommend returning a WTF::Optional&lt;Vector&lt;char&gt;&gt; to avoid the bool + output parameter.

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:264
&gt; +    bool nobodyWaitingForKey = !m_numDecryptorsWaitingForKey;

wasNobodyWaitingForKey?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:46
&gt; +    static Ref&lt;Key&gt; create(KeyStatus status, Vector&lt;char&gt; keyID, Vector&lt;char&gt; keyValue)

Any reason you want to copy the vector here? From what I see, where you call it you call this, it is perfectly fine to pass a &amp;&amp;

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:53
&gt; +    Vector&lt;char&gt; id() const { return m_id; }
&gt; +    Vector&lt;char&gt; value() const { return m_value; }

Wouldn&apos;t it be a good idea to make this return const Vector&lt;char&gt;&amp; ?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:61
&gt; +    void ref() { m_references++; }
&gt; +    void deref() { m_references--; }
&gt; +    unsigned refCount() const { return m_references; }

Why can&apos;t you just make this WebKit refcounted and avoid all the error prone manual reference counting?

If the intention is to make the object lighter, can&apos;t you still store a Ref inside the list at the store?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:115
&gt; +    std::list&lt;Key&gt; m_keys;

Why not a Vector?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:169
&gt; +    void trackSession(RefPtr&lt;CDMInstanceSession&gt; session) { m_sessions.push_back(session); }

&amp;&amp; and WTFMove?

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:179
&gt; +    std::list&lt;RefPtr&lt;CDMInstanceSession&gt;&gt; m_sessions;

Why not Vector?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt; +        const uint8_t* subSamplesBuffer;
&gt; +        size_t subSamplesBufferNumBytes;
&gt; +        size_t numSubsamples;

Weren&apos;t these fixed?

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:142
&gt; +    RefPtr&lt;GstMappedBuffer&gt; mappedSubSamplesBuffer;

We could have mappedSubsamplesBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612375</commentid>
    <comment_count>9</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-29 02:33:10 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #7)
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:138
&gt; &gt;&gt;&gt; +        size_t keyIDNumBytes;
&gt; &gt;&gt; 
&gt; &gt;&gt; keyIdSize?
&gt; &gt; 
&gt; &gt; I prefer having the unit in my variables names, Size gives no information, i.e., Size of what? Having Bytes in the name can help when using lower level functions operating on the byte level.
&gt; 
&gt; According to the style you should use complete words and num is no complete
&gt; word. In order to make it shorter I thought &quot;size&quot; was better and I still
&gt; think there is no ambiguity here as key ids are bytes. Please keep size or
&gt; SizeInBytes if you want as there are other parts of WebKit with that scheme.

Done.

&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:141
&gt; &gt;&gt;&gt; +        size_t ivNumBytes;
&gt; &gt;&gt; 
&gt; &gt;&gt; ivSize?
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Ditto

Done.

&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:144
&gt; &gt;&gt;&gt; +        size_t encryptedBufferNumBytes;
&gt; &gt;&gt; 
&gt; &gt;&gt; encryptedBufferSize?
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Ditto.

Done.

&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:342
&gt; &gt;&gt;&gt;          // handled in here.
&gt; &gt;&gt; 
&gt; &gt;&gt; I think this descryption does not belong here cause protection events are not OOB, are they? I think this should be maybe before the switch.
&gt; &gt;&gt; 
&gt; &gt;&gt; Another concern of mine is that we are reacting to all OOB events, I guess we should at least filter by structure name, right?
&gt; &gt;&gt; 
&gt; &gt;&gt; Which event are we reacting to here?
&gt; &gt; 
&gt; &gt; The comment says &quot;in addition to out-of-band data&quot;, so it appears the comment is suggesting we add things to sink event handler.
&gt; 
&gt; Ok, but then please ASSERT on the structure name even if we don&apos;t actively
&gt; check it in release. I think it&apos;s a good failsafe.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612381</commentid>
    <comment_count>10</comment_count>
      <attachid>388843</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-29 02:51:49 -0800</bug_when>
    <thetext>Comment on attachment 388843
Patch

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

Another step!

&gt; Source/WebCore/ChangeLog:14
&gt; +        thread-safety asserts. I took the liberty of renaming to CDMProxy,

I think you forgot to update the Changelog since including CDMProxy.* in the patch cause there is no reference to the files in it.

I also miss a higher level explanation above other than the minor things attached to functions, etc.

&gt; Source/WebCore/platform/GStreamer.cmake:163
&gt; +        &quot;${WEBCORE_DIR}/platform/encryptedmedia/cdmproxy&quot;

I really think CDMProxy belongs in the parent directory, no need to create a custom one.

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:138
&gt; +Vector&lt;char&gt; KeyStore::keyValue(const Vector&lt;char&gt;&amp; keyID) const

What about returning a const Vector&lt;char&gt;&amp; and maybe save some copy? We can always copy it later by receiving it in a non reference.

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:281
&gt; +void CDMInstanceProxy::requestKeyStore(CompletionHandler&lt;void(const KeyStore&amp;)&gt;&amp;&amp; callback)
&gt; +{
&gt; +    // NOTE: We can immediately resolve this callback in the case of
&gt; +    // ClearKey, but for a CDM like Widevine, which asynchronously
&gt; +    // tells you about key statuses, this callback would need to be
&gt; +    // stored somewhere and later resolved.
&gt; +
&gt; +    auto locker = holdLock(m_keysMutex);
&gt; +    callback(m_keyStore);
&gt; +}

I foresee a problem here for CDMs other than ClearKey, as this method is virtual. I guess at some point we&apos;ll have to either make the lock protected or maybe split the method in two, a non-virtual public one that holds the lock and calls a virtual protected impl. Anyway, this is for the future and maybe you have a more clever way of solving this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612383</commentid>
    <comment_count>11</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-29 03:01:11 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #8)
&gt; Comment on attachment 388843 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=388843&amp;action=review
&gt; 
&gt; I didn&apos;t finish. It&apos;s a dense patch. Step by step :)
&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:40
&gt; &gt; +namespace {
&gt; 
&gt; Why do you need this?

https://web.archive.org/web/20181115023158/http://www.comeaucomputing.com/techtalk/#nostatic

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:81
&gt; &gt; +    LOG(EME, &quot;EME - CDMProxy - key store now has %u keys&quot;, numKeys());
&gt; &gt; +    std::for_each(m_keys.begin(), m_keys.end(),
&gt; &gt; +        [](const Key&amp; key) {
&gt; &gt; +            LOG(EME, &quot;\tEME - CDMProxy - Key ID: %s&quot;, key.idAsString().ascii().data());
&gt; &gt; +        });
&gt; 
&gt; Maybe we can flag this as #ifndef NDEBUG

The installed key IDs are important to know in release and debug.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:155
&gt; &gt; +        // data are small in number, so probably its fine.
&gt; 
&gt; it&apos;s

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:163
&gt; &gt; +    {
&gt; 
&gt; Not needed.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:237
&gt; &gt; +bool CDMProxy::getOrWaitForKey(const Vector&lt;char&gt;&amp; keyID, Vector&lt;char&gt;&amp; keyValueOut) const
&gt; 
&gt; I would recommend returning a WTF::Optional&lt;Vector&lt;char&gt;&gt; to avoid the bool
&gt; + output parameter.

Nice, done.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:264
&gt; &gt; +    bool nobodyWaitingForKey = !m_numDecryptorsWaitingForKey;
&gt; 
&gt; wasNobodyWaitingForKey?

if (nobodyWaitingForKey) reads more naturally than if (wasNobodyWaitingForKey).

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:46
&gt; &gt; +    static Ref&lt;Key&gt; create(KeyStatus status, Vector&lt;char&gt; keyID, Vector&lt;char&gt; keyValue)
&gt; 
&gt; Any reason you want to copy the vector here? From what I see, where you call
&gt; it you call this, it is perfectly fine to pass a &amp;&amp;

It seems I went for that design initially, since the body of this method does cast to rvalues. I&apos;ve fixed it, but note these are 16-byte vectors, so in theory they will be small-size optimised by the Vector implementation and copied very efficiently. Moving or not moving such values doesn&apos;t seem like it will be dangerous, but I&apos;ve not run the experiments...

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:53
&gt; &gt; +    Vector&lt;char&gt; id() const { return m_id; }
&gt; &gt; +    Vector&lt;char&gt; value() const { return m_value; }
&gt; 
&gt; Wouldn&apos;t it be a good idea to make this return const Vector&lt;char&gt;&amp; ?

Done

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:61
&gt; &gt; +    void ref() { m_references++; }
&gt; &gt; +    void deref() { m_references--; }
&gt; &gt; +    unsigned refCount() const { return m_references; }
&gt; 
&gt; Why can&apos;t you just make this WebKit refcounted and avoid all the error prone
&gt; manual reference counting?
&gt; 
&gt; If the intention is to make the object lighter, can&apos;t you still store a Ref
&gt; inside the list at the store?

The reason I hand-rolled it is due to its use in KeyStore::remove. Because multiple sessions can add a key, I must be careful not to remove from the &quot;global key store&quot; a key that is referenced still by a session. Ref&lt;&gt; is for RAII semantics on a type, I don&apos;t want the Key to be destroyed when the last ref is dropped, rather I want &quot;this is the last Key ref&quot; to translate to &quot;OK, now we can remove it from the key list&quot;. I agree this code raises eye-brows, can you offer a specific alternative using Ref&lt;&gt; that achieves what I described? I can&apos;t see it.


&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:115
&gt; &gt; +    std::list&lt;Key&gt; m_keys;
&gt; 
&gt; Why not a Vector?

Vector&lt;&gt; is typically not the right data-structure to support heavy inserts/deletes, which the key store is going to be exposed to.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:169
&gt; &gt; +    void trackSession(RefPtr&lt;CDMInstanceSession&gt; session) { m_sessions.push_back(session); }
&gt; 
&gt; &amp;&amp; and WTFMove?

That doesn&apos;t match the caller expectation,

    RefPtr&lt;CDMInstanceSession&gt; newSession = adoptRef(new CDMInstanceSessionClearKey(*this));
    trackSession(newSession);  // moving would trash the return value
    return newSession;

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:179
&gt; &gt; +    std::list&lt;RefPtr&lt;CDMInstanceSession&gt;&gt; m_sessions;
&gt; 
&gt; Why not Vector?

Same reason as the key store.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt; &gt; +        const uint8_t* subSamplesBuffer;
&gt; &gt; +        size_t subSamplesBufferNumBytes;
&gt; &gt; +        size_t numSubsamples;
&gt; 
&gt; Weren&apos;t these fixed?

The seemed to have escaped me. Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:142
&gt; &gt; +    RefPtr&lt;GstMappedBuffer&gt; mappedSubSamplesBuffer;
&gt; 
&gt; We could have mappedSubsamplesBuffer.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612428</commentid>
    <comment_count>12</comment_count>
      <attachid>388843</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-29 07:07:31 -0800</bug_when>
    <thetext>Comment on attachment 388843
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        thread-safety asserts. I took the liberty of renaming to CDMProxy,
&gt; 
&gt; I think you forgot to update the Changelog since including CDMProxy.* in the patch cause there is no reference to the files in it.
&gt; 
&gt; I also miss a higher level explanation above other than the minor things attached to functions, etc.

Ah yes, generate-Changelog doesn&apos;t take unstaged files into account, I think I generated the log when my tree was in that state. I&apos;ll fix that and add more explanation.

&gt;&gt; Source/WebCore/platform/GStreamer.cmake:163
&gt;&gt; +        &quot;${WEBCORE_DIR}/platform/encryptedmedia/cdmproxy&quot;
&gt; 
&gt; I really think CDMProxy belongs in the parent directory, no need to create a custom one.

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:138
&gt;&gt; +Vector&lt;char&gt; KeyStore::keyValue(const Vector&lt;char&gt;&amp; keyID) const
&gt; 
&gt; What about returning a const Vector&lt;char&gt;&amp; and maybe save some copy? We can always copy it later by receiving it in a non reference.

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:281
&gt;&gt; +}
&gt; 
&gt; I foresee a problem here for CDMs other than ClearKey, as this method is virtual. I guess at some point we&apos;ll have to either make the lock protected or maybe split the method in two, a non-virtual public one that holds the lock and calls a virtual protected impl. Anyway, this is for the future and maybe you have a more clever way of solving this.

That&apos;s true. I integrated such a CDM yet, so there will likely be some rejigging along the lines you outline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612433</commentid>
    <comment_count>13</comment_count>
      <attachid>389135</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-29 07:29:52 -0800</bug_when>
    <thetext>Created attachment 389135
Patch

Addresses all previous comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612517</commentid>
    <comment_count>14</comment_count>
      <attachid>388843</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-29 09:54:11 -0800</bug_when>
    <thetext>Comment on attachment 388843
Patch

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

Not done yet :/

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:81
&gt;&gt;&gt; +        });
&gt;&gt; 
&gt;&gt; Maybe we can flag this as #ifndef NDEBUG
&gt; 
&gt; The installed key IDs are important to know in release and debug.

Sure, I mixed this with disabling logs. I meant:

#if !LOG_DISABLED || !RELEASE_LOG_DISABLED

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.cpp:264
&gt;&gt;&gt; +    bool nobodyWaitingForKey = !m_numDecryptorsWaitingForKey;
&gt;&gt; 
&gt;&gt; wasNobodyWaitingForKey?
&gt; 
&gt; if (nobodyWaitingForKey) reads more naturally than if (wasNobodyWaitingForKey).

I disagree, I think if (isNobodyWaitingForKey) reads better, besides, it respects the style about bool.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:61
&gt;&gt;&gt; +    unsigned refCount() const { return m_references; }
&gt;&gt; 
&gt;&gt; Why can&apos;t you just make this WebKit refcounted and avoid all the error prone manual reference counting?
&gt;&gt; 
&gt;&gt; If the intention is to make the object lighter, can&apos;t you still store a Ref inside the list at the store?
&gt; 
&gt; The reason I hand-rolled it is due to its use in KeyStore::remove. Because multiple sessions can add a key, I must be careful not to remove from the &quot;global key store&quot; a key that is referenced still by a session. Ref&lt;&gt; is for RAII semantics on a type, I don&apos;t want the Key to be destroyed when the last ref is dropped, rather I want &quot;this is the last Key ref&quot; to translate to &quot;OK, now we can remove it from the key list&quot;. I agree this code raises eye-brows, can you offer a specific alternative using Ref&lt;&gt; that achieves what I described? I can&apos;t see it.

Thanks for the explanation, it is what I was trying to understand. What remains confusing is that you&apos;re mixing a couple of things that are different in my head. On one side it is object life managed by a smart pointer (you use Ref&lt;Key&gt; around) and then use the same life mechanism to count how many sessions are using that key, you know what I&apos;m sayin&apos;? It raises my eye brows a lot. I wouldn&apos;t mix the object ref counting to count how many sessions have a reference to that key. I would do it some other way.

Now, if you still think it is the best way, I request you add a big and nice comment explaining all this.

&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:95
&gt; +    bool add(Ref&lt;Key&gt;&amp;);

I would use move semantics here.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:115
&gt;&gt;&gt; +    std::list&lt;Key&gt; m_keys;
&gt;&gt; 
&gt;&gt; Why not a Vector?
&gt; 
&gt; Vector&lt;&gt; is typically not the right data-structure to support heavy inserts/deletes, which the key store is going to be exposed to.

Do key updates happen so frequently to consider this an issue? Am I missing anything? If I am wront I can buy this, unless you decide to honor my comments about not mixing session references with life references, then you could keep a Ref&lt;Key&gt; and would not need to rewrite the Vector, but just the object. And anyway, considering we should be using WebKit types whenever possible, I think it would make sense to use DoublyLinkedList instead, right?

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:169
&gt;&gt;&gt; +    void trackSession(RefPtr&lt;CDMInstanceSession&gt; session) { m_sessions.push_back(session); }
&gt;&gt; 
&gt;&gt; &amp;&amp; and WTFMove?
&gt; 
&gt; That doesn&apos;t match the caller expectation,
&gt; 
&gt;     RefPtr&lt;CDMInstanceSession&gt; newSession = adoptRef(new CDMInstanceSessionClearKey(*this));
&gt;     trackSession(newSession);  // moving would trash the return value
&gt;     return newSession;

I missed that. Considering we can&apos;t move, it might be interesting to either WTFMove considering that the parameter should have the reference increased or maybe declaring it as const &amp; and let the push_back &quot;do the ref&quot;.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/cdmproxy/CDMProxy.h:179
&gt;&gt;&gt; +    std::list&lt;RefPtr&lt;CDMInstanceSession&gt;&gt; m_sessions;
&gt;&gt; 
&gt;&gt; Why not Vector?
&gt; 
&gt; Same reason as the key store.

Same questions then (not the related to life management, of course).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612556</commentid>
    <comment_count>15</comment_count>
      <attachid>389135</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-29 10:58:39 -0800</bug_when>
    <thetext>Comment on attachment 389135
Patch

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

Review still WIP

&gt; Source/WebCore/ChangeLog:10
&gt; +        CDMInstance is a main-thread only class, it&apos;s purpose is to provide

its

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:82
&gt; +    LOG(EME, &quot;EME - CDMProxy - key store now has %u keys&quot;, numKeys());
&gt; +    std::for_each(m_keys.begin(), m_keys.end(),
&gt; +        [](const Key&amp; key) {
&gt; +            LOG(EME, &quot;\tEME - CDMProxy - Key ID: %s&quot;, key.idAsString().ascii().data());
&gt; +        });

Please, flag for log disabled as we don&apos;t need to traverse anything if we are not going to do void.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:99
&gt; +bool KeyStore::add(Ref&lt;Key&gt;&amp; key)

I don&apos;t know if I am missing anything but I think this would look better with either a &amp;&amp; or a const &amp;, preferrably a &amp;&amp; and moving when adding or assigning.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:199
&gt; +Optional&lt;Vector&lt;char&gt;&gt; CDMProxy::tryWaitForKey(const Vector&lt;char&gt;&amp; keyID) const

Beautiful!

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:207
&gt; +    auto stopWaitingForKeyOnReturn = makeScopeExit([this] {
&gt; +        stoppedWaitingForKey();
&gt; +    });

ScopeExit FTW!

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:263
&gt; +    bool nobodyWaitingForKey = !m_numDecryptorsWaitingForKey;

WK style, please prepend &quot;is&quot;. I really think it reads better, if you strongly object as a native speaker, leave it. I trust you.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:61
&gt; +    void ref() { m_references++; }
&gt; +    void deref() { m_references--; }
&gt; +    unsigned refCount() const { return m_references; }

Asked on the other patch.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:95
&gt; +    bool add(Ref&lt;Key&gt;&amp;);

As in the other patch, &amp;&amp; ?

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:115
&gt; +    std::list&lt;Key&gt; m_keys;

OT = please, refer to other patch to answer

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:136
&gt; +    Optional&lt;Vector&lt;char&gt;&gt; tryWaitForKey(const Vector&lt;char&gt;&amp; keyID) const;
&gt; +    Optional&lt;Vector&lt;char&gt;&gt; getOrWaitForKey(const Vector&lt;char&gt;&amp; keyID) const;

😍

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:156
&gt; +    // Media player query methods - main thread only

.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:158
&gt; +    virtual bool isWaitingForKey() const { ASSERT(isMainThread()); return m_numDecryptorsWaitingForKey &gt; 0; }

I wonder if in order to achieve most robustness, considering that it is important that we run this on the main thread, we implement the template method design patter here by asserting on the superclass and calling the virtual impl.

I&apos;m happy if you leave it like this, as well.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:161
&gt; +    // Proxy methods - must be thread-safe

.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612920</commentid>
    <comment_count>16</comment_count>
      <attachid>389135</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-30 05:15:44 -0800</bug_when>
    <thetext>Comment on attachment 389135
Patch

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

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:136
&gt;&gt; +    Vector&lt;char&gt; keyValue(const Vector&lt;char&gt;&amp; keyID) const;
&gt;&gt; +    bool keyAvailable(const Vector&lt;char&gt;&amp; keyID) const;
&gt;&gt; +    bool keyAvailableUnlocked(const Vector&lt;char&gt;&amp; keyID) const;
&gt;&gt; +    Optional&lt;Vector&lt;char&gt;&gt; tryWaitForKey(const Vector&lt;char&gt;&amp; keyID) const;
&gt;&gt; +    Optional&lt;Vector&lt;char&gt;&gt; getOrWaitForKey(const Vector&lt;char&gt;&amp; keyID) const;
&gt; 
&gt; 😍

Now that I think of this, wouldn&apos;t be more logical to use uint8_t instead of char here? I think it conceptually represents much better one byte.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:169
&gt; +    void trackSession(RefPtr&lt;CDMInstanceSession&gt; session) { m_sessions.push_back(session); }

const RefPtr &amp;

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:504
&gt; +    // FIXME: Unnecessary copy, can we avoid this while still exposing
&gt; +    // a non-GStreamer-specific DecryptInput API? These buffers are
&gt; +    // small (16 bytes), so not a huge deal, I guess.

==============================================================================================

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:124
&gt; +        UNUSED_PARAM(m_cdmInstance);

Is this really needed?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt; +        // FIXME: GStreamer-specific data layout.
&gt; +        const uint8_t* subsamplesBuffer;
&gt; +        size_t subsamplesBufferSizeInBytes;
&gt; +        size_t numSubsamples;

If we want to get rid of the specific data layout, we can parse it before assigning it here and maybe have a Vector&lt;size_t&gt; that is a series of clear/decrypted/clear/decrypted... Or maybe even a Vector&lt;std::pair&lt;size_t, size_t&gt;&gt; representing sequences of clear/decrypted sizes. That std::pair could even become a struct ClearDecryptedChunkSizesInBytes for example.

If you feel like implementing it now, good. If not, I&apos;m open to leave a comment of how we could implement this in the future, with my suggestion or something you can come up with.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1780
&gt; +        GST_ERROR(&quot;can&apos;t block the main thread waiting for a CDM instance&quot;);

GST_ERROR_OBJECT

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1789
&gt; +        GST_TRACE(&quot;found %zu protection events, %zu decryptors available&quot;, protectionSystemEvents.events().size(), protectionSystemEvents.availableSystems().size());

_OBJECT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613500</commentid>
    <comment_count>17</comment_count>
      <attachid>389135</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-31 11:21:38 -0800</bug_when>
    <thetext>Comment on attachment 389135
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        CDMInstance is a main-thread only class, it&apos;s purpose is to provide
&gt; 
&gt; its

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:82
&gt;&gt; +        });
&gt; 
&gt; Please, flag for log disabled as we don&apos;t need to traverse anything if we are not going to do void.

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:99
&gt;&gt; +bool KeyStore::add(Ref&lt;Key&gt;&amp; key)
&gt; 
&gt; I don&apos;t know if I am missing anything but I think this would look better with either a &amp;&amp; or a const &amp;, preferrably a &amp;&amp; and moving when adding or assigning.

Done. Made this take the key by &amp;&amp;

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:263
&gt;&gt; +    bool nobodyWaitingForKey = !m_numDecryptorsWaitingForKey;
&gt; 
&gt; WK style, please prepend &quot;is&quot;. I really think it reads better, if you strongly object as a native speaker, leave it. I trust you.

I agree, missed this the first time you mentioned it. Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:61
&gt;&gt; +    unsigned refCount() const { return m_references; }
&gt; 
&gt; Asked on the other patch.

Sorry, missed this one to, it&apos;s a good point. This does confuse two things.
  1/ Ref&lt;Key&gt;, i.e., making sure each session&apos;s key store has a valid reference to the keys it knows about.
  2/ Removing a key when we should per the EME spec. That is when it has been released or all sessions have removed it explicitly.

I think the mistake I&apos;ve made here is using very general ref-counting names for point 2/, when perhaps I could make them more specific and understandable. It still seems to be I need some alternative ref-counting strategy for point 2/ which Ref&lt;&gt; is by design not going to help me with. I renamed this in the next patch, WDYT?

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:95
&gt;&gt; +    bool add(Ref&lt;Key&gt;&amp;);
&gt; 
&gt; As in the other patch, &amp;&amp; ?

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:115
&gt;&gt; +    std::list&lt;Key&gt; m_keys;
&gt; 
&gt; OT = please, refer to other patch to answer

Reviewed and agreed, changed to Vector, I&apos;ve also switched to managed the Key&apos;s as RefPtr as it came out more consistent in the various methods.

&gt;&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:136
&gt;&gt;&gt; +    Optional&lt;Vector&lt;char&gt;&gt; getOrWaitForKey(const Vector&lt;char&gt;&amp; keyID) const;
&gt;&gt; 
&gt;&gt; 😍
&gt; 
&gt; Now that I think of this, wouldn&apos;t be more logical to use uint8_t instead of char here? I think it conceptually represents much better one byte.

Agreed &amp; done. Also needed to make this change to use the VectorHash&lt;&gt; helper trait.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:156
&gt;&gt; +    // Media player query methods - main thread only
&gt; 
&gt; .

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:158
&gt;&gt; +    virtual bool isWaitingForKey() const { ASSERT(isMainThread()); return m_numDecryptorsWaitingForKey &gt; 0; }
&gt; 
&gt; I wonder if in order to achieve most robustness, considering that it is important that we run this on the main thread, we implement the template method design patter here by asserting on the superclass and calling the virtual impl.
&gt; 
&gt; I&apos;m happy if you leave it like this, as well.

Left as is.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:161
&gt;&gt; +    // Proxy methods - must be thread-safe
&gt; 
&gt; .

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:169
&gt;&gt; +    void trackSession(RefPtr&lt;CDMInstanceSession&gt; session) { m_sessions.push_back(session); }
&gt; 
&gt; const RefPtr &amp;

Done.

&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:124
&gt;&gt; +        UNUSED_PARAM(m_cdmInstance);
&gt; 
&gt; Is this really needed?

It&apos;s avoiding a boring warning. If you mean the m_cdmInstance field, I think yes because it&apos;s important to know that proxies have a handle to instances architecturally. This will be useful for CDMs that async tell us about new keys from the proxy side and we will want to tell the instance side about it. I know you hate these names, hope it makes sense...

&gt;&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:149
&gt;&gt; +        size_t numSubsamples;
&gt; 
&gt; If we want to get rid of the specific data layout, we can parse it before assigning it here and maybe have a Vector&lt;size_t&gt; that is a series of clear/decrypted/clear/decrypted... Or maybe even a Vector&lt;std::pair&lt;size_t, size_t&gt;&gt; representing sequences of clear/decrypted sizes. That std::pair could even become a struct ClearDecryptedChunkSizesInBytes for example.
&gt; 
&gt; If you feel like implementing it now, good. If not, I&apos;m open to leave a comment of how we could implement this in the future, with my suggestion or something you can come up with.

Great idea. I added a comment and think it&apos;s best for a follow up patch. This was is getting a bit large.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1780
&gt;&gt; +        GST_ERROR(&quot;can&apos;t block the main thread waiting for a CDM instance&quot;);
&gt; 
&gt; GST_ERROR_OBJECT

Done.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1789
&gt;&gt; +        GST_TRACE(&quot;found %zu protection events, %zu decryptors available&quot;, protectionSystemEvents.events().size(), protectionSystemEvents.availableSystems().size());
&gt; 
&gt; _OBJECT

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613502</commentid>
    <comment_count>18</comment_count>
      <attachid>389384</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-31 11:25:09 -0800</bug_when>
    <thetext>Created attachment 389384
Patch

The ChangeLog needs regenerating, but I will do that after an r+ since the churn is painful to manage in the ChangeLog :-). Will also fix the Apple build when its ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613982</commentid>
    <comment_count>19</comment_count>
      <attachid>389384</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-02-03 09:05:20 -0800</bug_when>
    <thetext>Comment on attachment 389384
Patch

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

WIP, will finish tomorrow.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:115
&gt; +        RELEASE_ASSERT(keyWithMatchingKeyID-&gt;value() == key-&gt;value(), &quot;Can this really happen?&quot;);

This made me smile as I was really wondering the same thing when I read the code the first time.

I don&apos;t really know if we need a RELEASE_ASSERT here is ok here. For me, it would be more user friendly to fail playback rather than crashing and we could keep this for debug build with an ASSERT.

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:161
&gt; +    RELEASE_ASSERT(false &amp;&amp; &quot;key must exist to call this method&quot;);
&gt; +    UNREACHABLE();

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1777
&gt; +bool MediaPlayerPrivateGStreamer::blockWaitingForCDMAttachment(GstMessage* message)

I think a bit better name for this would be fireInitDataEventsAndBlockForCDMAttachment. Either this or better split it in two methods.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1850
&gt; +        bool cdmAttached = blockWaitingForCDMAttachment(message);

isCDMAttached

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1862
&gt; +        GST_WARNING(&quot;waiting for a CDM failed, no CDM available&quot;);

_OBJECT

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:40
&gt; +    RefPtr&lt;CDMProxyClearKey&gt; proxyCDM;

Arg! We are keeping the proxyCDM name here? Please give me a couple of diff lines more and a big satisfaction to both of us when we see proxyCDM wiped out even from our memories ;)

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:311
&gt; +static gboolean installCDMProxyIfNotAvailable(WebKitMediaCommonEncryptionDecrypt* self)

Nit: Even when the intention is using it only during the event handling, I&apos;d keep this as bool instead of gboolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614477</commentid>
    <comment_count>20</comment_count>
      <attachid>389384</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-04 03:45:37 -0800</bug_when>
    <thetext>Comment on attachment 389384
Patch

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

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:115
&gt;&gt; +        RELEASE_ASSERT(keyWithMatchingKeyID-&gt;value() == key-&gt;value(), &quot;Can this really happen?&quot;);
&gt; 
&gt; This made me smile as I was really wondering the same thing when I read the code the first time.
&gt; 
&gt; I don&apos;t really know if we need a RELEASE_ASSERT here is ok here. For me, it would be more user friendly to fail playback rather than crashing and we could keep this for debug build with an ASSERT.

My thoughts were that I really want to fail hard when/if this happens. Propagating an error value appropriately to fail playback would be quite a bit of extra complexity and for a case that I don&apos;t think can happen. I chose RELEASE_ASSERT because a) only a small subset of developers (no users) actually run Debug builds and b) for the &quot;impossible&quot;, a release assert seems like a good choice. WDYT?

&gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:161
&gt;&gt; +    UNREACHABLE();
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1777
&gt;&gt; +bool MediaPlayerPrivateGStreamer::blockWaitingForCDMAttachment(GstMessage* message)
&gt; 
&gt; I think a bit better name for this would be fireInitDataEventsAndBlockForCDMAttachment. Either this or better split it in two methods.

Done. Split into parseInitDataFromProtectionMessage &amp; waitForCDMAttachment.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1850
&gt;&gt; +        bool cdmAttached = blockWaitingForCDMAttachment(message);
&gt; 
&gt; isCDMAttached

Done.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1862
&gt;&gt; +        GST_WARNING(&quot;waiting for a CDM failed, no CDM available&quot;);
&gt; 
&gt; _OBJECT

Done

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:40
&gt;&gt; +    RefPtr&lt;CDMProxyClearKey&gt; proxyCDM;
&gt; 
&gt; Arg! We are keeping the proxyCDM name here? Please give me a couple of diff lines more and a big satisfaction to both of us when we see proxyCDM wiped out even from our memories ;)

😱 Done.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:311
&gt;&gt; +static gboolean installCDMProxyIfNotAvailable(WebKitMediaCommonEncryptionDecrypt* self)
&gt; 
&gt; Nit: Even when the intention is using it only during the event handling, I&apos;d keep this as bool instead of gboolean.

Not done, the policy is to use g-types for g-APIs, since this is the return value for a gst callback, I will keep gboolean and avoid the potential for confusion between a bool type and an integer type (what glib typedefs its boolean to)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614478</commentid>
    <comment_count>21</comment_count>
      <attachid>389648</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-04 03:49:07 -0800</bug_when>
    <thetext>Created attachment 389648
Patch

Addresses all previous comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614480</commentid>
    <comment_count>22</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-02-04 03:58:35 -0800</bug_when>
    <thetext>(In reply to Charlie Turner from comment #20)
&gt; &gt;&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:115
&gt; &gt;&gt; +        RELEASE_ASSERT(keyWithMatchingKeyID-&gt;value() == key-&gt;value(), &quot;Can this really happen?&quot;);
&gt; &gt; 
&gt; &gt; This made me smile as I was really wondering the same thing when I read the code the first time.
&gt; &gt; 
&gt; &gt; I don&apos;t really know if we need a RELEASE_ASSERT here is ok here. For me, it would be more user friendly to fail playback rather than crashing and we could keep this for debug build with an ASSERT.

What I mean is not propagating the error, I think the error will propagate itself and there will be either decryption errors or decoding errors later, which are fine, IMHO, if we get the error with our Debug build later, once reported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614515</commentid>
    <comment_count>23</comment_count>
      <attachid>389648</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-02-04 07:12:40 -0800</bug_when>
    <thetext>Comment on attachment 389648
Patch

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

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.cpp:76
&gt; +        // NOTE: Do we care that we will not append a key in other if it matches a key ID
&gt; +        // in the keystore and has different data. Should we overwrite? Which is &quot;newer&quot;?
&gt; +        // Don&apos;t think we need this extra complexity.

I wonder if we should ASSERT here just in case?

&gt; Source/WebCore/platform/encryptedmedia/CDMProxy.h:174
&gt; +    KeyStore m_keyStore;

we have two key stores, wouldn&apos;t it be possible to have only one? Maybe a fixme for a next iterations?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h:144
&gt; +        const uint8_t* keyID;
&gt; +        size_t keyIDSizeInBytes;
&gt; +
&gt; +        const uint8_t* iv;
&gt; +        size_t ivSizeInBytes;
&gt; +
&gt; +        uint8_t* encryptedBuffer;
&gt; +        size_t encryptedBufferSizeInBytes;

FIXME, encapsulate these in non-copied structures.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:275
&gt; +static CDMProxy* requestCDMProxyFromGstContext(WebKitMediaCommonEncryptionDecrypt* self)

Nit, I think we are not requesting, more like getting, specially according to the long comment (yes, I wrote that myself)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616117</commentid>
    <comment_count>24</comment_count>
      <attachid>390075</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-07 04:44:10 -0800</bug_when>
    <thetext>Created attachment 390075
Patch

Addresses all comments. Submit to EWS to check Apple build status</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616165</commentid>
    <comment_count>25</comment_count>
      <attachid>390075</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-07 08:40:14 -0800</bug_when>
    <thetext>Comment on attachment 390075
Patch

Setting r? again to see if I can trigger an EWS submission</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616886</commentid>
    <comment_count>26</comment_count>
      <attachid>390254</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-10 09:10:09 -0800</bug_when>
    <thetext>Created attachment 390254
Patch

Attempt #1 at getting the Xcode build system to cooperate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617164</commentid>
    <comment_count>27</comment_count>
      <attachid>390308</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-10 16:18:09 -0800</bug_when>
    <thetext>Created attachment 390308
Patch

Attempt #2 at getting Apple ports building</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617317</commentid>
    <comment_count>28</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 03:06:30 -0800</bug_when>
    <thetext>The problem now is Apple port has a dependency on the CDMClearKey, which I initially thought could be removed since Apple doesn&apos;t support ClearKey, but avfoundation actually appears to!

So, I think it would be best to move the CDMProxy ClearKey implementation into platform/graphics/gstreamer/eme instead and fix the now indirect dependency of Apple ports on GCrypt, which clearly is bad :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617326</commentid>
    <comment_count>29</comment_count>
      <attachid>390350</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 04:38:39 -0800</bug_when>
    <thetext>Created attachment 390350
Patch

Attempt #1 at moving G* specific ClearKey code to GStreamer platform directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617340</commentid>
    <comment_count>30</comment_count>
      <attachid>390354</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 05:10:13 -0800</bug_when>
    <thetext>Created attachment 390354
Patch

Attempt #1.1.1ctually remove the gcrypt include now from CDMClearKey...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617441</commentid>
    <comment_count>31</comment_count>
      <attachid>390377</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 09:50:16 -0800</bug_when>
    <thetext>Created attachment 390377
Patch

Attempt #2 | The Mac bots have -Werror and -Wunused-parameter, GTK port does not :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617521</commentid>
    <comment_count>32</comment_count>
      <attachid>390398</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 11:24:14 -0800</bug_when>
    <thetext>Created attachment 390398
Patch

Attempt #3 | Looks like CDMProxy.cpp is not getting compiled, since there&apos;s undefined references to methods defined in there. Noticed there&apos;s also a Sources.txt file that CDMFactory.cpp was in, try adding CDMProxy.cpp in there as well, maybe the Mac port needs that. After this I&apos;m out of ideas of how to add these new files to the Apple build, it looks like I&apos;ve added it in the relevant areas the X-files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617546</commentid>
    <comment_count>33</comment_count>
      <attachid>390404</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 12:21:09 -0800</bug_when>
    <thetext>Created attachment 390404
Patch

Attempt #3 | More unusued parameter warnings I missed due to developing in Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617547</commentid>
    <comment_count>34</comment_count>
      <attachid>390405</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 12:25:09 -0800</bug_when>
    <thetext>Created attachment 390405
Patch

Remove global -Wunused-paramters used during testing for the Mac build requirements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617766</commentid>
    <comment_count>35</comment_count>
      <attachid>390464</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-11 16:40:39 -0800</bug_when>
    <thetext>Created attachment 390464
Patch

More unused parameters on Mac due to LOG_DISABLED=T &amp;&amp; RELEASE_LOG_DISABLED=F, another difference to the GTK builds for me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617910</commentid>
    <comment_count>36</comment_count>
      <attachid>390502</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-12 02:27:21 -0800</bug_when>
    <thetext>Created attachment 390502
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617921</commentid>
    <comment_count>37</comment_count>
      <attachid>390502</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-12 03:11:28 -0800</bug_when>
    <thetext>Comment on attachment 390502
Patch

Clearing flags on attachment: 390502

Committed r256429: &lt;https://trac.webkit.org/changeset/256429&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617922</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-12 03:11:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617935</commentid>
    <comment_count>39</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2020-02-12 04:42:43 -0800</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #37)
&gt; Comment on attachment 390502 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 390502
&gt; 
&gt; Committed r256429: &lt;https://trac.webkit.org/changeset/256429&gt;

This seems to have broken the build on the GTK minimum dependencies bots (that build without jhbuild, using the distro dependencies).

Debian 10: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20Debian%20Stable%20%28Build%29/builds/29727
Ubuntu 18.04: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20Ubuntu%20LTS%20%28Build%29/builds/29264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617944</commentid>
    <comment_count>40</comment_count>
      <attachid>390502</attachid>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2020-02-12 05:47:13 -0800</bug_when>
    <thetext>Comment on attachment 390502
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1792
&gt; +InitData MediaPlayerPrivateGStreamer::parseInitDataFromProtectionMessage(GstMessage* message)

Missing some encryptedMedia guards?

https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20Ubuntu%20LTS%20%28Build%29/builds/29264/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617949</commentid>
    <comment_count>41</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-12 06:12:38 -0800</bug_when>
    <thetext>Thanks for pointing the build break out, I&apos;ve fixed it in https://bugs.webkit.org/show_bug.cgi?id=207628</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388662</attachid>
            <date>2020-01-24 02:02:35 -0800</date>
            <delta_ts>2020-01-24 02:17:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200124100234.patch</filename>
            <type>text/plain</type>
            <size>80971</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uMWVmMDlkNDVmYWY2NTVkNWI4NDQ0Y2U5ODkwMTQ1
YzRmN2RkMmVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wMS0yNCAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMg
YW5kCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAg
ICAgICBQcm94eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRv
IGF2b2lkIHNvbWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxp
YmVydHkgb2YgcmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFz
b24gdGhhdCBpdCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAg
ICBjb25mdXNpb24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFk
ZXIgdXRpbGl0eSBmb3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMaWNlbnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEp
OiBSZWZhY3RvcmVkIHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNTZXRDb3VudGVyVmVjdG9yKTog
SGVscGVyIG1ldGhvZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ1NldERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qg
d2lsbCBibG9jayBpZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20g
SlMuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpDRU5DRGVjcnlwdEZ1bGxT
YW1wbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNE
ZWNyeXB0U3ViU2FtcGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ0RlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xl
YXJLZXk6OmluaXRpYWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAg
ICAgIENETVByb3h5IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1l
bnRhdGlvbiBvZgorICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNv
bW1hbmQga2V5IG1hbmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAg
IHRyYWNrU2Vzc2lvbiBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVN
RQorICAgICAgICBzZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJh
Y2sgb2YgZ2VuZXJhdGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1
c2UgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJv
eHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZh
bHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBs
b29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkg
dmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAg
b3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAg
ICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpibG9j
a1dhaXRpbmdGb3JDRE1BdHRhY2htZW50KToKKyAgICAgICAgUmVmYWN0b3IgbG9naWMgb3V0IG9m
IHN5bmNNZXNzYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdh
aXRpbmctZm9yLWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQp
OgorICAgICAgICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVy
LWJhc2VkIHBvcnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQg
Y2xhc3NlcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVk
IGEgaGFuZGxlIHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBt
YW5hZ2VtZW50LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAg
ICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUg
Q0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAg
ICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJr
aXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6Cisg
ICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAo
aGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhv
ZCB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZp
bmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIFJlZmFjdG9yIGZvciBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOiBSZW1vdmUgdGhlCisgICAgICAgIHF1
ZXJ5IGhhbmRsZXIgdXNlZCBmb3Igd2FpdGluZyBmb3Iga2V5IG5vdGlmaWNhdGlvbnMsIHNpbmNl
IGl0J3MKKyAgICAgICAgYmVlbiBkZWxldGVkIG5vdy4KKyAgICAgICAgKHRyYW5zZm9ybUluUGxh
Y2UpOiBSZW1vdmUgdGhlIGJyb2tlbiB3YWl0aW5nIGZvciBrZXkgbG9naWMsIGFuZAorICAgICAg
ICBtYWtlIGNsZWFyIHdoYXQgd2UgYmxvY2sgb24gaGVyZS4gQWRkIGEgc2NvcGUgZ3VhcmQgdG8g
cmVtb3ZlCisgICAgICAgIHByb3RlY3Rpb24gbWV0YSByYXRoZXIgdGhhbiBkb2luZyBpdCBtYW51
YWxseS4KKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOiAKKyAgICAgICAgKHJlcXVlc3RD
RE1Qcm94eUZyb21Hc3RDb250ZXh0KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxh
YmxlCisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6IEJyZWFrb3V0IGZyb20gaXNDRE1JbnN0YW5j
ZUF2YWlsYWJsZQorICAgICAgICAoaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUpOiBCcmVh
a291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAgICAgKHNpbmtFdmVudEhhbmRs
ZXIpOiBSZW1vdmUgaGFuZGxlS2V5UmVzcG9uc2UsIHdlIG5vdyB3YWl0IG9uIGEKKyAgICAgICAg
cHJveHkgQ0RNIGJlaW5nIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW5zdGFsbGVkIGluIHRoZSBjb250
ZXh0CisgICAgICAgIGhhbmRsZXIuCisgICAgICAgIChjaGFuZ2VTdGF0ZSk6CisgICAgICAgIChz
ZXRDb250ZXh0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChpc0NETUluc3RhbmNl
QXZhaWxhYmxlKTogRGVsZXRlZC4gUmVmYWN0b3JlZC4gVGhpcyB3YXMgZG9pbmcKKyAgICAgICAg
dGhyZWUgdGhpbmdzIGluIG9uZSBwb29ybHkgbmFtZWQgZnVuY3Rpb24uCisgICAgICAgIChxdWVy
eUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAg
ICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NE
TUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAxLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3Qgc3BlY2lhbCBjYXNlIGZvcm1hdHRp
bmcgcm9vdCBsYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRl
eCA4NzRkNDlhZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li5lY2I5NzQ0M2EwM2E2
NDU4Mzc5ODNmZWNiZDBmOTdmZjJkMWQ2NjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlCkBAIC0xNjAsMTIgKzE2MCwxMyBAQCBlbmRpZiAoKQogCiBpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2RtcHJveHkiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdT
dHJlYW1lci5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2
YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEw
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQ
cm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0
IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGku
ZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZh
dWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFT
Y3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBA
IC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9y
YWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNl
U2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNE
TT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewog
ICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVk
Yjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjA4NzAyODQ4MjVkOGMwN2IwZGNl
NTQyN2Q0MjQ3ZWRlYWY5N2ZmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAg
LTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENsZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3
dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4
X3QgY2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhj
MCwgMHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwg
MHhmYiwgMHg0YiB9OwotY29uc3QgdW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0g
c2l6ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9
IDE2OworbmFtZXNwYWNlIHsKIAotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5
U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3Rh
dGljIGJvb2wgcmVhZFVJbnQzMihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkco
b2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZz
ZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9y
ZSYga2V5cygpIHsgcmV0dXJuIG1fa2V5czsgfQorICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zm
c2V0ICs9IHNpemVvZih2YWx1ZSk7CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVy
RGVzdHJveWVkPENsZWFyS2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlT
dG9yZSBtX2tleXM7Ci19OworICAgIHJldHVybiB0cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBD
bGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQorc3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2
X3QmIHZhbHVlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBz
X3N0YXRlOwotICAgIHJldHVybiBzX3N0YXRlOworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZz
ZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2Yo
dmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAg
IG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFy
S2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5
c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21t
b24tc3lzdGVtCitjb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAs
IDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4
M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFy
S2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVt
IHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJ
RFNpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9Owor
Cit9CiAKIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3Qg
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CkBAIC04OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPEtleT4+PiBwYXJzZUxpY2Vuc2VG
b3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5cycg
a2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVy
CiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAg
LTEwMSw3ICsxMTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBW
ZWN0b3I8UmVmPEtleT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6
OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsm
ZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtMTIwLDcgKzEzMyw3IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7
IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFs
dWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
ZGVjb2RlZEtleXMuYXBwZW5kKHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJs
ZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShrZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRL
ZXlzLmFwcGVuZChLZXk6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNh
YmxlLCBrZXlJRERhdGEsIGtleVZhbHVlRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBz
aXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5
SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5p
dERhdGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNl
Y29uZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXRE
YXRhLgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0
S2V5aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVz
KTsKICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRl
eCArPSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRl
czsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNB
cnJheSkpOwpAQCAtNDU2LDQxICs0NjksMTMzIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0
ZUNsZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAg
ICByZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1
cmluZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRl
YWwuIFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0v
LyBhbGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5n
Ci0vLyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25z
aWJpbGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJh
Y2tncm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGll
cyAoaS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWlu
LXRocmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdl
IGNhbiBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAot
Ly8gU2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQg
YWNyb3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRl
ZEtleShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVh
cktleTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0
cmluZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmlu
ZyhrZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsK
KyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8
UHJveHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBj
b25zdAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0Q291bnRlclZlY3Rvcihjb25zdCBD
RU5DRGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBh
bGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZl
Y3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNp
emUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KTsKKyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAo
aW5wdXQuaXZOdW1CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoyMDE2
IFNlY3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xhdGVk
S2V5KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRo
ZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElW
IChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAg
ICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwg
OCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleUlW
U2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKSkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0RGVjcnlwdGlvbktleShj
b25zdCBDRU5DRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vzc2Fy
eSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8vIGEg
bm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJzIGFy
ZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVzcy4K
KyAgICBWZWN0b3I8Y2hhcj4ga2V5SURWZWM7CisgICAga2V5SURWZWMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShpbi5rZXlJRE51bUJ5dGVzKTsKKyAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQs
IGluLmtleUlETnVtQnl0ZXMpOworCisgICAgVmVjdG9yPGNoYXI+IGtleURhdGE7CisgICAgaWYg
KCFnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMsIGtleURhdGEpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KG1f
Z2NyeUhhbmRsZSwga2V5RGF0YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpKSkgeworICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtl
eSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5D
RGVjcnlwdEZ1bGxTYW1wbGUoQ0VOQ0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyB1aW44
X3QqIGJ1ZmZlclRvRGVjcnlwdCwgc2l6ZV90IGJ1ZmZlck51bUJ5dGVzKTsKKyAgICBpZiAoIWlu
LmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjog
JXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzKTsKKworICAg
IGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2Ny
eUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcywg
MCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJP
UihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0U3ViU2FtcGxlZChDRU5DRGVjcnlwdENv
bnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQg
PSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNp
Z25lZCBzdWJTYW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVP
ZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcykgeworICAgICAgICB1aW50MTZf
dCBzdWJTYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3ViU2FtcGxl
TnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChzdWJTYW1wbGVJbmRleCA8IGlu
cHV0Lm51bVN1YlNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5z
dWJTYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJTYW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBs
ZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YlNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBu
dW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3ViU2FtcGxl
SW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJTYW1wbGVzQnVmZmVyLCBpbnB1dC5z
dWJTYW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YlNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBi
eXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJTYW1wbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ViU2Ft
cGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YlNhbXBsZU51bUNs
ZWFyQnl0ZXMgPSAwOworICAgICAgICAgICAgc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5
IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdl
YkNvcmUuCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBi
eXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJTYW1wbGVJbmRleCwg
c3ViU2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBl
bmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRl
T2Zmc2V0ICs9IHN1YlNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YlNhbXBs
ZU51bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2Ft
cGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNy
eXB0KSIsIHN1YlNhbXBsZUluZGV4LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQu
ZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKwor
ICAgICAgICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2Rl
Y3J5cHQobV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZm
ZXJCeXRlT2Zmc2V0LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5j
cnlwdGVkQnVmZmVyQnl0ZU9mZnNldCArPSBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xl
YXJLZXk6OkNFTkNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29udGV4dCYg
aW5wdXQpCit7CisgICAgaWYgKCFDRU5DU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIUNFTkNT
ZXREZWNyeXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGlucHV0LmlzU3ViU2FtcGxlZCgpID8gQ0VOQ0RlY3J5cHRTdWJTYW1wbGVkKGlucHV0KSA6
IENFTkNEZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktl
eTo6aW5pdGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdj
cnlfY2lwaGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJ
UEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdw
Z19zdHJlcnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hv
dWxkIG5vdCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0K
IH0KIAogQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBt
X3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAgICA6IENETUlu
c3RhbmNlUHJveHkobmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQogCkBAIC01MzUs
MzYgKzY0MCw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5U3lzdGVt
KCkgY29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktl
eTo6Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eTo6a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBr
ZXlJRERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1ib29s
IG9wZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsK
LSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SUREYXRhID09
ICprMi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xl
YXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0g
ICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAg
ICBpZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOwot
Ci0gICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5k
YXRhKCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNz
aW9uPiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
KCp0aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdT
ZXNzaW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hh
cmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTU3
Miw2ICs2NTAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1aW50MzJf
dCBzX3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAKKyAgICBt
X3Nlc3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSkKICAg
ICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKQEAgLTU3OSwxOCArNjU5LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAg
ICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0g
V1RGTW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1ZV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwgU3VjY2Vl
ZGVkKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBjb25z
dCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2Fs
bGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25NYWluVGhy
ZWFkKCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMs
ICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0
b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzY4MiwyNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVj
dChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwg
c2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNl
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2Ug
Zm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBj
dXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tl
eVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGlj
ZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0
b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJl
ZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9u
KCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCiAgICAgICAgIGJvb2wg
a2V5c0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRl
Y29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNv
ZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFz
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3Rk
OjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAg
ICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250
YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBk
ZWNvZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhN
YXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZh
bHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0g
ICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2Rl
ZEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAg
a2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBr
ZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVz
IiwgZGVjb2RlZEtleS0+aWRBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXktPnZh
bHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGtleXNDaGFuZ2VkID0g
a2V5c0NoYW5nZWQgfHwgbV9rZXlTdG9yZS5hZGQoZGVjb2RlZEtleSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6
dSBrZXlzIiwga2V5VmVjdG9yLnNpemUoKSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIHNlc3Npb24gJXMgaGFzICV1IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQu
dXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFs
PEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkg
ewotICAgICAgICAgICAgLy8gU29ydCBieSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0
KGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlT
dGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0
b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVz
PiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2Vk
S2V5cyA9IFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJv
bShtX2tleVN0b3JlKTsKKyAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252
ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hD
YWxsYmFjayhmYWxzZSwgV1RGTW92ZShjaGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2Vl
ZGVkKTsKQEAgLTY1Nyw0NyArNzEwLDI3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAg
fQogCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJv
b3QpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9u
IGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAg
ICAgICBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7
CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBh
Y2tub3dsZWRnZWQsIGNsZWFyaW5nIGFsbCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBtX3BhcmVudEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlz
cGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3Jt
YXQgd2FzIHJlY29nbml6ZWQuCisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lv
biAlcyB1cGRhdGUgcGF5bG9hZCB3YXMgYW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25J
ZC51dGY4KCkuZGF0YSgpKTsKICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklk
LCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
Ly8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3Bh
dGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBh
dXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQotICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25h
bDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhpc3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2Vzcywg
U2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRGYWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKAotICAgICAgICAgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlz
dGluZ0tleXMpLCBzdWNjZXNzLCBsb2FkRmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1
c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyBhbGwgdGhlIGtub3duIGtleXMgZm9yIHRoaXMg
c2Vzc2lvbi4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgIHsKLSAg
ICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAg
ICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0g
a2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEY6Om51bGxvcHQs
IEZhaWxlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb1Nlc3Npb25EYXRhKTsKKyAgICBBU1NFUlQo
c2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVz
VmVjdG9yID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCAma2V5U3RhdHVzVmVjdG9yXSgpIG11dGFibGUgeworICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byYga2V5VmVjdG9yID0gaXQtPnZhbHVlOwotICAgICAgICBrZXlTdGF0dXNWZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVj
a2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXku
a2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotICAgIH0KIAotICAgIGRpc3BhdGNoQ2FsbGJhY2so
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6
Tm9uZSk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25l
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VT
ZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBA
IC03MTMsNyArNzQ2LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VT
ZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNz
aW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2sp
CiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxi
YWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxs
cy4KKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3Rv
ciYmIGtleVN0YXR1c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2Fn
ZSwgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
CkBAIC03MjcsMzUgKzc2MSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8g
Q29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFz
ZWQga2V5cywgYW5kIHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2Un
IGZvcm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2Vk
KCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8v
IFJldHJpZXZlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBp
ZiBub25lIGlzIGZvdW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2lu
Z2xldG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7
Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKEtleVN0YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0
cmlldmUgdGhlIEtleSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNl
c3Npb24sIGFuZAotICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3Ig
dGhpcyBzZXNzaW9uLgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVl
KTsKLSAgICAgICAga2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUg
S2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNl
ZCcgc3RhdHVzLgotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3Ip
Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxS
ZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6
OlJlbGVhc2VkIH0pOwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50
cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQog
ICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0
IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0
byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5VmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEt
PnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAg
ICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJ
RERhdGEtPmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUo
KSkpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChrZXkuaWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmlu
ZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkuaWQoKS5kYXRhKCksIGtleS5pZCgpLnNpemUoKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMi
LCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2ICs3ODIsNyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcm
IHNlc3Npb25JZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQog
CisgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhX
VEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3Vj
Y2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRl
eCA4NWIzMTliMWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li41MTMyMDk1ZDc1NTJl
YmM0MzBlMzRhYjg1NjQ5NDM2ZmYyOTlkODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgK
QEAgLTMxLDEwICszMSwxMiBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNs
dWRlICJDRE1GYWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJD
RE1JbnN0YW5jZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q0RNUHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQu
aD4KKyNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTc3LDI3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8U3Ry
aW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIH07CiAK
LWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGlj
OgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlW
YWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRl
ZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2
YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3Rh
bmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZp
bmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1J
bnN0YW5jZUNsZWFyS2V5PiB7CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwog
ICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAgIC8vIENETUluc3RhbmNl
CiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0KLQogICAgIFN1Y2Nlc3NW
YWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmln
dXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2ZUlkZW50aWZp
ZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0UGVyc2lzdGVudFN0
YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0OSArOTMsODcgQEAgcHVibGljOgogICAg
IFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwog
ICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPENE
TUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotCi0gICAgc3RydWN0IEtl
eSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwotICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAgU3RyaW5nIGtleUlEQXNTdHJpbmcoKSBj
b25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmcoKSBjb25zdDsKLQotICAgICAg
ICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5r
ZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuICprZXlWYWx1ZURhdGEgPT0gKm90aGVy
LmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR3byBrZXlzIGFyZSBlcXVh
bCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVz
LgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0
IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLQotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICEob3BlcmF0
b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPT0oazEsIGsyKSAmJiAhb3Bl
cmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShjb25zdCBL
ZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I+KGsxLCBrMik7IH0KLSAg
ICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsy
KSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICB9OwotCi0gICAgUmVmUHRyPFBy
b3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJveHlDRE07IH0KLQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1fcHJveHlDRE07CiB9OwogCiBjbGFzcyBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Np
b24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleT4gewog
cHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJL
ZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudEluc3RhbmNlKHBhcmVudCkgeyB9CiAgICAg
dm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERh
dGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikg
ZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBl
LCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIGNsb3NlU2Vzc2lv
bihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lk
IHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNz
aW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgc3RvcmVSZWNvcmRPZktleVVzYWdl
KGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7
CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsKKyAgICBLZXlTdG9y
ZSBtX2tleVN0b3JlOworfTsKKworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQg
ZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBD
RE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94
eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5
SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleShD
RE1JbnN0YW5jZUNsZWFyS2V5JiBpbnN0YW5jZSkKKyAgICAgICAgOiBtX2NkbUluc3RhbmNlKGlu
c3RhbmNlKQorICAgIHsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBkb24ndCB1c2UgdGhpcyBsaW5r
IGJhY2sgdG8gdGhlICJtYWluLXRocmVhZCBpbnN0YW5jZSIsCisgICAgICAgIC8vIGJ1dCBoYXZp
bmcgdGhlIGNvbm5lY3Rpb24gcmVhZHkgbWFkZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgdXNl
ZnVsCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAgICAgIFVOVVNFRF9QQVJBTShtX2Nk
bUluc3RhbmNlKTsKKyAgICAgICAgaW5pdGlhbGl6ZUdjcnlwdCgpOworICAgIH0KKyAgICB2aXJ0
dWFsIH5DRE1Qcm94eUNsZWFyS2V5KCk7CisKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGxhY2sg
b2YgY29uc2lzdGVuY3kgYmV0d2VlbiBTaGFyZWRCdWZmZXJzLAorICAgIC8vIFZlY3RvcjxjaGFy
PidzIGFuZCB7dWludDhfdCosc2l6ZV90fSBpZGlvbXMgZm9yIHJlcHJlc2VudGluZyBhIGNodW5r
IG9mCisgICAgLy8gYnl0ZXMuIEZpeCB0aGF0IHNvbWVob3cuIE5vdGUgU2hhcmVkQnVmZmVycyBh
cmUgZGFuZ2Vyb3VzIHNpbmNlCisgICAgLy8gdGhleSdyZSBub3QgdGhyZWFkLXNhZmUgYW5kIHRo
aXMgY2xhc3MgbXVzdCBtYWludGFpbgorICAgIC8vIHRocmVhZC1zYWZldHksIGJ1dCBtYXliZSBT
aGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50IGNvdWxkIGJlCisgICAgLy8gbWFkZSB0byB3b3JrLCBo
b3dldmVyIHRoYXQgaGFzIHplcm8gaGVscGVycyBmb3IgZHJvcHBpbmcgaW50bworICAgIC8vIGl0
ZXJhdG9yLWF3YXJlIC8gY29tcGFyYXRvci1hd2FyZSBjb250YWluZXJzLi4uCisgICAgc3RydWN0
IENFTkNEZWNyeXB0Q29udGV4dCB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleUlEOworICAg
ICAgICBzaXplX3Qga2V5SUROdW1CeXRlczsKKworICAgICAgICBjb25zdCB1aW50OF90KiBpdjsK
KyAgICAgICAgc2l6ZV90IGl2TnVtQnl0ZXM7CisKKyAgICAgICAgdWludDhfdCogZW5jcnlwdGVk
QnVmZmVyOworICAgICAgICBzaXplX3QgZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXM7CisKKyAgICAg
ICAgLy8gRklYTUU6IEdTdHJlYW1lci1zcGVjaWZpYyBkYXRhIGxheW91dC4KKyAgICAgICAgY29u
c3QgdWludDhfdCogc3ViU2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YlNhbXBsZXNC
dWZmZXJOdW1CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YlNhbXBsZXM7CisKKyAgICAgICAg
Ym9vbCBpc1N1YlNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJTYW1wbGVzOyB9CisgICAg
fTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdo
YXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQg
dGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdo
YXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgQ0VOQ0RlY3J5
cHQoQ0VOQ0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXpl
R2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGlu
IENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBz
dXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXN1c2Ugc29t
ZSBDcnlwdG8gQVBJcyBpbiBXZWJDb3JlPworICAgIGJvb2wgQ0VOQ1NldENvdW50ZXJWZWN0b3Io
Y29uc3QgQ0VOQ0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9vbCBDRU5DU2V0RGVjcnlwdGlvbktl
eShjb25zdCBDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0RnVsbFNh
bXBsZShDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0U3ViU2FtcGxl
ZChDRU5DRGVjcnlwdENvbnRleHQmKTsKKworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fY2Rt
SW5zdGFuY2U7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRo
aW5nIGluIFdlYkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5
SGFuZGxlOwogfTsKIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ0RNX0lOU1RBTkNFKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXksIFdlYkNv
cmU6OkNETUluc3RhbmNlOjpJbXBsZW1lbnRhdGlvblR5cGU6OkNsZWFyS2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5NzgzZTZj
YjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVl
IHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogICAgIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAg
IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBS
ZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsg
fQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2NjY5ZjYy
NmFmYWU4YWIxYzYzYWNjMWUzMzlkNjk0ZWQ5ZTIxOTUyLi45MTQ2YWJjNGU4YmY2YzQ1OWYwZDYx
ZjhlYjhlNjYzNTI5ZTc4ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtMTc3NCw2ICsxNzc0LDQ0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBlbGluZSkKICAgICB9
LCB0aGlzLCBudWxscHRyKTsKIH0KIAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBibG9jayB0
aGUgbWFpbiB0aHJlYWQgd2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJ
bml0RGF0YSBpbml0RGF0YTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3Rl
Y3Rpb25NdXRleCk7CisgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5
c3RlbUV2ZW50cyhtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVj
dGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1F
dmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5
c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9u
U3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtl
eVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxw
dHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwg
JmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAgaW5pdERh
dGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAgICAgICBtX2hhbmRs
ZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92
ZShpbml0RGF0YSkpOworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5n
IGZvciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsK
KyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2Rt
QXR0YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50
Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAg
aWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExF
Q1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODA5LDQxICsxODQ3LDggQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19z
dHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIp
KSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9S
KCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNv
bnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQt
ZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJ
bml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMg
cHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgi
Zm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBw
cm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2
ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRv
JiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVu
dF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEs
IG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5
c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50
cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5p
dERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcg
Zm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxz
ZTsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9s
ZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0g
bV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRf
cywgW3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYg
IWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlz
RW1wdHkoKSkgeworICAgICAgICBib29sIGNkbUF0dGFjaGVkID0gYmxvY2tXYWl0aW5nRm9yQ0RN
QXR0YWNobWVudChtZXNzYWdlKTsKKyAgICAgICAgaWYgKGNkbUF0dGFjaGVkICYmICFpc1BsYXll
clNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3Ry
ZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0
ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcg
d2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIs
IG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5
c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg1MSwxMCAr
MTg1NiwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01l
c3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29u
dGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0Lmdl
dCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJk
ZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1
aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VM
RU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlh
bGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HKCJ3YWl0aW5nIGZvciBhIENETSBmYWls
ZWQsIG5vIENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0yMTg0LDE5ICsyMTkwLDYgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwog
ICAgICAgICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkg
ewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmct
Zm9yLWtleSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7
Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBh
ZnRlciBiZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5
IHRoZXkgYXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRv
ZXMgbm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNo
YW5nZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNv
bWV0aGluZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIElu
IHRoZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxv
Y2tlZC4KLSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJt
LWtleS1yZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJkcm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19O
QU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAg
ICAgICB9CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFU
LCBzdHJ1Y3R1cmUpOwpAQCAtMzcxMCwxNCArMzcwMywxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2Up
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNl
OworCisgICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFuY2VQcm94
eSo+KCZpbnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7CisgICAg
bV9jZG1JbnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKIAogICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFu
Y2UiLCBGQUxTRSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9j
b250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3RydWN0
dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIs
IG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRF
UiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5
IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5
Q0RNKCkuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNE
TSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNl
LT5wcm94eSgpLmdldCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRN
dXRleCk7CiAgICAgLy8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwg
ZGVtdXhlcnMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzc3
Miw1MSArMzc2OCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
UHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFF
bmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGlu
Z0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ug
b3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUg
c3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5
ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JL
ZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAoaXNXYWl0
aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRo
aXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5n
Rm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5
IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBt
X3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICghbV9waXBl
bGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFuY2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihn
c3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19l
bXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+
PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5
KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVy
eSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RB
VEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBp
cyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFu
ZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRl
Y3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJh
dG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3Iu
Z2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+
IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VM
RU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVy
eSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJL
SVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShl
bGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAg
ICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAg
ICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAg
ICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAg
ICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVz
dWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJB
Q0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29s
Rm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyYmI1NDFh
MzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLmYzMzZlNmJlOWJhZmYzNmQ0M2MyNzg3
Mzk0YjFjY2I2NTAwZTc1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNT
ZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2VuZGlmCisKIHR5cGVkZWYg
c3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1Y3Qg
X0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0
IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVudE11dGV4OwogICAgIENv
bmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVmUHRyPGNvbnN0IENETUlu
c3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVByb3h5PiBtX2Nk
bUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFjY2Vz
cyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1f
aGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NkbUluc3RhbmNlOyB9CiAg
ICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKICAgICB2b2lkIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0V2Fp
dGluZ0ZvcktleShib29sKTsKKyAgICBib29sIGJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQo
R3N0TWVzc2FnZSopOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0
aW5nRG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFh
ZTdjMGU5MzRhOS4uNjM0ZTUzMDUyNjIwMTcyMTQ4ZTUzMWNkYzQ4NjQyODk1MjU1ZGIzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdT
dHJlYW1lci5jcHAKQEAgLTM3LDEyICszNywxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZ
UFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFByb3h5Q0RNQ2xlYXJLZXk+
IHByb3h5Q0RNOwotICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworICAgIFJlZlB0cjxDRE1Q
cm94eUNsZWFyS2V5PiBwcm94eUNETTsKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmpl
Y3QqKTsKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4pOworc3RhdGljIGJvb2wgY2Rt
UHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBS
ZWZQdHI8Q0RNUHJveHk+KTsKIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZlcioga2V5aWQsIEdzdEJ1
ZmZlciogc2FtcGxlLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2Ft
cGxlcyk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NsZWFyX2tl
eV9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKQEAgLTg0LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHQKIAogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CiAg
ICAgY2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6
OnNfQ2xlYXJLZXlVVUlEOwotICAgIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2UgPSBHU1Rf
REVCVUdfRlVOQ1BUUihoYW5kbGVLZXlSZXNwb25zZSk7CisgICAgY2VuY0NsYXNzLT5jZG1Qcm94
eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2Vu
Y0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKICAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdFByaXZhdGUpKTsKQEAgLTkzLDYxICs5MiwzMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dAogc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQoV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
c2VsZik7Ci0KICAgICBzZWxmLT5wcml2ID0gcHJpdjsKICAgICBuZXcgKHByaXYpIFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3Ig
PSBnY3J5X2NpcGhlcl9vcGVuKCYocHJpdi0+aGFuZGxlKSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBH
Q1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgewotICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gY3JlYXRlIEFFUyAxMjggQ1RSIGNpcGhlciBo
YW5kbGU6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3Ip
OwotICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewog
ICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFQob2JqZWN0KTsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBzZWxmLT5wcml2OwotICAgIGdjcnlfY2lwaGVyX2Nsb3NlKHByaXYtPmhhbmRsZSk7CiAg
ICAgcHJpdi0+fldlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwogCiAgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQogCi1z
dGF0aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmLCBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKQorc3RhdGljIGJvb2wgY2Rt
UHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBS
ZWZQdHI8Q0RNUHJveHk+IHByb3h5Q0RNKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBwcml2LT5wcm94eUNETSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UHJveHlDRE1DbGVhcktleSo+KHByb3h5Q0RNLmdldCgpKTsKKyAgICBwcml2
LT5wcm94eUNETSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KHByb3h5Q0RN
LmdldCgpKTsKICAgICByZXR1cm4gcHJpdi0+cHJveHlDRE07CiB9CiAKLXN0YXRpYyBib29sIGZp
bmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25z
dCBTdHJpbmcmJiBrZXlJRCkKLXsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkgewotICAgICAg
ICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5VmFsdWUgPSBr
ZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRlcygpID09IENM
RUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlWYWx1ZS5zaXpl
SW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhl
cl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBib29sIGRl
Y3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIpCiB7Ci0g
ICAgaWYgKCFpdkJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJubyBJ
ViBidWZmZXIiKTsKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVm
ZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgp
IHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNTcsMjcg
KzEyNyw2IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFwcGVk
SVZCdWZmZXItPnNpemUoKSA9PSA4KSB7Ci0gICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsK
LSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gQ0xFQVJLRVlf
U0laRSk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIENMRUFS
S0VZX1NJWkUpOwotICAgIH0KLQotICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJ
QV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5
X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIENMRUFSS0VZX1NJWkUpOwotICAgIGlm
IChjaXBoZXJFcnJvcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJnY3J5X2Np
cGhlcl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gYnVmZmVyIHRvIGRlY3J5cHQiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGF1dG8gbWFwcGVkS2V5SWRCdWZmZXIgPSBXZWJD
b3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsK
ICAgICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBtYXAga2V5IGlkIGJ1ZmZlciIpOwpAQCAtMTkwLDcyICsxMzksMjkg
QEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGZpbmRBbmRTZXRLZXkocHJpdiwgU3RyaW5nKG1hcHBlZEtleUlkQnVmZmVyLT5kYXRh
KCksIG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCkpKTsKLQotICAgIHVuc2lnbmVkIHBvc2l0aW9u
ID0gMDsKLSAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN1YlNhbXBs
ZUNvdW50KSB7Ci0gICAgICAgIC8vIEZ1bGwgc2FtcGxlIGVuY3J5cHRpb24uCi0gICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGVuY3J5cHRpb246ICV6dSBlbmNyeXB0
ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGJ1ZmZlciBpcyBlbXB0eS4KLSAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7
Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFu
ZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVyLT5zaXplKCksIDAsIDApOwot
ICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0
cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IC8vIENoZWNrIHN1YlNhbXBsZXNCdWZmZXIgaXNuJ3QgbnVsbC4KLSAgICBpZiAoIXN1YlNhbXBs
ZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRXJyb3IsIHRoZSBz
dWJTYW1wbGVCdWZmZXIgaXMgbnVsbCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gU3Vic2FtcGxlIGVuY3J5cHRpb24uCi0gICAgYXV0byBtYXBwZWRTdWJTYW1wbGVz
QnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoc3ViU2FtcGxlc0J1ZmZl
ciwgR1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBlZFN1YlNhbXBsZXNCdWZmZXIpIHsKLSAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVm
ZmVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHVW5pcXVlUHRyPEdz
dEJ5dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNC
dWZmZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpKSk7Ci0gICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3NpdGlvbiwg
bWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVm
ZmVyLT5zaXplKCkpIHsKLSAgICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAg
IGd1aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKLQotICAgICAgICBpZiAoc2FtcGxlSW5kZXgg
PCBzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0
X3VpbnQxNl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNDbGVhcikKLSAgICAgICAgICAgICAgICB8
fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzRW5j
cnlwdGVkKSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3Vw
cG9ydGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1
ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIgKHRvZG89
JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBw
b3NpdGlvbik7Ci0gICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0NsZWFyOwotICAgICAgICBpZiAo
bkJ5dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJz
dWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBs
ZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24p
OwotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhh
bmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAw
LCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUgaW5kZXggJXUgZGVjcnlwdGlvbiBmYWls
ZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvc2l0
aW9uICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBtYXBw
ZWRTdWJTYW1wbGVzQnVmZmVyOworICAgIENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29u
dGV4dCBjdHg7CisgICAgY3R4LmtleUlEID0gbWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKTsKKyAg
ICBjdHgua2V5SUROdW1CeXRlcyA9IG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCk7CisgICAgY3R4
Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBjdHguaXZOdW1CeXRlcyA9IG1hcHBl
ZElWQnVmZmVyLT5zaXplKCk7CisgICAgY3R4LmVuY3J5cHRlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZl
ci0+ZGF0YSgpOworICAgIGN0eC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyA9IG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpOworICAgIGN0eC5udW1TdWJTYW1wbGVzID0gc3ViU2FtcGxlQ291bnQ7CisgICAg
aWYgKCFzdWJTYW1wbGVDb3VudCkKKyAgICAgICAgY3R4LnN1YlNhbXBsZXNCdWZmZXIgPSBudWxs
cHRyOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3ViU2FtcGxlc0J1ZmZlcik7CisgICAg
ICAgIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNy
ZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBpZiAoIW1hcHBl
ZFN1YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgICAgIGN0eC5zdWJTYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjdHguc3ViU2FtcGxlc0J1ZmZlck51bUJ5
dGVzID0gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBwcml2LT5wcm94eUNETS0+Q0VOQ0RlY3J5cHQoY3R4KTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCAzNjgzZDA0NzQ4NjBmNmVmODE3ZjMxY2Rj
MTVlNDhhYzE4NmMwMzQ0Li45NzMyODkxM2RmZTNmNDAxYzU2ZDM1YThkZDQxYTFjMTU1OWQ3OGYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTI1LDM0ICsyNSwzNCBAQAogCiAj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUg
IkNETVByb3h5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CiAKLXVzaW5nIFdlYkNvcmU6OlByb3h5Q0RNOwordXNpbmcgV2ViQ29y
ZTo6Q0RNUHJveHk7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBF
X01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0
ZSB7CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJvdGVjdGlvbkV2ZW50OwotICAgIFJlZlB0cjxQ
cm94eUNETT4gcHJveHlDRE07Ci0gICAgYm9vbCBrZXlSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCB3YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKLSAgICBMb2NrIG11dGV4OwotICAgIENvbmRp
dGlvbiBjb25kaXRpb247CisgICAgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eTsKKworICAgIExv
Y2sgY2RtQXR0YWNobWVudE11dGV4OworICAgIENvbmRpdGlvbiBjZG1BdHRhY2htZW50Q29uZGl0
aW9uOwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heFNlY29uZHNUb1dhaXRGb3JD
RE1Qcm94eSA9IDVfczsKKwogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRl
KEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEdPYmplY3QqKTsKIHN0YXRpYyBHc3RDYXBzKiB0cmFuc2Zvcm1DYXBzKEdzdEJhc2VU
cmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdENhcHMqLCBHc3RDYXBzKik7CiBzdGF0aWMg
R3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZm
ZXIqKTsKIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0q
LCBHc3RFdmVudCopOwotc3RhdGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNm
b3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RRdWVyeSopOwotc3RhdGljIGJvb2wgaXNDRE1JbnN0
YW5jZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CiBzdGF0
aWMgdm9pZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7CiAKLQogR1NUX0RF
QlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlw
dF9kZWJ1Z19jYXRlZ29yeSk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFf
Y29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQogCkBAIC03Niw3ICs3Niw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFDb21tb25FCiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFu
c2Zvcm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSKHRyYW5zZm9ybUNhcHMpOwogICAgIGJhc2VU
cmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7CiAgICAg
YmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIoc2lua0V2
ZW50SGFuZGxlcik7Ci0gICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19G
VU5DUFRSKHF1ZXJ5SGFuZGxlcik7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xh
c3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpOwog
fQpAQCAtMTc3LDI5ICsxNzYsMjAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5Q
bGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVChiYXNlKTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwogCi0gICAgLy8gVGhlIGtl
eSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldC4gV2FpdCBmb3IgaXQuCi0gICAgaWYg
KCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJr
ZXkgbm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcgZm9yIGl0Iik7Ci0gICAgICAgIGlmIChHU1Rf
U1RBVEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCAoR1NUX1NUQVRF
X1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyAmJiBH
U1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQpKSB7
Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJjYW4ndCBwcm9jZXNzIGtleSBy
ZXF1ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0YXRlIik7Ci0gICAgICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICAgICAgfQotICAgICAgICAvLyBTZW5kICJkcm0t
Y2RtLWluc3RhbmNlLW5lZWRlZCIgbWVzc2FnZSB0byB0aGUgcGxheWVyIHRvIHJlc2VuZCB0aGUg
Q0RNSW5zdGFuY2UgaWYgYXZhaWxhYmxlIGFuZCBpbmZvcm0gd2UgYXJlIHdhaXRpbmcgZm9yIGtl
eS4KLSAgICAgICAgcHJpdi0+d2FpdGluZ0ZvcktleSA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1l
bnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS13YWl0aW5n
LWZvci1rZXkiKSkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRN
dXRleCk7CiAKLSAgICAgICAgcHJpdi0+Y29uZGl0aW9uLndhaXRGb3IocHJpdi0+bXV0ZXgsIFNl
Y29uZHMoNSksIFtwcml2XSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJpdi0+a2V5UmVjZWl2ZWQ7
CisgICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVkcyB0byBiZSBuZWdvdGlhdGVkIGJlZm9yZSB3
ZSBjYW4gYmVnaW4gZGVjcnlwdGlvbi4KKyAgICBpZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3QgYXZhaWxhYmxlLCBnb2luZyB0byB3
YWl0IGZvciBpdCIpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRG
b3IocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4LCBNYXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHks
IFtwcml2XSB7CisgICAgICAgICAgICByZXR1cm4gIXByaXYtPmNkbVByb3h5OwogICAgICAgICB9
KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgaWYgKCFwcml2
LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiQ0RNUHJv
eHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAgICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0gICAgICAgIHByaXYtPndhaXRpbmdG
b3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVN
RU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZlZCIpKSk7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHBy
aXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJv
dGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1
ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpAQCAtMjA3LDMyICsxOTcsMzAgQEAg
c3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBi
YXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVm
ZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQorICAg
IGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZl
ciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgfSk7
CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50
KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOwotICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwogICAgIGlmICghZ3N0X3N0cnVjdHVy
ZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywgImVuY3J5cHRlZCIsICZlbmNyeXB0
ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgZW5j
cnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGlmICghaXZTaXplIHx8ICFl
bmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgaWYgKCFpdlNpemUg
fHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KIAogICAg
IEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9GT1JN
QVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50
OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywg
InN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsKLSAgICAgICAg
Z3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+
KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJh
bnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikK
ICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+
aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7Ci0gICAg
ICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1YlNhbXBsZXNCdWZmZXIgPSBnc3Rf
dmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlmICghc3ViU2FtcGxlc0J1ZmZlcikg
eworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiVGhlcmUgaXMgbm8gc3Vic2Ft
cGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBsZSBjb3VudCIpOworICAgICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAi
a2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIiKTsKLSAgICAgICAgZ3N0X2J1ZmZl
cl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rp
b25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0K
ICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUp
OwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgdmFsdWUg
PSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2Iik7CiAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjcwLDQ2ICsy
NTksNzcgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJh
bnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNl
bGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxmLCBpdkJ1ZmZl
ciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1YlNhbXBsZXNCdWZmZXIp
KSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24gZmFpbGVkIik7
Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0
PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9U
X1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
cmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3N0YXRpYyBib29sIGlzQ0RN
UHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikK
K3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIHJldHVybiBw
cml2LT5jZG1Qcm94eTsKK30KKworc3RhdGljIENETVByb3h5KiByZXF1ZXN0Q0RNUHJveHlGcm9t
R3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQorewor
ICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7CisgICAg
Q0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0
cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNo
b3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhl
biBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3Qg
bWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBp
dCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UK
KyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNvbnRleHQg
YXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2
ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMKKyAgICAvLyBz
b21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQg
d2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0
aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cworICAgIC8vIHJlcXVlc3Rz
IGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBjb25zdCBHVmFs
dWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVj
dHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1pbnN0YW5jZSIpOworICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFs
dWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChwcm94eSkgeworICAgICAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94
eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHktPnJlZkNvdW50KCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBjb250ZXh0Iik7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMg
dm9pZCBhdHRhY2hDRE1Qcm94eShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBDRE1Qcm94eSogcHJveHkpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklW
QVRFKHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyog
a2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKKworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJBdHRhY2hpbmcgQ0RNUHJveHkgJXAiLCBwcm94eSk7Cisg
ICAgcHJpdi0+Y2RtUHJveHkgPSBwcm94eTsKKyAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChz
ZWxmLCBwcml2LT5jZG1Qcm94eSk7CisgICAgcHJpdi0+Y2RtQXR0YWNobWVudENvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKK30KIAotICAgIEFTU0VSVChwcml2LT5tdXRleC5pc0xvY2tlZCgpKTsKLQot
ICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBj
b250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5UKHNl
bGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBH
U3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ug
c2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0
aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9l
cyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikgYW5z
d2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1l
c3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1bCBidXQgdGhlIHBsYXllciBzZXRzIHRo
ZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUgQ0RNSW5zdGFuY2UgYW5kIGlmIGl0IGRv
ZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9mIGFza2luZyBmb3Igb25lIGFzIGl0IGlz
Ci0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRo
aXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJlcXVlc3Qg
aW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3IgYnVzCi0g
ICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KLSAgICAgICAgaWYgKGNvbnRleHQp
IHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92
YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLWluc3Rh
bmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNETSA9IHZhbHVlID8gcmVpbnRlcnByZXRf
Y2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0g
ICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0gICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZj
b3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBwcml2LT5wcm94eUNETS0+cmVmQ291bnQo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChz
ZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIpOworc3RhdGljIGdib29sZWFuIGluc3Rh
bGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYpCit7CisgICAgaWYgKCFpc0NETVByb3h5QXZhaWxhYmxlKHNlbGYpKSB7CisgICAg
ICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOworCisgICAgICAgIENETVByb3h5KiBwcm94eSA9
IHJlcXVlc3RDRE1Qcm94eUZyb21Hc3RDb250ZXh0KHNlbGYpOworICAgICAgICBpZiAocHJveHkp
IHsKKyAgICAgICAgICAgIGF0dGFjaENETVByb3h5KHNlbGYsIHByb3h5KTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gcmV0cmlldmUgQ0RNUHJveHkgZnJvbSBjb250ZXh0Iik7
CisgICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5j
ZSBhdmFpbGFibGUgJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+cHJveHlDRE0uZ2V0KCkpKTsK
LSAgICByZXR1cm4gcHJpdi0+cHJveHlDRE07CisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRp
YyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RF
dmVudCogZXZlbnQpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOwotICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xB
U1Moc2VsZik7CiAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CiAKICAgICBzd2l0Y2ggKEdT
VF9FVkVOVF9UWVBFKGV2ZW50KSkgewpAQCAtMzE4LDIzICszMzgsMTEgQEAgc3RhdGljIGdib29s
ZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBl
dmVudCkKICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHByb3RlY3Rpb24gZXZlbnRz
IGluIHRoaXMgY2xhc3MgaW4KICAgICAgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0
YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQogICAgICAgICAvLyBwcmVmZXJyZWQgc3lz
dGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0dXJlIHByb3RlY3Rpb24KLSAgICAgICAgLy8g
ZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRoZSBtdXN0IGJl
CisgICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBz
byB0aGV5IG11c3QgYmUKICAgICAgICAgLy8gaGFuZGxlZCBpbiBoZXJlLgotICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIGlmICghaXNDRE1JbnN0YW5jZUF2
YWlsYWJsZShzZWxmKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8g
Q0RNIGluc3RhbmNlIGF2YWlsYWJsZSIpOwotICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrbGFzcy0+aGFuZGxl
S2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlDRE0pKSB7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQiKTsKLSAgICAgICAgICAgIHByaXYtPmtleVJl
Y2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsK
LSAgICAgICAgfQotCisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkhhbmRsaW5nIE9P
QiIpOworICAgICAgICByZXN1bHQgPSBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShzZWxm
KTsKICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKLSAgICAgICAgcmVzdWx0ID0gVFJV
RTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0zNDUsMTYgKzM1Myw2
IEBAIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRy
YW5zLCBHc3RFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGdi
b29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0UGFkRGlyZWN0
aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkqIHF1ZXJ5KQotewotICAgIGlmIChnc3Rfc3RydWN0dXJl
X2hhc19uYW1lKGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKHF1ZXJ5KSwgImFueS1kZWNyeXB0b3It
d2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklW
QVRFKHRyYW5zKTsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVCh0cmFucywgImFueS1kZWNyeXB0
b3Itd2FpdGluZy1mb3Ita2V5IHF1ZXJ5LCB3YWl0aW5nZm9ya2V5ICVzIiwgYm9vbEZvclByaW50
aW5nKHByaXYtPndhaXRpbmdGb3JLZXkpKTsKLSAgICAgICAgcmV0dXJuIHByaXYtPndhaXRpbmdG
b3JLZXk7Ci0gICAgfQotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MocGFyZW50
X2NsYXNzKS0+cXVlcnkodHJhbnMsIGRpcmVjdGlvbiwgcXVlcnkpOwotfQotCiBzdGF0aWMgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3Rh
dGVDaGFuZ2UgdHJhbnNpdGlvbikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KTsKQEAgLTM2
Myw3ICszNjEsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0
RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbgogICAgIHN3aXRjaCAodHJhbnNp
dGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CiAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgcHJp
di0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50Q29u
ZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKQEAgLTM4MCwxMiArMzc4LDE0IEBAIHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0
RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCogY29udGV4dCkKIHsKICAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQ
VChlbGVtZW50KTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7Cisg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOwogCiAgICAgaWYgKGdzdF9jb250
ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0taW5zdGFuY2UiKSkgewogICAg
ICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2Nv
bnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1pbnN0YW5jZSIpOwotICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIHByaXYtPnByb3h5Q0RNID0g
dmFsdWUgPyByZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2
YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2
ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+cHJveHlDRE0uZ2V0KCkpOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgICAgICBwcml2
LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVf
Z2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgp
KTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4
IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjY5OTFiNTkzZWQxMWU0
YmFlNmFjODg1MTE2YWYwMDA3NDE0MGQ3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBA
IC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NU
UkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94eS5o
PgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsNyArNTUsNyBAQCBzdHJ1Y3Qg
X1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFzZVRy
YW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5
c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOworICAgIGJvb2wg
KCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kiwg
UmVmUHRyPFdlYkNvcmU6OkNETVByb3h5Pik7CiAgICAgYm9vbCAoKmRlY3J5cHQpKFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZm
ZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlc0Nv
dW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCBiMzJiNWEwMTY4NDU1ZGVjZTk5NWQ1NmE2
YjQzNGU4ZGQ0ZmJlNjgxLi5jZTVkOGY3ZDZiZGYzOGI1OTIyMDkzMDJhNmU2ZDcxYjM2OTY2MzJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMjI2LDgg
KzIyNiw2IEBAIE9wdGlvbmFsPFN0cmluZz4gTW9ja0NETTo6c2FuaXRpemVTZXNzaW9uSWQoY29u
c3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAotUHJveHlDRE1Nb2NrOjp+UHJveHlDRE1Nb2NrKCkgPSBkZWZhdWx0OwotCiBNb2NrQ0RNSW5z
dGFuY2U6Ok1vY2tDRE1JbnN0YW5jZShXZWFrUHRyPE1vY2tDRE0+IGNkbSkKICAgICA6IG1fY2Rt
KGNkbSkKIHsKQEAgLTI5NiwxMSArMjk0LDYgQEAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4g
TW9ja0NETUluc3RhbmNlOjpjcmVhdGVTZXNzaW9uKCkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE1vY2tDRE1JbnN0YW5jZVNlc3Npb24obWFrZVdlYWtQdHIoKnRoaXMpKSk7CiB9CiAKLVJlZlB0
cjxQcm94eUNETT4gTW9ja0NETUluc3RhbmNlOjpwcm94eUNETSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQcm94eUNETU1vY2soKSk7Ci19Ci0KIE1vY2tDRE1JbnN0YW5jZVNl
c3Npb246Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb24oV2Vha1B0cjxNb2NrQ0RNSW5zdGFuY2U+JiYg
aW5zdGFuY2UpCiAgICAgOiBtX2luc3RhbmNlKFdURk1vdmUoaW5zdGFuY2UpKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCmluZGV4IGQ3ZTY2ZTYwMTZkMTAxNzgxMmVh
ZmE4YzgwYjQ3ZDQ3MjgzNTBjZDEuLjM5OTA5YjkzMDNhOTRjOTM2OGVhYTBmNjI1ZjRiNjdlNTI1
MDU5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rvcnku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKQEAgLTk5LDEx
ICs5OSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8U2hhcmVk
QnVmZmVyPj4+IG1fc2Vzc2lvbnM7CiB9OwogCi1jbGFzcyBQcm94eUNETU1vY2sgZmluYWwgOiBw
dWJsaWMgUHJveHlDRE0gewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNTW9jaygpOwot
fTsKLQogY2xhc3MgTW9ja0NETSA6IHB1YmxpYyBDRE1Qcml2YXRlLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8TW9ja0NETT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpA
QCAtMTUwLDcgKzE0NSw2IEBAIHByaXZhdGU6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0
ZW0oKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVT
ZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZp
bmFsOwogCiAgICAgV2Vha1B0cjxNb2NrQ0RNPiBtX2NkbTsKICAgICBib29sIG1fZGlzdGluY3Rp
dmVJZGVudGlmaWVyc0FsbG93ZWQgeyB0cnVlIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388665</attachid>
            <date>2020-01-24 02:17:50 -0800</date>
            <delta_ts>2020-01-25 01:36:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200124101749.patch</filename>
            <type>text/plain</type>
            <size>80970</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uMWVmMDlkNDVmYWY2NTVkNWI4NDQ0Y2U5ODkwMTQ1
YzRmN2RkMmVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wMS0yNCAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMg
YW5kCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAg
ICAgICBQcm94eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRv
IGF2b2lkIHNvbWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxp
YmVydHkgb2YgcmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFz
b24gdGhhdCBpdCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAg
ICBjb25mdXNpb24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFk
ZXIgdXRpbGl0eSBmb3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMaWNlbnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEp
OiBSZWZhY3RvcmVkIHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNTZXRDb3VudGVyVmVjdG9yKTog
SGVscGVyIG1ldGhvZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ1NldERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qg
d2lsbCBibG9jayBpZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20g
SlMuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpDRU5DRGVjcnlwdEZ1bGxT
YW1wbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNE
ZWNyeXB0U3ViU2FtcGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ0RlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xl
YXJLZXk6OmluaXRpYWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAg
ICAgIENETVByb3h5IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1l
bnRhdGlvbiBvZgorICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNv
bW1hbmQga2V5IG1hbmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAg
IHRyYWNrU2Vzc2lvbiBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVN
RQorICAgICAgICBzZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJh
Y2sgb2YgZ2VuZXJhdGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1
c2UgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJv
eHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZh
bHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBs
b29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkg
dmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAg
b3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAg
ICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpibG9j
a1dhaXRpbmdGb3JDRE1BdHRhY2htZW50KToKKyAgICAgICAgUmVmYWN0b3IgbG9naWMgb3V0IG9m
IHN5bmNNZXNzYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdh
aXRpbmctZm9yLWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQp
OgorICAgICAgICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVy
LWJhc2VkIHBvcnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQg
Y2xhc3NlcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVk
IGEgaGFuZGxlIHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBt
YW5hZ2VtZW50LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAg
ICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUg
Q0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAg
ICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJr
aXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6Cisg
ICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAo
aGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhv
ZCB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZp
bmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIFJlZmFjdG9yIGZvciBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOiBSZW1vdmUgdGhlCisgICAgICAgIHF1
ZXJ5IGhhbmRsZXIgdXNlZCBmb3Igd2FpdGluZyBmb3Iga2V5IG5vdGlmaWNhdGlvbnMsIHNpbmNl
IGl0J3MKKyAgICAgICAgYmVlbiBkZWxldGVkIG5vdy4KKyAgICAgICAgKHRyYW5zZm9ybUluUGxh
Y2UpOiBSZW1vdmUgdGhlIGJyb2tlbiB3YWl0aW5nIGZvciBrZXkgbG9naWMsIGFuZAorICAgICAg
ICBtYWtlIGNsZWFyIHdoYXQgd2UgYmxvY2sgb24gaGVyZS4gQWRkIGEgc2NvcGUgZ3VhcmQgdG8g
cmVtb3ZlCisgICAgICAgIHByb3RlY3Rpb24gbWV0YSByYXRoZXIgdGhhbiBkb2luZyBpdCBtYW51
YWxseS4KKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOiAKKyAgICAgICAgKHJlcXVlc3RD
RE1Qcm94eUZyb21Hc3RDb250ZXh0KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxh
YmxlCisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6IEJyZWFrb3V0IGZyb20gaXNDRE1JbnN0YW5j
ZUF2YWlsYWJsZQorICAgICAgICAoaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUpOiBCcmVh
a291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAgICAgKHNpbmtFdmVudEhhbmRs
ZXIpOiBSZW1vdmUgaGFuZGxlS2V5UmVzcG9uc2UsIHdlIG5vdyB3YWl0IG9uIGEKKyAgICAgICAg
cHJveHkgQ0RNIGJlaW5nIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW5zdGFsbGVkIGluIHRoZSBjb250
ZXh0CisgICAgICAgIGhhbmRsZXIuCisgICAgICAgIChjaGFuZ2VTdGF0ZSk6CisgICAgICAgIChz
ZXRDb250ZXh0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChpc0NETUluc3RhbmNl
QXZhaWxhYmxlKTogRGVsZXRlZC4gUmVmYWN0b3JlZC4gVGhpcyB3YXMgZG9pbmcKKyAgICAgICAg
dGhyZWUgdGhpbmdzIGluIG9uZSBwb29ybHkgbmFtZWQgZnVuY3Rpb24uCisgICAgICAgIChxdWVy
eUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAg
ICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NE
TUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAxLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3Qgc3BlY2lhbCBjYXNlIGZvcm1hdHRp
bmcgcm9vdCBsYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRl
eCA4NzRkNDlhZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li5lY2I5NzQ0M2EwM2E2
NDU4Mzc5ODNmZWNiZDBmOTdmZjJkMWQ2NjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlCkBAIC0xNjAsMTIgKzE2MCwxMyBAQCBlbmRpZiAoKQogCiBpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2RtcHJveHkiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdT
dHJlYW1lci5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2
YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEw
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQ
cm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0
IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGku
ZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZh
dWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFT
Y3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBA
IC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9y
YWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNl
U2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNE
TT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewog
ICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVk
Yjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjA4NzAyODQ4MjVkOGMwN2IwZGNl
NTQyN2Q0MjQ3ZWRlYWY5N2ZmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAg
LTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENsZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3
dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4
X3QgY2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhj
MCwgMHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwg
MHhmYiwgMHg0YiB9OwotY29uc3QgdW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0g
c2l6ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9
IDE2OworbmFtZXNwYWNlIHsKIAotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5
U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3Rh
dGljIGJvb2wgcmVhZFVJbnQzMihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkco
b2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZz
ZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9y
ZSYga2V5cygpIHsgcmV0dXJuIG1fa2V5czsgfQorICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zm
c2V0ICs9IHNpemVvZih2YWx1ZSk7CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVy
RGVzdHJveWVkPENsZWFyS2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlT
dG9yZSBtX2tleXM7Ci19OworICAgIHJldHVybiB0cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBD
bGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQorc3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2
X3QmIHZhbHVlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBz
X3N0YXRlOwotICAgIHJldHVybiBzX3N0YXRlOworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZz
ZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2Yo
dmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAg
IG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFy
S2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5
c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21t
b24tc3lzdGVtCitjb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAs
IDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4
M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFy
S2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVt
IHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJ
RFNpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9Owor
Cit9CiAKIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3Qg
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CkBAIC04OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPEtleT4+PiBwYXJzZUxpY2Vuc2VG
b3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5cycg
a2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVy
CiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAg
LTEwMSw3ICsxMTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBW
ZWN0b3I8UmVmPEtleT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6
OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsm
ZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtMTIwLDcgKzEzMyw3IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7
IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFs
dWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
ZGVjb2RlZEtleXMuYXBwZW5kKHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJs
ZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShrZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRL
ZXlzLmFwcGVuZChLZXk6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNh
YmxlLCBrZXlJRERhdGEsIGtleVZhbHVlRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBz
aXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5
SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5p
dERhdGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNl
Y29uZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXRE
YXRhLgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0
S2V5aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVz
KTsKICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRl
eCArPSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRl
czsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNB
cnJheSkpOwpAQCAtNDU2LDQxICs0NjksMTMzIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0
ZUNsZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAg
ICByZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1
cmluZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRl
YWwuIFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0v
LyBhbGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5n
Ci0vLyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25z
aWJpbGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJh
Y2tncm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGll
cyAoaS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWlu
LXRocmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdl
IGNhbiBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAot
Ly8gU2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQg
YWNyb3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRl
ZEtleShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVh
cktleTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0
cmluZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmlu
ZyhrZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsK
KyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8
UHJveHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBj
b25zdAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0Q291bnRlclZlY3Rvcihjb25zdCBD
RU5DRGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBh
bGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZl
Y3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNp
emUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KTsKKyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAo
aW5wdXQuaXZOdW1CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoyMDE2
IFNlY3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xhdGVk
S2V5KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRo
ZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElW
IChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAg
ICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwg
OCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleUlW
U2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKSkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0RGVjcnlwdGlvbktleShj
b25zdCBDRU5DRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vzc2Fy
eSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8vIGEg
bm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJzIGFy
ZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVzcy4K
KyAgICBWZWN0b3I8Y2hhcj4ga2V5SURWZWM7CisgICAga2V5SURWZWMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShpbi5rZXlJRE51bUJ5dGVzKTsKKyAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQs
IGluLmtleUlETnVtQnl0ZXMpOworCisgICAgVmVjdG9yPGNoYXI+IGtleURhdGE7CisgICAgaWYg
KCFnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMsIGtleURhdGEpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KG1f
Z2NyeUhhbmRsZSwga2V5RGF0YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpKSkgeworICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtl
eSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5D
RGVjcnlwdEZ1bGxTYW1wbGUoQ0VOQ0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyB1aW44
X3QqIGJ1ZmZlclRvRGVjcnlwdCwgc2l6ZV90IGJ1ZmZlck51bUJ5dGVzKTsKKyAgICBpZiAoIWlu
LmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjog
JXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzKTsKKworICAg
IGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2Ny
eUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcywg
MCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJP
UihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0U3ViU2FtcGxlZChDRU5DRGVjcnlwdENv
bnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQg
PSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNp
Z25lZCBzdWJTYW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVP
ZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcykgeworICAgICAgICB1aW50MTZf
dCBzdWJTYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3ViU2FtcGxl
TnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChzdWJTYW1wbGVJbmRleCA8IGlu
cHV0Lm51bVN1YlNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5z
dWJTYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJTYW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBs
ZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YlNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBu
dW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3ViU2FtcGxl
SW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJTYW1wbGVzQnVmZmVyLCBpbnB1dC5z
dWJTYW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YlNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBi
eXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJTYW1wbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ViU2Ft
cGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YlNhbXBsZU51bUNs
ZWFyQnl0ZXMgPSAwOworICAgICAgICAgICAgc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5
IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdl
YkNvcmUuCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBi
eXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJTYW1wbGVJbmRleCwg
c3ViU2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBl
bmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRl
T2Zmc2V0ICs9IHN1YlNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YlNhbXBs
ZU51bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2Ft
cGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNy
eXB0KSIsIHN1YlNhbXBsZUluZGV4LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQu
ZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKwor
ICAgICAgICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2Rl
Y3J5cHQobV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZm
ZXJCeXRlT2Zmc2V0LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5j
cnlwdGVkQnVmZmVyQnl0ZU9mZnNldCArPSBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xl
YXJLZXk6OkNFTkNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29udGV4dCYg
aW5wdXQpCit7CisgICAgaWYgKCFDRU5DU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIUNFTkNT
ZXREZWNyeXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGlucHV0LmlzU3ViU2FtcGxlZCgpID8gQ0VOQ0RlY3J5cHRTdWJTYW1wbGVkKGlucHV0KSA6
IENFTkNEZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktl
eTo6aW5pdGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdj
cnlfY2lwaGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJ
UEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdw
Z19zdHJlcnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hv
dWxkIG5vdCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0K
IH0KIAogQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBt
X3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAgICA6IENETUlu
c3RhbmNlUHJveHkobmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQogCkBAIC01MzUs
MzYgKzY0MCw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5U3lzdGVt
KCkgY29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktl
eTo6Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eTo6a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBr
ZXlJRERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1ib29s
IG9wZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsK
LSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SUREYXRhID09
ICprMi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xl
YXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0g
ICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAg
ICBpZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOwot
Ci0gICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5k
YXRhKCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNz
aW9uPiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
KCp0aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdT
ZXNzaW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hh
cmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTU3
Miw2ICs2NTAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1aW50MzJf
dCBzX3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAKKyAgICBt
X3Nlc3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSkKICAg
ICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKQEAgLTU3OSwxOCArNjU5LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAg
ICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0g
V1RGTW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1ZV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwgU3VjY2Vl
ZGVkKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBjb25z
dCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2Fs
bGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25NYWluVGhy
ZWFkKCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMs
ICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0
b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzY4MiwyNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVj
dChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwg
c2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNl
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2Ug
Zm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBj
dXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tl
eVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGlj
ZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0
b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJl
ZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9u
KCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCiAgICAgICAgIGJvb2wg
a2V5c0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRl
Y29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNv
ZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFz
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3Rk
OjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAg
ICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250
YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBk
ZWNvZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhN
YXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZh
bHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0g
ICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2Rl
ZEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAg
a2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBr
ZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVz
IiwgZGVjb2RlZEtleS0+aWRBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXktPnZh
bHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGtleXNDaGFuZ2VkID0g
a2V5c0NoYW5nZWQgfHwgbV9rZXlTdG9yZS5hZGQoZGVjb2RlZEtleSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6
dSBrZXlzIiwga2V5VmVjdG9yLnNpemUoKSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIHNlc3Npb24gJXMgaGFzICV1IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQu
dXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFs
PEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkg
ewotICAgICAgICAgICAgLy8gU29ydCBieSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0
KGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlT
dGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0
b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVz
PiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2Vk
S2V5cyA9IFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJv
bShtX2tleVN0b3JlKTsKKyAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252
ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hD
YWxsYmFjayhmYWxzZSwgV1RGTW92ZShjaGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2Vl
ZGVkKTsKQEAgLTY1Nyw0NyArNzEwLDI3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAg
fQogCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJv
b3QpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9u
IGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAg
ICAgICBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7
CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBh
Y2tub3dsZWRnZWQsIGNsZWFyaW5nIGFsbCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBtX3BhcmVudEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlz
cGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3Jt
YXQgd2FzIHJlY29nbml6ZWQuCisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lv
biAlcyB1cGRhdGUgcGF5bG9hZCB3YXMgYW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25J
ZC51dGY4KCkuZGF0YSgpKTsKICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklk
LCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
Ly8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3Bh
dGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBh
dXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQotICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25h
bDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhpc3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2Vzcywg
U2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRGYWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKAotICAgICAgICAgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlz
dGluZ0tleXMpLCBzdWNjZXNzLCBsb2FkRmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1
c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyBhbGwgdGhlIGtub3duIGtleXMgZm9yIHRoaXMg
c2Vzc2lvbi4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgIHsKLSAg
ICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAg
ICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0g
a2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEY6Om51bGxvcHQs
IEZhaWxlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb1Nlc3Npb25EYXRhKTsKKyAgICBBU1NFUlQo
c2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVz
VmVjdG9yID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCAma2V5U3RhdHVzVmVjdG9yXSgpIG11dGFibGUgeworICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byYga2V5VmVjdG9yID0gaXQtPnZhbHVlOwotICAgICAgICBrZXlTdGF0dXNWZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVj
a2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXku
a2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotICAgIH0KIAotICAgIGRpc3BhdGNoQ2FsbGJhY2so
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6
Tm9uZSk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25l
KTsKKyAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VT
ZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBA
IC03MTMsNyArNzQ2LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VT
ZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNz
aW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2sp
CiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxi
YWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxs
cy4KKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3Rv
ciYmIGtleVN0YXR1c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2Fn
ZSwgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
CkBAIC03MjcsMzUgKzc2MSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8g
Q29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFz
ZWQga2V5cywgYW5kIHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2Un
IGZvcm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2Vk
KCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8v
IFJldHJpZXZlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBp
ZiBub25lIGlzIGZvdW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2lu
Z2xldG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7
Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKEtleVN0YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0
cmlldmUgdGhlIEtleSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNl
c3Npb24sIGFuZAotICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3Ig
dGhpcyBzZXNzaW9uLgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVl
KTsKLSAgICAgICAga2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUg
S2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNl
ZCcgc3RhdHVzLgotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3Ip
Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxS
ZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6
OlJlbGVhc2VkIH0pOwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50
cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQog
ICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0
IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0
byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5VmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEt
PnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAg
ICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJ
RERhdGEtPmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUo
KSkpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChrZXkuaWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmlu
ZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkuaWQoKS5kYXRhKCksIGtleS5pZCgpLnNpemUoKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMi
LCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2ICs3ODIsNyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcm
IHNlc3Npb25JZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQog
CisgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhX
VEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3Vj
Y2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRl
eCA4NWIzMTliMWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li41MTMyMDk1ZDc1NTJl
YmM0MzBlMzRhYjg1NjQ5NDM2ZmYyOTlkODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgK
QEAgLTMxLDEwICszMSwxMiBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNs
dWRlICJDRE1GYWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJD
RE1JbnN0YW5jZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q0RNUHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQu
aD4KKyNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTc3LDI3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8U3Ry
aW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIH07CiAK
LWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGlj
OgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlW
YWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRl
ZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2
YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3Rh
bmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZp
bmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1J
bnN0YW5jZUNsZWFyS2V5PiB7CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwog
ICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAgIC8vIENETUluc3RhbmNl
CiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0KLQogICAgIFN1Y2Nlc3NW
YWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmln
dXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2ZUlkZW50aWZp
ZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0UGVyc2lzdGVudFN0
YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0OSArOTMsODcgQEAgcHVibGljOgogICAg
IFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwog
ICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPENE
TUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotCi0gICAgc3RydWN0IEtl
eSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwotICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAgU3RyaW5nIGtleUlEQXNTdHJpbmcoKSBj
b25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmcoKSBjb25zdDsKLQotICAgICAg
ICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5r
ZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuICprZXlWYWx1ZURhdGEgPT0gKm90aGVy
LmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR3byBrZXlzIGFyZSBlcXVh
bCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVz
LgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0
IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLQotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICEob3BlcmF0
b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPT0oazEsIGsyKSAmJiAhb3Bl
cmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShjb25zdCBL
ZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I+KGsxLCBrMik7IH0KLSAg
ICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsy
KSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICB9OwotCi0gICAgUmVmUHRyPFBy
b3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJveHlDRE07IH0KLQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1fcHJveHlDRE07CiB9OwogCiBjbGFzcyBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Np
b24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleT4gewog
cHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJL
ZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudEluc3RhbmNlKHBhcmVudCkgeyB9CiAgICAg
dm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERh
dGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikg
ZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBl
LCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIGNsb3NlU2Vzc2lv
bihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lk
IHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNz
aW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgc3RvcmVSZWNvcmRPZktleVVzYWdl
KGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7
CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsKKyAgICBLZXlTdG9y
ZSBtX2tleVN0b3JlOworfTsKKworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQg
ZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBD
RE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94
eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5
SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleShD
RE1JbnN0YW5jZUNsZWFyS2V5JiBpbnN0YW5jZSkKKyAgICAgICAgOiBtX2NkbUluc3RhbmNlKGlu
c3RhbmNlKQorICAgIHsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBkb24ndCB1c2UgdGhpcyBsaW5r
IGJhY2sgdG8gdGhlICJtYWluLXRocmVhZCBpbnN0YW5jZSIsCisgICAgICAgIC8vIGJ1dCBoYXZp
bmcgdGhlIGNvbm5lY3Rpb24gcmVhZHkgbWFkZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgdXNl
ZnVsCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAgICAgIFVOVVNFRF9QQVJBTShtX2Nk
bUluc3RhbmNlKTsKKyAgICAgICAgaW5pdGlhbGl6ZUdjcnlwdCgpOworICAgIH0KKyAgICB2aXJ0
dWFsIH5DRE1Qcm94eUNsZWFyS2V5KCk7CisKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGxhY2sg
b2YgY29uc2lzdGVuY3kgYmV0d2VlbiBTaGFyZWRCdWZmZXJzLAorICAgIC8vIFZlY3RvcjxjaGFy
PidzIGFuZCB7dWludDhfdCosc2l6ZV90fSBpZGlvbXMgZm9yIHJlcHJlc2VudGluZyBhIGNodW5r
IG9mCisgICAgLy8gYnl0ZXMuIEZpeCB0aGF0IHNvbWVob3cuIE5vdGUgU2hhcmVkQnVmZmVycyBh
cmUgZGFuZ2Vyb3VzIHNpbmNlCisgICAgLy8gdGhleSdyZSBub3QgdGhyZWFkLXNhZmUgYW5kIHRo
aXMgY2xhc3MgbXVzdCBtYWludGFpbgorICAgIC8vIHRocmVhZC1zYWZldHksIGJ1dCBtYXliZSBT
aGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50IGNvdWxkIGJlCisgICAgLy8gbWFkZSB0byB3b3JrLCBo
b3dldmVyIHRoYXQgaGFzIHplcm8gaGVscGVycyBmb3IgZHJvcHBpbmcgaW50bworICAgIC8vIGl0
ZXJhdG9yLWF3YXJlIC8gY29tcGFyYXRvci1hd2FyZSBjb250YWluZXJzLi4uCisgICAgc3RydWN0
IENFTkNEZWNyeXB0Q29udGV4dCB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleUlEOworICAg
ICAgICBzaXplX3Qga2V5SUROdW1CeXRlczsKKworICAgICAgICBjb25zdCB1aW50OF90KiBpdjsK
KyAgICAgICAgc2l6ZV90IGl2TnVtQnl0ZXM7CisKKyAgICAgICAgdWludDhfdCogZW5jcnlwdGVk
QnVmZmVyOworICAgICAgICBzaXplX3QgZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXM7CisKKyAgICAg
ICAgLy8gRklYTUU6IEdTdHJlYW1lci1zcGVjaWZpYyBkYXRhIGxheW91dC4KKyAgICAgICAgY29u
c3QgdWludDhfdCogc3ViU2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YlNhbXBsZXNC
dWZmZXJOdW1CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YlNhbXBsZXM7CisKKyAgICAgICAg
Ym9vbCBpc1N1YlNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJTYW1wbGVzOyB9CisgICAg
fTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdo
YXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQg
dGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdo
YXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgQ0VOQ0RlY3J5
cHQoQ0VOQ0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXpl
R2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGlu
IENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBz
dXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXN1c2Ugc29t
ZSBDcnlwdG8gQVBJcyBpbiBXZWJDb3JlPworICAgIGJvb2wgQ0VOQ1NldENvdW50ZXJWZWN0b3Io
Y29uc3QgQ0VOQ0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9vbCBDRU5DU2V0RGVjcnlwdGlvbktl
eShjb25zdCBDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0RnVsbFNh
bXBsZShDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0U3ViU2FtcGxl
ZChDRU5DRGVjcnlwdENvbnRleHQmKTsKKworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fY2Rt
SW5zdGFuY2U7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRo
aW5nIGluIFdlYkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5
SGFuZGxlOwogfTsKIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ0RNX0lOU1RBTkNFKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXksIFdlYkNv
cmU6OkNETUluc3RhbmNlOjpJbXBsZW1lbnRhdGlvblR5cGU6OkNsZWFyS2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5NzgzZTZj
YjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVl
IHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogICAgIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAg
IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBS
ZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsg
fQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2NjY5ZjYy
NmFmYWU4YWIxYzYzYWNjMWUzMzlkNjk0ZWQ5ZTIxOTUyLi45MTQ2YWJjNGU4YmY2YzQ1OWYwZDYx
ZjhlYjhlNjYzNTI5ZTc4ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtMTc3NCw2ICsxNzc0LDQ0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBlbGluZSkKICAgICB9
LCB0aGlzLCBudWxscHRyKTsKIH0KIAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBibG9jayB0
aGUgbWFpbiB0aHJlYWQgd2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJ
bml0RGF0YSBpbml0RGF0YTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3Rl
Y3Rpb25NdXRleCk7CisgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5
c3RlbUV2ZW50cyhtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVj
dGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1F
dmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5
c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9u
U3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtl
eVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxw
dHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwg
JmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAgaW5pdERh
dGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAgICAgICBtX2hhbmRs
ZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92
ZShpbml0RGF0YSkpOworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5n
IGZvciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsK
KyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2Rt
QXR0YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50
Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewor
ICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAg
aWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExF
Q1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODA5LDQxICsxODQ3LDggQEAgYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19z
dHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIp
KSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9S
KCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNv
bnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQt
ZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJ
bml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMg
cHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgi
Zm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBw
cm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2
ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRv
JiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVu
dF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEs
IG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5
c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50
cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5p
dERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcg
Zm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxz
ZTsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9s
ZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0g
bV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRf
cywgW3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYg
IWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlz
RW1wdHkoKSkgeworICAgICAgICBib29sIGNkbUF0dGFjaGVkID0gYmxvY2tXYWl0aW5nRm9yQ0RN
QXR0YWNobWVudChtZXNzYWdlKTsKKyAgICAgICAgaWYgKGNkbUF0dGFjaGVkICYmICFpc1BsYXll
clNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3Ry
ZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0
ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcg
d2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIs
IG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5
c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg1MSwxMCAr
MTg1NiwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01l
c3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29u
dGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0Lmdl
dCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJk
ZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1
aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VM
RU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlh
bGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HKCJ3YWl0aW5nIGZvciBhIENETSBmYWls
ZWQsIG5vIENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0yMTg0LDE5ICsyMTkwLDYgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwog
ICAgICAgICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkg
ewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmct
Zm9yLWtleSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7
Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBh
ZnRlciBiZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5
IHRoZXkgYXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRv
ZXMgbm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNo
YW5nZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNv
bWV0aGluZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIElu
IHRoZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxv
Y2tlZC4KLSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJt
LWtleS1yZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJkcm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19O
QU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAg
ICAgICB9CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFU
LCBzdHJ1Y3R1cmUpOwpAQCAtMzcxMCwxNCArMzcwMywxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2Up
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNl
OworCisgICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFuY2VQcm94
eSo+KCZpbnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7CisgICAg
bV9jZG1JbnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKIAogICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFu
Y2UiLCBGQUxTRSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9j
b250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3RydWN0
dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIs
IG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRF
UiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5
IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5
Q0RNKCkuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNE
TSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNl
LT5wcm94eSgpLmdldCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRN
dXRleCk7CiAgICAgLy8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwg
ZGVtdXhlcnMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzc3
Miw1MSArMzc2OCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
UHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFF
bmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGlu
Z0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ug
b3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUg
c3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5
ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JL
ZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAoaXNXYWl0
aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRo
aXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5n
Rm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5
IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBt
X3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICghbV9waXBl
bGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFuY2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihn
c3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19l
bXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+
PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5
KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVy
eSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RB
VEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBp
cyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFu
ZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRl
Y3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJh
dG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3Iu
Z2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+
IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VM
RU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVy
eSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJL
SVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShl
bGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAg
ICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAg
ICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAg
ICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAg
ICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVz
dWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJB
Q0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29s
Rm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyYmI1NDFh
MzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLmYzMzZlNmJlOWJhZmYzNmQ0M2MyNzg3
Mzk0YjFjY2I2NTAwZTc1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNT
ZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2VuZGlmCisKIHR5cGVkZWYg
c3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1Y3Qg
X0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0
IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVudE11dGV4OwogICAgIENv
bmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVmUHRyPGNvbnN0IENETUlu
c3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVByb3h5PiBtX2Nk
bUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFjY2Vz
cyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1f
aGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NkbUluc3RhbmNlOyB9CiAg
ICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKICAgICB2b2lkIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0V2Fp
dGluZ0ZvcktleShib29sKTsKKyAgICBib29sIGJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQo
R3N0TWVzc2FnZSopOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0
aW5nRG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFh
ZTdjMGU5MzRhOS4uNjM0ZTUzMDUyNjIwMTcyMTQ4ZTUzMWNkYzQ4NjQyODk1MjU1ZGIzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdT
dHJlYW1lci5jcHAKQEAgLTM3LDEyICszNywxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZ
UFQsIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFByb3h5Q0RNQ2xlYXJLZXk+
IHByb3h5Q0RNOwotICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworICAgIFJlZlB0cjxDRE1Q
cm94eUNsZWFyS2V5PiBwcm94eUNETTsKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmpl
Y3QqKTsKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4pOworc3RhdGljIGJvb2wgY2Rt
UHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBS
ZWZQdHI8Q0RNUHJveHk+KTsKIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZlcioga2V5aWQsIEdzdEJ1
ZmZlciogc2FtcGxlLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2Ft
cGxlcyk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NsZWFyX2tl
eV9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKQEAgLTg0LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHQKIAogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyogY2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CiAg
ICAgY2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6
OnNfQ2xlYXJLZXlVVUlEOwotICAgIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2UgPSBHU1Rf
REVCVUdfRlVOQ1BUUihoYW5kbGVLZXlSZXNwb25zZSk7CisgICAgY2VuY0NsYXNzLT5jZG1Qcm94
eUF0dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2Vu
Y0NsYXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKICAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdFByaXZhdGUpKTsKQEAgLTkzLDYxICs5MiwzMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dAogc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQoV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
c2VsZik7Ci0KICAgICBzZWxmLT5wcml2ID0gcHJpdjsKICAgICBuZXcgKHByaXYpIFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3Ig
PSBnY3J5X2NpcGhlcl9vcGVuKCYocHJpdi0+aGFuZGxlKSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBH
Q1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgewotICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gY3JlYXRlIEFFUyAxMjggQ1RSIGNpcGhlciBo
YW5kbGU6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3Ip
OwotICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewog
ICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFQob2JqZWN0KTsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBzZWxmLT5wcml2OwotICAgIGdjcnlfY2lwaGVyX2Nsb3NlKHByaXYtPmhhbmRsZSk7CiAg
ICAgcHJpdi0+fldlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwogCiAgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQogCi1z
dGF0aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmLCBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKQorc3RhdGljIGJvb2wgY2Rt
UHJveHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBS
ZWZQdHI8Q0RNUHJveHk+IHByb3h5Q0RNKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBwcml2LT5wcm94eUNETSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UHJveHlDRE1DbGVhcktleSo+KHByb3h5Q0RNLmdldCgpKTsKKyAgICBwcml2
LT5wcm94eUNETSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KHByb3h5Q0RN
LmdldCgpKTsKICAgICByZXR1cm4gcHJpdi0+cHJveHlDRE07CiB9CiAKLXN0YXRpYyBib29sIGZp
bmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25z
dCBTdHJpbmcmJiBrZXlJRCkKLXsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkgewotICAgICAg
ICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5VmFsdWUgPSBr
ZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRlcygpID09IENM
RUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlWYWx1ZS5zaXpl
SW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhl
cl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBib29sIGRl
Y3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIpCiB7Ci0g
ICAgaWYgKCFpdkJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJubyBJ
ViBidWZmZXIiKTsKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVm
ZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgp
IHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNTcsMjcg
KzEyNyw2IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFwcGVk
SVZCdWZmZXItPnNpemUoKSA9PSA4KSB7Ci0gICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsK
LSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gQ0xFQVJLRVlf
U0laRSk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIENMRUFS
S0VZX1NJWkUpOwotICAgIH0KLQotICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJ
QV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5
X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIENMRUFSS0VZX1NJWkUpOwotICAgIGlm
IChjaXBoZXJFcnJvcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJnY3J5X2Np
cGhlcl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gYnVmZmVyIHRvIGRlY3J5cHQiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGF1dG8gbWFwcGVkS2V5SWRCdWZmZXIgPSBXZWJD
b3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsK
ICAgICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBtYXAga2V5IGlkIGJ1ZmZlciIpOwpAQCAtMTkwLDcyICsxMzksMjkg
QEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGZpbmRBbmRTZXRLZXkocHJpdiwgU3RyaW5nKG1hcHBlZEtleUlkQnVmZmVyLT5kYXRh
KCksIG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCkpKTsKLQotICAgIHVuc2lnbmVkIHBvc2l0aW9u
ID0gMDsKLSAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN1YlNhbXBs
ZUNvdW50KSB7Ci0gICAgICAgIC8vIEZ1bGwgc2FtcGxlIGVuY3J5cHRpb24uCi0gICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGVuY3J5cHRpb246ICV6dSBlbmNyeXB0
ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGJ1ZmZlciBpcyBlbXB0eS4KLSAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7
Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFu
ZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVyLT5zaXplKCksIDAsIDApOwot
ICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0
cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IC8vIENoZWNrIHN1YlNhbXBsZXNCdWZmZXIgaXNuJ3QgbnVsbC4KLSAgICBpZiAoIXN1YlNhbXBs
ZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRXJyb3IsIHRoZSBz
dWJTYW1wbGVCdWZmZXIgaXMgbnVsbCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gU3Vic2FtcGxlIGVuY3J5cHRpb24uCi0gICAgYXV0byBtYXBwZWRTdWJTYW1wbGVz
QnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoc3ViU2FtcGxlc0J1ZmZl
ciwgR1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBlZFN1YlNhbXBsZXNCdWZmZXIpIHsKLSAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVm
ZmVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHVW5pcXVlUHRyPEdz
dEJ5dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNC
dWZmZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpKSk7Ci0gICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3NpdGlvbiwg
bWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVm
ZmVyLT5zaXplKCkpIHsKLSAgICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAg
IGd1aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKLQotICAgICAgICBpZiAoc2FtcGxlSW5kZXgg
PCBzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0
X3VpbnQxNl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNDbGVhcikKLSAgICAgICAgICAgICAgICB8
fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzRW5j
cnlwdGVkKSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3Vw
cG9ydGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1
ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIgKHRvZG89
JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBw
b3NpdGlvbik7Ci0gICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0NsZWFyOwotICAgICAgICBpZiAo
bkJ5dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJz
dWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBs
ZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24p
OwotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhh
bmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAw
LCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUgaW5kZXggJXUgZGVjcnlwdGlvbiBmYWls
ZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvc2l0
aW9uICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBtYXBw
ZWRTdWJTYW1wbGVzQnVmZmVyOworICAgIENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29u
dGV4dCBjdHg7CisgICAgY3R4LmtleUlEID0gbWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKTsKKyAg
ICBjdHgua2V5SUROdW1CeXRlcyA9IG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCk7CisgICAgY3R4
Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBjdHguaXZOdW1CeXRlcyA9IG1hcHBl
ZElWQnVmZmVyLT5zaXplKCk7CisgICAgY3R4LmVuY3J5cHRlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZl
ci0+ZGF0YSgpOworICAgIGN0eC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyA9IG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpOworICAgIGN0eC5udW1TdWJTYW1wbGVzID0gc3ViU2FtcGxlQ291bnQ7CisgICAg
aWYgKCFzdWJTYW1wbGVDb3VudCkKKyAgICAgICAgY3R4LnN1YlNhbXBsZXNCdWZmZXIgPSBudWxs
cHRyOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3ViU2FtcGxlc0J1ZmZlcik7CisgICAg
ICAgIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNy
ZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBpZiAoIW1hcHBl
ZFN1YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CisgICAgICAgIGN0eC5zdWJTYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjdHguc3ViU2FtcGxlc0J1ZmZlck51bUJ5
dGVzID0gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBwcml2LT5wcm94eUNETS0+Q0VOQ0RlY3J5cHQoY3R4KTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCAzNjgzZDA0NzQ4NjBmNmVmODE3ZjMxY2Rj
MTVlNDhhYzE4NmMwMzQ0Li4yNDdmMTE5NjU0MzEwOWY4NzNmZjgwMzA2Y2IyMjhiMWVjZTlhMzA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTI1LDM0ICsyNSwzNCBAQAogCiAj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUg
IkNETVByb3h5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CiAKLXVzaW5nIFdlYkNvcmU6OlByb3h5Q0RNOwordXNpbmcgV2ViQ29y
ZTo6Q0RNUHJveHk7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBF
X01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0
ZSB7CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJvdGVjdGlvbkV2ZW50OwotICAgIFJlZlB0cjxQ
cm94eUNETT4gcHJveHlDRE07Ci0gICAgYm9vbCBrZXlSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCB3YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKLSAgICBMb2NrIG11dGV4OwotICAgIENvbmRp
dGlvbiBjb25kaXRpb247CisgICAgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eTsKKworICAgIExv
Y2sgY2RtQXR0YWNobWVudE11dGV4OworICAgIENvbmRpdGlvbiBjZG1BdHRhY2htZW50Q29uZGl0
aW9uOwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heFNlY29uZHNUb1dhaXRGb3JD
RE1Qcm94eSA9IDVfczsKKwogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRl
KEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEdPYmplY3QqKTsKIHN0YXRpYyBHc3RDYXBzKiB0cmFuc2Zvcm1DYXBzKEdzdEJhc2VU
cmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdENhcHMqLCBHc3RDYXBzKik7CiBzdGF0aWMg
R3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZm
ZXIqKTsKIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0q
LCBHc3RFdmVudCopOwotc3RhdGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNm
b3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RRdWVyeSopOwotc3RhdGljIGJvb2wgaXNDRE1JbnN0
YW5jZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CiBzdGF0
aWMgdm9pZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7CiAKLQogR1NUX0RF
QlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlw
dF9kZWJ1Z19jYXRlZ29yeSk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFf
Y29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQogCkBAIC03Niw3ICs3Niw2
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFDb21tb25FCiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFu
c2Zvcm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSKHRyYW5zZm9ybUNhcHMpOwogICAgIGJhc2VU
cmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7CiAgICAg
YmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIoc2lua0V2
ZW50SGFuZGxlcik7Ci0gICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19G
VU5DUFRSKHF1ZXJ5SGFuZGxlcik7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xh
c3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpOwog
fQpAQCAtMTc3LDI5ICsxNzYsMjAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5Q
bGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVChiYXNlKTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwogCi0gICAgLy8gVGhlIGtl
eSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldC4gV2FpdCBmb3IgaXQuCi0gICAgaWYg
KCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJr
ZXkgbm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcgZm9yIGl0Iik7Ci0gICAgICAgIGlmIChHU1Rf
U1RBVEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCAoR1NUX1NUQVRF
X1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyAmJiBH
U1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQpKSB7
Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJjYW4ndCBwcm9jZXNzIGtleSBy
ZXF1ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0YXRlIik7Ci0gICAgICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICAgICAgfQotICAgICAgICAvLyBTZW5kICJkcm0t
Y2RtLWluc3RhbmNlLW5lZWRlZCIgbWVzc2FnZSB0byB0aGUgcGxheWVyIHRvIHJlc2VuZCB0aGUg
Q0RNSW5zdGFuY2UgaWYgYXZhaWxhYmxlIGFuZCBpbmZvcm0gd2UgYXJlIHdhaXRpbmcgZm9yIGtl
eS4KLSAgICAgICAgcHJpdi0+d2FpdGluZ0ZvcktleSA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1l
bnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS13YWl0aW5n
LWZvci1rZXkiKSkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRN
dXRleCk7CiAKLSAgICAgICAgcHJpdi0+Y29uZGl0aW9uLndhaXRGb3IocHJpdi0+bXV0ZXgsIFNl
Y29uZHMoNSksIFtwcml2XSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJpdi0+a2V5UmVjZWl2ZWQ7
CisgICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVkcyB0byBiZSBuZWdvdGlhdGVkIGJlZm9yZSB3
ZSBjYW4gYmVnaW4gZGVjcnlwdGlvbi4KKyAgICBpZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3QgYXZhaWxhYmxlLCBnb2luZyB0byB3
YWl0IGZvciBpdCIpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRG
b3IocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4LCBNYXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHks
IFtwcml2XSB7CisgICAgICAgICAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiAgICAgICAgIH0p
OwotICAgICAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSIpOworICAgICAgICBpZiAoIXByaXYt
PmNkbVByb3h5KSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJDRE1Qcm94
eSB3YXMgbm90IHJldHJpZXZlZCBpbiB0aW1lIik7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNl
bGYsICJrZXkgcmVjZWl2ZWQsIGNvbnRpbnVpbmciKTsKLSAgICAgICAgcHJpdi0+d2FpdGluZ0Zv
cktleSA9IGZhbHNlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1F
TlQoc2VsZiksIGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9z
dHJ1Y3R1cmVfbmV3X2VtcHR5KCJkcm0ta2V5LXJlY2VpdmVkIikpKTsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdyBhdmFpbGFibGUgd2l0aCBhZGRyZXNzICVwIiwgcHJp
di0+Y2RtUHJveHkuZ2V0KCkpOwogICAgIH0KIAogICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90
ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVm
ZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CkBAIC0yMDcsMzIgKzE5NywzMCBAQCBz
dGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJh
c2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJG
YWlsZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24gbWV0YWRhdGEgZnJvbSBidWZmZXIgJXAiLCBidWZm
ZXIpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CisgICAg
YXV0byByZW1vdmVQcm90ZWN0aW9uTWV0YU9uUmV0dXJuID0gbWFrZVNjb3BlRXhpdChbYnVmZmVy
LCBwcm90ZWN0aW9uTWV0YV0geworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICB9KTsK
IAogICAgIHVuc2lnbmVkIGl2U2l6ZTsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQo
cHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdl9zaXplIiwgJml2U2l6ZSkpIHsKICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBpdl9zaXplIik7Ci0gICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
ICAgICB9CiAKICAgICBnYm9vbGVhbiBlbmNyeXB0ZWQ7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJl
X2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRl
ZCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNy
eXB0ZWQgZmxhZyIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVp
bnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgaWYgKCFpdlNpemUgfHwgIWVu
Y3J5cHRlZCkgewotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRl
cnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICBpZiAoIWl2U2l6ZSB8
fCAhZW5jcnlwdGVkKQogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQogCiAgICAg
R1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZPUk1B
VCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOwogCiAgICAgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQ7
CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAi
c3Vic2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkgewogICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZV9jb3VudCIpOwotICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CiAgICAgfQogCkBAIC0yNDIsMTcgKzIzMCwxOSBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFu
c2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQog
ICAgICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5p
bmZvLCAic3Vic2FtcGxlcyIpOwogICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMiKTsKLSAgICAg
ICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdz
dE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05P
VF9TVVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92
YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7
CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJUaGVyZSBpcyBubyBzdWJzYW1w
bGVzIGJ1ZmZlciwgYnV0IGEgcG9zaXRpdmUgc3Vic2FtcGxlIGNvdW50Iik7CisgICAgICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJr
aWQiKTsKIAogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGdldCBrZXkgaWQgZm9yIGJ1ZmZlciIpOwotICAgICAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQog
ICAgIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7
CkBAIC0yNjAsNyArMjUwLDYgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFj
ZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICB2YWx1ZSA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXYiKTsKICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0
byBnZXQgSVYgZm9yIHNhbXBsZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1
ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCkBAIC0yNzAsNDYgKzI1
OSw3NyBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFu
c2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2Vs
ZiwgImRlY3J5cHRpbmciKTsKICAgICBpZiAoIWtsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVy
LCBrZXlJREJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikp
IHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsK
LSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOwogICAgIH0KIAotICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgIHJldHVybiBH
U1RfRkxPV19PSzsKIH0KIAotc3RhdGljIGJvb2wgaXNDRE1JbnN0YW5jZUF2YWlsYWJsZShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQorc3RhdGljIGJvb2wgaXNDRE1Q
cm94eUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQor
eworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgcmV0dXJuIHBy
aXYtPmNkbVByb3h5OworfQorCitzdGF0aWMgQ0RNUHJveHkqIHJlcXVlc3RDRE1Qcm94eUZyb21H
c3RDb250ZXh0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7Cisg
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKKyAgICBD
RE1Qcm94eSogcHJveHkgPSBudWxscHRyOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3Ry
ZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hv
dWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVu
IHNlbmQgYSBidXMKKyAgICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBt
YWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0
LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQor
ICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBh
cyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZl
IGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNv
bWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3
ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRo
ZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMg
YXJlIHVzZWZ1bCBoZXJlLgorICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1
ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0
dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLWluc3RhbmNlIik7CisgICAgICAgIGlmICh2YWx1ZSkg
eworICAgICAgICAgICAgcHJveHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1
ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5
IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByb3h5LCBwcm94eS0+cmVmQ291bnQoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5IG5vdCBhdmFpbGFibGUgaW4g
dGhlIGNvbnRleHQiKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB2
b2lkIGF0dGFjaENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYsIENETVByb3h5KiBwcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUoc2VsZik7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBr
bGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworCisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAg
ICBwcml2LT5jZG1Qcm94eSA9IHByb3h5OworICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNl
bGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5v
dGlmeU9uZSgpOworfQogCi0gICAgQVNTRVJUKHByaXYtPm11dGV4LmlzTG9ja2VkKCkpOwotCi0g
ICAgaWYgKCFwcml2LT5wcm94eUNETSkgewotICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoc2Vs
ZiksICJkcm0tY2RtLWluc3RhbmNlIikpOwotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEdT
dHJlYW1lciBkb2N1bWVudGF0aW9uLCBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBjb250ZXh0LCB3ZSBz
aG91bGQgcnVuIGEgZG93bnN0cmVhbSBxdWVyeSwgdGhlbiBhbiB1cHN0cmVhbSBvbmUgYW5kIHRo
ZW4gc2VuZCBhIGJ1cwotICAgICAgICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2Vz
IG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3
ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVz
c2FnZQotICAgICAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhl
IGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9l
cyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMK
LSAgICAgICAgLy8gc29tZXRoaW5nIHByb3ZpZGVkIGJ5IGNyb3NzcGxhdGZvcm0gY29kZS4gVGhp
cyBtZWFucyB0aGF0IHdlIHdvbid0IGJlIGFibGUgdG8gYW5zd2VyIHRoZSBidXMgcmVxdWVzdCBp
biBhbnkgd2F5IGVpdGhlci4gU3VtbWluZyB1cCwgbmVpdGhlciBxdWVyaWVzIG5vciBidXMKLSAg
ICAgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgotICAgICAgICBpZiAoY29udGV4dCkg
ewotICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3Zh
bHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSksICJjZG0taW5zdGFu
Y2UiKTsKLSAgICAgICAgICAgIHByaXYtPnByb3h5Q0RNID0gdmFsdWUgPyByZWludGVycHJldF9j
YXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKLSAg
ICAgICAgICAgIGlmIChwcml2LT5wcm94eUNETSkKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJyZWNlaXZlZCBhIG5ldyBDRE0gcHJveHkgaW5zdGFuY2UgJXAsIHJlZmNv
dW50ICV1IiwgcHJpdi0+cHJveHlDRE0uZ2V0KCksIHByaXYtPnByb3h5Q0RNLT5yZWZDb3VudCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNl
bGYsICJDRE0gaW5zdGFuY2Ugd2FzIGRldGFjaGVkIik7CitzdGF0aWMgZ2Jvb2xlYW4gaW5zdGFs
bENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikpIHsKKyAgICAg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkqIHByb3h5ID0g
cmVxdWVzdENETVByb3h5RnJvbUdzdENvbnRleHQoc2VsZik7CisgICAgICAgIGlmIChwcm94eSkg
eworICAgICAgICAgICAgYXR0YWNoQ0RNUHJveHkoc2VsZiwgcHJveHkpOworICAgICAgICAgICAg
cmVzdWx0ID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byByZXRyaWV2ZSBDRE1Qcm94eSBmcm9tIGNvbnRleHQiKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNl
IGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2LT5wcm94eUNETS5nZXQoKSkpOwot
ICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogc3RhdGlj
IGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2
ZW50KiBldmVudCkKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7Ci0gICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFT
UyhzZWxmKTsKICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NU
X0VWRU5UX1RZUEUoZXZlbnQpKSB7CkBAIC0zMTgsMjMgKzMzOCwxMSBAQCBzdGF0aWMgZ2Jvb2xl
YW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2
ZW50KQogICAgICAgICAvLyBXZSBzaG91bGQgYmUgaGFuZGxpbmcgcHJvdGVjdGlvbiBldmVudHMg
aW4gdGhpcyBjbGFzcyBpbgogICAgICAgICAvLyBhZGRpdGlvbiB0byBvdXQtb2YtYmFuZCBkYXRh
LiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCiAgICAgICAgIC8vIHByZWZlcnJlZCBzeXN0
ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgotICAgICAgICAvLyBl
dmVudHMgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVtdXhlciwgc28gdGhlIG11c3QgYmUK
KyAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNv
IHRoZXkgbXVzdCBiZQogICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZh
aWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBD
RE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtsYXNzLT5oYW5kbGVL
ZXlSZXNwb25zZShzZWxmLCBwcml2LT5wcm94eUNETSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCIpOwotICAgICAgICAgICAgcHJpdi0+a2V5UmVj
ZWl2ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOwot
ICAgICAgICB9Ci0KKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgT09C
Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYp
OwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVF
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzUzLDYg
QEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJh
bnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jv
b2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rp
b24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13
YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRv
ci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRp
bmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0Zv
cktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRf
Y2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0
ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYz
LDcgKzM2MSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0
aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2
LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25k
aXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwpAQCAtMzgwLDEyICszNzgsMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKICAgICBpZiAoZ3N0X2NvbnRl
eHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7CiAgICAg
ICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29u
dGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2
YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZh
bHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZl
ZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIHByaXYt
PmNkbVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9n
ZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+Y2RtUHJveHkuZ2V0KCkp
OworICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxmLCBwcml2LT5jZG1Qcm94eSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKaW5kZXgg
MDY1MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1ZC4uNjk5MWI1OTNlZDExZTRi
YWU2YWM4ODUxMTZhZjAwMDc0MTQwZDc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAg
LTI0LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RS
RUFNRVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2luY2x1ZGUgPENETVByb3h5Lmg+
CiAjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgogI2luY2x1ZGUgPGdzdC9n
c3QuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw3ICs1NSw3IEBAIHN0cnVjdCBf
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHsKICAgICBHc3RCYXNlVHJh
bnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lz
dGVtSWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5Q0RNPik7CisgICAgYm9vbCAo
KmNkbVByb3h5QXR0YWNoZWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBS
ZWZQdHI8V2ViQ29yZTo6Q0RNUHJveHk+KTsKICAgICBib29sICgqZGVjcnlwdCkoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZl
cioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291
bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZi
NDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCAr
MjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25z
dCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
Ci1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0
YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0o
Y2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBN
b2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRy
PFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vz
c2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBp
bnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFm
YThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUw
NTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEg
Kzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRC
dWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1
YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19
OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURp
cmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNl
c3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmlu
YWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2
ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388765</attachid>
            <date>2020-01-25 01:37:00 -0800</date>
            <delta_ts>2020-01-27 02:43:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200125093659.patch</filename>
            <type>text/plain</type>
            <size>99492</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uMWVmMDlkNDVmYWY2NTVkNWI4NDQ0Y2U5ODkwMTQ1
YzRmN2RkMmVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wMS0yNCAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMg
YW5kCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAg
ICAgICBQcm94eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRv
IGF2b2lkIHNvbWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxp
YmVydHkgb2YgcmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFz
b24gdGhhdCBpdCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAg
ICBjb25mdXNpb24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFk
ZXIgdXRpbGl0eSBmb3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMaWNlbnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEp
OiBSZWZhY3RvcmVkIHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNTZXRDb3VudGVyVmVjdG9yKTog
SGVscGVyIG1ldGhvZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ1NldERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qg
d2lsbCBibG9jayBpZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20g
SlMuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpDRU5DRGVjcnlwdEZ1bGxT
YW1wbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OkNFTkNE
ZWNyeXB0U3ViU2FtcGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Q0VOQ0RlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xl
YXJLZXk6OmluaXRpYWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAg
ICAgIENETVByb3h5IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1l
bnRhdGlvbiBvZgorICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNv
bW1hbmQga2V5IG1hbmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAg
IHRyYWNrU2Vzc2lvbiBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVN
RQorICAgICAgICBzZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJh
Y2sgb2YgZ2VuZXJhdGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1
c2UgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJv
eHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZh
bHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBs
b29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkg
dmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAg
b3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAg
ICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpibG9j
a1dhaXRpbmdGb3JDRE1BdHRhY2htZW50KToKKyAgICAgICAgUmVmYWN0b3IgbG9naWMgb3V0IG9m
IHN5bmNNZXNzYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdh
aXRpbmctZm9yLWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQp
OgorICAgICAgICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVy
LWJhc2VkIHBvcnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQg
Y2xhc3NlcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVk
IGEgaGFuZGxlIHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBt
YW5hZ2VtZW50LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAg
ICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUg
Q0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAg
ICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJr
aXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6Cisg
ICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAo
aGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhv
ZCB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZp
bmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIFJlZmFjdG9yIGZvciBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21t
b25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOiBSZW1vdmUgdGhlCisgICAgICAgIHF1
ZXJ5IGhhbmRsZXIgdXNlZCBmb3Igd2FpdGluZyBmb3Iga2V5IG5vdGlmaWNhdGlvbnMsIHNpbmNl
IGl0J3MKKyAgICAgICAgYmVlbiBkZWxldGVkIG5vdy4KKyAgICAgICAgKHRyYW5zZm9ybUluUGxh
Y2UpOiBSZW1vdmUgdGhlIGJyb2tlbiB3YWl0aW5nIGZvciBrZXkgbG9naWMsIGFuZAorICAgICAg
ICBtYWtlIGNsZWFyIHdoYXQgd2UgYmxvY2sgb24gaGVyZS4gQWRkIGEgc2NvcGUgZ3VhcmQgdG8g
cmVtb3ZlCisgICAgICAgIHByb3RlY3Rpb24gbWV0YSByYXRoZXIgdGhhbiBkb2luZyBpdCBtYW51
YWxseS4KKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOiAKKyAgICAgICAgKHJlcXVlc3RD
RE1Qcm94eUZyb21Hc3RDb250ZXh0KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxh
YmxlCisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6IEJyZWFrb3V0IGZyb20gaXNDRE1JbnN0YW5j
ZUF2YWlsYWJsZQorICAgICAgICAoaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUpOiBCcmVh
a291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAgICAgKHNpbmtFdmVudEhhbmRs
ZXIpOiBSZW1vdmUgaGFuZGxlS2V5UmVzcG9uc2UsIHdlIG5vdyB3YWl0IG9uIGEKKyAgICAgICAg
cHJveHkgQ0RNIGJlaW5nIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW5zdGFsbGVkIGluIHRoZSBjb250
ZXh0CisgICAgICAgIGhhbmRsZXIuCisgICAgICAgIChjaGFuZ2VTdGF0ZSk6CisgICAgICAgIChz
ZXRDb250ZXh0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChpc0NETUluc3RhbmNl
QXZhaWxhYmxlKTogRGVsZXRlZC4gUmVmYWN0b3JlZC4gVGhpcyB3YXMgZG9pbmcKKyAgICAgICAg
dGhyZWUgdGhpbmdzIGluIG9uZSBwb29ybHkgbmFtZWQgZnVuY3Rpb24uCisgICAgICAgIChxdWVy
eUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAg
ICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NE
TUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAxLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3Qgc3BlY2lhbCBjYXNlIGZvcm1hdHRp
bmcgcm9vdCBsYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRl
eCA4NzRkNDlhZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li5lY2I5NzQ0M2EwM2E2
NDU4Mzc5ODNmZWNiZDBmOTdmZjJkMWQ2NjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlCkBAIC0xNjAsMTIgKzE2MCwxMyBAQCBlbmRpZiAoKQogCiBpZiAoRU5BQkxF
X0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2RtcHJveHkiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdT
dHJlYW1lci5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2
YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEw
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQ
cm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0
IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGku
ZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZh
dWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFT
Y3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBA
IC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9y
YWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
ZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNl
U2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNE
TT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewog
ICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZjc3
MDMwZTFkYjY4NzVkZDRiYjYzZDlkMGM3YzUzMWNmMjc4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jZG1wcm94eS9DRE1Qcm94eS5j
cHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsK
Kworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4mIHZl
YykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChjaGFyIGJ5
dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChi
eXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisK
K1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RkOjpmaW5kX2lmKG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksIFsm
XShjb25zdCBLZXkmIGtleSkgeworICAgICAgICByZXR1cm4ga2V5ID09IGtleUlEOworICAgIH0p
ICE9IG1fa2V5cy5lbmQoKTsKK30KKwordm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3Rv
cmUmIG90aGVyKQoreworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIG1lcmdpbmcgJXUg
bmV3IGtleXMgaW50byBhIGtleSBzdG9yZSBvZiAldSBrZXlzIiwgb3RoZXIubnVtS2V5cygpLCBu
dW1LZXlzKCkpOworICAgIHN0ZDo6Y29weV9pZihvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwg
c3RkOjpiYWNrX2luc2VydGVyKG1fa2V5cyksCisgICAgICAgIFt0aGlzXShjb25zdCBLZXkmIGtl
eSkgeworICAgICAgICAgICAgcmV0dXJuIGVuZCgpID09IHN0ZDo6ZmluZChiZWdpbigpLCBlbmQo
KSwga2V5KTsKKyAgICAgICAgfSk7CisKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBr
ZXkgc3RvcmUgbm93IGhhcyAldSBrZXlzIiwgbnVtS2V5cygpKTsKKyAgICBzdGQ6OmZvcl9lYWNo
KG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCisgICAgICAgIFtdKGNvbnN0IEtleSYga2V5
KSB7CisgICAgICAgICAgICBMT0coRU1FLCAiXHRFTUUgLSBDRE1Qcm94eSAtIEtleSBJRDogJXMi
LCBrZXkuaWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSk7Cit9CisKK3Zv
aWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKK3sK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAgICAgICByZW1vdmUoa2V5KTsK
K30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFsbEtl
eXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwor
ICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAgICAgICBrZXlT
dGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkOwor
ICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZChSZWY8
S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisgICAgYXV0byBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVu
ZCgpLCBrZXkpOworCisgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlEICE9IG1fa2V5cy5lbmQo
KSkgeworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5oYXNTYW1lS2V5VmFsdWUo
a2V5KSkgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRXhpc3Rpbmcg
a2V5IHdpdGggSUQgJXMgZm91bmQgd2l0aCBkaWZmZXJlbnQgZGF0YSAlcyIsIGtleVdpdGhNYXRj
aGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleVdpdGhNYXRjaGluZ0tl
eUlELT52YWx1ZUFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgKmtleVdp
dGhNYXRjaGluZ0tleUlEID0ga2V5OworICAgICAgICAgICAgc3RvcmVDaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVmKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3IGtl
eSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBtX2tleXMucHVzaF9iYWNrKGtleSk7CisgICAg
ICAgIHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHN0b3JlQ2hhbmdl
ZDsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQoreworICAgIGJv
b2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisgICAgYXV0byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9
IHN0ZDo6ZmluZChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVuZCgpLCBrZXkpOworCisgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVkIHRvIHJlbW92ZSBrZXkgd2l0aCBJRCAl
cyBhbmQgcmVmQ291bnQgJXUiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBrZXkucmVmQ291bnQoKSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5n
S2V5SUQgIT0gbV9rZXlzLmVuZCgpKSB7CisgICAgICAgIGtleVdpdGhNYXRjaGluZ0tleUlELT5k
ZXJlZigpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5yZWZDb3VudCgpKSB7
CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZW1vdmUga2V5IHdpdGgg
SUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIG1fa2V5cy5lcmFzZShrZXlXaXRoTWF0Y2hpbmdLZXlJRCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0
ZW1wdCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMgaWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKworICAg
IHJldHVybiBzdG9yZUNoYW5nZWQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlTdG9yZTo6a2V5VmFs
dWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIG1hdGNoaW5n
S2V5ID0gc3RkOjpmaW5kX2lmKG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCisgICAgICAg
IFsmXShjb25zdCBLZXkmIGtleSkgeworICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBrZXlJRDsK
KyAgICAgICAgfSk7CisgICAgLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGUga2V5IGV4aXN0cy4K
KyAgICBSRUxFQVNFX0FTU0VSVChtYXRjaGluZ0tleSAhPSBtX2tleXMuZW5kKCkpOworICAgIHJl
dHVybiBtYXRjaGluZ0tleS0+dmFsdWUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXNWZWN0b3IgS2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QK
K3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0
b3I7CisgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygp
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICAvLyBGSVhN
RTogVmVjdG9yPGNoYXI+IHJlcHJlc2VudGF0aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUKKyAg
ICAgICAgLy8gZGF0YSBhcmUgc21hbGwgaW4gbnVtYmVyLCBzbyBwcm9iYWJseSBpdHMgZmluZS4K
KyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNo
YXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS5pZEFzU2hh
cmVkQnVmZmVyKCksIGtleS5zdGF0dXMoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0YXR1
c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3Rv
cmUmIG5ld0tleVN0b3JlKQoreworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2tleXNNdXRleCk7CisgICAgICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOwor
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSB1cGRhdGluZyBrZXkgc3RvcmUgZnJv
bSBhIHNlc3Npb24gdXBkYXRlIik7CisgICAgICAgIG1fa2V5c0NvbmRpdGlvbi5ub3RpZnlBbGwo
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJv
eHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11
dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3RvcjxjaGFyPiBDRE1Q
cm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9y
ZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUo
a2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAg
ICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAg
QVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5
KCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNoYXI+
JiBrZXlJRCwgVmVjdG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29uc3QKK3sKKyAgICBzdGFydGVk
V2FpdGluZ0ZvcktleSgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHRyeWluZyB0
byB3YWl0IGZvciBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5k
YXRhKCkpOworICAgIGJvb2wgd2FzS2V5UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICB7CisgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgICAgICB3YXNLZXlSZWNl
aXZlZCA9IG1fa2V5c0NvbmRpdGlvbi53YWl0Rm9yKG1fa2V5c011dGV4LCBDRE1Qcm94eTo6TWF4
S2V5V2FpdFRpbWVTZWNvbmRzLCBbJiwgdGhpcywga2V5SURdKCkgeworICAgICAgICAgICAgcmV0
dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94
eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5n
KGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGtleVZhbHVlT3V0ID0ga2V5VmFsdWUo
a2V5SUQpOworICAgIH0gZWxzZQorICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBr
ZXkgSUQgJXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgp
LmRhdGEoKSk7CisKKyAgICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5nIHdlIGhhdmUgc3RvcHBl
ZCB3YWl0aW5nIGZvciBhIGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMgb25seSBnZXQKKyAgICAv
LyBvbmUgc2hvdCBhdCBmZXRjaGluZyBhIGtleS4gSWYgTWF4S2V5V2FpdFRpbWVTZWNvbmRzIGV4
cGlyZXMsIHRoYXQncyBpdCwgbm8gbW9yZSBjbGVhciBieXRlcworICAgIC8vIGZvciB5b3UuCisg
ICAgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKworICAgIHJldHVybiB3YXNLZXlSZWNlaXZlZDsK
K30KKworYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlTdG9yZS5jb250YWluc0tleUlE
KGtleUlEKTsKK30KKworYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYga2V5SUQpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNN
dXRleCk7CisgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKK30KKworYm9v
bCBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5SUQsIFZl
Y3RvcjxjaGFyPiYga2V5VmFsdWVPdXQpIGNvbnN0Cit7CisgICAgaWYgKCFrZXlBdmFpbGFibGUo
a2V5SUQpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSBrZXkgY2FjaGUgZG9l
cyBub3QgY29udGFpbiBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleShrZXlJRCwga2V5VmFsdWVP
dXQpOworICAgIH0KKworICAgIGtleVZhbHVlT3V0ID0ga2V5VmFsdWUoa2V5SUQpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9y
S2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpICYmIG1fcGxheWVyKTsKKyAgICBi
b29sIHdhc1dhaXRpbmdGb3JLZXkgPSBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMDsK
KyAgICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5Kys7CisKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgd2FzV2FpdGluZ0ZvcktleV0geworICAgICAgICBpZiAo
cGxheWVyICYmIHdhc1dhaXRpbmdGb3JLZXkpCisgICAgICAgICAgICBwbGF5ZXItPndhaXRpbmdG
b3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3Rv
cHBlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9w
bGF5ZXIgJiYgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+IDApOworICAgIG1fbnVtRGVj
cnlwdG9yc1dhaXRpbmdGb3JLZXktLTsKKyAgICBib29sIG5vYm9keVdhaXRpbmdGb3JLZXkgPSAh
bV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Bs
YXllciA9IG1fcGxheWVyLCBub2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgbm9ib2R5V2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0Zv
cktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpyZXF1
ZXN0S2V5U3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBLZXlTdG9yZSYpPiYmIGNh
bGxiYWNrKQoreworICAgIC8vIE5PVEU6IFdlIGNhbiBpbW1lZGlhdGVseSByZXNvbHZlIHRoaXMg
Y2FsbGJhY2sgaW4gdGhlIGNhc2Ugb2YKKyAgICAvLyBDbGVhcktleSwgYnV0IGZvciBhIENETSBs
aWtlIFdpZGV2aW5lLCB3aGljaCBhc3luY2hyb25vdXNseQorICAgIC8vIHRlbGxzIHlvdSBhYm91
dCBrZXkgc3RhdHVzZXMsIHRoaXMgY2FsbGJhY2sgd291bGQgbmVlZCB0byBiZQorICAgIC8vIHN0
b3JlZCBzb21ld2hlcmUgYW5kIGxhdGVyIHJlc29sdmVkLgorCisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgY2FsbGJhY2sobV9rZXlTdG9yZSk7Cit9CisKK3Zv
aWQgQ0RNSW5zdGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3Rv
cmUpCit7CisgICAgLy8gRklYTUU6IE5vdGlmeSBKUyB3aGVuIGFwcHJvcHJpYXRlLgorICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIG1f
a2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIH0KKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
SW5zdGFuY2VQcm94eSAtIG1lcmdpbmcga2V5cyBpbnRvIHByb3h5IGluc3RhbmNlIGFuZCBub3Rp
ZnlpbmcgQ0RNUHJveHkgb2YgY2hhbmdlcyIpOworICAgIEFTU0VSVChtX2NkbVByb3h5KTsKKyAg
ICBtX2NkbVByb3h5LT51cGRhdGVLZXlTdG9yZShrZXlTdG9yZSk7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5U3Rv
cmUucmVtb3ZlQWxsS2V5c0Zyb20oa2V5U3RvcmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NkbXByb3h5L0NETVByb3h5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGIxODQ5MzEyMDZiNjAxMzIyZGMwMGM3OTRmNDAzYjcxYmU3YTNiYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NkbXByb3h5L0NETVByb3h5LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2Uu
aCIKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxsaXN0Pgor
I2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBLZXkgeworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1cyA9IENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzOworCisgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0ZShLZXlTdGF0dXMgc3Rh
dHVzLCBWZWN0b3I8Y2hhcj4ga2V5SUQsIFZlY3RvcjxjaGFyPiBrZXlWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBX
VEZNb3ZlKGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hh
cmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRh
KCksIG1faWQuc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPGNoYXI+IGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQorICAgIFZlY3RvcjxjaGFyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0K
KworICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJp
bmcoKSBjb25zdDsKKworICAgIHZvaWQgcmVmKCkgeyBtX3JlZmVyZW5jZXMrKzsgfQorICAgIHZv
aWQgZGVyZWYoKSB7IG1fcmVmZXJlbmNlcy0tOyB9CisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3JlZmVyZW5jZXM7IH0KKworICAgIGJvb2wgaGFzU2FtZUtleVZhbHVl
KGNvbnN0IEtleSAmb3RoZXIpIHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsgfQor
ICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9y
aW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9
CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjxj
aGFyPiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJl
dHVybiBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgS2V5KEtleVN0YXR1cyBzdGF0dXMs
IFZlY3RvcjxjaGFyPiYmIGtleUlELCBWZWN0b3I8Y2hhcj4mJiBrZXlWYWx1ZSkKKyAgICAgICAg
OiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5SUQpKSwgbV92YWx1ZShXVEZNb3Zl
KGtleVZhbHVlKSkgeyB9CisKKyAgICBLZXlTdGF0dXMgbV9zdGF0dXM7CisgICAgVmVjdG9yPGNo
YXI+IG1faWQ7CisgICAgVmVjdG9yPGNoYXI+IG1fdmFsdWU7CisgICAgdW5zaWduZWQgbV9yZWZl
cmVuY2VzIHsgMSB9OworfTsKKworY2xhc3MgS2V5U3RvcmUgeworcHVibGljOgorICAgIHVzaW5n
IEtleVN0YXR1c1ZlY3RvciA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOwor
CisgICAgS2V5U3RvcmUmIG9wZXJhdG9yPShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCisgICAgewor
ICAgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisgICAgICAgICAgICBzdGQ6OmNvcHkob3RoZXIu
bV9rZXlzLmJlZ2luKCksIG90aGVyLm1fa2V5cy5lbmQoKSwgbV9rZXlzLmJlZ2luKCkpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0
IFZlY3RvcjxjaGFyPiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3Rv
cmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBv
dGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQorICAg
IEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIGJvb2wgYWRk
KFJlZjxLZXk+Jik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgS2V5Jik7CisgICAgdW5zaWduZWQg
bnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAgICBWZWN0b3I8Y2hh
cj4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3Rh
dHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRv
IGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGNiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5cy5jYmVnaW4oKTsgfQorICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9rZXlz
LmVuZCgpOyB9CisgICAgYXV0byBlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0K
KyAgICBhdXRvIGNlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY2VuZCgpOyB9CisgICAgYXV0
byByYmVnaW4oKSB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gY3JiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5cy5jcmJlZ2luKCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJldHVy
biBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlz
LnJlbmQoKTsgfQorICAgIGF1dG8gY3JlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY3JlbmQo
KTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6bGlzdDxLZXk+IG1fa2V5czsKK307CisKK2NsYXNz
IENETUluc3RhbmNlUHJveHk7CisKKy8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0aGUg
SmF2YVNjcmlwdCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKKy8vIGZyb20gYmFja2dyb3VuZCB0
aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgorY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworCisgICAgdmlydHVhbCB+Q0RN
UHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0
b3JlJiBuZXdLZXlTdG9yZSk7CisgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8Y2hhcj4ga2V5VmFsdWUoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGtleUlEKSBjb25zdDsKKyAgICBib29sIHRyeVdhaXRGb3JLZXkoY29u
c3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwgVmVjdG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29uc3Q7
CisgICAgYm9vbCBnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwgVmVj
dG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29uc3Q7CisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zv
cktleSgpIGNvbnN0OworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OworICAgIENETUluc3Rh
bmNlUHJveHkqIG1faW5zdGFuY2U7CisKKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7Cisg
ICAgbXV0YWJsZSBDb25kaXRpb24gbV9rZXlzQ29uZGl0aW9uOworICAgIEtleVN0b3JlIG1fa2V5
U3RvcmU7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5hZ2VtZW50
IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJyZWFsIENETSIg
c3RhdGUgY2hhbmdlcyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMgQ0RN
SW5zdGFuY2UgeworcHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJveHkqIHByb3h5
KSA6IG1fY2RtUHJveHkoYWRvcHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0YW5jZSh0aGlz
KTsgfQorICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAv
LyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1haW4gdGhyZWFkIG9ubHkKKyAgICBSZWZQ
dHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1
cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JLZXkoKSBjb25z
dCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRvcnNXYWl0aW5n
Rm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsg
bV9wbGF5ZXIgPSBwbGF5ZXI7IH0KKworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRo
cmVhZC1zYWZlCisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQgc3Rv
cHBlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIG1lcmdlS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RLZXlTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEtleVN0b3JlJik+JiYgY2FsbGJhY2spOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0cmFja1Nl
c3Npb24oUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gc2Vzc2lvbikgeyBtX3Nlc3Npb25zLnB1
c2hfYmFjayhzZXNzaW9uKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxDRE1Qcm94eT4gbV9j
ZG1Qcm94eTsKKyAgICAvLyBGSVhNRTogV2Vha1B0ciBmb3IgdGhlIG1fcGxheWVyPyBUaGlzIGlz
IGFjY2Vzc2VkIGZyb20gYmFja2dyb3VuZCBhbmQgbWFpbiB0aHJlYWRzLCBpdCdzCisgICAgLy8g
Y29uY2VybmluZyB3ZSBjb3VsZCBiZSBhY2Nlc3NpbmcgaXQgaW4gdGhlIG1pZGRsZSBvZiBhIHNo
dXRkb3duIG9uIHRoZSBtYWluLXRocmVhZCwgZWg/CisgICAgLy8gQXMgYSBDRE1Qcm94eSwgd2Ug
Kioqc2hvdWxkKioqIGJlIHR1cm5lZCBvZmYgYmVmb3JlIHRoaXMgcG9pbnRlciBldmVyIGdvZXMg
YmFkLgorICAgIE1lZGlhUGxheWVyKiBtX3BsYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IE1h
aW5UaHJlYWQ8VD4/CisKKyAgICBzdGQ6OmF0b21pYzxpbnQ+IG1fbnVtRGVjcnlwdG9yc1dhaXRp
bmdGb3JLZXk7CisgICAgc3RkOjpsaXN0PFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+PiBtX3Nl
c3Npb25zOworCisgICAgLy8gRklYTUU6IFRoaXMgc2FtZSBwYXR0ZXJuIG9mIGEgcHJvdGVjdGVk
IGtleSBzdG9yZSBpcyB1c2VkIGluIHRoZSBDRE1Qcm94eSBhbmQgaW4gdGhpcyBJbnN0YW5jZS4K
KyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7CisgICAgbXV0YWJsZSBDb25kaXRpb24gbV9r
ZXlzQ29uZGl0aW9uOworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7IC8vIEZJWE1FOiBEYXRhTXV0
ZXg/Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVkYjc1
ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjA4NzAyODQ4MjVkOGMwN2IwZGNlNTQy
N2Q0MjQ3ZWRlYWY5N2ZmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM2
LDYgKzM2LDkgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIENsZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3dy53
My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4X3Qg
Y2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhjMCwg
MHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwgMHhm
YiwgMHg0YiB9OwotY29uc3QgdW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0gc2l6
ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9IDE2
OworbmFtZXNwYWNlIHsKIAotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5U3Rv
cmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+Owot
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3RhdGlj
IGJvb2wgcmVhZFVJbnQzMihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXpl
LCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zm
c2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQg
PCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9yZSYg
a2V5cygpIHsgcmV0dXJuIG1fa2V5czsgfQorICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJwcmV0
X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zmc2V0
ICs9IHNpemVvZih2YWx1ZSk7CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPENsZWFyS2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlTdG9y
ZSBtX2tleXM7Ci19OworICAgIHJldHVybiB0cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBDbGVh
cktleVN0YXRlOjpzaW5nbGV0b24oKQorc3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2X3Qm
IHZhbHVlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBzX3N0
YXRlOwotICAgIHJldHVybiBzX3N0YXRlOworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQg
PD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWludGVy
cHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9m
ZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFyS2V5
U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5c3Rl
bUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24t
c3lzdGVtCitjb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4
NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2Ms
IDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFyS2V5
Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVtIHsK
KyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJRFNp
emVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9OworCit9
CiAKIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hh
cmVkQnVmZmVyJiBidWZmZXIpCiB7CkBAIC04OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQog
ICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYg
cm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3Jt
YXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5cycga2V5
IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVyCiAg
ICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAgLTEw
MSw3ICsxMTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6
OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZhbHVl
LT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBWZWN0
b3I8UmVmPEtleT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFs
bF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVj
b2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtMTIwLDcgKzEzMyw3IEBAIHN0YXRpYyBPcHRpb25hbDxW
ZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0
IEpTT046CiAgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtl
eUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVE
YXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVj
b2RlZEtleXMuYXBwZW5kKHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwg
U2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShrZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlz
LmFwcGVuZChLZXk6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxl
LCBrZXlJRERhdGEsIGtleVZhbHVlRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAgc3Rh
dGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZy
b21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBzaXpl
LgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5SWRz
TWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5kZXgg
KyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5pdERh
dGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNlY29u
ZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXREYXRh
LgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5
aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8gImtp
ZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJh
eSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWlu
aW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleUlk
Q291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29k
ZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6
YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKTsK
ICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCAr
PSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRlczsK
ICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJh
eSkpOwpAQCAtNDU2LDQxICs0NjksMTMzIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICBy
ZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmlu
ZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwu
IFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBh
bGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0v
LyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJp
bGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tn
cm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAo
aS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRo
cmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNh
biBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8g
U2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNy
b3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtl
eShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVhcktl
eTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0cmlu
ZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmluZyhr
ZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsKKyAg
ICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8UHJv
eHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBjb25z
dAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0Q291bnRlclZlY3Rvcihjb25zdCBDRU5D
RGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBhbGwg
c2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZlY3Rv
cjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAwOwot
ICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5
cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNpemUo
KTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KTsK
KyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAoaW5w
dXQuaXZOdW1CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoyMDE2IFNl
Y3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6OnNp
bmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtl
eVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xhdGVkS2V5
KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBs
ZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElWIChi
eXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAgICAg
bWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7
CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleUlWU2l6
ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKSkgewor
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lw
aGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DU2V0RGVjcnlwdGlvbktleShjb25z
dCBDRU5DRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vzc2FyeSBj
b3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8vIGEgbm9u
LUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJzIGFyZQor
ICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVzcy4KKyAg
ICBWZWN0b3I8Y2hhcj4ga2V5SURWZWM7CisgICAga2V5SURWZWMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShpbi5rZXlJRE51bUJ5dGVzKTsKKyAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQsIGlu
LmtleUlETnVtQnl0ZXMpOworCisgICAgVmVjdG9yPGNoYXI+IGtleURhdGE7CisgICAgaWYgKCFn
ZXRPcldhaXRGb3JLZXkoa2V5SURWZWMsIGtleURhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KG1fZ2Ny
eUhhbmRsZSwga2V5RGF0YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6
ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpDRU5DRGVj
cnlwdEZ1bGxTYW1wbGUoQ0VOQ0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyB1aW44X3Qq
IGJ1ZmZlclRvRGVjcnlwdCwgc2l6ZV90IGJ1ZmZlck51bUJ5dGVzKTsKKyAgICBpZiAoIWluLmVu
Y3J5cHRlZEJ1ZmZlck51bUJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExPRyhF
TUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1
IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzKTsKKworICAgIGlm
IChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhh
bmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcywgMCwg
MCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihn
Y3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0U3ViU2FtcGxlZChDRU5DRGVjcnlwdENvbnRl
eHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAw
OworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25l
ZCBzdWJTYW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZz
ZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcykgeworICAgICAgICB1aW50MTZfdCBz
dWJTYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3ViU2FtcGxlTnVt
RW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChzdWJTYW1wbGVJbmRleCA8IGlucHV0
Lm51bVN1YlNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJT
YW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJTYW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBsZUJ1
ZmZlckJ5dGVPZmZzZXQsIHN1YlNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1i
ZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3ViU2FtcGxlSW5k
ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJTYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJT
YW1wbGVzQnVmZmVyTnVtQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YlNhbXBs
ZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRl
cyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJTYW1wbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ViU2FtcGxl
SW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YlNhbXBsZU51bUNsZWFy
Qnl0ZXMgPSAwOworICAgICAgICAgICAgc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1
dC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1l
c3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNv
cmUuCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRl
cyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJTYW1wbGVJbmRleCwgc3Vi
U2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBlbmNy
eXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zm
c2V0ICs9IHN1YlNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YlNhbXBsZU51
bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxl
IGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0
KSIsIHN1YlNhbXBsZUluZGV4LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5j
cnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAg
ICAgICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5
cHQobV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJC
eXRlT2Zmc2V0LCBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAg
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lw
aGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlw
dGVkQnVmZmVyQnl0ZU9mZnNldCArPSBzdWJTYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJL
ZXk6OkNFTkNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29udGV4dCYgaW5w
dXQpCit7CisgICAgaWYgKCFDRU5DU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIUNFTkNTZXRE
ZWNyeXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGlucHV0LmlzU3ViU2FtcGxlZCgpID8gQ0VOQ0RlY3J5cHRTdWJTYW1wbGVkKGlucHV0KSA6IENF
TkNEZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6
aW5pdGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlf
Y2lwaGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhF
Ul9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19z
dHJlcnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxk
IG5vdCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KIH0K
IAogQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3By
b3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAgICA6IENETUluc3Rh
bmNlUHJveHkobmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQogCkBAIC01MzUsMzYg
KzY0MCw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5U3lzdGVtKCkg
Y29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktleTo6
Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6
a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBrZXlJ
RERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFy
S2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1ib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKLSAg
ICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SUREYXRhID09ICpr
Mi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0gICAg
QVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAgICBp
ZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCi0gICAgICAg
IHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5kYXRh
KCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9u
PiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KCp0
aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdTZXNz
aW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5z
ZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVk
QnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTU3Miw2
ICs2NTAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5z
ZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1aW50MzJfdCBz
X3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAKKyAgICBtX3Nl
c3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSkKICAgICAg
ICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YS5nZXQo
KSk7CiAKQEAgLTU3OSwxOCArNjU5LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAg
ICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0RGF0YS5nZXQo
KSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0gV1RG
TW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1ZV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpXSgp
IG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBTdHJpbmc6
Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwgU3VjY2VlZGVk
KTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVw
ZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBjb25zdCBT
aGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykK
IHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJh
Y2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFk
KCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZj
YWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+
JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzY4MiwyNyBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNl
bnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChy
ZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vz
c2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBX
VEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9y
IHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJy
ZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0
b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5z
ZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Ig
b2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFj
dG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCiAgICAgICAgIGJvb2wga2V5
c0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29k
ZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVk
IGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpm
aW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAg
ICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWlu
ZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNv
ZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRj
aGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlX
aXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVl
KGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtl
eSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5
VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlz
Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwg
ZGVjb2RlZEtleS0+aWRBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXktPnZhbHVl
QXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGtleXNDaGFuZ2VkID0ga2V5
c0NoYW5nZWQgfHwgbV9rZXlTdG9yZS5hZGQoZGVjb2RlZEtleSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBr
ZXlzIiwga2V5VmVjdG9yLnNpemUoKSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktl
eSAtIHNlc3Npb24gJXMgaGFzICV1IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQudXRm
OCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFsPEtl
eVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewot
ICAgICAgICAgICAgLy8gU29ydCBieSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtl
eVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlTdGF0
dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3Iu
dW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7
ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2VkS2V5
cyA9IFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbSht
X2tleVN0b3JlKTsKKyAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0
VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hDYWxs
YmFjayhmYWxzZSwgV1RGTW92ZShjaGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVk
KTsKQEAgLTY1Nyw0NyArNzEwLDI3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgfQog
CiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3Qp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9uIGFu
ZCB1c2UgaXQgdG8gdmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAgICAg
ICBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7Cisg
ICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tu
b3dsZWRnZWQsIGNsZWFyaW5nIGFsbCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBtX3BhcmVudEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3Rv
cmUpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0
Y2hDYWxsYmFjayh0cnVlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3JtYXQg
d2FzIHJlY29nbml6ZWQuCisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAl
cyB1cGRhdGUgcGF5bG9hZCB3YXMgYW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25JZC51
dGY4KCkuZGF0YSgpKTsKICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQs
IFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleTo6bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBj
b25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8g
VXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNo
LCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBhdXRv
IGRpc3BhdGNoQ2FsbGJhY2sgPQotICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25hbDxL
ZXlTdGF0dXNWZWN0b3I+JiYgZXhpc3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VzcywgU2Vz
c2lvbkxvYWRGYWlsdXJlIGxvYWRGYWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKAotICAgICAgICAgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlzdGlu
Z0tleXMpLCBzdWNjZXNzLCBsb2FkRmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1Zl
Y3RvciBvYmplY3QsIHJlcHJlc2VudGluZyBhbGwgdGhlIGtub3duIGtleXMgZm9yIHRoaXMgc2Vz
c2lvbi4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgIHsKLSAgICAg
ICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAgICAg
ICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0ga2V5
cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEY6Om51bGxvcHQsIEZh
aWxlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb1Nlc3Npb25EYXRhKTsKKyAgICBBU1NFUlQoc2Vz
c2lvbklkID09IG1fc2Vzc2lvbklEKTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGNhbGxP
bk1haW5UaHJlYWQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCAma2V5U3RhdHVzVmVjdG9yXSgpIG11dGFibGUgeworICAgICAgICBp
ZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
YXV0byYga2V5VmVjdG9yID0gaXQtPnZhbHVlOwotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRv
JiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2Vk
QXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5
SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotICAgIH0KIAotICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RG
TW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9u
ZSk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNz
aW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC03
MTMsNyArNzQ2LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNz
aW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9u
SWQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7
Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNr
IGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4K
KyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlzcGF0
Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3RvciYm
IGtleVN0YXR1c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2FnZSwg
U3VjY2Vzc1ZhbHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBA
IC03MjcsMzUgKzc2MSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1v
dmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8gQ29u
c3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQg
a2V5cywgYW5kIHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZv
cm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0YXR1
c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2VkKCk7
CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8vIFJl
dHJpZXZlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBpZiBu
b25lIGlzIGZvdW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xl
dG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0g
ICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxi
YWNrKEtleVN0YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0cmll
dmUgdGhlIEtleSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Np
b24sIGFuZAotICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3IgdGhp
cyBzZXNzaW9uLgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVlKTsK
LSAgICAgICAga2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5
U3RhdHVzVmVjdG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNlZCcg
c3RhdHVzLgotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShr
ZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0g
ICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8
U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6OlJl
bGVhc2VkIH0pOwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0
aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQogICAg
ICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdl
cmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBh
cnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5
IDoga2V5VmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEtPnNp
emUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAg
ICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJRERh
dGEtPmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUoKSkp
KTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChrZXkuaWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhX
VEY6OmJhc2U2NFVSTEVuY29kZShrZXkuaWQoKS5kYXRhKCksIGtleS5pZCgpLnNpemUoKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBX
VEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2ICs3ODIsNyBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNl
c3Npb25JZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVz
c2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCisg
ICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZN
b3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vz
c1ZhbHVlOjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4
NWIzMTliMWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li41MTMyMDk1ZDc1NTJlYmM0
MzBlMzRhYjg1NjQ5NDM2ZmYyOTlkODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAg
LTMxLDEwICszMSwxMiBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNsdWRl
ICJDRE1GYWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJDRE1J
bnN0YW5jZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RN
UHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4K
KyNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTc3LDI3ICs3OSwxMyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8U3RyaW5n
PiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIH07CiAKLWNs
YXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGljOgot
ICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBz
dGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1
ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRlZmF1
bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2YXRl
OgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3RhbmNl
Q2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFs
IDogcHVibGljIENETUluc3RhbmNlUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0
YW5jZUNsZWFyS2V5PiB7CiBwdWJsaWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwogICAg
IHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAgIC8vIENETUluc3RhbmNlCiAg
ICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0KLQogICAgIFN1Y2Nlc3NWYWx1
ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJh
dGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJz
QWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0UGVyc2lzdGVudFN0YXRl
QWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0OSArOTMsODcgQEAgcHVibGljOgogICAgIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAg
IGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPENETUlu
c3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotCi0gICAgc3RydWN0IEtleSB7
Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAgU3RyaW5nIGtleUlEQXNTdHJpbmcoKSBjb25z
dDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmcoKSBjb25zdDsKLQotICAgICAgICBi
b29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5rZXlW
YWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuICprZXlWYWx1ZURhdGEgPT0gKm90aGVyLmtl
eVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBp
ZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgot
ICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAm
azIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0IGJ5
IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChj
b25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLQotICAgICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICEob3BlcmF0b3I9
PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29uc3QgS2V5ICZr
MSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPT0oazEsIGsyKSAmJiAhb3BlcmF0
b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShjb25zdCBLZXkg
JmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I+KGsxLCBrMik7IH0KLSAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7
IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICB9OwotCi0gICAgUmVmUHRyPFByb3h5
Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJveHlDRE07IH0KLQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1fcHJveHlDRE07CiB9OwogCiBjbGFzcyBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24s
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleT4gewogcHVi
bGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkm
IHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudEluc3RhbmNlKHBhcmVudCkgeyB9CiAgICAgdm9p
ZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFU
eXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmlu
YWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBj
b25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
dm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIGNsb3NlU2Vzc2lvbihj
b25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHJl
bW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9u
RGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgc3RvcmVSZWNvcmRPZktleVVzYWdlKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7Cisg
ICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsKKyAgICBLZXlTdG9yZSBt
X2tleVN0b3JlOworfTsKKworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVj
b2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0g
bW9kdWxlLgorY2xhc3MgQ0RNUHJveHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwg
cHVibGljIENhbk1ha2VXZWFrUHRyPENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5p
dGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleShDRE1J
bnN0YW5jZUNsZWFyS2V5JiBpbnN0YW5jZSkKKyAgICAgICAgOiBtX2NkbUluc3RhbmNlKGluc3Rh
bmNlKQorICAgIHsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBkb24ndCB1c2UgdGhpcyBsaW5rIGJh
Y2sgdG8gdGhlICJtYWluLXRocmVhZCBpbnN0YW5jZSIsCisgICAgICAgIC8vIGJ1dCBoYXZpbmcg
dGhlIGNvbm5lY3Rpb24gcmVhZHkgbWFkZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgdXNlZnVs
CisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAgICAgIFVOVVNFRF9QQVJBTShtX2NkbUlu
c3RhbmNlKTsKKyAgICAgICAgaW5pdGlhbGl6ZUdjcnlwdCgpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5DRE1Qcm94eUNsZWFyS2V5KCk7CisKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGxhY2sgb2Yg
Y29uc2lzdGVuY3kgYmV0d2VlbiBTaGFyZWRCdWZmZXJzLAorICAgIC8vIFZlY3RvcjxjaGFyPidz
IGFuZCB7dWludDhfdCosc2l6ZV90fSBpZGlvbXMgZm9yIHJlcHJlc2VudGluZyBhIGNodW5rIG9m
CisgICAgLy8gYnl0ZXMuIEZpeCB0aGF0IHNvbWVob3cuIE5vdGUgU2hhcmVkQnVmZmVycyBhcmUg
ZGFuZ2Vyb3VzIHNpbmNlCisgICAgLy8gdGhleSdyZSBub3QgdGhyZWFkLXNhZmUgYW5kIHRoaXMg
Y2xhc3MgbXVzdCBtYWludGFpbgorICAgIC8vIHRocmVhZC1zYWZldHksIGJ1dCBtYXliZSBTaGFy
ZWRCdWZmZXI6OkRhdGFTZWdtZW50IGNvdWxkIGJlCisgICAgLy8gbWFkZSB0byB3b3JrLCBob3dl
dmVyIHRoYXQgaGFzIHplcm8gaGVscGVycyBmb3IgZHJvcHBpbmcgaW50bworICAgIC8vIGl0ZXJh
dG9yLWF3YXJlIC8gY29tcGFyYXRvci1hd2FyZSBjb250YWluZXJzLi4uCisgICAgc3RydWN0IENF
TkNEZWNyeXB0Q29udGV4dCB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleUlEOworICAgICAg
ICBzaXplX3Qga2V5SUROdW1CeXRlczsKKworICAgICAgICBjb25zdCB1aW50OF90KiBpdjsKKyAg
ICAgICAgc2l6ZV90IGl2TnVtQnl0ZXM7CisKKyAgICAgICAgdWludDhfdCogZW5jcnlwdGVkQnVm
ZmVyOworICAgICAgICBzaXplX3QgZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXM7CisKKyAgICAgICAg
Ly8gRklYTUU6IEdTdHJlYW1lci1zcGVjaWZpYyBkYXRhIGxheW91dC4KKyAgICAgICAgY29uc3Qg
dWludDhfdCogc3ViU2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YlNhbXBsZXNCdWZm
ZXJOdW1CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YlNhbXBsZXM7CisKKyAgICAgICAgYm9v
bCBpc1N1YlNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJTYW1wbGVzOyB9CisgICAgfTsK
KworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdoYXQg
YWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQgdGhl
IGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRl
dmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgQ0VOQ0RlY3J5cHQo
Q0VOQ0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplR2Ny
eXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENU
UiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBw
b3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXN1c2Ugc29tZSBD
cnlwdG8gQVBJcyBpbiBXZWJDb3JlPworICAgIGJvb2wgQ0VOQ1NldENvdW50ZXJWZWN0b3IoY29u
c3QgQ0VOQ0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9vbCBDRU5DU2V0RGVjcnlwdGlvbktleShj
b25zdCBDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0RnVsbFNhbXBs
ZShDRU5DRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIENFTkNEZWNyeXB0U3ViU2FtcGxlZChD
RU5DRGVjcnlwdENvbnRleHQmKTsKKworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fY2RtSW5z
dGFuY2U7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRoaW5n
IGluIFdlYkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5SGFu
ZGxlOwogfTsKIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ0RNX0lOU1RBTkNFKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXksIFdlYkNvcmU6
OkNETUluc3RhbmNlOjpJbXBsZW1lbnRhdGlvblR5cGU6OkNsZWFyS2V5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5NzgzZTZjYjYu
LmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVlIHNl
dFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogICAgIFN1Y2Nl
c3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQ
dHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQog
CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2NjY5ZjYyNmFm
YWU4YWIxYzYzYWNjMWUzMzlkNjk0ZWQ5ZTIxOTUyLi45MTQ2YWJjNGU4YmY2YzQ1OWYwZDYxZjhl
YjhlNjYzNTI5ZTc4ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApAQCAtMTc3NCw2ICsxNzc0LDQ0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBlbGluZSkKICAgICB9LCB0
aGlzLCBudWxscHRyKTsKIH0KIAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJs
b2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBibG9jayB0aGUg
bWFpbiB0aHJlYWQgd2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJbml0
RGF0YSBpbml0RGF0YTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3RlY3Rp
b25NdXRleCk7CisgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3Rl
bUV2ZW50cyhtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVjdGlv
biBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3Rl
bXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lz
dGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5
c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7
CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2
ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAgaW5pdERhdGEu
YXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAgICAgICBtX2hhbmRsZWRQ
cm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShp
bml0RGF0YSkpOworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZv
ciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKKyAg
ICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0
YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29u
ZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgeworICAg
ICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgaWYg
KEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJ
T04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODA5LDQxICsxODQ3LDggQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19zdHJj
bXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7
Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJj
YW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRl
eHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVj
cnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0
RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1f
cHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJv
dGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91
bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90
ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50
cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBl
dmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9w
YXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51
bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3Rl
bUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5h
ZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERh
dGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9y
IGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsK
LSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExv
Y2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9j
ZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywg
W3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYgIWlz
UGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1w
dHkoKSkgeworICAgICAgICBib29sIGNkbUF0dGFjaGVkID0gYmxvY2tXYWl0aW5nRm9yQ0RNQXR0
YWNobWVudChtZXNzYWdlKTsKKyAgICAgICAgaWYgKGNkbUF0dGFjaGVkICYmICFpc1BsYXllclNo
dXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFt
ZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0o
KSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0
aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1f
Y2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3Rl
bVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg1MSwxMCArMTg1
NiwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3Nh
Z2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4
dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgp
KTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNy
eXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQs
IG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1F
TlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6
ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HKCJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQs
IG5vIENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0yMTg0LDE5ICsyMTkwLDYgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSog
bWVzc2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAg
ICAgICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rf
c3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewot
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9y
LWtleSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0g
ICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6
IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRl
ciBiZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRo
ZXkgYXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMg
bm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5n
ZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0
aGluZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRo
ZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tl
ZC4KLSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAg
ICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtl
eS1yZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJkcm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1F
KG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAg
ICB9CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1
Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBz
dHJ1Y3R1cmUpOwpAQCAtMzcxMCwxNCArMzcwMywxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOwor
CisgICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFuY2VQcm94eSo+
KCZpbnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7CisgICAgbV9j
ZG1JbnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKIAogICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2Ui
LCBGQUxTRSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250
ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJl
X3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIsIG1f
Y2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwg
bV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkp
OwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGlu
c3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RN
KCkuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNETSBw
cm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLT5w
cm94eSgpLmdldCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRNdXRl
eCk7CiAgICAgLy8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwgZGVt
dXhlcnMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzc3Miw1
MSArMzc2OCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJv
dGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNv
dW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGluZ0Zv
cktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3Ig
aWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3Rp
bGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5ICVz
LCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JLZXkp
LCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAoaXNXYWl0aW5n
Rm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRoaXMt
PndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5nRm9y
S2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5IGNo
YW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBtX3Bs
YXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICghbV9waXBlbGlu
ZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFuY2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3Rf
cXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0
eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+PSBH
U1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1f
cGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVyeSBy
ZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVf
UkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBl
YXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBy
dW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5
cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9y
KGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsKLSAg
ICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0
KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+IGdi
b29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1F
TlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVyeSog
cXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJLSVRf
SVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShlbGVt
ZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0gICAg
ICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAg
ICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAgICAg
fSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAgICAg
IGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAgICBH
U1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVzdWx0
ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJBQ0Uo
Iml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29sRm9y
UHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyYmI1NDFhMzI2
YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLmYzMzZlNmJlOWJhZmYzNmQ0M2MyNzg3Mzk0
YjFjY2I2NTAwZTc1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0
aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2VuZGlmCisKIHR5cGVkZWYgc3Ry
dWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1Y3QgX0dz
dFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdz
dEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVudE11dGV4OwogICAgIENvbmRp
dGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVmUHRyPGNvbnN0IENETUluc3Rh
bmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVByb3h5PiBtX2NkbUlu
c3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFjY2VzcyB0
byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1faGFu
ZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NkbUluc3RhbmNlOyB9CiAgICAg
dm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKICAgICB2b2lkIGluaXRp
YWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0V2FpdGlu
Z0ZvcktleShib29sKTsKKyAgICBib29sIGJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQoR3N0
TWVzc2FnZSopOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0aW5n
RG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5
cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFhZTdj
MGU5MzRhOS4uNjM0ZTUzMDUyNjIwMTcyMTQ4ZTUzMWNkYzQ4NjQyODk1MjU1ZGIzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lci5jcHAKQEAgLTM3LDEyICszNywxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
I2RlZmluZSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQs
IFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFByb3h5Q0RNQ2xlYXJLZXk+IHBy
b3h5Q0RNOwotICAgIGdjcnlfY2lwaGVyX2hkX3QgaGFuZGxlOworICAgIFJlZlB0cjxDRE1Qcm94
eUNsZWFyS2V5PiBwcm94eUNETTsKIH07CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3Qq
KTsKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4pOworc3RhdGljIGJvb2wgY2RtUHJv
eHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQ
dHI8Q0RNUHJveHk+KTsKIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXYsIEdzdEJ1ZmZlcioga2V5aWQsIEdzdEJ1ZmZl
ciogc2FtcGxlLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxl
cyk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NsZWFyX2tleV9k
ZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKQEAgLTg0LDcgKzgzLDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHQKIAogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyog
Y2VuY0NsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9DTEFTUyhrbGFzcyk7CiAgICAg
Y2VuY0NsYXNzLT5wcm90ZWN0aW9uU3lzdGVtSWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OnNf
Q2xlYXJLZXlVVUlEOwotICAgIGNlbmNDbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2UgPSBHU1RfREVC
VUdfRlVOQ1BUUihoYW5kbGVLZXlSZXNwb25zZSk7CisgICAgY2VuY0NsYXNzLT5jZG1Qcm94eUF0
dGFjaGVkID0gR1NUX0RFQlVHX0ZVTkNQVFIoY2RtUHJveHlBdHRhY2hlZCk7CiAgICAgY2VuY0Ns
YXNzLT5kZWNyeXB0ID0gR1NUX0RFQlVHX0ZVTkNQVFIoZGVjcnlwdCk7CiAKICAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUpKTsKQEAgLTkzLDYxICs5MiwzMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAog
c3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7Ci0KICAgICBzZWxmLT5wcml2ID0gcHJpdjsKICAgICBuZXcgKHByaXYpIFdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9vcGVuKCYocHJpdi0+aGFuZGxlKSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZ
X0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gY3JlYXRlIEFFUyAxMjggQ1RSIGNpcGhlciBoYW5k
bGU6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3IpOwot
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewogICAg
IFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZ
UFQob2JqZWN0KTsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBzZWxmLT5wcml2OwotICAgIGdjcnlfY2lwaGVyX2Nsb3NlKHByaXYtPmhhbmRsZSk7CiAgICAg
cHJpdi0+fldlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSgpOwogCiAgICAgR1NUX0NB
TExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQogCi1zdGF0
aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmLCBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKQorc3RhdGljIGJvb2wgY2RtUHJv
eHlBdHRhY2hlZChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQ
dHI8Q0RNUHJveHk+IHByb3h5Q0RNKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBwcml2LT5wcm94eUNETSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UHJveHlDRE1DbGVhcktleSo+KHByb3h5Q0RNLmdldCgpKTsKKyAgICBwcml2LT5w
cm94eUNETSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KHByb3h5Q0RNLmdl
dCgpKTsKICAgICByZXR1cm4gcHJpdi0+cHJveHlDRE07CiB9CiAKLXN0YXRpYyBib29sIGZpbmRB
bmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBT
dHJpbmcmJiBrZXlJRCkKLXsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkgewotICAgICAgICBp
ZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5VmFsdWUgPSBrZXku
a2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJp
diwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRlcygpID09IENMRUFS
S0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRr
ZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlWYWx1ZS5zaXplSW5C
eXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhlcl9z
ZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBib29sIGRlY3J5
cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBp
dkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2ln
bmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIpCiB7Ci0gICAg
aWYgKCFpdkJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJubyBJViBi
dWZmZXIiKTsKKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQ
VChzZWxmKSk7CisKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVmZmVy
KSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImludmFsaWQgZGVjcnlwdCgpIHBh
cmFtZXRlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNTcsMjcgKzEy
Nyw2IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFwcGVkSVZC
dWZmZXItPnNpemUoKSA9PSA4KSB7Ci0gICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAg
ICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gQ0xFQVJLRVlfU0la
RSk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIENMRUFSS0VZ
X1NJWkUpOwotICAgIH0KLQotICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9D
S19ERUNSWVBUKHNlbGYpKTsKLSAgICBnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2Np
cGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChj
aXBoZXJFcnJvcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJnY3J5X2NpcGhl
cl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiTm8gYnVmZmVyIHRvIGRlY3J5cHQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGF1dG8gbWFwcGVkS2V5SWRCdWZmZXIgPSBXZWJDb3Jl
OjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAg
ICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBtYXAga2V5IGlkIGJ1ZmZlciIpOwpAQCAtMTkwLDcyICsxMzksMjkgQEAg
c3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGZpbmRBbmRTZXRLZXkocHJpdiwgU3RyaW5nKG1hcHBlZEtleUlkQnVmZmVyLT5kYXRhKCks
IG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCkpKTsKLQotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
MDsKLSAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9IDA7Ci0KLSAgICBpZiAoIXN1YlNhbXBsZUNv
dW50KSB7Ci0gICAgICAgIC8vIEZ1bGwgc2FtcGxlIGVuY3J5cHRpb24uCi0gICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQg
Ynl0ZXMiLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhl
IGJ1ZmZlciBpcyBlbXB0eS4KLSAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0g
ICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxl
LCBtYXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVyLT5zaXplKCksIDAsIDApOwotICAg
ICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVy
cm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IENoZWNrIHN1YlNhbXBsZXNCdWZmZXIgaXNuJ3QgbnVsbC4KLSAgICBpZiAoIXN1YlNhbXBsZXNC
dWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRXJyb3IsIHRoZSBzdWJT
YW1wbGVCdWZmZXIgaXMgbnVsbCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gU3Vic2FtcGxlIGVuY3J5cHRpb24uCi0gICAgYXV0byBtYXBwZWRTdWJTYW1wbGVzQnVm
ZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoc3ViU2FtcGxlc0J1ZmZlciwg
R1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBlZFN1YlNhbXBsZXNCdWZmZXIpIHsKLSAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVy
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHVW5pcXVlUHRyPEdzdEJ5
dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNCdWZm
ZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpKSk7Ci0gICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3NpdGlvbiwgbWFw
cGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVmZmVy
LT5zaXplKCkpIHsKLSAgICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgIGd1
aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKLQotICAgICAgICBpZiAoc2FtcGxlSW5kZXggPCBz
dWJTYW1wbGVDb3VudCkgewotICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3Vp
bnQxNl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNDbGVhcikKLSAgICAgICAgICAgICAgICB8fCAh
Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzRW5jcnlw
dGVkKSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInVuc3VwcG9y
dGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgc2FtcGxlSW5kZXgrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5C
eXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpIC0gcG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIgKHRvZG89JXp1
KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3Np
dGlvbik7Ci0gICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0NsZWFyOwotICAgICAgICBpZiAobkJ5
dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJz
YW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBsZUlu
ZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwot
ICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRs
ZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAwLCAw
KTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUgaW5kZXggJXUgZGVjcnlwdGlvbiBmYWlsZWQ6
ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvc2l0aW9u
ICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBtYXBwZWRT
dWJTYW1wbGVzQnVmZmVyOworICAgIENETVByb3h5Q2xlYXJLZXk6OkNFTkNEZWNyeXB0Q29udGV4
dCBjdHg7CisgICAgY3R4LmtleUlEID0gbWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKTsKKyAgICBj
dHgua2V5SUROdW1CeXRlcyA9IG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCk7CisgICAgY3R4Lml2
ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBjdHguaXZOdW1CeXRlcyA9IG1hcHBlZElW
QnVmZmVyLT5zaXplKCk7CisgICAgY3R4LmVuY3J5cHRlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZlci0+
ZGF0YSgpOworICAgIGN0eC5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+
c2l6ZSgpOworICAgIGN0eC5udW1TdWJTYW1wbGVzID0gc3ViU2FtcGxlQ291bnQ7CisgICAgaWYg
KCFzdWJTYW1wbGVDb3VudCkKKyAgICAgICAgY3R4LnN1YlNhbXBsZXNCdWZmZXIgPSBudWxscHRy
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3ViU2FtcGxlc0J1ZmZlcik7CisgICAgICAg
IG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBpZiAoIW1hcHBlZFN1
YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZh
aWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIGN0eC5zdWJTYW1wbGVzQnVmZmVyID0gbWFwcGVkU3ViU2Ft
cGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjdHguc3ViU2FtcGxlc0J1ZmZlck51bUJ5dGVz
ID0gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBwcml2LT5wcm94eUNETS0+Q0VOQ0RlY3J5cHQoY3R4KTsKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCAzNjgzZDA0NzQ4NjBmNmVmODE3ZjMxY2RjMTVl
NDhhYzE4NmMwMzQ0Li4yNDdmMTE5NjU0MzEwOWY4NzNmZjgwMzA2Y2IyMjhiMWVjZTlhMzA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTI1LDM0ICsyNSwzNCBAQAogCiAjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUgIkNE
TVByb3h5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8
d3RmL1Njb3BlLmg+CiAKLXVzaW5nIFdlYkNvcmU6OlByb3h5Q0RNOwordXNpbmcgV2ViQ29yZTo6
Q0RNUHJveHk7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFU
RShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01F
RElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZh
dGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSB7
CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJvdGVjdGlvbkV2ZW50OwotICAgIFJlZlB0cjxQcm94
eUNETT4gcHJveHlDRE07Ci0gICAgYm9vbCBrZXlSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAgYm9v
bCB3YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKLSAgICBMb2NrIG11dGV4OwotICAgIENvbmRpdGlv
biBjb25kaXRpb247CisgICAgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eTsKKworICAgIExvY2sg
Y2RtQXR0YWNobWVudE11dGV4OworICAgIENvbmRpdGlvbiBjZG1BdHRhY2htZW50Q29uZGl0aW9u
OwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heFNlY29uZHNUb1dhaXRGb3JDRE1Q
cm94eSA9IDVfczsKKwogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdz
dEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKIHN0YXRpYyB2b2lkIGZpbmFs
aXplKEdPYmplY3QqKTsKIHN0YXRpYyBHc3RDYXBzKiB0cmFuc2Zvcm1DYXBzKEdzdEJhc2VUcmFu
c2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdENhcHMqLCBHc3RDYXBzKik7CiBzdGF0aWMgR3N0
Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZmZXIq
KTsKIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBH
c3RFdmVudCopOwotc3RhdGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3Jt
KiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RRdWVyeSopOwotc3RhdGljIGJvb2wgaXNDRE1JbnN0YW5j
ZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kik7CiBzdGF0aWMg
dm9pZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7CiAKLQogR1NUX0RFQlVH
X0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9k
ZWJ1Z19jYXRlZ29yeSk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY29t
bW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQogCkBAIC03Niw3ICs3Niw2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNz
X2luaXQoV2ViS2l0TWVkaWFDb21tb25FCiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zv
cm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSKHRyYW5zZm9ybUNhcHMpOwogICAgIGJhc2VUcmFu
c2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7CiAgICAgYmFz
ZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIoc2lua0V2ZW50
SGFuZGxlcik7Ci0gICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5D
UFRSKHF1ZXJ5SGFuZGxlcik7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3Ms
IHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpOwogfQpA
QCAtMTc3LDI5ICsxNzYsMjAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFj
ZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVChiYXNlKTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwogCi0gICAgLy8gVGhlIGtleSBt
aWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldC4gV2FpdCBmb3IgaXQuCi0gICAgaWYgKCFw
cml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkg
bm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcgZm9yIGl0Iik7Ci0gICAgICAgIGlmIChHU1RfU1RB
VEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCAoR1NUX1NUQVRFX1RB
UkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyAmJiBHU1Rf
U1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQpKSB7Ci0g
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJjYW4ndCBwcm9jZXNzIGtleSByZXF1
ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0YXRlIik7Ci0gICAgICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICAgICAgfQotICAgICAgICAvLyBTZW5kICJkcm0tY2Rt
LWluc3RhbmNlLW5lZWRlZCIgbWVzc2FnZSB0byB0aGUgcGxheWVyIHRvIHJlc2VuZCB0aGUgQ0RN
SW5zdGFuY2UgaWYgYXZhaWxhYmxlIGFuZCBpbmZvcm0gd2UgYXJlIHdhaXRpbmcgZm9yIGtleS4K
LSAgICAgICAgcHJpdi0+d2FpdGluZ0ZvcktleSA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVtZW50
X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQo
R1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS13YWl0aW5nLWZv
ci1rZXkiKSkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRl
eCk7CiAKLSAgICAgICAgcHJpdi0+Y29uZGl0aW9uLndhaXRGb3IocHJpdi0+bXV0ZXgsIFNlY29u
ZHMoNSksIFtwcml2XSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJpdi0+a2V5UmVjZWl2ZWQ7Cisg
ICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVkcyB0byBiZSBuZWdvdGlhdGVkIGJlZm9yZSB3ZSBj
YW4gYmVnaW4gZGVjcnlwdGlvbi4KKyAgICBpZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3QgYXZhaWxhYmxlLCBnb2luZyB0byB3YWl0
IGZvciBpdCIpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3Io
cHJpdi0+Y2RtQXR0YWNobWVudE11dGV4LCBNYXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHksIFtw
cml2XSB7CisgICAgICAgICAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiAgICAgICAgIH0pOwot
ICAgICAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSIpOworICAgICAgICBpZiAoIXByaXYtPmNk
bVByb3h5KSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSB3
YXMgbm90IHJldHJpZXZlZCBpbiB0aW1lIik7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJrZXkgcmVjZWl2ZWQsIGNvbnRpbnVpbmciKTsKLSAgICAgICAgcHJpdi0+d2FpdGluZ0Zvcktl
eSA9IGZhbHNlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQo
c2VsZiksIGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJkcm0ta2V5LXJlY2VpdmVkIikpKTsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAiQ0RNIG5vdyBhdmFpbGFibGUgd2l0aCBhZGRyZXNzICVwIiwgcHJpdi0+
Y2RtUHJveHkuZ2V0KCkpOwogICAgIH0KIAogICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0
aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVy
X2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CkBAIC0yMDcsMzIgKzE5NywzMCBAQCBzdGF0
aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2Us
IEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24gbWV0YWRhdGEgZnJvbSBidWZmZXIgJXAiLCBidWZmZXIp
OwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CisgICAgYXV0
byByZW1vdmVQcm90ZWN0aW9uTWV0YU9uUmV0dXJuID0gbWFrZVNjb3BlRXhpdChbYnVmZmVyLCBw
cm90ZWN0aW9uTWV0YV0geworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
cmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICB9KTsKIAog
ICAgIHVuc2lnbmVkIGl2U2l6ZTsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJv
dGVjdGlvbk1ldGEtPmluZm8sICJpdl9zaXplIiwgJml2U2l6ZSkpIHsKICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBpdl9zaXplIik7Ci0gICAgICAgIGdzdF9i
dWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90
ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAg
ICB9CiAKICAgICBnYm9vbGVhbiBlbmNyeXB0ZWQ7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRlZCkp
IHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNyeXB0
ZWQgZmxhZyIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRl
cnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5
cHRlZCkgewotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICBpZiAoIWl2U2l6ZSB8fCAh
ZW5jcnlwdGVkKQogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQogCiAgICAgR1NU
X0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZPUk1BVCwg
cHJvdGVjdGlvbk1ldGEtPmluZm8pOwogCiAgICAgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQ7CiAg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vi
c2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZV9jb3VudCIpOwotICAgICAgICBnc3Rf
YnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJv
dGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAg
ICAgfQogCkBAIC0yNDIsMTcgKzIzMCwxOSBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zv
cm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAg
ICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZv
LCAic3Vic2FtcGxlcyIpOwogICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMiKTsKLSAgICAgICAg
ICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1l
dGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAgICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1
ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJUaGVyZSBpcyBubyBzdWJzYW1wbGVz
IGJ1ZmZlciwgYnV0IGEgcG9zaXRpdmUgc3Vic2FtcGxlIGNvdW50Iik7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZh
bHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJraWQi
KTsKIAogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBrZXkgaWQgZm9yIGJ1ZmZlciIpOwotICAgICAgICBnc3RfYnVmZmVyX3Jl
bW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1l
dGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogICAg
IEdzdEJ1ZmZlcioga2V5SURCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CkBA
IC0yNjAsNyArMjUwLDYgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShH
c3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICB2YWx1ZSA9IGdz
dF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXYiKTsKICAgICBp
ZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBn
ZXQgSVYgZm9yIHNhbXBsZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCkBAIC0yNzAsNDYgKzI1OSw3
NyBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zv
cm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwg
ImRlY3J5cHRpbmciKTsKICAgICBpZiAoIWtsYXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBr
ZXlJREJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsKLSAg
ICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQ
UE9SVEVEOwogICAgIH0KIAotICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKIH0KIAotc3RhdGljIGJvb2wgaXNDRE1JbnN0YW5jZUF2YWlsYWJsZShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQorc3RhdGljIGJvb2wgaXNDRE1Qcm94
eUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQorewor
ICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgcmV0dXJuIHByaXYt
PmNkbVByb3h5OworfQorCitzdGF0aWMgQ0RNUHJveHkqIHJlcXVlc3RDRE1Qcm94eUZyb21Hc3RD
b250ZXh0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAg
R1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9j
b250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKKyAgICBDRE1Q
cm94eSogcHJveHkgPSBudWxscHRyOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFt
ZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxk
IHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNl
bmQgYSBidXMKKyAgICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtl
IGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBt
ZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAg
IC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBz
b29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0
LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0
aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3
b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIu
IFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJl
IHVzZWZ1bCBoZXJlLgorICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSog
dmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJl
KGNvbnRleHQuZ2V0KCkpLCAiY2RtLWluc3RhbmNlIik7CisgICAgICAgIGlmICh2YWx1ZSkgewor
ICAgICAgICAgICAgcHJveHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9n
ZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGlu
c3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByb3h5LCBwcm94eS0+cmVmQ291bnQoKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5IG5vdCBhdmFpbGFibGUgaW4gdGhl
IGNvbnRleHQiKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB2b2lk
IGF0dGFjaENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYs
IENETVByb3h5KiBwcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
c2VsZik7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFz
cyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOworCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBw
cml2LT5jZG1Qcm94eSA9IHByb3h5OworICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYs
IHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlm
eU9uZSgpOworfQogCi0gICAgQVNTRVJUKHByaXYtPm11dGV4LmlzTG9ja2VkKCkpOwotCi0gICAg
aWYgKCFwcml2LT5wcm94eUNETSkgewotICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoc2VsZiks
ICJkcm0tY2RtLWluc3RhbmNlIikpOwotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEdTdHJl
YW1lciBkb2N1bWVudGF0aW9uLCBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBjb250ZXh0LCB3ZSBzaG91
bGQgcnVuIGEgZG93bnN0cmVhbSBxdWVyeSwgdGhlbiBhbiB1cHN0cmVhbSBvbmUgYW5kIHRoZW4g
c2VuZCBhIGJ1cwotICAgICAgICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5v
dCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJz
IGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2Fn
ZQotICAgICAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNv
bnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBu
b3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMKLSAg
ICAgICAgLy8gc29tZXRoaW5nIHByb3ZpZGVkIGJ5IGNyb3NzcGxhdGZvcm0gY29kZS4gVGhpcyBt
ZWFucyB0aGF0IHdlIHdvbid0IGJlIGFibGUgdG8gYW5zd2VyIHRoZSBidXMgcmVxdWVzdCBpbiBh
bnkgd2F5IGVpdGhlci4gU3VtbWluZyB1cCwgbmVpdGhlciBxdWVyaWVzIG5vciBidXMKLSAgICAg
ICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgotICAgICAgICBpZiAoY29udGV4dCkgewot
ICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVl
KGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSksICJjZG0taW5zdGFuY2Ui
KTsKLSAgICAgICAgICAgIHByaXYtPnByb3h5Q0RNID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0
PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAg
ICAgICAgIGlmIChwcml2LT5wcm94eUNETSkKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHNlbGYsICJyZWNlaXZlZCBhIG5ldyBDRE0gcHJveHkgaW5zdGFuY2UgJXAsIHJlZmNvdW50
ICV1IiwgcHJpdi0+cHJveHlDRE0uZ2V0KCksIHByaXYtPnByb3h5Q0RNLT5yZWZDb3VudCgpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYs
ICJDRE0gaW5zdGFuY2Ugd2FzIGRldGFjaGVkIik7CitzdGF0aWMgZ2Jvb2xlYW4gaW5zdGFsbENE
TVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikpIHsKKyAgICAgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkqIHByb3h5ID0gcmVx
dWVzdENETVByb3h5RnJvbUdzdENvbnRleHQoc2VsZik7CisgICAgICAgIGlmIChwcm94eSkgewor
ICAgICAgICAgICAgYXR0YWNoQ0RNUHJveHkoc2VsZiwgcHJveHkpOworICAgICAgICAgICAgcmVz
dWx0ID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkZhaWxlZCB0byByZXRyaWV2ZSBDRE1Qcm94eSBmcm9tIGNvbnRleHQiKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2
YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2LT5wcm94eUNETS5nZXQoKSkpOwotICAg
IHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogc3RhdGljIGdi
b29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50
KiBldmVudCkKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7Ci0gICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKHNlbGYpOwotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhz
ZWxmKTsKICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX0VW
RU5UX1RZUEUoZXZlbnQpKSB7CkBAIC0zMTgsMjMgKzMzOCwxMSBAQCBzdGF0aWMgZ2Jvb2xlYW4g
c2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50
KQogICAgICAgICAvLyBXZSBzaG91bGQgYmUgaGFuZGxpbmcgcHJvdGVjdGlvbiBldmVudHMgaW4g
dGhpcyBjbGFzcyBpbgogICAgICAgICAvLyBhZGRpdGlvbiB0byBvdXQtb2YtYmFuZCBkYXRhLiBJ
biByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCiAgICAgICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0g
SUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgotICAgICAgICAvLyBldmVu
dHMgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVtdXhlciwgc28gdGhlIG11c3QgYmUKKyAg
ICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRo
ZXkgbXVzdCBiZQogICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZhaWxh
YmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBDRE0g
aW5zdGFuY2UgYXZhaWxhYmxlIik7Ci0gICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtsYXNzLT5oYW5kbGVLZXlS
ZXNwb25zZShzZWxmLCBwcml2LT5wcm94eUNETSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCIpOwotICAgICAgICAgICAgcHJpdi0+a2V5UmVjZWl2
ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAg
ICAgICB9Ci0KKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgT09CIik7
CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYpOwog
ICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVFOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzUzLDYgQEAg
c3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMs
IEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xl
YW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24g
ZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFz
X25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13YWl0
aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
dHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRvci13
YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRpbmco
cHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0Zvcktl
eTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xh
c3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RTdGF0
ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNo
YW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYzLDcg
KzM2MSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0aW9u
KSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2LT5j
b25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRp
b24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwpAQCAtMzgwLDEyICszNzgsMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVs
ZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01F
RElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKICAgICBpZiAoZ3N0X2NvbnRleHRf
aGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7CiAgICAgICAg
IGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4
dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1
ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVl
KSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBu
ZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIHByaXYtPmNk
bVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRf
cG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxm
LCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+Y2RtUHJveHkuZ2V0KCkpOwor
ICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxmLCBwcml2LT5jZG1Qcm94eSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKaW5kZXggMDY1
MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1ZC4uNjk5MWI1OTNlZDExZTRiYWU2
YWM4ODUxMTZhZjAwMDc0MTQwZDc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKQEAgLTI0
LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFN
RVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2luY2x1ZGUgPENETVByb3h5Lmg+CiAj
aW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgogI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw3ICs1NSw3IEBAIHN0cnVjdCBfV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHsKICAgICBHc3RCYXNlVHJhbnNm
b3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBjaGFyKiBwcm90ZWN0aW9uU3lzdGVt
SWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5Q0RNPik7CisgICAgYm9vbCAoKmNk
bVByb3h5QXR0YWNoZWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBSZWZQ
dHI8V2ViQ29yZTo6Q0RNUHJveHk+KTsKICAgICBib29sICgqZGVjcnlwdCkoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlciog
a2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQs
IEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0
ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2
LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBT
dHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Q
cm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5j
ZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0oY2Rt
KQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2Nr
Q0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9j
a0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFBy
b3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lv
bjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0
YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThj
ODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5
LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZm
ZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1Ymxp
YyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19Owot
CiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0x
NTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVj
dG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgp
IGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Np
b24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7
CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlk
ZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388843</attachid>
            <date>2020-01-27 02:43:11 -0800</date>
            <delta_ts>2020-01-29 07:29:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200127104309.patch</filename>
            <type>text/plain</type>
            <size>102037</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uZWY5ZDMyOThlOGMxYzdmN2ZhYmY3MjRlZGRlOGEz
YTQzOTM4NTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAyMC0wMS0yNCAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMg
YW5kCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAg
ICAgICBQcm94eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRv
IGF2b2lkIHNvbWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxp
YmVydHkgb2YgcmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFz
b24gdGhhdCBpdCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAg
ICBjb25mdXNpb24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFk
ZXIgdXRpbGl0eSBmb3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VMaWNlbnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEp
OiBSZWZhY3RvcmVkIHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKTog
SGVscGVyIG1ldGhvZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Y2VuY1NldERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qg
d2lsbCBibG9jayBpZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20g
SlMuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxT
YW1wbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNE
ZWNyeXB0U3Vic2FtcGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVh
cktleTo6Y2VuY0RlY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xl
YXJLZXk6OmluaXRpYWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAg
ICAgIENETVByb3h5IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1l
bnRhdGlvbiBvZgorICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNv
bW1hbmQga2V5IG1hbmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAg
IHRyYWNrU2Vzc2lvbiBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVN
RQorICAgICAgICBzZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJh
Y2sgb2YgZ2VuZXJhdGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1
c2UgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJv
eHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZh
bHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBs
b29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkg
dmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAg
b3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAg
ICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICBSZW1v
dmUgZGVwZW5kZW5jeSBvbiBDRE1DbGVhcktleS5oLCBzaW5jZSBJIGhhdmVuJ3QgYWRkZWQgQ0RN
UHJveHkKKyAgICAgICAgdG8gdGhlIEFwcGxlIGJ1aWxkIHN5c3RlbSwgYW5kIEkgZG9uJ3QgYmVs
aWV2ZSB0aGV5IG5lZWQgQ2xlYXJLZXkKKyAgICAgICAgc3VwcG9ydD8gT3IgYXQgbGVhc3QgaXQg
aXMgZmFsc2VseSBhZHZlcnRpc2VkIGFzIHN1cHBvcnRlZD8KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpi
bG9ja1dhaXRpbmdGb3JDRE1BdHRhY2htZW50KToKKyAgICAgICAgUmVmYWN0b3IgbG9naWMgb3V0
IG9mIHN5bmNNZXNzYWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAg
IHdhaXRpbmctZm9yLWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNo
ZWQpOgorICAgICAgICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVh
bWVyLWJhc2VkIHBvcnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2
ZWQgY2xhc3NlcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBu
ZWVkIGEgaGFuZGxlIHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0Zvcktl
eSBtYW5hZ2VtZW50LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkK
KyAgICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0
aGUgQ0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAg
ICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAg
ICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6
CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAg
ICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1l
dGhvZCB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAg
KGZpbmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6
CisgICAgICAgIFJlZmFjdG9yIGZvciBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOiBSZW1vdmUgdGhlCisgICAgICAg
IHF1ZXJ5IGhhbmRsZXIgdXNlZCBmb3Igd2FpdGluZyBmb3Iga2V5IG5vdGlmaWNhdGlvbnMsIHNp
bmNlIGl0J3MKKyAgICAgICAgYmVlbiBkZWxldGVkIG5vdy4KKyAgICAgICAgKHRyYW5zZm9ybUlu
UGxhY2UpOiBSZW1vdmUgdGhlIGJyb2tlbiB3YWl0aW5nIGZvciBrZXkgbG9naWMsIGFuZAorICAg
ICAgICBtYWtlIGNsZWFyIHdoYXQgd2UgYmxvY2sgb24gaGVyZS4gQWRkIGEgc2NvcGUgZ3VhcmQg
dG8gcmVtb3ZlCisgICAgICAgIHByb3RlY3Rpb24gbWV0YSByYXRoZXIgdGhhbiBkb2luZyBpdCBt
YW51YWxseS4KKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOiAKKyAgICAgICAgKHJlcXVl
c3RDRE1Qcm94eUZyb21Hc3RDb250ZXh0KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZh
aWxhYmxlCisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6IEJyZWFrb3V0IGZyb20gaXNDRE1JbnN0
YW5jZUF2YWlsYWJsZQorICAgICAgICAoaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUpOiBC
cmVha291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAgICAgKHNpbmtFdmVudEhh
bmRsZXIpOiBSZW1vdmUgaGFuZGxlS2V5UmVzcG9uc2UsIHdlIG5vdyB3YWl0IG9uIGEKKyAgICAg
ICAgcHJveHkgQ0RNIGJlaW5nIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW5zdGFsbGVkIGluIHRoZSBj
b250ZXh0CisgICAgICAgIGhhbmRsZXIuCisgICAgICAgIChjaGFuZ2VTdGF0ZSk6CisgICAgICAg
IChzZXRDb250ZXh0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChpc0NETUluc3Rh
bmNlQXZhaWxhYmxlKTogRGVsZXRlZC4gUmVmYWN0b3JlZC4gVGhpcyB3YXMgZG9pbmcKKyAgICAg
ICAgdGhyZWUgdGhpbmdzIGluIG9uZSBwb29ybHkgbmFtZWQgZnVuY3Rpb24uCisgICAgICAgIChx
dWVyeUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAg
ICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0NETUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGlu
Zy9Nb2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAxLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3Qgc3BlY2lhbCBjYXNlIGZvcm1h
dHRpbmcgcm9vdCBsYXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpp
bmRleCA4NzRkNDlhZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li5lY2I5NzQ0M2Ew
M2E2NDU4Mzc5ODNmZWNiZDBmOTdmZjJkMWQ2NjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlCkBAIC0xNjAsMTIgKzE2MCwxMyBAQCBlbmRpZiAoKQogCiBpZiAoRU5B
QkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5D
TFVERV9ESVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2RtcHJveHkiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9jbGVhcmtleSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHku
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9y
eUdTdHJlYW1lci5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZk
ZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3
MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFz
cyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2Ny
aXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMg
KGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBk
ZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEph
dmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhl
CkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRT
dG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3Rh
bmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94
eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMg
ewogICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVi
Zjc3MDMwZTFkYjY4NzVkZDRiYjYzZDlkMGM3YzUzMWNmMjc4MzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jZG1wcm94eS9DRE1Qcm94
eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBWZWN0b3I8Y2hhcj4m
IHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChjaGFy
IGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhl
eChieXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9
CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wg
S2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3RkOjpmaW5kX2lmKG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCks
IFsmXShjb25zdCBLZXkmIGtleSkgeworICAgICAgICByZXR1cm4ga2V5ID09IGtleUlEOworICAg
IH0pICE9IG1fa2V5cy5lbmQoKTsKK30KKwordm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5
U3RvcmUmIG90aGVyKQoreworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIG1lcmdpbmcg
JXUgbmV3IGtleXMgaW50byBhIGtleSBzdG9yZSBvZiAldSBrZXlzIiwgb3RoZXIubnVtS2V5cygp
LCBudW1LZXlzKCkpOworICAgIHN0ZDo6Y29weV9pZihvdGhlci5iZWdpbigpLCBvdGhlci5lbmQo
KSwgc3RkOjpiYWNrX2luc2VydGVyKG1fa2V5cyksCisgICAgICAgIFt0aGlzXShjb25zdCBLZXkm
IGtleSkgeworICAgICAgICAgICAgcmV0dXJuIGVuZCgpID09IHN0ZDo6ZmluZChiZWdpbigpLCBl
bmQoKSwga2V5KTsKKyAgICAgICAgfSk7CisKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkg
LSBrZXkgc3RvcmUgbm93IGhhcyAldSBrZXlzIiwgbnVtS2V5cygpKTsKKyAgICBzdGQ6OmZvcl9l
YWNoKG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCisgICAgICAgIFtdKGNvbnN0IEtleSYg
a2V5KSB7CisgICAgICAgICAgICBMT0coRU1FLCAiXHRFTUUgLSBDRE1Qcm94eSAtIEtleSBJRDog
JXMiLCBrZXkuaWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSk7Cit9CisK
K3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikK
K3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAgICAgICByZW1vdmUoa2V5
KTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFs
bEtleXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3Rvcigp
OworICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAgICAgICBr
ZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2Vk
OworICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZChS
ZWY8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisgICAgYXV0
byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZChtX2tleXMuYmVnaW4oKSwgbV9rZXlz
LmVuZCgpLCBrZXkpOworCisgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlEICE9IG1fa2V5cy5l
bmQoKSkgeworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5oYXNTYW1lS2V5VmFs
dWUoa2V5KSkgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRXhpc3Rp
bmcga2V5IHdpdGggSUQgJXMgZm91bmQgd2l0aCBkaWZmZXJlbnQgZGF0YSAlcyIsIGtleVdpdGhN
YXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleVdpdGhNYXRjaGlu
Z0tleUlELT52YWx1ZUFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgKmtl
eVdpdGhNYXRjaGluZ0tleUlEID0ga2V5OworICAgICAgICAgICAgc3RvcmVDaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVm
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gTmV3
IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5pZEFzU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBtX2tleXMucHVzaF9iYWNrKGtleSk7Cisg
ICAgICAgIHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHN0b3JlQ2hh
bmdlZDsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQoreworICAg
IGJvb2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisgICAgYXV0byBrZXlXaXRoTWF0Y2hpbmdLZXlJ
RCA9IHN0ZDo6ZmluZChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVuZCgpLCBrZXkpOworCisgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVkIHRvIHJlbW92ZSBrZXkgd2l0aCBJ
RCAlcyBhbmQgcmVmQ291bnQgJXUiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpLCBrZXkucmVmQ291bnQoKSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNo
aW5nS2V5SUQgIT0gbV9rZXlzLmVuZCgpKSB7CisgICAgICAgIGtleVdpdGhNYXRjaGluZ0tleUlE
LT5kZXJlZigpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5yZWZDb3VudCgp
KSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZW1vdmUga2V5IHdp
dGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5lcmFzZShrZXlXaXRoTWF0Y2hpbmdLZXlJRCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
YXR0ZW1wdCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMgaWdub3JlZCwgZG9lcyBub3QgZXhpc3Qi
LCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKwor
ICAgIHJldHVybiBzdG9yZUNoYW5nZWQ7Cit9CisKK1ZlY3RvcjxjaGFyPiBLZXlTdG9yZTo6a2V5
VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIG1hdGNo
aW5nS2V5ID0gc3RkOjpmaW5kX2lmKG1fa2V5cy5iZWdpbigpLCBtX2tleXMuZW5kKCksCisgICAg
ICAgIFsmXShjb25zdCBLZXkmIGtleSkgeworICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBrZXlJ
RDsKKyAgICAgICAgfSk7CisgICAgLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGUga2V5IGV4aXN0
cy4KKyAgICBSRUxFQVNFX0FTU0VSVChtYXRjaGluZ0tleSAhPSBtX2tleXMuZW5kKCkpOworICAg
IHJldHVybiBtYXRjaGluZ0tleS0+dmFsdWUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29u
c3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNW
ZWN0b3I7CisgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5
cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICAvLyBG
SVhNRTogVmVjdG9yPGNoYXI+IHJlcHJlc2VudGF0aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUK
KyAgICAgICAgLy8gZGF0YSBhcmUgc21hbGwgaW4gbnVtYmVyLCBzbyBwcm9iYWJseSBpdHMgZmlu
ZS4KKyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVm
PFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7IGtleS5pZEFz
U2hhcmVkQnVmZmVyKCksIGtleS5zdGF0dXMoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0
YXR1c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5
U3RvcmUmIG5ld0tleVN0b3JlKQoreworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUp
OworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSB1cGRhdGluZyBrZXkgc3RvcmUg
ZnJvbSBhIHNlc3Npb24gdXBkYXRlIik7CisgICAgICAgIG1fa2V5c0NvbmRpdGlvbi5ub3RpZnlB
bGwoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNl
UHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5j
ZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3RvcjxjaGFyPiBD
RE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlT
dG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFs
dWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNv
bnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAg
IExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsK
KyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdG
b3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25z
dAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7Cisg
ICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9y
S2V5KCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXlJRCwgVmVjdG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29uc3QKK3sKKyAgICBzdGFy
dGVkV2FpdGluZ0ZvcktleSgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHRyeWlu
ZyB0byB3YWl0IGZvciBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWko
KS5kYXRhKCkpOworICAgIGJvb2wgd2FzS2V5UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICB7CisgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgICAgICB3YXNLZXlS
ZWNlaXZlZCA9IG1fa2V5c0NvbmRpdGlvbi53YWl0Rm9yKG1fa2V5c011dGV4LCBDRE1Qcm94eTo6
TWF4S2V5V2FpdFRpbWVTZWNvbmRzLCBbJiwgdGhpcywga2V5SURdKCkgeworICAgICAgICAgICAg
cmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Q
cm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3Ry
aW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGtleVZhbHVlT3V0ID0ga2V5VmFs
dWUoa2V5SUQpOworICAgIH0gZWxzZQorICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkg
LSBrZXkgSUQgJXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7CisKKyAgICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5nIHdlIGhhdmUgc3Rv
cHBlZCB3YWl0aW5nIGZvciBhIGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMgb25seSBnZXQKKyAg
ICAvLyBvbmUgc2hvdCBhdCBmZXRjaGluZyBhIGtleS4gSWYgTWF4S2V5V2FpdFRpbWVTZWNvbmRz
IGV4cGlyZXMsIHRoYXQncyBpdCwgbm8gbW9yZSBjbGVhciBieXRlcworICAgIC8vIGZvciB5b3Uu
CisgICAgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKworICAgIHJldHVybiB3YXNLZXlSZWNlaXZl
ZDsKK30KKworYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlTdG9yZS5jb250YWluc0tl
eUlEKGtleUlEKTsKK30KKworYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5SUQpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tl
eXNNdXRleCk7CisgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKK30KKwor
Ym9vbCBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5SUQs
IFZlY3RvcjxjaGFyPiYga2V5VmFsdWVPdXQpIGNvbnN0Cit7CisgICAgaWYgKCFrZXlBdmFpbGFi
bGUoa2V5SUQpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSBrZXkgY2FjaGUg
ZG9lcyBub3QgY29udGFpbiBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleShrZXlJRCwga2V5VmFs
dWVPdXQpOworICAgIH0KKworICAgIGtleVZhbHVlT3V0ID0ga2V5VmFsdWUoa2V5SUQpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpICYmIG1fcGxheWVyKTsKKyAg
ICBib29sIHdhc1dhaXRpbmdGb3JLZXkgPSBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4g
MDsKKyAgICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5Kys7CisKKyAgICBjYWxsT25NYWlu
VGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgd2FzV2FpdGluZ0ZvcktleV0geworICAgICAgICBp
ZiAocGxheWVyICYmIHdhc1dhaXRpbmdGb3JLZXkpCisgICAgICAgICAgICBwbGF5ZXItPndhaXRp
bmdGb3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYg
bV9wbGF5ZXIgJiYgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+IDApOworICAgIG1fbnVt
RGVjcnlwdG9yc1dhaXRpbmdGb3JLZXktLTsKKyAgICBib29sIG5vYm9keVdhaXRpbmdGb3JLZXkg
PSAhbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3BsYXllciA9IG1fcGxheWVyLCBub2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChw
bGF5ZXIgJiYgbm9ib2R5V2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGlu
Z0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5Ojpy
ZXF1ZXN0S2V5U3RvcmUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBLZXlTdG9yZSYpPiYm
IGNhbGxiYWNrKQoreworICAgIC8vIE5PVEU6IFdlIGNhbiBpbW1lZGlhdGVseSByZXNvbHZlIHRo
aXMgY2FsbGJhY2sgaW4gdGhlIGNhc2Ugb2YKKyAgICAvLyBDbGVhcktleSwgYnV0IGZvciBhIENE
TSBsaWtlIFdpZGV2aW5lLCB3aGljaCBhc3luY2hyb25vdXNseQorICAgIC8vIHRlbGxzIHlvdSBh
Ym91dCBrZXkgc3RhdHVzZXMsIHRoaXMgY2FsbGJhY2sgd291bGQgbmVlZCB0byBiZQorICAgIC8v
IHN0b3JlZCBzb21ld2hlcmUgYW5kIGxhdGVyIHJlc29sdmVkLgorCisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgY2FsbGJhY2sobV9rZXlTdG9yZSk7Cit9CisK
K3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5
U3RvcmUpCit7CisgICAgLy8gRklYTUU6IE5vdGlmeSBKUyB3aGVuIGFwcHJvcHJpYXRlLgorICAg
IHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAg
IG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIH0KKyAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNSW5zdGFuY2VQcm94eSAtIG1lcmdpbmcga2V5cyBpbnRvIHByb3h5IGluc3RhbmNlIGFuZCBu
b3RpZnlpbmcgQ0RNUHJveHkgb2YgY2hhbmdlcyIpOworICAgIEFTU0VSVChtX2NkbVByb3h5KTsK
KyAgICBtX2NkbVByb3h5LT51cGRhdGVLZXlTdG9yZShrZXlTdG9yZSk7Cit9CisKK3ZvaWQgQ0RN
SW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3Jl
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5
U3RvcmUucmVtb3ZlQWxsS2V5c0Zyb20oa2V5U3RvcmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2RtcHJveHkvQ0RNUHJveHku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NkbXByb3h5L0NETVBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGIxODQ5MzEyMDZiNjAxMzIyZGMwMGM3OTRmNDAzYjcxYmU3YTNi
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NkbXByb3h5L0NETVByb3h5LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiQ0RNSW5zdGFu
Y2UuaCIKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxsaXN0
PgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBLZXkgeworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1cyA9IENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzOworCisgICAgc3RhdGljIFJlZjxLZXk+IGNyZWF0ZShLZXlTdGF0dXMg
c3RhdHVzLCBWZWN0b3I8Y2hhcj4ga2V5SUQsIFZlY3RvcjxjaGFyPiBrZXlWYWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQp
LCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFz
U2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5k
YXRhKCksIG1faWQuc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPGNoYXI+IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQorICAgIFZlY3RvcjxjaGFyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKyAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7
IH0KKworICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKKworICAgIHZvaWQgcmVmKCkgeyBtX3JlZmVyZW5jZXMrKzsgfQorICAg
IHZvaWQgZGVyZWYoKSB7IG1fcmVmZXJlbmNlcy0tOyB9CisgICAgdW5zaWduZWQgcmVmQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZXM7IH0KKworICAgIGJvb2wgaGFzU2FtZUtleVZh
bHVlKGNvbnN0IEtleSAmb3RoZXIpIHsgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsg
fQorICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGln
bm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lk
OyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7
IHJldHVybiBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgS2V5KEtleVN0YXR1cyBzdGF0
dXMsIFZlY3RvcjxjaGFyPiYmIGtleUlELCBWZWN0b3I8Y2hhcj4mJiBrZXlWYWx1ZSkKKyAgICAg
ICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5SUQpKSwgbV92YWx1ZShXVEZN
b3ZlKGtleVZhbHVlKSkgeyB9CisKKyAgICBLZXlTdGF0dXMgbV9zdGF0dXM7CisgICAgVmVjdG9y
PGNoYXI+IG1faWQ7CisgICAgVmVjdG9yPGNoYXI+IG1fdmFsdWU7CisgICAgdW5zaWduZWQgbV9y
ZWZlcmVuY2VzIHsgMSB9OworfTsKKworY2xhc3MgS2V5U3RvcmUgeworcHVibGljOgorICAgIHVz
aW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9y
OworCisgICAgS2V5U3RvcmUmIG9wZXJhdG9yPShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCisgICAg
eworICAgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisgICAgICAgICAgICBzdGQ6OmNvcHkob3Ro
ZXIubV9rZXlzLmJlZ2luKCksIG90aGVyLm1fa2V5cy5lbmQoKSwgbV9rZXlzLmJlZ2luKCkpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBjb250YWluc0tleUlEKGNv
bnN0IFZlY3RvcjxjaGFyPiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5
U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3Jl
JiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQor
ICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIGJvb2wg
YWRkKFJlZjxLZXk+Jik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgS2V5Jik7CisgICAgdW5zaWdu
ZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAgICBWZWN0b3I8
Y2hhcj4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5
U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBh
dXRvIGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGNiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5cy5jYmVnaW4oKTsgfQorICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9r
ZXlzLmVuZCgpOyB9CisgICAgYXV0byBlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuZW5kKCk7
IH0KKyAgICBhdXRvIGNlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY2VuZCgpOyB9CisgICAg
YXV0byByYmVnaW4oKSB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gY3JiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5jcmJlZ2luKCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJl
dHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlzLnJlbmQoKTsgfQorICAgIGF1dG8gY3JlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY3Jl
bmQoKTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6bGlzdDxLZXk+IG1fa2V5czsKK307CisKK2Ns
YXNzIENETUluc3RhbmNlUHJveHk7CisKKy8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0
aGUgSmF2YVNjcmlwdCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKKy8vIGZyb20gYmFja2dyb3Vu
ZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgorY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworCisgICAgdmlydHVhbCB+
Q0RNUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtl
eVN0b3JlJiBuZXdLZXlTdG9yZSk7CisgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVBy
b3h5Kik7CisKK3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8Y2hhcj4ga2V5VmFsdWUoY29uc3QgVmVj
dG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVj
dG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChj
b25zdCBWZWN0b3I8Y2hhcj4mIGtleUlEKSBjb25zdDsKKyAgICBib29sIHRyeVdhaXRGb3JLZXko
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwgVmVjdG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29u
c3Q7CisgICAgYm9vbCBnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCwg
VmVjdG9yPGNoYXI+JiBrZXlWYWx1ZU91dCkgY29uc3Q7CisgICAgdm9pZCBzdGFydGVkV2FpdGlu
Z0ZvcktleSgpIGNvbnN0OworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OworICAgIENETUlu
c3RhbmNlUHJveHkqIG1faW5zdGFuY2U7CisKKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7
CisgICAgbXV0YWJsZSBDb25kaXRpb24gbV9rZXlzQ29uZGl0aW9uOworICAgIEtleVN0b3JlIG1f
a2V5U3RvcmU7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5hZ2Vt
ZW50IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJyZWFsIENE
TSIgc3RhdGUgY2hhbmdlcyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMg
Q0RNSW5zdGFuY2UgeworcHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJveHkqIHBy
b3h5KSA6IG1fY2RtUHJveHkoYWRvcHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0YW5jZSh0
aGlzKTsgfQorICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAg
ICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1haW4gdGhyZWFkIG9ubHkKKyAgICBS
ZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBy
ZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JLZXkoKSBj
b25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRvcnNXYWl0
aW5nRm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIp
IHsgbV9wbGF5ZXIgPSBwbGF5ZXI7IH0KKworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJl
IHRocmVhZC1zYWZlCisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQg
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIG1lcmdlS2V5c0Zyb20oY29uc3QgS2V5
U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RLZXlTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IEtleVN0b3JlJik+JiYgY2FsbGJhY2spOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0cmFj
a1Nlc3Npb24oUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gc2Vzc2lvbikgeyBtX3Nlc3Npb25z
LnB1c2hfYmFjayhzZXNzaW9uKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxDRE1Qcm94eT4g
bV9jZG1Qcm94eTsKKyAgICAvLyBGSVhNRTogV2Vha1B0ciBmb3IgdGhlIG1fcGxheWVyPyBUaGlz
IGlzIGFjY2Vzc2VkIGZyb20gYmFja2dyb3VuZCBhbmQgbWFpbiB0aHJlYWRzLCBpdCdzCisgICAg
Ly8gY29uY2VybmluZyB3ZSBjb3VsZCBiZSBhY2Nlc3NpbmcgaXQgaW4gdGhlIG1pZGRsZSBvZiBh
IHNodXRkb3duIG9uIHRoZSBtYWluLXRocmVhZCwgZWg/CisgICAgLy8gQXMgYSBDRE1Qcm94eSwg
d2UgKioqc2hvdWxkKioqIGJlIHR1cm5lZCBvZmYgYmVmb3JlIHRoaXMgcG9pbnRlciBldmVyIGdv
ZXMgYmFkLgorICAgIE1lZGlhUGxheWVyKiBtX3BsYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6
IE1haW5UaHJlYWQ8VD4/CisKKyAgICBzdGQ6OmF0b21pYzxpbnQ+IG1fbnVtRGVjcnlwdG9yc1dh
aXRpbmdGb3JLZXk7CisgICAgc3RkOjpsaXN0PFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+PiBt
X3Nlc3Npb25zOworCisgICAgLy8gRklYTUU6IFRoaXMgc2FtZSBwYXR0ZXJuIG9mIGEgcHJvdGVj
dGVkIGtleSBzdG9yZSBpcyB1c2VkIGluIHRoZSBDRE1Qcm94eSBhbmQgaW4gdGhpcyBJbnN0YW5j
ZS4KKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7CisgICAgbXV0YWJsZSBDb25kaXRpb24g
bV9rZXlzQ29uZGl0aW9uOworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7IC8vIEZJWE1FOiBEYXRh
TXV0ZXg/Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVk
Yjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjUwMmU3ZmIyMjdkNTAyODkzZGZl
NTRhMWExNzc2YWIzYzViNmVhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAg
LTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENsZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3
dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4
X3QgY2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhj
MCwgMHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwg
MHhmYiwgMHg0YiB9OwotY29uc3QgdW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0g
c2l6ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9
IDE2OworbmFtZXNwYWNlIHsKIAotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5
U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3Rh
dGljIGJvb2wgcmVhZFVJbnQzMihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkco
b2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZz
ZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9y
ZSYga2V5cygpIHsgcmV0dXJuIG1fa2V5czsgfQorICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zm
c2V0ICs9IHNpemVvZih2YWx1ZSk7CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVy
RGVzdHJveWVkPENsZWFyS2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlT
dG9yZSBtX2tleXM7Ci19OworICAgIHJldHVybiB0cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBD
bGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQorc3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2
X3QmIHZhbHVlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBz
X3N0YXRlOwotICAgIHJldHVybiBzX3N0YXRlOworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZz
ZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2Yo
dmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAg
IG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFy
S2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5
c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21t
b24tc3lzdGVtCitjb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAs
IDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4
M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFy
S2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVt
IHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJ
RFNpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9Owor
Cit9CiAKIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3Qg
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CkBAIC04OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPEtleT4+PiBwYXJzZUxpY2Vuc2VG
b3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5cycg
a2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVy
CiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAg
LTEwMSw3ICsxMTQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBW
ZWN0b3I8UmVmPEtleT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6
OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsm
ZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtMTIwLDcgKzEzMyw3IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7
IGtleUlERGF0YSB9KSB8fCAhV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFs
dWVEYXRhIH0pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
ZGVjb2RlZEtleXMuYXBwZW5kKHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJs
ZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUoV1RGTW92ZShrZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRL
ZXlzLmFwcGVuZChLZXk6OmNyZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNh
YmxlLCBrZXlJRERhdGEsIGtleVZhbHVlRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBz
aXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5
SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5p
dERhdGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNl
Y29uZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXRE
YXRhLgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0
S2V5aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVz
KTsKICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRl
eCArPSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRl
czsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNB
cnJheSkpOwpAQCAtNDU2LDQxICs0NjksMTMxIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0
ZUNsZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAg
ICByZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1
cmluZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRl
YWwuIFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0v
LyBhbGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5n
Ci0vLyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25z
aWJpbGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJh
Y2tncm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGll
cyAoaS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWlu
LXRocmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdl
IGNhbiBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAot
Ly8gU2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQg
YWNyb3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRl
ZEtleShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVh
cktleTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0
cmluZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmlu
ZyhrZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsK
KyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8
UHJveHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBj
b25zdAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBj
ZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBh
bGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZl
Y3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNp
emUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KTsKKyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAo
aW5wdXQuaXZOdW1CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoyMDE2
IFNlY3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xhdGVk
S2V5KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRo
ZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElW
IChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAg
ICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwg
OCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleUlW
U2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKSkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktleShj
b25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vzc2Fy
eSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8vIGEg
bm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJzIGFy
ZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVzcy4K
KyAgICBWZWN0b3I8Y2hhcj4ga2V5SURWZWM7CisgICAga2V5SURWZWMuYXBwZW5kKGluLmtleUlE
LCBpbi5rZXlJRE51bUJ5dGVzKTsKKworICAgIFZlY3RvcjxjaGFyPiBrZXlEYXRhOworICAgIGlm
ICghZ2V0T3JXYWl0Rm9yS2V5KGtleUlEVmVjLCBrZXlEYXRhKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleSht
X2djcnlIYW5kbGUsIGtleURhdGEuZGF0YSgpLCBrZXlEYXRhLnNpemUoKSkpIHsKKyAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRr
ZXkpOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2Vu
Y0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYgaW4pCit7CisgICAgaWYgKCFp
bi5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIGZ1bGwtc2FtcGxlIGRlY3J5cHRpb246
ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBpbi5lbmNyeXB0ZWRCdWZmZXJOdW1CeXRlcyk7CisKKyAg
ICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChtX2dj
cnlIYW5kbGUsIGluLmVuY3J5cHRlZEJ1ZmZlciwgaW4uZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMs
IDAsIDApKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJS
T1IoZ2NyeV9jaXBoZXJfZGVjcnlwdCk6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRD
b250ZXh0JiBpbnB1dCkKK3sKKyAgICB1bnNpZ25lZCBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0
ID0gMDsKKyAgICBzaXplX3Qgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgdW5z
aWduZWQgc3ViU2FtcGxlSW5kZXggPSAwOworICAgIHdoaWxlIChlbmNyeXB0ZWRCdWZmZXJCeXRl
T2Zmc2V0IDwgaW5wdXQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMpIHsKKyAgICAgICAgdWludDE2
X3Qgc3ViU2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7CisgICAgICAgIHVpbnQzMl90IHN1YlNhbXBs
ZU51bUVuY3J5cHRlZEJ5dGVzID0gMDsKKworICAgICAgICBpZiAoc3ViU2FtcGxlSW5kZXggPCBp
bnB1dC5udW1TdWJzYW1wbGVzKSB7CisgICAgICAgICAgICBpZiAoIXJlYWRVSW50MTYoaW5wdXQu
c3ViU2FtcGxlc0J1ZmZlciwgaW5wdXQuc3ViU2FtcGxlc0J1ZmZlck51bUJ5dGVzLCBzdWJTYW1w
bGVCdWZmZXJCeXRlT2Zmc2V0LCBzdWJTYW1wbGVOdW1DbGVhckJ5dGVzKSkgeworICAgICAgICAg
ICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQg
bnVtYmVyIG9mIGNsZWFyIGJ5dGVzIGluIHN1YnNhbXBsZSBhdCBpbmRleCAldSIsIHN1YlNhbXBs
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIXJlYWRVSW50MzIoaW5wdXQuc3ViU2FtcGxlc0J1ZmZlciwgaW5wdXQu
c3ViU2FtcGxlc0J1ZmZlck51bUJ5dGVzLCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0LCBzdWJT
YW1wbGVOdW1FbmNyeXB0ZWRCeXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBlbmNyeXB0ZWQg
Ynl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3ViU2FtcGxlSW5kZXgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1YlNh
bXBsZUluZGV4Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdWJTYW1wbGVOdW1D
bGVhckJ5dGVzID0gMDsKKyAgICAgICAgICAgIHN1YlNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzID0g
aW5wdXQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBoaWdoLWZyZXF1ZW5j
eSBtZXNzYWdlcywgbm90IHN1cmUgaWYgdGhlcmUncyBhIGJldHRlciBsb2dnaW5nIGxpYiBpbiBX
ZWJDb3JlLgorICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0gJXUg
Ynl0ZXMgY2xlYXIgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3ViU2FtcGxlSW5kZXgs
IHN1YlNhbXBsZU51bUNsZWFyQnl0ZXMsIGlucHV0LmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzIC0g
ZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCk7CisKKyAgICAgICAgZW5jcnlwdGVkQnVmZmVyQnl0
ZU9mZnNldCArPSBzdWJTYW1wbGVOdW1DbGVhckJ5dGVzOworCisgICAgICAgIGlmIChzdWJTYW1w
bGVOdW1FbmNyeXB0ZWRCeXRlcykgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIHN1YnNh
bXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVj
cnlwdCkiLCBzdWJTYW1wbGVJbmRleCwgc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMsIGlucHV0
LmVuY3J5cHRlZEJ1ZmZlck51bUJ5dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCk7CisK
KyAgICAgICAgICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9k
ZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW5wdXQuZW5jcnlwdGVkQnVmZmVyICsgZW5jcnlwdGVkQnVm
ZmVyQnl0ZU9mZnNldCwgc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMsIDAsIDApKSB7CisgICAg
ICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5
X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVu
Y3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0gc3ViU2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXM7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNs
ZWFyS2V5OjpjZW5jRGVjcnlwdChDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdENvbnRleHQm
IGlucHV0KQoreworICAgIGlmICghY2VuY1NldENvdW50ZXJWZWN0b3IoaW5wdXQpIHx8ICFjZW5j
U2V0RGVjcnlwdGlvbktleShpbnB1dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBpbnB1dC5pc1N1YnNhbXBsZWQoKSA/IGNlbmNEZWNyeXB0U3Vic2FtcGxlZChpbnB1dCkg
OiBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoaW5wdXQpOworfQorCit2b2lkIENETVByb3h5Q2xlYXJL
ZXk6OmluaXRpYWxpemVHY3J5cHQoKQoreworICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBn
Y3J5X2NpcGhlcl9vcGVuKCZtX2djcnlIYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9D
SVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkpIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9vcGVuKTogJXMiLCBn
cGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgIlNo
b3VsZCBub3QgZ2V0IHRoaXMgZmFyIHdpdGggYSBmdW5jdGlvbmFsIEdDcnlwdCEiKTsKKyAgICB9
CiB9CiAKIENETUluc3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkoKQotICAgIDog
bV9wcm94eUNETShhZG9wdFJlZigqbmV3IFByb3h5Q0RNQ2xlYXJLZXkoKSkpCisgICAgOiBDRE1J
bnN0YW5jZVByb3h5KG5ldyBDRE1Qcm94eUNsZWFyS2V5KCp0aGlzKSkKIHsKIH0KIApAQCAtNTM1
LDM2ICs2MzgsOSBAQCBjb25zdCBTdHJpbmcmIENETUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3Rl
bSgpIGNvbnN0CiAKIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJL
ZXk6OmNyZWF0ZVNlc3Npb24oKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXkoKSk7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk6OmtleUlEQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwg
a2V5SUREYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VD
bGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZygiWyIsIGtleVZhbHVlRGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7
Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9
PSAqazIua2V5SUREYXRhOwotfQotCi1ib29sIG9wZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewot
ICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0g
ICAgaWYgKGsxLmtleUlERGF0YS0+c2l6ZSgpICE9IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAg
ICAgICByZXR1cm4gazEua2V5SUREYXRhLT5zaXplKCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsK
LQotICAgIHJldHVybiBtZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+
ZGF0YSgpLCBrMS5rZXlJRERhdGEtPnNpemUoKSk7CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vz
c2lvbj4gbmV3U2Vzc2lvbiA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eSgqdGhpcykpOworICAgIHRyYWNrU2Vzc2lvbihuZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3
U2Vzc2lvbjsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExp
Y2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01
NzIsNiArNjQ4LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExp
Y2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMy
X3Qgc19zZXNzaW9uSWRWYWx1ZSA9IDA7CiAgICAgKytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAg
bV9zZXNzaW9uSUQgPSBTdHJpbmc6Om51bWJlcihzX3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAg
ICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEu
Z2V0KCkpOwogCkBAIC01NzksMTggKzY1NywxNiBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQog
ICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEu
Z2V0KCkpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9
IFdURk1vdmUoaW5pdERhdGEpLCBzZXNzaW9uSWRWYWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkg
bXV0YWJsZSB7CisgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRh
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3Ry
aW5nOjpudW1iZXIoc2Vzc2lvbklkVmFsdWUpLCBmYWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2Nl
ZWRlZCk7CiAgICAgICAgIH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29u
c3QgU2hhcmVkQnVmZmVyJiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJh
Y2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNh
bGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZwotICAgIC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRo
cmVhZCgpIGNhbGxzLgogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlz
LCAmY2FsbGJhY2tdKGJvb2wgc2Vzc2lvbldhc0Nsb3NlZCwgT3B0aW9uYWw8S2V5U3RhdHVzVmVj
dG9yPiYmIGNoYW5nZWRLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VlZGVkKSB7CiAgICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKApAQCAtNjA0LDUyICs2ODAsMjggQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwg
TGljZW5zZVQKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJvb3QgPSBwYXJzZUpTT05PYmpl
Y3QocmVzcG9uc2UpOwogICAgIGlmICghcm9vdCkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdhcyBub3QgdmFsaWQgSlNPTiIs
IHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxz
ZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGluZyBsaWNlbnNl
IGZvciBzZXNzaW9uICVzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24gJXMgd2hpY2gg
Y3VycmVudGx5IGNvbnRhaW5zICV1IGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9r
ZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgaWYgKGF1dG8gZGVjb2RlZEtleXMgPSBwYXJzZUxp
Y2Vuc2VGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIFJldHJpZXZlIHRoZSB0YXJnZXQgVmVj
dG9yIG9mIEtleSBvYmplY3RzIGZvciB0aGlzIHNlc3Npb24uCi0gICAgICAgIC8vIEZJWE1FOiBS
ZWZhY3RvciB0aGlzIHN0YXRlIG1hbmFnZW1lbnQgY29kZS4KLSAgICAgICAgVmVjdG9yPENETUlu
c3RhbmNlQ2xlYXJLZXk6OktleT4mIGtleVZlY3RvciA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRv
bigpLmtleXMoKS5lbnN1cmUoc2Vzc2lvbklkLCBbXSB7IHJldHVybiBWZWN0b3I8Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5PiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKLQogICAgICAgICBib29s
IGtleXNDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAoYXV0byYgZGVjb2RlZEtleSA6ICpk
ZWNvZGVkS2V5cykgewotICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRGVj
b2RlZCBhIGtleSB3aXRoIElEICVzIGFuZCBrZXkgZGF0YSAlcyIsIGRlY29kZWRLZXkua2V5SURB
c1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXkua2V5VmFsdWVBc1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgYXV0byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0
ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVuZCgpLAotICAgICAgICAg
ICAgICAgIFsmZGVjb2RlZEtleV0gKGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgY29u
dGFpbmVkS2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZWRLZXkgPT0g
ZGVjb2RlZEtleTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChrZXlXaXRo
TWF0Y2hpbmdLZXlJRCAhPSBrZXlWZWN0b3IuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBFeGlzdGluZyBrZXkgZm91bmQgd2l0aCBkYXRhICVzIiwg
a2V5V2l0aE1hdGNoaW5nS2V5SUQtPmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LQotICAgICAgICAgICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPmhhc1NhbWVLZXlW
YWx1ZShkZWNvZGVkS2V5KSkgewotICAgICAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSBVcGRhdGluZyBrZXkgc2luY2UgdGhlIGRhdGEgYXJlIGRpZmZlcmVudCIpOwot
ICAgICAgICAgICAgICAgICAgICAqa2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBXVEZNb3ZlKGRlY29k
ZWRLZXkpOwotICAgICAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ2xlYXJLZXkgLSBUaGlzIGlzIGEgbmV3IGtleSIpOwotICAgICAgICAgICAgICAg
IGtleVZlY3Rvci5hcHBlbmQoV1RGTW92ZShkZWNvZGVkS2V5KSk7CisgICAgICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBk
YXRhICVzIiwgZGVjb2RlZEtleS0+aWRBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRL
ZXktPnZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGlmIChtX2tl
eVN0b3JlLmFkZChkZWNvZGVkS2V5KSkKICAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVjdG9yLnNpemUo
KSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzICV1
IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9y
ZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdl
ZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gU29ydCBi
eSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtleVZlY3Rvci5iZWdpbigpLCBrZXlW
ZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
a2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rv
cikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6
cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXku
c3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IFdURk1vdmUoa2V5U3RhdHVz
VmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24g
JXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3Rvcigp
OwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGTW92ZShj
aGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKQEAgLTY1Nyw0NyArNzA5LDI3
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3Qg
U3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgfQogCiAgICAgaWYgKHBhcnNlTGljZW5z
ZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUg
dGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAgICAgICBDbGVhcktleVN0YXRlOjpzaW5n
bGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7CisgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFs
bCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BhcmVu
dEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBtX2tleVN0
b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3JtYXQgd2FzIHJlY29nbml6ZWQuCisgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMg
YW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICBk
aXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVk
KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24oTGlj
ZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vz
c2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3Ig
dGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVk
IGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQot
ICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhp
c3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VzcywgU2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRG
YWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICAgICAgICAg
IFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlzdGluZ0tleXMpLCBzdWNjZXNzLCBsb2Fk
RmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07
Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2Vu
dGluZyBhbGwgdGhlIGtub3duIGtleXMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgIHsKLSAgICAgICAgYXV0byYga2V5cyA9IENsZWFy
S2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAgICAgICAgYXV0byBpdCA9IGtleXMuZmlu
ZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0ga2V5cy5lbmQoKSkgewotICAgICAgICAg
ICAgZGlzcGF0Y2hDYWxsYmFjayhXVEY6Om51bGxvcHQsIEZhaWxlZCwgU2Vzc2lvbkxvYWRGYWls
dXJlOjpOb1Nlc3Npb25EYXRhKTsKKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklE
KTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5jb252
ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCAma2V5
U3RhdHVzVmVjdG9yXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byYga2V5VmVjdG9yID0gaXQt
PnZhbHVlOwotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShr
ZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0g
ICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8
U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0p
OwotICAgIH0KIAotICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3Ip
LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgIGNhbGxiYWNr
KFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1
Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICB9KTsKIH0KIAogdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENs
b3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC03MTMsNyArNzQ1LDggQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENs
b3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVt
b3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1v
dmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVy
IGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBk
dXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KKyAgICBBU1NFUlQoc2Vzc2lvbklk
ID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAgICAg
IFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3RvciYmIGtleVN0YXR1c1ZlY3RvciwgT3B0
aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2FnZSwgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3Mp
IHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC03MjcsMzUgKzc2MCwxNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBT
dHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNW
ZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRoZSBtZXNzYWdl
IGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0
b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2VkKCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIGZv
ciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBpZiBub25lIGlzIGZvdW5kLgotICAgICAg
ICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAg
ICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlz
LmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKEtleVN0YXR1c1ZlY3RvciB7
IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIEtleSB2ZWN0b3IsIGNv
bnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb24sIGFuZAotICAgICAgICAvLyB0
aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3IgdGhpcyBzZXNzaW9uLgotICAgICAgICBh
dXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVlKTsKLSAgICAgICAga2V5cy5yZW1vdmUo
aXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwg
cGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNlZCcgc3RhdHVzLgotICAgICAgICBrZXlT
dGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNW
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3Rh
dHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH0pOwotCiAgICAgICAg
IC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScg
Zm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwt
ZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEtPnNpemUoKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJRERhdGEtPmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChr
ZXkuaWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsK
KyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShr
ZXkuaWQoKS5kYXRhKCksIGtleS5pZCgpLnNpemUoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAg
ICAgIH0KQEAgLTc2Niw2ICs3ODEsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogICAgICAg
ICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBt
ZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCisgICAgbV9rZXlTdG9yZS5yZW1vdmVB
bGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rvciks
IFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9j
bGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4NWIzMTliMWEzOGMxMjE2OTkxOTc1
YjgwMTlhZDJiMTZiMzZjMTQ3Li5hOWU2ZGJiOGY5YjkwODIxZGU3ZTdkY2MxMjI2Zjk2NGY5YmNl
NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9j
bGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAgLTMxLDEwICszMSwxMiBAQAogI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNsdWRlICJDRE1GYWN0b3J5LmgiCi0jaW5j
bHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKICNp
bmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxsaXN0PgogI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDI3ICs3
OSwxMyBAQCBwdWJsaWM6CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChj
b25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkg
ZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGljOgotICAgIHN0cnVjdCBLZXkgewotICAg
ICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFN0cmlu
ZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZURhdGE7Ci0gICAgfTsKLQotICAg
IHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9y
PEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIG11dGFibGUgTG9jayBt
X2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJs
aWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5
PiB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNl
UHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CiBwdWJs
aWM6CiAgICAgQ0RNSW5zdGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNl
Q2xlYXJLZXkoKTsKIAorICAgIC8vIENETUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBl
IGltcGxlbWVudGF0aW9uVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9u
VHlwZTo6Q2xlYXJLZXk7IH0KLQogICAgIFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZp
Z3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1
Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsK
ICAgICBTdWNjZXNzVmFsdWUgc2V0UGVyc2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsK
QEAgLTEwNSw0NyArOTMsODQgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdl
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRl
U2Vzc2lvbigpIGZpbmFsOwotCi0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
a2V5SUREYXRhOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0K
LSAgICAgICAgU3RyaW5nIGtleUlEQXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtl
eVZhbHVlQXNTdHJpbmcoKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShj
b25zdCBLZXkgJm90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVE
YXRhKTsKLSAgICAgICAgICAgIEFTU0VSVChvdGhlci5rZXlWYWx1ZURhdGEpOwotICAgICAgICAg
ICAgcmV0dXJuICprZXlWYWx1ZURhdGEgPT0gKm90aGVyLmtleVZhbHVlRGF0YTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUg
SUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotICAgICAgICAvLyBLZXkn
cyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVu
dHMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBL
ZXkgJmsyKTsKLQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEs
IGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICEob3BlcmF0b3I9PShrMSwgazIpKTsgfQotICAgICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyBy
ZXR1cm4gIW9wZXJhdG9yPT0oazEsIGsyKSAmJiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7
IHJldHVybiAhb3BlcmF0b3I+KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsx
LCBrMik7IH0KLSAgICB9OwotCi0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJveHlDRE07IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UHJv
eHlDRE0+IG1fcHJveHlDRE07CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleT4gewogcHVibGljOgorICAgIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkmIHBhcmVudCkKKyAgICAgICAgOiBt
X3BhcmVudEluc3RhbmNlKHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNl
bnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVy
PiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImLCBM
aWNlbnNlVXBkYXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNl
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFj
ayYmKSBmaW5hbDsKICAgICB2b2lkIGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNl
c3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0
IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFs
OwogICAgIHZvaWQgc3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
cHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgQ0RNSW5zdGFuY2VDbGVhcktl
eSYgbV9wYXJlbnRJbnN0YW5jZTsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworLy8g
VGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVz
ZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJv
eHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRy
PENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7
CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBpbnN0
YW5jZSkKKyAgICAgICAgOiBtX2NkbUluc3RhbmNlKGluc3RhbmNlKQorICAgIHsKKyAgICAgICAg
Ly8gRm9yIG5vdyB3ZSBkb24ndCB1c2UgdGhpcyBsaW5rIGJhY2sgdG8gdGhlICJtYWluLXRocmVh
ZCBpbnN0YW5jZSIsCisgICAgICAgIC8vIGJ1dCBoYXZpbmcgdGhlIGNvbm5lY3Rpb24gcmVhZHkg
bWFkZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgdXNlZnVsCisgICAgICAgIC8vIGluIHRoZSBm
dXR1cmUuCisgICAgICAgIFVOVVNFRF9QQVJBTShtX2NkbUluc3RhbmNlKTsKKyAgICAgICAgaW5p
dGlhbGl6ZUdjcnlwdCgpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DRE1Qcm94eUNsZWFyS2V5KCk7
CisKKyAgICAvLyBGSVhNRTogVGhlcmUncyBhIGxhY2sgb2YgY29uc2lzdGVuY3kgYmV0d2VlbiBT
aGFyZWRCdWZmZXJzLAorICAgIC8vIFZlY3RvcjxjaGFyPidzIGFuZCB7dWludDhfdCosc2l6ZV90
fSBpZGlvbXMgZm9yIHJlcHJlc2VudGluZyBhIGNodW5rIG9mCisgICAgLy8gYnl0ZXMuIEZpeCB0
aGF0IHNvbWVob3cuIE5vdGUgU2hhcmVkQnVmZmVycyBhcmUgZGFuZ2Vyb3VzIHNpbmNlCisgICAg
Ly8gdGhleSdyZSBub3QgdGhyZWFkLXNhZmUgYW5kIHRoaXMgY2xhc3MgbXVzdCBtYWludGFpbgor
ICAgIC8vIHRocmVhZC1zYWZldHksIGJ1dCBtYXliZSBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50
IGNvdWxkIGJlCisgICAgLy8gbWFkZSB0byB3b3JrLCBob3dldmVyIHRoYXQgaGFzIHplcm8gaGVs
cGVycyBmb3IgZHJvcHBpbmcgaW50bworICAgIC8vIGl0ZXJhdG9yLWF3YXJlIC8gY29tcGFyYXRv
ci1hd2FyZSBjb250YWluZXJzLi4uCisgICAgc3RydWN0IGNlbmNEZWNyeXB0Q29udGV4dCB7Cisg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleUlEOworICAgICAgICBzaXplX3Qga2V5SUROdW1CeXRl
czsKKworICAgICAgICBjb25zdCB1aW50OF90KiBpdjsKKyAgICAgICAgc2l6ZV90IGl2TnVtQnl0
ZXM7CisKKyAgICAgICAgdWludDhfdCogZW5jcnlwdGVkQnVmZmVyOworICAgICAgICBzaXplX3Qg
ZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXM7CisKKyAgICAgICAgLy8gRklYTUU6IEdTdHJlYW1lci1z
cGVjaWZpYyBkYXRhIGxheW91dC4KKyAgICAgICAgY29uc3QgdWludDhfdCogc3ViU2FtcGxlc0J1
ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YlNhbXBsZXNCdWZmZXJOdW1CeXRlczsKKyAgICAgICAg
c2l6ZV90IG51bVN1YnNhbXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25z
dCB7IHJldHVybiBudW1TdWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNv
bmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJ
WE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2Ft
cGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0
byBkbyB3aXRoIGl0LgorICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhN
RTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJl
CisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBz
Y2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/
CisgICAgYm9vbCBjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQm
KTsKKyAgICBib29sIGNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4
dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYp
OworICAgIGJvb2wgY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOwor
CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9jZG1JbnN0YW5jZTsKKworICAgIC8vIEZJWE1F
OiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBzb21ldGhpbmcgaW4gV2ViQ29yZSBmb3IgY3J5cHRv
Li4uCisgICAgZ2NyeV9jaXBoZXJfaGRfdCBtX2djcnlIYW5kbGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApp
bmRleCA0ZmM2Nzg3ZGQ4ZDkwN2NhZDZhMjc3ZjM5YjFlZDMyZWQ2NzlhNmQ4Li4xOGFhYTYwYWE3
OTc0YTI1MDkzMDg2ZGIxZWYzMmY5N2FjZjNjNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCiAKLSNpbmNsdWRlICJDRE1DbGVhcktleS5oIgogI2luY2x1ZGUgIkNETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNp
bmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgpAQCAtMjEzLDcgKzIxMiw2IEBAIHN0YXRpYyBjb25z
dCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQogCiB2b2lkIENETUZh
Y3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoVmVjdG9yPENETUZhY3RvcnkqPiYgZmFj
dG9yaWVzKQogewotICAgIGZhY3Rvcmllcy5hcHBlbmQoJkNETUZhY3RvcnlDbGVhcktleTo6c2lu
Z2xldG9uKCkpOwogICAgIGZhY3Rvcmllcy5hcHBlbmQoJkNETUZhY3RvcnlGYWlyUGxheVN0cmVh
bWluZzo6c2luZ2xldG9uKCkpOwogCiAgICAgSW5pdERhdGFSZWdpc3RyeTo6c2hhcmVkKCkucmVn
aXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgp
LCB7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRpemVTaW5mLCBDRE1Qcml2YXRl
RmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaW5mIH0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFu
Y2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLmgKaW5kZXggNDc3MmZjYjMyMzZkMzkwMjk1MzRjNDZmYjRmMTAyOTk3ODNlNmNiNi4uYjEx
ZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRkZTg2ZjNkZDk5NGNjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQy5oCkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U2Vy
dmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CiAgICAgU3VjY2Vzc1Zh
bHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgUmVmUHRy
PENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotICAgIFJlZlB0cjxQ
cm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAKICAg
ICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDY2NjlmNjI2YWZhZThh
YjFjNjNhY2MxZTMzOWQ2OTRlZDllMjE5NTIuLjM4NWYyMmFmMGJkMjU2NmRiOTI3Y2U1MmM1OGFk
OTU1Mjc2ZGE2Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwCkBAIC0xNzc0LDYgKzE3NzQsNDQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIH0sIHRoaXMs
IG51bGxwdHIpOwogfQogCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YmxvY2tX
YWl0aW5nRm9yQ0RNQXR0YWNobWVudChHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmIChp
c01haW5UaHJlYWQoKSkgeworICAgICAgICBHU1RfRVJST1IoImNhbid0IGJsb2NrIHRoZSBtYWlu
IHRocmVhZCB3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEluaXREYXRh
IGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11
dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2
ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5l
dmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygp
LnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1F
dmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVt
SWQgPSBudWxscHRyOworICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRL
ZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAgICAgICBpbml0RGF0YS5hcHBl
bmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAgICAgICAgICAgIG1faGFuZGxlZFByb3Rl
Y3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3ZlKGluaXRE
YXRhKSk7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEg
Q0RNIGluc3RhbmNlIik7CisKKyAgICBib29sIGRpZENETUF0dGFjaCA9IGZhbHNlOworICAgIHsK
KyAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1BdHRhY2ht
ZW50TXV0ZXgpOworICAgICAgICBkaWRDRE1BdHRhY2ggPSBtX2NkbUF0dGFjaG1lbnRDb25kaXRp
b24ud2FpdEZvcihtX2NkbUF0dGFjaG1lbnRNdXRleCwgNF9zLCBbdGhpc10oKSB7CisgICAgICAg
ICAgICByZXR1cm4gaXNDRE1BdHRhY2hlZCgpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZGlkQ0RNQXR0YWNoOworfQorCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKIHsKICAgICBpZiAoR1NU
X01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiAm
JiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKQEAgLTE4MDksNDEgKzE4NDcsOCBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgaWYgKCFnX3N0cmNtcDAo
Y29udGV4dFR5cGUsICJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikpIHsKLSAg
ICAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1IoImNhbid0
IGhhbmRsZSBkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBt
ZXNzYWdlIGluIHRoZSBtYWluIHRocmVhZCIpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZHJtLXByZWZlcnJlZC1kZWNyeXB0
aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSIpOwotCi0gICAgICAgIEluaXREYXRh
IGluaXREYXRhOwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90
ZWN0aW9uTXV0ZXgpOwotICAgICAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0
aW9uU3lzdGVtRXZlbnRzKG1lc3NhZ2UpOwotICAgICAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAl
enUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2
YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50
IDogcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKSkgewotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIEdz
dEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNl
X3Byb3RlY3Rpb24oZXZlbnQuZ2V0KCksICZldmVudEtleVN5c3RlbUlkLCAmZGF0YSwgbnVsbHB0
cik7Ci0KLSAgICAgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQs
IGRhdGF9KTsKLSAgICAgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChH
U1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0RGF0YSkp
OwotCi0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBD
RE0gaW5zdGFuY2UiKTsKLQotICAgICAgICBib29sIGRpZENETUF0dGFjaCA9IGZhbHNlOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xkTG9jayht
X2NkbUF0dGFjaG1lbnRNdXRleCk7Ci0gICAgICAgICAgICBkaWRDRE1BdHRhY2ggPSBtX2NkbUF0
dGFjaG1lbnRDb25kaXRpb24ud2FpdEZvcihtX2NkbUF0dGFjaG1lbnRNdXRleCwgNF9zLCBbdGhp
c10oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpZENETUF0dGFjaCAmJiAhaXNQbGF5
ZXJTaHV0dGluZ0Rvd24oKSAmJiAhbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIGJvb2wgY2RtQXR0YWNoZWQgPSBibG9ja1dhaXRpbmdGb3JDRE1BdHRhY2ht
ZW50KG1lc3NhZ2UpOworICAgICAgICBpZiAoY2RtQXR0YWNoZWQgJiYgIWlzUGxheWVyU2h1dHRp
bmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVN
RVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsK
ICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtl
eSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1J
bnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVp
ZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogCkBAIC0xODUxLDEwICsxODU2LDEx
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShH
c3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3Ry
dWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwog
ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRp
b24tc3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVs
bHB0cik7CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChH
U1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXplZCIp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgR1NUX1dBUk5JTkcoIndhaXRpbmcgZm9yIGEgQ0RNIGZhaWxlZCwgbm8g
Q0RNIGF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKQEAgLTIxODQsMTkgKzIxOTAsNiBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNz
YWdlKQogICAgICAgICAgICAgcHJvY2Vzc01wZWdUc1NlY3Rpb24oc2VjdGlvbik7CiAgICAgICAg
ICAgICBnc3RfbXBlZ3RzX3NlY3Rpb25fdW5yZWYoc2VjdGlvbik7CiAgICAgICAgIH0KLSNlbmRp
ZgotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1
Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLXdhaXRpbmctZm9yLWtleSIpKSB7Ci0gICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0td2FpdGluZy1mb3Ita2V5
IG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKLSAgICAg
ICAgICAgIHNldFdhaXRpbmdGb3JLZXkodHJ1ZSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhl
IGRlY3J5cHRvcnMgc2hvdWxkIGJlIGFibGUgdG8gYXR0ZW1wdCB0byBkZWNyeXB0IGFmdGVyIGJl
aW5nIGNyZWF0ZWQgYW5kIGxpbmtlZCBpbiBhIHBpcGVsaW5lIGJ1dCBjdXJyZW50bHkgdGhleSBh
cmUgbm90IGFuZCBjdXJyZW50Ci0gICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmUgZG9lcyBub3Qg
bWFrZSB0aGlzIHZlcnkgZWFzeS4gRm9ydHVuYXRlbHksIHRoZSBhcmNoIHdpbGwgY2hhbmdlIHNv
b24gYW5kIGl0IGRvZXMgbm90IHBheSBvZmYgdG8gZml4IHRoaXMgbm93IHdpdGggc29tZXRoaW5n
IHRoYXQgY291bGQgYmUKLSAgICAgICAgICAgIC8vIG1vcmUgY29udm9sdXRlZC4gSW4gdGhlIG1l
YW50aW1lLCBmb3JjZSBhdHRlbXB0IHRvIGRlY3J5cHQgd2hlbiB0aGV5IGdldCBibG9ja2VkLgot
ICAgICAgICAgICAgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0ta2V5LXJl
Y2VpdmVkIikpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRy
bS1rZXktcmVjZWl2ZWQgbWVzc2FnZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVz
c2FnZSkpOwotICAgICAgICAgICAgc2V0V2FpdGluZ0ZvcktleShmYWxzZSk7Ci0gICAgICAgIH0K
ICNlbmRpZgogICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVy
ZSwgImh0dHAtaGVhZGVycyIpKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJQcm9jZXNzaW5nIEhUVFAgaGVhZGVyczogJSIgR1NUX1BUUl9GT1JNQVQsIHN0cnVj
dHVyZSk7CkBAIC0zNzEwLDE0ICszNzAzLDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjZG1JbnN0YW5jZUF0dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5zdGFuY2U7CiAKLSAg
ICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3
KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKKyAgICBtX2NkbUluc3RhbmNlID0gcmVpbnRl
cnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3RhbmNlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3RhbmNlLT5zZXRQbGF5ZXIobV9wbGF5
ZXIpOworCisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9j
b250ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0dXJlKiBj
b250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQu
Z2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5z
dGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwg
bnVsbHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1w
cm94eSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgpLCBudWxs
cHRyKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5l
LmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0Iiwg
bV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29u
dGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hvbGRlciBs
b2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBhbGwgd2Fp
dGVycywgc2luY2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgd2FpdGlu
ZyBmb3IgYSBDRE0uCkBAIC0zNzM5LDcgKzM3MzUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBpbnN0
YW5jZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7CiAg
ICAgbV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFM
U0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2Nv
bnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVudF9zZXRf
Y29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiB9
CiAKQEAgLTM3NzIsNTEgKzM3NjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlhbGl6
YXRpb25EYXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9v
bCBpc1dhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBu
b3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQg
dGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoImlzV2Fp
dGluZ0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcoaXNX
YWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAg
aWYgKGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2FpdGluZ0Zv
cktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndhaXRp
bmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5
KSk7Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3RhbmNlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxl
bWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKLQot
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBh
ZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVj
dHVyZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAgICBp
ZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3RfZWxl
bWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdTVF9U
UkFDRSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUg
Pj0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUg
cGlwZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlz
IHNldCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQg
YXNrIHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJh
dG9yPiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUu
Z2V0KCkpKSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0OwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xk
KGl0ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRl
ciBkYXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVu
dCA9IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAgICAg
ICAgR3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAgIHJl
dHVybiAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1l
bnRfcXVlcnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnku
Z2V0KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9S
RVNZTkMpCi0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQo
KSk7Ci0gICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZ
TkMpOwotICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQot
ICAgICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7Ci0g
ICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAgICAg
ICAgR1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJl
c3VsdCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRl
eCBiMmJiNTQxYTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li5mMzM2ZTZiZTliYWZm
MzZkNDNjMjc4NzM5NGIxY2NiNjUwMGU3NTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBf
R3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNlbmRpZgor
CiB0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5cGVk
ZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1Y3QgX0dz
dEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVjdGVkOgog
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1lbnRNdXRl
eDsKICAgICBDb25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJlZlB0cjxj
b25zdCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VQ
cm94eT4gbV9jZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1
YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0PHVp
bnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jZG1JbnN0
YW5jZTsgfQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CiAg
ICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAgICB2
b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgYm9vbCBibG9ja1dhaXRpbmdGb3JDRE1B
dHRhY2htZW50KEdzdE1lc3NhZ2UqKTsKICNlbmRpZgogCiAgICAgQXRvbWljPGJvb2w+IG1faXNQ
bGF5ZXJTaHV0dGluZ0Rvd247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5
NzNiZTRmMjIxYWU3YzBlOTM0YTkuLjU3NGUzMDg5OTNhYTMxYjQ0ZDQ5NDFmZDRmNWNhMDA3OTc3
ZDA0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0zNywxMiArMzcsMTEgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
b2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJ
QV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUpKQogc3RydWN0
IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgewotICAgIFJlZlB0cjxQcm94eUNE
TUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBnY3J5X2NpcGhlcl9oZF90IGhhbmRsZTsKKyAgICBS
ZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gcHJveHlDRE07CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQdHI8UHJveHlDRE0+KTsKK3N0YXRp
YyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7CiBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtl
eWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZm
ZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CkBAIC04NCw3ICs4Myw3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Mo
a2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1F
VXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKLSAgICBjZW5jQ2xhc3MtPmhhbmRsZUtleVJlc3Bv
bnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFuZGxlS2V5UmVzcG9uc2UpOworICAgIGNlbmNDbGFz
cy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQp
OwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5cHQpOwog
CiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBAIC05Myw2MSArOTIsMzIgQEAgc3RhdGljIHZvaWQg
d2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9p
bml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmKQogewogICAgIFdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dF
VF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2VsZi0+cHJpdiA9IHByaXY7CiAgICAgbmV3IChwcml2
KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKLSAgICBpZiAoZ2NyeV9lcnJv
cl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHByaXYtPmhhbmRsZSksIEdDUllfQ0lQSEVS
X0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkpIHsKLSAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0ZSBBRVMgMTI4IENU
UiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICBBU1NF
UlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZiA9IFdFQktJVF9N
RURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQ
cml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBnY3J5X2NpcGhlcl9jbG9zZShwcml2LT5o
YW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsK
IAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3Qp
KTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSkKK3N0YXRp
YyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBwcm94eUNETSkKIHsKICAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRf
UFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgcHJpdi0+cHJveHlD
RE0gPSByZWludGVycHJldF9jYXN0PFByb3h5Q0RNQ2xlYXJLZXkqPihwcm94eUNETS5nZXQoKSk7
CisgICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PENETVByb3h5Q2xlYXJLZXkq
Pihwcm94eUNETS5nZXQoKSk7CiAgICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOwogfQogCi1zdGF0
aWMgYm9vbCBmaW5kQW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSog
cHJpdiwgY29uc3QgU3RyaW5nJiYga2V5SUQpCitzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdz
dEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJzYW1w
bGVDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKQogewotICAgIFN0cmluZyBrZXlW
YWx1ZTsKLQotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogcHJpdi0+cHJveHlDRE0tPmlzb2xh
dGVkS2V5cygpKSB7Ci0gICAgICAgIGlmIChrZXkua2V5SUREYXRhID09IGtleUlEKSB7Ci0gICAg
ICAgICAgICBrZXlWYWx1ZSA9IGtleS5rZXlWYWx1ZURhdGE7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChrZXlWYWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZmFpbGVkIHRvIGZpbmQgYSBkZWNyeXB0aW9uIGtl
eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUKGtleVZhbHVl
LnNpemVJbkJ5dGVzKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBl
cnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIGtleVZhbHVlLmNoYXJhY3Rl
cnM4KCksIGtleVZhbHVlLnNpemVJbkJ5dGVzKCkpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1QocHJpdiwgImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVy
cm9yKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
TUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxm
KSk7CiAKLXN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1
YlNhbXBsZXNCdWZmZXIpCi17Ci0gICAgaWYgKCFpdkJ1ZmZlcikgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJubyBJViBidWZmZXIiKTsKKyAgICBpZiAoIWl2QnVmZmVyIHx8ICFr
ZXlJREJ1ZmZlciB8fCAhYnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
ImludmFsaWQgZGVjcnlwdCgpIHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC0xNTcsMjcgKzEyNyw2IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpF
XTsKLSAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSA4KSB7Ci0gICAgICAgIG1lbXNl
dChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRh
dGEoKSwgOCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVmZmVyLT5z
aXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVm
ZmVyLT5kYXRhKCksIENMRUFSS0VZX1NJWkUpOwotICAgIH0KLQotICAgIFdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9Q
UklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBnY3J5X2Vycm9yX3Qg
Y2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIsIENMRUFS
S0VZX1NJWkUpOwotICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJnY3J5X2NpcGhlcl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihj
aXBoZXJFcnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFi
dWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gYnVmZmVyIHRvIGRl
Y3J5cHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGF1dG8gbWFwcGVk
S2V5SWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShrZXlJREJ1ZmZl
ciwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7CiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAga2V5IGlkIGJ1ZmZlciIpOwpA
QCAtMTkwLDcyICsxMzksMjkgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZpbmRBbmRTZXRLZXkocHJpdiwgU3RyaW5nKG1hcHBl
ZEtleUlkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCkpKTsKLQotICAg
IHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKLSAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9IDA7Ci0K
LSAgICBpZiAoIXN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgIC8vIEZ1bGwgc2FtcGxlIGVuY3J5
cHRpb24uCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGVuY3J5
cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KLSAgICAgICAgaWYgKG1hcHBl
ZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVy
X2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVy
LT5zaXplKCksIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBm
YWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIHN1YlNhbXBsZXNCdWZmZXIgaXNuJ3QgbnVsbC4K
LSAgICBpZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRXJyb3IsIHRoZSBzdWJTYW1wbGVCdWZmZXIgaXMgbnVsbCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxlIGVuY3J5cHRpb24uCi0gICAgYXV0
byBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVh
dGUoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBlZFN1YlNh
bXBsZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBHVW5pcXVlUHRyPEdzdEJ5dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFkZXJfbmV3
KG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+
c2l6ZSgpKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXpl
OiAlenUiLCBwb3NpdGlvbiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgd2hpbGUgKHBv
c2l0aW9uIDwgbWFwcGVkQnVmZmVyLT5zaXplKCkpIHsKLSAgICAgICAgZ3VpbnQxNiBuQnl0ZXND
bGVhciA9IDA7Ci0gICAgICAgIGd1aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKLQotICAgICAg
ICBpZiAoc2FtcGxlSW5kZXggPCBzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAgICAgaWYgKCFn
c3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNDbGVhcikK
LSAgICAgICAgICAgICAgICB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUocmVhZGVy
LmdldCgpLCAmbkJ5dGVzRW5jcnlwdGVkKSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgInVuc3VwcG9ydGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0Vu
Y3J5cHRlZCA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247Ci0gICAgICAgIH0KLQot
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUg
Ynl0ZXMgY2xlYXIgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVk
QnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0Ns
ZWFyOwotICAgICAgICBpZiAobkJ5dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQg
KHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci0+
c2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhl
cl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbiwg
bkJ5dGVzRW5jcnlwdGVkLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewot
ICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUgaW5kZXgg
JXUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJvcihjaXBo
ZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICBSZWZQdHI8R3N0
TWFwcGVkQnVmZmVyPiBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyOworICAgIENETVByb3h5Q2xlYXJL
ZXk6OmNlbmNEZWNyeXB0Q29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQua2V5SUQgPSBtYXBw
ZWRLZXlJZEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHQua2V5SUROdW1CeXRlcyA9IG1hcHBl
ZEtleUlkQnVmZmVyLT5zaXplKCk7CisgICAgY29udGV4dC5pdiA9IG1hcHBlZElWQnVmZmVyLT5k
YXRhKCk7CisgICAgY29udGV4dC5pdk51bUJ5dGVzID0gbWFwcGVkSVZCdWZmZXItPnNpemUoKTsK
KyAgICBjb250ZXh0LmVuY3J5cHRlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZlci0+ZGF0YSgpOworICAg
IGNvbnRleHQuZW5jcnlwdGVkQnVmZmVyTnVtQnl0ZXMgPSBtYXBwZWRCdWZmZXItPnNpemUoKTsK
KyAgICBjb250ZXh0Lm51bVN1YnNhbXBsZXMgPSBzdWJzYW1wbGVDb3VudDsKKyAgICBpZiAoIXN1
YnNhbXBsZUNvdW50KQorICAgICAgICBjb250ZXh0LnN1YlNhbXBsZXNCdWZmZXIgPSBudWxscHRy
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3Vic2FtcGxlc0J1ZmZlcik7CisgICAgICAg
IG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShzdWJzYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBpZiAoIW1hcHBlZFN1
YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZh
aWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIGNvbnRleHQuc3ViU2FtcGxlc0J1ZmZlciA9IG1hcHBlZFN1
YlNhbXBsZXNCdWZmZXItPmRhdGEoKTsKKyAgICAgICAgY29udGV4dC5zdWJTYW1wbGVzQnVmZmVy
TnVtQnl0ZXMgPSBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNLT5jZW5jRGVjcnlwdChjb250
ZXh0KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCAzNjgzZDA0NzQ4NjBmNmVm
ODE3ZjMxY2RjMTVlNDhhYzE4NmMwMzQ0Li45ZWRjZWE1OWI0MzkwNzRjMTk2M2I3ZGFkMDViNzY0
MDM2ZWFiZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTI1LDM0ICsyNSwz
NCBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKIAor
I2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAKLXVzaW5nIFdlYkNvcmU6OlByb3h5Q0RNOwordXNp
bmcgV2ViQ29yZTo6Q0RNUHJveHk7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NFTkNfREVDUllQ
VF9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdF
QktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJvdGVjdGlvbkV2ZW50OwotICAg
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE07Ci0gICAgYm9vbCBrZXlSZWNlaXZlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCB3YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKLSAgICBMb2NrIG11dGV4Owot
ICAgIENvbmRpdGlvbiBjb25kaXRpb247CisgICAgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eTsK
KworICAgIExvY2sgY2RtQXR0YWNobWVudE11dGV4OworICAgIENvbmRpdGlvbiBjZG1BdHRhY2ht
ZW50Q29uZGl0aW9uOwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heFNlY29uZHNU
b1dhaXRGb3JDRE1Qcm94eSA9IDVfczsKKwogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNo
YW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKIHN0YXRp
YyB2b2lkIGZpbmFsaXplKEdPYmplY3QqKTsKIHN0YXRpYyBHc3RDYXBzKiB0cmFuc2Zvcm1DYXBz
KEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdENhcHMqLCBHc3RDYXBzKik7
CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0q
LCBHc3RCdWZmZXIqKTsKIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VU
cmFuc2Zvcm0qLCBHc3RFdmVudCopOwotc3RhdGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RC
YXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RRdWVyeSopOwotc3RhdGljIGJvb2wg
aXNDRE1JbnN0YW5jZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
Kik7CiBzdGF0aWMgdm9pZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0Kik7CiAK
LQogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRp
b25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJr
aXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeQogCkBAIC03
Niw3ICs3Niw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9k
ZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDb21tb25FCiAgICAgYmFzZVRyYW5zZm9ybUNs
YXNzLT50cmFuc2Zvcm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSKHRyYW5zZm9ybUNhcHMpOwog
ICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFM
U0U7CiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQ
VFIoc2lua0V2ZW50SGFuZGxlcik7Ci0gICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5xdWVyeSA9IEdT
VF9ERUJVR19GVU5DUFRSKHF1ZXJ5SGFuZGxlcik7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSkpOwogfQpAQCAtMTc3LDI5ICsxNzYsMjAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJh
bnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikK
IHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BS
SVZBVEUoc2VsZik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwogCi0gICAg
Ly8gVGhlIGtleSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldC4gV2FpdCBmb3IgaXQu
Ci0gICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcgZm9yIGl0Iik7Ci0gICAgICAg
IGlmIChHU1RfU1RBVEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCB8fCAo
R1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0gR1NUX1NUQVRFX1ZPSURfUEVO
RElORyAmJiBHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9Q
QVVTRUQpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJjYW4ndCBwcm9j
ZXNzIGtleSByZXF1ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0YXRlIik7Ci0gICAgICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICAgICAgfQotICAgICAgICAvLyBT
ZW5kICJkcm0tY2RtLWluc3RhbmNlLW5lZWRlZCIgbWVzc2FnZSB0byB0aGUgcGxheWVyIHRvIHJl
c2VuZCB0aGUgQ0RNSW5zdGFuY2UgaWYgYXZhaWxhYmxlIGFuZCBpbmZvcm0gd2UgYXJlIHdhaXRp
bmcgZm9yIGtleS4KLSAgICAgICAgcHJpdi0+d2FpdGluZ0ZvcktleSA9IHRydWU7Ci0gICAgICAg
IGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2Vf
bmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRy
bS13YWl0aW5nLWZvci1rZXkiKSkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0
dGFjaG1lbnRNdXRleCk7CiAKLSAgICAgICAgcHJpdi0+Y29uZGl0aW9uLndhaXRGb3IocHJpdi0+
bXV0ZXgsIFNlY29uZHMoNSksIFtwcml2XSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJpdi0+a2V5
UmVjZWl2ZWQ7CisgICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVkcyB0byBiZSBuZWdvdGlhdGVk
IGJlZm9yZSB3ZSBjYW4gYmVnaW4gZGVjcnlwdGlvbi4KKyAgICBpZiAoIXByaXYtPmNkbVByb3h5
KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3QgYXZhaWxhYmxlLCBn
b2luZyB0byB3YWl0IGZvciBpdCIpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0
aW9uLndhaXRGb3IocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4LCBNYXhTZWNvbmRzVG9XYWl0Rm9y
Q0RNUHJveHksIFtwcml2XSB7CisgICAgICAgICAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiAg
ICAgICAgIH0pOwotICAgICAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSIpOworICAgICAgICBp
ZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJDRE1Qcm94eSB3YXMgbm90IHJldHJpZXZlZCBpbiB0aW1lIik7CiAgICAgICAgICAgICByZXR1
cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQsIGNvbnRpbnVpbmciKTsKLSAgICAgICAgcHJpdi0+
d2FpdGluZ0ZvcktleSA9IGZhbHNlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlQoc2VsZiksIGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2Vs
ZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJkcm0ta2V5LXJlY2VpdmVkIikpKTsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdyBhdmFpbGFibGUgd2l0aCBhZGRyZXNz
ICVwIiwgcHJpdi0+Y2RtUHJveHkuZ2V0KCkpOwogICAgIH0KIAogICAgIEdzdFByb3RlY3Rpb25N
ZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UHJvdGVjdGlvbk1ldGEq
Pihnc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVyKSk7CkBAIC0yMDcsMzIgKzE5
NywzMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFu
c2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24gbWV0YWRhdGEgZnJvbSBidWZmZXIg
JXAiLCBidWZmZXIpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAg
ICB9CisgICAgYXV0byByZW1vdmVQcm90ZWN0aW9uTWV0YU9uUmV0dXJuID0gbWFrZVNjb3BlRXhp
dChbYnVmZmVyLCBwcm90ZWN0aW9uTWV0YV0geworICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9t
ZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsK
KyAgICB9KTsKIAogICAgIHVuc2lnbmVkIGl2U2l6ZTsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVf
Z2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdl9zaXplIiwgJml2U2l6ZSkpIHsKICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBpdl9zaXplIik7Ci0g
ICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdz
dE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NV
UFBPUlRFRDsKICAgICB9CiAKICAgICBnYm9vbGVhbiBlbmNyeXB0ZWQ7CiAgICAgaWYgKCFnc3Rf
c3RydWN0dXJlX2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiZW5jcnlwdGVkIiwg
JmVuY3J5cHRlZCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IGdldCBlbmNyeXB0ZWQgZmxhZyIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1
ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgaWYgKCFpdlNp
emUgfHwgIWVuY3J5cHRlZCkgewotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKKyAgICBpZiAo
IWl2U2l6ZSB8fCAhZW5jcnlwdGVkKQogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAg
fQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVjdGlvbiBtZXRhOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOwogCiAgICAgdW5zaWduZWQgc3ViU2Ft
cGxlQ291bnQ7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRh
LT5pbmZvLCAic3Vic2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNvdW50KSkgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZV9jb3VudCIpOwot
ICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgfQogCkBAIC0yNDIsMTcgKzIzMCwxOSBAQCBzdGF0aWMgR3N0Rmxvd1Jl
dHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciog
YnVmZmVyKQogICAgICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rp
b25NZXRhLT5pbmZvLCAic3Vic2FtcGxlcyIpOwogICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAg
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1YnNhbXBsZXMi
KTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJl
dF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAgICAgc3ViU2FtcGxlc0J1ZmZl
ciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKCFzdWJTYW1wbGVz
QnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJUaGVyZSBpcyBu
byBzdWJzYW1wbGVzIGJ1ZmZlciwgYnV0IGEgcG9zaXRpdmUgc3Vic2FtcGxlIGNvdW50Iik7Cisg
ICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEt
PmluZm8sICJraWQiKTsKIAogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBrZXkgaWQgZm9yIGJ1ZmZlciIpOwotICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CiAgICAgfQogICAgIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZl
cih2YWx1ZSk7CkBAIC0yNjAsNyArMjUwLDYgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNm
b3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAg
ICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAi
aXYiKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkZhaWxlZCB0byBnZXQgSVYgZm9yIHNhbXBsZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92
ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEp
KTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCkBAIC0y
NzAsNzEgKzI1OSw5MSBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdz
dEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIEdTVF9UUkFDRV9P
QkpFQ1Qoc2VsZiwgImRlY3J5cHRpbmciKTsKICAgICBpZiAoIWtsYXNzLT5kZWNyeXB0KHNlbGYs
IGl2QnVmZmVyLCBrZXlJREJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1wbGVDb3VudCwgc3ViU2FtcGxl
c0J1ZmZlcikpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRGVjcnlwdGlvbiBm
YWlsZWQiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1Rf
RkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEo
YnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAg
IHJldHVybiBHU1RfRkxPV19PSzsKIH0KIAotc3RhdGljIGJvb2wgaXNDRE1JbnN0YW5jZUF2YWls
YWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQorc3RhdGljIGJv
b2wgaXNDRE1Qcm94eUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAg
cmV0dXJuIHByaXYtPmNkbVByb3h5OworfQogCi0gICAgQVNTRVJUKHByaXYtPm11dGV4LmlzTG9j
a2VkKCkpOwotCi0gICAgaWYgKCFwcml2LT5wcm94eUNETSkgewotICAgICAgICBHUmVmUHRyPEdz
dENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQoR1NU
X0VMRU1FTlQoc2VsZiksICJkcm0tY2RtLWluc3RhbmNlIikpOwotICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIEdTdHJlYW1lciBkb2N1bWVudGF0aW9uLCBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBj
b250ZXh0LCB3ZSBzaG91bGQgcnVuIGEgZG93bnN0cmVhbSBxdWVyeSwgdGhlbiBhbiB1cHN0cmVh
bSBvbmUgYW5kIHRoZW4gc2VuZCBhIGJ1cwotICAgICAgICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNh
c2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAo
cGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8gc29s
dmUgaXQuIEEgbWVzc2FnZQotICAgICAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxh
eWVyIHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBh
bmQgaWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBv
bmUgYXMgaXQgaXMKLSAgICAgICAgLy8gc29tZXRoaW5nIHByb3ZpZGVkIGJ5IGNyb3NzcGxhdGZv
cm0gY29kZS4gVGhpcyBtZWFucyB0aGF0IHdlIHdvbid0IGJlIGFibGUgdG8gYW5zd2VyIHRoZSBi
dXMgcmVxdWVzdCBpbiBhbnkgd2F5IGVpdGhlci4gU3VtbWluZyB1cCwgbmVpdGhlciBxdWVyaWVz
IG5vciBidXMKLSAgICAgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgotICAgICAgICBp
ZiAoY29udGV4dCkgewotICAgICAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X3ZhbHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSks
ICJjZG0taW5zdGFuY2UiKTsKLSAgICAgICAgICAgIHByaXYtPnByb3h5Q0RNID0gdmFsdWUgPyBy
ZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDog
bnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChwcml2LT5wcm94eUNETSkKLSAgICAgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBhIG5ldyBDRE0gcHJveHkgaW5zdGFu
Y2UgJXAsIHJlZmNvdW50ICV1IiwgcHJpdi0+cHJveHlDRE0uZ2V0KCksIHByaXYtPnByb3h5Q0RN
LT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2Ugd2FzIGRldGFjaGVkIik7CitzdGF0aWMgQ0RN
UHJveHkqIHJlcXVlc3RDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAi
ZHJtLWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkgPSBudWxscHRyOworCisgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3Qg
ZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4g
YW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAgICAvLyBtZXNzYWdlLiBJbiB0
aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhl
IGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcg
dG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBw
bGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNl
IGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9y
IG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3Jt
IGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVz
IHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBu
b3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgorICAgIGlmIChjb250ZXh0
KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLXByb3h5Iik7
CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJveHkgPSByZWludGVycHJldF9j
YXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICAgICAg
aWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVj
ZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByb3h5LCBw
cm94eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETVBy
b3h5IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZh
aWxhYmxlICVzIiwgYm9vbEZvclByaW50aW5nKHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAg
cmV0dXJuIHByaXYtPnByb3h5Q0RNOworc3RhdGljIHZvaWQgYXR0YWNoQ0RNUHJveHkoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgQ0RNUHJveHkqIHByb3h5KQorewor
ICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBy
aXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiQXR0
YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHByaXYtPmNkbVByb3h5ID0gcHJveHk7
CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkpOworICAg
IHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICghaXNDRE1Qcm94eUF2YWlsYWJsZShz
ZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAgICAgICBDRE1Q
cm94eSogcHJveHkgPSByZXF1ZXN0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAg
ICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7
CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZy
b20gY29udGV4dCIpOworICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogc3Rh
dGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdz
dEV2ZW50KiBldmVudCkKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7Ci0gICAgV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9D
TEFTUyhzZWxmKTsKICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAorICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1CisgICAgLy8g
V2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4K
KyAgICAvLyBhZGRpdGlvbiB0byBvdXQtb2YtYmFuZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNr
LCBhZnRlciBhCisgICAgLy8gcHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55
IGZ1dHVyZSBwcm90ZWN0aW9uCisgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkg
dGhlIGRlbXV4ZXIsIHNvIHRoZXkgbXVzdCBiZQorICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KICAg
ICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkgewogICAgIGNhc2UgR1NUX0VWRU5UX0NV
U1RPTV9ET1dOU1RSRUFNX09PQjogewotICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1NQotICAgICAgICAvLyBXZSBzaG91bGQgYmUg
aGFuZGxpbmcgcHJvdGVjdGlvbiBldmVudHMgaW4gdGhpcyBjbGFzcyBpbgotICAgICAgICAvLyBh
ZGRpdGlvbiB0byBvdXQtb2YtYmFuZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBh
Ci0gICAgICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1
cmUgcHJvdGVjdGlvbgotICAgICAgICAvLyBldmVudHMgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0
aGUgZGVtdXhlciwgc28gdGhlIG11c3QgYmUKLSAgICAgICAgLy8gaGFuZGxlZCBpbiBoZXJlLgot
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIGlmICghaXND
RE1JbnN0YW5jZUF2YWlsYWJsZShzZWxmKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiTm8gQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSIpOwotICAgICAgICAgICAgcmVzdWx0
ID0gRkFMU0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChr
bGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlDRE0pKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQiKTsKLSAgICAgICAgICAg
IHByaXYtPmtleVJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByaXYtPmNvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKLSAgICAgICAgfQogCisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkhhbmRsaW5nIE9PQiIpOworICAgICAgICByZXN1bHQgPSBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2
YWlsYWJsZShzZWxmKTsKICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKLSAgICAgICAg
cmVzdWx0ID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0z
NDUsMTYgKzM1NCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VU
cmFuc2Zvcm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywg
R3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkqIHF1ZXJ5KQotewotICAgIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKHF1ZXJ5KSwgImFu
eS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKHRyYW5zKTsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVCh0cmFucywg
ImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IHF1ZXJ5LCB3YWl0aW5nZm9ya2V5ICVzIiwg
Ym9vbEZvclByaW50aW5nKHByaXYtPndhaXRpbmdGb3JLZXkpKTsKLSAgICAgICAgcmV0dXJuIHBy
aXYtPndhaXRpbmdGb3JLZXk7Ci0gICAgfQotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1f
Q0xBU1MocGFyZW50X2NsYXNzKS0+cXVlcnkodHJhbnMsIGRpcmVjdGlvbiwgcXVlcnkpOwotfQot
CiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxl
bWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChlbGVt
ZW50KTsKQEAgLTM2Myw3ICszNjIsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hh
bmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbgogICAgIHN3
aXRjaCAodHJhbnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9f
UkVBRFk6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsK
LSAgICAgICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICBwcml2LT5jZG1B
dHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKQEAgLTM4MCwxMiArMzc5LDE0IEBAIHN0YXRpYyB2b2lkIHNl
dENvbnRleHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCogY29udGV4dCkKIHsKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElB
X0NFTkNfREVDUllQVChlbGVtZW50KTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUoc2VsZik7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBr
bGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOwogCi0gICAg
aWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0taW5zdGFu
Y2UiKSkgewotICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRf
dmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1pbnN0YW5jZSIp
OwotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIHByaXYt
PnByb3h5Q0RNID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9n
ZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+cHJveHlDRE0uZ2V0KCkp
OworICAgIGlmIChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2Rt
LXByb3h5IikpIHsKKyAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0tcHJveHki
KTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsK
KyAgICAgICAgcHJpdi0+Y2RtUHJveHkgPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJv
eHkqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5j
ZG1Qcm94eS5nZXQoKSk7CisgICAgICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHBy
aXYtPmNkbVByb3h5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3Ry
ZWFtZXIuaAppbmRleCAwNjUxZGZiOWMzYmU5NTk0OGQzYTllOThkZTZlZDhkNGU4ZjFmYTVkLi44
NTc1YTA3MTAyYmQxMzNmOTI1ZGUxYTA3YWRjOTIyYzdhMDU4NDJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JH
U3RyZWFtZXIuaApAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgVVNFKEdTVFJFQU1FUikKIAotI2luY2x1ZGUgPENETUluc3RhbmNlLmg+CisjaW5jbHVk
ZSA8Q0RNUHJveHkuaD4KICNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+CiAj
aW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDggKzU1
LDggQEAgc3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3Mgewog
ICAgIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAogICAgIGNvbnN0IGNoYXIq
IHByb3RlY3Rpb25TeXN0ZW1JZDsKLSAgICBib29sICgqaGFuZGxlS2V5UmVzcG9uc2UpKFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6UHJveHlDRE0+
KTsKLSAgICBib29sICgqZGVjcnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCosIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZl
ciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxl
c0J1ZmZlcik7CisgICAgYm9vbCAoKmNkbVByb3h5QXR0YWNoZWQpKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6Q0RNUHJveHk+KTsKKyAgICBib29s
ICgqZGVjcnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZl
ciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1
bnNpZ25lZCBzdWJzYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcik7CiB9
OwogCiBHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNw
cAppbmRleCBiMzJiNWEwMTY4NDU1ZGVjZTk5NWQ1NmE2YjQzNGU4ZGQ0ZmJlNjgxLi5jZTVkOGY3
ZDZiZGYzOGI1OTIyMDkzMDJhNmU2ZDcxYjM2OTY2MzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tDRE1GYWN0b3J5LmNwcApAQCAtMjI2LDggKzIyNiw2IEBAIE9wdGlvbmFsPFN0cmlu
Zz4gTW9ja0NETTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNv
bnN0CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotUHJveHlDRE1Nb2NrOjp+UHJveHlD
RE1Nb2NrKCkgPSBkZWZhdWx0OwotCiBNb2NrQ0RNSW5zdGFuY2U6Ok1vY2tDRE1JbnN0YW5jZShX
ZWFrUHRyPE1vY2tDRE0+IGNkbSkKICAgICA6IG1fY2RtKGNkbSkKIHsKQEAgLTI5NiwxMSArMjk0
LDYgQEAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gTW9ja0NETUluc3RhbmNlOjpjcmVhdGVT
ZXNzaW9uKCkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDRE1JbnN0YW5jZVNlc3Npb24o
bWFrZVdlYWtQdHIoKnRoaXMpKSk7CiB9CiAKLVJlZlB0cjxQcm94eUNETT4gTW9ja0NETUluc3Rh
bmNlOjpwcm94eUNETSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm94eUNE
TU1vY2soKSk7Ci19Ci0KIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246Ok1vY2tDRE1JbnN0YW5jZVNl
c3Npb24oV2Vha1B0cjxNb2NrQ0RNSW5zdGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBtX2luc3Rh
bmNlKFdURk1vdmUoaW5zdGFuY2UpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFj
dG9yeS5oCmluZGV4IGQ3ZTY2ZTYwMTZkMTAxNzgxMmVhZmE4YzgwYjQ3ZDQ3MjgzNTBjZDEuLjM5
OTA5YjkzMDNhOTRjOTM2OGVhYTBmNjI1ZjRiNjdlNTI1MDU5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKQEAgLTk5LDExICs5OSw2IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IG1fc2Vzc2lvbnM7CiB9
OwogCi1jbGFzcyBQcm94eUNETU1vY2sgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGlj
OgotICAgIHZpcnR1YWwgflByb3h5Q0RNTW9jaygpOwotfTsKLQogY2xhc3MgTW9ja0NETSA6IHB1
YmxpYyBDRE1Qcml2YXRlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TW9ja0NETT4gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTUwLDcgKzE0NSw2IEBAIHByaXZh
dGU6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikg
ZmluYWw7CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKICAgICBS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVm
UHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsOwogCiAgICAgV2Vha1B0cjxNb2Nr
Q0RNPiBtX2NkbTsKICAgICBib29sIG1fZGlzdGluY3RpdmVJZGVudGlmaWVyc0FsbG93ZWQgeyB0
cnVlIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389135</attachid>
            <date>2020-01-29 07:29:52 -0800</date>
            <delta_ts>2020-01-31 11:25:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200129152950.patch</filename>
            <type>text/plain</type>
            <size>107044</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uYmQzMDgyYzNlNDI5OGVkM2FlYTQ2NWMwNDZmMGIz
MDMxNTgwMGI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNSBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0J3MgcHVycG9zZSBpcyB0byBwcm92aWRlCisgICAgICAgIGFuIGludGVy
ZmFjZSB0aGF0IHdpbGwgc2F0aXNmeSB0aGUgSmF2YVNjcmlwdCBFTUUgQVBJcywgd2hpY2ggYnkK
KyAgICAgICAgZGVzaWduLCBkb24ndCBhY3R1YWxseSBpbnRlcmFjdCB3aXRoIGEgcmVhbCBEUk0g
c3lzdGVtLCB3aGF0IG1pZ2h0CisgICAgICAgIGFsc28gYmUgY2FsbGVkICJUaGUgQ0RNIEluc3Rh
bmNlIi4gVGhhdCdzIHdoeSB0aGUgbmFtaW5nIGlzCisgICAgICAgIG1pc2xlYWRpbmcgaGVyZSwg
Q0RNSW5zdGFuY2UgaXNuJ3QgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2YgYSByZWFsCisgICAgICAg
IENETSwgcmF0aGVyIGl0IGlzIGEgZmFjYWRlIGZvciBKYXZhU2NyaXB0LgorCisgICAgICAgIENE
TVByb3h5SW5zdGFuY2UgaXMgYSBzdWItY2xhc3Mgd2hpY2ggcHJvdmlkZXMgdHdvIEFQSXMsCisg
ICAgICAgIDEvIEZvciBiYWNrZ3JvdW5kIG1lZGlhIHRocmVhZHMgdG8gc2FmZWx5IGludGVycm9n
YXRlIHRoZSBzdGF0dXMKKyAgICAgICAgb2Yga2V5cyBhbmQgdG8gcGVyZm9ybSBkZWNyeXB0aW9u
IHVzaW5nIHNhaWQga2V5cy4gVGhpcyBBUEkgaXMKKyAgICAgICAgZXhwb3NlZCBieSBDRE1Qcm94
eS4KKyAgICAgICAgMi8gRm9yIG1lZGlhIHBsYXllcnMgdG8gc2FmZWx5IGFzc2VzcyB0aGUgc3Rh
dGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAgICAgICAgd2hhdCB0aGVpciBzdGF0dXMgaXMuCisKKyAg
ICAgICAgQ0RNUHJveHkgZXhpc3RzIHRvIGFsbG93IHRocmVhZC1zYWZlIGFjY2VzcyB0byBhIHJl
YWwgQ0RNLCBhbG9uZworICAgICAgICB3aXRoIHRoZWlyIHF1aXJrcy4gVGhlIHR3byBtYWluIHBy
b2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBvZiBhIENETQorICAgICAgICBoYXZlIGluIFdlYktpdCBp
cyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RNIGFjY2VzcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAg
bWVkaWEgdGhyZWFkcy4KKworICAgICAgICBLZXkgbWFuYWdlbWVudCBpcyBob3cgdG8gbWFuYWdl
IHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEgd2F5CisgICAgICAgIGNvaGVyZW50IHdpdGggSmF2YVNj
cmlwdCwgdGhlIGNyb3NzLXBsYXRmb3JtIEVNRSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgdGhl
IHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBhbmQgdGhlIGJhY2tncm91bmQgbWVkaWEKKyAgICAgICAg
dGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlkZXMgYSBkZWZhdWx0IGtleSBzdG9yZSBpbnRlcmZhY2Ug
Zm9yCisgICAgICAgIHN1Yi1jbGFzc2VzLiBTdWItY2xhc3NlcyBjYW4sIG9uIHJlY2VpcHQgb2Yg
bmV3IGluZm9ybWF0aW9uIGZyb20gYQorICAgICAgICByZWFsIENETSwgdGVsbCBDRE1Qcm94eSBh
Ym91dCB0aGUga2V5cyBhbmQgdGhlaXIKKyAgICAgICAgc3RhdHVzZXMuIENETVByb3h5IGlzIGlu
dGVuZGVkIHRvIERvIFRoZSBSaWdodCBUaGluZyBmcm9tIHRoZXJlLAorICAgICAgICBsZXR0aW5n
IEphdmFTY3JpcHQgYW5kIFdlYkNvcmUga25vdyBhbGwgdGhlIGRldGFpbHMgdGhleSBuZWVkIHRv
CisgICAgICAgIGFib3V0IHRoZSBuZXcgc3RhdGUsIGFzIHdlbGwgYXMgdGhlIG1lZGlhIGRlY29k
ZSB0aHJlYWRzIHdoZW4gdGhleQorICAgICAgICBuZXh0IGNvbWUgYXNraW5nLgorCisgICAgICAg
IEFjY2VzcyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyBpcyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5n
IHRoZQorICAgICAgICB0aHJlYWQtdW5zYWZlIENETUluc3RhbmNlLiBXZSB1c2VkIHRvIGdldCBh
d2F5IHdpdGggZG9pbmcgZXhhY3RseQorICAgICAgICB0aGlzLCBidXQgV2ViQ29yZSByZWNlbnRs
eSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBhYm91dAorICAgICAgICB0aHJlYWQtdW5zYWZlIGFjY2Vz
cyBvZiBtYWluLXRocmVhZC1vbmx5IGRhdGEsIGFuZCB3ZSBoYWQgdG8gZG8KKyAgICAgICAgc29t
ZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0cy4gVGhhdCBzb21ldGhpbmcgd2FzIFByb3h5Q0RNIChh
CisgICAgICAgIHRlcnJpYmxlIG5hbWUsIHJlbW92ZWQgbm93KSwgd2hpY2ggd2FzIGEgaGFjayBh
bmQgcGxlYXNlIGZvcmdldAorICAgICAgICBhYm91dCBpdC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVs
eSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLCBhbmQKKyAgICAgICAgaXQgd2lsbCBieSBk
ZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQtc2FmZSB2aWV3IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisg
ICAgICAgIGJhY2tncm91bmQgdGhyZWFkcyB0byBpbnRlcnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFu
ZCBwZXJmb3JtCisgICAgICAgIENETS1zcGVjaWZpYyBkZWNyeXB0aW9uIC8gZGVjb2RlLgorCisg
ICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2U6IEFkZCBDRE1Qcm94eSBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZAorICAg
ICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1JbnN0YW5jZS5oOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBvbGQKKyAgICAgICAgUHJv
eHlDRE0gc2hpbS4gVGhpcyBhcHByb2FjaCB3YXMgYSB0ZW1wb3JhcnkgaGFjayB0byBhdm9pZCBz
b21lCisgICAgICAgIHRocmVhZC1zYWZldHkgYXNzZXJ0cy4gSSB0b29rIHRoZSBsaWJlcnR5IG9m
IHJlbmFtaW5nIHRvIENETVByb3h5LAorICAgICAgICBmb3Igbm8gb3RoZXIgcmVhc29uIHRoYXQg
aXQgZmVsdCBsaWtlIGEgYmV0dGVyIG5hbWUsIHNvcnJ5IGZvciB0aGUKKyAgICAgICAgY29uZnVz
aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXk6OmlkQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5Ojp2YWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eVN0b3JlOjpjb250YWluc0tleUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3Jl
OjptZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5c0Zyb20p
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6a2V5VmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVj
dG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp1cGRhdGVLZXlTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6c2V0SW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJveHk6OmtleVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
b3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RN
UHJveHk6OnRyeVdhaXRGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUF2YWlsYWJsZVVubG9ja2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjprZXlBdmFpbGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmdldE9y
V2FpdEZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpz
dGFydGVkV2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5
OjpzdG9wcGVkV2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVBy
b3h5OjpyZXF1ZXN0S2V5U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94
eTo6bWVyZ2VLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpy
ZW1vdmVBbGxLZXlzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OmlkQXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjppZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleTo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6ZGVyZWYpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5OjpyZWZDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6Omhhc1Nh
bWVLZXlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjYmVnaW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyYmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OnJiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y3JiZWdp
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6cmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9y
ZTo6Y3JlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6Q0RN
SW5zdGFuY2VQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpwcm94
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojppc1dhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UGxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnRyYWNrU2Vzc2lvbik6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFkZXIgdXRpbGl0eSBm
b3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNl
bnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEpOiBSZWZhY3RvcmVk
IHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKTogSGVscGVyIG1ldGhv
ZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1Nl
dERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qgd2lsbCBibG9jayBp
ZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20gSlMuCisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2Ft
cGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0Rl
Y3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRp
YWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJL
ZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAgICAgIENETVByb3h5
IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgor
ICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNvbW1hbmQga2V5IG1h
bmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAgIHRyYWNrU2Vzc2lv
biBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVNRQorICAgICAgICBz
ZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJhY2sgb2YgZ2VuZXJh
dGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1c2UgbmV3IGtleSBt
YW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJveHlDRE1DbGVhcktl
eTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBsb29rcyBsaWtlIHdl
IHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQg
ZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAgb3JkZXJpbmcgb24g
a2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAgICAgICBuZXcga2V5
IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICBSZW1vdmUgZGVwZW5kZW5j
eSBvbiBDRE1DbGVhcktleS5oLCBzaW5jZSBJIGhhdmVuJ3QgYWRkZWQgQ0RNUHJveHkKKyAgICAg
ICAgdG8gdGhlIEFwcGxlIGJ1aWxkIHN5c3RlbSwgYW5kIEkgZG9uJ3QgYmVsaWV2ZSB0aGV5IG5l
ZWQgQ2xlYXJLZXkKKyAgICAgICAgc3VwcG9ydD8gT3IgYXQgbGVhc3QgaXQgaXMgZmFsc2VseSBh
ZHZlcnRpc2VkIGFzIHN1cHBvcnRlZD8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oOgorICAg
ICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpibG9ja1dhaXRpbmdG
b3JDRE1BdHRhY2htZW50KToKKyAgICAgICAgUmVmYWN0b3IgbG9naWMgb3V0IG9mIHN5bmNNZXNz
YWdlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5k
bGVTeW5jTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRpbmctZm9y
LWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgorICAgICAg
ICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJhc2VkIHBv
cnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xhc3NlcyBm
cm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEgaGFuZGxl
IHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5hZ2VtZW50
LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAgICAgICAgc3Rh
dHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgQ0RNUHJveHkg
bm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRX
YWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAgICB3ZSB1c2Ug
Q0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3Bw
OgorICAgICAgICBSZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChj
ZG1Qcm94eUF0dGFjaGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5
UmVzcG9uc2UpOiBEZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0IGhh
cyBiZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRL
ZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgIFJl
ZmFjdG9yIGZvciBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlw
dGlvbl9kZWNyeXB0X2NsYXNzX2luaXQpOiBSZW1vdmUgdGhlCisgICAgICAgIHF1ZXJ5IGhhbmRs
ZXIgdXNlZCBmb3Igd2FpdGluZyBmb3Iga2V5IG5vdGlmaWNhdGlvbnMsIHNpbmNlIGl0J3MKKyAg
ICAgICAgYmVlbiBkZWxldGVkIG5vdy4KKyAgICAgICAgKHRyYW5zZm9ybUluUGxhY2UpOiBSZW1v
dmUgdGhlIGJyb2tlbiB3YWl0aW5nIGZvciBrZXkgbG9naWMsIGFuZAorICAgICAgICBtYWtlIGNs
ZWFyIHdoYXQgd2UgYmxvY2sgb24gaGVyZS4gQWRkIGEgc2NvcGUgZ3VhcmQgdG8gcmVtb3ZlCisg
ICAgICAgIHByb3RlY3Rpb24gbWV0YSByYXRoZXIgdGhhbiBkb2luZyBpdCBtYW51YWxseS4KKyAg
ICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOiAKKyAgICAgICAgKHJlcXVlc3RDRE1Qcm94eUZy
b21Hc3RDb250ZXh0KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxhYmxlCisgICAg
ICAgIChhdHRhY2hDRE1Qcm94eSk6IEJyZWFrb3V0IGZyb20gaXNDRE1JbnN0YW5jZUF2YWlsYWJs
ZQorICAgICAgICAoaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUpOiBCcmVha291dCBmcm9t
IGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAgICAgKHNpbmtFdmVudEhhbmRsZXIpOiBSZW1v
dmUgaGFuZGxlS2V5UmVzcG9uc2UsIHdlIG5vdyB3YWl0IG9uIGEKKyAgICAgICAgcHJveHkgQ0RN
IGJlaW5nIGF2YWlsYWJsZSwgd2hpY2ggaXMgaW5zdGFsbGVkIGluIHRoZSBjb250ZXh0CisgICAg
ICAgIGhhbmRsZXIuCisgICAgICAgIChjaGFuZ2VTdGF0ZSk6CisgICAgICAgIChzZXRDb250ZXh0
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChpc0NETUluc3RhbmNlQXZhaWxhYmxl
KTogRGVsZXRlZC4gUmVmYWN0b3JlZC4gVGhpcyB3YXMgZG9pbmcKKyAgICAgICAgdGhyZWUgdGhp
bmdzIGluIG9uZSBwb29ybHkgbmFtZWQgZnVuY3Rpb24uCisgICAgICAgIChxdWVyeUhhbmRsZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNl
Ojpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFj
dG9yeS5oOgorCiAyMDIwLTAxLTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ11bSUZDXSBEbyBub3Qgc3BlY2lhbCBjYXNlIGZvcm1hdHRpbmcgcm9vdCBs
YXlvdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA4NzRkNDlh
ZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li45ZTY3YWI4ZjRlNmQ1NmE0NTBjMWYy
MDhiMzI3NzgyYmM5NzA3MTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlCkBAIC0xNjQsOCArMTY0LDggQEAgaWYgKEVOQUJMRV9FTkNSWVBURURfTUVESUEpCiAgICAg
KQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAogICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKLQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3BwCiAgICAgKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaAppbmRl
eCBhOGQ3Y2MxNTUyNTg0NjczOWVmZGVlNmEwMzU0ZDQ4ZWNhYzEzMDM3Li44ZjlmM2ViODc0NWMz
NTIwMjgzMTRjNjA2ZDI4OWQ0ZTNmNzFhMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKQEAgLTM5LDE3ICszOSw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQogY2xhc3MgQ0RN
SW5zdGFuY2VTZXNzaW9uOwotY2xhc3MgUHJveHlDRE07Ci0KLS8vIEhhbmRsZSB0byBhICJyZWFs
IiBDRE0sIG5vdCB0aGUgSmF2YVNjcmlwdCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKLS8vIGZy
b20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgotY2xhc3MgUHJveHlDRE0g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UHJveHlDRE0+IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5Qcm94eUNETSgpID0gZGVmYXVsdDsKLX07Ci0KIHN0cnVjdCBDRE1LZXlTeXN0ZW1D
b25maWd1cmF0aW9uOwogCiAvLyBKYXZhU2NyaXB0J3MgaGFuZGxlIHRvIGEgQ0RNSW5zdGFuY2Us
IG11c3QgYmUgdXNlZCBmcm9tIHRoZQpAQCAtNzcsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSA9IDA7
CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgPSAwOwogCiAgICAg
ZW51bSBjbGFzcyBIRENQU3RhdHVzIHsKICAgICAgICAgVW5rbm93biwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jZTUyODFiZGRmNDk5MDVjYTU0MGM0ODhjNzVjZDg3MzFmNDIxYWNhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3Bw
CkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
RE1Qcm94eS5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1Njb3Bl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBTdHJpbmcgdmVjdG9yVG9IZXhTdHJpbmco
Y29uc3QgVmVjdG9yPGNoYXI+JiB2ZWMpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOworICAgIGZvciAoY2hhciBieXRlIDogdmVjKQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChwYWQoJzAnLCAyLCBoZXgoYnl0ZSkpKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSB7fQorCitTdHJpbmcgS2V5OjppZEFzU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3Ry
aW5nKG1faWQpLCAiXSIpOworfQorCitTdHJpbmcgS2V5Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1fdmFsdWUp
LCAiXSIpOworfQorCitib29sIEtleVN0b3JlOjpjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjxj
aGFyPiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihtX2tleXMuYmVn
aW4oKSwgbV9rZXlzLmVuZCgpLCBbJl0oY29uc3QgS2V5JiBrZXkpIHsKKyAgICAgICAgcmV0dXJu
IGtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBtX2tleXMuZW5kKCk7Cit9CisKK3ZvaWQgS2V5U3Rv
cmU6Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKK3sKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNUHJveHkgLSBtZXJnaW5nICV1IG5ldyBrZXlzIGludG8gYSBrZXkgc3RvcmUgb2YgJXUga2V5
cyIsIG90aGVyLm51bUtleXMoKSwgbnVtS2V5cygpKTsKKyAgICBzdGQ6OmNvcHlfaWYob3RoZXIu
YmVnaW4oKSwgb3RoZXIuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihtX2tleXMpLAorICAgICAg
ICBbdGhpc10oY29uc3QgS2V5JiBrZXkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbmQoKSA9PSBz
dGQ6OmZpbmQoYmVnaW4oKSwgZW5kKCksIGtleSk7CisgICAgICAgIH0pOworCisgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0ga2V5IHN0b3JlIG5vdyBoYXMgJXUga2V5cyIsIG51bUtleXMo
KSk7CisgICAgc3RkOjpmb3JfZWFjaChtX2tleXMuYmVnaW4oKSwgbV9rZXlzLmVuZCgpLAorICAg
ICAgICBbXShjb25zdCBLZXkmIGtleSkgeworICAgICAgICAgICAgTE9HKEVNRSwgIlx0RU1FIC0g
Q0RNUHJveHkgLSBLZXkgSUQ6ICVzIiwga2V5LmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgIH0pOworfQorCit2b2lkIEtleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbShjb25z
dCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikK
KyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK0NETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVz
VmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0Cit7CisgICAgQ0RNSW5z
dGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gY29udmVydFRv
SlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBmb3IgKGF1dG8mIGtleVN0YXR1cyA6IGtleVN0YXR1
c1ZlY3RvcikKKyAgICAgICAga2V5U3RhdHVzLnNlY29uZCA9IENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpSZWxlYXNlZDsKKyAgICByZXR1cm4ga2V5U3RhdHVzVmVjdG9yOworfQorCiti
b29sIEtleVN0b3JlOjphZGQoUmVmPEtleT4mIGtleSkKK3sKKyAgICBib29sIHN0b3JlQ2hhbmdl
ZCA9IGZhbHNlOworICAgIGF1dG8ga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBzdGQ6OmZpbmQobV9r
ZXlzLmJlZ2luKCksIG1fa2V5cy5lbmQoKSwga2V5KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hp
bmdLZXlJRCAhPSBtX2tleXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdL
ZXlJRC0+aGFzU2FtZUtleVZhbHVlKGtleSkpIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSB3aXRoIElEICVzIGZvdW5kIHdpdGggZGlmZmVyZW50
IGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWVBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IGtleTsKKyAgICAgICAgICAg
IHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAga2V5V2l0
aE1hdGNoaW5nS2V5SUQtPnJlZigpOworICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAlcyBnZXR0aW5nIGFkZGVkIHRvIGtleSBz
dG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgbV9rZXlz
LnB1c2hfYmFjayhrZXkpOworICAgICAgICBzdG9yZUNoYW5nZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBzdG9yZUNoYW5nZWQ7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25z
dCBLZXkmIGtleSkKK3sKKyAgICBib29sIHN0b3JlQ2hhbmdlZCA9IGZhbHNlOworICAgIGF1dG8g
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBzdGQ6OmZpbmQobV9rZXlzLmJlZ2luKCksIG1fa2V5cy5l
bmQoKSwga2V5KTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlcXVlc3RlZCB0
byByZW1vdmUga2V5IHdpdGggSUQgJXMgYW5kIHJlZkNvdW50ICV1Iiwga2V5V2l0aE1hdGNoaW5n
S2V5SUQtPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwga2V5LnJlZkNvdW50KCkpOworCisg
ICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlEICE9IG1fa2V5cy5lbmQoKSkgeworICAgICAgICBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+ZGVyZWYoKTsKKyAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hp
bmdLZXlJRC0+cmVmQ291bnQoKSkgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gcmVtb3ZlIGtleSB3aXRoIElEICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmlkQXNT
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX2tleXMuZXJhc2Uoa2V5V2l0
aE1hdGNoaW5nS2V5SUQpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIGF0dGVtcHQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9y
ZWQsIGRvZXMgbm90IGV4aXN0Iiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmlkQXNTdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25zdCBW
ZWN0b3I8Y2hhcj4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGtleUlE
KSBjb25zdAoreworICAgIGF1dG8gbWF0Y2hpbmdLZXkgPSBzdGQ6OmZpbmRfaWYobV9rZXlzLmJl
Z2luKCksIG1fa2V5cy5lbmQoKSwKKyAgICAgICAgWyZdKGNvbnN0IEtleSYga2V5KSB7CisgICAg
ICAgICAgICByZXR1cm4ga2V5ID09IGtleUlEOworICAgICAgICB9KTsKKyAgICAvLyBDYWxsZXJz
IG11c3QgZW5zdXJlIHRoZSBrZXkgZXhpc3RzLgorICAgIFJFTEVBU0VfQVNTRVJUKG1hdGNoaW5n
S2V5ICE9IG1fa2V5cy5lbmQoKSk7CisgICAgcmV0dXJuIG1hdGNoaW5nS2V5LT52YWx1ZSgpOwor
fQorCitDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVy
dFRvSlNLZXlTdGF0dXNWZWN0b3IoKSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5
IDogbV9rZXlzKSB7CisgICAgICAgIC8vIEZJWE1FOiBWZWN0b3I8Y2hhcj4gcmVwcmVzZW50YXRp
b24gaXMgY29weS1oZWF2eSwgYnV0IHRoZQorICAgICAgICAvLyBkYXRhIGFyZSBzbWFsbCBpbiBu
dW1iZXIsIHNvIHByb2JhYmx5IGl0J3MgZmluZS4KKyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVu
Y2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzPiB7IGtleS5pZEFzU2hhcmVkQnVmZmVyKCksIGtleS5zdGF0dXMoKSB9
KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94
eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5U3RvcmUubWVyZ2Uo
bmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtl
eSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsKKyAgICBtX2tleXNDb25kaXRpb24ubm90
aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJv
eHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11
dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3RvcjxjaGFyPiBDRE1Q
cm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9y
ZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUo
a2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAg
ICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAg
QVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5
KCk7Cit9CisKK09wdGlvbmFsPFZlY3RvcjxjaGFyPj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXko
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0Zv
cktleSgpOworICAgIC8vIFVuY29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdh
aXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9u
ZSBzaG90IGF0IGZldGNoaW5nIGEga2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJl
cywgdGhhdCdzIGl0LCBubyBtb3JlIGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBh
dXRvIHN0b3BXYWl0aW5nRm9yS2V5T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7Cisg
ICAgICAgIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gdHJ5aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4
U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9
IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRl
eCk7CisgICAgICAgIHdhc0tleVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9r
ZXlzTXV0ZXgsIENETVByb3h5OjpNYXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJ
RF0oKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElE
ICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAt
IENETVByb3h5IC0ga2V5IElEICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhr
ZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jv
b2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5
SUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7
Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8Y2hhcj4mIGtl
eUlEKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwor
ICAgIHJldHVybiBrZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZl
Y3RvcjxjaGFyPj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8Y2hhcj4m
IGtleUlEKSBjb25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAg
ICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5
IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlW
YWx1ZShrZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdG
b3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAg
IGJvb2wgd2FzV2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAw
OworICAgIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5U
aHJlYWQoW3BsYXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlm
IChwbGF5ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGlu
Z0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5Ojpz
dG9wcGVkV2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBt
X3BsYXllciAmJiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1E
ZWNyeXB0b3JzV2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgbm9ib2R5V2FpdGluZ0ZvcktleSA9
ICFtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworCisgICAgY2FsbE9uTWFpblRocmVhZChb
cGxheWVyID0gbV9wbGF5ZXIsIG5vYm9keVdhaXRpbmdGb3JLZXldIHsKKyAgICAgICAgaWYgKHBs
YXllciAmJiBub2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5n
Rm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6OnJl
cXVlc3RLZXlTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEtleVN0b3JlJik+JiYg
Y2FsbGJhY2spCit7CisgICAgLy8gTk9URTogV2UgY2FuIGltbWVkaWF0ZWx5IHJlc29sdmUgdGhp
cyBjYWxsYmFjayBpbiB0aGUgY2FzZSBvZgorICAgIC8vIENsZWFyS2V5LCBidXQgZm9yIGEgQ0RN
IGxpa2UgV2lkZXZpbmUsIHdoaWNoIGFzeW5jaHJvbm91c2x5CisgICAgLy8gdGVsbHMgeW91IGFi
b3V0IGtleSBzdGF0dXNlcywgdGhpcyBjYWxsYmFjayB3b3VsZCBuZWVkIHRvIGJlCisgICAgLy8g
c3RvcmVkIHNvbWV3aGVyZSBhbmQgbGF0ZXIgcmVzb2x2ZWQuCisKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBjYWxsYmFjayhtX2tleVN0b3JlKTsKK30KKwor
dm9pZCBDRE1JbnN0YW5jZVByb3h5OjptZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBrZXlT
dG9yZSkKK3sKKyAgICAvLyBGSVhNRTogTm90aWZ5IEpTIHdoZW4gYXBwcm9wcmlhdGUuCisgICAg
eworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICAgICAg
bV9rZXlTdG9yZS5tZXJnZShrZXlTdG9yZSk7CisgICAgfQorICAgIExPRyhFTUUsICJFTUUgLSBD
RE1JbnN0YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5v
dGlmeWluZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOwor
ICAgIG1fY2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1J
bnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUp
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgbV9rZXlT
dG9yZS5yZW1vdmVBbGxLZXlzRnJvbShrZXlTdG9yZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MGZkZGE1MzNkODEwZGY1NzhiNDc2NTU0YzMzZTcwNmMyM2U1ZDE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAt
MCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCisKKyNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNl
U2Vzc2lvbi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleSB7CitwdWJsaWM6CisgICAgdXNp
bmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM7CisKKyAgICBzdGF0
aWMgUmVmPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0dXMsIFZlY3RvcjxjaGFyPiYmIGtleUlE
LCBWZWN0b3I8Y2hhcj4mJiBrZXlWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOwor
ICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQor
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
ICAgIEtleVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAg
U3RyaW5nIGlkQXNTdHJpbmcoKSBjb25zdDsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNv
bnN0OworCisgICAgdm9pZCByZWYoKSB7IG1fcmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCBkZXJl
ZigpIHsgbV9yZWZlcmVuY2VzLS07IH0KKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVmZXJlbmNlczsgfQorCisgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3Qg
S2V5ICZvdGhlcikgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9CisgICAgLy8g
VHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5
IHZhbHVlIGFuZCBzdGF0dXMuCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkg
JmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1faWQ7IH0KKyAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmaywgY29uc3QgVmVjdG9yPGNoYXI+JiBr
ZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBWZWN0b3I8Y2hhcj4mIGtleUlELCBjb25zdCBLZXkgJmspIHsgcmV0dXJuIGsg
PT0ga2V5SUQ7IH0KKworcHJpdmF0ZToKKyAgICBLZXkoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9y
PGNoYXI+JiYga2V5SUQsIFZlY3RvcjxjaGFyPiYmIGtleVZhbHVlKQorICAgICAgICA6IG1fc3Rh
dHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUoa2V5VmFs
dWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsKKyAgICBWZWN0b3I8Y2hhcj4gbV9p
ZDsKKyAgICBWZWN0b3I8Y2hhcj4gbV92YWx1ZTsKKyAgICB1bnNpZ25lZCBtX3JlZmVyZW5jZXMg
eyAxIH07Cit9OworCitjbGFzcyBLZXlTdG9yZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3Rh
dHVzVmVjdG9yID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBL
ZXlTdG9yZSYgb3BlcmF0b3I9KGNvbnN0IEtleVN0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICh0aGlzICE9ICZvdGhlcikKKyAgICAgICAgICAgIHN0ZDo6Y29weShvdGhlci5tX2tleXMu
YmVnaW4oKSwgb3RoZXIubV9rZXlzLmVuZCgpLCBtX2tleXMuYmVnaW4oKSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9pZCBtZXJnZShjb25zdCBLZXlTdG9yZSYgb3Ro
ZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIG90aGVyKTsK
KyAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1fa2V5cy5jbGVhcigpOyB9CisgICAgS2V5U3Rh
dHVzVmVjdG9yIGFsbEtleXNBc1JlbGVhc2VkKCkgY29uc3Q7CisgICAgYm9vbCBhZGQoUmVmPEtl
eT4mKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBLZXkmKTsKKyAgICB1bnNpZ25lZCBudW1LZXlz
KCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiYga2V5VmFsdWUoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3Rh
dHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRv
IGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGNiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5cy5jYmVnaW4oKTsgfQorICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9rZXlz
LmVuZCgpOyB9CisgICAgYXV0byBlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0K
KyAgICBhdXRvIGNlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY2VuZCgpOyB9CisgICAgYXV0
byByYmVnaW4oKSB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gY3JiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5cy5jcmJlZ2luKCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJldHVy
biBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlz
LnJlbmQoKTsgfQorICAgIGF1dG8gY3JlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuY3JlbmQo
KTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6bGlzdDxLZXk+IG1fa2V5czsKK307CisKK2NsYXNz
IENETUluc3RhbmNlUHJveHk7CisKKy8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0aGUg
SmF2YVNjcmlwdCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKKy8vIGZyb20gYmFja2dyb3VuZCB0
aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgorY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworCisgICAgdmlydHVhbCB+Q0RN
UHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0
b3JlJiBuZXdLZXlTdG9yZSk7CisgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8Y2hhcj4ga2V5VmFsdWUoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25z
dCBWZWN0b3I8Y2hhcj4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxWZWN0b3I8Y2hhcj4+
IHRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0
aW9uYWw8VmVjdG9yPGNoYXI+PiBnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBr
ZXlJRCkgY29uc3Q7CisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworICAg
IHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBtdXRh
YmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OworICAgIENETUluc3RhbmNlUHJveHkqIG1faW5zdGFu
Y2U7CisKKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7CisgICAgbXV0YWJsZSBDb25kaXRp
b24gbV9rZXlzQ29uZGl0aW9uOworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9OworCisvLyBC
YXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5hZ2VtZW50IGNvZGUgYW5kIGZvciBjb21t
dW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJyZWFsIENETSIgc3RhdGUgY2hhbmdlcyB0byBK
Uy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMgQ0RNSW5zdGFuY2UgeworcHVibGlj
OgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJveHkqIHByb3h5KSA6IG1fY2RtUHJveHkoYWRv
cHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0YW5jZSh0aGlzKTsgfQorICAgIHZpcnR1YWwg
fkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNZWRpYSBwbGF5ZXIgcXVl
cnkgbWV0aG9kcyAtIG1haW4gdGhyZWFkIG9ubHkKKyAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5
KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JLZXkoKSBjb25zdCB7IEFTU0VSVChpc01haW5U
aHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMDsgfQorICAg
IHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgbV9wbGF5ZXIgPSBwbGF5ZXI7
IH0KKworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRocmVhZC1zYWZlCisgICAgdm9p
ZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXko
KTsKKyAgICB2b2lkIG1lcmdlS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmKTsKKyAgICB2b2lkIHJl
bW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CisgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RLZXlTdG9yZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEtleVN0b3JlJik+JiYgY2Fs
bGJhY2spOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0cmFja1Nlc3Npb24oUmVmUHRyPENETUlu
c3RhbmNlU2Vzc2lvbj4gc2Vzc2lvbikgeyBtX3Nlc3Npb25zLnB1c2hfYmFjayhzZXNzaW9uKTsg
fQorCitwcml2YXRlOgorICAgIFJlZlB0cjxDRE1Qcm94eT4gbV9jZG1Qcm94eTsKKyAgICAvLyBG
SVhNRTogV2Vha1B0ciBmb3IgdGhlIG1fcGxheWVyPyBUaGlzIGlzIGFjY2Vzc2VkIGZyb20gYmFj
a2dyb3VuZCBhbmQgbWFpbiB0aHJlYWRzLCBpdCdzCisgICAgLy8gY29uY2VybmluZyB3ZSBjb3Vs
ZCBiZSBhY2Nlc3NpbmcgaXQgaW4gdGhlIG1pZGRsZSBvZiBhIHNodXRkb3duIG9uIHRoZSBtYWlu
LXRocmVhZCwgZWg/CisgICAgLy8gQXMgYSBDRE1Qcm94eSwgd2UgKioqc2hvdWxkKioqIGJlIHR1
cm5lZCBvZmYgYmVmb3JlIHRoaXMgcG9pbnRlciBldmVyIGdvZXMgYmFkLgorICAgIE1lZGlhUGxh
eWVyKiBtX3BsYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IE1haW5UaHJlYWQ8VD4/CisKKyAg
ICBzdGQ6OmF0b21pYzxpbnQ+IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisgICAgc3Rk
OjpsaXN0PFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+PiBtX3Nlc3Npb25zOworCisgICAgLy8g
RklYTUU6IFRoaXMgc2FtZSBwYXR0ZXJuIG9mIGEgcHJvdGVjdGVkIGtleSBzdG9yZSBpcyB1c2Vk
IGluIHRoZSBDRE1Qcm94eSBhbmQgaW4gdGhpcyBJbnN0YW5jZS4KKyAgICBtdXRhYmxlIExvY2sg
bV9rZXlzTXV0ZXg7CisgICAgbXV0YWJsZSBDb25kaXRpb24gbV9rZXlzQ29uZGl0aW9uOworICAg
IEtleVN0b3JlIG1fa2V5U3RvcmU7IC8vIEZJWE1FOiBEYXRhTXV0ZXg/Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVkYjc1ZDdlNzMzOWIxNTYxZGM2ZDU4
ZWYyOWM5YjMxMjM1ODAuLjU1OTFiOGUzYjNmM2FiOTk2YjRjZjY3MDkxYWIwZDdhMjZiZjU1Yzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNs
dWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+
CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KQEAgLTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENs
ZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRk
YXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4X3QgY2xlYXJLZXlDZW5jU3lzdGVt
SWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhjMCwgMHhiMiwgMHg0ZCwgMHgwMiwg
MHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwgMHhmYiwgMHg0YiB9OwotY29uc3Qg
dW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0gc2l6ZW9mKGNsZWFyS2V5Q2VuY1N5
c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9IDE2OworbmFtZXNwYWNlIHsKIAot
Y2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5U3RvcmUgPSBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+OwotCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3RhdGljIGJvb2wgcmVhZFVJbnQzMihj
b25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwg
dWludDMyX3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQgPD0gYnVm
ZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9yZSYga2V5cygpIHsgcmV0dXJuIG1f
a2V5czsgfQorICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVp
bnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7
CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPENsZWFyS2V5U3Rh
dGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlTdG9yZSBtX2tleXM7Ci19OworICAg
IHJldHVybiB0cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBDbGVhcktleVN0YXRlOjpzaW5nbGV0
b24oKQorc3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVf
dCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQogewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBzX3N0YXRlOwotICAgIHJldHVybiBz
X3N0YXRlOworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7Cisg
ICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9mZnNldCArPSBzaXplb2YodmFs
dWUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFyS2V5U3RhdGU6OkNsZWFyS2V5U3Rh
dGUoKSA9IGRlZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5c3RlbUlELgorLy8gaHR0cHM6Ly93
d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lzdGVtCitjb25zdCB1aW50
OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4
YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIs
IDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9
IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhDVFJCbG9j
a1NpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzID0gMTYsCisg
ICAgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9OworCit9CiAKIHN0YXRpYyBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIp
CiB7CkBAIC04OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VK
U09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7
CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRp
b25hbDxWZWN0b3I8UmVmPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2Jq
ZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhl
IHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRv
IHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAgLTEwMSw3ICsxMTQsNyBAQCBzdGF0
aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5z
ZUZvcm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJh
eSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBWZWN0b3I8UmVmPEtleT4+IGRlY29k
ZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJl
Z2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBh
dXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0
OwpAQCAtMTIwLDcgKzEzMyw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VD
bGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAg
ICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAhV1RG
OjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0pKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKHsg
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgU2hhcmVkQnVmZmVyOjpjcmVh
dGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShrZXlW
YWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXk6OmNyZWF0
ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlERGF0
YSksIFdURk1vdmUoa2V5VmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAgc3Rh
dGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZy
b21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBzaXpl
LgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5SWRz
TWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5kZXgg
KyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5pdERh
dGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNlY29u
ZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXREYXRh
LgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0S2V5
aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8gImtp
ZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJh
eSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250YWlu
aW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleUlk
Q291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29k
ZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6
YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKTsK
ICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCAr
PSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRlczsK
ICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNBcnJh
eSkpOwpAQCAtNDU2LDQxICs0NjksMTMxIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICBy
ZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmlu
ZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwu
IFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBh
bGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0v
LyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJp
bGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tn
cm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAo
aS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRo
cmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNh
biBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8g
U2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNy
b3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtl
eShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVhcktl
eTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0cmlu
ZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmluZyhr
ZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsKKyAg
ICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8UHJv
eHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBjb25z
dAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5j
RGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBhbGwg
c2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZlY3Rv
cjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAwOwot
ICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5
cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNpemUo
KTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KTsK
KyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAoaW5w
dXQuaXZTaXplSW5CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoyMDE2
IFNlY3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xhdGVk
S2V5KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRo
ZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElW
IChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAg
ICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwg
OCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleUlW
U2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKSkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlf
Y2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktleShj
b25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vzc2Fy
eSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8vIGEg
bm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJzIGFy
ZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVzcy4K
KyAgICBWZWN0b3I8Y2hhcj4ga2V5SURWZWM7CisgICAga2V5SURWZWMuYXBwZW5kKGluLmtleUlE
LCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKKworICAgIGF1dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZv
cktleShrZXlJRFZlYyk7CisgICAgaWYgKCFrZXlEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KG1fZ2Ny
eUhhbmRsZSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7CisgICAgICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfc2V0a2V5
KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNE
ZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIGlmICghaW4u
ZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBmdWxsLXNhbXBsZSBkZWNyeXB0aW9u
OiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpOwor
CisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQo
bV9nY3J5SGFuZGxlLCBpbi5lbmNyeXB0ZWRCdWZmZXIsIGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJ
bkJ5dGVzLCAwLCAwKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktl
eSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJF
cnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNE
ZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdW5zaWduZWQgZW5jcnlwdGVkQnVmZmVyQnl0
ZU9mZnNldCA9IDA7CisgICAgc2l6ZV90IHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQgPSAwOwor
ICAgIHVuc2lnbmVkIHN1YnNhbXBsZUluZGV4ID0gMDsKKyAgICB3aGlsZSAoZW5jcnlwdGVkQnVm
ZmVyQnl0ZU9mZnNldCA8IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKSB7CisgICAg
ICAgIHVpbnQxNl90IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAgICB1aW50MzJf
dCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IDA7CisKKyAgICAgICAgaWYgKHN1YnNhbXBs
ZUluZGV4IDwgaW5wdXQubnVtU3Vic2FtcGxlcykgeworICAgICAgICAgICAgaWYgKCFyZWFkVUlu
dDE2KGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5C
eXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcykp
IHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIGNv
dWxkIG5vdCByZWFkIG51bWJlciBvZiBjbGVhciBieXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXgg
JXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZWFkVUludDMyKGlucHV0LnN1YnNhbXBsZXNC
dWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcywgc3ViU2FtcGxlQnVmZmVy
Qnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpKSB7CisgICAgICAgICAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1i
ZXIgb2YgZW5jcnlwdGVkIGJ5dGVzIGluIHN1YnNhbXBsZSBhdCBpbmRleCAldSIsIHN1YnNhbXBs
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzdWJzYW1wbGVJbmRleCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7CisgICAgICAgICAgICBzdWJzYW1wbGVOdW1F
bmNyeXB0ZWRCeXRlcyA9IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzIC0gZW5jcnlw
dGVkQnVmZmVyQnl0ZU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBUaGVz
ZSBhcmUgaGlnaC1mcmVxdWVuY3kgbWVzc2FnZXMsIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBiZXR0
ZXIgbG9nZ2luZyBsaWIgaW4gV2ViQ29yZS4KKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIHN1YnNh
bXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGNsZWFyICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0
KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzLCBpbnB1dC5lbmNyeXB0
ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAg
ICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0gc3Vic2FtcGxlTnVtQ2xlYXJCeXRlczsK
KworICAgICAgICBpZiAoc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpIHsKKyAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQg
KCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vic2FtcGxlSW5kZXgsIHN1YnNhbXBsZU51
bUVuY3J5cHRlZEJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5
cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAgICAgICBpZiAoZ2NyeV9lcnJvcl90IGNp
cGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChtX2djcnlIYW5kbGUsIGlucHV0LmVuY3J5
cHRlZEJ1ZmZlciArIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5
cHRlZEJ5dGVzLCAwLCAwKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Q
cm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfZGVjcnlwdCk6ICVzIiwgZ3BnX3N0cmVy
cm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHQoQ0RNUHJveHlDbGVh
cktleTo6Y2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkKK3sKKyAgICBpZiAoIWNlbmNTZXRDb3Vu
dGVyVmVjdG9yKGlucHV0KSB8fCAhY2VuY1NldERlY3J5cHRpb25LZXkoaW5wdXQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5wdXQuaXNTdWJzYW1wbGVkKCkgPyBjZW5j
RGVjcnlwdFN1YnNhbXBsZWQoaW5wdXQpIDogY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGlucHV0KTsK
K30KKwordm9pZCBDRE1Qcm94eUNsZWFyS2V5Ojppbml0aWFsaXplR2NyeXB0KCkKK3sKKyAgICBp
ZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmbV9nY3J5SGFuZGxlLCBH
Q1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNV
UkUpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1Io
Z2NyeV9jaXBoZXJfb3Blbik6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGZhbHNlICYmICJTaG91bGQgbm90IGdldCB0aGlzIGZhciB3aXRoIGEgZnVu
Y3Rpb25hbCBHQ3J5cHQhIik7CisgICAgfQogfQogCiBDRE1JbnN0YW5jZUNsZWFyS2V5OjpDRE1J
bnN0YW5jZUNsZWFyS2V5KCkKLSAgICA6IG1fcHJveHlDRE0oYWRvcHRSZWYoKm5ldyBQcm94eUNE
TUNsZWFyS2V5KCkpKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShuZXcgQ0RNUHJveHlDbGVhcktl
eSgqdGhpcykpCiB7CiB9CiAKQEAgLTUzNSwzNiArNjM4LDkgQEAgY29uc3QgU3RyaW5nJiBDRE1J
bnN0YW5jZUNsZWFyS2V5OjprZXlTeXN0ZW0oKSBjb25zdAogCiBSZWZQdHI8Q0RNSW5zdGFuY2VT
ZXNzaW9uPiBDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KCkpOwotfQotCi1TdHJp
bmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlJREFzU3RyaW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleUlERGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsK
LX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5VmFsdWVBc1N0cmluZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBrZXlWYWx1ZURhdGEtPnRvSGV4
U3RyaW5nKCksICJdIik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewot
ICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0g
ICAgcmV0dXJuICprMS5rZXlJRERhdGEgPT0gKmsyLmtleUlERGF0YTsKLX0KLQotYm9vbCBvcGVy
YXRvcjwoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKLSAgICBB
U1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIGlmIChrMS5rZXlJRERhdGEtPnNpemUoKSAhPSBr
Mi5rZXlJRERhdGEtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGsxLmtleUlERGF0YS0+c2l6ZSgp
IDwgazIua2V5SUREYXRhLT5zaXplKCk7Ci0KLSAgICByZXR1cm4gbWVtY21wKGsxLmtleUlERGF0
YS0+ZGF0YSgpLCBrMi5rZXlJRERhdGEtPmRhdGEoKSwgazEua2V5SUREYXRhLT5zaXplKCkpOwor
ICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IG5ld1Nlc3Npb24gPSBhZG9wdFJlZihuZXcg
Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKnRoaXMpKTsKKyAgICB0cmFja1Nlc3Npb24obmV3
U2Vzc2lvbik7CisgICAgcmV0dXJuIG5ld1Nlc3Npb247CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3Ry
aW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VD
YWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNTcyLDYgKzY0OCw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3Ry
aW5nJiBpCiAgICAgc3RhdGljIHVpbnQzMl90IHNfc2Vzc2lvbklkVmFsdWUgPSAwOwogICAgICsr
c19zZXNzaW9uSWRWYWx1ZTsKIAorICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpudW1iZXIoc19z
ZXNzaW9uSWRWYWx1ZSk7CisKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
aW5pdERhdGFUeXBlLCAiY2VuYyIpKQogICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlpZHNG
cm9tQ2VuY0luaXREYXRhKGluaXREYXRhLmdldCgpKTsKIApAQCAtNTc5LDE4ICs2NTcsMTYgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5SWRG
cm9tV2ViTUluaXREYXRhKGluaXREYXRhLmdldCgpKTsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQo
Ci0gICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKSwgc2Vzc2lvbklkVmFs
dWUgPSBzX3Nlc3Npb25JZFZhbHVlXSgpIG11dGFibGUgeworICAgICAgICBbd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHRoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGlu
aXREYXRhID0gV1RGTW92ZShpbml0RGF0YSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShpbml0RGF0YSksIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JZFZhbHVlKSwgZmFs
c2UsIFN1Y2NlZWRlZCk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwg
bV9zZXNzaW9uSUQsIGZhbHNlLCBTdWNjZWVkZWQpOwogICAgICAgICB9KTsKIH0KIAogdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNl
c3Npb25JZCwgTGljZW5zZVR5cGUsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UsIExpY2Vu
c2VVcGRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8vIFVzZSBhIGhlbHBlciBmdW5j
dG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRjaCwgYXZvaWRpbmcKLSAgICAv
LyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KICAgICBhdXRvIGRpc3BhdGNo
Q2FsbGJhY2sgPQogICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShib29sIHNlc3Npb25XYXNDbG9z
ZWQsIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBjaGFuZ2VkS2V5cywgU3VjY2Vzc1ZhbHVl
IHN1Y2NlZWRlZCkgewogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgKQEAgLTYwNCw1MiAr
NjgwLDI4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2Uo
Y29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAKICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByb290ID0gcGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsKICAgICBpZiAoIXJvb3QpIHsK
KyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5
bG9hZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpG
YWlsZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyIsIHNlc3Npb25JZC51dGY4
KCkuZGF0YSgpKTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGluZyBsaWNl
bnNlIGZvciBzZXNzaW9uICVzIHdoaWNoIGN1cnJlbnRseSBjb250YWlucyAldSBrZXlzIiwgc2Vz
c2lvbklkLnV0ZjgoKS5kYXRhKCksIG1fa2V5U3RvcmUubnVtS2V5cygpKTsKIAogICAgIGlmIChh
dXRvIGRlY29kZWRLZXlzID0gcGFyc2VMaWNlbnNlRm9ybWF0KCpyb290KSkgewotICAgICAgICAv
LyBSZXRyaWV2ZSB0aGUgdGFyZ2V0IFZlY3RvciBvZiBLZXkgb2JqZWN0cyBmb3IgdGhpcyBzZXNz
aW9uLgotICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzdGF0ZSBtYW5hZ2VtZW50IGNv
ZGUuCi0gICAgICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+JiBrZXlWZWN0b3Ig
PSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkuZW5zdXJlKHNlc3Npb25JZCwgW10g
eyByZXR1cm4gVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4geyB9OyB9KS5pdGVyYXRv
ci0+dmFsdWU7Ci0KICAgICAgICAgYm9vbCBrZXlzQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBm
b3IgKGF1dG8mIGRlY29kZWRLZXkgOiAqZGVjb2RlZEtleXMpIHsKLSAgICAgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIERlY29kZWQgYSBrZXkgd2l0aCBJRCAlcyBhbmQga2V5IGRh
dGEgJXMiLCBkZWNvZGVkS2V5LmtleUlEQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBkZWNvZGVk
S2V5LmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGF1dG8g
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBzdGQ6OmZpbmRfaWYoa2V5VmVjdG9yLmJlZ2luKCksIGtl
eVZlY3Rvci5lbmQoKSwKLSAgICAgICAgICAgICAgICBbJmRlY29kZWRLZXldIChjb25zdCBDRE1J
bnN0YW5jZUNsZWFyS2V5OjpLZXkmIGNvbnRhaW5lZEtleSkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY29udGFpbmVkS2V5ID09IGRlY29kZWRLZXk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SUQgIT0ga2V5VmVjdG9yLmVuZCgp
KSB7Ci0gICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRXhpc3Rpbmcg
a2V5IGZvdW5kIHdpdGggZGF0YSAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5rZXlWYWx1ZUFz
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWtleVdpdGhN
YXRjaGluZ0tleUlELT5oYXNTYW1lS2V5VmFsdWUoZGVjb2RlZEtleSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVXBkYXRpbmcga2V5IHNpbmNlIHRo
ZSBkYXRhIGFyZSBkaWZmZXJlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgKmtleVdpdGhNYXRj
aGluZ0tleUlEID0gV1RGTW92ZShkZWNvZGVkS2V5KTsKLSAgICAgICAgICAgICAgICAgICAga2V5
c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVGhpcyBpcyBhIG5l
dyBrZXkiKTsKLSAgICAgICAgICAgICAgICBrZXlWZWN0b3IuYXBwZW5kKFdURk1vdmUoZGVjb2Rl
ZEtleSkpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRGVjb2RlZCBh
IGtleSB3aXRoIElEICVzIGFuZCBrZXkgZGF0YSAlcyIsIGRlY29kZWRLZXktPmlkQXNTdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBkZWNvZGVkS2V5LT52YWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICBpZiAobV9rZXlTdG9yZS5hZGQoZGVjb2RlZEtleSkpCiAgICAgICAg
ICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVXBkYXRlIGhhcyBwcm92aWRlZCAl
enUga2V5cyIsIGtleVZlY3Rvci5zaXplKCkpOworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xl
YXJLZXkgLSBzZXNzaW9uICVzIGhhcyAldSBrZXlzIGFmdGVyIHVwZGF0ZSgpIiwgc2Vzc2lvbklk
LnV0ZjgoKS5kYXRhKCksIG1fa2V5U3RvcmUubnVtS2V5cygpKTsKIAogICAgICAgICBPcHRpb25h
bDxLZXlTdGF0dXNWZWN0b3I+IGNoYW5nZWRLZXlzOwogICAgICAgICBpZiAoa2V5c0NoYW5nZWQp
IHsKLSAgICAgICAgICAgIC8vIFNvcnQgYnkga2V5IElEcy4KLSAgICAgICAgICAgIHN0ZDo6c29y
dChrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVuZCgpKTsKLQotICAgICAgICAgICAgS2V5
U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rv
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICAgICAga2V5U3RhdHVzVmVj
dG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1
cz4geyAqa2V5LmtleUlERGF0YSwga2V5LnN0YXR1cyB9KTsKLQotICAgICAgICAgICAgY2hhbmdl
ZEtleXMgPSBXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rvcik7CisgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIGhhcyBjaGFuZ2VkIGtleXMiLCBzZXNzaW9uSWQu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX3BhcmVudEluc3RhbmNlLm1lcmdlS2V5c0Zy
b20obV9rZXlTdG9yZSk7CisgICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IG1fa2V5U3RvcmUuY29u
dmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKICAgICAgICAgfQogCiAgICAgICAgIGRpc3BhdGNo
Q2FsbGJhY2soZmFsc2UsIFdURk1vdmUoY2hhbmdlZEtleXMpLCBTdWNjZXNzVmFsdWU6OlN1Y2Nl
ZWRlZCk7CkBAIC02NTcsNDcgKzcwOSwyNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogICAg
IH0KIAogICAgIGlmIChwYXJzZUxpY2Vuc2VSZWxlYXNlQWNrbm93bGVkZ2VtZW50Rm9ybWF0KCpy
b290KSkgewotICAgICAgICAvLyBGSVhNRTogUmV0cmlldmUgdGhlIGtleSBJRCBpbmZvcm1hdGlv
biBhbmQgdXNlIGl0IHRvIHZhbGlkYXRlIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb25JZC4KLSAg
ICAgICAgQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLnJlbW92ZShzZXNzaW9uSWQp
OworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHJlbGVhc2Ug
YWNrbm93bGVkZ2VkLCBjbGVhcmluZyBhbGwga25vd24ga2V5cyIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5yZW1vdmVBbGxLZXlzRnJvbShtX2tl
eVN0b3JlKTsKKyAgICAgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgICAgIGRp
c3BhdGNoQ2FsbGJhY2sodHJ1ZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRl
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBCYWlsIGluIGNhc2Ugbm8gZm9y
bWF0IHdhcyByZWNvZ25pemVkLgorICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Np
b24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIGFuIHVucmVjb2duaXplZCBmb3JtYXQiLCBzZXNzaW9u
SWQudXRmOCgpLmRhdGEoKSk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxs
b3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OmxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IC8vIFVzZSBhIGhlbHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNw
YXRjaCwgYXZvaWRpbmcgZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMuCi0gICAg
YXV0byBkaXNwYXRjaENhbGxiYWNrID0KLSAgICAgICAgW3RoaXMsICZjYWxsYmFja10oT3B0aW9u
YWw8S2V5U3RhdHVzVmVjdG9yPiYmIGV4aXN0aW5nS2V5cywgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3Ms
IFNlc3Npb25Mb2FkRmFpbHVyZSBsb2FkRmFpbHVyZSkgewotICAgICAgICAgICAgY2FsbE9uTWFp
blRocmVhZCgKLSAgICAgICAgICAgICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4aXN0aW5nS2V5cyA9IFdURk1vdmUoZXhp
c3RpbmdLZXlzKSwgc3VjY2VzcywgbG9hZEZhaWx1cmVdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShleGlzdGluZ0tleXMpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgc3VjY2VzcywgbG9hZEZhaWx1cmUpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0
dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlz
IHNlc3Npb24uCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0g
ICAgICAgIGF1dG8mIGtleXMgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0g
ICAgICAgIGF1dG8gaXQgPSBrZXlzLmZpbmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09
IGtleXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0
LCBGYWlsZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJU
KHNlc3Npb25JZCA9PSBtX3Nlc3Npb25JRCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvciA9IG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgJmtleVN0YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGF1dG8mIGtleVZlY3RvciA9IGl0LT52YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9y
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5
LmtleUlERGF0YSwga2V5LnN0YXR1cyB9KTsKLSAgICB9CiAKLSAgICBkaXNwYXRjaENhbGxiYWNr
KFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6
Ok5vbmUpOworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9u
ZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3Nl
U2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpA
QCAtNzEzLDcgKzc0NSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3Nl
U2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjCiAKIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNr
KQogewotICAgIC8vIFVzZSBhIGhlbHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxs
YmFjayBkaXNwYXRjaCwgYXZvaWRpbmcgZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2Fs
bHMuCisgICAgQVNTRVJUKHNlc3Npb25JZCA9PSBtX3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRp
c3BhdGNoQ2FsbGJhY2sgPQogICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0
b3ImJiBrZXlTdGF0dXNWZWN0b3IsIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3Nh
Z2UsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFk
KApAQCAtNzI3LDM1ICs3NjAsMTcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8v
IENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVh
c2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNl
JyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlT
dGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNl
ZCgpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAv
LyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcg
aWYgbm9uZSBpcyBmb3VuZC4KLSAgICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNp
bmdsZXRvbigpLmtleXMoKTsKLSAgICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQp
OwotICAgICAgICBpZiAoaXQgPT0ga2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hD
YWxsYmFjayhLZXlTdGF0dXNWZWN0b3IgeyB9LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6
RmFpbGVkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJl
dHJpZXZlIHRoZSBLZXkgdmVjdG9yLCBjb250YWluaW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBz
ZXNzaW9uLCBhbmQKLSAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9y
IHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgYXV0byBrZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1
ZSk7Ci0gICAgICAgIGtleXMucmVtb3ZlKGl0KTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhl
IEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHBhaXJpbmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFz
ZWQnIHN0YXR1cy4KLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9y
KQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8
UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVz
OjpSZWxlYXNlZCB9KTsKLQogICAgICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2Vu
dHMgdGhlICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkK
ICAgICAgICAgLy8gb2YgYmFzZTY0VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhh
dCB3ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGtleSA6IGtleVZlY3RvcikgewotICAgICAgICAgICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRh
LT5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAg
ICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5
SUREYXRhLT5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXpl
KCkpKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJp
bmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LmlkKCkuZGF0YSgpLCBrZXkuaWQoKS5zaXplKCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRz
IiwgV1RGTW92ZShhcnJheSkpOwogICAgICAgICB9CkBAIC03NjYsNiArNzgxLDcgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5n
JiBzZXNzaW9uSWQsIExpY2UKICAgICAgICAgbWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0K
IAorICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2so
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1
Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5k
ZXggODViMzE5YjFhMzhjMTIxNjk5MTk3NWI4MDE5YWQyYjE2YjM2YzE0Ny4uOTgwN2ViOThiYWM5
OWU2ZjU2N2U3ZDkwYzA5N2I2ODY2Yjg2NTI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5o
CkBAIC0zMSwxMCArMzEsMTIgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5j
bHVkZSAiQ0RNRmFjdG9yeS5oIgotI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAi
Q0RNSW5zdGFuY2VTZXNzaW9uLmgiCiAjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNETVByb3h5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z2NyeXB0
Lmg+CisjaW5jbHVkZSA8bGlzdD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC03NywyNyArNzksMTMgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPFN0
cmluZz4gc2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CiB9Owog
Ci1jbGFzcyBQcm94eUNETUNsZWFyS2V5IGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1Ymxp
YzoKLSAgICBzdHJ1Y3QgS2V5IHsKLSAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXMgc3RhdHVzOwotICAgICAgICBTdHJpbmcga2V5SUREYXRhOwotICAgICAgICBTdHJpbmcga2V5
VmFsdWVEYXRhOwotICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5Qcm94eUNETUNsZWFyS2V5KCkgPSBk
ZWZhdWx0OwotICAgIGNvbnN0IFZlY3RvcjxLZXk+IGlzb2xhdGVkS2V5cygpIGNvbnN0OwotcHJp
dmF0ZToKLSAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7Ci19OwotCi1jbGFzcyBDRE1JbnN0
YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBm
aW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RN
SW5zdGFuY2VDbGVhcktleT4gewogcHVibGljOgogICAgIENETUluc3RhbmNlQ2xlYXJLZXkoKTsK
ICAgICB2aXJ0dWFsIH5DRE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAKKyAgICAvLyBDRE1JbnN0YW5j
ZQogICAgIEltcGxlbWVudGF0aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBJbXBsZW1lbnRhdGlvblR5cGU6OkNsZWFyS2V5OyB9Ci0KICAgICBTdWNjZXNz
VmFsdWUgaW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5c3RlbUNvbmZp
Z3VyYXRpb24mKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0RGlzdGluY3RpdmVJZGVudGlm
aWVyc0FsbG93ZWQoYm9vbCkgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFBlcnNpc3RlbnRT
dGF0ZUFsbG93ZWQoYm9vbCkgZmluYWw7CkBAIC0xMDUsNDcgKzkzLDg0IEBAIHB1YmxpYzoKICAg
ICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsK
ICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxD
RE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLQotICAgIHN0cnVjdCBL
ZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsKLSAgICAgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAgIFN0cmluZyBrZXlJREFzU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAg
ICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZvdGhlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIu
a2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiAqa2V5VmFsdWVEYXRhID09ICpvdGhl
ci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUd28ga2V5cyBhcmUgZXF1
YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1
cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBjb25zdCBL
ZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzLCBmaXJz
dCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0KLSAgICAgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhKG9wZXJh
dG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEtl
eSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGsxLCBrMikgJiYgIW9w
ZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPD0oY29uc3Qg
S2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPihrMSwgazIpOyB9Ci0g
ICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZr
MikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgfTsKLQotICAgIFJlZlB0cjxQ
cm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3h5Q0RNOyB9Ci0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBtX3Byb3h5Q0RNOwogfTsKIAogY2xhc3Mg
Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VTZXNz
aW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk+IHsK
IHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5jZUNsZWFy
S2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsgfQogICAg
IHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXRE
YXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlw
ZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOwog
ICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBjbG9zZVNlc3Np
b24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9p
ZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vz
c2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2Fn
ZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc2Vzc2lvbklE
OworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFyZW50SW5zdGFuY2U7CisgICAgS2V5U3Rv
cmUgbV9rZXlTdG9yZTsKK307CisKKy8vIFRoaXMgaXMgdGhlIHRocmVhZC1zYWZlIEFQSSB0aGF0
IGRlY29kZSB0aHJlYWRzIHNob3VsZCB1c2UgdG8gbWFrZSB1c2Ugb2YgYQorLy8gcGxhdGZvcm0g
Q0RNIG1vZHVsZS4KK2NsYXNzIENETVByb3h5Q2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNUHJv
eHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1Qcm94eUNsZWFyS2V5LCBXZWFrUHRyRmFjdG9y
eUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworcHVibGljOgorICAgIENETVByb3h5Q2xlYXJLZXko
Q0RNSW5zdGFuY2VDbGVhcktleSYgaW5zdGFuY2UpCisgICAgICAgIDogbV9jZG1JbnN0YW5jZShp
bnN0YW5jZSkKKyAgICB7CisgICAgICAgIC8vIEZvciBub3cgd2UgZG9uJ3QgdXNlIHRoaXMgbGlu
ayBiYWNrIHRvIHRoZSAibWFpbi10aHJlYWQgaW5zdGFuY2UiLAorICAgICAgICAvLyBidXQgaGF2
aW5nIHRoZSBjb25uZWN0aW9uIHJlYWR5IG1hZGUgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVz
ZWZ1bAorICAgICAgICAvLyBpbiB0aGUgZnV0dXJlLgorICAgICAgICBVTlVTRURfUEFSQU0obV9j
ZG1JbnN0YW5jZSk7CisgICAgICAgIGluaXRpYWxpemVHY3J5cHQoKTsKKyAgICB9CisgICAgdmly
dHVhbCB+Q0RNUHJveHlDbGVhcktleSgpOworCisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBsYWNr
IG9mIGNvbnNpc3RlbmN5IGJldHdlZW4gU2hhcmVkQnVmZmVycywKKyAgICAvLyBWZWN0b3I8Y2hh
cj4ncyBhbmQge3VpbnQ4X3QqLHNpemVfdH0gaWRpb21zIGZvciByZXByZXNlbnRpbmcgYSBjaHVu
ayBvZgorICAgIC8vIGJ5dGVzLiBGaXggdGhhdCBzb21laG93LiBOb3RlIFNoYXJlZEJ1ZmZlcnMg
YXJlIGRhbmdlcm91cyBzaW5jZQorICAgIC8vIHRoZXkncmUgbm90IHRocmVhZC1zYWZlIGFuZCB0
aGlzIGNsYXNzIG11c3QgbWFpbnRhaW4KKyAgICAvLyB0aHJlYWQtc2FmZXR5LCBidXQgbWF5YmUg
U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudCBjb3VsZCBiZQorICAgIC8vIG1hZGUgdG8gd29yaywg
aG93ZXZlciB0aGF0IGhhcyB6ZXJvIGhlbHBlcnMgZm9yIGRyb3BwaW5nIGludG8KKyAgICAvLyBp
dGVyYXRvci1hd2FyZSAvIGNvbXBhcmF0b3ItYXdhcmUgY29udGFpbmVycy4uLgorICAgIHN0cnVj
dCBjZW5jRGVjcnlwdENvbnRleHQgeworICAgICAgICBjb25zdCB1aW50OF90KiBrZXlJRDsKKyAg
ICAgICAgc2l6ZV90IGtleUlEU2l6ZUluQnl0ZXM7CisKKyAgICAgICAgY29uc3QgdWludDhfdCog
aXY7CisgICAgICAgIHNpemVfdCBpdlNpemVJbkJ5dGVzOworCisgICAgICAgIHVpbnQ4X3QqIGVu
Y3J5cHRlZEJ1ZmZlcjsKKyAgICAgICAgc2l6ZV90IGVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVz
OworCisgICAgICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMgZGF0YSBsYXlvdXQuCisg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHN1YnNhbXBsZXNCdWZmZXI7CisgICAgICAgIHNpemVfdCBz
dWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXM7CisgICAgICAgIHNpemVfdCBudW1TdWJzYW1wbGVz
OworCisgICAgICAgIGJvb2wgaXNTdWJzYW1wbGVkKCkgY29uc3QgeyByZXR1cm4gbnVtU3Vic2Ft
cGxlczsgfQorICAgIH07CisKKyAgICAvLyBGSVhNRTogVW5jb25kaXRpb25hbCBpbi1wbGFjZSBk
ZWNyeXB0aW9uLiBXaGF0IGFib3V0IFNWUD8KKyAgICAvLyBGSVhNRTogR1N0cmVhbWVyLXNwZWNp
ZmljLCBpbiB0aGF0IHRoZSBmb3JtYXQgb2YgdGhlIHN1YnNhbXBsZQorICAgIC8vIGRhdGEgaXMg
ZGVmaW5lZCBieSB3aGF0ZXZlciBxdGRlbXV4IGRlY2lkZXMgdG8gZG8gd2l0aCBpdC4KKyAgICBi
b29sIGNlbmNEZWNyeXB0KGNlbmNEZWNyeXB0Q29udGV4dCYpOworCitwcml2YXRlOgorICAgIHZv
aWQgaW5pdGlhbGl6ZUdjcnlwdCgpOworCisgICAgLy8gRklYTUU6IEZvciBub3cgd2Ugb25seSBz
dXBwb3J0IEFFUyBpbiBDVFIgbW9kZSwgaW4gdGhlIGZ1dHVyZQorICAgIC8vIHdlIHdpbGwgc3Vy
ZWx5IGhhdmUgdG8gc3VwcG9ydCBtb3JlIHByb3RlY3Rpb24gc2NoZW1lcy4gQ2FuIHdlCisgICAg
Ly8gcmV1c2Ugc29tZSBDcnlwdG8gQVBJcyBpbiBXZWJDb3JlPworICAgIGJvb2wgY2VuY1NldENv
dW50ZXJWZWN0b3IoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9vbCBjZW5jU2V0
RGVjcnlwdGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNE
ZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNEZWNy
eXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmKTsKKworICAgIENETUluc3RhbmNlQ2xl
YXJLZXkmIG1fY2RtSW5zdGFuY2U7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0
byB1c2Ugc29tZXRoaW5nIGluIFdlYkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVy
X2hkX3QgbV9nY3J5SGFuZGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggNGZjNjc4N2RkOGQ5MDdj
YWQ2YTI3N2YzOWIxZWQzMmVkNjc5YTZkOC4uMThhYWE2MGFhNzk3NGEyNTA5MzA4NmRiMWVmMzJm
OTdhY2YzYzVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
CkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCi0jaW5j
bHVkZSAiQ0RNQ2xlYXJLZXkuaCIKICNpbmNsdWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9u
LmgiCiAjaW5jbHVkZSAiQ0RNUmVzdHJpY3Rpb25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5
cGUuaCIKQEAgLTIxMyw3ICsyMTIsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFNldDxBdG9tU3RyaW5n
PiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKIAogdm9pZCBDRE1GYWN0b3J5OjpwbGF0Zm9ybVJlZ2lz
dGVyRmFjdG9yaWVzKFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykKIHsKLSAgICBmYWN0
b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKICAgICBmYWN0
b3JpZXMuYXBwZW5kKCZDRE1GYWN0b3J5RmFpclBsYXlTdHJlYW1pbmc6OnNpbmdsZXRvbigpKTsK
IAogICAgIEluaXREYXRhUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVySW5pdERhdGFUeXBlKENE
TVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgeyBDRE1Qcml2YXRlRmFpclBs
YXlTdHJlYW1pbmc6OnNhbml0aXplU2luZiwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpl
eHRyYWN0S2V5SURzU2luZiB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2Iz
MjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0
OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAs
NiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxT
aGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlT
eXN0ZW0oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2NjY5ZjYyNmFmYWU4YWIxYzYzYWNjMWUzMzlkNjk0ZWQ5
ZTIxOTUyLi4zODVmMjJhZjBiZDI1NjZkYjkyN2NlNTJjNThhZDk1NTI3NmRhNmNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTc3NCw2
ICsxNzc0LDQ0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGlu
ZShHc3RFbGVtZW50KiBwaXBlbGluZSkKICAgICB9LCB0aGlzLCBudWxscHRyKTsKIH0KIAorYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1l
bnQoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAg
ICAgICAgR1NUX0VSUk9SKCJjYW4ndCBibG9jayB0aGUgbWFpbiB0aHJlYWQgd2FpdGluZyBmb3Ig
YSBDRE0gaW5zdGFuY2UiKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJbml0RGF0YSBpbml0RGF0YTsKKyAgICB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7CisgICAgICAgIFByb3Rl
Y3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKKyAgICAg
ICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3Jz
IGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90
ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRf
cGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBu
dWxscHRyKTsKKworICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlk
LCBkYXRhfSk7CisgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1Rf
RVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0RGF0YSkpOworCisgICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworCisg
ICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0
YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAgICAg
ZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRh
Y2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgeworICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0
YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsK
K30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2Fn
ZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5Ymlu
KSB7CkBAIC0xODA5LDQxICsxODQ3LDggQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXBy
ZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJl
YWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJl
ZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0
aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBj
b250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAg
ewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAg
ICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNz
YWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRz
LCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50
cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6
ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1F
dmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5
c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50Lmdl
dCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAg
ICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAg
ICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVu
dC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0
aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAg
ICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgp
OwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndh
aXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYg
IW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgeworICAgICAgICBib29sIGNk
bUF0dGFjaGVkID0gYmxvY2tXYWl0aW5nRm9yQ0RNQXR0YWNobWVudChtZXNzYWdlKTsKKyAgICAg
ICAgaWYgKGNkbUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUlu
c3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3Rl
bVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51
aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgp
LnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19O
QU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg1MSwxMCArMTg1NiwxMSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkK
ICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0
X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQ
RV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3Nh
Z2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dB
Uk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9X
QVJOSU5HKCJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQsIG5vIENETSBhdmFpbGFibGUiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQogCkBAIC0yMTg0LDE5ICsyMTkwLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHBy
b2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgZ3N0X21wZWd0c19zZWN0
aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVj
dHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtleSBtZXNzYWdlIGZyb20gJXMiLCBH
U1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9y
S2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBi
ZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBiZWluZyBjcmVhdGVkIGFuZCBsaW5r
ZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRoZXkgYXJlIG5vdCBhbmQgY3VycmVudAot
ICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3ku
IEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBw
YXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlCi0gICAg
ICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1w
dCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4KLSAgICAgICAgICAgIGF0dGVtcHRU
b0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1
Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtleS1yZWNlaXZlZCIpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0ta2V5LXJlY2VpdmVkIG1lc3Nh
Z2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgICAg
IHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgZWxz
ZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkg
ewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUHJvY2Vzc2luZyBI
VFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOwpAQCAtMzcxMCwxNCAr
MzcwMywxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VB
dHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIs
IEZBTFNFKSk7CisgICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFu
Y2VQcm94eSo+KCZpbnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7
CisgICAgbV9jZG1JbnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKKworICAgIEdSZWZQdHI8
R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0t
cHJveHkiLCBGQUxTRSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdz
dF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3Ry
dWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5U
RVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0tcHJveHkiLCBHX1RZUEVfUE9JTlRF
UiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5
IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5
Q0RNKCkuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNE
TSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNl
LT5wcm94eSgpLmdldCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRN
dXRleCk7CiAgICAgLy8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwg
ZGVtdXhlcnMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzcz
OSw3ICszNzM1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3Rh
bmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1w
dHkgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwogICAgIG1fY2RtSW5zdGFuY2UgPSBu
dWxscHRyOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1w
cm94eSIsIEZBTFNFKSk7CiAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQo
bV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkpOwogfQogCkBAIC0zNzcyLDUxICszNzY4
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9u
RXZlbnQoR3N0RXZlbnQqIGV2ZW50KQogICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KHtldmVudEtleVN5c3RlbVVVSUQsIGluaXREYXRhfSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgaXNXYWl0aW5nRm9yS2V5KQot
ewotICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3ZSBh
cmUgcmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3YWl0
aW5nIGRlY3J5cHRvcnMuCi0gICAgR1NUX1RSQUNFKCJpc1dhaXRpbmdGb3JLZXkgJXMsIG1faXNX
YWl0aW5nRm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKGlzV2FpdGluZ0ZvcktleSksIGJvb2xG
b3JQcmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwotICAgIGlmIChpc1dhaXRpbmdGb3JLZXkg
PT0gbV9pc1dhaXRpbmdGb3JLZXkgfHwgKCFpc1dhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGlu
Z0ZvcktleSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1dhaXRpbmdGb3JLZXkgPSBp
c1dhaXRpbmdGb3JLZXk7Ci0gICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAl
cyIsIGJvb2xGb3JQcmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwotICAgIG1fcGxheWVyLT53
YWl0aW5nRm9yS2V5Q2hhbmdlZCgpOwotfQotCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6d2FpdGluZ0ZvcktleSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQorICAg
IGlmICghbV9waXBlbGluZSB8fCAhbV9jZG1JbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlw
ZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9u
ZXdfY3VzdG9tKEdTVF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhbnkt
ZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSk7Ci0gICAgaWYgKHN0YXRlID49IEdTVF9TVEFU
RV9QQVVTRUQpIHsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGlu
ZS5nZXQoKSwgcXVlcnkuZ2V0KCkpOwotICAgICAgICBHU1RfVFJBQ0UoInF1ZXJ5IHJlc3VsdCAl
cywgb24gJXMiLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlID49IEdTVF9TVEFURV9SRUFEWSkg
ewotICAgICAgICAvLyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhlIHBpcGVsaW5lIGlzIGVhc2llciBi
dXQgaXQgb25seSB3b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdXAgYW5kIHJ1bm5pbmcs
IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5kIGFzayB0aGUgZGVjcnlwdG9ycyBk
aXJlY3RseS4KLSAgICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4gaXRlcmF0b3IoZ3N0X2Jp
bl9pdGVyYXRlX3JlY3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgICAgICBH
c3RJdGVyYXRvclJlc3VsdCBpdGVyYXRvclJlc3VsdDsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgaXRlcmF0b3JSZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9sZChpdGVyYXRvci5nZXQoKSwgW10o
Y29uc3QgR1ZhbHVlICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4g
ewotICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSBHU1RfRUxFTUVOVChnX3Zh
bHVlX2dldF9vYmplY3QoaXRlbSkpOwotICAgICAgICAgICAgICAgIEdzdFF1ZXJ5KiBxdWVyeSA9
IEdTVF9RVUVSWShkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIVdFQktJVF9JU19NRURJ
QV9DRU5DX0RFQ1JZUFQoZWxlbWVudCkgfHwgIWdzdF9lbGVtZW50X3F1ZXJ5KGVsZW1lbnQsIHF1
ZXJ5KTsKLSAgICAgICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgICAg
ICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICB9IHdoaWxl
IChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgICAgaWYgKGl0
ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgICAgIEdTVF9XQVJO
SU5HKCJpdGVyYXRvciByZXR1cm5lZCBhbiBlcnJvciIpOwotICAgICAgICByZXN1bHQgPSBpdGVy
YXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfT0s7Ci0gICAgICAgIEdTVF9UUkFDRSgiaXRlcmF0
b3IgcmVzdWx0ICVkLCB3YWl0aW5nICVzIiwgaXRlcmF0b3JSZXN1bHQsIGJvb2xGb3JQcmludGlu
ZyhyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2Nk
bUluc3RhbmNlLT5pc1dhaXRpbmdGb3JLZXkoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggYjJiYjU0MWEzMjZhZTliZWZh
NWIwMzc3OWMwZDExMDYzNWQ3OWUxNC4uZjMzNmU2YmU5YmFmZjM2ZDQzYzI3ODczOTRiMWNjYjY1
MDBlNzU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aApAQCAtNzYsNiArNzYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdE1wZWd0c1NlY3Rpb24gR3N0
TXBlZ3RzU2VjdGlvbjsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQorI2luY2x1ZGUgIkNETVByb3h5LmgiCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgX0dz
dFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9J
bmZvIEdzdFZpZGVvSW5mbzsKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250
ZXh0OwpAQCAtMzcxLDcgKzM3NSw3IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKQogICAgIExvY2sgbV9jZG1BdHRhY2htZW50TXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1f
Y2RtQXR0YWNobWVudENvbmRpdGlvbjsKLSAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1f
Y2RtSW5zdGFuY2U7CisgICAgUmVmUHRyPENETUluc3RhbmNlUHJveHk+IG1fY2RtSW5zdGFuY2U7
CiAKICAgICBMb2NrIG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFu
ZGxlZFByb3RlY3Rpb25FdmVudHMuCiAgICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJv
dGVjdGlvbkV2ZW50czsKQEAgLTQ1MCw3ICs0NTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXND
RE1BdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2RtSW5zdGFuY2U7IH0KICAgICB2b2lkIGF0
dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwogICAgIHZvaWQgaW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBzZXRXYWl0aW5nRm9yS2V5
KGJvb2wpOworICAgIGJvb2wgYmxvY2tXYWl0aW5nRm9yQ0RNQXR0YWNobWVudChHc3RNZXNzYWdl
Kik7CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1dHRpbmdEb3duOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0
cmVhbWVyLmNwcAppbmRleCBkOGMwMjU0ZmYxNDMwM2M1ZTE4OTczYmU0ZjIyMWFlN2MwZTkzNGE5
Li43Zjg3M2E3ZmM3YzBlNzg0NjRhOGZiNWZjYzNmMmZkYjBiYTM5MDE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNw
cApAQCAtMzcsMTIgKzM3LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5l
IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHRQcml2YXRlIHsKLSAgICBSZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07
Ci0gICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJL
ZXk+IHByb3h5Q0RNOwogfTsKIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3Rh
dGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFj
aGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Q
cm94eT4pOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1w
bGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAog
R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
ZGVidWdfY2F0ZWdvcnkpOwpAQCAtODQsNyArODMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dAogCiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xh
c3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xh
c3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktl
eVVVSUQ7Ci0gICAgY2VuY0NsYXNzLT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5D
UFRSKGhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQg
PSBHU1RfREVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRl
Y3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0
ZSkpOwpAQCAtOTMsNjEgKzkyLDMyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9r
ZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMg
dm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFy
S2V5RGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQog
ICAgIHNlbGYtPnByaXYgPSBwcml2OwogICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktl
eURlY3J5cHRQcml2YXRlKCk7Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lw
aGVyX29wZW4oJihwcml2LT5oYW5kbGUpLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVS
X01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMi
LCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQog
fQogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmpl
Y3QpOwogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYt
PnByaXY7Ci0gICAgZ2NyeV9jaXBoZXJfY2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJF
TlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29s
IGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFj
aGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Q
cm94eT4gcHJveHlDRE0pCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2Fz
dDxQcm94eUNETUNsZWFyS2V5Kj4ocHJveHlDRE0uZ2V0KCkpOworICAgIHByaXYtPnByb3h5Q0RN
ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5Kj4ocHJveHlDRE0uZ2V0KCkpOwog
ICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKIH0KIAotc3RhdGljIGJvb2wgZmluZEFuZFNldEtl
eShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYsIGNvbnN0IFN0cmluZyYm
IGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVy
LCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291bnQsIEdzdEJ1ZmZlciog
c3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkgewotICAgICAg
ICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5VmFsdWUgPSBr
ZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRlcygpID09IENM
RUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9z
ZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlWYWx1ZS5zaXpl
SW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhl
cl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VU
X1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwogCi1zdGF0aWMgYm9vbCBk
ZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZl
ciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1
bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKQotewot
ICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAibm8g
SVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAha2V5SURCdWZmZXIgfHwgIWJ1ZmZl
cikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlkIGRlY3J5cHQoKSBw
YXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTU3LDI3ICsx
MjcsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0laRV07Ci0gICAgaWYgKG1hcHBlZElW
QnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1zZXQoY3RyICsgOCwgMCwgOCk7Ci0g
ICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIDgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZX1NJ
WkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCBDTEVBUktF
WV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFf
Q0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAo
Y2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9jaXBo
ZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBkZWNyeXB0Iik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBlZEtleUlkQnVmZmVyID0gV2ViQ29y
ZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CiAg
ICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKQEAgLTE5MCw3MiArMTM5LDI5IEBA
IHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBwZWRLZXlJZEJ1ZmZlci0+ZGF0YSgp
LCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbiA9
IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwotCi0gICAgaWYgKCFzdWJTYW1wbGVD
b3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNyeXB0aW9uLgotICAgICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9uOiAlenUgZW5jcnlwdGVk
IGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIHRo
ZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNpemUoKSkgewot
ICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRs
ZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAwLCAwKTsKLSAg
ICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19zdHJl
cnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAv
LyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwuCi0gICAgaWYgKCFzdWJTYW1wbGVz
QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkVycm9yLCB0aGUgc3Vi
U2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1dG8gbWFwcGVkU3ViU2FtcGxlc0J1
ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YlNhbXBsZXNCdWZmZXIs
IEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJTYW1wbGVzQnVmZmVyKSB7Ci0gICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZl
ciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR1VuaXF1ZVB0cjxHc3RC
eXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVzQnVm
ZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOwotICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24sIG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICBn
dWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAgICAgaWYgKHNhbXBsZUluZGV4IDwg
c3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91
aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIpCi0gICAgICAgICAgICAgICAgfHwg
IWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0VuY3J5
cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJ1bnN1cHBv
cnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBu
Qnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNFbmNyeXB0ZWQgPSBtYXBwZWRCdWZm
ZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2RvPSV6
dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9z
aXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNDbGVhcjsKLSAgICAgICAgaWYgKG5C
eXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vi
c2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSkiLCBzYW1wbGVJ
bmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uKTsK
LSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5k
bGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24sIG5CeXRlc0VuY3J5cHRlZCwgMCwg
MCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4ICV1IGRlY3J5cHRpb24gZmFpbGVk
OiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3NpdGlv
biArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gbWFwcGVk
U3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdENvbnRl
eHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFwcGVkS2V5SWRCdWZmZXItPmRhdGEo
KTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6
ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRl
eHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5zaXplKCk7CisgICAgY29udGV4dC5l
bmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmVuY3J5
cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVyLT5zaXplKCk7CisgICAgY29udGV4
dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7CisgICAgaWYgKCFzdWJzYW1wbGVDb3Vu
dCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbnVsbHB0cjsKKyAgICBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIpOworICAgICAgICBtYXBwZWRTdWJz
YW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoc3Vic2FtcGxl
c0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYgKCFtYXBwZWRTdWJzYW1wbGVzQnVm
ZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFw
IHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBtYXBwZWRTdWJzYW1wbGVzQnVm
ZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVz
ID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBwcml2LT5wcm94eUNETS0+Y2VuY0RlY3J5cHQoY29udGV4dCk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4M2QwNDc0ODYwZjZlZjgxN2YzMWNk
YzE1ZTQ4YWMxODZjMDM0NC4uZWI1M2QzZmM2NzAzYmVlNmI3NzIzMDc3OWRkODViZTk0MTE5Mjk5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0yNSwzNCArMjUsMzQgQEAKIAog
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRl
ICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIkdT
dHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1
ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQcm94eUNETTsKK3VzaW5nIFdlYkNv
cmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BS
SVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQ
RV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQ
cml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZh
dGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rpb25FdmVudDsKLSAgICBSZWZQdHI8
UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVjZWl2ZWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAgTG9jayBtdXRleDsKLSAgICBDb25k
aXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHk7CisKKyAgICBM
b2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRpb24gY2RtQXR0YWNobWVudENvbmRp
dGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhTZWNvbmRzVG9XYWl0Rm9y
Q0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0
ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CiBzdGF0aWMgdm9pZCBm
aW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RCYXNl
VHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBzKiwgR3N0Q2FwcyopOwogc3RhdGlj
IEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiwgR3N0QnVm
ZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3Jt
KiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRyYW5z
Zm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsKLXN0YXRpYyBib29sIGlzQ0RNSW5z
dGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwogc3Rh
dGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0Q29udGV4dCopOwogCi0KIEdTVF9E
RUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5
cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlh
X2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKIApAQCAtNzYsNyArNzYs
NiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9j
bGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJh
bnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFuc2Zvcm1DYXBzKTsKICAgICBiYXNl
VHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwogICAg
IGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSKHNpbmtF
dmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdf
RlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUpKTsK
IH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUlu
UGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiB7CiAgICAg
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9D
RU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNl
bGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKIAotICAgIC8vIFRoZSBr
ZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuIFdhaXQgZm9yIGl0LgotICAgIGlm
ICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
a2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBpdCIpOwotICAgICAgICBpZiAoR1NU
X1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQgfHwgKEdTVF9TVEFU
RV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcgJiYg
R1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEKSkg
ewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiY2FuJ3QgcHJvY2VzcyBrZXkg
cmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIpOwotICAgICAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VuZCAiZHJt
LWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhlIHBsYXllciB0byByZXNlbmQgdGhl
IENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3JtIHdlIGFyZSB3YWl0aW5nIGZvciBr
ZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0cnVlOwotICAgICAgICBnc3RfZWxl
bWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksIGdzdF9tZXNzYWdlX25ld19lbGVt
ZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJkcm0td2FpdGlu
Zy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50
TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPm11dGV4LCBT
ZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPmtleVJlY2VpdmVk
OworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8gYmUgbmVnb3RpYXRlZCBiZWZvcmUg
d2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFwcml2LT5jZG1Qcm94eSkgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90IGF2YWlsYWJsZSwgZ29pbmcgdG8g
d2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0
Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vjb25kc1RvV2FpdEZvckNETVByb3h5
LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5OwogICAgICAgICB9
KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgaWYgKCFwcml2
LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiQ0RNUHJv
eHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAgICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0gICAgICAgIHByaXYtPndhaXRpbmdG
b3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVN
RU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZlZCIpKSk7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIsIHBy
aXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBHc3RQcm90ZWN0aW9uTWV0YSogcHJv
dGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0X2J1
ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpAQCAtMjA3LDMyICsxOTcsMzAgQEAg
c3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBi
YXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwgYnVm
ZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQorICAg
IGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1ZmZl
ciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgfSk7
CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50
KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOwotICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwogICAgIGlmICghZ3N0X3N0cnVjdHVy
ZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywgImVuY3J5cHRlZCIsICZlbmNyeXB0
ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgZW5j
cnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGlmICghaXZTaXplIHx8ICFl
bmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgaWYgKCFpdlNpemUg
fHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KIAogICAg
IEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9GT1JN
QVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50
OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywg
InN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsKLSAgICAgICAg
Z3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+
KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJh
bnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikK
ICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+
aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7Ci0gICAg
ICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1YlNhbXBsZXNCdWZmZXIgPSBnc3Rf
dmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlmICghc3ViU2FtcGxlc0J1ZmZlcikg
eworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiVGhlcmUgaXMgbm8gc3Vic2Ft
cGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBsZSBjb3VudCIpOworICAgICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAi
a2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIiKTsKLSAgICAgICAgZ3N0X2J1ZmZl
cl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rp
b25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0K
ICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUp
OwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgdmFsdWUg
PSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2Iik7CiAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjcwLDcxICsy
NTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJh
bnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNl
bGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxmLCBpdkJ1ZmZl
ciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1YlNhbXBsZXNCdWZmZXIp
KSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24gZmFpbGVkIik7
Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0
PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9U
X1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
cmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3N0YXRpYyBib29sIGlzQ0RN
UHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikK
IHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIHJldHVybiBw
cml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2LT5tdXRleC5pc0xvY2tlZCgpKTsK
LQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5U
KHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRo
ZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwg
d2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFu
ZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQg
ZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikg
YW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBB
IG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1bCBidXQgdGhlIHBsYXllciBzZXRz
IHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUgQ0RNSW5zdGFuY2UgYW5kIGlmIGl0
IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9mIGFza2luZyBmb3Igb25lIGFzIGl0
IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNvZGUu
IFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJlcXVl
c3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3IgYnVz
Ci0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KLSAgICAgICAgaWYgKGNvbnRl
eHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dl
dF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLWlu
c3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNETSA9IHZhbHVlID8gcmVpbnRlcnBy
ZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7
Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0gICAgICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCBy
ZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBwcml2LT5wcm94eUNETS0+cmVmQ291
bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVD
VChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIpOworc3RhdGljIENETVByb3h5KiBy
ZXF1ZXN0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0t
cHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhl
IGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3Ry
ZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNl
IHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBs
YXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZl
IGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNl
dHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYg
aXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMg
aXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBU
aGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0
IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwor
ICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgeworICAg
ICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2Nv
bnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Q
cm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChwcm94
eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEg
bmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHktPnJl
ZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBub3Qg
YXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09CSkVD
VChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2
LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFz
ZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFjaENE
TVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVByb3h5
KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhz
ZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NUX0VW
RU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1f
T09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0
aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91dC1v
Zi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8gcHJl
ZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCi0g
ICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0
aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZhaWxh
YmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBDRE0g
aW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5j
ZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGlu
ZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5OworICAg
IGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2
LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikp
IHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkq
IHByb3h5ID0gcmVxdWVzdENETVByb3h5RnJvbUdzdENvbnRleHQoc2VsZik7CisgICAgICAgIGlm
IChwcm94eSkgeworICAgICAgICAgICAgYXR0YWNoQ0RNUHJveHkoc2VsZiwgcHJveHkpOworICAg
ICAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byByZXRyaWV2ZSBDRE1Qcm94eSBmcm9tIGNv
bnRleHQiKTsKICAgICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgICAgICAgaWYg
KGtsYXNzLT5oYW5kbGVLZXlSZXNwb25zZShzZWxmLCBwcml2LT5wcm94eUNETSkpIHsKLSAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCIpOwotICAgICAgICAg
ICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpdi0+Y29uZGl0aW9u
Lm5vdGlmeU9uZSgpOwotICAgICAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RFdmVu
dCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IEZBTFNFOwogCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTEzNTUKKyAgICAvLyBXZSBzaG91bGQgYmUgaGFuZGxpbmcgcHJvdGVjdGlv
biBldmVudHMgaW4gdGhpcyBjbGFzcyBpbgorICAgIC8vIGFkZGl0aW9uIHRvIG91dC1vZi1iYW5k
IGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKKyAgICAvLyBwcmVmZXJyZWQgc3lz
dGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0dXJlIHByb3RlY3Rpb24KKyAgICAvLyBldmVu
dHMgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVtdXhlciwgc28gdGhleSBtdXN0IGJlCisg
ICAgLy8gaGFuZGxlZCBpbiBoZXJlLgorICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQp
KSB7CisgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiB7CisgICAgICAg
IEFTU0VSVChnc3RfZXZlbnRfaGFzX25hbWUoZXZlbnQsICJhdHRlbXB0LXRvLWRlY3J5cHQiKSk7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkhhbmRsaW5nIGF0dGVtcHQtdG8tZGVj
cnlwdCIpOworICAgICAgICByZXN1bHQgPSBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShz
ZWxmKTsKICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKLSAgICAgICAgcmVzdWx0ID0g
VFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0zNDUsMTYgKzM1
NCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0q
IHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0UGFkRGly
ZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkqIHF1ZXJ5KQotewotICAgIGlmIChnc3Rfc3RydWN0
dXJlX2hhc19uYW1lKGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKHF1ZXJ5KSwgImFueS1kZWNyeXB0
b3Itd2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKHRyYW5zKTsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVCh0cmFucywgImFueS1kZWNy
eXB0b3Itd2FpdGluZy1mb3Ita2V5IHF1ZXJ5LCB3YWl0aW5nZm9ya2V5ICVzIiwgYm9vbEZvclBy
aW50aW5nKHByaXYtPndhaXRpbmdGb3JLZXkpKTsKLSAgICAgICAgcmV0dXJuIHByaXYtPndhaXRp
bmdGb3JLZXk7Ci0gICAgfQotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MocGFy
ZW50X2NsYXNzKS0+cXVlcnkodHJhbnMsIGRpcmVjdGlvbiwgcXVlcnkpOwotfQotCiBzdGF0aWMg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0
U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KTsKQEAg
LTM2Myw3ICszNjIsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUo
R3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbgogICAgIHN3aXRjaCAodHJh
bnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CiAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAg
cHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICBwcml2LT5jZG1BdHRhY2htZW50
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKQEAgLTM4MCwxMiArMzc5LDE0IEBAIHN0YXRpYyB2b2lkIHNldENvbnRleHQo
R3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCogY29udGV4dCkKIHsKICAgICBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVD
UllQVChlbGVtZW50KTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7
CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOwogCi0gICAgaWYgKGdzdF9j
b250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0taW5zdGFuY2UiKSkgewot
ICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0
X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1pbnN0YW5jZSIpOwotICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIHByaXYtPnByb3h5Q0RN
ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9pbnRl
cih2YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVj
ZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+cHJveHlDRE0uZ2V0KCkpOworICAgIGlm
IChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLXByb3h5Iikp
IHsKKyAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVl
KGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0tcHJveHkiKTsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAgICAg
cHJpdi0+Y2RtUHJveHkgPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHkqPihnX3Zh
bHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5jZG1Qcm94eS5n
ZXQoKSk7CisgICAgICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVBy
b3h5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaApp
bmRleCAwNjUxZGZiOWMzYmU5NTk0OGQzYTllOThkZTZlZDhkNGU4ZjFmYTVkLi44NTc1YTA3MTAy
YmQxMzNmOTI1ZGUxYTA3YWRjOTIyYzdhMDU4NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aApAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNF
KEdTVFJFQU1FUikKIAotI2luY2x1ZGUgPENETUluc3RhbmNlLmg+CisjaW5jbHVkZSA8Q0RNUHJv
eHkuaD4KICNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+CiAjaW5jbHVkZSA8
Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDggKzU1LDggQEAgc3Ry
dWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgewogICAgIEdzdEJh
c2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAogICAgIGNvbnN0IGNoYXIqIHByb3RlY3Rp
b25TeXN0ZW1JZDsKLSAgICBib29sICgqaGFuZGxlS2V5UmVzcG9uc2UpKFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6UHJveHlDRE0+KTsKLSAgICBi
b29sICgqZGVjcnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1
ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVy
LCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcik7
CisgICAgYm9vbCAoKmNkbVByb3h5QXR0YWNoZWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6Q0RNUHJveHk+KTsKKyAgICBib29sICgqZGVjcnlw
dCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXZCdWZm
ZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBz
dWJzYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcik7CiB9OwogCiBHX0VO
RF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAppbmRleCBi
MzJiNWEwMTY4NDU1ZGVjZTk5NWQ1NmE2YjQzNGU4ZGQ0ZmJlNjgxLi5jZTVkOGY3ZDZiZGYzOGI1
OTIyMDkzMDJhNmU2ZDcxYjM2OTY2MzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE1GYWN0b3J5LmNwcApAQCAtMjI2LDggKzIyNiw2IEBAIE9wdGlvbmFsPFN0cmluZz4gTW9ja0NE
TTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0CiAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotUHJveHlDRE1Nb2NrOjp+UHJveHlDRE1Nb2NrKCkg
PSBkZWZhdWx0OwotCiBNb2NrQ0RNSW5zdGFuY2U6Ok1vY2tDRE1JbnN0YW5jZShXZWFrUHRyPE1v
Y2tDRE0+IGNkbSkKICAgICA6IG1fY2RtKGNkbSkKIHsKQEAgLTI5NiwxMSArMjk0LDYgQEAgUmVm
UHRyPENETUluc3RhbmNlU2Vzc2lvbj4gTW9ja0NETUluc3RhbmNlOjpjcmVhdGVTZXNzaW9uKCkK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDRE1JbnN0YW5jZVNlc3Npb24obWFrZVdlYWtQ
dHIoKnRoaXMpKSk7CiB9CiAKLVJlZlB0cjxQcm94eUNETT4gTW9ja0NETUluc3RhbmNlOjpwcm94
eUNETSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm94eUNETU1vY2soKSk7
Ci19Ci0KIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb24oV2Vh
a1B0cjxNb2NrQ0RNSW5zdGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBtX2luc3RhbmNlKFdURk1v
dmUoaW5zdGFuY2UpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCmlu
ZGV4IGQ3ZTY2ZTYwMTZkMTAxNzgxMmVhZmE4YzgwYjQ3ZDQ3MjgzNTBjZDEuLjM5OTA5YjkzMDNh
OTRjOTM2OGVhYTBmNjI1ZjRiNjdlNTI1MDU5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01v
Y2tDRE1GYWN0b3J5LmgKQEAgLTk5LDExICs5OSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IG1fc2Vzc2lvbnM7CiB9OwogCi1jbGFz
cyBQcm94eUNETU1vY2sgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGljOgotICAgIHZp
cnR1YWwgflByb3h5Q0RNTW9jaygpOwotfTsKLQogY2xhc3MgTW9ja0NETSA6IHB1YmxpYyBDRE1Q
cml2YXRlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TW9ja0NETT4gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTUwLDcgKzE0NSw2IEBAIHByaXZhdGU6CiAgICAg
U3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CiAg
ICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8Q0RN
SW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVmUHRyPFByb3h5
Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsOwogCiAgICAgV2Vha1B0cjxNb2NrQ0RNPiBtX2Nk
bTsKICAgICBib29sIG1fZGlzdGluY3RpdmVJZGVudGlmaWVyc0FsbG93ZWQgeyB0cnVlIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389384</attachid>
            <date>2020-01-31 11:25:09 -0800</date>
            <delta_ts>2020-02-04 03:49:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200131192507.patch</filename>
            <type>text/plain</type>
            <size>107412</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFmYjI1Y2JhZDZlYWMz
OWYzOGUyZWVhYmZlM2ZlY2RiMGJmMmQwNS4uNWFjMmZhMTA2MzJkYTRlYjhhOWJkNDhiNDZkZmJk
M2Q0MDFhYjAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNSBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
LgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0
ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0IHRoZWlyIHN0YXR1cyBpcy4KKworICAg
ICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhyZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVh
bCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIgcXVpcmtzLiBUaGUgdHdvIG1haW4gcHJv
YmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisgICAgICAgIGhhdmUgaW4gV2ViS2l0IGlz
IGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZyb20gYmFja2dyb3VuZAorICAgICAgICBt
ZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5hZ2VtZW50IGlzIGhvdyB0byBtYW5hZ2Ug
dGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAgICAgY29oZXJlbnQgd2l0aCBKYXZhU2Ny
aXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxlbWVudGF0aW9uLAorICAgICAgICB0aGUg
cmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFja2dyb3VuZCBtZWRpYQorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1bHQga2V5IHN0b3JlIGludGVyZmFjZSBm
b3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFzc2VzIGNhbiwgb24gcmVjZWlwdCBvZiBu
ZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJlYWwgQ0RNLCB0ZWxsIENETVByb3h5IGFi
b3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBzdGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50
ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20gdGhlcmUsCisgICAgICAgIGxldHRpbmcg
SmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8K
KyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMgd2VsbCBhcyB0aGUgbWVkaWEgZGVjb2Rl
IHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQgY29tZSBhc2tpbmcuCisKKyAgICAgICAg
QWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlzIGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcg
dGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5zdGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRoaXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5
IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAgICAgIHRocmVhZC11bnNhZmUgYWNjZXNz
IG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdlIGhhZCB0byBkbworICAgICAgICBzb21l
dGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNvbWV0aGluZyB3YXMgUHJveHlDRE0gKGEK
KyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBub3cpLCB3aGljaCB3YXMgYSBoYWNrIGFu
ZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5
IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFuZAorICAgICAgICBpdCB3aWxsIGJ5IGRl
ZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcgb2YgdGhlIGtleSBzdG9yZSBmb3IKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVycm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5k
IHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRlY3J5cHRpb24gLyBkZWNvZGUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1Qcm94eTo6a2V5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
b3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eTo6dHJ5V2FpdEZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6
a2V5QXZhaWxhYmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUF2YWlsYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JX
YWl0Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0
YXJ0ZWRXYWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6
OnN0b3BwZWRXYWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJv
eHk6OnJlcXVlc3RLZXlTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5
OjptZXJnZUtleXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnJl
bW92ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OktleTo6aWRBc1NoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OmlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5OjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpkZXJlZik6CisgICAgICAgIChXZWJD
b3JlOjpLZXk6OnJlZkNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aGFzU2Ft
ZUtleVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OktleSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmVBbGxLZXlzKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleVN0b3JlOjpudW1LZXlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNiZWdpbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpl
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNlbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjcmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3Jl
OjpjcmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpDRE1J
bnN0YW5jZVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnByb3h5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OmlzV2FpdGluZ0Zv
cktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6dHJhY2tTZXNzaW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHA6IEFkZGVkIGEgMzIgYW5kCisgICAgICAgIDE2IGJpdCBieXRlIHJlYWRlciB1dGlsaXR5IGZv
ciBzdWJzYW1wbGUgYnVmZmVyIHBhcnNpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHlDbGVhcktleTo6fkNETVByb3h5Q2xlYXJLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IpOiBIZWxwZXIgbWV0aG9k
IGZvciBHQ3J5cHQuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0
RGVjcnlwdGlvbktleSk6IERpdHRvLiBUaGlzCisgICAgICAgIG1ldGhvZCB3aWxsIGJsb2NrIGlm
IGl0IGRldGVjdHMgYSBrZXkgaXMgbm90IHlldCBhdmFpbGFibGUgZnJvbSBKUy4KKyAgICAgICAg
KFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNhbXBsZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRTdWJzYW1w
bGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVj
cnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6aW5pdGlh
bGl6ZUdjcnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IFdpcmUgaW50byB0aGUKKyAgICAgICAgQ0RNUHJveHkg
aW5mcmFzdHJ1Y3R1cmUsIHdlIHBhc3Mgb3VyIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCisg
ICAgICAgIENETVByb3h5IHRvIHRoZSBiYXNlIGNsYXNzIGZvciBpdHMgY29tbWFuZCBrZXkgbWFu
YWdlbWVudAorICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAgdHJhY2tTZXNzaW9u
IG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1FCisgICAgICAgIHNl
c3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJl
cXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFjayBvZiBnZW5lcmF0
ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVzZSBuZXcga2V5IG1h
bmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
c29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94eUNETUNsZWFyS2V5
Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5OjprZXlJREFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5VmFsdWVBc1N0cmluZyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6IERlbGV0ZWQuIEl0IGxvb2tzIGxpa2Ugd2Ug
d2VyZSB1bm5lY2Vzc2FyaWx5CisgICAgICAgIHNvcnRpbmcgdGhlIGtleSB2ZWN0b3JzLiBJdCBk
b2Vzbid0IG1ha2UgYW55IHNlbnNlIHRvIGltcG9zZSBhbgorICAgICAgICBvcmRlcmluZyBvbiBr
ZXlzLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaDogUmVmYWN0b3IgdG8gdXNlCisgICAgICAgIG5ldyBrZXkg
bWFuYWdlbWVudCBjbGFzc2VzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5
IG9uIENETUNsZWFyS2V5LmgsIHNpbmNlIEkgaGF2ZW4ndCBhZGRlZCBDRE1Qcm94eQorICAgICAg
ICB0byB0aGUgQXBwbGUgYnVpbGQgc3lzdGVtLCBhbmQgSSBkb24ndCBiZWxpZXZlIHRoZXkgbmVl
ZCBDbGVhcktleQorICAgICAgICBzdXBwb3J0PyBPciBhdCBsZWFzdCBpdCBpcyBmYWxzZWx5IGFk
dmVydGlzZWQgYXMgc3VwcG9ydGVkPworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmg6CisgICAg
ICAgIFJlbW92ZSBvYnNvbGV0ZSBQcm94eUNETSBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJsb2NrV2FpdGluZ0Zv
ckNETUF0dGFjaG1lbnQpOgorICAgICAgICBSZWZhY3RvciBsb2dpYyBvdXQgb2Ygc3luY01lc3Nh
Z2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZVN5bmNNZXNzYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3It
a2V5IGNvZGUsIGl0IHdhcyBhbGwgYnJva2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAg
IEVuZm9yY2UgdXNlIG9mIENETUluc3RhbmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9y
dHMgd2lsbCBiZQorICAgICAgICB1c2luZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZy
b20gYmFja2dyb3VuZAorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUg
dG8gdGhlIE1lZGlhUGxheWVyIGZvcgorICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQs
IHNvIHdpcmUgdGhhdCBpbiBoZXJlIHRvby4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6d2FpdGluZ0ZvcktleSBjb25zdCk6IEtleQorICAgICAgICBzdGF0
dXMgbm90aWZpY2F0aW9ucyBhcmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBDRE1Qcm94eSBu
b3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdh
aXRpbmdGb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDogTm93CisgICAgICAgIHdlIHVzZSBD
RE1JbnN0YW5jZVByb3h5LCBub3QgQ0RNSW5zdGFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHA6
CisgICAgICAgIFJlZmFjdG9yIHRvIHVzZSBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9j
bGVhcl9rZXlfZGVjcnlwdF9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKGNk
bVByb3h5QXR0YWNoZWQpOgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgIChoYW5kbGVLZXlS
ZXNwb25zZSk6IERlbGV0ZWQuIFRoaXMgd2FzIGEgYmFkbHkgbmFtZWQgbWV0aG9kIHRoYXQgaGFz
IGJlZW4gY2hhbmdlZCB0byBjZG1Qcm94eUF0dGFjaGVkLgorICAgICAgICAoZmluZEFuZFNldEtl
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVm
YWN0b3IgZm9yIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0
aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6IFJlbW92ZSB0aGUKKyAgICAgICAgcXVlcnkgaGFuZGxl
ciB1c2VkIGZvciB3YWl0aW5nIGZvciBrZXkgbm90aWZpY2F0aW9ucywgc2luY2UgaXQncworICAg
ICAgICBiZWVuIGRlbGV0ZWQgbm93LgorICAgICAgICAodHJhbnNmb3JtSW5QbGFjZSk6IFJlbW92
ZSB0aGUgYnJva2VuIHdhaXRpbmcgZm9yIGtleSBsb2dpYywgYW5kCisgICAgICAgIG1ha2UgY2xl
YXIgd2hhdCB3ZSBibG9jayBvbiBoZXJlLiBBZGQgYSBzY29wZSBndWFyZCB0byByZW1vdmUKKyAg
ICAgICAgcHJvdGVjdGlvbiBtZXRhIHJhdGhlciB0aGFuIGRvaW5nIGl0IG1hbnVhbGx5LgorICAg
ICAgICAoaXNDRE1Qcm94eUF2YWlsYWJsZSk6IAorICAgICAgICAocmVxdWVzdENETVByb3h5RnJv
bUdzdENvbnRleHQpOiBCcmVha291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAg
ICAgKGF0dGFjaENETVByb3h5KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxhYmxl
CisgICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6IEJyZWFrb3V0IGZyb20g
aXNDRE1JbnN0YW5jZUF2YWlsYWJsZQorICAgICAgICAoc2lua0V2ZW50SGFuZGxlcik6IFJlbW92
ZSBoYW5kbGVLZXlSZXNwb25zZSwgd2Ugbm93IHdhaXQgb24gYQorICAgICAgICBwcm94eSBDRE0g
YmVpbmcgYXZhaWxhYmxlLCB3aGljaCBpcyBpbnN0YWxsZWQgaW4gdGhlIGNvbnRleHQKKyAgICAg
ICAgaGFuZGxlci4KKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLiBSZWZhY3RvcmVkLiBUaGlzIHdhcyBkb2luZworICAgICAgICB0aHJlZSB0aGlu
Z3MgaW4gb25lIHBvb3JseSBuYW1lZCBmdW5jdGlvbi4KKyAgICAgICAgKHF1ZXJ5SGFuZGxlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6CisgICAgICAgICogdGVzdGlu
Zy9Nb2NrQ0RNRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5zdGFuY2U6
OnByb3h5Q0RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0
b3J5Lmg6CisKIDIwMjAtMDEtMjMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtJRkNdIERvIG5vdCBzcGVjaWFsIGNhc2UgZm9ybWF0dGluZyByb290IGxh
eW91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDg3NGQ0OWFm
MWU0MTlhY2M4NGE0NjZkMjhjYTAyM2M2YmM5YWY5ZjkuLjllNjdhYjhmNGU2ZDU2YTQ1MGMxZjIw
OGIzMjc3ODJiYzk3MDcxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKQEAgLTE2NCw4ICsxNjQsOCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICAp
CiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKICAgICApCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4
IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1
MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1J
bnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwi
IENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJv
bSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZp
cnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNv
bmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwg
bXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsK
ICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBl
bnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA3YzE4MjM5ODFiZTIwMTM1MThlNjkzNmQ2NGVlZjJjZjM1NDAyNDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAK
QEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNE
TVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhj
b25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1
aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNT
dHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhT
dHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1
ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICByZXR1cm4gKnN0
b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQorCit2b2lkIEtl
eVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1
IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRv
JiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2ls
bCBub3QgYXBwZW5kIGEga2V5IGluIG90aGVyIGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAg
ICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBv
dmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5l
ZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0
b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQo
a2V5KTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleSBzdG9yZSBub3cgaGFzICV1IGtl
eXMiLCBudW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAg
ICAgICBMT0coRU1FLCAiXHRFTUUgLSBDRE1Qcm94eSAtIEtleSBJRDogJXMiLCBrZXktPmlkQXNT
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRCB8fCAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0
b3IgS2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tl
eVN0YXR1c1ZlY3RvcigpOworICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVj
dG9yKQorICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlJlbGVhc2VkOworICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wg
S2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAg
Ym9vbCBkaWRLZXlTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3
S2V5cykgeworICAgICAgICBpZiAoYWRkKFdURk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRL
ZXlTdG9yZUNoYW5nZSA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5n
ZTsKK30KKworYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJv
b2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxzZTsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5
SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3Rv
cmVkS2V5KSB7CisgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisK
KyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7Cisg
ICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGlu
Z0tleUlESW5kZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJ
RC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkg
d2l0aCBJRCAlcyBnZXR0aW5nIGFkZGVkIHRvIGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsgICAgICAKKyAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAg
ICAgICBkaWRTdG9yZUNoYW5nZSA9IHRydWU7CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9u
UmVmZXJlbmNlKCk7CisgICAgcmV0dXJuIGRpZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0
b3JlOjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9y
IChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikKKyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jv
b2wgS2V5U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wg
c3RvcmVDaGFuZ2VkID0gZmFsc2U7CisKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJ
bmRleCA9IG1fa2V5cy5maW5kKGtleSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
cmVxdWVzdGVkIHRvIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVu
Y2VzIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJl
ZmVyZW5jZXMoKSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6
Om5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlz
W2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJ
RC0+cmVtb3ZlU2Vzc2lvblJlZmVyZW5jZSgpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGlu
Z0tleUlELT5udW1TZXNzaW9uUmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSByZW1vdmUga2V5IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdL
ZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5y
ZW1vdmUoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5n
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIGF0dGVtcHQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRv
ZXMgbm90IGV4aXN0Iiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAg
cmV0dXJuIHN0b3JlQ2hhbmdlZDsKK30KKworY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9y
ZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJ
RCkKKyAgICAgICAgICAgIHJldHVybiBrZXktPnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKGZhbHNlICYmICJrZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9k
Iik7CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXNWZWN0b3IgS2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sK
KyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7
CisgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICAvLyBGSVhNRTog
VmVjdG9yPHVpbnQ4X3Q+IHJlcHJlc2VudGF0aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUKKyAg
ICAgICAgLy8gZGF0YSBhcmUgc21hbGwgaW4gbnVtYmVyLCBzbyBwcm9iYWJseSBpdCdzIGZpbmUu
CisgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxT
aGFyZWRCdWZmZXI+LCBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cz4geyBrZXktPmlkQXNT
aGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0
YXR1c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5
U3RvcmUmIG5ld0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlz
TXV0ZXgpOworICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUs
ICJFTUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRh
dGUiKTsKKyAgICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJv
eHk6OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5z
dGFuY2U7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fa2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlE
KSk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENE
TVByb3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94
eSAtIHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7
CisgICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Q
cm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkg
LSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOwor
ICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8v
IFVuY29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5
IG1lYW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNo
aW5nIGEga2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBu
byBtb3JlIGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5n
Rm9yS2V5T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRX
YWl0aW5nRm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0g
dHJ5aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdh
c0tleVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVBy
b3h5OjpNYXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAg
ICAgICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IENETVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9I
ZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVl
KGtleUlEKTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5
IElEICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5k
YXRhKCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6Omtl
eUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wg
Q0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVy
biBrZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElE
ICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1
ZShrZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJv
b2wgd2FzV2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOwor
ICAgIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3BsYXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChw
bGF5ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0Zv
cktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9w
cGVkV2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3Bs
YXllciAmJiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNy
eXB0b3JzV2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0g
IW1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtw
bGF5ZXIgPSBtX3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChw
bGF5ZXIgJiYgaXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0
aW5nRm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6
Om1lcmdlS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1F
OiBOb3RpZnkgSlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBD
RE1JbnN0YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5v
dGlmeWluZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOwor
ICAgIG1fY2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1J
bnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFs
bEtleXNGcm9tKGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjZTcyZDVkNGFlYTEz
YjYwMTYxYjZmYWE5NDI0M2JlNzkwNGM2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2lu
Y2x1ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXkgOiBw
dWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXMgPSBD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czsKKworICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBj
cmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1
aW50OF90PiYmIGtleVZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
S2V5KHN0YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgfQor
ICAgIFJlZjxTaGFyZWRCdWZmZXI+IGlkQXNTaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShtX2lkLmRhdGEoKSwgbV9pZC5zaXplKCkpOyB9CisKKyAgICBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBLZXlT
dGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgIFN0cmluZyBp
ZEFzU3RyaW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKwor
ICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9y
aW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9
CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZr
KSB7IHJldHVybiBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRTZXNzaW9u
UmVmZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVu
Y2VzKys7IH0KKyAgICB2b2lkIHJlbW92ZVNlc3Npb25SZWZlcmVuY2UoKSB7IEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMtLTsgfQorICAgIHVuc2lnbmVkIG51
bVNlc3Npb25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1
cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNlczsgfQorICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsK
KworICAgIEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVj
dG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9p
ZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorCisgICAg
S2V5U3RhdHVzIG1fc3RhdHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOworICAgIFZlY3Rv
cjx1aW50OF90PiBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMg
eyAwIH07Cit9OworCitjbGFzcyBLZXlTdG9yZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3Rh
dHVzVmVjdG9yID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBi
b29sIGNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7Cisg
ICAgdm9pZCBtZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxs
S2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXMo
KSB7IG1fa2V5cy5jbGVhcigpOyB9CisgICAgYm9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5
Pj4mJik7CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleT4mJik7CisgICAgYm9vbCByZW1vdmUoY29u
c3QgUmVmUHRyPEtleT4mKTsKKyAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4g
bV9rZXlzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFs
bEtleXNBc1JlbGVhc2VkKCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pT
S2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9r
ZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmJl
Z2luKCk7IH0KKyAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1
dG8gZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byByYmVnaW4o
KSB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmVuZCgpIHsgcmV0dXJuIG1fa2V5
cy5yZW5kKCk7IH0KKyAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMucmVuZCgp
OyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tleXM7Cit9OworCitj
bGFzcyBDRE1JbnN0YW5jZVByb3h5OworCisvLyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3Qg
dGhlIEphdmFTY3JpcHQgZmFjYWRlLiBUaGlzIGNhbiBiZSB1c2VkCisvLyBmcm9tIGJhY2tncm91
bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4KK2NsYXNzIENETVByb3h5IDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPENETVByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
ZXhwciBTZWNvbmRzIE1heEtleVdhaXRUaW1lU2Vjb25kcyA9IDVfczsKKworICAgIHZpcnR1YWwg
fkNETVByb3h5KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB1cGRhdGVLZXlTdG9yZShjb25zdCBL
ZXlTdG9yZSYgbmV3S2V5U3RvcmUpOworICAgIHZvaWQgc2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQ
cm94eSopOworCitwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxl
VW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiB0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9y
S2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgc3RhcnRl
ZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKKyAg
ICBDRE1JbnN0YW5jZVByb3h5KiBtX2luc3RhbmNlOworCisgICAgbXV0YWJsZSBMb2NrIG1fa2V5
c011dGV4OworICAgIG11dGFibGUgQ29uZGl0aW9uIG1fa2V5c0NvbmRpdGlvbjsKKyAgICBLZXlT
dG9yZSBtX2tleVN0b3JlOworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24g
bWFuYWdlbWVudCBjb2RlIGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAi
cmVhbCBDRE0iIHN0YXRlIGNoYW5nZXMgdG8gSlMuCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDog
cHVibGljIENETUluc3RhbmNlIHsKK3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVByb3h5KENETVBy
b3h5KiBwcm94eSkgOiBtX2NkbVByb3h5KGFkb3B0UmVmKHByb3h5KSkgeyBwcm94eS0+c2V0SW5z
dGFuY2UodGhpcyk7IH0KKyAgICB2aXJ0dWFsIH5DRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0
OworCisgICAgLy8gTWFpbi10aHJlYWQgb25seS4KKyAgICB2b2lkIG1lcmdlS2V5c0Zyb20oY29u
c3QgS2V5U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3Jl
Jik7CisKKyAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1haW4gdGhyZWFkIG9u
bHkuCisgICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5n
Rm9yS2V5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1EZWNy
eXB0b3JzV2FpdGluZ0ZvcktleSA+IDA7IH0KKyAgICB2b2lkIHNldFBsYXllcihNZWRpYVBsYXll
ciogcGxheWVyKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fcGxheWVyID0gcGxheWVyOyB9
CisKKyAgICAvLyBQcm94eSBtZXRob2RzIC0gbXVzdCBiZSB0aHJlYWQtc2FmZS4KKyAgICB2b2lk
IHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCk7CisgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgp
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0cmFja1Nlc3Npb24oY29uc3QgUmVmUHRyPENETUlu
c3RhbmNlU2Vzc2lvbj4gc2Vzc2lvbikgeyBtX3Nlc3Npb25zLmFwcGVuZChzZXNzaW9uKTsgfQor
Citwcml2YXRlOgorICAgIFJlZlB0cjxDRE1Qcm94eT4gbV9jZG1Qcm94eTsKKyAgICAvLyBGSVhN
RTogV2Vha1B0ciBmb3IgdGhlIG1fcGxheWVyPyBUaGlzIGlzIGFjY2Vzc2VkIGZyb20gYmFja2dy
b3VuZCBhbmQgbWFpbiB0aHJlYWRzLCBpdCdzCisgICAgLy8gY29uY2VybmluZyB3ZSBjb3VsZCBi
ZSBhY2Nlc3NpbmcgaXQgaW4gdGhlIG1pZGRsZSBvZiBhIHNodXRkb3duIG9uIHRoZSBtYWluLXRo
cmVhZCwgZWg/CisgICAgLy8gQXMgYSBDRE1Qcm94eSwgd2UgKioqc2hvdWxkKioqIGJlIHR1cm5l
ZCBvZmYgYmVmb3JlIHRoaXMgcG9pbnRlciBldmVyIGdvZXMgYmFkLgorICAgIE1lZGlhUGxheWVy
KiBtX3BsYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IE1haW5UaHJlYWQ8VD4/CisKKyAgICBz
dGQ6OmF0b21pYzxpbnQ+IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisgICAgVmVjdG9y
PFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+PiBtX3Nlc3Npb25zOworCisgICAgS2V5U3RvcmUg
bV9rZXlTdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKaW5kZXgg
NjQ4NWRiNzVkN2U3MzM5YjE1NjFkYzZkNThlZjI5YzliMzEyMzU4MC4uMzllMDcxYzMwMmU2ODhm
OTNiYjJiMGM1ZTFjZjZkMmY2MDE2NjllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNw
cApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDx3dGYvQnl0ZU9yZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDMsMzMgKzQ2LDQzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ2xlYXJLZXkgQ0VOQyBTeXN0ZW1JRC4KLS8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9lbWUtaW5pdGRhdGEtY2VuYy8jY29tbW9uLXN5c3RlbQotY29uc3Qg
dWludDhfdCBjbGVhcktleUNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVmLCAweGVj
LCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAweDUyLCAw
eGUyLCAweGZiLCAweDRiIH07Ci1jb25zdCB1bnNpZ25lZCBjbGVhcktleUNlbmNTeXN0ZW1JZFNp
emUgPSBzaXplb2YoY2xlYXJLZXlDZW5jU3lzdGVtSWQpOwotY29uc3QgdW5zaWduZWQga2V5SWRT
aXplID0gMTY7CituYW1lc3BhY2UgewogCi1jbGFzcyBDbGVhcktleVN0YXRlIHsKLSAgICB1c2lu
ZyBLZXlTdG9yZSA9IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5Pj47Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgQ2xlYXJLZXlTdGF0ZSYgc2luZ2xldG9uKCk7
CitzdGF0aWMgYm9vbCByZWFkVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUsIHNpemVfdCYgb2Zmc2V0LCB1aW50MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJU
X0FSRyhvZmZzZXQsIG9mZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAt
IG9mZnNldCA8IHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEtl
eVN0b3JlJiBrZXlzKCkgeyByZXR1cm4gbV9rZXlzOyB9CisgICAgdmFsdWUgPSBudG9obCgqcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDMyX3QqPihidWZmZXIgKyBvZmZzZXQpKTsKKyAg
ICBvZmZzZXQgKz0gc2l6ZW9mKHZhbHVlKTsKIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT47Ci0gICAgQ2xlYXJLZXlTdGF0ZSgpOwotICAg
IEtleVN0b3JlIG1fa2V5czsKLX07CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLUNsZWFyS2V5U3Rh
dGUmIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCitzdGF0aWMgYm9vbCByZWFkVUludDE2KGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCYgb2Zmc2V0LCB1
aW50MTZfdCYgdmFsdWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENsZWFyS2V5U3Rh
dGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQs
IG9mZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNp
emVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaHMo
KnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQxNl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7
CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Q2xlYXJLZXlTdGF0ZTo6Q2xlYXJLZXlTdGF0ZSgpID0gZGVmYXVsdDsKKy8vIENsZWFyS2V5IENF
TkMgU3lzdGVtSUQuCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMv
I2NvbW1vbi1zeXN0ZW0KK2NvbnN0IHVpbnQ4X3QgY2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsg
MHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhjMCwgMHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhl
MywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwgMHhmYiwgMHg0YiB9OworY29uc3QgdW5zaWduZWQg
Y2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0gc2l6ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsK
K2VudW0geworICAgIEFFUzEyOENUUkJsb2NrU2l6ZUluQnl0ZXMgPSAxNiwKKyAgICBDbGVhcktl
eUtleUlEU2l6ZUluQnl0ZXMgPSAxNiwKKyAgICBDbGVhcktleUlWU2l6ZUluQnl0ZXMgPSAxNiwK
K307CisKK30KIAogc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChj
b25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKQEAgLTg4LDcgKzEwMSw3IEBAIHN0YXRpYyBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBi
dWZmZXIpCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxD
RE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6
T2JqZWN0JiByb290KQorc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNl
TGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCiB7CiAgICAgLy8gSWYgdGhl
ICdrZXlzJyBrZXkgaXMgcHJlc2VudCBpbiB0aGUgcm9vdCBvYmplY3QsIHBhcnNlIHRoZSBKU09O
IGZ1cnRoZXIKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCAnbGljZW5zZScgZm9y
bWF0LgpAQCAtMTAxLDcgKzExNCw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgaWYg
KCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRlY29kZWRLZXlz
OworICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9vbCB2YWxpZEZv
cm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5LT5lbmQoKSwK
ICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzEyOSwxMSBAQCBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGlj
ZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdldFN0
cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIsIGtleVZhbHVl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKICAgICAgICAgICAgIGlmICghV1RGOjpiYXNlNjRV
UkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJhc2U2NFVSTERlY29kZShr
ZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoeyBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1czo6VXNhYmxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleUlERGF0
YSkpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleVZhbHVlRGF0YSkpIH0pOworICAg
ICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lv
bjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwgV1RGTW92ZShrZXlWYWx1
ZURhdGEpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSk7CiAgICAgaWYg
KCF2YWxpZEZvcm1hdCkKQEAgLTIxMiw3ICsyMjUsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShjb25z
dAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAKICAgICAvLyBDaGVjayB0
aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3QgKiBrZXlJZFNp
emUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3Qg
KiBDbGVhcktleUtleUlEU2l6ZUluQnl0ZXMpKSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgIHJl
dHVybiBrZXlJZHNNYXA7CiAKICAgICBrZXlJZHNNYXAuc2Vjb25kID0gaW5kZXg7IC8vIFRoZSBs
b2NhdGlvbiBvZiB0aGUgZmlyc3QgS2V5SWQgaW4gaW5pdERhdGEuCkBAIC0yNTEsOSArMjY0LDkg
QEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRh
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgaW5pdEQKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJh
eSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwg
ZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1
ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwga2V5
SWRTaXplKTsKKyAgICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRh
dGFbaW5kZXhdLCBDbGVhcktleUtleUlEU2l6ZUluQnl0ZXMpOwogICAgICAgICBrZXlJZHNBcnJh
eS0+cHVzaFN0cmluZyhrZXlJZCk7Ci0gICAgICAgIGluZGV4ICs9IGtleUlkU2l6ZTsKKyAgICAg
ICAgaW5kZXggKz0gQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIAogICAgIG9iamVj
dC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CkBAIC00NTYsNDEgKzQ2
OSwxMzEgQEAgT3B0aW9uYWw8U3RyaW5nPiBDRE1Qcml2YXRlQ2xlYXJLZXk6OnNhbml0aXplU2Vz
c2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKQogICAgIHJldHVybiBzZXNzaW9uSWQ7CiB9
CiAKLS8vIFRoaXMgaXMgZm9yIHRocmVhZC1zYWZldHkgZHVyaW5nIGFuIGFyY2hpdGVjdHVyYWwg
c2l0dWF0aW9uIHRoYXQgaXMKLS8vIGxlc3MgdGhhbiBpZGVhbC4gVGhlIEdTdHJlYW1lciBkZWNy
eXB0b3JzIGN1cnJlbnRseSBuZWVkIHRvIGl0ZXJhdGUKLS8vIGFsbCBrbm93biBzZXNzaW9uIGtl
eXMgdG8gZmluZCB0aGUga2V5IGRhdGEgZm9yIHByaW1pbmcKLS8vIEdDcnlwdC4gSWRlYWxseSwg
YWxsIGRlY3J5cHRpb24gd291bGQgYmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mCi0vLyBQcm94eUNE
TSBvYmplY3QgbGlrZSB0aGlzIG9uZS4gV2hhdCB0aGUgYmFja2dyb3VuZCBHU3RyZWFtZXIKLS8v
IHRocmVhZCB3YXMgZG9pbmcgd2FzIGdldHRpbmcgY29waWVzIChpLmUuIHJlZigpJ3MpIG9mIFNo
YXJlZEJ1ZmZlcnMKLS8vIGNyZWF0ZWQgb24gdGhlIG1haW4tdGhyZWFkLiBXaXRoIHRoZSBuZXcg
c2FmZXR5IGFzc2VydGlvbnMgaW4KLS8vIFdlYktpdCwgd2UgY2FuIG5vIGxvbmdlciBkbyB0aGlz
LiBJbnN0ZWFkLCBjb252ZXJ0IHRoZSByZWZjb3VudGVkCi0vLyBTaGFyZWRCdWZmZXJzIGludG8g
U3RyaW5ncyB3aGljaCBjYW4gYmUgc2FmZWx5IGNvcGllZCBhY3Jvc3MKLS8vIHRocmVhZHMuCi1z
dGF0aWMgUHJveHlDRE1DbGVhcktleTo6S2V5IGlzb2xhdGVkS2V5KGNvbnN0IENETUluc3RhbmNl
Q2xlYXJLZXk6OktleSYga2V5KQorCitDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVhcktl
eSgpCiB7Ci0gICAgcmV0dXJuIHsga2V5LnN0YXR1cywgU3RyaW5nKGtleS5rZXlJRERhdGEtPmRh
dGEoKSwga2V5LmtleUlERGF0YS0+c2l6ZSgpKSwgU3RyaW5nKGtleS5rZXlWYWx1ZURhdGEtPmRh
dGEoKSwga2V5LmtleVZhbHVlRGF0YS0+c2l6ZSgpKSB9OworICAgIGdjcnlfY2lwaGVyX2Nsb3Nl
KG1fZ2NyeUhhbmRsZSk7CiB9CiAKLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+
IFByb3h5Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cygpIGNvbnN0Citib29sIENETVByb3h5Q2xl
YXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYgaW5w
dXQpCiB7Ci0gICAgLy8gUmV0dXJuIHRoZSBrZXlzIG9mIGFsbCBzZXNzaW9ucywgbWF5IGJlIGNv
cGllZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMuCi0gICAgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6
OktleT4gYWxsS2V5cyB7IH07Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRl
eCk7Ci0gICAgc2l6ZV90IGluaXRpYWxDYXBhY2l0eSA9IDA7Ci0gICAgZm9yIChhdXRvJiBrZXlW
ZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpCi0gICAg
ICAgIGluaXRpYWxDYXBhY2l0eSArPSBrZXlWZWN0b3Iuc2l6ZSgpOwotICAgIGFsbEtleXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpOworICAgIHVpbnQ4X3QgY3RyW0FF
UzEyOENUUkJsb2NrU2l6ZUluQnl0ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09
IDgpIHsKKyAgICAgICAgLy8gSVNPL0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKIAotICAg
IGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygp
LnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAg
ICAgICAgYWxsS2V5cy51bmNoZWNrZWRBcHBlbmQoaXNvbGF0ZWRLZXkoa2V5KSk7CisgICAgICAg
IC8vIFdoZW4gYW4gOC1ieXRlIElWIGlzIGluZGljYXRlZCwgdGhlIGxlYXN0IHNpZ25pZmljYW50
IDgKKyAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIDE2IGJ5dGUgSVYgKGJ5dGVzIDggdG8gMTUpIFNI
QUxMIGJlIHNldCB0bworICAgICAgICAvLyB6ZXJvLgorICAgICAgICBtZW1zZXQoY3RyICsgOCwg
MCwgOCk7CisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCA4KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbWVtY3B5KGN0ciwgaW5wdXQuaXYsIENsZWFyS2V5SVZTaXplSW5CeXRlcyk7CisKKyAg
ICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1fZ2Ny
eUhhbmRsZSwgY3RyLCBDbGVhcktleUlWU2l6ZUluQnl0ZXMpKSB7CisgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfc2V0Y3RyKTogJXMi
LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIHJldHVybiBhbGxLZXlzOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENE
TVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29u
dGV4dCYgaW4pCit7CisgICAgLy8gRklYTUU6IFVubmVjZXNzYXJ5IGNvcHksIGNhbiB3ZSBhdm9p
ZCB0aGlzIHdoaWxlIHN0aWxsIGV4cG9zaW5nCisgICAgLy8gYSBub24tR1N0cmVhbWVyLXNwZWNp
ZmljIERlY3J5cHRJbnB1dCBBUEk/IFRoZXNlIGJ1ZmZlcnMgYXJlCisgICAgLy8gc21hbGwgKDE2
IGJ5dGVzKSwgc28gbm90IGEgaHVnZSBkZWFsLCBJIGd1ZXNzLgorICAgIFZlY3Rvcjx1aW50OF90
PiBrZXlJRFZlYzsKKyAgICBrZXlJRFZlYy5hcHBlbmQoaW4ua2V5SUQsIGluLmtleUlEU2l6ZUlu
Qnl0ZXMpOworCisgICAgYXV0byBrZXlEYXRhID0gZ2V0T3JXYWl0Rm9yS2V5KGtleUlEVmVjKTsK
KyAgICBpZiAoIWtleURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChnY3J5
X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkobV9nY3J5SGFuZGxlLCBrZXlEYXRh
LT5kYXRhKCksIGtleURhdGEtPnNpemUoKSkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRrZXkpOiAlcyIsIGdwZ19zdHJl
cnJvcihlcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRGdWxsU2FtcGxl
KGNlbmNEZWNyeXB0Q29udGV4dCYgaW4pCit7CisgICAgaWYgKCFpbi5lbmNyeXB0ZWRCdWZmZXJT
aXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNUHJveHlDbGVhcktleSAtIGZ1bGwtc2FtcGxlIGRlY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQg
Ynl0ZXMiLCBpbi5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyk7CisKKyAgICBpZiAoZ2NyeV9l
cnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChtX2djcnlIYW5kbGUsIGlu
LmVuY3J5cHRlZEJ1ZmZlciwgaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMsIDAsIDApKSB7
CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9j
aXBoZXJfZGVjcnlwdCk6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Q
cm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRDb250ZXh0JiBp
bnB1dCkKK3sKKyAgICB1bnNpZ25lZCBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAg
ICBzaXplX3Qgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgdW5zaWduZWQgc3Vi
c2FtcGxlSW5kZXggPSAwOworICAgIHdoaWxlIChlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0IDwg
aW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgdWludDE2X3Qgc3Vi
c2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7CisgICAgICAgIHVpbnQzMl90IHN1YnNhbXBsZU51bUVu
Y3J5cHRlZEJ5dGVzID0gMDsKKworICAgICAgICBpZiAoc3Vic2FtcGxlSW5kZXggPCBpbnB1dC5u
dW1TdWJzYW1wbGVzKSB7CisgICAgICAgICAgICBpZiAoIXJlYWRVSW50MTYoaW5wdXQuc3Vic2Ft
cGxlc0J1ZmZlciwgaW5wdXQuc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzLCBzdWJTYW1wbGVC
dWZmZXJCeXRlT2Zmc2V0LCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzKSkgeworICAgICAgICAgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVt
YmVyIG9mIGNsZWFyIGJ5dGVzIGluIHN1YnNhbXBsZSBhdCBpbmRleCAldSIsIHN1YnNhbXBsZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIXJlYWRVSW50MzIoaW5wdXQuc3Vic2FtcGxlc0J1ZmZlciwgaW5wdXQuc3Vi
c2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzLCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0LCBzdWJz
YW1wbGVOdW1FbmNyeXB0ZWRCeXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBlbmNyeXB0ZWQg
Ynl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1YnNh
bXBsZUluZGV4Kys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdWJzYW1wbGVOdW1D
bGVhckJ5dGVzID0gMDsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzID0g
aW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zm
c2V0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBoaWdoLWZyZXF1
ZW5jeSBtZXNzYWdlcywgbm90IHN1cmUgaWYgdGhlcmUncyBhIGJldHRlciBsb2dnaW5nIGxpYiBp
biBXZWJDb3JlLgorICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0g
JXUgYnl0ZXMgY2xlYXIgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vic2FtcGxlSW5k
ZXgsIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMsIGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5
dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCk7CisKKyAgICAgICAgZW5jcnlwdGVkQnVm
ZmVyQnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzOworCisgICAgICAgIGlmIChz
dWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcykgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IHN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAoJWx1IGJ5dGVzIGxlZnQg
dG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMs
IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9m
ZnNldCk7CisKKyAgICAgICAgICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5
X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW5wdXQuZW5jcnlwdGVkQnVmZmVyICsgZW5j
cnlwdGVkQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMsIDAsIDAp
KSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBF
UlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0gc3Vic2FtcGxlTnVtRW5jcnlwdGVk
Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBD
RE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdChDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlw
dENvbnRleHQmIGlucHV0KQoreworICAgIGlmICghY2VuY1NldENvdW50ZXJWZWN0b3IoaW5wdXQp
IHx8ICFjZW5jU2V0RGVjcnlwdGlvbktleShpbnB1dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBpbnB1dC5pc1N1YnNhbXBsZWQoKSA/IGNlbmNEZWNyeXB0U3Vic2FtcGxl
ZChpbnB1dCkgOiBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoaW5wdXQpOworfQorCit2b2lkIENETVBy
b3h5Q2xlYXJLZXk6OmluaXRpYWxpemVHY3J5cHQoKQoreworICAgIGlmIChnY3J5X2Vycm9yX3Qg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZtX2djcnlIYW5kbGUsIEdDUllfQ0lQSEVSX0FFUzEy
OCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkpIHsKKyAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9vcGVu
KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZmFs
c2UgJiYgIlNob3VsZCBub3QgZ2V0IHRoaXMgZmFyIHdpdGggYSBmdW5jdGlvbmFsIEdDcnlwdCEi
KTsKKyAgICB9CiB9CiAKIENETUluc3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXko
KQotICAgIDogbV9wcm94eUNETShhZG9wdFJlZigqbmV3IFByb3h5Q0RNQ2xlYXJLZXkoKSkpCisg
ICAgOiBDRE1JbnN0YW5jZVByb3h5KG5ldyBDRE1Qcm94eUNsZWFyS2V5KCp0aGlzKSkKIHsKIH0K
IApAQCAtNTM1LDM2ICs2MzgsOSBAQCBjb25zdCBTdHJpbmcmIENETUluc3RhbmNlQ2xlYXJLZXk6
OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3Rh
bmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24oKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKSk7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJbIiwga2V5SUREYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1TdHJpbmcgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleVZhbHVlRGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsK
LX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEs
IGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsxLmtl
eUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAgICByZXR1cm4gKmsxLmtl
eUlERGF0YSA9PSAqazIua2V5SUREYXRhOwotfQotCi1ib29sIG9wZXJhdG9yPChjb25zdCBDRE1J
bnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkm
IGsyKQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERh
dGEpOwotCi0gICAgaWYgKGsxLmtleUlERGF0YS0+c2l6ZSgpICE9IGsyLmtleUlERGF0YS0+c2l6
ZSgpKQotICAgICAgICByZXR1cm4gazEua2V5SUREYXRhLT5zaXplKCkgPCBrMi5rZXlJRERhdGEt
PnNpemUoKTsKLQotICAgIHJldHVybiBtZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsyLmtl
eUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJRERhdGEtPnNpemUoKSk7CisgICAgUmVmUHRyPENETUlu
c3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lvbiA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleSgqdGhpcykpOworICAgIHRyYWNrU2Vzc2lvbihuZXdTZXNzaW9uKTsKKyAgICBy
ZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlw
ZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJh
Y2spCkBAIC01NzIsNiArNjQ4LDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBzdGF0
aWMgdWludDMyX3Qgc19zZXNzaW9uSWRWYWx1ZSA9IDA7CiAgICAgKytzX3Nlc3Npb25JZFZhbHVl
OwogCisgICAgbV9zZXNzaW9uSUQgPSBTdHJpbmc6Om51bWJlcihzX3Nlc3Npb25JZFZhbHVlKTsK
KwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJj
ZW5jIikpCiAgICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEo
aW5pdERhdGEuZ2V0KCkpOwogCkBAIC01NzksMTggKzY1NywxNiBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0
cmluZyYgaQogICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEo
aW5pdERhdGEuZ2V0KCkpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgW3dlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBp
bml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpLCBzZXNzaW9uSWRWYWx1ZSA9IHNfc2Vzc2lvbklk
VmFsdWVdKCkgbXV0YWJsZSB7CisgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3Zl
KGluaXREYXRhKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXRE
YXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklkVmFsdWUpLCBmYWxzZSwgU3VjY2VlZGVkKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBtX3Nlc3Npb25JRCwgZmFs
c2UsIFN1Y2NlZWRlZCk7CiAgICAgICAgIH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNl
VHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNr
JiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVs
ZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZwotICAgIC8vIGR1cGxpY2F0ZWQgY2Fs
bE9uTWFpblRocmVhZCgpIGNhbGxzLgogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAg
ICAgIFt0aGlzLCAmY2FsbGJhY2tdKGJvb2wgc2Vzc2lvbldhc0Nsb3NlZCwgT3B0aW9uYWw8S2V5
U3RhdHVzVmVjdG9yPiYmIGNoYW5nZWRLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VlZGVkKSB7CiAg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNjA0LDUyICs2ODAsMjMgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNl
c3Npb25JZCwgTGljZW5zZVQKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJvb3QgPSBwYXJz
ZUpTT05PYmplY3QocmVzcG9uc2UpOwogICAgIGlmICghcm9vdCkgeworICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdhcyBub3QgdmFs
aWQgSlNPTiIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZGlzcGF0Y2hDYWxs
YmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGlu
ZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5zICV1IGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRh
dGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgaWYgKGF1dG8gZGVjb2RlZEtleXMg
PSBwYXJzZUxpY2Vuc2VGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIFJldHJpZXZlIHRoZSB0
YXJnZXQgVmVjdG9yIG9mIEtleSBvYmplY3RzIGZvciB0aGlzIHNlc3Npb24uCi0gICAgICAgIC8v
IEZJWE1FOiBSZWZhY3RvciB0aGlzIHN0YXRlIG1hbmFnZW1lbnQgY29kZS4KLSAgICAgICAgVmVj
dG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4mIGtleVZlY3RvciA9IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS5lbnN1cmUoc2Vzc2lvbklkLCBbXSB7IHJldHVybiBWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKLQotICAg
ICAgICBib29sIGtleXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgZGVjb2Rl
ZEtleSA6ICpkZWNvZGVkS2V5cykgewotICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gRGVjb2RlZCBhIGtleSB3aXRoIElEICVzIGFuZCBrZXkgZGF0YSAlcyIsIGRlY29kZWRL
ZXkua2V5SURBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXkua2V5VmFsdWVBc1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgYXV0byBrZXlXaXRoTWF0Y2hpbmdL
ZXlJRCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVuZCgpLAot
ICAgICAgICAgICAgICAgIFsmZGVjb2RlZEtleV0gKGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6
OktleSYgY29udGFpbmVkS2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWlu
ZWRLZXkgPT0gZGVjb2RlZEtleTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlm
IChrZXlXaXRoTWF0Y2hpbmdLZXlJRCAhPSBrZXlWZWN0b3IuZW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBFeGlzdGluZyBrZXkgZm91bmQgd2l0aCBk
YXRhICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPmhh
c1NhbWVLZXlWYWx1ZShkZWNvZGVkS2V5KSkgewotICAgICAgICAgICAgICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGluZyBrZXkgc2luY2UgdGhlIGRhdGEgYXJlIGRpZmZl
cmVudCIpOwotICAgICAgICAgICAgICAgICAgICAqa2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBXVEZN
b3ZlKGRlY29kZWRLZXkpOwotICAgICAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBUaGlzIGlzIGEgbmV3IGtleSIpOwotICAgICAg
ICAgICAgICAgIGtleVZlY3Rvci5hcHBlbmQoV1RGTW92ZShkZWNvZGVkS2V5KSk7Ci0gICAgICAg
ICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBtX2tleVN0b3JlLmFkZEtleXMoV1RGTW92ZSgqZGVj
b2RlZEtleXMpKTsKIAotICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGUg
aGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVjdG9yLnNpemUoKSk7CisgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzICV1IGtleXMgYWZ0ZXIgdXBkYXRl
KCkiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAg
ICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlm
IChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gU29ydCBieSBrZXkgSURzLgotICAgICAg
ICAgICAgc3RkOjpzb3J0KGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCkpOwotCi0g
ICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAg
a2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgICAg
ICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVm
ZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotCi0gICAg
ICAgICAgICBjaGFuZ2VkS2V5cyA9IFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKTsKKyAgICAgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5
cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcGFyZW50SW5zdGFu
Y2UubWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAgICAgIGNoYW5nZWRLZXlzID0g
bV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOwogICAgICAgICB9CiAKICAg
ICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGTW92ZShjaGFuZ2VkS2V5cyksIFN1Y2Nl
c3NWYWx1ZTo6U3VjY2VlZGVkKTsKQEAgLTY1Nyw0NyArNzA0LDI3IEBAIHZvaWQgQ0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQs
IExpY2Vuc2VUCiAgICAgfQogCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRn
ZW1lbnRGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5
IElEIGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMg
c2Vzc2lvbklkLgotICAgICAgICBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVt
b3ZlKHNlc3Npb25JZCk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Np
b24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFsbCBrbm93biBrZXlzIiwgc2Vz
c2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BhcmVudEluc3RhbmNlLnJlbW92ZUFs
bEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMo
KTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NW
YWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEJhaWwg
aW4gY2FzZSBubyBmb3JtYXQgd2FzIHJlY29nbml6ZWQuCisgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMgYW4gdW5yZWNvZ25pemVkIGZv
cm1hdCIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICBkaXNwYXRjaENhbGxiYWNrKGZh
bHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKIH0KIAogdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0
cmluZyYgc2Vzc2lvbklkLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2Fs
bGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhl
IGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQo
KSBjYWxscy4KLSAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQotICAgICAgICBbdGhpcywgJmNh
bGxiYWNrXShPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhpc3RpbmdLZXlzLCBTdWNjZXNz
VmFsdWUgc3VjY2VzcywgU2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRGYWlsdXJlKSB7Ci0gICAgICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICAgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhpc3RpbmdLZXlz
ID0gV1RGTW92ZShleGlzdGluZ0tleXMpLCBzdWNjZXNzLCBsb2FkRmFpbHVyZV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGV4
aXN0aW5nS2V5cyksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBzdWNjZXNzLCBsb2FkRmFp
bHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyBhbGwgdGhlIGtub3du
IGtleXMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yOwotICAgIHsKLSAgICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRv
bigpLmtleXMoKTsKLSAgICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAg
ICAgICBpZiAoaXQgPT0ga2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFj
ayhXVEY6Om51bGxvcHQsIEZhaWxlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb1Nlc3Npb25EYXRh
KTsKKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKyAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1Zl
Y3RvcigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCAma2V5U3RhdHVzVmVjdG9yXSgpIG11
dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byYga2V5VmVjdG9yID0gaXQtPnZhbHVlOwotICAgICAgICBr
ZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0
dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5
U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwotICAgIH0KIAotICAgIGRp
c3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBTdWNjZWVkZWQsIFNlc3Np
b25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVz
VmVjdG9yKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1Y2NlZWRlZCwgU2Vzc2lvbkxv
YWRGYWlsdXJlOjpOb25lKTsKKyAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNr
JiYgY2FsbGJhY2spCkBAIC03MTMsNyArNzQwLDggQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWMK
IAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29u
c3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hl
ZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1h
aW5UaHJlYWQoKSBjYWxscy4KKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsK
KwogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2td
KEtleVN0YXR1c1ZlY3RvciYmIGtleVN0YXR1c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1
ZmZlcj4+JiYgbWVzc2FnZSwgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoCkBAIC03MjcsMzUgKzc1NSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwg
TGljZQogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXBy
ZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICds
aWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFs
bEtleXNBc1JlbGVhc2VkKCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAg
ICB7Ci0gICAgICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lv
biBJRCwgYmFpbGluZyBpZiBub25lIGlzIGZvdW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xl
YXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5m
aW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAg
ICAgICBkaXNwYXRjaENhbGxiYWNrKEtleVN0YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwg
U3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmV0cmlldmUgdGhlIEtleSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBr
ZXlzIGZvciB0aGlzIHNlc3Npb24sIGFuZAotICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5
IG1hcCBlbnRyeSBmb3IgdGhpcyBzZXNzaW9uLgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdU
Rk1vdmUoaXQtPnZhbHVlKTsKLSAgICAgICAga2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8v
IENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdp
dGggdGhlICdyZWxlYXNlZCcgc3RhdHVzLgotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBw
ZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SURE
YXRhLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH0pOwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09O
IHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBh
ICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZv
ciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAg
ICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewog
ICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGtleS5rZXlJRERhdGEtPnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJM
RW5jb2RlKGtleS5rZXlJRERhdGEtPmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5r
ZXlJRERhdGEtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDog
bV9rZXlTdG9yZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgICAgICAgICAgICAg
YXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LT5pZCgpLmRhdGEoKSwg
a2V5LT5pZCgpLnNpemUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVj
dC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2
ICs3NzYsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9u
RGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5s
ZW5ndGgoKSk7CiAgICAgfQogCisgICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAg
ZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZm
ZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuaAppbmRleCA4NWIzMTliMWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZj
MTQ3Li4xM2FlOGZkZDM0MTA4NzNlNjhlZTUwMmU5N2UwOTU1ZjhkYWM0MzE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmgKQEAgLTMxLDEwICszMSwxMiBAQAogI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCiAKICNpbmNsdWRlICJDRE1GYWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFu
Y2UuaCIKICNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2
YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDI3ICs3OSwxMyBAQCBwdWJsaWM6
CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBj
b25zdCBmaW5hbDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMg
UHJveHlDRE0gewotcHVibGljOgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0g
ICAgICAgIFN0cmluZyBrZXlWYWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5
Q0RNQ2xlYXJLZXkoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRL
ZXlzKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07
Ci0KLWNsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2Us
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CitjbGFzcyBDRE1J
bnN0YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlUHJveHksIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CiBwdWJsaWM6CiAgICAgQ0RNSW5z
dGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAor
ICAgIC8vIENETUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9u
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7
IH0KLQogICAgIFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3Qg
Q0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRE
aXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFs
dWUgc2V0UGVyc2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0NyArOTMs
OTAgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmlu
YWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFs
OwotCi0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzIHN0YXR1czsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwotICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAgU3RyaW5n
IGtleUlEQXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmco
KSBjb25zdDsKLQotICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAgICAgICAg
ICAgIEFTU0VSVChvdGhlci5rZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuICprZXlW
YWx1ZURhdGEgPT0gKm90aGVyLmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtl
eSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBi
eSB0aGVpciBJRHMsIGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAgICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLQotICAg
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIp
IHsgcmV0dXJuICEob3BlcmF0b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj4oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9y
PT0oazEsIGsyKSAmJiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0
b3I+KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkg
JmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICB9
OwotCi0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fcHJveHlDRE07IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1fcHJveHlD
RE07CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1Ymxp
YyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleT4gewogcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
KENETUluc3RhbmNlQ2xlYXJLZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudEluc3RhbmNl
KHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3Qg
QXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBM
aWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0
cmluZyYsIExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBkYXRlQ2Fs
bGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAg
ICB2b2lkIGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYm
KSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vu
c2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgc3Rv
cmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToKKyAgICBT
dHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0
YW5jZTsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworLy8gVGhpcyBpcyB0aGUgdGhy
ZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBv
ZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlDbGVhcktleSBmaW5h
bCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETVByb3h5Q2xlYXJL
ZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAg
Q0RNUHJveHlDbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBpbnN0YW5jZSkKKyAgICAgICAg
OiBtX2NkbUluc3RhbmNlKGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgLy8gRm9yIG5vdyB3ZSBk
b24ndCB1c2UgdGhpcyBsaW5rIGJhY2sgdG8gdGhlICJtYWluLXRocmVhZCBpbnN0YW5jZSIsCisg
ICAgICAgIC8vIGJ1dCBoYXZpbmcgdGhlIGNvbm5lY3Rpb24gcmVhZHkgbWFkZSB3aWxsIGFsbW9z
dCBjZXJ0YWlubHkgYmUgdXNlZnVsCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAgICAg
IFVOVVNFRF9QQVJBTShtX2NkbUluc3RhbmNlKTsKKyAgICAgICAgaW5pdGlhbGl6ZUdjcnlwdCgp
OworICAgIH0KKyAgICB2aXJ0dWFsIH5DRE1Qcm94eUNsZWFyS2V5KCk7CisKKyAgICAvLyBGSVhN
RTogVGhlcmUncyBhIGxhY2sgb2YgY29uc2lzdGVuY3kgYmV0d2VlbiBTaGFyZWRCdWZmZXJzLAor
ICAgIC8vIFZlY3RvcjxjaGFyPidzIGFuZCB7dWludDhfdCosc2l6ZV90fSBpZGlvbXMgZm9yIHJl
cHJlc2VudGluZyBhIGNodW5rIG9mCisgICAgLy8gYnl0ZXMuIEZpeCB0aGF0IHNvbWVob3cuIE5v
dGUgU2hhcmVkQnVmZmVycyBhcmUgZGFuZ2Vyb3VzIHNpbmNlCisgICAgLy8gdGhleSdyZSBub3Qg
dGhyZWFkLXNhZmUgYW5kIHRoaXMgY2xhc3MgbXVzdCBtYWludGFpbgorICAgIC8vIHRocmVhZC1z
YWZldHksIGJ1dCBtYXliZSBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50IGNvdWxkIGJlCisgICAg
Ly8gbWFkZSB0byB3b3JrLCBob3dldmVyIHRoYXQgaGFzIHplcm8gaGVscGVycyBmb3IgZHJvcHBp
bmcgaW50bworICAgIC8vIGl0ZXJhdG9yLWF3YXJlIC8gY29tcGFyYXRvci1hd2FyZSBjb250YWlu
ZXJzLi4uCisgICAgc3RydWN0IGNlbmNEZWNyeXB0Q29udGV4dCB7CisgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGtleUlEOworICAgICAgICBzaXplX3Qga2V5SURTaXplSW5CeXRlczsKKworICAgICAg
ICBjb25zdCB1aW50OF90KiBpdjsKKyAgICAgICAgc2l6ZV90IGl2U2l6ZUluQnl0ZXM7CisKKyAg
ICAgICAgdWludDhfdCogZW5jcnlwdGVkQnVmZmVyOworICAgICAgICBzaXplX3QgZW5jcnlwdGVk
QnVmZmVyU2l6ZUluQnl0ZXM7CisKKyAgICAgICAgLy8gRklYTUU6IEdTdHJlYW1lci1zcGVjaWZp
YyBkYXRhIGxheW91dC4KKyAgICAgICAgLy8gSWYgd2Ugd2FudCB0byBnZXQgcmlkIG9mIHRoZSBz
cGVjaWZpYyBkYXRhIGxheW91dCwgd2UgY2FuIHBhcnNlIGl0IGJlZm9yZQorICAgICAgICAvLyBh
c3NpZ25pbmcgaXQgaGVyZSBhbmQgbWF5YmUgaGF2ZSBhIFZlY3RvcjxzaXplX3Q+IHRoYXQgaXMg
YSBzZXJpZXMgb2YKKyAgICAgICAgLy8gY2xlYXIvZGVjcnlwdGVkL2NsZWFyL2RlY3J5cHRlZC4u
LiBPciBtYXliZSBldmVuIGEgVmVjdG9yPHN0ZDo6cGFpcjxzaXplX3QsIHNpemVfdD4+CisgICAg
ICAgIC8vIHJlcHJlc2VudGluZyBzZXF1ZW5jZXMgb2YgY2xlYXIvZGVjcnlwdGVkIHNpemVzLiBU
aGF0IHN0ZDo6cGFpciBjb3VsZCBldmVuCisgICAgICAgIC8vIGJlY29tZSBhIHN0cnVjdCBDbGVh
ckRlY3J5cHRlZENodW5rU2l6ZXNJbkJ5dGVzIGZvciBleGFtcGxlLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHN1YnNhbXBsZXNCdWZmZXI7CisgICAgICAgIHNpemVfdCBzdWJzYW1wbGVzQnVm
ZmVyU2l6ZUluQnl0ZXM7CisgICAgICAgIHNpemVfdCBudW1TdWJzYW1wbGVzOworCisgICAgICAg
IGJvb2wgaXNTdWJzYW1wbGVkKCkgY29uc3QgeyByZXR1cm4gbnVtU3Vic2FtcGxlczsgfQorICAg
IH07CisKKyAgICAvLyBGSVhNRTogVW5jb25kaXRpb25hbCBpbi1wbGFjZSBkZWNyeXB0aW9uLiBX
aGF0IGFib3V0IFNWUD8KKyAgICAvLyBGSVhNRTogR1N0cmVhbWVyLXNwZWNpZmljLCBpbiB0aGF0
IHRoZSBmb3JtYXQgb2YgdGhlIHN1YnNhbXBsZQorICAgIC8vIGRhdGEgaXMgZGVmaW5lZCBieSB3
aGF0ZXZlciBxdGRlbXV4IGRlY2lkZXMgdG8gZG8gd2l0aCBpdC4KKyAgICBib29sIGNlbmNEZWNy
eXB0KGNlbmNEZWNyeXB0Q29udGV4dCYpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6
ZUdjcnlwdCgpOworCisgICAgLy8gRklYTUU6IEZvciBub3cgd2Ugb25seSBzdXBwb3J0IEFFUyBp
biBDVFIgbW9kZSwgaW4gdGhlIGZ1dHVyZQorICAgIC8vIHdlIHdpbGwgc3VyZWx5IGhhdmUgdG8g
c3VwcG9ydCBtb3JlIHByb3RlY3Rpb24gc2NoZW1lcy4gQ2FuIHdlCisgICAgLy8gcmV1c2Ugc29t
ZSBDcnlwdG8gQVBJcyBpbiBXZWJDb3JlPworICAgIGJvb2wgY2VuY1NldENvdW50ZXJWZWN0b3Io
Y29uc3QgY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9vbCBjZW5jU2V0RGVjcnlwdGlvbktl
eShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNEZWNyeXB0RnVsbFNh
bXBsZShjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNEZWNyeXB0U3Vic2FtcGxl
ZChjZW5jRGVjcnlwdENvbnRleHQmKTsKKworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fY2Rt
SW5zdGFuY2U7CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRo
aW5nIGluIFdlYkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5
SGFuZGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFt
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggNGZjNjc4N2RkOGQ5MDdjYWQ2YTI3N2YzOWIx
ZWQzMmVkNjc5YTZkOC4uMThhYWE2MGFhNzk3NGEyNTA5MzA4NmRiMWVmMzJmOTdhY2YzYzVhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC0yOCw3ICsy
OCw2IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCi0jaW5jbHVkZSAiQ0RNQ2xl
YXJLZXkuaCIKICNpbmNsdWRlICJDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVk
ZSAiQ0RNUmVzdHJpY3Rpb25zLmgiCiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKQEAgLTIx
Myw3ICsyMTIsNiBAQCBzdGF0aWMgY29uc3QgSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0
RGF0YVR5cGVzKCkKIAogdm9pZCBDRE1GYWN0b3J5OjpwbGF0Zm9ybVJlZ2lzdGVyRmFjdG9yaWVz
KFZlY3RvcjxDRE1GYWN0b3J5Kj4mIGZhY3RvcmllcykKIHsKLSAgICBmYWN0b3JpZXMuYXBwZW5k
KCZDRE1GYWN0b3J5Q2xlYXJLZXk6OnNpbmdsZXRvbigpKTsKICAgICBmYWN0b3JpZXMuYXBwZW5k
KCZDRE1GYWN0b3J5RmFpclBsYXlTdHJlYW1pbmc6OnNpbmdsZXRvbigpKTsKIAogICAgIEluaXRE
YXRhUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVySW5pdERhdGFUeXBlKENETVByaXZhdGVGYWly
UGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgeyBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6
OnNhbml0aXplU2luZiwgQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURz
U2luZiB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0
YzQ2ZmI0ZjEwMjk5NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5
OTRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6
CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+
JiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpIGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Np
b24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25z
dCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCA2NjY5ZjYyNmFmYWU4YWIxYzYzYWNjMWUzMzlkNjk0ZWQ5ZTIxOTUyLi41Mjdj
M2JjZjQ3MGI4ZWRhMDA2MGZkM2QzYzdmOTY3NWFlZTcyMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTc3NCw2ICsxNzc0LDQ0IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50
KiBwaXBlbGluZSkKICAgICB9LCB0aGlzLCBudWxscHRyKTsKIH0KIAorYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmJsb2NrV2FpdGluZ0ZvckNETUF0dGFjaG1lbnQoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChwaXBlbGluZSgpLCAiY2FuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIHdhaXRp
bmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW5pdERhdGEgaW5pdERhdGE7Cisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOworICAgICAg
ICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7
CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImZvdW5kICV6dSBwcm90ZWN0
aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2
ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lz
dGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5
U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAm
ZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAgICAgICBpbml0RGF0
YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAgICAgICAgICAgIG1faGFuZGxl
ZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3Zl
KGluaXREYXRhKSk7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcg
Zm9yIGEgQ0RNIGluc3RhbmNlIik7CisKKyAgICBib29sIGRpZENETUF0dGFjaCA9IGZhbHNlOwor
ICAgIHsKKyAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1B
dHRhY2htZW50TXV0ZXgpOworICAgICAgICBkaWRDRE1BdHRhY2ggPSBtX2NkbUF0dGFjaG1lbnRD
b25kaXRpb24ud2FpdEZvcihtX2NkbUF0dGFjaG1lbnRNdXRleCwgNF9zLCBbdGhpc10oKSB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNDRE1BdHRhY2hlZCgpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICByZXR1cm4gZGlkQ0RNQXR0YWNoOworfQorCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKIHsKICAgICBp
ZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVD
VElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKQEAgLTE4MDksNDEgKzE4NDcsOCBAQCBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgaWYgKCFnX3N0
cmNtcDAoY29udGV4dFR5cGUsICJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikp
IHsKLSAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1Io
ImNhbid0IGhhbmRsZSBkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29u
dGV4dCBtZXNzYWdlIGluIHRoZSBtYWluIHRocmVhZCIpOwotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZHJtLXByZWZlcnJlZC1k
ZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSIpOwotCi0gICAgICAgIElu
aXREYXRhIGluaXREYXRhOwotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2so
bV9wcm90ZWN0aW9uTXV0ZXgpOwotICAgICAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBw
cm90ZWN0aW9uU3lzdGVtRXZlbnRzKG1lc3NhZ2UpOwotICAgICAgICAgICAgR1NUX1RSQUNFKCJm
b3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHBy
b3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKGF1dG8m
IGV2ZW50IDogcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKSkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50
X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQuZ2V0KCksICZldmVudEtleVN5c3RlbUlkLCAmZGF0YSwg
bnVsbHB0cik7Ci0KLSAgICAgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lz
dGVtSWQsIGRhdGF9KTsKLSAgICAgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRz
LmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0
RGF0YSkpOwotCi0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBm
b3IgYSBDRE0gaW5zdGFuY2UiKTsKLQotICAgICAgICBib29sIGRpZENETUF0dGFjaCA9IGZhbHNl
OwotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xk
TG9jayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7Ci0gICAgICAgICAgICBkaWRDRE1BdHRhY2ggPSBt
X2NkbUF0dGFjaG1lbnRDb25kaXRpb24ud2FpdEZvcihtX2NkbUF0dGFjaG1lbnRNdXRleCwgNF9z
LCBbdGhpc10oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpZENETUF0dGFjaCAmJiAh
aXNQbGF5ZXJTaHV0dGluZ0Rvd24oKSAmJiAhbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgIGJvb2wgY2RtQXR0YWNoZWQgPSBibG9ja1dhaXRpbmdGb3JDRE1B
dHRhY2htZW50KG1lc3NhZ2UpOworICAgICAgICBpZiAoY2RtQXR0YWNoZWQgJiYgIWlzUGxheWVy
U2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJl
YW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3Rl
bSgpKTsKICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3
aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwg
bV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lz
dGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogCkBAIC0xODUxLDEwICsx
ODU2LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250
ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0
KCkpOwogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRl
Y3J5cHRpb24tc3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVp
ZCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxF
TUVOVChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFs
aXplZCIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NUX1dBUk5JTkcoIndhaXRpbmcgZm9yIGEgQ0RNIGZhaWxl
ZCwgbm8gQ0RNIGF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKQEAgLTIxODQsMTkgKzIxOTAsNiBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdl
KiBtZXNzYWdlKQogICAgICAgICAgICAgcHJvY2Vzc01wZWdUc1NlY3Rpb24oc2VjdGlvbik7CiAg
ICAgICAgICAgICBnc3RfbXBlZ3RzX3NlY3Rpb25fdW5yZWYoc2VjdGlvbik7CiAgICAgICAgIH0K
LSNlbmRpZgotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgICAgIGVsc2UgaWYgKGdz
dF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLXdhaXRpbmctZm9yLWtleSIpKSB7
Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0td2FpdGluZy1m
b3Ita2V5IG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsK
LSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkodHJ1ZSk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogVGhlIGRlY3J5cHRvcnMgc2hvdWxkIGJlIGFibGUgdG8gYXR0ZW1wdCB0byBkZWNyeXB0IGFm
dGVyIGJlaW5nIGNyZWF0ZWQgYW5kIGxpbmtlZCBpbiBhIHBpcGVsaW5lIGJ1dCBjdXJyZW50bHkg
dGhleSBhcmUgbm90IGFuZCBjdXJyZW50Ci0gICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmUgZG9l
cyBub3QgbWFrZSB0aGlzIHZlcnkgZWFzeS4gRm9ydHVuYXRlbHksIHRoZSBhcmNoIHdpbGwgY2hh
bmdlIHNvb24gYW5kIGl0IGRvZXMgbm90IHBheSBvZmYgdG8gZml4IHRoaXMgbm93IHdpdGggc29t
ZXRoaW5nIHRoYXQgY291bGQgYmUKLSAgICAgICAgICAgIC8vIG1vcmUgY29udm9sdXRlZC4gSW4g
dGhlIG1lYW50aW1lLCBmb3JjZSBhdHRlbXB0IHRvIGRlY3J5cHQgd2hlbiB0aGV5IGdldCBibG9j
a2VkLgotICAgICAgICAgICAgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0t
a2V5LXJlY2VpdmVkIikpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgImRybS1rZXktcmVjZWl2ZWQgbWVzc2FnZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05B
TUUobWVzc2FnZSkpOwotICAgICAgICAgICAgc2V0V2FpdGluZ0ZvcktleShmYWxzZSk7Ci0gICAg
ICAgIH0KICNlbmRpZgogICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0
cnVjdHVyZSwgImh0dHAtaGVhZGVycyIpKSB7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJQcm9jZXNzaW5nIEhUVFAgaGVhZGVyczogJSIgR1NUX1BUUl9GT1JNQVQs
IHN0cnVjdHVyZSk7CkBAIC0zNzEwLDE0ICszNzAzLDE3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZUF0dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5zdGFuY2U7
CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRl
eHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKKyAgICBtX2NkbUluc3RhbmNlID0g
cmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3RhbmNlKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3RhbmNlLT5zZXRQbGF5ZXIo
bV9wbGF5ZXIpOworCisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVm
KGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0
dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNv
bnRleHQuZ2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJj
ZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwg
ImNkbS1wcm94eSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgp
LCBudWxscHRyKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3Bp
cGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250
ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQg
YXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBh
bGwgd2FpdGVycywgc2luY2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkg
d2FpdGluZyBmb3IgYSBDRE0uCkBAIC0zNzM5LDcgKzM3MzUsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFu
Y2UpCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENE
TSBpbnN0YW5jZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQo
KSk7CiAgICAgbV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
Z3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVu
dF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQo
KSk7CiB9CiAKQEAgLTM3NzIsNTEgKzM3NjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5p
dGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JL
ZXkoYm9vbCBpc1dhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVz
IGRpZCBub3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9y
ZSBidXQgdGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0Uo
ImlzV2FpdGluZ0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRp
bmcoaXNXYWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7
Ci0gICAgaWYgKGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2Fp
dGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUco
IndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5n
Rm9yS2V5KSk7Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3Rh
bmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAw
KTsKLQotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVl
cnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0
X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsK
LSAgICBpZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBn
c3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAg
IEdTVF9UUkFDRSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1
bHQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAo
c3RhdGUgPj0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBp
biB0aGUgcGlwZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVs
aW5lIGlzIHNldCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBp
dCBhbmQgYXNrIHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdz
dEl0ZXJhdG9yPiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlw
ZWxpbmUuZ2V0KCkpKSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0
OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRv
cl9mb2xkKGl0ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBn
cG9pbnRlciBkYXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCog
ZWxlbWVudCA9IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAg
ICAgICAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0
X2VsZW1lbnRfcXVlcnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwg
cXVlcnkuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVS
QVRPUl9SRVNZTkMpCi0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRv
ci5nZXQoKSk7Ci0gICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRP
Ul9SRVNZTkMpOwotICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VS
Uk9SKQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9y
Iik7Ci0gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsK
LSAgICAgICAgR1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVy
YXRvclJlc3VsdCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aAppbmRleCBiMmJiNTQxYTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li5mMzM2ZTZi
ZTliYWZmMzZkNDNjMjc4NzM5NGIxY2NiNjUwMGU3NTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0
cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNl
bmRpZgorCiB0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsK
IHR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1
Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVj
dGVkOgogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1l
bnRNdXRleDsKICAgICBDb25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJl
ZlB0cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5z
dGFuY2VQcm94eT4gbV9jZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7
IC8vIEd1YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNo
U2V0PHVpbnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9j
ZG1JbnN0YW5jZTsgfQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNl
KCk7CiAgICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsK
LSAgICB2b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgYm9vbCBibG9ja1dhaXRpbmdG
b3JDRE1BdHRhY2htZW50KEdzdE1lc3NhZ2UqKTsKICNlbmRpZgogCiAgICAgQXRvbWljPGJvb2w+
IG1faXNQbGF5ZXJTaHV0dGluZ0Rvd247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAz
YzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLjdmODczYTdmYzdjMGU3ODQ2NGE4ZmI1ZmNjM2Yy
ZmRiMGJhMzkwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xl
YXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0zNywxMiArMzcsMTEgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BS
SVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQ
RV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUpKQog
c3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgewotICAgIFJlZlB0cjxQ
cm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBnY3J5X2NpcGhlcl9oZF90IGhhbmRsZTsK
KyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gcHJveHlDRE07CiB9OwogCiBzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25zZShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQdHI8UHJveHlDRE0+KTsK
K3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7CiBzdGF0aWMgYm9vbCBkZWNyeXB0KFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZm
ZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBH
c3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtp
dF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CkBAIC04NCw3ICs4Myw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0
KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRf
Q0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0gR1N0cmVh
bWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKLSAgICBjZW5jQ2xhc3MtPmhhbmRsZUtl
eVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFuZGxlS2V5UmVzcG9uc2UpOworICAgIGNl
bmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVByb3h5QXR0
YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5
cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBAIC05Myw2MSArOTIsMzIgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVj
cnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmKQogewogICAgIFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNS
WVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2VsZi0+cHJpdiA9IHByaXY7CiAgICAgbmV3
IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKLSAgICBpZiAoZ2Ny
eV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHByaXYtPmhhbmRsZSksIEdDUllf
Q0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkp
IHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0ZSBBRVMg
MTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAg
ICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZiA9IFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBnY3J5X2NpcGhlcl9jbG9zZShw
cml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChv
YmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSkK
K3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBwcm94eUNETSkKIHsKICAgICBXZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQ
VF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgcHJpdi0+
cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5Q0RNQ2xlYXJLZXkqPihwcm94eUNETS5n
ZXQoKSk7CisgICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PENETVByb3h5Q2xl
YXJLZXkqPihwcm94eUNETS5nZXQoKSk7CiAgICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOwogfQog
Ci1zdGF0aWMgYm9vbCBmaW5kQW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJp
dmF0ZSogcHJpdiwgY29uc3QgU3RyaW5nJiYga2V5SUQpCitzdGF0aWMgYm9vbCBkZWNyeXB0KFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZm
ZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBz
dWJzYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKQogewotICAgIFN0cmlu
ZyBrZXlWYWx1ZTsKLQotICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogcHJpdi0+cHJveHlDRE0t
Pmlzb2xhdGVkS2V5cygpKSB7Ci0gICAgICAgIGlmIChrZXkua2V5SUREYXRhID09IGtleUlEKSB7
Ci0gICAgICAgICAgICBrZXlWYWx1ZSA9IGtleS5rZXlWYWx1ZURhdGE7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChrZXlWYWx1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZmFpbGVkIHRvIGZpbmQgYSBkZWNyeXB0
aW9uIGtleSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVNTRVJUKGtl
eVZhbHVlLnNpemVJbkJ5dGVzKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIGtleVZhbHVlLmNo
YXJhY3RlcnM4KCksIGtleVZhbHVlLnNpemVJbkJ5dGVzKCkpKSB7Ci0gICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1QocHJpdiwgImdjcnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVy
cm9yKGVycm9yKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KKyAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQ
VChzZWxmKSk7CiAKLXN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1
ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZUNvdW50LCBHc3RCdWZm
ZXIqIHN1YlNhbXBsZXNCdWZmZXIpCi17Ci0gICAgaWYgKCFpdkJ1ZmZlcikgewotICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJubyBJViBidWZmZXIiKTsKKyAgICBpZiAoIWl2QnVmZmVy
IHx8ICFrZXlJREJ1ZmZlciB8fCAhYnVmZmVyKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgImludmFsaWQgZGVjcnlwdCgpIHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xNTcsMjcgKzEyNyw2IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB1aW50OF90IGN0cltDTEVBUktF
WV9TSVpFXTsKLSAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSA4KSB7Ci0gICAgICAg
IG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZm
ZXItPmRhdGEoKSwgOCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVm
ZmVyLT5zaXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBl
ZElWQnVmZmVyLT5kYXRhKCksIENMRUFSS0VZX1NJWkUpOwotICAgIH0KLQotICAgIFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBU
X0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKLSAgICBnY3J5X2Vy
cm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIocHJpdi0+aGFuZGxlLCBjdHIs
IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJnY3J5X2NpcGhlcl9zZXRjdHIgZmFpbGVkOiAlcyIsIGdwZ19zdHJl
cnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKCFidWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiTm8gYnVmZmVy
IHRvIGRlY3J5cHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGF1dG8g
bWFwcGVkS2V5SWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShrZXlJ
REJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7CiAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAga2V5IGlkIGJ1ZmZl
ciIpOwpAQCAtMTkwLDcyICsxMzksMjkgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZpbmRBbmRTZXRLZXkocHJpdiwgU3RyaW5n
KG1hcHBlZEtleUlkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCkpKTsK
LQotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKLSAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9
IDA7Ci0KLSAgICBpZiAoIXN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgIC8vIEZ1bGwgc2FtcGxl
IGVuY3J5cHRpb24uCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxl
IGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7
Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KLSAgICAgICAgaWYg
KG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVk
QnVmZmVyLT5zaXplKCksIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0g
ICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlw
dGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIENoZWNrIHN1YlNhbXBsZXNCdWZmZXIgaXNuJ3Qg
bnVsbC4KLSAgICBpZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRXJyb3IsIHRoZSBzdWJTYW1wbGVCdWZmZXIgaXMgbnVsbCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxlIGVuY3J5cHRpb24uCi0g
ICAgYXV0byBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVy
OjpjcmVhdGUoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBl
ZFN1YlNhbXBsZXNCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBHVW5pcXVlUHRyPEdzdEJ5dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFk
ZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1
ZmZlci0+c2l6ZSgpKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVk
LCBzaXplOiAlenUiLCBwb3NpdGlvbiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgd2hp
bGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVmZmVyLT5zaXplKCkpIHsKLSAgICAgICAgZ3VpbnQxNiBu
Qnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgIGd1aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKLQot
ICAgICAgICBpZiAoc2FtcGxlSW5kZXggPCBzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAgICAg
aWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXND
bGVhcikKLSAgICAgICAgICAgICAgICB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUo
cmVhZGVyLmdldCgpLCAmbkJ5dGVzRW5jcnlwdGVkKSkgewotICAgICAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2VsZiwgInVuc3VwcG9ydGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5C
eXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247Ci0gICAgICAg
IH0KLQotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUg
LSAlaHUgYnl0ZXMgY2xlYXIgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwg
bWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgIHBvc2l0aW9uICs9IG5C
eXRlc0NsZWFyOwotICAgICAgICBpZiAobkJ5dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNy
eXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1
ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5
X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3Np
dGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJv
cikgewotICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUg
aW5kZXggJXUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJv
cihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0VuY3J5cHRlZDsKKyAgICBSZWZQ
dHI8R3N0TWFwcGVkQnVmZmVyPiBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyOworICAgIENETVByb3h5
Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQua2V5SUQg
PSBtYXBwZWRLZXlJZEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHQua2V5SURTaXplSW5CeXRl
cyA9IG1hcHBlZEtleUlkQnVmZmVyLT5zaXplKCk7CisgICAgY29udGV4dC5pdiA9IG1hcHBlZElW
QnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5pdlNpemVJbkJ5dGVzID0gbWFwcGVkSVZCdWZm
ZXItPnNpemUoKTsKKyAgICBjb250ZXh0LmVuY3J5cHRlZEJ1ZmZlciA9IG1hcHBlZEJ1ZmZlci0+
ZGF0YSgpOworICAgIGNvbnRleHQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgPSBtYXBwZWRC
dWZmZXItPnNpemUoKTsKKyAgICBjb250ZXh0Lm51bVN1YnNhbXBsZXMgPSBzdWJzYW1wbGVDb3Vu
dDsKKyAgICBpZiAoIXN1YnNhbXBsZUNvdW50KQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNC
dWZmZXIgPSBudWxscHRyOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3Vic2FtcGxlc0J1
ZmZlcik7CisgICAgICAgIG1hcHBlZFN1YnNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBw
ZWRCdWZmZXI6OmNyZWF0ZShzdWJzYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAg
ICBpZiAoIW1hcHBlZFN1YnNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1
ZmZlciA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPmRhdGEoKTsKKyAgICAgICAgY29udGV4dC5z
dWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMgPSBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyLT5zaXpl
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHByaXYtPnByb3h5Q0RN
LT5jZW5jRGVjcnlwdChjb250ZXh0KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURf
TUVESUEpICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRl
eCAzNjgzZDA0NzQ4NjBmNmVmODE3ZjMxY2RjMTVlNDhhYzE4NmMwMzQ0Li5lYjUzZDNmYzY3MDNi
ZWU2Yjc3MjMwNzc5ZGQ4NWJlOTQxMTkyOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5j
cHAKQEAgLTI1LDM0ICsyNSwzNCBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
VVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAKLXVzaW5nIFdlYkNv
cmU6OlByb3h5Q0RNOwordXNpbmcgV2ViQ29yZTo6Q0RNUHJveHk7CiAKICNkZWZpbmUgV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX01FRElBX0NFTkNfREVDUllQVCwgV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gcHJv
dGVjdGlvbkV2ZW50OwotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE07Ci0gICAgYm9vbCBr
ZXlSZWNlaXZlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCB3YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsK
LSAgICBMb2NrIG11dGV4OwotICAgIENvbmRpdGlvbiBjb25kaXRpb247CisgICAgUmVmUHRyPENE
TVByb3h5PiBjZG1Qcm94eTsKKworICAgIExvY2sgY2RtQXR0YWNobWVudE11dGV4OworICAgIENv
bmRpdGlvbiBjZG1BdHRhY2htZW50Q29uZGl0aW9uOwogfTsKIAorc3RhdGljIGNvbnN0ZXhwciBT
ZWNvbmRzIE1heFNlY29uZHNUb1dhaXRGb3JDRE1Qcm94eSA9IDVfczsKKwogc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSB0
cmFuc2l0aW9uKTsKIHN0YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqKTsKIHN0YXRpYyBHc3RD
YXBzKiB0cmFuc2Zvcm1DYXBzKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdz
dENhcHMqLCBHc3RDYXBzKik7CiBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNl
KEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RCdWZmZXIqKTsKIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZl
bnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RFdmVudCopOwotc3RhdGljIGdib29sZWFu
IHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RRdWVy
eSopOwotc3RhdGljIGJvb2wgaXNDRE1JbnN0YW5jZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0Kik7CiBzdGF0aWMgdm9pZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQq
LCBHc3RDb250ZXh0Kik7CiAKLQogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CiAjZGVmaW5lIEdT
VF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9kZWJ1
Z19jYXRlZ29yeQogCkBAIC03Niw3ICs3Niw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDb21tb25FCiAg
ICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRS
KHRyYW5zZm9ybUNhcHMpOwogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2lwX29u
X3Bhc3N0aHJvdWdoID0gRkFMU0U7CiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT5zaW5rX2V2ZW50
ID0gR1NUX0RFQlVHX0ZVTkNQVFIoc2lua0V2ZW50SGFuZGxlcik7Ci0gICAgYmFzZVRyYW5zZm9y
bUNsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSKHF1ZXJ5SGFuZGxlcik7CiAKICAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpOwogfQpAQCAtMTc3LDI5ICsxNzYsMjAgQEAgc3RhdGlj
IEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBH
c3RCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChiYXNlKTsKICAgICBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9D
RU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIocHJp
di0+bXV0ZXgpOwogCi0gICAgLy8gVGhlIGtleSBtaWdodCBub3QgaGF2ZSBiZWVuIHJlY2VpdmVk
IHlldC4gV2FpdCBmb3IgaXQuCi0gICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWlsYWJsZSB5ZXQsIHdhaXRpbmcg
Zm9yIGl0Iik7Ci0gICAgICAgIGlmIChHU1RfU1RBVEUoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NU
X1NUQVRFX1BBVVNFRCB8fCAoR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgIT0g
R1NUX1NUQVRFX1ZPSURfUEVORElORyAmJiBHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNl
bGYpKSA8IEdTVF9TVEFURV9QQVVTRUQpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJjYW4ndCBwcm9jZXNzIGtleSByZXF1ZXN0cyBpbiBsZXNzIHRoYW4gUEFVU0VEIHN0
YXRlIik7Ci0gICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICAg
ICAgfQotICAgICAgICAvLyBTZW5kICJkcm0tY2RtLWluc3RhbmNlLW5lZWRlZCIgbWVzc2FnZSB0
byB0aGUgcGxheWVyIHRvIHJlc2VuZCB0aGUgQ0RNSW5zdGFuY2UgaWYgYXZhaWxhYmxlIGFuZCBp
bmZvcm0gd2UgYXJlIHdhaXRpbmcgZm9yIGtleS4KLSAgICAgICAgcHJpdi0+d2FpdGluZ0Zvcktl
eSA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChz
ZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVj
dHVyZV9uZXdfZW1wdHkoImRybS13YWl0aW5nLWZvci1rZXkiKSkpOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CiAKLSAgICAgICAgcHJpdi0+Y29uZGl0
aW9uLndhaXRGb3IocHJpdi0+bXV0ZXgsIFNlY29uZHMoNSksIFtwcml2XSB7Ci0gICAgICAgICAg
ICByZXR1cm4gcHJpdi0+a2V5UmVjZWl2ZWQ7CisgICAgLy8gVGhlIENETSBpbnN0YW5jZSBuZWVk
cyB0byBiZSBuZWdvdGlhdGVkIGJlZm9yZSB3ZSBjYW4gYmVnaW4gZGVjcnlwdGlvbi4KKyAgICBp
ZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNE
TSBub3QgYXZhaWxhYmxlLCBnb2luZyB0byB3YWl0IGZvciBpdCIpOworICAgICAgICBwcml2LT5j
ZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4LCBN
YXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHksIFtwcml2XSB7CisgICAgICAgICAgICByZXR1cm4g
cHJpdi0+Y2RtUHJveHk7CiAgICAgICAgIH0pOwotICAgICAgICBpZiAoIXByaXYtPmtleVJlY2Vp
dmVkKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJrZXkgbm90IGF2YWls
YWJsZSIpOworICAgICAgICBpZiAoIXByaXYtPmNkbVByb3h5KSB7CisgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSB3YXMgbm90IHJldHJpZXZlZCBpbiB0aW1lIik7
CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQot
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQsIGNvbnRpbnVpbmci
KTsKLSAgICAgICAgcHJpdi0+d2FpdGluZ0ZvcktleSA9IGZhbHNlOwotICAgICAgICBnc3RfZWxl
bWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksIGdzdF9tZXNzYWdlX25ld19lbGVt
ZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJkcm0ta2V5LXJl
Y2VpdmVkIikpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdyBhdmFp
bGFibGUgd2l0aCBhZGRyZXNzICVwIiwgcHJpdi0+Y2RtUHJveHkuZ2V0KCkpOwogICAgIH0KIAog
ICAgIEdzdFByb3RlY3Rpb25NZXRhKiBwcm90ZWN0aW9uTWV0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0UHJvdGVjdGlvbk1ldGEqPihnc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEoYnVmZmVy
KSk7CkBAIC0yMDcsMzIgKzE5NywzMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1J
blBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IEdzdFByb3RlY3Rpb24gbWV0
YWRhdGEgZnJvbSBidWZmZXIgJXAiLCBidWZmZXIpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICB9CisgICAgYXV0byByZW1vdmVQcm90ZWN0aW9uTWV0YU9uUmV0
dXJuID0gbWFrZVNjb3BlRXhpdChbYnVmZmVyLCBwcm90ZWN0aW9uTWV0YV0geworICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKKyAgICB9KTsKIAogICAgIHVuc2lnbmVkIGl2U2l6ZTsKICAgICBp
ZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdl9zaXpl
IiwgJml2U2l6ZSkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IGdldCBpdl9zaXplIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1
cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKICAgICBnYm9vbGVhbiBlbmNyeXB0
ZWQ7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuKHByb3RlY3Rpb25NZXRhLT5p
bmZvLCAiZW5jcnlwdGVkIiwgJmVuY3J5cHRlZCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIGdldCBlbmNyeXB0ZWQgZmxhZyIpOwotICAgICAgICBnc3RfYnVm
ZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVj
dGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAg
fQogCi0gICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkgewotICAgICAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKKyAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKQogICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7Ci0gICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChiYXNlLCAicHJvdGVj
dGlvbiBtZXRhOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcHJvdGVjdGlvbk1ldGEtPmluZm8pOwogCiAg
ICAgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQ7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91
aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vic2FtcGxlX2NvdW50IiwgJnN1YlNhbXBsZUNv
dW50KSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IHN1
YnNhbXBsZV9jb3VudCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwg
cmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCkBAIC0yNDIsMTcgKzIzMCwxOSBA
QCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0q
IGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZvLCAic3Vic2FtcGxlcyIpOwogICAgICAgICBp
ZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gZ2V0IHN1YnNhbXBsZXMiKTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEo
YnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAg
ICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAg
ICAgc3ViU2FtcGxlc0J1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKKyAgICAg
ICAgaWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJUaGVyZSBpcyBubyBzdWJzYW1wbGVzIGJ1ZmZlciwgYnV0IGEgcG9zaXRpdmUgc3Vi
c2FtcGxlIGNvdW50Iik7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFs
dWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJraWQiKTsKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBrZXkgaWQgZm9yIGJ1
ZmZlciIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogICAgIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIgPSBn
c3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CkBAIC0yNjAsNyArMjUwLDYgQEAgc3RhdGljIEdz
dEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RC
dWZmZXIqIGJ1ZmZlcikKICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3Rl
Y3Rpb25NZXRhLT5pbmZvLCAiaXYiKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgSVYgZm9yIHNhbXBsZSIpOwotICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CiAgICAgfQogCkBAIC0yNzAsNzEgKzI1OSw5MSBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0
cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVy
KQogICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImRlY3J5cHRpbmciKTsKICAgICBpZiAoIWts
YXNzLT5kZWNyeXB0KHNlbGYsIGl2QnVmZmVyLCBrZXlJREJ1ZmZlciwgYnVmZmVyLCBzdWJTYW1w
bGVDb3VudCwgc3ViU2FtcGxlc0J1ZmZlcikpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRGVjcnlwdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAg
ICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGdzdF9i
dWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90
ZWN0aW9uTWV0YSkpOwogICAgIHJldHVybiBHU1RfRkxPV19PSzsKIH0KIAotc3RhdGljIGJvb2wg
aXNDRE1JbnN0YW5jZUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmKQorc3RhdGljIGJvb2wgaXNDRE1Qcm94eUF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
UFJJVkFURShzZWxmKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFj
aG1lbnRNdXRleCk7CisgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5OworfQogCi0gICAgQVNTRVJU
KHByaXYtPm11dGV4LmlzTG9ja2VkKCkpOwotCi0gICAgaWYgKCFwcml2LT5wcm94eUNETSkgewot
ICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoc2VsZiksICJkcm0tY2RtLWluc3RhbmNlIikpOwot
ICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEdTdHJlYW1lciBkb2N1bWVudGF0aW9uLCBpZiB3
ZSBjYW4ndCBmaW5kIHRoZSBjb250ZXh0LCB3ZSBzaG91bGQgcnVuIGEgZG93bnN0cmVhbSBxdWVy
eSwgdGhlbiBhbiB1cHN0cmVhbSBvbmUgYW5kIHRoZW4gc2VuZCBhIGJ1cwotICAgICAgICAvLyBt
ZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNp
bmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVl
cnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQotICAgICAgICAvLyBjb3VsZCBiZSBo
ZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRz
IHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3
YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMKLSAgICAgICAgLy8gc29tZXRoaW5nIHByb3Zp
ZGVkIGJ5IGNyb3NzcGxhdGZvcm0gY29kZS4gVGhpcyBtZWFucyB0aGF0IHdlIHdvbid0IGJlIGFi
bGUgdG8gYW5zd2VyIHRoZSBidXMgcmVxdWVzdCBpbiBhbnkgd2F5IGVpdGhlci4gU3VtbWluZyB1
cCwgbmVpdGhlciBxdWVyaWVzIG5vciBidXMKLSAgICAgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1
bCBoZXJlLgotICAgICAgICBpZiAoY29udGV4dCkgewotICAgICAgICAgICAgY29uc3QgR1ZhbHVl
KiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1
cmUoY29udGV4dC5nZXQoKSksICJjZG0taW5zdGFuY2UiKTsKLSAgICAgICAgICAgIHByaXYtPnBy
b3h5Q0RNID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRf
cG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChwcml2LT5wcm94eUNE
TSkKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBhIG5l
dyBDRE0gcHJveHkgaW5zdGFuY2UgJXAsIHJlZmNvdW50ICV1IiwgcHJpdi0+cHJveHlDRE0uZ2V0
KCksIHByaXYtPnByb3h5Q0RNLT5yZWZDb3VudCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2Ugd2FzIGRldGFj
aGVkIik7CitzdGF0aWMgQ0RNUHJveHkqIHJlcXVlc3RDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdT
VF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkg
PSBudWxscHRyOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRh
dGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25z
dHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAg
ICAvLyBtZXNzYWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNl
bnNlIHNpbmNlIG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQg
bm8gcXVlcnkgaXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJl
IGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdl
dHMgdGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5v
IHdheSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRl
ZCBieSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxl
IHRvIGFuc3dlciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAs
IG5laXRoZXIgcXVlcmllcyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJl
LgorICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rf
c3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0
KCkpLCAiY2RtLXByb3h5Iik7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJv
eHkgPSByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1
ZSkpOworICAgICAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZj
b3VudCAldSIsIHByb3h5LCBwcm94eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHByb3h5OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9P
QkpFQ1Qoc2VsZiwgIkNETVByb3h5IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAg
ICB9Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZhaWxhYmxl
ICVzIiwgYm9vbEZvclByaW50aW5nKHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAgcmV0dXJu
IHByaXYtPnByb3h5Q0RNOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgZ2Jvb2xl
YW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2
ZW50KQorc3RhdGljIHZvaWQgYXR0YWNoQ0RNUHJveHkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiwgQ0RNUHJveHkqIHByb3h5KQogewotICAgIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRy
YW5zKTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CiAgICAgV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZB
TFNFOwogCi0gICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdT
VF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzNTUKLSAgICAgICAgLy8gV2Ug
c2hvdWxkIGJlIGhhbmRsaW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KLSAg
ICAgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFj
aywgYWZ0ZXIgYQotICAgICAgICAvLyBwcmVmZXJyZWQgc3lzdGVtIElEIGNvbnRleHQgaXMgc2V0
LCBhbnkgZnV0dXJlIHByb3RlY3Rpb24KLSAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhh
bmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRoZSBtdXN0IGJlCi0gICAgICAgIC8vIGhhbmRsZWQg
aW4gaGVyZS4KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAg
ICBpZiAoIWlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoc2VsZikpIHsKLSAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIENETSBpbnN0YW5jZSBhdmFpbGFibGUiKTsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiQXR0YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHBy
aXYtPmNkbVByb3h5ID0gcHJveHk7CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwg
cHJpdi0+Y2RtUHJveHkpOworICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5
T25lKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJs
ZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICgh
aXNDRE1Qcm94eUF2YWlsYWJsZShzZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBG
QUxTRTsKKworICAgICAgICBDRE1Qcm94eSogcHJveHkgPSByZXF1ZXN0Q0RNUHJveHlGcm9tR3N0
Q29udGV4dChzZWxmKTsKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hD
RE1Qcm94eShzZWxmLCBwcm94eSk7CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IHJldHJpZXZlIENETVByb3h5IGZyb20gY29udGV4dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0g
RkFMU0U7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAotICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYs
IHByaXYtPnByb3h5Q0RNKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
a2V5IHJlY2VpdmVkIik7Ci0gICAgICAgICAgICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0g
ICAgICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFz
ZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0
cmFucyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNo
b3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAg
Ly8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0
ZXIgYQorICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1
cmUgcHJvdGVjdGlvbgorICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBk
ZW11eGVyLCBzbyB0aGV5IG11c3QgYmUKKyAgICAvLyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dp
dGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01f
RE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgQVNTRVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVu
dCwgImF0dGVtcHQtdG8tZGVjcnlwdCIpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxm
LCAiSGFuZGxpbmcgYXR0ZW1wdC10by1kZWNyeXB0Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3Rh
bGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYpOwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYo
ZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzU0LDYgQEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVu
dEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VU
cmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVl
cnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1
Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUodHJhbnMpOwotICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdh
aXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwot
ICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0ZvcktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdT
VF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0
aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0
ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFf
Q0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYzLDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0
ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNo
YW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
UEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7Cisg
ICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQg
QEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0
KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xB
U1Moc2VsZik7CiAKLSAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0
LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBn
c3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQp
LCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4
KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJv
eHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2
LT5wcm94eUNETS5nZXQoKSk7CisgICAgaWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUo
Y29udGV4dCwgImRybS1jZG0tcHJveHkiKSkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVl
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250
ZXh0KSwgImNkbS1wcm94eSIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1B
dHRhY2htZW50TXV0ZXgpOworICAgICAgICBwcml2LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRl
cnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxw
dHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0
YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5
QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRl
NmVkOGQ0ZThmMWZhNWQuLjg1NzVhMDcxMDJiZDEzM2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5z
dGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94eS5oPgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJh
c2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwog
CiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVL
ZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxX
ZWJDb3JlOjpQcm94eUNETT4pOwotICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJ
REJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0
QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICBib29sICgqY2RtUHJveHlBdHRhY2hlZCko
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Q
cm94eT4pOworICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0
QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJz
YW1wbGVzQnVmZmVyKTsKIH07CiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThk
ZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYg
QEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJp
bmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94
eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6
TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQog
ewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RN
SW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NE
TUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5
Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6
TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5j
ZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBi
NDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYg
QEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+
Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQ
cm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBj
bGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxN
b2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAs
NyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9y
eShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNv
bnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24o
KSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAK
ICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50
aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389648</attachid>
            <date>2020-02-04 03:49:07 -0800</date>
            <delta_ts>2020-02-07 04:44:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200204114905.patch</filename>
            <type>text/plain</type>
            <size>107731</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjZmZmUxMjhjZmMxMTNk
MWRjMGRiNGYxYmU2ZTQ1MDAxOTRlZTU0OS4uNDM3ZTQyMTc3MWExYmI0NTRjMmQ4ZjVjNTA3NzRi
YzA5ZjU0YmIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNSBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
LgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0
ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0IHRoZWlyIHN0YXR1cyBpcy4KKworICAg
ICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhyZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVh
bCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIgcXVpcmtzLiBUaGUgdHdvIG1haW4gcHJv
YmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisgICAgICAgIGhhdmUgaW4gV2ViS2l0IGlz
IGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZyb20gYmFja2dyb3VuZAorICAgICAgICBt
ZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5hZ2VtZW50IGlzIGhvdyB0byBtYW5hZ2Ug
dGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAgICAgY29oZXJlbnQgd2l0aCBKYXZhU2Ny
aXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxlbWVudGF0aW9uLAorICAgICAgICB0aGUg
cmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFja2dyb3VuZCBtZWRpYQorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1bHQga2V5IHN0b3JlIGludGVyZmFjZSBm
b3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFzc2VzIGNhbiwgb24gcmVjZWlwdCBvZiBu
ZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJlYWwgQ0RNLCB0ZWxsIENETVByb3h5IGFi
b3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBzdGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50
ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20gdGhlcmUsCisgICAgICAgIGxldHRpbmcg
SmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8K
KyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMgd2VsbCBhcyB0aGUgbWVkaWEgZGVjb2Rl
IHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQgY29tZSBhc2tpbmcuCisKKyAgICAgICAg
QWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlzIGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcg
dGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5zdGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRoaXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5
IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAgICAgIHRocmVhZC11bnNhZmUgYWNjZXNz
IG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdlIGhhZCB0byBkbworICAgICAgICBzb21l
dGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNvbWV0aGluZyB3YXMgUHJveHlDRE0gKGEK
KyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBub3cpLCB3aGljaCB3YXMgYSBoYWNrIGFu
ZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5
IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFuZAorICAgICAgICBpdCB3aWxsIGJ5IGRl
ZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcgb2YgdGhlIGtleSBzdG9yZSBmb3IKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVycm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5k
IHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRlY3J5cHRpb24gLyBkZWNvZGUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpDRE1Qcm94eTo6a2V5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVBy
b3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eTo6dHJ5V2FpdEZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6
a2V5QXZhaWxhYmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6
OmtleUF2YWlsYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JX
YWl0Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0
YXJ0ZWRXYWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6
OnN0b3BwZWRXYWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJv
eHk6OnJlcXVlc3RLZXlTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5
OjptZXJnZUtleXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnJl
bW92ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OktleTo6aWRBc1NoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OmlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5OjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpkZXJlZik6CisgICAgICAgIChXZWJD
b3JlOjpLZXk6OnJlZkNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aGFzU2Ft
ZUtleVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OktleSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmVBbGxLZXlzKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleVN0b3JlOjpudW1LZXlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNiZWdpbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpl
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmNlbmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjcmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3Jl
OjpjcmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpDRE1J
bnN0YW5jZVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnByb3h5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OmlzV2FpdGluZ0Zv
cktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6dHJhY2tTZXNzaW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHA6IEFkZGVkIGEgMzIgYW5kCisgICAgICAgIDE2IGJpdCBieXRlIHJlYWRlciB1dGlsaXR5IGZv
ciBzdWJzYW1wbGUgYnVmZmVyIHBhcnNpbmcuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHlDbGVhcktleTo6fkNETVByb3h5Q2xlYXJLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IpOiBIZWxwZXIgbWV0aG9k
IGZvciBHQ3J5cHQuCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0
RGVjcnlwdGlvbktleSk6IERpdHRvLiBUaGlzCisgICAgICAgIG1ldGhvZCB3aWxsIGJsb2NrIGlm
IGl0IGRldGVjdHMgYSBrZXkgaXMgbm90IHlldCBhdmFpbGFibGUgZnJvbSBKUy4KKyAgICAgICAg
KFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNhbXBsZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRTdWJzYW1w
bGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVj
cnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6aW5pdGlh
bGl6ZUdjcnlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IFdpcmUgaW50byB0aGUKKyAgICAgICAgQ0RNUHJveHkg
aW5mcmFzdHJ1Y3R1cmUsIHdlIHBhc3Mgb3VyIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCisg
ICAgICAgIENETVByb3h5IHRvIHRoZSBiYXNlIGNsYXNzIGZvciBpdHMgY29tbWFuZCBrZXkgbWFu
YWdlbWVudAorICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAgdHJhY2tTZXNzaW9u
IG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1FCisgICAgICAgIHNl
c3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJl
cXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFjayBvZiBnZW5lcmF0
ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVzZSBuZXcga2V5IG1h
bmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
c29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94eUNETUNsZWFyS2V5
Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5OjprZXlJREFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5VmFsdWVBc1N0cmluZyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6IERlbGV0ZWQuIEl0IGxvb2tzIGxpa2Ugd2Ug
d2VyZSB1bm5lY2Vzc2FyaWx5CisgICAgICAgIHNvcnRpbmcgdGhlIGtleSB2ZWN0b3JzLiBJdCBk
b2Vzbid0IG1ha2UgYW55IHNlbnNlIHRvIGltcG9zZSBhbgorICAgICAgICBvcmRlcmluZyBvbiBr
ZXlzLCBzbyBJIHJlbW92ZWQgaXQuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaDogUmVmYWN0b3IgdG8gdXNlCisgICAgICAgIG5ldyBrZXkg
bWFuYWdlbWVudCBjbGFzc2VzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5
IG9uIENETUNsZWFyS2V5LmgsIHNpbmNlIEkgaGF2ZW4ndCBhZGRlZCBDRE1Qcm94eQorICAgICAg
ICB0byB0aGUgQXBwbGUgYnVpbGQgc3lzdGVtLCBhbmQgSSBkb24ndCBiZWxpZXZlIHRoZXkgbmVl
ZCBDbGVhcktleQorICAgICAgICBzdXBwb3J0PyBPciBhdCBsZWFzdCBpdCBpcyBmYWxzZWx5IGFk
dmVydGlzZWQgYXMgc3VwcG9ydGVkPworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmg6CisgICAg
ICAgIFJlbW92ZSBvYnNvbGV0ZSBQcm94eUNETSBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJsb2NrV2FpdGluZ0Zv
ckNETUF0dGFjaG1lbnQpOgorICAgICAgICBSZWZhY3RvciBsb2dpYyBvdXQgb2Ygc3luY01lc3Nh
Z2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZVN5bmNNZXNzYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3It
a2V5IGNvZGUsIGl0IHdhcyBhbGwgYnJva2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAg
IEVuZm9yY2UgdXNlIG9mIENETUluc3RhbmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9y
dHMgd2lsbCBiZQorICAgICAgICB1c2luZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZy
b20gYmFja2dyb3VuZAorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUg
dG8gdGhlIE1lZGlhUGxheWVyIGZvcgorICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQs
IHNvIHdpcmUgdGhhdCBpbiBoZXJlIHRvby4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6d2FpdGluZ0ZvcktleSBjb25zdCk6IEtleQorICAgICAgICBzdGF0
dXMgbm90aWZpY2F0aW9ucyBhcmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBDRE1Qcm94eSBu
b3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdh
aXRpbmdGb3JLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDogTm93CisgICAgICAgIHdlIHVzZSBD
RE1JbnN0YW5jZVByb3h5LCBub3QgQ0RNSW5zdGFuY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHA6
CisgICAgICAgIFJlZmFjdG9yIHRvIHVzZSBDRE1Qcm94eS4KKyAgICAgICAgKHdlYmtpdF9tZWRp
YV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9j
bGVhcl9rZXlfZGVjcnlwdF9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKGNk
bVByb3h5QXR0YWNoZWQpOgorICAgICAgICAoZGVjcnlwdCk6CisgICAgICAgIChoYW5kbGVLZXlS
ZXNwb25zZSk6IERlbGV0ZWQuIFRoaXMgd2FzIGEgYmFkbHkgbmFtZWQgbWV0aG9kIHRoYXQgaGFz
IGJlZW4gY2hhbmdlZCB0byBjZG1Qcm94eUF0dGFjaGVkLgorICAgICAgICAoZmluZEFuZFNldEtl
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVm
YWN0b3IgZm9yIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0
aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6IFJlbW92ZSB0aGUKKyAgICAgICAgcXVlcnkgaGFuZGxl
ciB1c2VkIGZvciB3YWl0aW5nIGZvciBrZXkgbm90aWZpY2F0aW9ucywgc2luY2UgaXQncworICAg
ICAgICBiZWVuIGRlbGV0ZWQgbm93LgorICAgICAgICAodHJhbnNmb3JtSW5QbGFjZSk6IFJlbW92
ZSB0aGUgYnJva2VuIHdhaXRpbmcgZm9yIGtleSBsb2dpYywgYW5kCisgICAgICAgIG1ha2UgY2xl
YXIgd2hhdCB3ZSBibG9jayBvbiBoZXJlLiBBZGQgYSBzY29wZSBndWFyZCB0byByZW1vdmUKKyAg
ICAgICAgcHJvdGVjdGlvbiBtZXRhIHJhdGhlciB0aGFuIGRvaW5nIGl0IG1hbnVhbGx5LgorICAg
ICAgICAoaXNDRE1Qcm94eUF2YWlsYWJsZSk6IAorICAgICAgICAocmVxdWVzdENETVByb3h5RnJv
bUdzdENvbnRleHQpOiBCcmVha291dCBmcm9tIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUKKyAgICAg
ICAgKGF0dGFjaENETVByb3h5KTogQnJlYWtvdXQgZnJvbSBpc0NETUluc3RhbmNlQXZhaWxhYmxl
CisgICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6IEJyZWFrb3V0IGZyb20g
aXNDRE1JbnN0YW5jZUF2YWlsYWJsZQorICAgICAgICAoc2lua0V2ZW50SGFuZGxlcik6IFJlbW92
ZSBoYW5kbGVLZXlSZXNwb25zZSwgd2Ugbm93IHdhaXQgb24gYQorICAgICAgICBwcm94eSBDRE0g
YmVpbmcgYXZhaWxhYmxlLCB3aGljaCBpcyBpbnN0YWxsZWQgaW4gdGhlIGNvbnRleHQKKyAgICAg
ICAgaGFuZGxlci4KKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLiBSZWZhY3RvcmVkLiBUaGlzIHdhcyBkb2luZworICAgICAgICB0aHJlZSB0aGlu
Z3MgaW4gb25lIHBvb3JseSBuYW1lZCBmdW5jdGlvbi4KKyAgICAgICAgKHF1ZXJ5SGFuZGxlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmg6CisgICAgICAgICogdGVzdGlu
Zy9Nb2NrQ0RNRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0RNSW5zdGFuY2U6
OnByb3h5Q0RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0
b3J5Lmg6CisKIDIwMjAtMDItMDMgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29u
eS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXVtjdXJsXVtDbGFuZ10gZXJyb3I6IG1lbWJlciBh
Y2Nlc3MgaW50byBpbmNvbXBsZXRlIHR5cGUgJ1dlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVyTWVz
c2FnZVF1ZXVlJyBpbiB+Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZQppbmRleCA4NzRkNDlhZjFlNDE5YWNjODRhNDY2ZDI4Y2EwMjNjNmJjOWFmOWY5Li45
ZTY3YWI4ZjRlNmQ1NmE0NTBjMWYyMDhiMzI3NzgyYmM5NzA3MTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xNjQsOCArMTY0LDggQEAgaWYgKEVOQUJMRV9F
TkNSWVBURURfTUVESUEpCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CisgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcAogICAgICAgICBw
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKLQogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETUZhY3RvcnlHU3RyZWFtZXIuY3Bw
CiAgICAgKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1JbnN0YW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaAppbmRleCBhOGQ3Y2MxNTUyNTg0NjczOWVmZGVlNmEwMzU0ZDQ4ZWNh
YzEzMDM3Li44ZjlmM2ViODc0NWMzNTIwMjgzMTRjNjA2ZDI4OWQ0ZTNmNzFhMDQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNl
LmgKQEAgLTM5LDE3ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKLQogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uOwotY2xhc3MgUHJveHlDRE07Ci0K
LS8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0aGUgSmF2YVNjcmlwdCBmYWNhZGUuIFRo
aXMgY2FuIGJlIHVzZWQKLS8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChpLmUuIGRlY3J5cHRv
cnMpLgotY2xhc3MgUHJveHlDRE0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UHJveHlD
RE0+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5Qcm94eUNETSgpID0gZGVmYXVsdDsKLX07Ci0K
IHN0cnVjdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uOwogCiAvLyBKYXZhU2NyaXB0J3MgaGFu
ZGxlIHRvIGEgQ0RNSW5zdGFuY2UsIG11c3QgYmUgdXNlZCBmcm9tIHRoZQpAQCAtNzcsNyArNjcs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9y
eShjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNy
ZWF0ZVNlc3Npb24oKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RN
KCkgY29uc3QgPSAwOwogCiAgICAgZW51bSBjbGFzcyBIRENQU3RhdHVzIHsKICAgICAgICAgVW5r
bm93biwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2MxODIzOTgxYmUyMDEzNTE4ZTY5MzZkNjRlZWYyY2Yz
NTQwMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvQ0RNUHJveHkuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+
CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBTdHJp
bmcgdmVjdG9yVG9IZXhTdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2ZWMpCit7CisgICAg
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoYXV0byBieXRlIDogdmVjKQor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYWQoJzAnLCAyLCBoZXgoYnl0ZSkpKTsKKyAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSB7
fQorCitTdHJpbmcgS2V5OjppZEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVN0
cmluZygiWyIsIHZlY3RvclRvSGV4U3RyaW5nKG1faWQpLCAiXSIpOworfQorCitTdHJpbmcgS2V5
Ojp2YWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHZl
Y3RvclRvSGV4U3RyaW5nKG1fdmFsdWUpLCAiXSIpOworfQorCitib29sIEtleVN0b3JlOjpjb250
YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkp
IHsKKyAgICAgICAgcmV0dXJuICpzdG9yZWRLZXkgPT0ga2V5SUQ7CisgICAgfSkgIT0gV1RGOjpu
b3RGb3VuZDsKK30KKwordm9pZCBLZXlTdG9yZTo6bWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVy
KQoreworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIG1lcmdpbmcgJXUgbmV3IGtleXMg
aW50byBhIGtleSBzdG9yZSBvZiAldSBrZXlzIiwgb3RoZXIubnVtS2V5cygpLCBudW1LZXlzKCkp
OworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogb3RoZXIpIHsKKyAgICAgICAgLy8gTk9URTog
RG8gd2UgY2FyZSB0aGF0IHdlIHdpbGwgbm90IGFwcGVuZCBhIGtleSBpbiBvdGhlciBpZiBpdCBt
YXRjaGVzIGEga2V5IElECisgICAgICAgIC8vIGluIHRoZSBrZXlzdG9yZSBhbmQgaGFzIGRpZmZl
cmVudCBkYXRhLiBTaG91bGQgd2Ugb3ZlcndyaXRlPyBXaGljaCBpcyAibmV3ZXIiPworICAgICAg
ICAvLyBEb24ndCB0aGluayB3ZSBuZWVkIHRoaXMgZXh0cmEgY29tcGxleGl0eS4KKyAgICAgICAg
aWYgKG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5
KSB7IHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7IH0pID09IFdURjo6bm90Rm91bmQpCisgICAg
ICAgICAgICBtX2tleXMuYXBwZW5kKGtleSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRCB8
fCAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBr
ZXkgc3RvcmUgbm93IGhhcyAldSBrZXlzIiwgbnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGtleSA6IG1fa2V5cykKKyAgICAgICAgTE9HKEVNRSwgIlx0RU1FIC0gQ0RNUHJveHkgLSBL
ZXkgSUQ6ICVzIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2VuZGlmIC8v
ICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit9CisKK0NETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCgpIGNv
bnN0Cit7CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVz
VmVjdG9yID0gY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBmb3IgKGF1dG8mIGtl
eVN0YXR1cyA6IGtleVN0YXR1c1ZlY3RvcikKKyAgICAgICAga2V5U3RhdHVzLnNlY29uZCA9IENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpSZWxlYXNlZDsKKyAgICByZXR1cm4ga2V5U3Rh
dHVzVmVjdG9yOworfQorCitib29sIEtleVN0b3JlOjphZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5
Pj4mJiBuZXdLZXlzKQoreworICAgIGJvb2wgZGlkS2V5U3RvcmVDaGFuZ2UgPSBmYWxzZTsKKyAg
ICBmb3IgKGF1dG8mIGtleSA6IG5ld0tleXMpIHsKKyAgICAgICAgaWYgKGFkZChXVEZNb3ZlKGtl
eSkpKQorICAgICAgICAgICAgZGlkS2V5U3RvcmVDaGFuZ2UgPSB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZGlkS2V5U3RvcmVDaGFuZ2U7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZChSZWZQdHI8
S2V5PiYmIGtleSkKK3sKKyAgICBib29sIGRpZFN0b3JlQ2hhbmdlID0gZmFsc2U7CisgICAgc2l6
ZV90IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAo
Y29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICByZXR1cm4gKmtleSA9PSAq
c3RvcmVkS2V5OworICAgIH0pOworCisgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXgg
IT0gV1RGOjpub3RGb3VuZCkgeworICAgICAgICBhdXRvJiBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9
IG1fa2V5c1trZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoa2V5V2l0aE1hdGNoaW5nS2V5SUQtPnZhbHVlKCkgPT0ga2V5LT52YWx1ZSgpLCAiQ2FuIHRo
aXMgcmVhbGx5IGhhcHBlbj8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ2xlYXJLZXkgLSBOZXcga2V5IHdpdGggSUQgJXMgZ2V0dGluZyBhZGRlZCB0byBrZXkgc3Rv
cmUiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7ICAgICAgCisgICAgICAgIG1f
a2V5cy5hcHBlbmQoa2V5KTsKKyAgICAgICAgZGlkU3RvcmVDaGFuZ2UgPSB0cnVlOworICAgIH0K
KworICAgIGtleS0+YWRkU2Vzc2lvblJlZmVyZW5jZSgpOworICAgIHJldHVybiBkaWRTdG9yZUNo
YW5nZTsKK30KKwordm9pZCBLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmIG90aGVyKQoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogb3RoZXIpCisgICAgICAg
IHJlbW92ZShrZXkpOworfQorCitib29sIEtleVN0b3JlOjpyZW1vdmUoY29uc3QgUmVmUHRyPEtl
eT4mIGtleSkKK3sKKyAgICBib29sIHN0b3JlQ2hhbmdlZCA9IGZhbHNlOworCisgICAgc2l6ZV90
IGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXggPSBtX2tleXMuZmluZChrZXkpOworICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIHJlcXVlc3RlZCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMg
YW5kICV1IHNlc3Npb24gcmVmZXJlbmNlcyIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpLCBrZXktPm51bVNlc3Npb25SZWZlcmVuY2VzKCkpOworCisgICAgaWYgKGtleVdpdGhNYXRj
aGluZ0tleUlESW5kZXggIT0gV1RGOjpub3RGb3VuZCkgeworICAgICAgICBhdXRvJiBrZXlXaXRo
TWF0Y2hpbmdLZXlJRCA9IG1fa2V5c1trZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4XTsKKyAgICAg
ICAga2V5V2l0aE1hdGNoaW5nS2V5SUQtPnJlbW92ZVNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICAg
ICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+bnVtU2Vzc2lvblJlZmVyZW5jZXMoKSkgewor
ICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVtb3ZlIGtleSB3aXRoIElE
ICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgICAgICBtX2tleXMucmVtb3ZlKGtleVdpdGhNYXRjaGluZ0tleUlESW5kZXgpOwor
ICAgICAgICAgICAgc3RvcmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZQor
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBhdHRlbXB0IHRvIHJlbW92ZSBrZXkg
d2l0aCBJRCAlcyBpZ25vcmVkLCBkb2VzIG5vdCBleGlzdCIsIGtleS0+aWRBc1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKKworICAgIHJldHVybiBzdG9yZUNoYW5nZWQ7Cit9CisKK2NvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgS2V5U3RvcmU6OmtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMpIHsKKyAg
ICAgICAgaWYgKCprZXkgPT0ga2V5SUQpCisgICAgICAgICAgICByZXR1cm4ga2V5LT52YWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAia2V5IG11c3QgZXhp
c3QgdG8gY2FsbCB0aGlzIG1ldGhvZCIpOworICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKK0NETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIEtleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0
YXR1c1ZlY3RvcigpIGNvbnN0Cit7CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleXMp
IHsKKyAgICAgICAgLy8gRklYTUU6IFZlY3Rvcjx1aW50OF90PiByZXByZXNlbnRhdGlvbiBpcyBj
b3B5LWhlYXZ5LCBidXQgdGhlCisgICAgICAgIC8vIGRhdGEgYXJlIHNtYWxsIGluIG51bWJlciwg
c28gcHJvYmFibHkgaXQncyBmaW5lLgorICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2Vk
QXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM+IHsga2V5LT5pZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkgfSk7Cisg
ICAgfQorICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnVw
ZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3JlJiBuZXdLZXlTdG9yZSkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKG5ld0tl
eVN0b3JlKTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSB1cGRhdGluZyBrZXkgc3Rv
cmUgZnJvbSBhIHNlc3Npb24gdXBkYXRlIik7CisgICAgbV9rZXlzQ29uZGl0aW9uLm5vdGlmeUFs
bCgpOworfQorCit2b2lkIENETVByb3h5OjpzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5KiBp
bnN0YW5jZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7
CisgICAgbV9pbnN0YW5jZSA9IGluc3RhbmNlOworfQorCitWZWN0b3I8dWludDhfdD4gQ0RNUHJv
eHk6OmtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgQVNTRVJUKG1fa2V5U3Rv
cmUuY29udGFpbnNLZXlJRChrZXlJRCkpOworICAgIHJldHVybiBtX2tleVN0b3JlLmtleVZhbHVl
KGtleUlEKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25z
dAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdGFydGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7Cisg
ICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0YXJ0ZWRXYWl0aW5nRm9y
S2V5KCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5IC0gc3RvcHBlZCB3YWl0aW5nIGZvciBhIGtleSIpOworICAg
IEFTU0VSVChtX2luc3RhbmNlKTsKKyAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0Zvcktl
eSgpOworfQorCitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9y
S2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgc3RhcnRlZFdh
aXRpbmdGb3JLZXkoKTsKKyAgICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5nIHdlIGhhdmUgc3Rv
cHBlZCB3YWl0aW5nIGZvciBhIGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMgb25seSBnZXQKKyAg
ICAvLyBvbmUgc2hvdCBhdCBmZXRjaGluZyBhIGtleS4gSWYgTWF4S2V5V2FpdFRpbWVTZWNvbmRz
IGV4cGlyZXMsIHRoYXQncyBpdCwgbm8gbW9yZSBjbGVhciBieXRlcworICAgIC8vIGZvciB5b3Uu
CisgICAgYXV0byBzdG9wV2FpdGluZ0ZvcktleU9uUmV0dXJuID0gbWFrZVNjb3BlRXhpdChbdGhp
c10geworICAgICAgICBzdG9wcGVkV2FpdGluZ0ZvcktleSgpOworICAgIH0pOworICAgIExPRyhF
TUUsICJFTUUgLSBDRE1Qcm94eSAtIHRyeWluZyB0byB3YWl0IGZvciBrZXkgSUQgJXMiLCB2ZWN0
b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGJvb2wgd2FzS2V5UmVj
ZWl2ZWQgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9r
ZXlzTXV0ZXgpOworICAgICAgICB3YXNLZXlSZWNlaXZlZCA9IG1fa2V5c0NvbmRpdGlvbi53YWl0
Rm9yKG1fa2V5c011dGV4LCBDRE1Qcm94eTo6TWF4S2V5V2FpdFRpbWVTZWNvbmRzLCBbJiwgdGhp
cywga2V5SURdKCkgeworICAgICAgICAgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtl
eUlEKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7Cisg
ICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9y
IGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7CisgICAgfQorICAgIAorICAgIExPRyhFTUUs
ICJFTUUgLSBDRE1Qcm94eSAtIGtleSBJRCAlcyBub3QgYXZhaWxhYmxlIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitib29sIENETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIHJldHVybiBtX2tleVN0b3JlLmNvbnRhaW5zS2V5
SUQoa2V5SUQpOworfQorCitib29sIENETVByb3h5OjprZXlBdmFpbGFibGUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
a2V5c011dGV4KTsKKyAgICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworfQor
CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXkoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBpZiAoIWtleUF2YWlsYWJs
ZShrZXlJRCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IGtleSBjYWNoZSBk
b2VzIG5vdCBjb250YWluIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiB0cnlXYWl0Rm9yS2V5KGtleUlEKTsKKyAgICB9
CisKKyAgICByZXR1cm4ga2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETUluc3RhbmNlUHJv
eHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
ICYmIG1fcGxheWVyKTsKKyAgICBib29sIHdhc1dhaXRpbmdGb3JLZXkgPSBtX251bURlY3J5cHRv
cnNXYWl0aW5nRm9yS2V5ID4gMDsKKyAgICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5Kys7
CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgd2FzV2FpdGluZ0Zv
cktleV0geworICAgICAgICBpZiAocGxheWVyICYmIHdhc1dhaXRpbmdGb3JLZXkpCisgICAgICAg
ICAgICBwbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Q0RNSW5zdGFuY2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIgJiYgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zvcktl
eSA+IDApOworICAgIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXktLTsKKyAgICBib29sIGlz
Tm9ib2R5V2FpdGluZ0ZvcktleSA9ICFtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworCisg
ICAgY2FsbE9uTWFpblRocmVhZChbcGxheWVyID0gbV9wbGF5ZXIsIGlzTm9ib2R5V2FpdGluZ0Zv
cktleV0geworICAgICAgICBpZiAocGxheWVyICYmIGlzTm9ib2R5V2FpdGluZ0ZvcktleSkKKyAg
ICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwor
dm9pZCBDRE1JbnN0YW5jZVByb3h5OjptZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBrZXlT
dG9yZSkKK3sKKyAgICAvLyBGSVhNRTogTm90aWZ5IEpTIHdoZW4gYXBwcm9wcmlhdGUuCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKGtleVN0b3JlKTsK
KyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNSW5zdGFuY2VQcm94eSAtIG1lcmdpbmcga2V5cyBpbnRv
IHByb3h5IGluc3RhbmNlIGFuZCBub3RpZnlpbmcgQ0RNUHJveHkgb2YgY2hhbmdlcyIpOworICAg
IEFTU0VSVChtX2NkbVByb3h5KTsKKyAgICBtX2NkbVByb3h5LT51cGRhdGVLZXlTdG9yZShrZXlT
dG9yZSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29u
c3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgbV9rZXlTdG9yZS5yZW1vdmVBbGxLZXlzRnJvbShrZXlTdG9yZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mY2U3MmQ1ZDRhZWExM2I2MDE2MWI2ZmFhOTQyNDNiZTc5MDRjNjYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCisKKyNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNE
TUluc3RhbmNlU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5PiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM7CisKKyAg
ICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50
OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3Zl
KGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1f
aWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0OworICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBo
YXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KKyAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJu
IGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
S2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJldHVybiBrLm1faWQgPT0g
a2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJRDsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCByZW1vdmVTZXNzaW9uUmVm
ZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2Vz
LS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygpIGNvbnN0IHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXM7IH0KKyAgICBm
cmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9y
PHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgICAgICA6
IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUo
a2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsKKyAgICB1bnNpZ25lZCBt
X251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3MgS2V5U3RvcmUgeworcHVi
bGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVy
KTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Cisg
ICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQorICAgIGJvb2wgYWRk
S2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYp
OworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgdW5zaWduZWQgbnVt
S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Owor
ICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIEtleVN0
YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0OworCisgICAgYXV0
byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBlbmQoKSB7IHJldHVybiBt
X2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5lbmQo
KTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJiZWdpbigpOyB9CisgICAg
YXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRv
IHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8
S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKKworLy8gSGFuZGxl
IHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUg
dXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCitjbGFz
cyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDRE1Qcm94eT4geworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMg
PSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKTsKKyAgICB2b2lkIHNl
dEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVkOgorICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAg
ICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsK
KyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5
SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gdHJ5V2FpdEZvcktleShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBj
b25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAgdm9pZCBz
dG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgTG9j
ayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSogbV9pbnN0YW5jZTsKKwor
ICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2tl
eXNDb25kaXRpb247CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKK307CisKKy8vIEJhc2UgY2xh
c3MgZm9yIGNvbW1vbiBzZXNzaW9uIG1hbmFnZW1lbnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRp
bmcgbWVzc2FnZXMKKy8vIGZyb20gInJlYWwgQ0RNIiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgorY2xh
c3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBDRE1JbnN0YW5jZSB7CitwdWJsaWM6CisgICAg
Q0RNSW5zdGFuY2VQcm94eShDRE1Qcm94eSogcHJveHkpIDogbV9jZG1Qcm94eShhZG9wdFJlZihw
cm94eSkpIHsgcHJveHktPnNldEluc3RhbmNlKHRoaXMpOyB9CisgICAgdmlydHVhbCB+Q0RNSW5z
dGFuY2VQcm94eSgpID0gZGVmYXVsdDsKKworICAgIC8vIE1haW4tdGhyZWFkIG9ubHkuCisgICAg
dm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVBbGxL
ZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOworCisgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1l
dGhvZHMgLSBtYWluIHRocmVhZCBvbmx5LgorICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBj
b25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAg
dmlydHVhbCBib29sIGlzV2FpdGluZ0ZvcktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CisgICAgdm9p
ZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyBtX3BsYXllciA9IHBsYXllcjsgfQorCisgICAgLy8gUHJveHkgbWV0aG9kcyAtIG11c3QgYmUg
dGhyZWFkLXNhZmUuCisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQg
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgdHJhY2tTZXNz
aW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IHNlc3Npb24pIHsgbV9zZXNzaW9u
cy5hcHBlbmQoc2Vzc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q0RNUHJveHk+IG1f
Y2RtUHJveHk7CisgICAgLy8gRklYTUU6IFdlYWtQdHIgZm9yIHRoZSBtX3BsYXllcj8gVGhpcyBp
cyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91bmQgYW5kIG1haW4gdGhyZWFkcywgaXQncworICAgIC8v
IGNvbmNlcm5pbmcgd2UgY291bGQgYmUgYWNjZXNzaW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBz
aHV0ZG93biBvbiB0aGUgbWFpbi10aHJlYWQsIGVoPworICAgIC8vIEFzIGEgQ0RNUHJveHksIHdl
ICoqKnNob3VsZCoqKiBiZSB0dXJuZWQgb2ZmIGJlZm9yZSB0aGlzIHBvaW50ZXIgZXZlciBnb2Vz
IGJhZC4KKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXIgeyBudWxscHRyIH07IC8vIEZJWE1FOiBN
YWluVGhyZWFkPFQ+PworCisgICAgc3RkOjphdG9taWM8aW50PiBtX251bURlY3J5cHRvcnNXYWl0
aW5nRm9yS2V5OworICAgIFZlY3RvcjxSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPj4gbV9zZXNz
aW9uczsKKworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVkYjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMx
MjM1ODAuLjM5ZTA3MWMzMDJlNjg4ZjkzYmIyYjBjNWUxY2Y2ZDJmNjAxNjY5ZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNs
ZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9j
bGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlICJDRE1T
ZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVk
ZSA8d3RmL0J5dGVPcmRlci5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAg
LTQzLDMzICs0Niw0MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENsZWFyS2V5IENF
TkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMv
I2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4X3QgY2xlYXJLZXlDZW5jU3lzdGVtSWRbXSA9IHsg
MHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhjMCwgMHhiMiwgMHg0ZCwgMHgwMiwgMHhhYywgMHhl
MywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwgMHhmYiwgMHg0YiB9OwotY29uc3QgdW5zaWduZWQg
Y2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0gc2l6ZW9mKGNsZWFyS2V5Q2VuY1N5c3RlbUlkKTsK
LWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9IDE2OworbmFtZXNwYWNlIHsKIAotY2xhc3MgQ2xl
YXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcgS2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFy
S2V5U3RhdGUmIHNpbmdsZXRvbigpOworc3RhdGljIGJvb2wgcmVhZFVJbnQzMihjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDMyX3Qm
IHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7
CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBLZXlTdG9yZSYga2V5cygpIHsgcmV0dXJuIG1fa2V5czsgfQor
ICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4o
YnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CiAKLXByaXZh
dGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPENsZWFyS2V5U3RhdGU+OwotICAg
IENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlTdG9yZSBtX2tleXM7Ci19OworICAgIHJldHVybiB0
cnVlOworfQogCi1DbGVhcktleVN0YXRlJiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQorc3Rh
dGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQogewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBzX3N0YXRlOwotICAgIHJldHVybiBzX3N0YXRlOwor
ICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1
ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZf
dCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUNsZWFyS2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRl
ZmF1bHQ7CisvLyBDbGVhcktleSBDRU5DIFN5c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lzdGVtCitjb25zdCB1aW50OF90IGNsZWFy
S2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIs
IDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4
NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihj
bGVhcktleUNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5
dGVzID0gMTYsCisgICAgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzID0gMTYsCisgICAgQ2xlYXJL
ZXlJVlNpemVJbkJ5dGVzID0gMTYsCit9OworCit9CiAKIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CkBAIC04
OCw3ICsxMDEsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiBy
b290KQogewogICAgIC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qg
b2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBz
cGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4KQEAgLTEwMSw3ICsxMTQsNyBAQCBzdGF0aWMgT3B0
aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1h
dChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVh
cktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleT4+IGRlY29kZWRL
ZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJlZ2lu
KCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBhdXRv
JiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0OwpA
QCAtMTE2LDExICsxMjksMTEgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjoKICAgICAgICAgICAg
IGlmICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5n
ZXRTdHJpbmcoImsiLCBrZXlWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7CisgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7CiAgICAgICAg
ICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0pKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5k
KHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShr
ZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXk6OmNy
ZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlE
RGF0YSksIFdURk1vdmUoa2V5VmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0yMTIsNyArMjI1LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBz
aXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5
SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVzKSkgPj0gaW5p
dERhdGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5SWRzTWFwLnNl
Y29uZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlkIGluIGluaXRE
YXRhLgpAQCAtMjUxLDkgKzI2NCw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBleHRyYWN0
S2V5aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRECiAgICAgLy8g
ImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50IG9mIHRoZSBh
cnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1ZW5jZSBjb250
YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVu
Y29kZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBrZXlJZCA9IFdU
Rjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXlLZXlJRFNpemVJbkJ5dGVz
KTsKICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRl
eCArPSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5S2V5SURTaXplSW5CeXRl
czsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShrZXlJZHNB
cnJheSkpOwpAQCAtNDU2LDQxICs0NjksMTMxIEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0
ZUNsZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAg
ICByZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1
cmluZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRl
YWwuIFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0v
LyBhbGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5n
Ci0vLyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25z
aWJpbGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJh
Y2tncm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGll
cyAoaS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWlu
LXRocmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdl
IGNhbiBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAot
Ly8gU2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQg
YWNyb3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRl
ZEtleShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKKworQ0RNUHJveHlDbGVh
cktleTo6fkNETVByb3h5Q2xlYXJLZXkoKQogewotICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0
cmluZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtleS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmlu
ZyhrZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtleS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsK
KyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOwogfQogCi1jb25zdCBWZWN0b3I8
UHJveHlDRE1DbGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBj
b25zdAorYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBj
ZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQogewotICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBh
bGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZl
Y3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAw
OwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNp
emUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KTsKKyAgICB1aW50OF90IGN0cltBRVMxMjhDVFJCbG9ja1NpemVJbkJ5dGVzXTsKKyAgICBpZiAo
aW5wdXQuaXZTaXplSW5CeXRlcyA9PSA4KSB7CisgICAgICAgIC8vIElTTy9JRUMgMjMwMDEtNzoy
MDE2IFNlY3Rpb24gOS4zCiAKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3Rh
dGU6OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2VkQXBwZW5kKGlzb2xh
dGVkS2V5KGtleSkpOworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQs
IHRoZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRl
IElWIChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAg
ICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5p
diwgOCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktl
eUlWU2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdj
cnlfY2lwaGVyX3NldGN0cihtX2djcnlIYW5kbGUsIGN0ciwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVz
KSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdj
cnlfY2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gYWxsS2V5czsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktl
eShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBVbm5lY2Vz
c2FyeSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZworICAgIC8v
IGEgbm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBidWZmZXJz
IGFyZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwgSSBndWVz
cy4KKyAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CisgICAga2V5SURWZWMuYXBwZW5kKGlu
LmtleUlELCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKKworICAgIGF1dG8ga2V5RGF0YSA9IGdldE9y
V2FpdEZvcktleShrZXlJRFZlYyk7CisgICAgaWYgKCFrZXlEYXRhKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5
KG1fZ2NyeUhhbmRsZSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7CisgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJf
c2V0a2V5KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6
OmNlbmNEZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIGlm
ICghaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBmdWxsLXNhbXBsZSBkZWNy
eXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0
ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2Rl
Y3J5cHQobV9nY3J5SGFuZGxlLCBpbi5lbmNyeXB0ZWRCdWZmZXIsIGluLmVuY3J5cHRlZEJ1ZmZl
clNpemVJbkJ5dGVzLCAwLCAwKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlD
bGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihj
aXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRTdWJzYW1wbGVk
KGNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdW5zaWduZWQgZW5jcnlwdGVkQnVm
ZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgc2l6ZV90IHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQg
PSAwOworICAgIHVuc2lnbmVkIHN1YnNhbXBsZUluZGV4ID0gMDsKKyAgICB3aGlsZSAoZW5jcnlw
dGVkQnVmZmVyQnl0ZU9mZnNldCA8IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKSB7
CisgICAgICAgIHVpbnQxNl90IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAgICB1
aW50MzJfdCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IDA7CisKKyAgICAgICAgaWYgKHN1
YnNhbXBsZUluZGV4IDwgaW5wdXQubnVtU3Vic2FtcGxlcykgeworICAgICAgICAgICAgaWYgKCFy
ZWFkVUludDE2KGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJT
aXplSW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtQ2xlYXJC
eXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktl
eSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBjbGVhciBieXRlcyBpbiBzdWJzYW1wbGUgYXQg
aW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZWFkVUludDMyKGlucHV0LnN1YnNh
bXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcywgc3ViU2FtcGxl
QnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpKSB7CisgICAgICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVh
ZCBudW1iZXIgb2YgZW5jcnlwdGVkIGJ5dGVzIGluIHN1YnNhbXBsZSBhdCBpbmRleCAldSIsIHN1
YnNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzdWJzYW1wbGVJbmRleCsrOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7CisgICAgICAgICAgICBzdWJzYW1w
bGVOdW1FbmNyeXB0ZWRCeXRlcyA9IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzIC0g
ZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBUaGVzZSBhcmUgaGlnaC1mcmVxdWVuY3kgbWVzc2FnZXMsIG5vdCBzdXJlIGlmIHRoZXJlJ3Mg
YSBiZXR0ZXIgbG9nZ2luZyBsaWIgaW4gV2ViQ29yZS4KKyAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IHN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGNsZWFyICglbHUgYnl0ZXMgbGVmdCB0byBk
ZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzLCBpbnB1dC5l
bmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOwor
CisgICAgICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0gc3Vic2FtcGxlTnVtQ2xlYXJC
eXRlczsKKworICAgICAgICBpZiAoc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpIHsKKyAgICAg
ICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNy
eXB0ZWQgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vic2FtcGxlSW5kZXgsIHN1YnNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAt
IGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAgICAgICBpZiAoZ2NyeV9lcnJv
cl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChtX2djcnlIYW5kbGUsIGlucHV0
LmVuY3J5cHRlZEJ1ZmZlciArIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51
bUVuY3J5cHRlZEJ5dGVzLCAwLCAwKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfZGVjcnlwdCk6ICVzIiwgZ3Bn
X3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9
IHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHQoQ0RNUHJv
eHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkKK3sKKyAgICBpZiAoIWNlbmNT
ZXRDb3VudGVyVmVjdG9yKGlucHV0KSB8fCAhY2VuY1NldERlY3J5cHRpb25LZXkoaW5wdXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5wdXQuaXNTdWJzYW1wbGVkKCkg
PyBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoaW5wdXQpIDogY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGlu
cHV0KTsKK30KKwordm9pZCBDRE1Qcm94eUNsZWFyS2V5Ojppbml0aWFsaXplR2NyeXB0KCkKK3sK
KyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmbV9nY3J5SGFu
ZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhF
Ul9TRUNVUkUpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0g
RVJST1IoZ2NyeV9jaXBoZXJfb3Blbik6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJTaG91bGQgbm90IGdldCB0aGlzIGZhciB3aXRo
IGEgZnVuY3Rpb25hbCBHQ3J5cHQhIik7CisgICAgfQogfQogCiBDRE1JbnN0YW5jZUNsZWFyS2V5
OjpDRE1JbnN0YW5jZUNsZWFyS2V5KCkKLSAgICA6IG1fcHJveHlDRE0oYWRvcHRSZWYoKm5ldyBQ
cm94eUNETUNsZWFyS2V5KCkpKQorICAgIDogQ0RNSW5zdGFuY2VQcm94eShuZXcgQ0RNUHJveHlD
bGVhcktleSgqdGhpcykpCiB7CiB9CiAKQEAgLTUzNSwzNiArNjM4LDkgQEAgY29uc3QgU3RyaW5n
JiBDRE1JbnN0YW5jZUNsZWFyS2V5OjprZXlTeXN0ZW0oKSBjb25zdAogCiBSZWZQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KCkpOwotfQot
Ci1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlJREFzU3RyaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleUlERGF0YS0+dG9IZXhTdHJpbmcoKSwg
Il0iKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5VmFsdWVBc1N0
cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBrZXlWYWx1ZURhdGEt
PnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsy
KQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEp
OwotCi0gICAgcmV0dXJuICprMS5rZXlJRERhdGEgPT0gKmsyLmtleUlERGF0YTsKLX0KLQotYm9v
bCBvcGVyYXRvcjwoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsK
LSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIGlmIChrMS5rZXlJRERhdGEtPnNpemUo
KSAhPSBrMi5rZXlJRERhdGEtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGsxLmtleUlERGF0YS0+
c2l6ZSgpIDwgazIua2V5SUREYXRhLT5zaXplKCk7Ci0KLSAgICByZXR1cm4gbWVtY21wKGsxLmtl
eUlERGF0YS0+ZGF0YSgpLCBrMi5rZXlJRERhdGEtPmRhdGEoKSwgazEua2V5SUREYXRhLT5zaXpl
KCkpOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IG5ld1Nlc3Npb24gPSBhZG9wdFJl
ZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKnRoaXMpKTsKKyAgICB0cmFja1Nlc3Np
b24obmV3U2Vzc2lvbik7CisgICAgcmV0dXJuIG5ld1Nlc3Npb247CiB9CiAKIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBB
dG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExp
Y2Vuc2VDYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNTcyLDYgKzY0OCw4IEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBB
dG9tU3RyaW5nJiBpCiAgICAgc3RhdGljIHVpbnQzMl90IHNfc2Vzc2lvbklkVmFsdWUgPSAwOwog
ICAgICsrc19zZXNzaW9uSWRWYWx1ZTsKIAorICAgIG1fc2Vzc2lvbklEID0gU3RyaW5nOjpudW1i
ZXIoc19zZXNzaW9uSWRWYWx1ZSk7CisKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaW5pdERhdGFUeXBlLCAiY2VuYyIpKQogICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RL
ZXlpZHNGcm9tQ2VuY0luaXREYXRhKGluaXREYXRhLmdldCgpKTsKIApAQCAtNTc5LDE4ICs2NTcs
MTYgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGlj
ZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICAgICAgaW5pdERhdGEgPSBleHRyYWN0
S2V5SWRGcm9tV2ViTUluaXREYXRhKGluaXREYXRhLmdldCgpKTsKIAogICAgIGNhbGxPbk1haW5U
aHJlYWQoCi0gICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKSwgc2Vzc2lv
bklkVmFsdWUgPSBzX3Nlc3Npb25JZFZhbHVlXSgpIG11dGFibGUgeworICAgICAgICBbd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGluaXREYXRhID0gV1RGTW92ZShpbml0RGF0YSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JZFZhbHVl
KSwgZmFsc2UsIFN1Y2NlZWRlZCk7CisgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXRE
YXRhKSwgbV9zZXNzaW9uSUQsIGZhbHNlLCBTdWNjZWVkZWQpOwogICAgICAgICB9KTsKIH0KIAog
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJp
bmcmIHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2Us
IExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8vIFVzZSBhIGhlbHBl
ciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRjaCwgYXZvaWRpbmcK
LSAgICAvLyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KICAgICBhdXRvIGRp
c3BhdGNoQ2FsbGJhY2sgPQogICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShib29sIHNlc3Npb25X
YXNDbG9zZWQsIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBjaGFuZ2VkS2V5cywgU3VjY2Vz
c1ZhbHVlIHN1Y2NlZWRlZCkgewogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgKQEAgLTYw
NCw1MiArNjgwLDIzIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxp
Y2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAKICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByb290ID0gcGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsKICAgICBpZiAoIXJv
b3QpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRh
dGUgcGF5bG9hZCB3YXMgbm90IHZhbGlkIEpTT04iLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1Zh
bHVlOjpGYWlsZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyIsIHNlc3Npb25J
ZC51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGlu
ZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIHdoaWNoIGN1cnJlbnRseSBjb250YWlucyAldSBrZXlz
Iiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCksIG1fa2V5U3RvcmUubnVtS2V5cygpKTsKIAogICAg
IGlmIChhdXRvIGRlY29kZWRLZXlzID0gcGFyc2VMaWNlbnNlRm9ybWF0KCpyb290KSkgewotICAg
ICAgICAvLyBSZXRyaWV2ZSB0aGUgdGFyZ2V0IFZlY3RvciBvZiBLZXkgb2JqZWN0cyBmb3IgdGhp
cyBzZXNzaW9uLgotICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzdGF0ZSBtYW5hZ2Vt
ZW50IGNvZGUuCi0gICAgICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+JiBrZXlW
ZWN0b3IgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkuZW5zdXJlKHNlc3Npb25J
ZCwgW10geyByZXR1cm4gVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4geyB9OyB9KS5p
dGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgYm9vbCBrZXlzQ2hhbmdlZCA9IGZhbHNlOwotICAg
ICAgICBmb3IgKGF1dG8mIGRlY29kZWRLZXkgOiAqZGVjb2RlZEtleXMpIHsKLSAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIERlY29kZWQgYSBrZXkgd2l0aCBJRCAlcyBhbmQg
a2V5IGRhdGEgJXMiLCBkZWNvZGVkS2V5LmtleUlEQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBk
ZWNvZGVkS2V5LmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IGF1dG8ga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBzdGQ6OmZpbmRfaWYoa2V5VmVjdG9yLmJlZ2lu
KCksIGtleVZlY3Rvci5lbmQoKSwKLSAgICAgICAgICAgICAgICBbJmRlY29kZWRLZXldIChjb25z
dCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGNvbnRhaW5lZEtleSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGFpbmVkS2V5ID09IGRlY29kZWRLZXk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SUQgIT0ga2V5VmVjdG9y
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRXhp
c3Rpbmcga2V5IGZvdW5kIHdpdGggZGF0YSAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5rZXlW
YWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWtl
eVdpdGhNYXRjaGluZ0tleUlELT5oYXNTYW1lS2V5VmFsdWUoZGVjb2RlZEtleSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVXBkYXRpbmcga2V5IHNp
bmNlIHRoZSBkYXRhIGFyZSBkaWZmZXJlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgKmtleVdp
dGhNYXRjaGluZ0tleUlEID0gV1RGTW92ZShkZWNvZGVkS2V5KTsKLSAgICAgICAgICAgICAgICAg
ICAga2V5c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVGhpcyBp
cyBhIG5ldyBrZXkiKTsKLSAgICAgICAgICAgICAgICBrZXlWZWN0b3IuYXBwZW5kKFdURk1vdmUo
ZGVjb2RlZEtleSkpOwotICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBib29sIGtleXNDaGFuZ2VkID0gbV9rZXlTdG9y
ZS5hZGRLZXlzKFdURk1vdmUoKmRlY29kZWRLZXlzKSk7CiAKLSAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gVXBkYXRlIGhhcyBwcm92aWRlZCAlenUga2V5cyIsIGtleVZlY3Rvci5z
aXplKCkpOworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIGhh
cyAldSBrZXlzIGFmdGVyIHVwZGF0ZSgpIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCksIG1fa2V5
U3RvcmUubnVtS2V5cygpKTsKIAogICAgICAgICBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+IGNo
YW5nZWRLZXlzOwogICAgICAgICBpZiAoa2V5c0NoYW5nZWQpIHsKLSAgICAgICAgICAgIC8vIFNv
cnQgYnkga2V5IElEcy4KLSAgICAgICAgICAgIHN0ZDo6c29ydChrZXlWZWN0b3IuYmVnaW4oKSwg
a2V5VmVjdG9yLmVuZCgpKTsKLQotICAgICAgICAgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1
c1ZlY3RvcjsKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlW
ZWN0b3IpCi0gICAgICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChz
dGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwg
a2V5LnN0YXR1cyB9KTsKLQotICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBXVEZNb3ZlKGtleVN0
YXR1c1ZlY3Rvcik7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNz
aW9uICVzIGhhcyBjaGFuZ2VkIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBtX3BhcmVudEluc3RhbmNlLm1lcmdlS2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAg
ICAgICAgICBjaGFuZ2VkS2V5cyA9IG1fa2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IoKTsKICAgICAgICAgfQogCiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURk1v
dmUoY2hhbmdlZEtleXMpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CkBAIC02NTcsNDcgKzcw
NCwyNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNv
bnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogICAgIH0KIAogICAgIGlmIChwYXJzZUxp
Y2Vuc2VSZWxlYXNlQWNrbm93bGVkZ2VtZW50Rm9ybWF0KCpyb290KSkgewotICAgICAgICAvLyBG
SVhNRTogUmV0cmlldmUgdGhlIGtleSBJRCBpbmZvcm1hdGlvbiBhbmQgdXNlIGl0IHRvIHZhbGlk
YXRlIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb25JZC4KLSAgICAgICAgQ2xlYXJLZXlTdGF0ZTo6
c2luZ2xldG9uKCkua2V5cygpLnJlbW92ZShzZXNzaW9uSWQpOworICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHJlbGVhc2UgYWNrbm93bGVkZ2VkLCBjbGVhcmlu
ZyBhbGwga25vd24ga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9w
YXJlbnRJbnN0YW5jZS5yZW1vdmVBbGxLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAgbV9r
ZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2sodHJ1ZSwg
V1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAvLyBCYWlsIGluIGNhc2Ugbm8gZm9ybWF0IHdhcyByZWNvZ25pemVkLgor
ICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQg
d2FzIGFuIHVucmVjb2duaXplZCBmb3JtYXQiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CiAg
ICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZh
aWxlZCk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmxvYWRTZXNzaW9u
KExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgY29uc3QgU3RyaW5nJiwgTG9h
ZFNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8vIFVzZSBhIGhlbHBlciBmdW5j
dG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRjaCwgYXZvaWRpbmcgZHVwbGlj
YXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMuCi0gICAgYXV0byBkaXNwYXRjaENhbGxiYWNr
ID0KLSAgICAgICAgW3RoaXMsICZjYWxsYmFja10oT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiYm
IGV4aXN0aW5nS2V5cywgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3MsIFNlc3Npb25Mb2FkRmFpbHVyZSBs
b2FkRmFpbHVyZSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgICAg
ICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4aXN0aW5nS2V5cyA9IFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgc3VjY2Vzcywg
bG9hZEZhaWx1cmVdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShleGlzdGluZ0tleXMpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCwgc3VjY2VzcywgbG9hZEZhaWx1cmUpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9OwotCi0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXBy
ZXNlbnRpbmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlzIHNlc3Npb24uCi0gICAgS2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0gICAgICAgIGF1dG8mIGtleXMgPSBD
bGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlz
LmZpbmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAg
ICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0LCBGYWlsZWQsIFNlc3Npb25Mb2Fk
RmFpbHVyZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJUKHNlc3Npb25JZCA9PSBtX3Nlc3Np
b25JRCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUu
Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
JmtleVN0YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8mIGtleVZlY3RvciA9
IGl0LT52YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9y
KQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8
UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwga2V5LnN0YXR1
cyB9KTsKLSAgICB9CiAKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVj
dG9yKSwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgfSk7CiB9CiAKIHZv
aWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcm
LCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNzEzLDcgKzc0MCw4IEBAIHZv
aWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcm
LCBDbG9zZVNlc3Npb25DYWxsYmFjCiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwg
UmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8vIFVzZSBhIGhl
bHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRjaCwgYXZvaWRp
bmcgZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMuCisgICAgQVNTRVJUKHNlc3Np
b25JZCA9PSBtX3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQogICAg
ICAgICBbdGhpcywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0b3ImJiBrZXlTdGF0dXNWZWN0b3Is
IE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3NhZ2UsIFN1Y2Nlc3NWYWx1ZSBzdWNj
ZXNzKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNzI3LDM1ICs3NTUsMTcg
QEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29u
c3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3Rh
dHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVz
c2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVz
VmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNlZCgpOwogICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlv
biBmb3IgdGhlIGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcgaWYgbm9uZSBpcyBmb3VuZC4KLSAg
ICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAg
ICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0g
a2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhLZXlTdGF0dXNWZWN0
b3IgeyB9LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHJpZXZlIHRoZSBLZXkgdmVjdG9y
LCBjb250YWluaW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uLCBhbmQKLSAgICAgICAg
Ly8gdGhlbiByZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAg
ICAgYXV0byBrZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1ZSk7Ci0gICAgICAgIGtleXMucmVt
b3ZlKGl0KTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmpl
Y3QsIHBhaXJpbmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFzZWQnIHN0YXR1cy4KLSAgICAgICAg
a2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7
Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3Rh
dHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtl
eVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKLQogICAg
ICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNlbnNlIHJlbGVh
c2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8gb2YgYmFzZTY0
VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rvcikgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRhLT5zaXplKCkgPD0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5SUREYXRhLT5kYXRhKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXplKCkpKSk7CisgICAgICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5j
b2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkp
OwogICAgICAgICB9CkBAIC03NjYsNiArNzc2LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UK
ICAgICAgICAgbWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRh
dGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0KIAorICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNW
ZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2Vl
ZGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5kZXggODViMzE5YjFhMzhjMTIx
Njk5MTk3NWI4MDE5YWQyYjE2YjM2YzE0Ny4uMTNhZThmZGQzNDEwODczZTY4ZWU1MDJlOTdlMDk1
NWY4ZGFjNDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC0zMSwxMCArMzEsMTIg
QEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5jbHVkZSAiQ0RNRmFjdG9yeS5o
IgotI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9u
LmgiCiAjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8bGlz
dD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03
NywyNyArNzksMTMgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPFN0cmluZz4gc2FuaXRpemVTZXNz
aW9uSWQoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CiB9OwogCi1jbGFzcyBQcm94eUNETUNs
ZWFyS2V5IGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgS2V5
IHsKLSAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzOwotICAgICAg
ICBTdHJpbmcga2V5SUREYXRhOwotICAgICAgICBTdHJpbmcga2V5VmFsdWVEYXRhOwotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIH5Qcm94eUNETUNsZWFyS2V5KCkgPSBkZWZhdWx0OwotICAgIGNvbnN0
IFZlY3RvcjxLZXk+IGlzb2xhdGVkS2V5cygpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBtdXRhYmxl
IExvY2sgbV9rZXlzTXV0ZXg7Ci19OwotCi1jbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFs
IDogcHVibGljIENETUluc3RhbmNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VD
bGVhcktleT4geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1J
bnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4g
ewogcHVibGljOgogICAgIENETUluc3RhbmNlQ2xlYXJLZXkoKTsKICAgICB2aXJ0dWFsIH5DRE1J
bnN0YW5jZUNsZWFyS2V5KCk7CiAKKyAgICAvLyBDRE1JbnN0YW5jZQogICAgIEltcGxlbWVudGF0
aW9uVHlwZSBpbXBsZW1lbnRhdGlvblR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbXBsZW1l
bnRhdGlvblR5cGU6OkNsZWFyS2V5OyB9Ci0KICAgICBTdWNjZXNzVmFsdWUgaW5pdGlhbGl6ZVdp
dGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKSBmaW5hbDsK
ICAgICBTdWNjZXNzVmFsdWUgc2V0RGlzdGluY3RpdmVJZGVudGlmaWVyc0FsbG93ZWQoYm9vbCkg
ZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFBlcnNpc3RlbnRTdGF0ZUFsbG93ZWQoYm9vbCkg
ZmluYWw7CkBAIC0xMDUsNDcgKzkzLDkwIEBAIHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0
U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcm
IGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+
IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLQotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGtleUlERGF0YTsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVE
YXRhOwotCi0gICAgICAgIFN0cmluZyBrZXlJREFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0
cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lS2V5
VmFsdWUoY29uc3QgS2V5ICZvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGtl
eVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICBBU1NFUlQob3RoZXIua2V5VmFsdWVEYXRhKTsKLSAg
ICAgICAgICAgIHJldHVybiAqa2V5VmFsdWVEYXRhID09ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRo
ZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLSAgICAgICAg
Ly8gS2V5J3MgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5
IGNvbnRlbnRzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwg
Y29uc3QgS2V5ICZrMik7Ci0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBL
ZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0K
LSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAm
azIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGsxLCBrMikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9
Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5
ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPihrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPj0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJh
dG9yPChrMSwgazIpOyB9Ci0gICAgfTsKLQotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3h5Q0RNOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPFByb3h5Q0RNPiBtX3Byb3h5Q0RNOwogfTsKIAogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCisgICAg
ICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsgfQogICAgIHZvaWQgcmVxdWVzdExpY2Vu
c2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQg
dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVm
ZmVyJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgbG9hZFNlc3Np
b24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9u
Q2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwg
Q2xvc2VTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0
YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYm
KSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc2Vzc2lvbklEOworICAgIENETUluc3RhbmNl
Q2xlYXJLZXkmIG1fcGFyZW50SW5zdGFuY2U7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKK307
CisKKy8vIFRoaXMgaXMgdGhlIHRocmVhZC1zYWZlIEFQSSB0aGF0IGRlY29kZSB0aHJlYWRzIHNo
b3VsZCB1c2UgdG8gbWFrZSB1c2Ugb2YgYQorLy8gcGxhdGZvcm0gQ0RNIG1vZHVsZS4KK2NsYXNz
IENETVByb3h5Q2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNUHJveHksIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxDRE1Qcm94eUNsZWFyS2V5LCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpF
YWdlcj4geworcHVibGljOgorICAgIENETVByb3h5Q2xlYXJLZXkoQ0RNSW5zdGFuY2VDbGVhcktl
eSYgaW5zdGFuY2UpCisgICAgICAgIDogbV9jZG1JbnN0YW5jZShpbnN0YW5jZSkKKyAgICB7Cisg
ICAgICAgIC8vIEZvciBub3cgd2UgZG9uJ3QgdXNlIHRoaXMgbGluayBiYWNrIHRvIHRoZSAibWFp
bi10aHJlYWQgaW5zdGFuY2UiLAorICAgICAgICAvLyBidXQgaGF2aW5nIHRoZSBjb25uZWN0aW9u
IHJlYWR5IG1hZGUgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIHVzZWZ1bAorICAgICAgICAvLyBp
biB0aGUgZnV0dXJlLgorICAgICAgICBVTlVTRURfUEFSQU0obV9jZG1JbnN0YW5jZSk7CisgICAg
ICAgIGluaXRpYWxpemVHY3J5cHQoKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0RNUHJveHlDbGVh
cktleSgpOworCisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBsYWNrIG9mIGNvbnNpc3RlbmN5IGJl
dHdlZW4gU2hhcmVkQnVmZmVycywKKyAgICAvLyBWZWN0b3I8Y2hhcj4ncyBhbmQge3VpbnQ4X3Qq
LHNpemVfdH0gaWRpb21zIGZvciByZXByZXNlbnRpbmcgYSBjaHVuayBvZgorICAgIC8vIGJ5dGVz
LiBGaXggdGhhdCBzb21laG93LiBOb3RlIFNoYXJlZEJ1ZmZlcnMgYXJlIGRhbmdlcm91cyBzaW5j
ZQorICAgIC8vIHRoZXkncmUgbm90IHRocmVhZC1zYWZlIGFuZCB0aGlzIGNsYXNzIG11c3QgbWFp
bnRhaW4KKyAgICAvLyB0aHJlYWQtc2FmZXR5LCBidXQgbWF5YmUgU2hhcmVkQnVmZmVyOjpEYXRh
U2VnbWVudCBjb3VsZCBiZQorICAgIC8vIG1hZGUgdG8gd29yaywgaG93ZXZlciB0aGF0IGhhcyB6
ZXJvIGhlbHBlcnMgZm9yIGRyb3BwaW5nIGludG8KKyAgICAvLyBpdGVyYXRvci1hd2FyZSAvIGNv
bXBhcmF0b3ItYXdhcmUgY29udGFpbmVycy4uLgorICAgIHN0cnVjdCBjZW5jRGVjcnlwdENvbnRl
eHQgeworICAgICAgICBjb25zdCB1aW50OF90KiBrZXlJRDsKKyAgICAgICAgc2l6ZV90IGtleUlE
U2l6ZUluQnl0ZXM7CisKKyAgICAgICAgY29uc3QgdWludDhfdCogaXY7CisgICAgICAgIHNpemVf
dCBpdlNpemVJbkJ5dGVzOworCisgICAgICAgIHVpbnQ4X3QqIGVuY3J5cHRlZEJ1ZmZlcjsKKyAg
ICAgICAgc2l6ZV90IGVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzOworCisgICAgICAgIC8vIEZJ
WE1FOiBHU3RyZWFtZXItc3BlY2lmaWMgZGF0YSBsYXlvdXQuCisgICAgICAgIC8vIElmIHdlIHdh
bnQgdG8gZ2V0IHJpZCBvZiB0aGUgc3BlY2lmaWMgZGF0YSBsYXlvdXQsIHdlIGNhbiBwYXJzZSBp
dCBiZWZvcmUKKyAgICAgICAgLy8gYXNzaWduaW5nIGl0IGhlcmUgYW5kIG1heWJlIGhhdmUgYSBW
ZWN0b3I8c2l6ZV90PiB0aGF0IGlzIGEgc2VyaWVzIG9mCisgICAgICAgIC8vIGNsZWFyL2RlY3J5
cHRlZC9jbGVhci9kZWNyeXB0ZWQuLi4gT3IgbWF5YmUgZXZlbiBhIFZlY3RvcjxzdGQ6OnBhaXI8
c2l6ZV90LCBzaXplX3Q+PgorICAgICAgICAvLyByZXByZXNlbnRpbmcgc2VxdWVuY2VzIG9mIGNs
ZWFyL2RlY3J5cHRlZCBzaXplcy4gVGhhdCBzdGQ6OnBhaXIgY291bGQgZXZlbgorICAgICAgICAv
LyBiZWNvbWUgYSBzdHJ1Y3QgQ2xlYXJEZWNyeXB0ZWRDaHVua1NpemVzSW5CeXRlcyBmb3IgZXhh
bXBsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNjczMAorICAgICAgICBjb25zdCB1aW50OF90KiBzdWJzYW1wbGVzQnVmZmVyOworICAgICAg
ICBzaXplX3Qgc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgbnVt
U3Vic2FtcGxlczsKKworICAgICAgICBib29sIGlzU3Vic2FtcGxlZCgpIGNvbnN0IHsgcmV0dXJu
IG51bVN1YnNhbXBsZXM7IH0KKyAgICB9OworCisgICAgLy8gRklYTUU6IFVuY29uZGl0aW9uYWwg
aW4tcGxhY2UgZGVjcnlwdGlvbi4gV2hhdCBhYm91dCBTVlA/CisgICAgLy8gRklYTUU6IEdTdHJl
YW1lci1zcGVjaWZpYywgaW4gdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBzdWJzYW1wbGUKKyAgICAv
LyBkYXRhIGlzIGRlZmluZWQgYnkgd2hhdGV2ZXIgcXRkZW11eCBkZWNpZGVzIHRvIGRvIHdpdGgg
aXQuCisgICAgYm9vbCBjZW5jRGVjcnlwdChjZW5jRGVjcnlwdENvbnRleHQmKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGluaXRpYWxpemVHY3J5cHQoKTsKKworICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIG9ubHkgc3VwcG9ydCBBRVMgaW4gQ1RSIG1vZGUsIGluIHRoZSBmdXR1cmUKKyAgICAvLyB3
ZSB3aWxsIHN1cmVseSBoYXZlIHRvIHN1cHBvcnQgbW9yZSBwcm90ZWN0aW9uIHNjaGVtZXMuIENh
biB3ZQorICAgIC8vIHJldXNlIHNvbWUgQ3J5cHRvIEFQSXMgaW4gV2ViQ29yZT8KKyAgICBib29s
IGNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJv
b2wgY2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAg
Ym9vbCBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9v
bCBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKKyAgICBDRE1J
bnN0YW5jZUNsZWFyS2V5JiBtX2NkbUluc3RhbmNlOworCisgICAgLy8gRklYTUU6IEl0IHdvdWxk
IGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBXZWJDb3JlIGZvciBjcnlwdG8uLi4KKyAgICBn
Y3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDRmYzY3
ODdkZDhkOTA3Y2FkNmEyNzdmMzliMWVkMzJlZDY3OWE2ZDguLjE4YWFhNjBhYTc5NzRhMjUwOTMw
ODZkYjFlZjMyZjk3YWNmM2M1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKIAotI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCiAjaW5jbHVkZSAiQ0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkNETVJlc3RyaWN0aW9ucy5oIgogI2luY2x1ZGUgIkNE
TVNlc3Npb25UeXBlLmgiCkBAIC0yMTMsNyArMjEyLDYgQEAgc3RhdGljIGNvbnN0IEhhc2hTZXQ8
QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCiAKIHZvaWQgQ0RNRmFjdG9yeTo6cGxh
dGZvcm1SZWdpc3RlckZhY3RvcmllcyhWZWN0b3I8Q0RNRmFjdG9yeSo+JiBmYWN0b3JpZXMpCiB7
Ci0gICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9yeUNsZWFyS2V5OjpzaW5nbGV0b24oKSk7
CiAgICAgZmFjdG9yaWVzLmFwcGVuZCgmQ0RNRmFjdG9yeUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5n
bGV0b24oKSk7CiAKICAgICBJbml0RGF0YVJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckluaXRE
YXRhVHlwZShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCksIHsgQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNpbmYsIENETVByaXZhdGVGYWlyUGxheVN0
cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NpbmYgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAppbmRl
eCA0NzcyZmNiMzIzNmQzOTAyOTUzNGM0NmZiNGYxMDI5OTc4M2U2Y2I2Li5iMTFmNzFhOWI1ZTM4
YmY2OThiMTM5NDlkZGRlODZmM2RkOTk0Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKQEAg
LTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTZXJ2ZXJDZXJ0aWZp
Y2F0ZShSZWY8U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0U3Rv
cmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBSZWZQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBw
cm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGNvbnN0IFN0
cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggMjc2ZDBhYmM5OTY2YjIzYTcyYzg0MzNl
NjM1MzNhZDU1MjI3M2FiMy4uM2ZhODg1MTY2NTkwNWZmOTRiMzA2YmJhNmE2MjZiYTg3ZTY1ZWRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
QEAgLTE3NzgsNiArMTc3OCw1MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgfSwgdGhpcywgbnVsbHB0cik7
CiB9CiAKK0luaXREYXRhIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFyc2VJbml0RGF0
YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCisgICAgSW5pdERhdGEgaW5pdERhdGE7CisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOworICAgICAgICBQcm90ZWN0
aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7CisgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50
cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVu
dHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNp
emUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQg
PSBudWxscHRyOworICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlT
eXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQo
e2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rp
b25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBpbml0RGF0YTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OndhaXRGb3JDRE1BdHRhY2htZW50KCkKK3sKKyAgICBpZiAoaXNNYWluVGhy
ZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSgpLCAiY2FuJ3QgYmxv
Y2sgdGhlIG1haW4gdGhyZWFkIHdhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5j
ZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1
dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsK
KyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3Io
bV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgeworICAgICAgICAgICAgcmV0dXJu
IGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZENE
TUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5
bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKEdTVF9NRVNTQUdFX1RZ
UEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gJiYgIW1faXNMZWdh
Y3lQbGF5YmluKSB7CkBAIC0xODEzLDQxICsxODU3LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBl
LCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlmIChp
c01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJt
LXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0
aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0t
aWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsK
LSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4
KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2
ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rp
b24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0
ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBl
dmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRh
dGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9u
KGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0gICAg
ICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7Ci0g
ICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NF
UU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAgICAg
ICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNl
Iik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1BdHRhY2ht
ZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29u
ZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYgIWlzUGxheWVyU2h1dHRpbmdE
b3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgeworICAgICAg
ICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rp
b25NZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgYm9vbCBpc0NETUF0dGFjaGVkID0gd2FpdEZv
ckNETUF0dGFjaG1lbnQoKTsKKyAgICAgICAgaWYgKGlzQ0RNQXR0YWNoZWQgJiYgIWlzUGxheWVy
U2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJl
YW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3Rl
bSgpKTsKICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3
aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwg
bV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lz
dGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogCkBAIC0xODU1LDEwICsx
ODY3LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250
ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0
KCkpOwogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRl
Y3J5cHRpb24tc3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVp
ZCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxF
TUVOVChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFs
aXplZCIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0
aW5nIGZvciBhIENETSBmYWlsZWQsIG5vIENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0y
MTg4LDE5ICsyMjAxLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNT
ZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNl
Y3Rpb24pOwogICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQot
ICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13
YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtleSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9T
UkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0
dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBiZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBl
bGluZSBidXQgY3VycmVudGx5IHRoZXkgYXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAg
Ly8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5
LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZp
eCB0aGlzIG5vdyB3aXRoIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBt
b3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0
IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4KLSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRo
TG9jYWxJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25h
bWUoc3RydWN0dXJlLCAiZHJtLWtleS1yZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIs
IEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdG
b3JLZXkoZmFsc2UpOwotICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0
cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6
ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOwpAQCAtMzcxNCwxNCArMzcxNCwxNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1J
bnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUlu
c3RhbmNlID0gJmluc3RhbmNlOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7Cisg
ICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFuY2VQcm94eSo+KCZp
bnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7CisgICAgbV9jZG1J
bnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKKworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0tcHJveHkiLCBGQUxT
RSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dy
aXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldChj
b250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5z
dGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0tcHJveHkiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0
YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRl
eHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkpOwogCi0gICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVw
IGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCkp
OworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0
YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdl
dCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7CiAgICAg
Ly8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwgZGVtdXhlcnMgY2Fu
IGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzc0Myw3ICszNzQ2LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQo
Q0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1wdHkgY29udGV4dCIs
IG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwogICAgIG1fY2RtSW5zdGFuY2UgPSBudWxscHRyOwogCi0g
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25l
dygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBj
b250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNF
KSk7CiAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5n
ZXQoKSksIGNvbnRleHQuZ2V0KCkpOwogfQogCkBAIC0zNzc2LDUxICszNzc5LDEyIEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZl
bnQqIGV2ZW50KQogICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKHtldmVudEtleVN5
c3RlbVVVSUQsIGluaXREYXRhfSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgaXNXYWl0aW5nRm9yS2V5KQotewotICAgIC8vIFdl
IGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3ZSBhcmUgcmVxdWVzdGVk
IHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3YWl0aW5nIGRlY3J5cHRv
cnMuCi0gICAgR1NUX1RSQUNFKCJpc1dhaXRpbmdGb3JLZXkgJXMsIG1faXNXYWl0aW5nRm9yS2V5
ICVzIiwgYm9vbEZvclByaW50aW5nKGlzV2FpdGluZ0ZvcktleSksIGJvb2xGb3JQcmludGluZyht
X2lzV2FpdGluZ0ZvcktleSkpOwotICAgIGlmIChpc1dhaXRpbmdGb3JLZXkgPT0gbV9pc1dhaXRp
bmdGb3JLZXkgfHwgKCFpc1dhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0ZvcktleSgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1dhaXRpbmdGb3JLZXkgPSBpc1dhaXRpbmdGb3JL
ZXk7Ci0gICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQ
cmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwotICAgIG1fcGxheWVyLT53YWl0aW5nRm9yS2V5
Q2hhbmdlZCgpOwotfQotCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdGlu
Z0ZvcktleSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQorICAgIGlmICghbV9waXBl
bGluZSB8fCAhbV9jZG1JbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR3N0
U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
ICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIEdS
ZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY3VzdG9tKEdT
VF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhbnktZGVjcnlwdG9yLXdh
aXRpbmctZm9yLWtleSIpKSk7Ci0gICAgaWYgKHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsK
LSAgICAgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVl
cnkuZ2V0KCkpOwotICAgICAgICBHU1RfVFJBQ0UoInF1ZXJ5IHJlc3VsdCAlcywgb24gJXMiLCBi
b29sRm9yUHJpbnRpbmcocmVzdWx0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUp
KTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlID49IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICAv
LyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhlIHBpcGVsaW5lIGlzIGVhc2llciBidXQgaXQgb25seSB3
b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdXAgYW5kIHJ1bm5pbmcsIG90aGVyd2lzZSB3
ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5kIGFzayB0aGUgZGVjcnlwdG9ycyBkaXJlY3RseS4KLSAg
ICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4gaXRlcmF0b3IoZ3N0X2Jpbl9pdGVyYXRlX3Jl
Y3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgICAgICBHc3RJdGVyYXRvclJl
c3VsdCBpdGVyYXRvclJlc3VsdDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaXRlcmF0b3JS
ZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9sZChpdGVyYXRvci5nZXQoKSwgW10oY29uc3QgR1ZhbHVl
ICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4gewotICAgICAgICAg
ICAgICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSBHU1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmpl
Y3QoaXRlbSkpOwotICAgICAgICAgICAgICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IEdTVF9RVUVSWShk
YXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIVdFQktJVF9JU19NRURJQV9DRU5DX0RFQ1JZ
UFQoZWxlbWVudCkgfHwgIWdzdF9lbGVtZW50X3F1ZXJ5KGVsZW1lbnQsIHF1ZXJ5KTsKLSAgICAg
ICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRv
clJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgICAgICAgIGdzdF9pdGVy
YXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICB9IHdoaWxlIChpdGVyYXRvclJl
c3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0
ID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJpdGVyYXRv
ciByZXR1cm5lZCBhbiBlcnJvciIpOwotICAgICAgICByZXN1bHQgPSBpdGVyYXRvclJlc3VsdCA9
PSBHU1RfSVRFUkFUT1JfT0s7Ci0gICAgICAgIEdTVF9UUkFDRSgiaXRlcmF0b3IgcmVzdWx0ICVk
LCB3YWl0aW5nICVzIiwgaXRlcmF0b3JSZXN1bHQsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2NkbUluc3RhbmNlLT5p
c1dhaXRpbmdGb3JLZXkoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggYjJiYjU0MWEzMjZhZTliZWZhNWIwMzc3OWMwZDEx
MDYzNWQ3OWUxNC4uNTIxYjIwZDExY2M4ZGQ5NGJlMjg0ZDc0Njk5Y2QyNzE3YjRlMDU0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtNzYsNiAr
NzYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdE1wZWd0c1NlY3Rpb24gR3N0TXBlZ3RzU2VjdGlv
bjsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorI2luY2x1
ZGUgIkNETVByb3h5LmgiCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbVZvbHVt
ZSBHc3RTdHJlYW1Wb2x1bWU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9JbmZvIEdzdFZpZGVv
SW5mbzsKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwpAQCAtMzcx
LDcgKzM3NSw3IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAg
IExvY2sgbV9jZG1BdHRhY2htZW50TXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fY2RtQXR0YWNobWVu
dENvbmRpdGlvbjsKLSAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1fY2RtSW5zdGFuY2U7
CisgICAgUmVmUHRyPENETUluc3RhbmNlUHJveHk+IG1fY2RtSW5zdGFuY2U7CiAKICAgICBMb2Nr
IG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFuZGxlZFByb3RlY3Rp
b25FdmVudHMuCiAgICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50
czsKQEAgLTQ1MCw3ICs0NTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNDRE1BdHRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2RtSW5zdGFuY2U7IH0KICAgICB2b2lkIGF0dGVtcHRUb0RlY3J5
cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwogICAgIHZvaWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3Vu
dGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBzZXRXYWl0aW5nRm9yS2V5KGJvb2wpOworICAg
IEluaXREYXRhIHBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSop
OworICAgIGJvb2wgd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKICNlbmRpZgogCiAgICAgQXRvbWlj
PGJvb2w+IG1faXNQbGF5ZXJTaHV0dGluZ0Rvd247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9y
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGQ4YzAyNTRm
ZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLmI0YWM1NTE1YmUwNTQyZGJjOGJjYzAy
ZGJmMjZkMzZjNzk3NWE0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0zNywxMiArMzcsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRf
R0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJL
SVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgewotICAgIFJl
ZlB0cjxQcm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBnY3J5X2NpcGhlcl9oZF90IGhh
bmRsZTsKKyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gY2RtUHJveHk7CiB9OwogCiBzdGF0
aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9vbCBoYW5kbGVLZXlSZXNwb25z
ZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQdHI8UHJveHlD
RE0+KTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7CiBzdGF0aWMgYm9vbCBkZWNy
eXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2LCBH
c3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2FtcGxlc0Nv
dW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElD
KHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CkBAIC04NCw3
ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFz
c19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAgICBXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFRfQ0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3RlbUlkID0g
R1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKLSAgICBjZW5jQ2xhc3MtPmhh
bmRsZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFuZGxlS2V5UmVzcG9uc2UpOwor
ICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRSKGNkbVBy
b3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19GVU5DUFRS
KGRlY3J5cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2Yo
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBAIC05Myw2MSArOTIsMzIgQEAg
c3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2luaXQoV2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9r
ZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmKQogewogICAg
IFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9D
S19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2VsZi0+cHJpdiA9IHByaXY7CiAg
ICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKLSAgICBp
ZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHByaXYtPmhhbmRsZSks
IEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQSEVSX1NF
Q1VSRSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0
ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwot
ICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2Vs
ZiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAgICAgV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBnY3J5X2NpcGhlcl9j
bG9zZShwcml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxp
emUsIChvYmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPiBwcm94
eUNETSkKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eSkKIHsKICAgICBX
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tf
REVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAg
cHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5Q0RNQ2xlYXJLZXkqPihwcm94
eUNETS5nZXQoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOworICAgIHByaXYtPmNkbVBy
b3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5Kj4oY2RtUHJveHkuZ2V0KCkp
OworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKIH0KIAotc3RhdGljIGJvb2wgZmluZEFuZFNl
dEtleShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYsIGNvbnN0IFN0cmlu
ZyYmIGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVm
ZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291bnQsIEdzdEJ1ZmZl
ciogc3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkgewotICAg
ICAgICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5VmFsdWUg
PSBrZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1QocHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRlcygpID09
IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhl
cl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlWYWx1ZS5z
aXplSW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2Np
cGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwogCi1zdGF0aWMgYm9v
bCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1
ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVy
LCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKQot
ewotICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
bm8gSVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAha2V5SURCdWZmZXIgfHwgIWJ1
ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlkIGRlY3J5cHQo
KSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTU3LDI3
ICsxMjcsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0laRV07Ci0gICAgaWYgKG1hcHBl
ZElWQnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1zZXQoY3RyICsgOCwgMCwgOCk7
Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIDgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZ
X1NJWkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCBDTEVB
UktFWV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2Ny
eV9jaXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9TSVpFKTsKLSAgICBp
ZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiZ2NyeV9j
aXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBkZWNyeXB0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBlZEtleUlkQnVmZmVyID0gV2Vi
Q29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIsIEdTVF9NQVBfUkVBRCk7
CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKQEAgLTE5MCw3MiArMTM5LDI5
IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBwZWRLZXlJZEJ1ZmZlci0+ZGF0
YSgpLCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwotCi0gICAgaWYgKCFzdWJTYW1w
bGVDb3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNyeXB0aW9uLgotICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9uOiAlenUgZW5jcnlw
dGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgICAgIC8vIENoZWNrIGlm
IHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNpemUoKSkg
ewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhh
bmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAwLCAwKTsK
LSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19z
dHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwuCi0gICAgaWYgKCFzdWJTYW1w
bGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkVycm9yLCB0aGUg
c3ViU2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1dG8gbWFwcGVkU3ViU2FtcGxl
c0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YlNhbXBsZXNCdWZm
ZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJTYW1wbGVzQnVmZmVyKSB7Ci0g
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1
ZmZlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR1VuaXF1ZVB0cjxH
c3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVz
QnVmZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOwotICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24s
IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1
ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAg
ICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAgICAgaWYgKHNhbXBsZUluZGV4
IDwgc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dl
dF91aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIpCi0gICAgICAgICAgICAgICAg
fHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0Vu
Y3J5cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJ1bnN1
cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNFbmNyeXB0ZWQgPSBtYXBwZWRC
dWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX1RSQUNF
X09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2Rv
PSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0g
cG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNDbGVhcjsKLSAgICAgICAgaWYg
KG5CeXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAi
c3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSkiLCBzYW1w
bGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9u
KTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5o
YW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24sIG5CeXRlc0VuY3J5cHRlZCwg
MCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4ICV1IGRlY3J5cHRpb24gZmFp
bGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3Np
dGlvbiArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gbWFw
cGVkU3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdENv
bnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFwcGVkS2V5SWRCdWZmZXItPmRh
dGEoKTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBtYXBwZWRLZXlJZEJ1ZmZlci0+
c2l6ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpOworICAgIGNv
bnRleHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5zaXplKCk7CisgICAgY29udGV4
dC5lbmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmVu
Y3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVyLT5zaXplKCk7CisgICAgY29u
dGV4dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7CisgICAgaWYgKCFzdWJzYW1wbGVD
b3VudCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbnVsbHB0cjsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIpOworICAgICAgICBtYXBwZWRT
dWJzYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoc3Vic2Ft
cGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYgKCFtYXBwZWRTdWJzYW1wbGVz
QnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8g
bWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBtYXBwZWRTdWJzYW1wbGVz
QnVmZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5
dGVzID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eS0+Y2VuY0RlY3J5cHQoY29udGV4dCk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4M2QwNDc0ODYwZjZlZjgxN2Yz
MWNkYzE1ZTQ4YWMxODZjMDM0NC4uZWI1M2QzZmM2NzAzYmVlNmI3NzIzMDc3OWRkODViZTk0MTE5
Mjk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0yNSwzNCArMjUsMzQgQEAK
IAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNs
dWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUg
IkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQcm94eUNETTsKK3VzaW5nIFdl
YkNvcmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VU
X1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRf
VFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rpb25FdmVudDsKLSAgICBSZWZQ
dHI8UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVjZWl2ZWQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAgTG9jayBtdXRleDsKLSAgICBD
b25kaXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHk7CisKKyAg
ICBMb2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRpb24gY2RtQXR0YWNobWVudENv
bmRpdGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhTZWNvbmRzVG9XYWl0
Rm9yQ0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VT
dGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CiBzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2FwcyhHc3RC
YXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBzKiwgR3N0Q2FwcyopOwogc3Rh
dGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiwgR3N0
QnVmZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNm
b3JtKiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRy
YW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsKLXN0YXRpYyBib29sIGlzQ0RN
SW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCopOwog
c3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0Q29udGV4dCopOwogCi0KIEdT
VF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2Rl
Y3J5cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKIApAQCAtNzYsNyAr
NzYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlw
dF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+
dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFuc2Zvcm1DYXBzKTsKICAgICBi
YXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwog
ICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSKHNp
bmtFdmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+cXVlcnkgPSBHU1RfREVC
VUdfRlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUp
KTsKIH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9y
bUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiB7CiAg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRF
KHNlbGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKIAotICAgIC8vIFRo
ZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuIFdhaXQgZm9yIGl0LgotICAg
IGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxm
LCAia2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBpdCIpOwotICAgICAgICBpZiAo
R1NUX1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQgfHwgKEdTVF9T
VEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcg
JiYgR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VE
KSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiY2FuJ3QgcHJvY2VzcyBr
ZXkgcmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIpOwotICAgICAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2VuZCAi
ZHJtLWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhlIHBsYXllciB0byByZXNlbmQg
dGhlIENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3JtIHdlIGFyZSB3YWl0aW5nIGZv
ciBrZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0cnVlOwotICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksIGdzdF9tZXNzYWdlX25ld19l
bGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJkcm0td2Fp
dGluZy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2ht
ZW50TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9yKHByaXYtPm11dGV4
LCBTZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPmtleVJlY2Vp
dmVkOworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8gYmUgbmVnb3RpYXRlZCBiZWZv
cmUgd2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFwcml2LT5jZG1Qcm94eSkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90IGF2YWlsYWJsZSwgZ29pbmcg
dG8gd2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0YWNobWVudENvbmRpdGlvbi53
YWl0Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vjb25kc1RvV2FpdEZvckNETVBy
b3h5LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5OwogICAgICAg
ICB9KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgaWYgKCFw
cml2LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiQ0RN
UHJveHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAgICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0gICAgICAgIHByaXYtPndhaXRp
bmdGb3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9F
TEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBn
c3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZlZCIpKSk7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVzcyAlcCIs
IHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBHc3RQcm90ZWN0aW9uTWV0YSog
cHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRhKj4oZ3N0
X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpAQCAtMjA3LDMyICsxOTcsMzAg
QEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3Jt
KiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVyICVwIiwg
YnVmZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQor
ICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW2J1
ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAg
fSk7CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91
aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOwotICAgICAg
ICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRh
Kj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwogICAgIGlmICghZ3N0X3N0cnVj
dHVyZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywgImVuY3J5cHRlZCIsICZlbmNy
eXB0ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQg
ZW5jcnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJl
dHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGlmICghaXZTaXplIHx8
ICFlbmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgaWYgKCFpdlNp
emUgfHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KIAog
ICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NUX1BUUl9G
T1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVuc2lnbmVkIHN1YlNhbXBsZUNv
dW50OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5m
bywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsKLSAgICAg
ICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0
YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9S
VEVEOwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4g
dHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZl
cikKICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0
YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVzIik7Ci0g
ICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2Fz
dDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxP
V19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1YlNhbXBsZXNCdWZmZXIgPSBn
c3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlmICghc3ViU2FtcGxlc0J1ZmZl
cikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiVGhlcmUgaXMgbm8gc3Vi
c2FtcGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBsZSBjb3VudCIpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRhLT5pbmZv
LCAia2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIiKTsKLSAgICAgICAgZ3N0X2J1
ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3Rl
Y3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAg
IH0KICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFs
dWUpOwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUlu
UGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgdmFs
dWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2Iik7
CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAg
ICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjcwLDcx
ICsyNTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNl
VHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNlbGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxmLCBpdkJ1
ZmZlciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1YlNhbXBsZXNCdWZm
ZXIpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24gZmFpbGVk
Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICByZXR1
cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3N0YXRpYyBib29sIGlz
Q0RNUHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIHJldHVy
biBwcml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2LT5tdXRleC5pc0xvY2tlZCgp
KTsKLQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAgICAgR1JlZlB0cjxHc3RDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVN
RU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAgICAgLy8gQWNjb3JkaW5nIHRv
IHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUgY29udGV4
dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJlYW0gb25l
IGFuZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRo
YXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXll
cikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0
LiBBIG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1bCBidXQgdGhlIHBsYXllciBz
ZXRzIHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUgQ0RNSW5zdGFuY2UgYW5kIGlm
IGl0IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9mIGFza2luZyBmb3Igb25lIGFz
IGl0IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNv
ZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJl
cXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3Ig
YnVzCi0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KLSAgICAgICAgaWYgKGNv
bnRleHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJl
X2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2Rt
LWluc3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNETSA9IHZhbHVlID8gcmVpbnRl
cnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxw
dHI7Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0gICAgICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVw
LCByZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBwcml2LT5wcm94eUNETS0+cmVm
Q291bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIpOworc3RhdGljIENETVByb3h5
KiByZXF1ZXN0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1j
ZG0tcHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQg
dGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVw
c3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBj
YXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAg
KHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNv
bHZlIGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVy
IHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQg
aWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUg
YXMgaXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2Rl
LiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1
ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1
cworICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgewor
ICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0
X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxD
RE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChw
cm94eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVk
IGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHkt
PnJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBu
b3QgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhw
cml2LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0
QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFj
aENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVBy
b3h5KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFT
UyhzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NU
X0VWRU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJF
QU1fT09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90
ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91
dC1vZi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8g
cHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9u
Ci0gICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBz
byB0aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZh
aWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBD
RE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2
LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFj
aGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5Owor
ICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBw
cml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2Vs
ZikpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJv
eHkqIHByb3h5ID0gcmVxdWVzdENETVByb3h5RnJvbUdzdENvbnRleHQoc2VsZik7CisgICAgICAg
IGlmIChwcm94eSkgeworICAgICAgICAgICAgYXR0YWNoQ0RNUHJveHkoc2VsZiwgcHJveHkpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byByZXRyaWV2ZSBDRE1Qcm94eSBmcm9t
IGNvbnRleHQiKTsKICAgICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgICAgICAg
aWYgKGtsYXNzLT5oYW5kbGVLZXlSZXNwb25zZShzZWxmLCBwcml2LT5wcm94eUNETSkpIHsKLSAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCIpOwotICAgICAg
ICAgICAgcHJpdi0+a2V5UmVjZWl2ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpdi0+Y29uZGl0
aW9uLm5vdGlmeU9uZSgpOwotICAgICAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RF
dmVudCogZXZlbnQpCit7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQodHJhbnMpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IEZBTFNFOwogCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTEzNTUKKyAgICAvLyBXZSBzaG91bGQgYmUgaGFuZGxpbmcgcHJvdGVj
dGlvbiBldmVudHMgaW4gdGhpcyBjbGFzcyBpbgorICAgIC8vIGFkZGl0aW9uIHRvIG91dC1vZi1i
YW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKKyAgICAvLyBwcmVmZXJyZWQg
c3lzdGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0dXJlIHByb3RlY3Rpb24KKyAgICAvLyBl
dmVudHMgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUgZGVtdXhlciwgc28gdGhleSBtdXN0IGJl
CisgICAgLy8gaGFuZGxlZCBpbiBoZXJlLgorICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZl
bnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiB7CisgICAg
ICAgIEFTU0VSVChnc3RfZXZlbnRfaGFzX25hbWUoZXZlbnQsICJhdHRlbXB0LXRvLWRlY3J5cHQi
KSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkhhbmRsaW5nIGF0dGVtcHQtdG8t
ZGVjcnlwdCIpOworICAgICAgICByZXN1bHQgPSBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJs
ZShzZWxmKTsKICAgICAgICAgZ3N0X2V2ZW50X3VucmVmKGV2ZW50KTsKLSAgICAgICAgcmVzdWx0
ID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0zNDUsMTYg
KzM1NCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBzaW5rRXZlbnRIYW5kbGVyKEdzdEJhc2VUcmFuc2Zv
cm0qIHRyYW5zLCBHc3RFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGdib29sZWFuIHF1ZXJ5SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0UGFk
RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkqIHF1ZXJ5KQotewotICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKHF1ZXJ5KSwgImFueS1kZWNy
eXB0b3Itd2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dF
VF9QUklWQVRFKHRyYW5zKTsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVCh0cmFucywgImFueS1k
ZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IHF1ZXJ5LCB3YWl0aW5nZm9ya2V5ICVzIiwgYm9vbEZv
clByaW50aW5nKHByaXYtPndhaXRpbmdGb3JLZXkpKTsKLSAgICAgICAgcmV0dXJuIHByaXYtPndh
aXRpbmdGb3JLZXk7Ci0gICAgfQotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1Mo
cGFyZW50X2NsYXNzKS0+cXVlcnkodHJhbnMsIGRpcmVjdGlvbiwgcXVlcnkpOwotfQotCiBzdGF0
aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwg
R3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KTsK
QEAgLTM2Myw3ICszNjIsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3Rh
dGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbgogICAgIHN3aXRjaCAo
dHJhbnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6
CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAg
ICAgcHJpdi0+Y29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICBwcml2LT5jZG1BdHRhY2ht
ZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKQEAgLTM4MCwxMiArMzc5LDE0IEBAIHN0YXRpYyB2b2lkIHNldENvbnRl
eHQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0Q29udGV4dCogY29udGV4dCkKIHsKICAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVChlbGVtZW50KTsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7CisgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9
IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NMQVNTKHNlbGYpOwogCi0gICAgaWYgKGdz
dF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0taW5zdGFuY2UiKSkg
ewotICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUo
Z3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1pbnN0YW5jZSIpOwotICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7Ci0gICAgICAgIHByaXYtPnByb3h5
Q0RNID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PFByb3h5Q0RNKj4oZ192YWx1ZV9nZXRfcG9p
bnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
cmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+cHJveHlDRE0uZ2V0KCkpOworICAg
IGlmIChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLXByb3h5
IikpIHsKKyAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3Zh
bHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0tcHJveHkiKTsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAg
ICAgcHJpdi0+Y2RtUHJveHkgPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHkqPihn
X3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5jZG1Qcm94
eS5nZXQoKSk7CisgICAgICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNk
bVByb3h5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aAppbmRleCAwNjUxZGZiOWMzYmU5NTk0OGQzYTllOThkZTZlZDhkNGU4ZjFmYTVkLi44NTc1YTA3
MTAyYmQxMzNmOTI1ZGUxYTA3YWRjOTIyYzdhMDU4NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFt
ZXIuaApAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYg
VVNFKEdTVFJFQU1FUikKIAotI2luY2x1ZGUgPENETUluc3RhbmNlLmg+CisjaW5jbHVkZSA8Q0RN
UHJveHkuaD4KICNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+CiAjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU1LDggKzU1LDggQEAg
c3RydWN0IF9XZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MgewogICAgIEdz
dEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRDbGFzczsKIAogICAgIGNvbnN0IGNoYXIqIHByb3Rl
Y3Rpb25TeXN0ZW1JZDsKLSAgICBib29sICgqaGFuZGxlS2V5UmVzcG9uc2UpKFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6UHJveHlDRE0+KTsKLSAg
ICBib29sICgqZGVjcnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdz
dEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVm
ZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZl
cik7CisgICAgYm9vbCAoKmNkbVByb3h5QXR0YWNoZWQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqLCBSZWZQdHI8V2ViQ29yZTo6Q0RNUHJveHk+KTsKKyAgICBib29sICgqZGVj
cnlwdCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIEdzdEJ1ZmZlciogaXZC
dWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25l
ZCBzdWJzYW1wbGVzQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcik7CiB9OwogCiBH
X0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFj
dG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAppbmRl
eCBiMzJiNWEwMTY4NDU1ZGVjZTk5NWQ1NmE2YjQzNGU4ZGQ0ZmJlNjgxLi5jZTVkOGY3ZDZiZGYz
OGI1OTIyMDkzMDJhNmU2ZDcxYjM2OTY2MzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01v
Y2tDRE1GYWN0b3J5LmNwcApAQCAtMjI2LDggKzIyNiw2IEBAIE9wdGlvbmFsPFN0cmluZz4gTW9j
a0NETTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0CiAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotUHJveHlDRE1Nb2NrOjp+UHJveHlDRE1Nb2Nr
KCkgPSBkZWZhdWx0OwotCiBNb2NrQ0RNSW5zdGFuY2U6Ok1vY2tDRE1JbnN0YW5jZShXZWFrUHRy
PE1vY2tDRE0+IGNkbSkKICAgICA6IG1fY2RtKGNkbSkKIHsKQEAgLTI5NiwxMSArMjk0LDYgQEAg
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gTW9ja0NETUluc3RhbmNlOjpjcmVhdGVTZXNzaW9u
KCkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDRE1JbnN0YW5jZVNlc3Npb24obWFrZVdl
YWtQdHIoKnRoaXMpKSk7CiB9CiAKLVJlZlB0cjxQcm94eUNETT4gTW9ja0NETUluc3RhbmNlOjpw
cm94eUNETSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm94eUNETU1vY2so
KSk7Ci19Ci0KIE1vY2tDRE1JbnN0YW5jZVNlc3Npb246Ok1vY2tDRE1JbnN0YW5jZVNlc3Npb24o
V2Vha1B0cjxNb2NrQ0RNSW5zdGFuY2U+JiYgaW5zdGFuY2UpCiAgICAgOiBtX2luc3RhbmNlKFdU
Rk1vdmUoaW5zdGFuY2UpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5o
CmluZGV4IGQ3ZTY2ZTYwMTZkMTAxNzgxMmVhZmE4YzgwYjQ3ZDQ3MjgzNTBjZDEuLjM5OTA5Yjkz
MDNhOTRjOTM2OGVhYTBmNjI1ZjRiNjdlNTI1MDU5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmgKQEAgLTk5LDExICs5OSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4+IG1fc2Vzc2lvbnM7CiB9OwogCi1j
bGFzcyBQcm94eUNETU1vY2sgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewotcHVibGljOgotICAg
IHZpcnR1YWwgflByb3h5Q0RNTW9jaygpOwotfTsKLQogY2xhc3MgTW9ja0NETSA6IHB1YmxpYyBD
RE1Qcml2YXRlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TW9ja0NETT4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTUwLDcgKzE0NSw2IEBAIHByaXZhdGU6CiAg
ICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7
CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8
Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVmUHRyPFBy
b3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsOwogCiAgICAgV2Vha1B0cjxNb2NrQ0RNPiBt
X2NkbTsKICAgICBib29sIG1fZGlzdGluY3RpdmVJZGVudGlmaWVyc0FsbG93ZWQgeyB0cnVlIH07
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390075</attachid>
            <date>2020-02-07 04:44:10 -0800</date>
            <delta_ts>2020-02-10 09:10:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200207124408.patch</filename>
            <type>text/plain</type>
            <size>107973</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uNGRkZjZhZDU5MTI1NTRhYjE5MjhjNjc0OTM1ZTlj
NTE4YTE2NjU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
LgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0
ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0IHRoZWlyIHN0YXR1cyBpcy4KKworICAg
ICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhyZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVh
bCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIgcXVpcmtzLiBUaGUgdHdvIG1haW4gcHJv
YmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisgICAgICAgIGhhdmUgaW4gV2ViS2l0IGlz
IGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZyb20gYmFja2dyb3VuZAorICAgICAgICBt
ZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5hZ2VtZW50IGlzIGhvdyB0byBtYW5hZ2Ug
dGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAgICAgY29oZXJlbnQgd2l0aCBKYXZhU2Ny
aXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxlbWVudGF0aW9uLAorICAgICAgICB0aGUg
cmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFja2dyb3VuZCBtZWRpYQorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1bHQga2V5IHN0b3JlIGludGVyZmFjZSBm
b3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFzc2VzIGNhbiwgb24gcmVjZWlwdCBvZiBu
ZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJlYWwgQ0RNLCB0ZWxsIENETVByb3h5IGFi
b3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBzdGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50
ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20gdGhlcmUsCisgICAgICAgIGxldHRpbmcg
SmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8K
KyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMgd2VsbCBhcyB0aGUgbWVkaWEgZGVjb2Rl
IHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQgY29tZSBhc2tpbmcuCisKKyAgICAgICAg
QWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlzIGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcg
dGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5zdGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRoaXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5
IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAgICAgIHRocmVhZC11bnNhZmUgYWNjZXNz
IG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdlIGhhZCB0byBkbworICAgICAgICBzb21l
dGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNvbWV0aGluZyB3YXMgUHJveHlDRE0gKGEK
KyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBub3cpLCB3aGljaCB3YXMgYSBoYWNrIGFu
ZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5
IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFuZAorICAgICAgICBpdCB3aWxsIGJ5IGRl
ZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcgb2YgdGhlIGtleSBzdG9yZSBmb3IKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVycm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5k
IHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRlY3J5cHRpb24gLyBkZWNvZGUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5j
bHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVy
ZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEg
dGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29tZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2Vy
dHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiByZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAg
Zm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3Jy
eSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFz
U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0
b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0
YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQ
cm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OmlkQXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXk6OktleSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OnJlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6Q0RN
SW5zdGFuY2VQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpwcm94
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojppc1dhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UGxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnRyYWNrU2Vzc2lvbik6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFkZXIgdXRpbGl0eSBm
b3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNl
bnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEpOiBSZWZhY3RvcmVk
IHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKTogSGVscGVyIG1ldGhv
ZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1Nl
dERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qgd2lsbCBibG9jayBp
ZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20gSlMuCisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2Ft
cGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0Rl
Y3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRp
YWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJL
ZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAgICAgIENETVByb3h5
IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgor
ICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNvbW1hbmQga2V5IG1h
bmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAgIHRyYWNrU2Vzc2lv
biBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVNRQorICAgICAgICBz
ZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJhY2sgb2YgZ2VuZXJh
dGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1c2UgbmV3IGtleSBt
YW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJveHlDRE1DbGVhcktl
eTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBsb29rcyBsaWtlIHdl
IHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQg
ZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAgb3JkZXJpbmcgb24g
a2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAgICAgICBuZXcga2V5
IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICBSZW1vdmUgZGVwZW5kZW5j
eSBvbiBDRE1DbGVhcktleS5oLCBzaW5jZSBJIGhhdmVuJ3QgYWRkZWQgQ0RNUHJveHkKKyAgICAg
ICAgdG8gdGhlIEFwcGxlIGJ1aWxkIHN5c3RlbSwgYW5kIEkgZG9uJ3QgYmVsaWV2ZSB0aGV5IG5l
ZWQgQ2xlYXJLZXkKKyAgICAgICAgc3VwcG9ydD8gT3IgYXQgbGVhc3QgaXQgaXMgZmFsc2VseSBh
ZHZlcnRpc2VkIGFzIHN1cHBvcnRlZD8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oOgorICAg
ICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXJzZUluaXREYXRh
RnJvbVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVmYWN0b3JlZCBvdXQgb2Ygc3luY01l
c3NhZ2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBpbnRvCisgICAgICAgIHdhaXRGb3JD
RE1BdHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3Nh
Z2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5IGNvZGUsIGl0IHdhcyBhbGwgYnJv
a2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVuZm9yY2UgdXNlIG9mIENETUluc3Rh
bmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMgd2lsbCBiZQorICAgICAgICB1c2lu
ZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20gYmFja2dyb3VuZAorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8gdGhlIE1lZGlhUGxheWVyIGZvcgor
ICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNvIHdpcmUgdGhhdCBpbiBoZXJlIHRv
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5z
dGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNh
dGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQ
cm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBS
ZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5
X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFj
aGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBE
ZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBi
ZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkp
OiBEZWxldGVkLgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQp
OgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6CisgICAg
ICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9j
bGFzc19pbml0KToKKyAgICAgICAgKHRyYW5zZm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Q
cm94eUF2YWlsYWJsZSk6CisgICAgICAgIChnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAg
ICAgICAgKGF0dGFjaENETVByb3h5KToKKyAgICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZh
aWxhYmxlKToKKyAgICAgICAgKHNpbmtFdmVudEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3Rh
dGUpOgorICAgICAgICAoc2V0Q29udGV4dCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoaXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRs
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RN
RmFjdG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYW5kYXRlIFVVSUQgdmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRh
dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggODc0ZDQ5YWYx
ZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uOWU2N2FiOGY0ZTZkNTZhNDUwYzFmMjA4
YjMyNzc4MmJjOTcwNzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFr
ZQpAQCAtMTY0LDggKzE2NCw4IEBAIGlmIChFTkFCTEVfRU5DUllQVEVEX01FRElBKQogICAgICkK
IAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKICAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCi0KICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKaW5kZXgg
YThkN2NjMTU1MjU4NDY3MzllZmRlZTZhMDM1NGQ0OGVjYWMxMzAzNy4uOGY5ZjNlYjg3NDVjMzUy
MDI4MzE0YzYwNmQyODlkNGUzZjcxYTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCkBAIC0zOSwxNyArMzksNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci0KIGNsYXNzIENETUlu
c3RhbmNlU2Vzc2lvbjsKLWNsYXNzIFByb3h5Q0RNOwotCi0vLyBIYW5kbGUgdG8gYSAicmVhbCIg
Q0RNLCBub3QgdGhlIEphdmFTY3JpcHQgZmFjYWRlLiBUaGlzIGNhbiBiZSB1c2VkCi0vLyBmcm9t
IGJhY2tncm91bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4KLWNsYXNzIFByb3h5Q0RNIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFByb3h5Q0RNPiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+UHJveHlDRE0oKSA9IGRlZmF1bHQ7Ci19OwotCiBzdHJ1Y3QgQ0RNS2V5U3lzdGVtQ29u
ZmlndXJhdGlvbjsKIAogLy8gSmF2YVNjcmlwdCdzIGhhbmRsZSB0byBhIENETUluc3RhbmNlLCBt
dXN0IGJlIHVzZWQgZnJvbSB0aGUKQEAgLTc3LDcgKzY3LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgPSAwOwog
ICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgPSAwOwotICAg
IHZpcnR1YWwgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0ID0gMDsKIAogICAgIGVu
dW0gY2xhc3MgSERDUFN0YXR1cyB7CiAgICAgICAgIFVua25vd24sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Mjc3ODE2ODQyNmVjYTUyZWU4YzI2MjI2ZWEwMTUxZGZmYzFiYzY4NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmNwcApA
QCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ0RN
UHJveHkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgU3RyaW5nIHZlY3RvclRvSGV4U3RyaW5nKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKKyAgICBmb3IgKGF1dG8gYnl0ZSA6IHZlYykKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQocGFkKCcwJywgMiwgaGV4KGJ5dGUpKSk7CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Uge30KKworU3RyaW5nIEtleTo6aWRBc1N0
cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0b3JUb0hleFN0
cmluZyhtX2lkKSwgIl0iKTsKK30KKworU3RyaW5nIEtleTo6dmFsdWVBc1N0cmluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0b3JUb0hleFN0cmluZyhtX3ZhbHVl
KSwgIl0iKTsKK30KKworYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIHJldHVybiBtX2tleXMuZmluZE1hdGNoaW5n
KFsmXShjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgICAgIHJldHVybiAqc3Rv
cmVkS2V5ID09IGtleUlEOworICAgIH0pICE9IFdURjo6bm90Rm91bmQ7Cit9CisKK3ZvaWQgS2V5
U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKK3sKKyAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHkgLSBtZXJnaW5nICV1IG5ldyBrZXlzIGludG8gYSBrZXkgc3RvcmUgb2YgJXUg
a2V5cyIsIG90aGVyLm51bUtleXMoKSwgbnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGtleSA6IG90aGVyKSB7CisgICAgICAgIC8vIE5PVEU6IERvIHdlIGNhcmUgdGhhdCB3ZSB3aWxs
IG5vdCBhcHBlbmQgYSBrZXkgaWYgaXQgbWF0Y2hlcyBhIGtleSBJRAorICAgICAgICAvLyBpbiB0
aGUga2V5c3RvcmUgYW5kIGhhcyBkaWZmZXJlbnQgZGF0YS4gU2hvdWxkIHdlIG92ZXJ3cml0ZT8g
V2hpY2ggaXMgIm5ld2VyIj8KKyAgICAgICAgLy8gRG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIGV4
dHJhIGNvbXBsZXhpdHkuCisgICAgICAgIGlmIChtX2tleXMuZmluZE1hdGNoaW5nKFsmXSAoY29u
c3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeyByZXR1cm4gKmtleSA9PSAqc3RvcmVkS2V5OyB9
KSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoZmFsc2UgJiYgImlnbm9yZWQgYSBrZXkgd2l0
aCB0aGUgc2FtZSBJRCBhbmQgZGlmZmVyZW50IGRhdGEiKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJ
U0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIExPRyhFTUUsICJFTUUgLSBDRE1Q
cm94eSAtIGtleSBzdG9yZSBub3cgaGFzICV1IGtleXMiLCBudW1LZXlzKCkpOworICAgIGZvciAo
Y29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAgICAgICBMT0coRU1FLCAiXHRFTUUgLSBDRE1Q
cm94eSAtIEtleSBJRDogJXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cisj
ZW5kaWYgLy8gIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK30KKworQ0RN
SW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFsbEtleXNBc1JlbGVh
c2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBr
ZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGZvciAo
YXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAgICAgICBrZXlTdGF0dXMuc2Vj
b25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkOworICAgIHJldHVy
biBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9yPFJl
ZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAgYm9vbCBkaWRLZXlTdG9yZUNoYW5nZSA9IGZh
bHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykgeworICAgICAgICBpZiAoYWRkKFdU
Rk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRLZXlTdG9yZUNoYW5nZSA9IHRydWU7CisgICAg
fQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKK30KKworYm9vbCBLZXlTdG9yZTo6YWRk
KFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJvb2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxzZTsK
KyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0Y2hp
bmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgICAgIHJldHVybiAq
a2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5
SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGlu
Z0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVlKCks
ICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAlcyBnZXR0aW5nIGFkZGVkIHRv
IGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsgICAgICAKKyAg
ICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IHRydWU7
CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9uUmVmZXJlbmNlKCk7CisgICAgcmV0dXJuIGRp
ZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbShjb25z
dCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikK
KyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25zdCBS
ZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisKKyAg
ICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kKGtleSk7Cisg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVkIHRvIHJlbW92ZSBrZXkgd2l0
aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVuY2VzIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJlZmVyZW5jZXMoKSk7CisKKyAgICBpZiAoa2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8m
IGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhd
OworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVtb3ZlU2Vzc2lvblJlZmVyZW5jZSgp
OworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5udW1TZXNzaW9uUmVmZXJlbmNl
cygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZW1vdmUga2V5
IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5yZW1vdmUoa2V5V2l0aE1hdGNoaW5nS2V5SURJ
bmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIGF0dGVtcHQgdG8gcmVt
b3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRvZXMgbm90IGV4aXN0Iiwga2V5LT5pZEFzU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsKK30KKwor
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5
cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJRCkKKyAgICAgICAgICAgIHJldHVybiBrZXkt
PnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJrZXkg
bXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7CisgICAgVU5SRUFDSEFCTEUoKTsKK30K
KworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmNvbnZlcnRU
b0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAga2V5U3RhdHVzVmVjdG9yLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6
IG1fa2V5cykgeworICAgICAgICAvLyBGSVhNRTogVmVjdG9yPHVpbnQ4X3Q+IHJlcHJlc2VudGF0
aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUKKyAgICAgICAgLy8gZGF0YSBhcmUgc21hbGwgaW4g
bnVtYmVyLCBzbyBwcm9iYWJseSBpdCdzIGZpbmUuCisgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51
bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1cz4geyBrZXktPmlkQXNTaGFyZWRCdWZmZXIoKSwga2V5LT5zdGF0dXMo
KSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Q
cm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKQoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5U3RvcmUubWVy
Z2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5n
IGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsKKyAgICBtX2tleXNDb25kaXRpb24u
bm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENETUluc3RhbmNl
UHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5j
ZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBBU1NFUlQo
bV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUu
a2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2FpdGluZ0Zvcktl
eSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgp
OworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBr
ZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdh
aXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXko
KSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsK
KyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5
Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0
aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6OnRy
eVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBz
dGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVuY29uZGl0aW9uYWxseSBzYXlpbmcgd2Ug
aGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5
IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5nIGEga2V5LiBJZiBNYXhLZXlXYWl0VGlt
ZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBtb3JlIGNsZWFyIGJ5dGVzCisgICAgLy8g
Zm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9yS2V5T25SZXR1cm4gPSBtYWtlU2NvcGVF
eGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CisgICAgfSk7Cisg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAl
cyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYm9vbCB3
YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tleVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0
aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5OjpNYXhLZXlXYWl0VGltZVNlY29uZHMs
IFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5QXZhaWxhYmxlVW5s
b2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAod2FzS2V5UmVjZWl2
ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdh
aXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICB9CisgICAgCisgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0
b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5U3RvcmUuY29u
dGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBrZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJ
RCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZv
cktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIGlmICgha2V5
QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5
IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5
SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQp
OworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wgd2FzV2FpdGluZ0ZvcktleSA9IG1fbnVt
RGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAgIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdG
b3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1fcGxheWVyLCB3YXNX
YWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkK
KyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30K
Kwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSgpCit7CisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXllciAmJiBtX251bURlY3J5cHRvcnNXYWl0
aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleS0tOworICAg
IGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JL
ZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgaXNOb2JvZHlX
YWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgaXNOb2JvZHlXYWl0aW5nRm9y
S2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5nRm9yS2V5Q2hhbmdlZCgpOworICAgIH0p
OworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBOb3RpZnkgSlMgd2hlbiBhcHByb3ByaWF0
ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fa2V5U3RvcmUubWVyZ2Uoa2V5
U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1JbnN0YW5jZVByb3h5IC0gbWVyZ2luZyBr
ZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlmeWluZyBDRE1Qcm94eSBvZiBjaGFuZ2Vz
Iik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAgIG1fY2RtUHJveHktPnVwZGF0ZUtleVN0
b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlz
RnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXNGcm9tKGtleVN0b3JlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc0OWE4MzlhNzQ2YzZkNDQ3ZDlmNGFjN2RkMDhjMzkzY2YwOTQzYzUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCisjaW5j
bHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRl
IDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXkgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXk+IHsKK3B1
YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
czsKKworICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5U3RhdHVzIHN0YXR1cywgVmVj
dG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1cywgV1RGTW92ZShrZXlJRCks
IFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgfQorICAgIFJlZjxTaGFyZWRCdWZmZXI+IGlkQXNT
aGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtX2lkLmRh
dGEoKSwgbV9pZC5zaXplKCkpOyB9CisKKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgp
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBLZXlTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXM7IH0KKworICAgIFN0cmluZyBpZEFzU3RyaW5nKCkgY29uc3Q7CisgICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKworICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBp
ZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgor
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikg
eyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIHsgcmV0dXJuIGsu
bV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJldHVybiBrID09IGtleUlEOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBhZGRTZXNzaW9uUmVmZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2VzKys7IH0KKyAgICB2b2lkIHJlbW92ZVNl
c3Npb25SZWZlcmVuY2UoKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fbnVtU2Vzc2lvblJl
ZmVyZW5jZXMtLTsgfQorICAgIHVuc2lnbmVkIG51bVNlc3Npb25SZWZlcmVuY2VzKCkgY29uc3Qg
eyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1TZXNzaW9uUmVmZXJlbmNlczsg
fQorICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKKworICAgIEtleShLZXlTdGF0dXMgc3RhdHVz
LCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5VmFsdWUpCisg
ICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3ZlKGtleUlEKSksIG1fdmFsdWUo
V1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorCisgICAgS2V5U3RhdHVzIG1fc3RhdHVzOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX2lkOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIHVu
c2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07Cit9OworCitjbGFzcyBLZXlTdG9y
ZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzVmVjdG9yID0gQ0RNSW5zdGFuY2VTZXNz
aW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBib29sIGNvbnRhaW5zS2V5SUQoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9pZCBtZXJnZShjb25zdCBLZXlTdG9y
ZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIG90
aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1fa2V5cy5jbGVhcigpOyB9CisgICAg
Ym9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7CisgICAgYm9vbCBhZGQoUmVmUHRy
PEtleT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRyPEtleT4mKTsKKyAgICB1bnNp
Z25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNpemUoKTsgfQorICAgIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkg
Y29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBc1JlbGVhc2VkKCkgY29uc3Q7Cisg
ICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3Q7CisK
KyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0KKyAgICBhdXRvIGVuZCgpIHsg
cmV0dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gZW5kKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlzLmVuZCgpOyB9CisgICAgYXV0byByYmVnaW4oKSB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7
IH0KKyAgICBhdXRvIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQor
ICAgIGF1dG8gcmVuZCgpIHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7IH0KKyAgICBhdXRvIHJlbmQo
KSBjb25zdCB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PFJlZlB0cjxLZXk+PiBtX2tleXM7Cit9OworCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5OworCisv
LyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEphdmFTY3JpcHQgZmFjYWRlLiBUaGlz
IGNhbiBiZSB1c2VkCisvLyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0b3Jz
KS4KK2NsYXNzIENETVByb3h5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENETVByb3h5
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIE1heEtleVdhaXRUaW1l
U2Vjb25kcyA9IDVfczsKKworICAgIHZpcnR1YWwgfkNETVByb3h5KCkgPSBkZWZhdWx0OworCisg
ICAgdm9pZCB1cGRhdGVLZXlTdG9yZShjb25zdCBLZXlTdG9yZSYgbmV3S2V5U3RvcmUpOworICAg
IHZvaWQgc2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSopOworCitwcm90ZWN0ZWQ6CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNv
bnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiB0cnlXYWl0
Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIE9wdGlvbmFs
PFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OworICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKyAg
ICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgbXV0
YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKKyAgICBDRE1JbnN0YW5jZVByb3h5KiBtX2luc3Rh
bmNlOworCisgICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OworICAgIG11dGFibGUgQ29uZGl0
aW9uIG1fa2V5c0NvbmRpdGlvbjsKKyAgICAvLyBGSVhNRTogRHVwbGljYXRlZCBrZXkgc3RvcmVz
IGluIHRoZSBpbnN0YW5jZSBhbmQgdGhlIHByb3h5IGFyZSBwcm9iYWJseSBub3QgbmVlZGVkLCBi
dXQgc2ltcGxpZmllZAorICAgIC8vIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIGluIHRlcm1z
IG9mIHRocmVhZGluZyBpbnZhcmlhbnRzLgorICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9Owor
CisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5hZ2VtZW50IGNvZGUgYW5kIGZv
ciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJyZWFsIENETSIgc3RhdGUgY2hhbmdl
cyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJsaWMgQ0RNSW5zdGFuY2Ugewor
cHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJveHkqIHByb3h5KSA6IG1fY2RtUHJv
eHkoYWRvcHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0YW5jZSh0aGlzKTsgfQorICAgIHZp
cnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVh
ZCBvbmx5LgorICAgIHZvaWQgbWVyZ2VLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOworICAgIHZv
aWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmKTsKKworICAgIC8vIE1lZGlhIHBs
YXllciBxdWVyeSBtZXRob2RzIC0gbWFpbiB0aHJlYWQgb25seS4KKyAgICBSZWZQdHI8Q0RNUHJv
eHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9jZG1Q
cm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JLZXkoKSBjb25zdCB7IEFTU0VS
VChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4g
MDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsgbV9wbGF5ZXIgPSBwbGF5ZXI7IH0KKworICAgIC8vIFByb3h5IG1ldGhv
ZHMgLSBtdXN0IGJlIHRocmVhZC1zYWZlLgorICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXko
KTsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIHRyYWNrU2Vzc2lvbihjb25zdCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBzZXNzaW9u
KSB7IG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24pOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PENETVByb3h5PiBtX2NkbVByb3h5OworICAgIC8vIEZJWE1FOiBXZWFrUHRyIGZvciB0aGUgbV9w
bGF5ZXI/IFRoaXMgaXMgYWNjZXNzZWQgZnJvbSBiYWNrZ3JvdW5kIGFuZCBtYWluIHRocmVhZHMs
IGl0J3MKKyAgICAvLyBjb25jZXJuaW5nIHdlIGNvdWxkIGJlIGFjY2Vzc2luZyBpdCBpbiB0aGUg
bWlkZGxlIG9mIGEgc2h1dGRvd24gb24gdGhlIG1haW4tdGhyZWFkLCBlaD8KKyAgICAvLyBBcyBh
IENETVByb3h5LCB3ZSAqKipzaG91bGQqKiogYmUgdHVybmVkIG9mZiBiZWZvcmUgdGhpcyBwb2lu
dGVyIGV2ZXIgZ29lcyBiYWQuCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyIHsgbnVsbHB0ciB9
OyAvLyBGSVhNRTogTWFpblRocmVhZDxUPj8KKworICAgIHN0ZDo6YXRvbWljPGludD4gbV9udW1E
ZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKyAgICBWZWN0b3I8UmVmUHRyPENETUluc3RhbmNlU2Vz
c2lvbj4+IG1fc2Vzc2lvbnM7CisKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAppbmRleCA2NDg1ZGI3NWQ3ZTczMzliMTU2MWRj
NmQ1OGVmMjljOWIzMTIzNTgwLi4zOWUwNzFjMzAyZTY4OGY5M2JiMmIwYzVlMWNmNmQyZjYwMTY2
OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9j
bGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCkBAIC0zNiw2ICszNiw5IEBACiAj
aW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJh
dG9yPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC00MywzMyArNDYsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0v
LyBDbGVhcktleSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1p
bml0ZGF0YS1jZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5
c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4
MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNv
bnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNl
bmNTeXN0ZW1JZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNpemUgPSAxNjsKK25hbWVzcGFjZSB7
CiAKLWNsYXNzIENsZWFyS2V5U3RhdGUgewotICAgIHVzaW5nIEtleVN0b3JlID0gSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PjsKLQotcHVibGljOgotICAg
IHN0YXRpYyBDbGVhcktleVN0YXRlJiBzaW5nbGV0b24oKTsKK3N0YXRpYyBib29sIHJlYWRVSW50
MzIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90JiBvZmZz
ZXQsIHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwgb2Zmc2V0IDw9
IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6ZW9mKHZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVy
biBtX2tleXM7IH0KKyAgICB2YWx1ZSA9IG50b2hsKCpyZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCB1aW50MzJfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9mZnNldCArPSBzaXplb2YodmFs
dWUpOwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDbGVhcktl
eVN0YXRlPjsKLSAgICBDbGVhcktleVN0YXRlKCk7Ci0gICAgS2V5U3RvcmUgbV9rZXlzOwotfTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KIAotQ2xlYXJLZXlTdGF0ZSYgQ2xlYXJLZXlTdGF0ZTo6c2lu
Z2xldG9uKCkKK3N0YXRpYyBib29sIHJlYWRVSW50MTYoY29uc3QgdWludDhfdCogYnVmZmVyLCBz
aXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90JiBvZmZzZXQsIHVpbnQxNl90JiB2YWx1ZSkKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT4gc19zdGF0ZTsKLSAgICByZXR1
cm4gc19zdGF0ZTsKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwgb2Zmc2V0IDw9IGJ1ZmZlclNpemUp
OworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9ocygqcmVpbnRlcnByZXRfY2FzdF9wdHI8
Y29uc3QgdWludDE2X3QqPihidWZmZXIgKyBvZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gc2l6ZW9m
KHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1DbGVhcktleVN0YXRlOjpDbGVhcktl
eVN0YXRlKCkgPSBkZWZhdWx0OworLy8gQ2xlYXJLZXkgQ0VOQyBTeXN0ZW1JRC4KKy8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9lbWUtaW5pdGRhdGEtY2VuYy8jY29tbW9uLXN5c3RlbQorY29uc3Qg
dWludDhfdCBjbGVhcktleUNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVmLCAweGVj
LCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAweDUyLCAw
eGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjbGVhcktleUNlbmNTeXN0ZW1JZFNp
emUgPSBzaXplb2YoY2xlYXJLZXlDZW5jU3lzdGVtSWQpOworZW51bSB7CisgICAgQUVTMTI4Q1RS
QmxvY2tTaXplSW5CeXRlcyA9IDE2LAorICAgIENsZWFyS2V5S2V5SURTaXplSW5CeXRlcyA9IDE2
LAorICAgIENsZWFyS2V5SVZTaXplSW5CeXRlcyA9IDE2LAorfTsKKworfQogCiBzdGF0aWMgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVm
ZmVyKQogewpAQCAtODgsNyArMTAxLDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICByZXR1cm4gb2Jq
ZWN0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpT
T046Ok9iamVjdCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50
IGluIHRoZSByb290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29y
ZGluZyB0byB0aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3JtYXQuCkBAIC0xMDEsNyArMTE0LDcg
QEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PiBwYXJz
ZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjoKICAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShr
ZXlzQXJyYXkpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleT4gZGVjb2RlZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxL
ZXk+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5
c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRlY29kZWRLZXlz
XSAoY29uc3QgYXV0byYgdmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGtleU9iamVjdDsKQEAgLTExNiwxMSArMTI5LDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkgfHwg
IWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleUlERGF0YSwga2V5VmFs
dWVEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlERGF0YSwga2V5VmFsdWVE
YXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJ
RERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVlLCB7IGtleVZhbHVlRGF0
YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29k
ZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSksIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkgfSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5h
cHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwg
V1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMjEy
LDcgKzIyNSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0
S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAgaW5kZXggKz0gNDsgLy8g
S2V5SWRzQ291bnQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KLSAgICBpZiAo
KGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIGtleUlkU2l6ZSkpID49IGluaXREYXRhU2l6ZSkK
KyAgICBpZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIENsZWFyS2V5S2V5SURTaXplSW5C
eXRlcykpID49IGluaXREYXRhU2l6ZSkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAg
IGtleUlkc01hcC5zZWNvbmQgPSBpbmRleDsgLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBL
ZXlJZCBpbiBpbml0RGF0YS4KQEAgLTI1MSw5ICsyNjQsOSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoY29uc3QgU2hhcmVkQnVmZmVyJiBp
bml0RAogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxl
bWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQg
c2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0gV1RG
OjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBrZXlJZFNpemUpOworICAgICAgICBTdHJp
bmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5S2V5
SURTaXplSW5CeXRlcyk7CiAgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsK
LSAgICAgICAgaW5kZXggKz0ga2V5SWRTaXplOworICAgICAgICBpbmRleCArPSBDbGVhcktleUtl
eUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdU
Rk1vdmUoa2V5SWRzQXJyYXkpKTsKQEAgLTQ1Niw0MSArNDY5LDEzMSBAQCBPcHRpb25hbDxTdHJp
bmc+IENETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBz
ZXNzaW9uSWQpCiAgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0KIAotLy8gVGhpcyBpcyBmb3IgdGhy
ZWFkLXNhZmV0eSBkdXJpbmcgYW4gYXJjaGl0ZWN0dXJhbCBzaXR1YXRpb24gdGhhdCBpcwotLy8g
bGVzcyB0aGFuIGlkZWFsLiBUaGUgR1N0cmVhbWVyIGRlY3J5cHRvcnMgY3VycmVudGx5IG5lZWQg
dG8gaXRlcmF0ZQotLy8gYWxsIGtub3duIHNlc3Npb24ga2V5cyB0byBmaW5kIHRoZSBrZXkgZGF0
YSBmb3IgcHJpbWluZwotLy8gR0NyeXB0LiBJZGVhbGx5LCBhbGwgZGVjcnlwdGlvbiB3b3VsZCBi
ZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YKLS8vIFByb3h5Q0RNIG9iamVjdCBsaWtlIHRoaXMgb25l
LiBXaGF0IHRoZSBiYWNrZ3JvdW5kIEdTdHJlYW1lcgotLy8gdGhyZWFkIHdhcyBkb2luZyB3YXMg
Z2V0dGluZyBjb3BpZXMgKGkuZS4gcmVmKCkncykgb2YgU2hhcmVkQnVmZmVycwotLy8gY3JlYXRl
ZCBvbiB0aGUgbWFpbi10aHJlYWQuIFdpdGggdGhlIG5ldyBzYWZldHkgYXNzZXJ0aW9ucyBpbgot
Ly8gV2ViS2l0LCB3ZSBjYW4gbm8gbG9uZ2VyIGRvIHRoaXMuIEluc3RlYWQsIGNvbnZlcnQgdGhl
IHJlZmNvdW50ZWQKLS8vIFNoYXJlZEJ1ZmZlcnMgaW50byBTdHJpbmdzIHdoaWNoIGNhbiBiZSBz
YWZlbHkgY29waWVkIGFjcm9zcwotLy8gdGhyZWFkcy4KLXN0YXRpYyBQcm94eUNETUNsZWFyS2V5
OjpLZXkgaXNvbGF0ZWRLZXkoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrZXkpCisK
K0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KCkKIHsKLSAgICByZXR1cm4geyBr
ZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5z
aXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRh
LT5zaXplKCkpIH07CisgICAgZ2NyeV9jaXBoZXJfY2xvc2UobV9nY3J5SGFuZGxlKTsKIH0KIAot
Y29uc3QgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gUHJveHlDRE1DbGVhcktleTo6aXNv
bGF0ZWRLZXlzKCkgY29uc3QKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJW
ZWN0b3IoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkKIHsKLSAgICAvLyBSZXR1cm4g
dGhlIGtleXMgb2YgYWxsIHNlc3Npb25zLCBtYXkgYmUgY29waWVkIHRvIGJhY2tncm91bmQgdGhy
ZWFkcy4KLSAgICBWZWN0b3I8UHJveHlDRE1DbGVhcktleTo6S2V5PiBhbGxLZXlzIHsgfTsKLSAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKLSAgICBzaXplX3QgaW5pdGlh
bENhcGFjaXR5ID0gMDsKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENsZWFyS2V5U3RhdGU6
OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkKLSAgICAgICAgaW5pdGlhbENhcGFjaXR5ICs9
IGtleVZlY3Rvci5zaXplKCk7Ci0gICAgYWxsS2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlu
aXRpYWxDYXBhY2l0eSk7CisgICAgdWludDhfdCBjdHJbQUVTMTI4Q1RSQmxvY2tTaXplSW5CeXRl
c107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0gOCkgeworICAgICAgICAvLyBJU08v
SUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMwogCi0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3Ig
OiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tl
ZEFwcGVuZChpc29sYXRlZEtleShrZXkpKTsKKyAgICAgICAgLy8gV2hlbiBhbiA4LWJ5dGUgSVYg
aXMgaW5kaWNhdGVkLCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgOAorICAgICAgICAvLyBieXRlcyBv
ZiB0aGUgMTYgYnl0ZSBJViAoYnl0ZXMgOCB0byAxNSkgU0hBTEwgYmUgc2V0IHRvCisgICAgICAg
IC8vIHplcm8uCisgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKKyAgICAgICAgbWVtY3B5
KGN0ciwgaW5wdXQuaXYsIDgpOworICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoY3RyLCBpbnB1
dC5pdiwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lw
aGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9nY3J5SGFuZGxlLCBjdHIsIENsZWFyS2V5
SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJL
ZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJF
cnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGFsbEtl
eXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1Nl
dERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyBG
SVhNRTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3RpbGwgZXhw
b3NpbmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0IEFQST8g
VGhlc2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3QgYSBodWdl
IGRlYWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAgIGtleUlE
VmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBhdXRvIGtl
eURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0YSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlf
Y2lwaGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+c2l6
ZSgpKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9S
KGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Q
cm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0JiBp
bikKK3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVs
bC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1
ZmZlclNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBn
Y3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5l
bmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBn
cGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVk
IGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZm
ZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7CisgICAg
d2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJT
aXplSW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzID0g
MDsKKyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisg
ICAgICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsKKyAgICAg
ICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJz
YW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNh
bXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4g
c3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQz
MihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0
ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVz
KSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0g
Y291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1wbGUgYXQg
aW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAg
ICAgICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJT
aXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBub3Qgc3Vy
ZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAgICAgIExP
RyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAoJWx1IGJ5
dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtQ2xlYXJC
eXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJC
eXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNh
bXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5
dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0g
JXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBs
ZUluZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVy
U2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICAgICAg
aWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5
SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0
LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5
cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVkQnVmZmVy
Qnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNE
ZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7Cisg
ICAgaWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNyeXB0aW9u
S2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0Lmlz
U3Vic2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNEZWNyeXB0
RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6
ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29w
ZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NU
UiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJv
eHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJlcnJvcihl
cnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5vdCBnZXQg
dGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KIH0KIAogQ0RNSW5z
dGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFk
b3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAgICA6IENETUluc3RhbmNlUHJveHko
bmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQogCkBAIC01MzUsMzYgKzYzOCw5IEBA
IGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5U3lzdGVtKCkgY29uc3QKIAog
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vz
c2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0
cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBrZXlJRERhdGEtPnRv
SGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6
OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwg
a2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RNSW5zdGFuY2VDbGVh
cktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKLSAgICBBU1NFUlQo
azIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SUREYXRhID09ICprMi5rZXlJRERh
dGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYg
azEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsx
LmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAgICBpZiAoazEua2V5
SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBr
MS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOwotCi0gICAgcmV0dXJu
IG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5kYXRhKCksIGsxLmtl
eUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBuZXdTZXNz
aW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KCp0aGlzKSk7Cisg
ICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdTZXNzaW9uOwogfQog
CiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNl
VHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYm
IGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTU3Miw2ICs2NDgsOCBA
QCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNl
VHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1aW50MzJfdCBzX3Nlc3Npb25J
ZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAKKyAgICBtX3Nlc3Npb25JRCA9
IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSkKICAgICAgICAgaW5pdERh
dGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YS5nZXQoKSk7CiAKQEAg
LTU3OSwxOCArNjU3LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVl
c3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAgICAgIGluaXRE
YXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0RGF0YS5nZXQoKSk7CiAKICAg
ICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0gV1RGTW92ZShpbml0
RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1ZV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpXSgpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBTdHJpbmc6Om51bWJlcihz
ZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwgU3VjY2VlZGVkKTsKICAgICAg
ICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vu
c2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZm
ZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0
Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMu
CiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10o
Ym9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgY2hhbmdl
ZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoCkBAIC02MDQsNTIgKzY4MCwyMyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7
CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNl
c3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJyZW50bHkgY29u
dGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtl
eXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgq
cm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Igb2YgS2V5IG9i
amVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMg
c3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVu
c3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wga2V5c0NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7
Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdp
dGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtl
eVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAgWyZkZWNv
ZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5Owot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlE
ICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hp
bmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRL
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVw
ZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtleSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFw
cGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBrZXlzQ2hhbmdl
ZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykpOwogCi0gICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMi
LCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
c2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8S2V5U3Rh
dHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAg
ICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6OnNvcnQoa2V5VmVj
dG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAgIEtleVN0YXR1c1Zl
Y3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtl
eS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNoYW5nZWRLZXlzID0g
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pT
S2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwpA
QCAtNjU3LDQ3ICs3MDQsMjcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICB9CiAKICAg
ICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3JtYXRpb24gYW5kIHVz
ZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQuCi0gICAgICAgIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lvbklkKTsKKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xl
ZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7
CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5vIGZvcm1hdCB3YXMg
cmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVw
ZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vzc2lvbklkLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3Vj
Y2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0
IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2Ug
YSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2
b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgotICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9wdGlvbmFsPEtleVN0
YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzLCBTZXNzaW9u
TG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
Ci0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3ZlKGV4aXN0aW5nS2V5
cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfTsKLQotICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9y
IG9iamVjdCwgcmVwcmVzZW50aW5nIGFsbCB0aGUga25vd24ga2V5cyBmb3IgdGhpcyBzZXNzaW9u
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgewotICAgICAgICBh
dXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAgICBh
dXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKFdURjo6bnVsbG9wdCwgRmFpbGVk
LCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGEpOworICAgIEFTU0VSVChzZXNzaW9u
SWQgPT0gbV9zZXNzaW9uSUQpOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3Ig
PSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgY2FsbE9uTWFp
blRocmVhZChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksICZrZXlTdGF0dXNWZWN0b3JdKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRv
JiBrZXlWZWN0b3IgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBl
bmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERh
dGEsIGtleS5zdGF0dXMgfSk7Ci0gICAgfQogCi0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3Zl
KGtleVN0YXR1c1ZlY3RvciksIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsK
KyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAg
IH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24o
Y29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTcxMyw3
ICs3NDAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24o
Y29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwogCiB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwg
TGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAg
ICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlz
cGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgorICAg
IEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworCiAgICAgYXV0byBkaXNwYXRjaENh
bGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10oS2V5U3RhdHVzVmVjdG9yJiYga2V5
U3RhdHVzVmVjdG9yLCBPcHRpb25hbDxSZWY8U2hhcmVkQnVmZmVyPj4mJiBtZXNzYWdlLCBTdWNj
ZXNzVmFsdWUgc3VjY2VzcykgewogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgKQEAgLTcy
NywzNSArNzU1LDE3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNl
c3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAKICAgICAvLyBDb25zdHJ1
Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyByZWxlYXNlZCBrZXlz
LCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVsZWFzZScgZm9ybWF0
LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAgS2V5U3RhdHVzVmVj
dG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzUmVsZWFzZWQoKTsKICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsKLSAgICAgICAgLy8gUmV0cmll
dmUgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBzZXNzaW9uIElELCBiYWlsaW5nIGlmIG5vbmUg
aXMgZm91bmQuCi0gICAgICAgIGF1dG8mIGtleXMgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24o
KS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlzLmZpbmQoc2Vzc2lvbklkKTsKLSAgICAg
ICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2so
S2V5U3RhdHVzVmVjdG9yIHsgfSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6OkZhaWxlZCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXRyaWV2ZSB0
aGUgS2V5IHZlY3RvciwgY29udGFpbmluZyBhbGwgdGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbiwg
YW5kCi0gICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSBrZXkgbWFwIGVudHJ5IGZvciB0aGlzIHNl
c3Npb24uCi0gICAgICAgIGF1dG8ga2V5VmVjdG9yID0gV1RGTW92ZShpdC0+dmFsdWUpOwotICAg
ICAgICBrZXlzLnJlbW92ZShpdCk7Ci0KLSAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0
dXNWZWN0b3Igb2JqZWN0LCBwYWlyaW5nIGtleSBJRHMgd2l0aCB0aGUgJ3JlbGVhc2VkJyBzdGF0
dXMuCi0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAg
ICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFy
ZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIEtleVN0YXR1czo6UmVsZWFz
ZWQgfSk7Ci0KICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXByZXNlbnRzIHRoZSAn
bGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFycmF5CiAgICAgICAg
IC8vIG9mIGJhc2U2NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlzIHRoYXQgd2VyZSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJvb3RPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIGFycmF5
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LmtleUlERGF0YS0+c2l6ZSgp
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0gICAgICAgICAgICAg
ICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5LmtleUlERGF0YS0+
ZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5LmtleUlERGF0YS0+c2l6ZSgpKSkpOwor
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3JlKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhXVEY6
OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCkuc2l6ZSgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdU
Rk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNzY2LDYgKzc3Niw3IEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkLCBMaWNlCiAgICAgICAgIG1lc3NhZ2UgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShtZXNz
YWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsKICAgICB9CiAKKyAg
ICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1v
dmUoa2V5U3RhdHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZlcj4oKm1lc3NhZ2UpLCBTdWNjZXNz
VmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCmluZGV4IDg1
YjMxOWIxYTM4YzEyMTY5OTE5NzViODAxOWFkMmIxNmIzNmMxNDcuLjhjMmZkN2VlMWQwZDBhNWZm
OTYyYjMyMjU2ZDFlZDBlNGQxOGMzMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaApAQCAt
MzEsMTAgKzMxLDEyIEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIAogI2luY2x1ZGUg
IkNETUZhY3RvcnkuaCIKLSNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgogI2luY2x1ZGUgIkNETUlu
c3RhbmNlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNETVByaXZhdGUuaCIKKyNpbmNsdWRlICJDRE1Q
cm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGdjcnlwdC5oPgor
I2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNzcsMjcgKzc5LDEzIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+
IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xh
c3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0g
ICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0
YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVl
RGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlDRE1DbGVhcktleSgpID0gZGVmYXVs
dDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtleXMoKSBjb25zdDsKLXByaXZhdGU6
Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsKLQotY2xhc3MgQ0RNSW5zdGFuY2VD
bGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwgcHVibGljIENhbk1ha2VXZWFrUHRy
PENETUluc3RhbmNlQ2xlYXJLZXk+IHsKK2NsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwg
OiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3Rh
bmNlQ2xlYXJLZXk+IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAg
dmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwogCisgICAgLy8gQ0RNSW5zdGFuY2UKICAg
ICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVhcktleTsgfQotCiAgICAgU3VjY2Vzc1ZhbHVl
IGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0
aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldERpc3RpbmN0aXZlSWRlbnRpZmllcnNB
bGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRQZXJzaXN0ZW50U3RhdGVB
bGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3ICs5Myw5MSBAQCBwdWJsaWM6CiAgICAgU3Vj
Y2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAg
Y29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0KLSAgICBzdHJ1Y3QgS2V5IHsK
LSAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzOwotICAgICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlJRERhdGE7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGtleVZhbHVlRGF0YTsKLQotICAgICAgICBTdHJpbmcga2V5SURBc1N0cmluZygpIGNvbnN0
OwotICAgICAgICBTdHJpbmcga2V5VmFsdWVBc1N0cmluZygpIGNvbnN0OwotCi0gICAgICAgIGJv
b2wgaGFzU2FtZUtleVZhbHVlKGNvbnN0IEtleSAmb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChrZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgQVNTRVJUKG90aGVyLmtleVZh
bHVlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gKmtleVZhbHVlRGF0YSA9PSAqb3RoZXIua2V5
VmFsdWVEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHdvIGtleXMgYXJlIGVxdWFsIGlm
IHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5IHZhbHVlIGFuZCBzdGF0dXMuCi0g
ICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZr
Mik7Ci0gICAgICAgIC8vIEtleSdzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcywgZmlyc3QgYnkg
c2l6ZSwgdGhlbiBieSBjb250ZW50cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yIT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIShvcGVyYXRvcj09
KGsxLCBrMikpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdCBLZXkgJmsx
LCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I9PShrMSwgazIpICYmICFvcGVyYXRv
cjwoazEsIGsyKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEtleSAm
azEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj4oazEsIGsyKTsgfQotICAgICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsg
cmV0dXJuICFvcGVyYXRvcjwoazEsIGsyKTsgfQotICAgIH07Ci0KLSAgICBSZWZQdHI8UHJveHlD
RE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm94eUNETTsgfQotCi1wcml2
YXRlOgotICAgIFJlZlB0cjxQcm94eUNETT4gbV9wcm94eUNETTsKIH07CiAKIGNsYXNzIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNlU2Vzc2lvbiwg
cHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5PiB7CiBwdWJs
aWM6CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoQ0RNSW5zdGFuY2VDbGVhcktleSYg
cGFyZW50KQorICAgICAgICA6IG1fcGFyZW50SW5zdGFuY2UocGFyZW50KSB7IH0KICAgICB2b2lk
IHJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5
cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmKSBmaW5h
bDsKICAgICB2b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIGNv
bnN0IFNoYXJlZEJ1ZmZlciYsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2
b2lkIGxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgY2xvc2VTZXNzaW9uKGNv
bnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25E
YXRhQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29u
c3QgU3RyaW5nJikgZmluYWw7Citwcml2YXRlOgorICAgIFN0cmluZyBtX3Nlc3Npb25JRDsKKyAg
ICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNlOworICAgIEtleVN0b3JlIG1f
a2V5U3RvcmU7Cit9OworCisvLyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNv
ZGUgdGhyZWFkcyBzaG91bGQgdXNlIHRvIG1ha2UgdXNlIG9mIGEKKy8vIHBsYXRmb3JtIENETSBt
b2R1bGUuCitjbGFzcyBDRE1Qcm94eUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETVByb3h5LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlDbGVhcktleSwgV2Vha1B0ckZhY3RvcnlJbml0
aWFsaXphdGlvbjo6RWFnZXI+IHsKK3B1YmxpYzoKKyAgICBDRE1Qcm94eUNsZWFyS2V5KENETUlu
c3RhbmNlQ2xlYXJLZXkmIGluc3RhbmNlKQorICAgICAgICA6IG1fY2RtSW5zdGFuY2UoaW5zdGFu
Y2UpCisgICAgeworICAgICAgICAvLyBGb3Igbm93IHdlIGRvbid0IHVzZSB0aGlzIGxpbmsgYmFj
ayB0byB0aGUgIm1haW4tdGhyZWFkIGluc3RhbmNlIiwKKyAgICAgICAgLy8gYnV0IGhhdmluZyB0
aGUgY29ubmVjdGlvbiByZWFkeSBtYWRlIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSB1c2VmdWwK
KyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgVU5VU0VEX1BBUkFNKG1fY2RtSW5z
dGFuY2UpOworICAgICAgICBpbml0aWFsaXplR2NyeXB0KCk7CisgICAgfQorICAgIHZpcnR1YWwg
fkNETVByb3h5Q2xlYXJLZXkoKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgbGFjayBvZiBj
b25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJlZEJ1ZmZlcnMsCisgICAgLy8gVmVjdG9yPGNoYXI+J3Mg
YW5kIHt1aW50OF90KixzaXplX3R9IGlkaW9tcyBmb3IgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YK
KyAgICAvLyBieXRlcy4gRml4IHRoYXQgc29tZWhvdy4gTm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBk
YW5nZXJvdXMgc2luY2UKKyAgICAvLyB0aGV5J3JlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBj
bGFzcyBtdXN0IG1haW50YWluCisgICAgLy8gdGhyZWFkLXNhZmV0eSwgYnV0IG1heWJlIFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291bGQgYmUKKyAgICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2
ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJzIGZvciBkcm9wcGluZyBpbnRvCisgICAgLy8gaXRlcmF0
b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3YXJlIGNvbnRhaW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2Vu
Y0RlY3J5cHRDb250ZXh0IHsKKyAgICAgICAgLy8gRklYTUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBm
aWVsZHMgaW4gbm9uLWNvcGllZCB0eXBlcy4KKyAgICAgICAgY29uc3QgdWludDhfdCoga2V5SUQ7
CisgICAgICAgIHNpemVfdCBrZXlJRFNpemVJbkJ5dGVzOworCisgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIGl2OworICAgICAgICBzaXplX3QgaXZTaXplSW5CeXRlczsKKworICAgICAgICB1aW50OF90
KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAgICAgIHNpemVfdCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5C
eXRlczsKKworICAgICAgICAvLyBGSVhNRTogR1N0cmVhbWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0
LgorICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGdldCByaWQgb2YgdGhlIHNwZWNpZmljIGRhdGEg
bGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQgYmVmb3JlCisgICAgICAgIC8vIGFzc2lnbmluZyBpdCBo
ZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVjdG9yPHNpemVfdD4gdGhhdCBpcyBhIHNlcmllcyBvZgor
ICAgICAgICAvLyBjbGVhci9kZWNyeXB0ZWQvY2xlYXIvZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2
ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVz
ZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVhci9kZWNyeXB0ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWly
IGNvdWxkIGV2ZW4KKyAgICAgICAgLy8gYmVjb21lIGEgc3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1
bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1wbGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MzAKKyAgICAgICAgY29uc3QgdWludDhfdCogc3Vi
c2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRl
czsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNh
bXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8v
IEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQ
PworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBv
ZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVt
dXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5
cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisK
KyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBp
biB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUg
cHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElz
IGluIFdlYkNvcmU/CisgICAgYm9vbCBjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVj
cnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNE
ZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNy
eXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0
Q29udGV4dCYpOworCisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9jZG1JbnN0YW5jZTsKKwor
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBzb21ldGhpbmcgaW4gV2ViQ29y
ZSBmb3IgY3J5cHRvLi4uCisgICAgZ2NyeV9jaXBoZXJfaGRfdCBtX2djcnlIYW5kbGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA0ZmM2Nzg3ZGQ4ZDkwN2NhZDZhMjc3ZjM5YjFlZDMyZWQ2NzlhNmQ4
Li4xOGFhYTYwYWE3OTc0YTI1MDkzMDg2ZGIxZWYzMmY5N2FjZjNjNWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKLSNpbmNsdWRlICJDRE1DbGVhcktleS5oIgogI2lu
Y2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJDRE1SZXN0cmlj
dGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgpAQCAtMjEzLDcgKzIxMiw2IEBA
IHN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQog
CiB2b2lkIENETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJGYWN0b3JpZXMoVmVjdG9yPENETUZh
Y3RvcnkqPiYgZmFjdG9yaWVzKQogewotICAgIGZhY3Rvcmllcy5hcHBlbmQoJkNETUZhY3RvcnlD
bGVhcktleTo6c2luZ2xldG9uKCkpOwogICAgIGZhY3Rvcmllcy5hcHBlbmQoJkNETUZhY3RvcnlG
YWlyUGxheVN0cmVhbWluZzo6c2luZ2xldG9uKCkpOwogCiAgICAgSW5pdERhdGFSZWdpc3RyeTo6
c2hhcmVkKCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5n
OjpzaW5mTmFtZSgpLCB7IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRpemVTaW5m
LCBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTaW5mIH0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlT
dHJlYW1pbmdBVkZPYmpDLmgKaW5kZXggNDc3MmZjYjMyMzZkMzkwMjk1MzRjNDZmYjRmMTAyOTk3
ODNlNmNiNi4uYjExZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRkZTg2ZjNkZDk5NGNjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5oCkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBTdWNjZXNz
VmFsdWUgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CiAg
ICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmluYWw7
CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwot
ICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxs
cHRyOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGEx
MmVmNGY2ZGJhNmYwMTVlNzYxNTFmMTQ3Y2M2YzA3OWU2MmRhN2UuLmEzOTg4MDhhMmNlYjBlOTU3
MGJkZGQ4YWUwNmQ4NjVkMDc1MWI1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNzg4LDYgKzE3ODgsNTAgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQog
ICAgIH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSog
bWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIEluaXREYXRh
IGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11
dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJmb3Vu
ZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3Rl
Y3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRz
LmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQg
OiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciog
ZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihl
dmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAg
ICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAg
ICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50
LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5pdERhdGE7Cit9CisK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCgp
Cit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cGlwZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0aW5nIGZvciBhIENE
TSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2Fp
dGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFs
c2U7CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xkTG9jayht
X2NkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9IG1fY2RtQXR0YWNo
bWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3MsIFt0aGlzXSgp
IHsKKyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogewog
ICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9D
T0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0MSArMTg2Nyw5IEBA
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBpZiAo
IWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0t
aWQiKSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEdTVF9F
UlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVl
ZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0tcHJlZmVy
cmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7Ci0KLSAgICAg
ICAgSW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZl
bnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAgICBHU1RfVFJB
Q0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxl
IiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0
ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAo
YXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBnc3Rf
ZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZk
YXRhLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7ZXZlbnRL
ZXlTeXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25F
dmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3Zl
KGluaXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0
aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0g
ZmFsc2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9
IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAgIGRpZENETUF0dGFj
aCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4
LCA0X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNDRE1BdHRhY2hlZCgp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlkQ0RNQXR0YWNo
ICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0o
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQocGFy
c2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIGJvb2wg
aXNDRE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAgICAgIGlmIChpc0NE
TUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5r
ZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJl
ZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZCht
X2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgg
a2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5k
YXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3Nh
Z2UpKTsKIApAQCAtMTg2NSwxMCArMTg3NywxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAg
ICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxl
X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcs
IHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29u
dGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNE
TSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HX09C
SkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBubyBDRE0gYXZhaWxh
YmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMSw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAg
ICAgICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgIGdzdF9t
cGVndHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2VuZGlmCi0jaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNf
bmFtZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1rZXkgbWVzc2FnZSBm
cm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgICAgICAgICAgc2V0
V2FpdGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZGVjcnlwdG9y
cyBzaG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIgYmVpbmcgY3JlYXRl
ZCBhbmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5IGFyZSBub3QgYW5k
IGN1cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYWtlIHRoaXMg
dmVyeSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ugc29vbiBhbmQgaXQg
ZG9lcyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhpbmcgdGhhdCBjb3Vs
ZCBiZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUgbWVhbnRpbWUsIGZv
cmNlIGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQuCi0gICAgICAgICAg
ICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAgICAgfSBlbHNlIGlm
IChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktcmVjZWl2ZWQiKSkg
ewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLWtleS1yZWNl
aXZlZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0g
ICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAgfQogI2VuZGlmCiAg
ICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiaHR0cC1o
ZWFkZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBy
b2Nlc3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKQEAg
LTM3MjgsMTQgKzM3MjgsMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNk
bUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKIAotICAgIEdSZWZQdHI8
R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0t
aW5zdGFuY2UiLCBGQUxTRSkpOworICAgIG1fY2RtSW5zdGFuY2UgPSByZWludGVycHJldF9jYXN0
PENETUluc3RhbmNlUHJveHkqPigmaW5zdGFuY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2Rt
SW5zdGFuY2UpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFBsYXllcihtX3BsYXllcik7CisKKyAg
ICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3
KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1
Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7Ci0g
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1pbnN0YW5jZSIsIEdf
VFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpLCBudWxscHRyKTsK
KyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLXByb3h5IiwgR19U
WVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCksIG51bGxwdHIpOwogICAg
IGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBj
b250ZXh0LmdldCgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3Rh
bmNlLT5wcm94eUNETSgpLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9j
ZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9jZG1B
dHRhY2htZW50TXV0ZXgpOwogICAgIC8vIFdlIG11c3Qgbm90aWZ5IGFsbCB3YWl0ZXJzLCBzaW5j
ZSBzZXZlcmFsIGRlbXV4ZXJzIGNhbiBiZSBzaW11bHRhbmVvdXNseSB3YWl0aW5nIGZvciBhIENE
TS4KQEAgLTM3NTcsNyArMzc2MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKICAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcgQ0RNIGluc3RhbmNlICVwLCBz
ZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKICAgICBtX2NkbUlu
c3RhbmNlID0gbnVsbHB0cjsKIAotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOworICAg
IEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXco
ImRybS1jZG0tcHJveHkiLCBGQUxTRSkpOwogICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIH0KIApAQCAtMzc5
MCw1MSArMzc5MywxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
UHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRhdGFF
bmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2FpdGlu
Z0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ug
b3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUg
c3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9yS2V5
ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdGb3JL
ZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAoaXNXYWl0
aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYmIHRo
aXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5n
Rm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5
IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBt
X3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICghbV9waXBl
bGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFuY2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihn
c3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19l
bXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+
PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5
KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVy
eSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RB
VEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBp
cyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFu
ZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRl
Y3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJh
dG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3Iu
Z2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+
IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VM
RU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVy
eSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJL
SVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShl
bGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0g
ICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAg
ICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAg
ICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAg
ICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAg
ICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVz
dWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJB
Q0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29s
Rm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyYmI1NDFh
MzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLjUyMWIyMGQxMWNjOGRkOTRiZTI4NGQ3
NDY5OWNkMjcxN2I0ZTA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNT
ZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2VuZGlmCisKIHR5cGVkZWYg
c3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1Y3Qg
X0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0
IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVudE11dGV4OwogICAgIENv
bmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVmUHRyPGNvbnN0IENETUlu
c3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVByb3h5PiBtX2Nk
bUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFjY2Vz
cyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1f
aGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDggQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NkbUluc3RhbmNlOyB9CiAg
ICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKICAgICB2b2lkIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0V2Fp
dGluZ0ZvcktleShib29sKTsKKyAgICBJbml0RGF0YSBwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rp
b25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICBib29sIHdhaXRGb3JDRE1BdHRhY2htZW50KCk7
CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1dHRpbmdEb3duOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVh
bWVyLmNwcAppbmRleCBkOGMwMjU0ZmYxNDMwM2M1ZTE4OTczYmU0ZjIyMWFlN2MwZTkzNGE5Li5i
NGFjNTUxNWJlMDU0MmRiYzhiY2MwMmRiZjI2ZDM2Yzc5NzVhNGQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApA
QCAtMzcsMTIgKzM3LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdF
QktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlIHsKLSAgICBSZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0g
ICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+
IGNkbVByb3h5OwogfTsKIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGlj
IGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94
eT4pOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUs
IHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NU
X0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVi
dWdfY2F0ZWdvcnkpOwpAQCAtODQsNyArODMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAog
CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3Mg
PSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3Mt
PnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVV
SUQ7Ci0gICAgY2VuY0NsYXNzLT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRS
KGhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBH
U1RfREVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5
cHQgPSBHU1RfREVCVUdfRlVOQ1BUUihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkp
OwpAQCAtOTMsNjEgKzkyLDMyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlf
ZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9p
ZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAg
IHNlbGYtPnByaXYgPSBwcml2OwogICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKCk7Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVy
X29wZW4oJihwcml2LT5oYW5kbGUpLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01P
REVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBn
cGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQog
CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3Qp
OwogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnBy
aXY7Ci0gICAgZ2NyeV9jaXBoZXJfY2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQo
R19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhh
bmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYs
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVk
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94
eT4gY2RtUHJveHkpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NL
X0RFQ1JZUFQoc2VsZikpOwotICAgIHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQ
cm94eUNETUNsZWFyS2V5Kj4ocHJveHlDRE0uZ2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94
eUNETTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVh
cktleSo+KGNkbVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAK
LXN0YXRpYyBib29sIGZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKiBwcml2LCBjb25zdCBTdHJpbmcmJiBrZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZl
ciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1
YnNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5n
IGtleVZhbHVlOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+
aXNvbGF0ZWRLZXlzKCkpIHsKLSAgICAgICAgaWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsK
LSAgICAgICAgICAgIGtleVZhbHVlID0ga2V5LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRp
b24ga2V5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5
VmFsdWUuc2l6ZUluQnl0ZXMoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJv
cl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hh
cmFjdGVyczgoKSwga2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChwcml2LCAiZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJy
b3IoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQorICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBU
KHNlbGYpKTsKIAotc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVm
ZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZl
ciogc3ViU2FtcGxlc0J1ZmZlcikKLXsKLSAgICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIm5vIElWIGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIg
fHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTE1NywyNyArMTI3LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZ
X1NJWkVdOwotICAgIGlmIChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAg
bWVtc2V0KGN0ciArIDgsIDAsIDgpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZl
ci0+ZGF0YSgpLCA4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZm
ZXItPnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVk
SVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJy
b3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwg
Q0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVy
cm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIg
dG8gZGVjcnlwdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBt
YXBwZWRLZXlJZEJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlE
QnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVy
Iik7CkBAIC0xOTAsNzIgKzEzOSwyOSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmco
bWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwot
Ci0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0g
MDsKLQotICAgIGlmICghc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUg
ZW5jcnlwdGlvbi4KLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUg
ZW5jcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsK
LQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAo
bWFwcGVkQnVmZmVyLT5zaXplKCkpIHsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9j
aXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRC
dWZmZXItPnNpemUoKSwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAg
ICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0
aW9uIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBu
dWxsLgotICAgIGlmICghc3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJFcnJvciwgdGhlIHN1YlNhbXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAg
ICBhdXRvIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6
OmNyZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVk
U3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIEdVbmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRl
cl9uZXcobWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVm
ZmVyLT5zaXplKCkpKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQs
IHNpemU6ICV6dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGls
ZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICBndWludDE2IG5C
eXRlc0NsZWFyID0gMDsKLSAgICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0g
ICAgICAgIGlmIChzYW1wbGVJbmRleCA8IHN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBp
ZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0Ns
ZWFyKQotICAgICAgICAgICAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShy
ZWFkZXIuZ2V0KCksICZuQnl0ZXNFbmNyeXB0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAidW5zdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5
dGVzRW5jcnlwdGVkID0gbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAg
fQotCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAt
ICVodSBieXRlcyBjbGVhciAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBt
YXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5
dGVzQ2xlYXI7Ci0gICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5
cHRlZCAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVm
ZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0
aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9y
KSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBp
bmRleCAldSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9y
KGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0
cjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlD
bGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9
IG1hcHBlZEtleUlkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVz
ID0gbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZC
dWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZl
ci0+c2l6ZSgpOworICAgIGNvbnRleHQuZW5jcnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5k
YXRhKCk7CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1
ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50
OworICAgIGlmICghc3Vic2FtcGxlQ291bnQpCisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1
ZmZlciA9IG51bGxwdHI7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVm
ZmVyKTsKKyAgICAgICAgbWFwcGVkU3Vic2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlcjo6Y3JlYXRlKHN1YnNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAg
IGlmICghbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVm
ZmVyID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1
YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHkt
PmNlbmNEZWNyeXB0KGNvbnRleHQpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4
IDM2ODNkMDQ3NDg2MGY2ZWY4MTdmMzFjZGMxNWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlk
YzJhMTYyNDRjMDc5ODAzNzQ3YzMwNDEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cApAQCAtMjUsMzQgKzI1LDM0IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBV
U0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFt
ZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRl
IDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29y
ZTo6UHJveHlDRE07Cit1c2luZyBXZWJDb3JlOjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90
ZWN0aW9uRXZlbnQ7Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtl
eVJlY2VpdmVkIHsgZmFsc2UgfTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9Owot
ICAgIExvY2sgbXV0ZXg7Ci0gICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RN
UHJveHk+IGNkbVByb3h5OworCisgICAgTG9jayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29u
ZGl0aW9uIGNkbUF0dGFjaG1lbnRDb25kaXRpb247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNl
Y29uZHMgTWF4U2Vjb25kc1RvV2FpdEZvckNETVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRy
YW5zaXRpb24pOwogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENh
cHMqIHRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0
Q2FwcyosIEdzdENhcHMqKTsKIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2Uo
R3N0QmFzZVRyYW5zZm9ybSosIEdzdEJ1ZmZlciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVu
dEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4g
cXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5
Kik7Ci1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCos
IEdzdENvbnRleHQqKTsKIAotCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRp
YV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVn
X2NhdGVnb3J5CiAKQEAgLTc2LDcgKzc2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAg
ICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIo
dHJhbnNmb3JtQ2Fwcyk7CiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25f
cGFzc3Rocm91Z2ggPSBGQUxTRTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQg
PSBHU1RfREVCVUdfRlVOQ1BUUihzaW5rRXZlbnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3Jt
Q2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKSk7CiB9CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMg
R3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdz
dEJ1ZmZlciogYnVmZmVyKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2
LT5tdXRleCk7CiAKLSAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQg
eWV0LiBXYWl0IGZvciBpdC4KLSAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBm
b3IgaXQiKTsKLSAgICAgICAgaWYgKEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1Rf
U1RBVEVfUEFVU0VEIHx8IChHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBH
U1RfU1RBVEVfVk9JRF9QRU5ESU5HICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2Vs
ZikpIDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgImNhbid0IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3Rh
dGUiKTsKLSAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIFNlbmQgImRybS1jZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRv
IHRoZSBwbGF5ZXIgdG8gcmVzZW5kIHRoZSBDRE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGlu
Zm9ybSB3ZSBhcmUgd2FpdGluZyBmb3Iga2V5LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5
ID0gdHJ1ZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNl
bGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0
dXJlX25ld19lbXB0eSgiZHJtLXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRp
b24ud2FpdEZvcihwcml2LT5tdXRleCwgU2Vjb25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAg
IHJldHVybiBwcml2LT5rZXlSZWNlaXZlZDsKKyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRz
IHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlm
ICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RN
IG5vdCBhdmFpbGFibGUsIGdvaW5nIHRvIHdhaXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNk
bUF0dGFjaG1lbnRDb25kaXRpb24ud2FpdEZvcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1h
eFNlY29uZHNUb1dhaXRGb3JDRE1Qcm94eSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBw
cml2LT5jZG1Qcm94eTsKICAgICAgICAgfSk7Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2
ZWQpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxh
YmxlIik7CisgICAgICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsK
ICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIp
OwotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVt
ZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1l
bnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVj
ZWl2ZWQiKSkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWls
YWJsZSB3aXRoIGFkZHJlc3MgJXAiLCBwcml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAg
ICAgR3N0UHJvdGVjdGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxH
c3RQcm90ZWN0aW9uTWV0YSo+KGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIp
KTsKQEAgLTIwNywzMiArMTk3LDMwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUlu
UGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRh
ZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgIH0KKyAgICBhdXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1
cm4gPSBtYWtlU2NvcGVFeGl0KFtidWZmZXIsIHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOworICAgIH0pOwogCiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlm
ICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUi
LCAmaXZTaXplKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8g
Z2V0IGl2X3NpemUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRl
ZDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZm
ZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0
aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9
CiAKLSAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOworICAgIGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBH
U1RfRkxPV19PSzsKLSAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0
aW9uIG1ldGE6ICUiIEdTVF9QVFJfRk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAg
ICB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3Vp
bnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291
bnQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vi
c2FtcGxlX2NvdW50Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1
cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBA
IHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSog
YmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9n
ZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlm
ICghdmFsdWUpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0
byBnZXQgc3Vic2FtcGxlcyIpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAg
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAg
ICBzdWJTYW1wbGVzQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAg
ICBpZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIlRoZXJlIGlzIG5vIHN1YnNhbXBsZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJz
YW1wbGUgY291bnQiKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OworICAgICAgICB9CiAgICAgfQogCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgImtpZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVm
ZmVyIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJl
dF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdz
dF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKQEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0
Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1
ZmZlciogYnVmZmVyKQogICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVj
dGlvbk1ldGEtPmluZm8sICJpdiIpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAg
IGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEq
Pihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKICAgICB9CiAKQEAgLTI3MCw3MSArMjU5LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRy
YW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIp
CiAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xh
c3MtPmRlY3J5cHQoc2VsZiwgaXZCdWZmZXIsIGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBs
ZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJEZWNyeXB0aW9uIGZhaWxlZCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRh
KGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1
ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3Rl
Y3Rpb25NZXRhKSk7CiAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBp
c0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYpCitzdGF0aWMgYm9vbCBpc0NETVByb3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKHNlbGYpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNo
bWVudE11dGV4KTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQo
cHJpdi0+bXV0ZXguaXNMb2NrZWQoKSk7Ci0KLSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0g
ICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0g
ICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdl
IGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5
LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1l
c3NhZ2UuIEluIHRoaXMgY2FzZSB0aGF0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2lu
Y2Ugb25seSB0aGUgYXBwIChwbGF5ZXIpIGFuc3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVy
eSBpcyBnb2luZyB0byBzb2x2ZSBpdC4gQSBtZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhl
bHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMg
dGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdh
eSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlk
ZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJs
ZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVw
LCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwotICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVs
IGhlcmUuCi0gICAgICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUq
IHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVy
ZShjb250ZXh0LmdldCgpKSwgImNkbS1pbnN0YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJv
eHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9w
b2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RN
KQotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3
IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQo
KSwgcHJpdi0+cHJveHlDRE0tPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNo
ZWQiKTsKK3N0YXRpYyBDRE1Qcm94eSogZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxF
TUVOVChzZWxmKSwgImRybS1jZG0tcHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVs
bHB0cjsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24s
IGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFt
IHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8g
bWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBz
aW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1
ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxw
ZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRo
ZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkg
b2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkg
Y3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBh
bnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0
aGVyIHF1ZXJpZXMgbm9yIGJ1cworICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAg
ICBpZiAoY29udGV4dCkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwg
ImNkbS1wcm94eSIpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0g
cmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsK
KyAgICAgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQg
JXUiLCBwcm94eSwgcHJveHktPnJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBw
cm94eTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHNlbGYsICJDRE1Qcm94eSBub3QgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQot
Ci0gICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIs
IGJvb2xGb3JQcmludGluZyhwcml2LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2
LT5wcm94eUNETTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNp
bmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkK
K3N0YXRpYyB2b2lkIGF0dGFjaENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIENETVByb3h5KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7
CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsK
IAotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZF
TlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3Vs
ZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAg
IC8vIGFkZGl0aW9uIHRvIG91dC1vZi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFm
dGVyIGEKLSAgICAgICAgLy8gcHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55
IGZ1dHVyZSBwcm90ZWN0aW9uCi0gICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVk
IGJ5IHRoZSBkZW11eGVyLCBzbyB0aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhl
cmUuCi0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYg
KCFpc0NETUluc3RhbmNlQXZhaWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJObyBDRE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5j
ZG1Qcm94eSA9IHByb3h5OworICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYt
PmNkbVByb3h5KTsKKyAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RN
UHJveHlBdmFpbGFibGUoc2VsZikpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7
CisKKyAgICAgICAgQ0RNUHJveHkqIHByb3h5ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChz
ZWxmKTsKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShz
ZWxmLCBwcm94eSk7CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZl
IENETVByb3h5IGZyb20gY29udGV4dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0g
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KIAotICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnBy
b3h5Q0RNKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2Vp
dmVkIik7Ci0gICAgICAgICAgICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9y
bSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBo
YW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRp
b24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAg
IC8vIHByZWZlcnJlZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVj
dGlvbgorICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBz
byB0aGV5IG11c3QgYmUKKyAgICAvLyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1Rf
RVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVB
TV9PT0I6IHsKKyAgICAgICAgQVNTRVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVt
cHQtdG8tZGVjcnlwdCIpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxp
bmcgYXR0ZW1wdC10by1kZWNyeXB0Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94
eUlmTm90QXZhaWxhYmxlKHNlbGYpOwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwot
ICAgICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVs
dDoKQEAgLTM0NSwxNiArMzU0LDYgQEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIo
R3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0q
IHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0g
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVl
cnkpLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9D
RU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHRyYW5zLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3Jr
ZXkgJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICBy
ZXR1cm4gcHJpdi0+d2FpdGluZ0ZvcktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RS
QU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVy
eSk7Ci19Ci0KIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUKGVsZW1lbnQpOwpAQCAtMzYzLDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFu
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BB
VVNFRF9UT19SRUFEWToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5S
RUFEWSIpOwotICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHBy
aXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGlj
IHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0
KQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJL
SVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9H
RVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7
CiAKLSAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNk
bS1pbnN0YW5jZSIpKSB7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWlu
c3RhbmNlIik7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAg
ICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihn
X3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNE
TS5nZXQoKSk7CisgICAgaWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwg
ImRybS1jZG0tcHJveHkiKSkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0
cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNk
bS1wcm94eSIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50
TXV0ZXgpOworICAgICAgICBwcml2LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2Fz
dDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIs
IHByaXYtPmNkbVByb3h5LmdldCgpKTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQo
c2VsZiwgcHJpdi0+Y2RtUHJveHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oCmluZGV4IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThm
MWZhNWQuLjg1NzVhMDcxMDJiZDEzM2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4K
KyNpbmNsdWRlIDxDRE1Qcm94eS5oPgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zv
cm0uaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
NTUsOCArNTUsOCBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRD
bGFzcyB7CiAgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29u
c3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25z
ZSkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQ
cm94eUNETT4pOwotICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzQnVmZmVyKTsKKyAgICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOwor
ICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kiwg
R3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBi
dWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVm
ZmVyKTsKIH07CiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZh
Y3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEu
LmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9u
YWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Np
b25JZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6
On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUlu
c3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2
LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6
OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNl
U2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2Nr
Q0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUlu
c3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6
IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01v
Y2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1
MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNz
aW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2Nr
Q0RNIDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYg
QEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBT
dHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFs
OwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsK
LSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFr
UHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxs
b3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390254</attachid>
            <date>2020-02-10 09:10:09 -0800</date>
            <delta_ts>2020-02-10 16:18:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200210171007.patch</filename>
            <type>text/plain</type>
            <size>110217</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uNGRkZjZhZDU5MTI1NTRhYjE5MjhjNjc0OTM1ZTlj
NTE4YTE2NjU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMCBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
LgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0
ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0IHRoZWlyIHN0YXR1cyBpcy4KKworICAg
ICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhyZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVh
bCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIgcXVpcmtzLiBUaGUgdHdvIG1haW4gcHJv
YmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisgICAgICAgIGhhdmUgaW4gV2ViS2l0IGlz
IGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZyb20gYmFja2dyb3VuZAorICAgICAgICBt
ZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5hZ2VtZW50IGlzIGhvdyB0byBtYW5hZ2Ug
dGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAgICAgY29oZXJlbnQgd2l0aCBKYXZhU2Ny
aXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxlbWVudGF0aW9uLAorICAgICAgICB0aGUg
cmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFja2dyb3VuZCBtZWRpYQorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1bHQga2V5IHN0b3JlIGludGVyZmFjZSBm
b3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFzc2VzIGNhbiwgb24gcmVjZWlwdCBvZiBu
ZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJlYWwgQ0RNLCB0ZWxsIENETVByb3h5IGFi
b3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBzdGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50
ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20gdGhlcmUsCisgICAgICAgIGxldHRpbmcg
SmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8K
KyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMgd2VsbCBhcyB0aGUgbWVkaWEgZGVjb2Rl
IHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQgY29tZSBhc2tpbmcuCisKKyAgICAgICAg
QWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlzIGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcg
dGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5zdGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRoaXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5
IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAgICAgIHRocmVhZC11bnNhZmUgYWNjZXNz
IG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdlIGhhZCB0byBkbworICAgICAgICBzb21l
dGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNvbWV0aGluZyB3YXMgUHJveHlDRE0gKGEK
KyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBub3cpLCB3aGljaCB3YXMgYSBoYWNrIGFu
ZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5
IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFuZAorICAgICAgICBpdCB3aWxsIGJ5IGRl
ZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcgb2YgdGhlIGtleSBzdG9yZSBmb3IKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVycm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5k
IHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRlY3J5cHRpb24gLyBkZWNvZGUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5j
bHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVy
ZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEg
dGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29tZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2Vy
dHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiByZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAg
Zm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3Jy
eSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFz
U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0
b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0
YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQ
cm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OmlkQXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXk6OktleSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OnJlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6Q0RN
SW5zdGFuY2VQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpwcm94
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojppc1dhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UGxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnRyYWNrU2Vzc2lvbik6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFkZXIgdXRpbGl0eSBm
b3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNl
bnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEpOiBSZWZhY3RvcmVk
IHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKTogSGVscGVyIG1ldGhv
ZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1Nl
dERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qgd2lsbCBibG9jayBp
ZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20gSlMuCisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2Ft
cGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0Rl
Y3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRp
YWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJL
ZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAgICAgIENETVByb3h5
IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgor
ICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNvbW1hbmQga2V5IG1h
bmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAgIHRyYWNrU2Vzc2lv
biBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVNRQorICAgICAgICBz
ZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJhY2sgb2YgZ2VuZXJh
dGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1c2UgbmV3IGtleSBt
YW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJveHlDRE1DbGVhcktl
eTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBsb29rcyBsaWtlIHdl
IHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQg
ZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAgb3JkZXJpbmcgb24g
a2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAgICAgICBuZXcga2V5
IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICBSZW1vdmUgZGVwZW5kZW5j
eSBvbiBDRE1DbGVhcktleS5oLCBzaW5jZSBJIGhhdmVuJ3QgYWRkZWQgQ0RNUHJveHkKKyAgICAg
ICAgdG8gdGhlIEFwcGxlIGJ1aWxkIHN5c3RlbSwgYW5kIEkgZG9uJ3QgYmVsaWV2ZSB0aGV5IG5l
ZWQgQ2xlYXJLZXkKKyAgICAgICAgc3VwcG9ydD8gT3IgYXQgbGVhc3QgaXQgaXMgZmFsc2VseSBh
ZHZlcnRpc2VkIGFzIHN1cHBvcnRlZD8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oOgorICAg
ICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXJzZUluaXREYXRh
RnJvbVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVmYWN0b3JlZCBvdXQgb2Ygc3luY01l
c3NhZ2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBpbnRvCisgICAgICAgIHdhaXRGb3JD
RE1BdHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3Nh
Z2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5IGNvZGUsIGl0IHdhcyBhbGwgYnJv
a2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVuZm9yY2UgdXNlIG9mIENETUluc3Rh
bmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMgd2lsbCBiZQorICAgICAgICB1c2lu
ZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20gYmFja2dyb3VuZAorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8gdGhlIE1lZGlhUGxheWVyIGZvcgor
ICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNvIHdpcmUgdGhhdCBpbiBoZXJlIHRv
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5z
dGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNh
dGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQ
cm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBS
ZWZhY3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5
X2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFj
aGVkKToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBE
ZWxldGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBi
ZWVuIGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkp
OiBEZWxldGVkLgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQp
OgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6CisgICAg
ICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9j
bGFzc19pbml0KToKKyAgICAgICAgKHRyYW5zZm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Q
cm94eUF2YWlsYWJsZSk6CisgICAgICAgIChnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAg
ICAgICAgKGF0dGFjaENETVByb3h5KToKKyAgICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZh
aWxhYmxlKToKKyAgICAgICAgKHNpbmtFdmVudEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3Rh
dGUpOgorICAgICAgICAoc2V0Q29udGV4dCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoaXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRs
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRl
c3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3Rh
bmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RN
RmFjdG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYW5kYXRlIFVVSUQgdmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRh
dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFk
NTg3MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUs
OCBAQAogCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFj
dG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUy
NUM1IC8qIENETUZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RN
RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYx
MDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVD
RjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ0RNUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1
RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNl
c3Npb25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25U
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBA
CiAJCQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICov
LAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAog
CQkJCUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5
NEE1Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFG
NzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBG
NTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1
QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1
IC8qIENETVNlc3Npb25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uOWU2
N2FiOGY0ZTZkNTZhNDUwYzFmMjA4YjMyNzc4MmJjOTcwNzEwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTY0LDggKzE2NCw4IEBAIGlmIChFTkFCTEVfRU5D
UllQVEVEX01FRElBKQogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwor
ICAgICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKICAgICAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCi0KICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAog
ICAgICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmgKaW5kZXggYThkN2NjMTU1MjU4NDY3MzllZmRlZTZhMDM1NGQ0OGVjYWMx
MzAzNy4uOGY5ZjNlYjg3NDVjMzUyMDI4MzE0YzYwNmQyODlkNGUzZjcxYTA0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5o
CkBAIC0zOSwxNyArMzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTaGFyZWRC
dWZmZXI7Ci0KIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbjsKLWNsYXNzIFByb3h5Q0RNOwotCi0v
LyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEphdmFTY3JpcHQgZmFjYWRlLiBUaGlz
IGNhbiBiZSB1c2VkCi0vLyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0b3Jz
KS4KLWNsYXNzIFByb3h5Q0RNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFByb3h5Q0RN
PiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE0oKSA9IGRlZmF1bHQ7Ci19OwotCiBz
dHJ1Y3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbjsKIAogLy8gSmF2YVNjcmlwdCdzIGhhbmRs
ZSB0byBhIENETUluc3RhbmNlLCBtdXN0IGJlIHVzZWQgZnJvbSB0aGUKQEAgLTc3LDcgKzY3LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0o
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVh
dGVTZXNzaW9uKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgp
IGNvbnN0ID0gMDsKIAogICAgIGVudW0gY2xhc3MgSERDUFN0YXR1cyB7CiAgICAgICAgIFVua25v
d24sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9D
RE1Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjc3ODE2ODQyNmVjYTUyZWU4YzI2MjI2ZWEwMTUxZGZmYzFi
YzY4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVByb3h5LmNwcApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK
KyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgor
I2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgU3RyaW5n
IHZlY3RvclRvSGV4U3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjKQoreworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gYnl0ZSA6IHZlYykKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGFkKCcwJywgMiwgaGV4KGJ5dGUpKSk7CisgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Uge30K
KworU3RyaW5nIEtleTo6aWRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlsiLCB2ZWN0b3JUb0hleFN0cmluZyhtX2lkKSwgIl0iKTsKK30KKworU3RyaW5nIEtleTo6
dmFsdWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0
b3JUb0hleFN0cmluZyhtX3ZhbHVlKSwgIl0iKTsKK30KKworYm9vbCBLZXlTdG9yZTo6Y29udGFp
bnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIHJldHVy
biBtX2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7
CisgICAgICAgIHJldHVybiAqc3RvcmVkS2V5ID09IGtleUlEOworICAgIH0pICE9IFdURjo6bm90
Rm91bmQ7Cit9CisKK3ZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikK
K3sKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBtZXJnaW5nICV1IG5ldyBrZXlzIGlu
dG8gYSBrZXkgc3RvcmUgb2YgJXUga2V5cyIsIG90aGVyLm51bUtleXMoKSwgbnVtS2V5cygpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKSB7CisgICAgICAgIC8vIE5PVEU6IERv
IHdlIGNhcmUgdGhhdCB3ZSB3aWxsIG5vdCBhcHBlbmQgYSBrZXkgaWYgaXQgbWF0Y2hlcyBhIGtl
eSBJRAorICAgICAgICAvLyBpbiB0aGUga2V5c3RvcmUgYW5kIGhhcyBkaWZmZXJlbnQgZGF0YS4g
U2hvdWxkIHdlIG92ZXJ3cml0ZT8gV2hpY2ggaXMgIm5ld2VyIj8KKyAgICAgICAgLy8gRG9uJ3Qg
dGhpbmsgd2UgbmVlZCB0aGlzIGV4dHJhIGNvbXBsZXhpdHkuCisgICAgICAgIGlmIChtX2tleXMu
ZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeyByZXR1cm4g
KmtleSA9PSAqc3RvcmVkS2V5OyB9KSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgbV9r
ZXlzLmFwcGVuZChrZXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoZmFsc2Ug
JiYgImlnbm9yZWQgYSBrZXkgd2l0aCB0aGUgc2FtZSBJRCBhbmQgZGlmZmVyZW50IGRhdGEiKTsK
KyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleSBzdG9yZSBub3cgaGFzICV1IGtleXMiLCBu
dW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAgICAgICBM
T0coRU1FLCAiXHRFTUUgLSBDRE1Qcm94eSAtIEtleSBJRDogJXMiLCBrZXktPmlkQXNTdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5
U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1
c1ZlY3RvcigpOworICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQor
ICAgICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6
OlJlbGVhc2VkOworICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3Rv
cmU6OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAgYm9vbCBk
aWRLZXlTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykg
eworICAgICAgICBpZiAoYWRkKFdURk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRLZXlTdG9y
ZUNoYW5nZSA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKK30K
KworYm9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJvb2wgZGlk
U3RvcmVDaGFuZ2UgPSBmYWxzZTsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRl
eCA9IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5
KSB7CisgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisKKyAgICBp
ZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAg
IGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlE
SW5kZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFs
dWUoKSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJ
RCAlcyBnZXR0aW5nIGFkZGVkIHRvIGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsgICAgICAKKyAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAgICAgICBk
aWRTdG9yZUNoYW5nZSA9IHRydWU7CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9uUmVmZXJl
bmNlKCk7CisgICAgcmV0dXJuIGRpZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0b3JlOjpy
ZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBvdGhlcikKKyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jvb2wgS2V5
U3RvcmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVD
aGFuZ2VkID0gZmFsc2U7CisKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9
IG1fa2V5cy5maW5kKGtleSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVz
dGVkIHRvIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVuY2VzIiwg
a2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJlZmVyZW5j
ZXMoKSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZv
dW5kKSB7CisgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdp
dGhNYXRjaGluZ0tleUlESW5kZXhdOworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVt
b3ZlU2Vzc2lvblJlZmVyZW5jZSgpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlE
LT5udW1TZXNzaW9uUmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSByZW1vdmUga2V5IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+
aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5yZW1vdmUo
a2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5nZWQgPSB0
cnVlOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIGF0dGVtcHQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRvZXMgbm90
IGV4aXN0Iiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJu
IHN0b3JlQ2hhbmdlZDsKK30KKworY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5
VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJRCkKKyAg
ICAgICAgICAgIHJldHVybiBrZXktPnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUKGZhbHNlICYmICJrZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7Cisg
ICAgVU5SRUFDSEFCTEUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0
b3IgS2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sKKyAgICBD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAg
a2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICAvLyBGSVhNRTogVmVjdG9y
PHVpbnQ4X3Q+IHJlcHJlc2VudGF0aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUKKyAgICAgICAg
Ly8gZGF0YSBhcmUgc21hbGwgaW4gbnVtYmVyLCBzbyBwcm9iYWJseSBpdCdzIGZpbmUuCisgICAg
ICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRC
dWZmZXI+LCBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cz4geyBrZXktPmlkQXNTaGFyZWRC
dWZmZXIoKSwga2V5LT5zdGF0dXMoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0YXR1c1Zl
Y3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUm
IG5ld0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgp
OworICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsK
KyAgICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNl
dEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5
c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7Cisg
ICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5
OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0
YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAg
bV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9w
cGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1f
aW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBr
ZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVuY29u
ZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5z
IHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5nIGEg
a2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBtb3Jl
IGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9yS2V5
T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0aW5n
Rm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5aW5n
IHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tleVJl
Y2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5OjpN
YXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAgICBy
ZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVBy
b3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJp
bmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlE
KTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVz
IG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkp
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWls
YWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RNUHJv
eHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAorewor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBrZXlB
dmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
Q0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBj
b25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwg
dmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShrZXlJ
RCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wgd2Fz
V2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAgIG1f
bnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Bs
YXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIg
JiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNo
YW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVkV2Fp
dGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXllciAm
JiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0b3Jz
V2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1fbnVt
RGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIg
PSBtX3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIg
JiYgaXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5nRm9y
S2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1lcmdl
S2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBOb3Rp
ZnkgSlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1JbnN0
YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlmeWlu
ZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAgIG1f
Y2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0YW5j
ZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXNG
cm9tKGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0OWE4MzlhNzQ2YzZkNDQ3ZDlm
NGFjN2RkMDhjMzkzY2YwOTQzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUg
IkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5j
bHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXkgOiBwdWJsaWMg
UmVmQ291bnRlZDxLZXk+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1czsKKworICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUo
S2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90
PiYmIGtleVZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0
YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgfQorICAgIFJl
ZjxTaGFyZWRCdWZmZXI+IGlkQXNTaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShtX2lkLmRhdGEoKSwgbV9pZC5zaXplKCkpOyB9CisKKyAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBLZXlTdGF0dXMg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgIFN0cmluZyBpZEFzU3Ry
aW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKworICAgIC8v
IFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtl
eSB2YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9CisgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJl
dHVybiBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRTZXNzaW9uUmVmZXJl
bmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2VzKys7
IH0KKyAgICB2b2lkIHJlbW92ZVNlc3Npb25SZWZlcmVuY2UoKSB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMtLTsgfQorICAgIHVuc2lnbmVkIG51bVNlc3Np
b25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9u
dW1TZXNzaW9uUmVmZXJlbmNlczsgfQorICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKKworICAg
IEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVp
bnQ4X3Q+JiYga2V5VmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZN
b3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorCisgICAgS2V5U3Rh
dHVzIG1fc3RhdHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOworICAgIFZlY3Rvcjx1aW50
OF90PiBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07
Cit9OworCitjbGFzcyBLZXlTdG9yZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzVmVj
dG9yID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBib29sIGNv
bnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9p
ZCBtZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zy
b20oY29uc3QgS2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1f
a2V5cy5jbGVhcigpOyB9CisgICAgYm9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7
CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVm
UHRyPEtleT4mKTsKKyAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlz
LnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNB
c1JlbGVhc2VkKCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3Rh
dHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJl
Z2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7
IH0KKyAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byByYmVnaW4oKSB7IHJl
dHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmVuZCgpIHsgcmV0dXJuIG1fa2V5cy5yZW5k
KCk7IH0KKyAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tleXM7Cit9OworCitjbGFzcyBD
RE1JbnN0YW5jZVByb3h5OworCisvLyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEph
dmFTY3JpcHQgZmFjYWRlLiBUaGlzIGNhbiBiZSB1c2VkCisvLyBmcm9tIGJhY2tncm91bmQgdGhy
ZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4KK2NsYXNzIENETVByb3h5IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPENETVByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBT
ZWNvbmRzIE1heEtleVdhaXRUaW1lU2Vjb25kcyA9IDVfczsKKworICAgIHZpcnR1YWwgfkNETVBy
b3h5KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB1cGRhdGVLZXlTdG9yZShjb25zdCBLZXlTdG9y
ZSYgbmV3S2V5U3RvcmUpOworICAgIHZvaWQgc2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSop
OworCitwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2Nr
ZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiB0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9yS2V5KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgc3RhcnRlZFdhaXRp
bmdGb3JLZXkoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKKyAgICBDRE1J
bnN0YW5jZVByb3h5KiBtX2luc3RhbmNlOworCisgICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4
OworICAgIG11dGFibGUgQ29uZGl0aW9uIG1fa2V5c0NvbmRpdGlvbjsKKyAgICAvLyBGSVhNRTog
RHVwbGljYXRlZCBrZXkgc3RvcmVzIGluIHRoZSBpbnN0YW5jZSBhbmQgdGhlIHByb3h5IGFyZSBw
cm9iYWJseSBub3QgbmVlZGVkLCBidXQgc2ltcGxpZmllZAorICAgIC8vIHRoZSBpbml0aWFsIGlt
cGxlbWVudGF0aW9uIGluIHRlcm1zIG9mIHRocmVhZGluZyBpbnZhcmlhbnRzLgorICAgIEtleVN0
b3JlIG1fa2V5U3RvcmU7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBt
YW5hZ2VtZW50IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJy
ZWFsIENETSIgc3RhdGUgY2hhbmdlcyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBw
dWJsaWMgQ0RNSW5zdGFuY2UgeworcHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJv
eHkqIHByb3h5KSA6IG1fY2RtUHJveHkoYWRvcHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0
YW5jZSh0aGlzKTsgfQorICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7
CisKKyAgICAvLyBNYWluLXRocmVhZCBvbmx5LgorICAgIHZvaWQgbWVyZ2VLZXlzRnJvbShjb25z
dCBLZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUm
KTsKKworICAgIC8vIE1lZGlhIHBsYXllciBxdWVyeSBtZXRob2RzIC0gbWFpbiB0aHJlYWQgb25s
eS4KKyAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdG
b3JLZXkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5
cHRvcnNXYWl0aW5nRm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVy
KiBwbGF5ZXIpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9wbGF5ZXIgPSBwbGF5ZXI7IH0K
KworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRocmVhZC1zYWZlLgorICAgIHZvaWQg
c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRyYWNrU2Vzc2lvbihjb25zdCBSZWZQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uPiBzZXNzaW9uKSB7IG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24pOyB9CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPENETVByb3h5PiBtX2NkbVByb3h5OworICAgIC8vIEZJWE1F
OiBXZWFrUHRyIGZvciB0aGUgbV9wbGF5ZXI/IFRoaXMgaXMgYWNjZXNzZWQgZnJvbSBiYWNrZ3Jv
dW5kIGFuZCBtYWluIHRocmVhZHMsIGl0J3MKKyAgICAvLyBjb25jZXJuaW5nIHdlIGNvdWxkIGJl
IGFjY2Vzc2luZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2h1dGRvd24gb24gdGhlIG1haW4tdGhy
ZWFkLCBlaD8KKyAgICAvLyBBcyBhIENETVByb3h5LCB3ZSAqKipzaG91bGQqKiogYmUgdHVybmVk
IG9mZiBiZWZvcmUgdGhpcyBwb2ludGVyIGV2ZXIgZ29lcyBiYWQuCisgICAgTWVkaWFQbGF5ZXIq
IG1fcGxheWVyIHsgbnVsbHB0ciB9OyAvLyBGSVhNRTogTWFpblRocmVhZDxUPj8KKworICAgIHN0
ZDo6YXRvbWljPGludD4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKyAgICBWZWN0b3I8
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4+IG1fc2Vzc2lvbnM7CisKKyAgICBLZXlTdG9yZSBt
X2tleVN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAppbmRleCA2
NDg1ZGI3NWQ3ZTczMzliMTU2MWRjNmQ1OGVmMjljOWIzMTIzNTgwLi4zOWUwNzFjMzAyZTY4OGY5
M2JiMmIwYzVlMWNmNmQyZjYwMTY2OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00MywzMyArNDYsNDMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktleSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1
aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMs
IDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4
ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6
ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNp
emUgPSAxNjsKK25hbWVzcGFjZSB7CiAKLWNsYXNzIENsZWFyS2V5U3RhdGUgewotICAgIHVzaW5n
IEtleVN0b3JlID0gSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk+PjsKLQotcHVibGljOgotICAgIHN0YXRpYyBDbGVhcktleVN0YXRlJiBzaW5nbGV0b24oKTsK
K3N0YXRpYyBib29sIHJlYWRVSW50MzIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVm
ZmVyU2l6ZSwgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRf
QVJHKG9mZnNldCwgb2Zmc2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0g
b2Zmc2V0IDwgc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS2V5
U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0KKyAgICB2YWx1ZSA9IG50b2hsKCpyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MzJfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAg
IG9mZnNldCArPSBzaXplb2YodmFsdWUpOwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBO
ZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPjsKLSAgICBDbGVhcktleVN0YXRlKCk7Ci0gICAg
S2V5U3RvcmUgbV9rZXlzOwotfTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotQ2xlYXJLZXlTdGF0
ZSYgQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkKK3N0YXRpYyBib29sIHJlYWRVSW50MTYoY29u
c3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90JiBvZmZzZXQsIHVp
bnQxNl90JiB2YWx1ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0
ZT4gc19zdGF0ZTsKLSAgICByZXR1cm4gc19zdGF0ZTsKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwg
b2Zmc2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6
ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9ocygq
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDE2X3QqPihidWZmZXIgKyBvZmZzZXQpKTsK
KyAgICBvZmZzZXQgKz0gc2l6ZW9mKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1D
bGVhcktleVN0YXRlOjpDbGVhcktleVN0YXRlKCkgPSBkZWZhdWx0OworLy8gQ2xlYXJLZXkgQ0VO
QyBTeXN0ZW1JRC4KKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbWUtaW5pdGRhdGEtY2VuYy8j
Y29tbW9uLXN5c3RlbQorY29uc3QgdWludDhfdCBjbGVhcktleUNlbmNTeXN0ZW1JZFtdID0geyAw
eDEwLCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUz
LCAweDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBj
bGVhcktleUNlbmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2xlYXJLZXlDZW5jU3lzdGVtSWQpOwor
ZW51bSB7CisgICAgQUVTMTI4Q1RSQmxvY2tTaXplSW5CeXRlcyA9IDE2LAorICAgIENsZWFyS2V5
S2V5SURTaXplSW5CeXRlcyA9IDE2LAorICAgIENsZWFyS2V5SVZTaXplSW5CeXRlcyA9IDE2LAor
fTsKKworfQogCiBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNv
bnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewpAQCAtODgsNyArMTAxLDcgQEAgc3RhdGljIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1
ZmZlcikKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpP
YmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VM
aWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUg
J2tleXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSByb290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04g
ZnVydGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3Jt
YXQuCkBAIC0xMDEsNyArMTE0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjoKICAgICBpZiAo
IWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4gZGVjb2RlZEtleXM7
CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9y
bWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAog
ICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKICAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsKQEAgLTExNiwxMSArMTI5LDExIEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3Ry
aW5nKCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVS
TERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtl
eVZhbHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRh
KSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkgfSk7CisgICAg
ICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVl
RGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAo
IXZhbGlkRm9ybWF0KQpAQCAtMjEyLDcgKzIyNSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0
CiAgICAgaW5kZXggKz0gNDsgLy8gS2V5SWRzQ291bnQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRo
ZSBvdmVyZmxvdy4KLSAgICBpZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIGtleUlkU2l6
ZSkpID49IGluaXREYXRhU2l6ZSkKKyAgICBpZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAq
IENsZWFyS2V5S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRhU2l6ZSkKICAgICAgICAgcmV0
dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQgPSBpbmRleDsgLy8gVGhlIGxv
Y2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4KQEAgLTI1MSw5ICsyNjQsOSBA
QCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEo
Y29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5
IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBl
bmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVl
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAgICAg
ICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBrZXlJ
ZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGF0
YVtpbmRleF0sIENsZWFyS2V5S2V5SURTaXplSW5CeXRlcyk7CiAgICAgICAgIGtleUlkc0FycmF5
LT5wdXNoU3RyaW5nKGtleUlkKTsKLSAgICAgICAgaW5kZXggKz0ga2V5SWRTaXplOworICAgICAg
ICBpbmRleCArPSBDbGVhcktleUtleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCiAgICAgb2JqZWN0
LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKQEAgLTQ1Niw0MSArNDY5
LDEzMSBAQCBPcHRpb25hbDxTdHJpbmc+IENETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVTZXNz
aW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpCiAgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0K
IAotLy8gVGhpcyBpcyBmb3IgdGhyZWFkLXNhZmV0eSBkdXJpbmcgYW4gYXJjaGl0ZWN0dXJhbCBz
aXR1YXRpb24gdGhhdCBpcwotLy8gbGVzcyB0aGFuIGlkZWFsLiBUaGUgR1N0cmVhbWVyIGRlY3J5
cHRvcnMgY3VycmVudGx5IG5lZWQgdG8gaXRlcmF0ZQotLy8gYWxsIGtub3duIHNlc3Npb24ga2V5
cyB0byBmaW5kIHRoZSBrZXkgZGF0YSBmb3IgcHJpbWluZwotLy8gR0NyeXB0LiBJZGVhbGx5LCBh
bGwgZGVjcnlwdGlvbiB3b3VsZCBiZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YKLS8vIFByb3h5Q0RN
IG9iamVjdCBsaWtlIHRoaXMgb25lLiBXaGF0IHRoZSBiYWNrZ3JvdW5kIEdTdHJlYW1lcgotLy8g
dGhyZWFkIHdhcyBkb2luZyB3YXMgZ2V0dGluZyBjb3BpZXMgKGkuZS4gcmVmKCkncykgb2YgU2hh
cmVkQnVmZmVycwotLy8gY3JlYXRlZCBvbiB0aGUgbWFpbi10aHJlYWQuIFdpdGggdGhlIG5ldyBz
YWZldHkgYXNzZXJ0aW9ucyBpbgotLy8gV2ViS2l0LCB3ZSBjYW4gbm8gbG9uZ2VyIGRvIHRoaXMu
IEluc3RlYWQsIGNvbnZlcnQgdGhlIHJlZmNvdW50ZWQKLS8vIFNoYXJlZEJ1ZmZlcnMgaW50byBT
dHJpbmdzIHdoaWNoIGNhbiBiZSBzYWZlbHkgY29waWVkIGFjcm9zcwotLy8gdGhyZWFkcy4KLXN0
YXRpYyBQcm94eUNETUNsZWFyS2V5OjpLZXkgaXNvbGF0ZWRLZXkoY29uc3QgQ0RNSW5zdGFuY2VD
bGVhcktleTo6S2V5JiBrZXkpCisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5
KCkKIHsKLSAgICByZXR1cm4geyBrZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0
YSgpLCBrZXkua2V5SUREYXRhLT5zaXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0
YSgpLCBrZXkua2V5VmFsdWVEYXRhLT5zaXplKCkpIH07CisgICAgZ2NyeV9jaXBoZXJfY2xvc2Uo
bV9nY3J5SGFuZGxlKTsKIH0KIAotY29uc3QgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4g
UHJveHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzKCkgY29uc3QKK2Jvb2wgQ0RNUHJveHlDbGVh
cktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1
dCkKIHsKLSAgICAvLyBSZXR1cm4gdGhlIGtleXMgb2YgYWxsIHNlc3Npb25zLCBtYXkgYmUgY29w
aWVkIHRvIGJhY2tncm91bmQgdGhyZWFkcy4KLSAgICBWZWN0b3I8UHJveHlDRE1DbGVhcktleTo6
S2V5PiBhbGxLZXlzIHsgfTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4
KTsKLSAgICBzaXplX3QgaW5pdGlhbENhcGFjaXR5ID0gMDsKLSAgICBmb3IgKGF1dG8mIGtleVZl
Y3RvciA6IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkKLSAgICAg
ICAgaW5pdGlhbENhcGFjaXR5ICs9IGtleVZlY3Rvci5zaXplKCk7Ci0gICAgYWxsS2V5cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSk7CisgICAgdWludDhfdCBjdHJbQUVT
MTI4Q1RSQmxvY2tTaXplSW5CeXRlc107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0g
OCkgeworICAgICAgICAvLyBJU08vSUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMwogCi0gICAg
Zm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCku
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAg
ICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRlZEtleShrZXkpKTsKKyAgICAgICAg
Ly8gV2hlbiBhbiA4LWJ5dGUgSVYgaXMgaW5kaWNhdGVkLCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQg
OAorICAgICAgICAvLyBieXRlcyBvZiB0aGUgMTYgYnl0ZSBJViAoYnl0ZXMgOCB0byAxNSkgU0hB
TEwgYmUgc2V0IHRvCisgICAgICAgIC8vIHplcm8uCisgICAgICAgIG1lbXNldChjdHIgKyA4LCAw
LCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaW5wdXQuaXYsIDgpOworICAgIH0gZWxzZQorICAg
ICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKTsKKworICAg
IGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9nY3J5
SGFuZGxlLCBjdHIsIENsZWFyS2V5SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIs
IGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIGFsbEtleXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RN
UHJveHlDbGVhcktleTo6Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250
ZXh0JiBpbikKK3sKKyAgICAvLyBGSVhNRTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lk
IHRoaXMgd2hpbGUgc3RpbGwgZXhwb3NpbmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lm
aWMgRGVjcnlwdElucHV0IEFQST8gVGhlc2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYg
Ynl0ZXMpLCBzbyBub3QgYSBodWdlIGRlYWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGtleUlEVmVjOworICAgIGtleUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5C
eXRlcyk7CisKKyAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOwor
ICAgIGlmICgha2V5RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEt
PmRhdGEoKSwga2V5RGF0YS0+c2l6ZSgpKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVy
cm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUo
Y2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNp
emVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBi
eXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vy
cm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4u
ZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsK
KyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2Np
cGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVBy
b3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlu
cHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAg
IHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJz
YW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJz
YW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5j
cnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51
bVN1YnNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1w
bGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1
ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1i
ZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5k
ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJz
YW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBi
eXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2Ft
cGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNs
ZWFyQnl0ZXMgPSAwOworICAgICAgICAgICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZz
ZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVl
bmN5IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGlu
IFdlYkNvcmUuCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAl
dSBieXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRl
eCwgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0
ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZm
ZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1
YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0g
c3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0
byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywg
aW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zm
c2V0KTsKKworICAgICAgICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlf
Y2lwaGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNy
eXB0ZWRCdWZmZXJCeXRlT2Zmc2V0LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkp
IHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVS
Uk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRC
eXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENE
TVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0
Q29udGV4dCYgaW5wdXQpCit7CisgICAgaWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkg
fHwgIWNlbmNTZXREZWNyeXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGlucHV0LmlzU3Vic2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVk
KGlucHV0KSA6IGNlbmNEZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJv
eHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBl
cnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4
LCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4p
OiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxz
ZSAmJiAiU2hvdWxkIG5vdCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIp
OworICAgIH0KIH0KIAogQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgp
Ci0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAg
ICA6IENETUluc3RhbmNlUHJveHkobmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQog
CkBAIC01MzUsMzYgKzYzOCw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6
a2V5U3lzdGVtKCkgY29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFu
Y2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xl
YXJLZXk6OktleTo6a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlsiLCBrZXlJRERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1J
bnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwot
fQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwg
Y29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5
SUREYXRhKTsKLSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5
SUREYXRhID09ICprMi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUlu
c3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYg
azIpCi17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0
YSk7Ci0KLSAgICBpZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXpl
KCkpCi0gICAgICAgIHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5
SUREYXRhLT5kYXRhKCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uPiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5KCp0aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJl
dHVybiBuZXdTZXNzaW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBl
LCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFj
aykKQEAgLTU3Miw2ICs2NDgsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRp
YyB1aW50MzJfdCBzX3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7
CiAKKyAgICBtX3Nlc3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOwor
CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNl
bmMiKSkKICAgICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShp
bml0RGF0YS5nZXQoKSk7CiAKQEAgLTU3OSwxOCArNjU3LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VT
ZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3Ry
aW5nJiBpCiAgICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShp
bml0RGF0YS5nZXQoKSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGlu
aXREYXRhID0gV1RGTW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRW
YWx1ZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCB0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUo
aW5pdERhdGEpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERh
dGEpLCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOwor
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxz
ZSwgU3VjY2VlZGVkKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VU
eXBlLCBjb25zdCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2sm
JiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxl
cyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxs
T25NYWluVGhyZWFkKCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAg
ICAgW3RoaXMsICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlT
dGF0dXNWZWN0b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAg
ICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzY4MCwyMyBAQCB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkLCBMaWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNl
SlNPTk9iamVjdChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxp
ZCBKU09OIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxi
YWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5n
IGxpY2Vuc2UgZm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAl
cyB3aGljaCBjdXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0
YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9
IHBhcnNlTGljZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRh
cmdldCBWZWN0b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8g
RklYTUU6IFJlZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0
b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6
c2luZ2xldG9uKCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxD
RE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAg
ICAgIGJvb2wga2V5c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVk
S2V5IDogKmRlY29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJL
ZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtl
eS5rZXlJREFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tl
eUlEID0gc3RkOjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0g
ICAgICAgICAgICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5JiBjb250YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5l
ZEtleSA9PSBkZWNvZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYg
KGtleVdpdGhNYXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRh
dGEgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFz
U2FtZUtleVZhbHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVy
ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1v
dmUoZGVjb2RlZEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAg
ICAgICAgICAga2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAg
ICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICAgICAgYm9vbCBrZXlzQ2hhbmdlZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNv
ZGVkS2V5cykpOwogCi0gICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBo
YXMgcHJvdmlkZWQgJXp1IGtleXMiLCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUo
KSIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAg
ICAgICAgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYg
KGtleXNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAg
ICAgICBzdGQ6OnNvcnQoa2V5VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAg
ICAgICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBr
ZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAg
IGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZm
ZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAg
ICAgICAgIGNoYW5nZWRLZXlzID0gV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlz
Iiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5j
ZS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBt
X2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vz
c1ZhbHVlOjpTdWNjZWVkZWQpOwpAQCAtNjU3LDQ3ICs3MDQsMjcgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwg
TGljZW5zZVQKICAgICB9CiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdl
bWVudEZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkg
SUQgaW5mb3JtYXRpb24gYW5kIHVzZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBz
ZXNzaW9uSWQuCi0gICAgICAgIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1v
dmUoc2Vzc2lvbklkKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lv
biAlcyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNz
aW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxs
S2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygp
OwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1Zh
bHVlOjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBp
biBjYXNlIG5vIGZvcm1hdCB3YXMgcmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xl
YXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9y
bWF0Iiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFs
c2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSWQsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUg
Y2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgp
IGNhbGxzLgotICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2Fs
bGJhY2tdKE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NW
YWx1ZSBzdWNjZXNzLCBTZXNzaW9uTG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoCi0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMg
PSBXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhp
c3RpbmdLZXlzKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWls
dXJlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgIC8vIENvbnN0cnVj
dCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIGFsbCB0aGUga25vd24g
a2V5cyBmb3IgdGhpcyBzZXNzaW9uLgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0
b3I7Ci0gICAgewotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9u
KCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAg
ICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KFdURjo6bnVsbG9wdCwgRmFpbGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGEp
OworICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworICAgIEtleVN0YXR1c1Zl
Y3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVj
dG9yKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksICZrZXlTdGF0dXNWZWN0b3JdKCkgbXV0
YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBhdXRvJiBrZXlWZWN0b3IgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGtl
eVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1
c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlT
dGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0gICAgfQogCi0gICAgZGlz
cGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFN1Y2NlZWRlZCwgU2Vzc2lv
bkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNW
ZWN0b3IpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2VlZGVkLCBTZXNzaW9uTG9h
ZEZhaWx1cmU6Ok5vbmUpOworICAgIH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2sm
JiBjYWxsYmFjaykKQEAgLTcxMyw3ICs3NDAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwog
CiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25z
dCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJh
Y2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVk
dWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFp
blRocmVhZCgpIGNhbGxzLgorICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOwor
CiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10o
S2V5U3RhdHVzVmVjdG9yJiYga2V5U3RhdHVzVmVjdG9yLCBPcHRpb25hbDxSZWY8U2hhcmVkQnVm
ZmVyPj4mJiBtZXNzYWdlLCBTdWNjZXNzVmFsdWUgc3VjY2VzcykgewogICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZCgKQEAgLTcyNywzNSArNzU1LDE3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlCiAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJl
c2VudGluZyByZWxlYXNlZCBrZXlzLCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xp
Y2Vuc2UgcmVsZWFzZScgZm9ybWF0LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0
b3I7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxs
S2V5c0FzUmVsZWFzZWQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAg
IHsKLSAgICAgICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBzZXNzaW9u
IElELCBiYWlsaW5nIGlmIG5vbmUgaXMgZm91bmQuCi0gICAgICAgIGF1dG8mIGtleXMgPSBDbGVh
cktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlzLmZp
bmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAgICAg
ICAgIGRpc3BhdGNoQ2FsbGJhY2soS2V5U3RhdHVzVmVjdG9yIHsgfSwgV1RGOjpudWxsb3B0LCBT
dWNjZXNzVmFsdWU6OkZhaWxlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgS2V5IHZlY3RvciwgY29udGFpbmluZyBhbGwgdGhlIGtl
eXMgZm9yIHRoaXMgc2Vzc2lvbiwgYW5kCi0gICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSBrZXkg
bWFwIGVudHJ5IGZvciB0aGlzIHNlc3Npb24uCi0gICAgICAgIGF1dG8ga2V5VmVjdG9yID0gV1RG
TW92ZShpdC0+dmFsdWUpOwotICAgICAgICBrZXlzLnJlbW92ZShpdCk7Ci0KLSAgICAgICAgLy8g
Q29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCBwYWlyaW5nIGtleSBJRHMgd2l0
aCB0aGUgJ3JlbGVhc2VkJyBzdGF0dXMuCi0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBl
bmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERh
dGEsIEtleVN0YXR1czo6UmVsZWFzZWQgfSk7Ci0KICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04g
dGhhdCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEg
J2tpZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9y
IGFsbCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLgogICAgICAg
ICBhdXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICB7CiAg
ICAgICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
a2V5LmtleUlERGF0YS0+c2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxF
bmNvZGUoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5Lmtl
eUlERGF0YS0+c2l6ZSgpKSkpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBt
X2tleVN0b3JlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBh
cnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgpLCBr
ZXktPmlkKCkuc2l6ZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0
LT5zZXRBcnJheSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNzY2LDYg
Kzc3Niw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25E
YXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAgICAgICAgIG1lc3NhZ2UgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxl
bmd0aCgpKTsKICAgICB9CiAKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICBk
aXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZl
cj4oKm1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9D
RE1DbGVhcktleS5oCmluZGV4IDg1YjMxOWIxYTM4YzEyMTY5OTE5NzViODAxOWFkMmIxNmIzNmMx
NDcuLjhjMmZkN2VlMWQwZDBhNWZmOTYyYjMyMjU2ZDFlZDBlNGQxOGMzMjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJr
ZXkvQ0RNQ2xlYXJLZXkuaApAQCAtMzEsMTAgKzMxLDEyIEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKIAogI2luY2x1ZGUgIkNETUZhY3RvcnkuaCIKLSNpbmNsdWRlICJDRE1JbnN0YW5j
ZS5oIgogI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNETVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsMjcgKzc5LDEzIEBAIHB1YmxpYzoK
ICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNv
bnN0IGZpbmFsOwogfTsKIAotY2xhc3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBQ
cm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAg
ICAgICAgU3RyaW5nIGtleVZhbHVlRGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlD
RE1DbGVhcktleSgpID0gZGVmYXVsdDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtl
eXMoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsK
LQotY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwg
cHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKK2NsYXNzIENETUlu
c3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSwgcHVibGljIENh
bk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0
YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwogCisg
ICAgLy8gQ0RNSW5zdGFuY2UKICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25U
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVhcktleTsg
fQotCiAgICAgU3VjY2Vzc1ZhbHVlIGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBD
RE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldERp
c3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1
ZSBzZXRQZXJzaXN0ZW50U3RhdGVBbGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3ICs5Myw5
MSBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJikgZmluYWw7CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5h
bDsKICAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7
Ci0KLSAgICBzdHJ1Y3QgS2V5IHsKLSAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0
dXMgc3RhdHVzOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlJRERhdGE7Ci0gICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVZhbHVlRGF0YTsKLQotICAgICAgICBTdHJpbmcg
a2V5SURBc1N0cmluZygpIGNvbnN0OwotICAgICAgICBTdHJpbmcga2V5VmFsdWVBc1N0cmluZygp
IGNvbnN0OwotCi0gICAgICAgIGJvb2wgaGFzU2FtZUtleVZhbHVlKGNvbnN0IEtleSAmb3RoZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChrZXlWYWx1ZURhdGEpOwotICAgICAgICAg
ICAgQVNTRVJUKG90aGVyLmtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gKmtleVZh
bHVlRGF0YSA9PSAqb3RoZXIua2V5VmFsdWVEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
VHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5
IHZhbHVlIGFuZCBzdGF0dXMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
S2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0gICAgICAgIC8vIEtleSdzIGFyZSBvcmRlcmVkIGJ5
IHRoZWlyIElEcywgZmlyc3QgYnkgc2l6ZSwgdGhlbiBieSBjb250ZW50cy4KLSAgICAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotCi0gICAg
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikg
eyByZXR1cm4gIShvcGVyYXRvcj09KGsxLCBrMikpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPihjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I9
PShrMSwgazIpICYmICFvcGVyYXRvcjwoazEsIGsyKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRv
cj4oazEsIGsyKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEtleSAm
azEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcjwoazEsIGsyKTsgfQotICAgIH07
Ci0KLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9wcm94eUNETTsgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxQcm94eUNETT4gbV9wcm94eUNE
TTsKIH07CiAKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGlj
IENETUluc3RhbmNlU2Vzc2lvbiwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vz
c2lvbkNsZWFyS2V5PiB7CiBwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXko
Q0RNSW5zdGFuY2VDbGVhcktleSYgcGFyZW50KQorICAgICAgICA6IG1fcGFyZW50SW5zdGFuY2Uo
cGFyZW50KSB7IH0KICAgICB2b2lkIHJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBB
dG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExp
Y2Vuc2VDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3Ry
aW5nJiwgTGljZW5zZVR5cGUsIGNvbnN0IFNoYXJlZEJ1ZmZlciYsIExpY2Vuc2VVcGRhdGVDYWxs
YmFjayYmKSBmaW5hbDsKICAgICB2b2lkIGxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAg
IHZvaWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5z
ZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBzdG9y
ZVJlY29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmluYWw7Citwcml2YXRlOgorICAgIFN0
cmluZyBtX3Nlc3Npb25JRDsKKyAgICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3Rh
bmNlOworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9OworCisvLyBUaGlzIGlzIHRoZSB0aHJl
YWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBzaG91bGQgdXNlIHRvIG1ha2UgdXNlIG9m
IGEKKy8vIHBsYXRmb3JtIENETSBtb2R1bGUuCitjbGFzcyBDRE1Qcm94eUNsZWFyS2V5IGZpbmFs
IDogcHVibGljIENETVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlDbGVhcktl
eSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKK3B1YmxpYzoKKyAgICBD
RE1Qcm94eUNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkmIGluc3RhbmNlKQorICAgICAgICA6
IG1fY2RtSW5zdGFuY2UoaW5zdGFuY2UpCisgICAgeworICAgICAgICAvLyBGb3Igbm93IHdlIGRv
bid0IHVzZSB0aGlzIGxpbmsgYmFjayB0byB0aGUgIm1haW4tdGhyZWFkIGluc3RhbmNlIiwKKyAg
ICAgICAgLy8gYnV0IGhhdmluZyB0aGUgY29ubmVjdGlvbiByZWFkeSBtYWRlIHdpbGwgYWxtb3N0
IGNlcnRhaW5seSBiZSB1c2VmdWwKKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAg
VU5VU0VEX1BBUkFNKG1fY2RtSW5zdGFuY2UpOworICAgICAgICBpbml0aWFsaXplR2NyeXB0KCk7
CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXkoKTsKKworICAgIC8vIEZJWE1F
OiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJlZEJ1ZmZlcnMsCisg
ICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXplX3R9IGlkaW9tcyBmb3IgcmVw
cmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4IHRoYXQgc29tZWhvdy4gTm90
ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAgICAvLyB0aGV5J3JlIG5vdCB0
aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWluCisgICAgLy8gdGhyZWFkLXNh
ZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291bGQgYmUKKyAgICAv
LyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJzIGZvciBkcm9wcGlu
ZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3YXJlIGNvbnRhaW5l
cnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsKKyAgICAgICAgLy8gRklYTUU6
IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGllZCB0eXBlcy4KKyAgICAgICAg
Y29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBrZXlJRFNpemVJbkJ5dGVzOwor
CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBzaXplX3QgaXZTaXplSW5CeXRl
czsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAgICAgIHNpemVfdCBl
bmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAvLyBGSVhNRTogR1N0cmVhbWVy
LXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGdldCByaWQg
b2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQgYmVmb3JlCisgICAg
ICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVjdG9yPHNpemVfdD4g
dGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9kZWNyeXB0ZWQvY2xlYXIvZGVj
cnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90
Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVhci9kZWNyeXB0ZWQg
c2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAgICAgLy8gYmVjb21lIGEgc3Ry
dWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1wbGUuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MzAKKyAgICAg
ICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YnNh
bXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisK
KyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJzYW1wbGVz
OyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5
cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMs
IGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZp
bmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wg
Y2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBp
bml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBv
cnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkg
aGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyBy
ZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAgYm9vbCBjZW5jU2V0Q291bnRl
clZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNTZXREZWNy
eXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5
cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRT
dWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAgQ0RNSW5zdGFuY2VDbGVhcktl
eSYgbV9jZG1JbnN0YW5jZTsKKworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVz
ZSBzb21ldGhpbmcgaW4gV2ViQ29yZSBmb3IgY3J5cHRvLi4uCisgICAgZ2NyeV9jaXBoZXJfaGRf
dCBtX2djcnlIYW5kbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBs
YXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA0ZmM2Nzg3ZGQ4ZDkwN2NhZDZh
Mjc3ZjM5YjFlZDMyZWQ2NzlhNmQ4Li4xOGFhYTYwYWE3OTc0YTI1MDkzMDg2ZGIxZWYzMmY5N2Fj
ZjNjNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKLSNpbmNsdWRl
ICJDRE1DbGVhcktleS5oIgogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIK
ICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5o
IgpAQCAtMjEzLDcgKzIxMiw2IEBAIHN0YXRpYyBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiB2
YWxpZEluaXREYXRhVHlwZXMoKQogCiB2b2lkIENETUZhY3Rvcnk6OnBsYXRmb3JtUmVnaXN0ZXJG
YWN0b3JpZXMoVmVjdG9yPENETUZhY3RvcnkqPiYgZmFjdG9yaWVzKQogewotICAgIGZhY3Rvcmll
cy5hcHBlbmQoJkNETUZhY3RvcnlDbGVhcktleTo6c2luZ2xldG9uKCkpOwogICAgIGZhY3Rvcmll
cy5hcHBlbmQoJkNETUZhY3RvcnlGYWlyUGxheVN0cmVhbWluZzo6c2luZ2xldG9uKCkpOwogCiAg
ICAgSW5pdERhdGFSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJJbml0RGF0YVR5cGUoQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpLCB7IENETVByaXZhdGVGYWlyUGxheVN0
cmVhbWluZzo6c2FuaXRpemVTaW5mLCBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJh
Y3RLZXlJRHNTaW5mIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9i
akMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKaW5kZXggNDc3MmZjYjMyMzZk
MzkwMjk1MzRjNDZmYjRmMTAyOTk3ODNlNmNiNi4uYjExZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRk
ZTg2ZjNkZDk5NGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCkBAIC04MCw3ICs4MCw2IEBA
IHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJikgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3Jl
YXRlU2Vzc2lvbigpIGZpbmFsOwotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSgpIGNvbnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCmluZGV4IGExMmVmNGY2ZGJhNmYwMTVlNzYxNTFmMTQ3Y2M2YzA3OWU2MmRh
N2UuLmEzOTg4MDhhMmNlYjBlOTU3MGJkZGQ4YWUwNmQ4NjVkMDc1MWI1OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNzg4LDYgKzE3
ODgsNTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdz
dEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0
YSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlv
bk1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKworICAgIEluaXREYXRhIGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50
cyBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKHBpcGVsaW5lKCksICJmb3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0
b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBw
cm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAg
ICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZl
bnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRh
LCBudWxscHRyKTsKKworICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3Rl
bUlkLCBkYXRhfSk7CisgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChH
U1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gaW5pdERhdGE7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3
YWl0Rm9yQ0RNQXR0YWNobWVudCgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRo
cmVhZCB3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJv
b2wgZGlkQ0RNQXR0YWNoID0gZmFsc2U7CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1l
bnRMb2NrZXIgPSBob2xkTG9jayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENE
TUF0dGFjaCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVu
dE11dGV4LCA0X3MsIFt0aGlzXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVk
KCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisK
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQogewogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09
IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpA
QCAtMTgyMyw0MSArMTg2Nyw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJy
ZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQiKSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkp
IHsKLSAgICAgICAgICAgIEdTVF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVj
cnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFk
Iik7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJoYW5kbGluZyBkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4
dCBtZXNzYWdlIik7Ci0KLSAgICAgICAgSW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAg
ICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7
Ci0gICAgICAgICAgICBHU1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1
IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5z
aXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7
Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRz
LmV2ZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1J
ZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwg
JmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGlu
aXREYXRhLmFwcGVuZCh7ZXZlbnRLZXlTeXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAg
IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0
KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRh
dGFFbmNvdW50ZXJlZChXVEZNb3ZlKGluaXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAg
IGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFsc2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8g
Y2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAg
ICAgICAgICAgIGRpZENETUF0dGFjaCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9y
KG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaXNDRE1BdHRhY2hlZCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZGlkQ0RNQXR0YWNoICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2Nk
bUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQocGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNz
YWdlKSk7CisgICAgICAgIGJvb2wgaXNDRE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50
KCk7CisgICAgICAgIGlmIChpc0NETUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigp
ICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRp
ZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVt
ICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2Ut
PmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9N
RVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg2NSwxMCArMTg3NywxMSBAQCBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9
IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3Rl
bS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwog
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NB
R0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0g
ZmFpbGVkLCBubyBDRE0gYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMSw2
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9u
KTsKICAgICAgICAgICAgIGdzdF9tcGVndHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAg
ICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBp
ZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5
IikpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0
aW5nLWZvci1rZXkgbWVzc2FnZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2Fn
ZSkpOwotICAgICAgICAgICAgc2V0V2FpdGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGUgZGVjcnlwdG9ycyBzaG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5
cHQgYWZ0ZXIgYmVpbmcgY3JlYXRlZCBhbmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJl
bnRseSB0aGV5IGFyZSBub3QgYW5kIGN1cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVy
ZSBkb2VzIG5vdCBtYWtlIHRoaXMgdmVyeSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2ls
bCBjaGFuZ2Ugc29vbiBhbmQgaXQgZG9lcyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0
aCBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVk
LiBJbiB0aGUgbWVhbnRpbWUsIGZvcmNlIGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0
IGJsb2NrZWQuCi0gICAgICAgICAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2Uo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwg
ImRybS1rZXktcmVjZWl2ZWQiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiZHJtLWtleS1yZWNlaXZlZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9T
UkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsK
LSAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25h
bWUoc3RydWN0dXJlLCAiaHR0cC1oZWFkZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIlByb2Nlc3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgc3RydWN0dXJlKTsKQEAgLTM3MjgsMTQgKzM3MjgsMTcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3Rh
bmNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0
YW5jZTsKIAotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3Rf
Y29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOworICAgIG1fY2RtSW5zdGFu
Y2UgPSByZWludGVycHJldF9jYXN0PENETUluc3RhbmNlUHJveHkqPigmaW5zdGFuY2UpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fY2RtSW5zdGFuY2UpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFBs
YXllcihtX3BsYXllcik7CisKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBHc3RT
dHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1
cmUoY29udGV4dC5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVy
ZSwgImNkbS1pbnN0YW5jZSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNE
TSgpLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0
dXJlLCAiY2RtLXByb3h5IiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCku
Z2V0KCksIG51bGxwdHIpOwogICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5U
KG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFz
IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKyAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0
Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSk7CiAKICAgICBM
b2NrSG9sZGVyIGxvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwogICAgIC8vIFdlIG11c3Qgbm90
aWZ5IGFsbCB3YWl0ZXJzLCBzaW5jZSBzZXZlcmFsIGRlbXV4ZXJzIGNhbiBiZSBzaW11bHRhbmVv
dXNseSB3YWl0aW5nIGZvciBhIENETS4KQEAgLTM3NTcsNyArMzc2MCw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBp
bnN0YW5jZSkKICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hp
bmcgQ0RNIGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNl
LmdldCgpKTsKICAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKIAotICAgIEdSZWZQdHI8R3N0
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5z
dGFuY2UiLCBGQUxTRSkpOworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0tcHJveHkiLCBGQUxTRSkpOwogICAgIGdzdF9l
bGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0
LmdldCgpKTsKIH0KIApAQCAtMzc5MCw1MSArMzc5MywxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAg
ICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0
RGF0YX0pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGlu
Z0ZvcktleShib29sIGlzV2FpdGluZ0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2
YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBh
bnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9U
UkFDRSgiaXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQ
cmludGluZyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JL
ZXkpKTsKLSAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICgh
aXNXYWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faXNXYWl0aW5nRm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9E
RUJVRygid2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dh
aXRpbmdGb3JLZXkpKTsKLSAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0K
LQogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25z
dAogewotICAgIGlmICghbV9waXBlbGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2Rt
SW5zdGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwot
ICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxw
dHIsIDApOwotCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5
PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9N
LCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXki
KSkpOwotICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3Vs
dCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAg
ICAgICAgR1NUX1RSQUNFKCJxdWVyeSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5n
KHJlc3VsdCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNl
IGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1
ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUg
cGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNw
ZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQ
dHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4o
bV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JS
ZXN1bHQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0
ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVl
ICosIGdwb2ludGVyIGRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVt
ZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAg
ICAgICAgICAgICAgICBHc3RRdWVyeSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICFXRUJLSVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8
ICFnc3RfZWxlbWVudF9xdWVyeShlbGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxs
cHRyLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NU
X0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0
ZXJhdG9yLmdldCgpKTsKLSAgICAgICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lU
RVJBVE9SX1JFU1lOQyk7Ci0gICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFU
T1JfRVJST1IpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4g
ZXJyb3IiKTsKLSAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9S
X09LOwotICAgICAgICBHU1RfVFJBQ0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIs
IGl0ZXJhdG9yUmVzdWx0LCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5
KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5oCmluZGV4IGIyYmI1NDFhMzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLjUy
MWIyMGQxMWNjOGRkOTRiZTI4NGQ3NDY5OWNkMjcxN2I0ZTA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVk
ZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNl
bmRpZgogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5o
IgorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9s
dW1lOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVm
IHN0cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBw
cm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0
YWNobWVudE11dGV4OwogICAgIENvbmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0g
ICAgUmVmUHRyPGNvbnN0IENETUluc3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxD
RE1JbnN0YW5jZVByb3h5PiBtX2NkbUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25N
dXRleDsgLy8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAg
IEhhc2hTZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyAr
NDU0LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVy
biBtX2NkbUluc3RhbmNlOyB9CiAgICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5z
dGFuY2UoKTsKICAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRh
JiYpOwotICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29sKTsKKyAgICBJbml0RGF0YSBwYXJz
ZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICBib29sIHdh
aXRGb3JDRE1BdHRhY2htZW50KCk7CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxh
eWVyU2h1dHRpbmdEb3duOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENs
ZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAppbmRleCBkOGMwMjU0ZmYxNDMwM2M1ZTE4OTcz
YmU0ZjIyMWFlN2MwZTkzNGE5Li5iNGFjNTUxNWJlMDU0MmRiYzhiY2MwMmRiZjI2ZDM2Yzc5NzVh
NGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVj
cnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMzcsMTIgKzM3LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9i
aikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFf
Q0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBf
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKLSAgICBSZWZQdHI8UHJveHlDRE1D
bGVhcktleT4gcHJveHlDRE07Ci0gICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7CisgICAgUmVm
UHRyPENETVByb3h5Q2xlYXJLZXk+IGNkbVByb3h5OwogfTsKIAogc3RhdGljIHZvaWQgZmluYWxp
emUoR09iamVjdCopOwotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPik7CitzdGF0aWMg
Ym9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4pOwogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlp
ZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVy
KiBzdWJTYW1wbGVzKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFf
Y2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwpAQCAtODQsNyArODMsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGts
YXNzKTsKICAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0
aWxpdGllczo6c19DbGVhcktleVVVSUQ7Ci0gICAgY2VuY0NsYXNzLT5oYW5kbGVLZXlSZXNwb25z
ZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3Mt
PmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0dGFjaGVkKTsK
ICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUihkZWNyeXB0KTsKIAog
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpAQCAtOTMsNjEgKzkyLDMyIEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJL
ZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5p
dChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRf
UFJJVkFURShzZWxmKTsKLQogICAgIHNlbGYtPnByaXYgPSBwcml2OwogICAgIG5ldyAocHJpdikg
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Ci0gICAgaWYgKGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5kbGUpLCBHQ1JZX0NJUEhFUl9B
RVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7Ci0gICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIg
Y2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgQVNTRVJU
KCFlcnJvcik7Ci0gICAgfQogfQogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVChvYmplY3QpOwogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJp
dmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgZ2NyeV9jaXBoZXJfY2xvc2UocHJpdi0+aGFu
ZGxlKTsKICAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7CiAK
ICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7
CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0pCitzdGF0aWMg
Ym9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHkpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BS
SVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIHByaXYtPnByb3h5Q0RN
ID0gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETUNsZWFyS2V5Kj4ocHJveHlDRE0uZ2V0KCkpOwot
ICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KGNkbVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4g
cHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRBbmRTZXRLZXkoV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBTdHJpbmcmJiBrZXlJRCkKK3N0
YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVy
KiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNC
dWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtleVZhbHVlOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBr
ZXkgOiBwcml2LT5wcm94eUNETS0+aXNvbGF0ZWRLZXlzKCkpIHsKLSAgICAgICAgaWYgKGtleS5r
ZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAgICAgICAgICAgIGtleVZhbHVlID0ga2V5LmtleVZhbHVl
RGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGtl
eVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJmYWls
ZWQgdG8gZmluZCBhIGRlY3J5cHRpb24ga2V5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSA9PSBDTEVBUktFWV9TSVpF
KTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KHByaXYt
PmhhbmRsZSwga2V5VmFsdWUuY2hhcmFjdGVyczgoKSwga2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSkp
IHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZ2NyeV9jaXBoZXJfc2V0a2V5IGZh
aWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQorICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdF
QktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKIAotc3RhdGljIGJvb2wgZGVjcnlwdChXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVy
LCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vi
U2FtcGxlQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcikKLXsKLSAgICBpZiAoIWl2
QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIm5vIElWIGJ1ZmZlciIp
OworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1NywyNyArMTI3LDYgQEAgc3Rh
dGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
LCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOwotICAgIGlmIChtYXBwZWRJVkJ1ZmZlci0+c2l6
ZSgpID09IDgpIHsKLSAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOwotICAgICAgICBtZW1j
cHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAg
ICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7Ci0g
ICAgfQotCi0gICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VC
S0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQo
c2VsZikpOwotICAgIGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGN0
cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGNpcGhlckVycm9y
KSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVyX3NldGN0ciBm
YWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJObyBidWZmZXIgdG8gZGVjcnlwdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgYXV0byBtYXBwZWRLZXlJZEJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFw
cGVkS2V5SWRCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVk
IHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7CkBAIC0xOTAsNzIgKzEzOSwyOSBAQCBzdGF0aWMgYm9v
bCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1
ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZmluZEFu
ZFNldEtleShwcml2LCBTdHJpbmcobWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkS2V5
SWRCdWZmZXItPnNpemUoKSkpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHVu
c2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKLQotICAgIGlmICghc3ViU2FtcGxlQ291bnQpIHsKLSAg
ICAgICAgLy8gRnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICAgICAgR1NUX1RSQUNFX09CSkVD
VChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYnVmZmVyIGlz
IGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVyLT5zaXplKCkpIHsKLSAgICAgICAgICAg
IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1
ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUoKSwgMCwgMCk7Ci0gICAgICAgICAgICBp
ZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVy
RXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgc3Vi
U2FtcGxlc0J1ZmZlciBpc24ndCBudWxsLgotICAgIGlmICghc3ViU2FtcGxlc0J1ZmZlcikgewot
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJFcnJvciwgdGhlIHN1YlNhbXBsZUJ1ZmZl
ciBpcyBudWxsIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTdWJz
YW1wbGUgZW5jcnlwdGlvbi4KLSAgICBhdXRvIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJD
b3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JF
QUQpOwotICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdVbmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4g
cmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+ZGF0YSgp
LCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCkpKTsKLSAgICBHU1RfREVCVUdfT0JKRUNU
KHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkg
ewotICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgZ3VpbnQzMiBuQnl0
ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAgICAgIGlmIChzYW1wbGVJbmRleCA8IHN1YlNhbXBsZUNv
dW50KSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlKHJl
YWRlci5nZXQoKSwgJm5CeXRlc0NsZWFyKQotICAgICAgICAgICAgICAgIHx8ICFnc3RfYnl0ZV9y
ZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNFbmNyeXB0ZWQpKSB7Ci0g
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAidW5zdXBwb3J0ZWQiKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
YW1wbGVJbmRleCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbkJ5dGVzQ2xlYXIg
PSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwcGVkQnVmZmVyLT5zaXplKCkg
LSBwb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwg
InN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAodG9kbz0lenUpIiwgc2FtcGxl
SW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uKTsKLSAg
ICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7Ci0gICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0
ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRl
eCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRl
c0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgICAg
ICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRC
dWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOwotICAgICAg
ICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBzYW1w
bGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVz
RW5jcnlwdGVkOworICAgIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZFN1YnNhbXBsZXNC
dWZmZXI7CisgICAgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0IGNvbnRleHQ7
CisgICAgY29udGV4dC5rZXlJRCA9IG1hcHBlZEtleUlkQnVmZmVyLT5kYXRhKCk7CisgICAgY29u
dGV4dC5rZXlJRFNpemVJbkJ5dGVzID0gbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKTsKKyAgICBj
b250ZXh0Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0Lml2U2l6ZUlu
Qnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuZW5jcnlwdGVkQnVm
ZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXJT
aXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQubnVtU3Vic2Ft
cGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGlmICghc3Vic2FtcGxlQ291bnQpCisgICAgICAg
IGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVChzdWJzYW1wbGVzQnVmZmVyKTsKKyAgICAgICAgbWFwcGVkU3Vic2FtcGxlc0J1ZmZl
ciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YnNhbXBsZXNCdWZmZXIsIEdT
VF9NQVBfUkVBRCk7CisgICAgICAgIGlmICghbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcikgeworICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUg
YnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAg
Y29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+ZGF0YSgp
OworICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZFN1
YnNhbXBsZXNCdWZmZXItPnNpemUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNlbmNEZWNyeXB0KGNvbnRleHQpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2ODNkMDQ3NDg2MGY2ZWY4MTdmMzFjZGMxNWU0OGFjMTg2
YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJhMTYyNDRjMDc5ODAzNzQ3YzMwNDEyNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMjUsMzQgKzI1LDM0IEBACiAKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSAiQ0RNUHJveHku
aCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVV
dGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2Nv
cGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6UHJveHlDRE07Cit1c2luZyBXZWJDb3JlOjpDRE1Qcm94
eTsKIAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VO
Q19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpCiBz
dHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlIHsKICAgICBH
UmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBw
cm94eUNETTsKLSAgICBib29sIGtleVJlY2VpdmVkIHsgZmFsc2UgfTsKLSAgICBib29sIHdhaXRp
bmdGb3JLZXkgeyBmYWxzZSB9OwotICAgIExvY2sgbXV0ZXg7Ci0gICAgQ29uZGl0aW9uIGNvbmRp
dGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJveHk+IGNkbVByb3h5OworCisgICAgTG9jayBjZG1BdHRh
Y2htZW50TXV0ZXg7CisgICAgQ29uZGl0aW9uIGNkbUF0dGFjaG1lbnRDb25kaXRpb247CiB9Owog
CitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4U2Vjb25kc1RvV2FpdEZvckNETVByb3h5ID0g
NV9zOworCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVu
dCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwogc3RhdGljIHZvaWQgZmluYWxpemUoR09i
amVjdCopOwogc3RhdGljIEdzdENhcHMqIHRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSos
IEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsKIHN0YXRpYyBHc3RGbG93UmV0
dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSosIEdzdEJ1ZmZlciopOwogc3Rh
dGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdEV2ZW50
Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQ
YWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7Ci1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxh
YmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyB2b2lkIHNl
dENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQqKTsKIAotCiBHU1RfREVCVUdfQ0FURUdP
UllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2Nh
dGVnb3J5KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21tb25fZW5j
cnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CiAKQEAgLTc2LDcgKzc2LDYgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChX
ZWJLaXRNZWRpYUNvbW1vbkUKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9jYXBz
ID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJhbnNmb3JtQ2Fwcyk7CiAgICAgYmFzZVRyYW5zZm9ybUNs
YXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBGQUxTRTsKICAgICBiYXNlVHJhbnNm
b3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUihzaW5rRXZlbnRIYW5kbGVy
KTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIocXVl
cnlIYW5kbGVyKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKSk7CiB9CkBAIC0xNzcs
MjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJh
c2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogewogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CiAKLSAgICAvLyBUaGUga2V5IG1pZ2h0IG5v
dCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KLSAgICBpZiAoIXByaXYtPmtl
eVJlY2VpdmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZh
aWxhYmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKLSAgICAgICAgaWYgKEdTVF9TVEFURShHU1Rf
RUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChHU1RfU1RBVEVfVEFSR0VUKEdT
VF9FTEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICYmIEdTVF9TVEFURV9U
QVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsKLSAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGlu
IGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlbmQgImRybS1jZG0taW5zdGFu
Y2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRoZSBwbGF5ZXIgdG8gcmVzZW5kIHRoZSBDRE1JbnN0YW5j
ZSBpZiBhdmFpbGFibGUgYW5kIGluZm9ybSB3ZSBhcmUgd2FpdGluZyBmb3Iga2V5LgotICAgICAg
ICBwcml2LT53YWl0aW5nRm9yS2V5ID0gdHJ1ZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9t
ZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JK
RUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLXdhaXRpbmctZm9yLWtleSIp
KSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKIAot
ICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihwcml2LT5tdXRleCwgU2Vjb25kcyg1KSwg
W3ByaXZdIHsKLSAgICAgICAgICAgIHJldHVybiBwcml2LT5rZXlSZWNlaXZlZDsKKyAgICAvLyBU
aGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdp
biBkZWNyeXB0aW9uLgorICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdCBhdmFpbGFibGUsIGdvaW5nIHRvIHdhaXQgZm9yIGl0
Iik7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ud2FpdEZvcihwcml2LT5j
ZG1BdHRhY2htZW50TXV0ZXgsIE1heFNlY29uZHNUb1dhaXRGb3JDRE1Qcm94eSwgW3ByaXZdIHsK
KyAgICAgICAgICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKICAgICAgICAgfSk7Ci0gICAgICAg
IGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgImtleSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIGlmICghcHJpdi0+Y2RtUHJveHkp
IHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5IHdhcyBub3Qg
cmV0cmlldmVkIGluIHRpbWUiKTsKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQ
UE9SVEVEOwogICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBy
ZWNlaXZlZCwgY29udGludWluZyIpOwotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gZmFs
c2U7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwg
Z3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9u
ZXdfZW1wdHkoImRybS1rZXktcmVjZWl2ZWQiKSkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFkZHJlc3MgJXAiLCBwcml2LT5jZG1Qcm94
eS5nZXQoKSk7CiAgICAgfQogCiAgICAgR3N0UHJvdGVjdGlvbk1ldGEqIHByb3RlY3Rpb25NZXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9uTWV0YSo+KGdzdF9idWZmZXJfZ2V0X3By
b3RlY3Rpb25fbWV0YShidWZmZXIpKTsKQEAgLTIwNywzMiArMTk3LDMwIEBAIHN0YXRpYyBHc3RG
bG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVm
ZmVyKiBidWZmZXIpCiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBn
ZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CiAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KKyAgICBhdXRvIHJlbW92
ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFtidWZmZXIsIHByb3RlY3Rp
b25NZXRhXSB7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVy
cHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIH0pOwogCiAgICAgdW5z
aWduZWQgaXZTaXplOwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9u
TWV0YS0+aW5mbywgIml2X3NpemUiLCAmaXZTaXplKSkgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9y
ZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25N
ZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAog
ICAgIGdib29sZWFuIGVuY3J5cHRlZDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xl
YW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgewogICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFn
Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7
Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0
PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIGlmICghaXZTaXplIHx8ICFlbmNyeXB0
ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9CiAKICAgICBHU1RfREVCVUdf
T0JKRUNUKGJhc2UsICJwcm90ZWN0aW9uIG1ldGE6ICUiIEdTVF9QVFJfRk9STUFULCBwcm90ZWN0
aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudDsKICAgICBpZiAo
IWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVf
Y291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50Iik7Ci0gICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAK
QEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIHZh
bHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJz
YW1wbGVzIik7CiAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlcyIpOwotICAgICAgICAgICAgZ3N0
X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHBy
b3RlY3Rpb25NZXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRF
RDsKICAgICAgICAgfQogICAgICAgICBzdWJTYW1wbGVzQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9i
dWZmZXIodmFsdWUpOworICAgICAgICBpZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIlRoZXJlIGlzIG5vIHN1YnNhbXBsZXMgYnVmZmVy
LCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1wbGUgY291bnQiKTsKKyAgICAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9CiAgICAgfQogCiAgICAgdmFsdWUgPSBn
c3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgImtpZCIpOwogCiAg
ICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVyIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21l
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwog
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAgICAgR3N0QnVm
ZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKQEAgLTI2MCw3
ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VU
cmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIpOwogICAgIGlmICghdmFs
dWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBm
b3Igc2FtcGxlIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI3MCw3MSArMjU5LDkxIEBAIHN0
YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFz
ZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZGVjcnlw
dGluZyIpOwogICAgIGlmICgha2xhc3MtPmRlY3J5cHQoc2VsZiwgaXZCdWZmZXIsIGtleUlEQnVm
ZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZhaWxlZCIpOwotICAgICAgICBn
c3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4o
cHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7
CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgcmV0dXJuIEdTVF9GTE9XX09L
OwogfQogCi1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCitzdGF0aWMgYm9vbCBpc0NETVByb3h5QXZhaWxh
YmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVE
SUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJv
eHk7Cit9CiAKLSAgICBBU1NFUlQocHJpdi0+bXV0ZXguaXNMb2NrZWQoKSk7Ci0KLSAgICBpZiAo
IXByaXYtPnByb3h5Q0RNKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRy
bS1jZG0taW5zdGFuY2UiKSk7Ci0gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVy
IGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBy
dW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5k
IGEgYnVzCi0gICAgICAgIC8vIG1lc3NhZ2UuIEluIHRoaXMgY2FzZSB0aGF0IGRvZXMgbm90IG1h
a2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ugb25seSB0aGUgYXBwIChwbGF5ZXIpIGFuc3dlcnMgaXQs
IG1lYW5pbmcgdGhhdCBubyBxdWVyeSBpcyBnb2luZyB0byBzb2x2ZSBpdC4gQSBtZXNzYWdlCi0g
ICAgICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4
dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBo
YXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcwotICAgICAg
ICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5z
IHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3
YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwotICAgICAgICAv
LyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhlcmUuCi0gICAgICAgIGlmIChjb250ZXh0KSB7Ci0gICAg
ICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0
X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1pbnN0YW5jZSIpOwot
ICAgICAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJv
eHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICAg
ICAgaWYgKHByaXYtPnByb3h5Q0RNKQotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUi
LCBwcml2LT5wcm94eUNETS5nZXQoKSwgcHJpdi0+cHJveHlDRE0tPnJlZkNvdW50KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNE
TSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQiKTsKK3N0YXRpYyBDRE1Qcm94eSogZ2V0Q0RNUHJveHlG
cm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQor
eworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0tcHJveHkiKSk7CisgICAg
Q0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0
cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNo
b3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhl
biBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3Qg
bWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBp
dCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UK
KyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNvbnRleHQg
YXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2
ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMKKyAgICAvLyBz
b21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQg
d2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0
aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cworICAgIC8vIHJlcXVlc3Rz
IGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBjb25zdCBHVmFs
dWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVj
dHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAgICAgICBpZiAodmFsdWUpIHsK
KyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVf
Z2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBp
bnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHktPnJlZkNvdW50KCkpOworICAg
ICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBub3QgYXZhaWxhYmxlIGluIHRo
ZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGlu
c3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2LT5wcm94eUNETS5nZXQo
KSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJh
bnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFjaENETVByb3h5KFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVByb3h5KiBwcm94eSkKIHsKLSAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElB
X0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRF
KHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xh
c3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKLSAgICBnYm9v
bGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQp
KSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiB7Ci0gICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1
Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0
aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91dC1vZi1iYW5kIGRhdGEuIElu
IHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8gcHJlZmVycmVkIHN5c3RlbSBJ
RCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCi0gICAgICAgIC8vIGV2ZW50
cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGUgbXVzdCBiZQotICAg
ICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYt
Pm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZhaWxhYmxlKHNlbGYpKSB7Ci0g
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBDRE0gaW5zdGFuY2UgYXZhaWxh
YmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0
ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Qcm94eSAlcCIs
IHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5OworICAgIGtsYXNzLT5jZG1Qcm94
eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2LT5jZG1BdHRhY2htZW50
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5zdGFsbENETVBy
b3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikpIHsKKyAgICAgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkqIHByb3h5ID0gZ2V0Q0RN
UHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAg
ICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7CisgICAgICAgICAgICByZXN1bHQgPSBU
UlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZyb20gY29udGV4dCIpOwogICAgICAgICAg
ICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJl
c3BvbnNlKHNlbGYsIHByaXYtPnByb3h5Q0RNKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzZWxmLCAia2V5IHJlY2VpdmVkIik7Ci0gICAgICAgICAgICBwcml2LT5rZXlSZWNlaXZl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAg
ICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhh
bmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NF
TkNfREVDUllQVCh0cmFucyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CiAKKyAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1NQor
ICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNs
YXNzIGluCisgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBw
bGF5YmFjaywgYWZ0ZXIgYQorICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBz
ZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgorICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5k
bGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGV5IG11c3QgYmUKKyAgICAvLyBoYW5kbGVkIGluIGhl
cmUuCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9F
VkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgQVNTRVJUKGdzdF9ldmVudF9o
YXNfbmFtZShldmVudCwgImF0dGVtcHQtdG8tZGVjcnlwdCIpKTsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAiSGFuZGxpbmcgYXR0ZW1wdC10by1kZWNyeXB0Iik7CisgICAgICAgIHJl
c3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYpOwogICAgICAgICBnc3Rf
ZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzU0LDYgQEAgc3RhdGljIGdib29s
ZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBl
dmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5k
bGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBH
c3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoZ3N0X3F1
ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXki
KSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUodHJhbnMpOwotICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1r
ZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+d2FpdGlu
Z0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0ZvcktleTsKLSAgICB9Ci0g
ICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5xdWVyeSh0
cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVy
biBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0
aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYzLDcgKzM2Miw3IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2LT5jb25kaXRpb24ubm90
aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25l
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzgw
LDEyICszNzksMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwogICAg
IFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVD
UllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKLSAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRf
dHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7Ci0gICAgICAgIGNvbnN0IEdWYWx1
ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0
dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJw
cmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRy
OwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFu
Y2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgaWYgKGdzdF9jb250ZXh0X2hhc19j
b250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0tcHJveHkiKSkgeworICAgICAgICBjb25zdCBH
VmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0
cnVjdHVyZShjb250ZXh0KSwgImNkbS1wcm94eSIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgICAgICBwcml2LT5jZG1Qcm94eSA9IHZh
bHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFs
dWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVk
IG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKKyAgICAgICAga2xh
c3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4IDA2NTFkZmI5YzNiZTk1
OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjg1NzVhMDcxMDJiZDEzM2Y5MjVkZTFhMDdhZGM5
MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0yNCw3ICsyNCw3IEBA
CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5j
bHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94eS5oPgogI2luY2x1ZGUgPGdz
dC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBh
cmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlkOwotICAgIGJv
b2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOwotICAgIGJvb2wgKCpkZWNyeXB0KShXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0
QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBs
ZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICBib29sICgqY2RtUHJv
eHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxX
ZWJDb3JlOjpDRE1Qcm94eT4pOworICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJ
REJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0
QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1
ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5
NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rvcnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0y
MjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25J
ZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogfQogCi1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tD
RE1JbnN0YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDog
bV9jZG0oY2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNz
aW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAot
UmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3Rh
bmNlU2Vzc2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5j
ZT4mJiBpbnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3
ODEyZWFmYThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2
N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFj
dG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAt
OTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxT
aGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5h
bCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2Nr
KCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3Rv
cmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtl
eVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNy
ZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29u
c3QgZmluYWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0
aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390308</attachid>
            <date>2020-02-10 16:18:09 -0800</date>
            <delta_ts>2020-02-11 04:38:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211001807.patch</filename>
            <type>text/plain</type>
            <size>108875</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uOWRmZTAwYTRhMDQ0YmE5ZWY1NmRlMzVkMDJiZDVk
NzBhZmE0YTQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxNiBAQAorMjAyMC0wMS0yOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
LgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0
ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0IHRoZWlyIHN0YXR1cyBpcy4KKworICAg
ICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhyZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVh
bCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIgcXVpcmtzLiBUaGUgdHdvIG1haW4gcHJv
YmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisgICAgICAgIGhhdmUgaW4gV2ViS2l0IGlz
IGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZyb20gYmFja2dyb3VuZAorICAgICAgICBt
ZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5hZ2VtZW50IGlzIGhvdyB0byBtYW5hZ2Ug
dGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAgICAgY29oZXJlbnQgd2l0aCBKYXZhU2Ny
aXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxlbWVudGF0aW9uLAorICAgICAgICB0aGUg
cmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFja2dyb3VuZCBtZWRpYQorICAgICAgICB0
aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1bHQga2V5IHN0b3JlIGludGVyZmFjZSBm
b3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFzc2VzIGNhbiwgb24gcmVjZWlwdCBvZiBu
ZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJlYWwgQ0RNLCB0ZWxsIENETVByb3h5IGFi
b3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBzdGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50
ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20gdGhlcmUsCisgICAgICAgIGxldHRpbmcg
SmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8K
KyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMgd2VsbCBhcyB0aGUgbWVkaWEgZGVjb2Rl
IHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQgY29tZSBhc2tpbmcuCisKKyAgICAgICAg
QWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlzIGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcg
dGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5zdGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3
YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRoaXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5
IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAgICAgIHRocmVhZC11bnNhZmUgYWNjZXNz
IG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdlIGhhZCB0byBkbworICAgICAgICBzb21l
dGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNvbWV0aGluZyB3YXMgUHJveHlDRE0gKGEK
KyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBub3cpLCB3aGljaCB3YXMgYSBoYWNrIGFu
ZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5
IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFuZAorICAgICAgICBpdCB3aWxsIGJ5IGRl
ZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcgb2YgdGhlIGtleSBzdG9yZSBmb3IKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVycm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5k
IHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRlY3J5cHRpb24gLyBkZWNvZGUuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5j
bHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVy
ZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEg
dGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29tZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2Vy
dHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiByZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAg
Zm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3Jy
eSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFz
U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0
b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0
YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5
OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQ
cm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OmlkQXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpL
ZXk6OktleSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3Rv
cmU6OnJlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6Q0RN
SW5zdGFuY2VQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojpwcm94
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5Ojppc1dhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UGxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnRyYWNrU2Vzc2lvbik6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXku
Y3BwOiBBZGRlZCBhIDMyIGFuZAorICAgICAgICAxNiBiaXQgYnl0ZSByZWFkZXIgdXRpbGl0eSBm
b3Igc3Vic2FtcGxlIGJ1ZmZlciBwYXJzaW5nLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNl
bnNlRm9ybWF0KTogUmVmYWN0b3JlZCB0byB1c2UgbmV3IEtleSBjbGFzcy4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEpOiBSZWZhY3RvcmVk
IHRvCisgICAgICAgIHVzZSBiZXR0ZXIgbmFtZWQgY29uc3RhbnRzLgorICAgICAgICAoV2ViQ29y
ZTo6ZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKTogSGVscGVyIG1ldGhv
ZCBmb3IgR0NyeXB0LgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY1Nl
dERlY3J5cHRpb25LZXkpOiBEaXR0by4gVGhpcworICAgICAgICBtZXRob2Qgd2lsbCBibG9jayBp
ZiBpdCBkZXRlY3RzIGEga2V5IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGZyb20gSlMuCisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2Ft
cGxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0Rl
Y3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRp
YWxpemVHY3J5cHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJL
ZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkpOiBXaXJlIGludG8gdGhlCisgICAgICAgIENETVByb3h5
IGluZnJhc3RydWN0dXJlLCB3ZSBwYXNzIG91ciBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgor
ICAgICAgICBDRE1Qcm94eSB0byB0aGUgYmFzZSBjbGFzcyBmb3IgaXRzIGNvbW1hbmQga2V5IG1h
bmFnZW1lbnQKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24pOiBVc2UgdGhlCisgICAgICAgIHRyYWNrU2Vzc2lv
biBtZXRob2QgdG8gYWxsb3cgZWFzaWVyIG1vbml0b3Jpbmcgb2YgYWxsIEVNRQorICAgICAgICBz
ZXNzaW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpy
ZXF1ZXN0TGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIGtlZXAgdHJhY2sgb2YgZ2VuZXJh
dGVkIHNlc3Npb24gSURzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICB1c2UgbmV3IGtleSBt
YW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6bG9hZFNlc3Npb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6a2V5cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDbGVhcktleVN0YXRlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aXNvbGF0ZWRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJveHlDRE1DbGVhcktl
eTo6aXNvbGF0ZWRLZXlzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBEZWxldGVkLiBJdCBsb29rcyBsaWtlIHdl
IHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQg
ZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2UgYW4KKyAgICAgICAgb3JkZXJpbmcgb24g
a2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9yIHRvIHVzZQorICAgICAgICBuZXcga2V5
IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oOgorICAgICAg
ICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXJzZUluaXREYXRhRnJv
bVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVmYWN0b3JlZCBvdXQgb2Ygc3luY01lc3Nh
Z2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBpbnRvCisgICAgICAgIHdhaXRGb3JDRE1B
dHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2Up
OiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5IGNvZGUsIGl0IHdhcyBhbGwgYnJva2Vu
IGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVuZm9yY2UgdXNlIG9mIENETUluc3RhbmNl
UHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMgd2lsbCBiZQorICAgICAgICB1c2luZyB0
aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20gYmFja2dyb3VuZAorICAgICAgICB0aHJl
YWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8gdGhlIE1lZGlhUGxheWVyIGZvcgorICAg
ICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNvIHdpcmUgdGhhdCBpbiBoZXJlIHRvby4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFu
Y2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBLZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNhdGlv
bnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdworICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94
eSwgbm90IENETUluc3RhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBSZWZh
Y3RvciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5
cHRfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVk
KToKKyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxl
dGVkLiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBiZWVu
IGNoYW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkpOiBE
ZWxldGVkLgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2luaXQpOgor
ICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6CisgICAgICAg
IChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5j
cHA6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFz
c19pbml0KToKKyAgICAgICAgKHRyYW5zZm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Qcm94
eUF2YWlsYWJsZSk6CisgICAgICAgIChnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAgICAg
ICAgKGF0dGFjaENETVByb3h5KToKKyAgICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxh
YmxlKToKKyAgICAgICAgKHNpbmtFdmVudEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3RhdGUp
OgorICAgICAgICAoc2V0Q29udGV4dCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
aXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRsZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNl
Ojpwcm94eUNETSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFj
dG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYW5kYXRlIFVVSUQgdmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRhdGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3
MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBA
QAogCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9y
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1
IC8qIENETUZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFj
dG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1RDUgLyogQ0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFG
NzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ0RNUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMx
RjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJ
CQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAog
CQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJ
CUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1
Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFD
QjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1
QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUg
LyogQ0RNUmVzdHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8q
IENETVNlc3Npb25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uOWU2N2Fi
OGY0ZTZkNTZhNDUwYzFmMjA4YjMyNzc4MmJjOTcwNzEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTY0LDggKzE2NCw4IEBAIGlmIChFTkFCTEVfRU5DUllQ
VEVEX01FRElBKQogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAg
ICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKICAgICAgICAgcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCi0KICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAg
ICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNSW5zdGFuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUluc3RhbmNlLmgKaW5kZXggYThkN2NjMTU1MjU4NDY3MzllZmRlZTZhMDM1NGQ0OGVjYWMxMzAz
Ny4uOGY5ZjNlYjg3NDVjMzUyMDI4MzE0YzYwNmQyODlkNGUzZjcxYTA0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCkBA
IC0zOSwxNyArMzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTaGFyZWRCdWZm
ZXI7Ci0KIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbjsKLWNsYXNzIFByb3h5Q0RNOwotCi0vLyBI
YW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEphdmFTY3JpcHQgZmFjYWRlLiBUaGlzIGNh
biBiZSB1c2VkCi0vLyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4K
LWNsYXNzIFByb3h5Q0RNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFByb3h5Q0RNPiB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE0oKSA9IGRlZmF1bHQ7Ci19OwotCiBzdHJ1
Y3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbjsKIAogLy8gSmF2YVNjcmlwdCdzIGhhbmRsZSB0
byBhIENETUluc3RhbmNlLCBtdXN0IGJlIHVzZWQgZnJvbSB0aGUKQEAgLTc3LDcgKzY3LDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJikgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVT
ZXNzaW9uKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNv
bnN0ID0gMDsKIAogICAgIGVudW0gY2xhc3MgSERDUFN0YXR1cyB7CiAgICAgICAgIFVua25vd24s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjc3ODE2ODQyNmVjYTUyZWU4YzI2MjI2ZWEwMTUxZGZmYzFiYzY4
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETVByb3h5LmNwcApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAq
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgU3RyaW5nIHZl
Y3RvclRvSGV4U3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmVjKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gYnl0ZSA6IHZlYykKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocGFkKCcwJywgMiwgaGV4KGJ5dGUpKSk7CisgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Uge30KKwor
U3RyaW5nIEtleTo6aWRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmco
IlsiLCB2ZWN0b3JUb0hleFN0cmluZyhtX2lkKSwgIl0iKTsKK30KKworU3RyaW5nIEtleTo6dmFs
dWVBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCB2ZWN0b3JU
b0hleFN0cmluZyhtX3ZhbHVlKSwgIl0iKTsKK30KKworYm9vbCBLZXlTdG9yZTo6Y29udGFpbnNL
ZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIHJldHVybiBt
X2tleXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7Cisg
ICAgICAgIHJldHVybiAqc3RvcmVkS2V5ID09IGtleUlEOworICAgIH0pICE9IFdURjo6bm90Rm91
bmQ7Cit9CisKK3ZvaWQgS2V5U3RvcmU6Om1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcikKK3sK
KyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBtZXJnaW5nICV1IG5ldyBrZXlzIGludG8g
YSBrZXkgc3RvcmUgb2YgJXUga2V5cyIsIG90aGVyLm51bUtleXMoKSwgbnVtS2V5cygpKTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKSB7CisgICAgICAgIC8vIE5PVEU6IERvIHdl
IGNhcmUgdGhhdCB3ZSB3aWxsIG5vdCBhcHBlbmQgYSBrZXkgaWYgaXQgbWF0Y2hlcyBhIGtleSBJ
RAorICAgICAgICAvLyBpbiB0aGUga2V5c3RvcmUgYW5kIGhhcyBkaWZmZXJlbnQgZGF0YS4gU2hv
dWxkIHdlIG92ZXJ3cml0ZT8gV2hpY2ggaXMgIm5ld2VyIj8KKyAgICAgICAgLy8gRG9uJ3QgdGhp
bmsgd2UgbmVlZCB0aGlzIGV4dHJhIGNvbXBsZXhpdHkuCisgICAgICAgIGlmIChtX2tleXMuZmlu
ZE1hdGNoaW5nKFsmXSAoY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeyByZXR1cm4gKmtl
eSA9PSAqc3RvcmVkS2V5OyB9KSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgbV9rZXlz
LmFwcGVuZChrZXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoZmFsc2UgJiYg
Imlnbm9yZWQgYSBrZXkgd2l0aCB0aGUgc2FtZSBJRCBhbmQgZGlmZmVyZW50IGRhdGEiKTsKKyAg
ICB9CisKKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIGtleSBzdG9yZSBub3cgaGFzICV1IGtleXMiLCBudW1L
ZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAgICAgICBMT0co
RU1FLCAiXHRFTUUgLSBDRE1Qcm94eSAtIEtleSBJRDogJXMiLCBrZXktPmlkQXNTdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0df
RElTQUJMRUQKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3Rv
cmU6OmFsbEtleXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1Zl
Y3RvcigpOworICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAg
ICAgICBrZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJl
bGVhc2VkOworICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6
OmFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAgYm9vbCBkaWRL
ZXlTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykgewor
ICAgICAgICBpZiAoYWRkKFdURk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRLZXlTdG9yZUNo
YW5nZSA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKK30KKwor
Ym9vbCBLZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJvb2wgZGlkU3Rv
cmVDaGFuZ2UgPSBmYWxzZTsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9
IG1fa2V5cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7
CisgICAgICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisKKyAgICBpZiAo
a2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1
dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5k
ZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUo
KSA9PSBrZXktPnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAl
cyBnZXR0aW5nIGFkZGVkIHRvIGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsgICAgICAKKyAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAgICAgICBkaWRT
dG9yZUNoYW5nZSA9IHRydWU7CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9uUmVmZXJlbmNl
KCk7CisgICAgcmV0dXJuIGRpZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0b3JlOjpyZW1v
dmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25zdCBh
dXRvJiBrZXkgOiBvdGhlcikKKyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jvb2wgS2V5U3Rv
cmU6OnJlbW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFu
Z2VkID0gZmFsc2U7CisKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1f
a2V5cy5maW5kKGtleSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVk
IHRvIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVuY2VzIiwga2V5
LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJlZmVyZW5jZXMo
KSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5k
KSB7CisgICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhN
YXRjaGluZ0tleUlESW5kZXhdOworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVtb3Zl
U2Vzc2lvblJlZmVyZW5jZSgpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5u
dW1TZXNzaW9uUmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xl
YXJLZXkgLSByZW1vdmUga2V5IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRB
c1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5yZW1vdmUoa2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5nZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktl
eSAtIGF0dGVtcHQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRvZXMgbm90IGV4
aXN0Iiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHN0
b3JlQ2hhbmdlZDsKK30KKworY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFs
dWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJRCkKKyAgICAg
ICAgICAgIHJldHVybiBrZXktPnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUKGZhbHNlICYmICJrZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7CisgICAg
VU5SRUFDSEFCTEUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3Ig
S2V5U3RvcmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sKKyAgICBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAga2V5
U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykgeworICAgICAgICAvLyBGSVhNRTogVmVjdG9yPHVp
bnQ4X3Q+IHJlcHJlc2VudGF0aW9uIGlzIGNvcHktaGVhdnksIGJ1dCB0aGUKKyAgICAgICAgLy8g
ZGF0YSBhcmUgc21hbGwgaW4gbnVtYmVyLCBzbyBwcm9iYWJseSBpdCdzIGZpbmUuCisgICAgICAg
IGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZm
ZXI+LCBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cz4geyBrZXktPmlkQXNTaGFyZWRCdWZm
ZXIoKSwga2V5LT5zdGF0dXMoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3Rv
cjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5l
d0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwor
ICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsKKyAg
ICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldElu
c3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011
dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAg
cmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5Ojpz
dGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0
ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9p
bnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3Rv
cHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVk
IHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5z
dGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVuY29uZGl0
aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRo
YXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5nIGEga2V5
LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBtb3JlIGNs
ZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9yS2V5T25S
ZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0aW5nRm9y
S2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5aW5nIHRv
IHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tleVJlY2Vp
dmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5OjpNYXhL
ZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAgICByZXR1
cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5
IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmco
a2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsK
KyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVzIG5v
dCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJs
ZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6
OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBrZXlBdmFp
bGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RN
UHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVj
dG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHRy
eVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7
Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKQorewor
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wgd2FzV2Fp
dGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAgIG1fbnVt
RGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXll
ciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYg
d2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5n
ZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVkV2FpdGlu
Z0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXllciAmJiBt
X251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0b3JzV2Fp
dGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1fbnVtRGVj
cnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBt
X3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYg
aXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5nRm9yS2V5
Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5
c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBOb3RpZnkg
SlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1f
a2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1JbnN0YW5j
ZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlmeWluZyBD
RE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAgIG1fY2Rt
UHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVBy
b3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXNGcm9t
KGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0OWE4MzlhNzQ2YzZkNDQ3ZDlmNGFj
N2RkMDhjMzkzY2YwOTQzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNE
TUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSA8bGlzdD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXkgOiBwdWJsaWMgUmVm
Q291bnRlZDxLZXk+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1czsKKworICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUoS2V5
U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYm
IGtleVZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0YXR1
cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgfQorICAgIFJlZjxT
aGFyZWRCdWZmZXI+IGlkQXNTaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShtX2lkLmRhdGEoKSwgbV9pZC5zaXplKCkpOyB9CisKKyAgICBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgVmVjdG9y
PHVpbnQ4X3Q+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBLZXlTdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgIFN0cmluZyBpZEFzU3RyaW5n
KCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKworICAgIC8vIFR3
byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2
YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5ICZr
MSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJldHVy
biBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRTZXNzaW9uUmVmZXJlbmNl
KCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2VzKys7IH0K
KyAgICB2b2lkIHJlbW92ZVNlc3Npb25SZWZlcmVuY2UoKSB7IEFTU0VSVChpc01haW5UaHJlYWQo
KSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMtLTsgfQorICAgIHVuc2lnbmVkIG51bVNlc3Npb25S
ZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9udW1T
ZXNzaW9uUmVmZXJlbmNlczsgfQorICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKKworICAgIEtl
eShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5VmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZNb3Zl
KGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorCisgICAgS2V5U3RhdHVz
IG1fc3RhdHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOworICAgIFZlY3Rvcjx1aW50OF90
PiBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07Cit9
OworCitjbGFzcyBLZXlTdG9yZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzVmVjdG9y
ID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBib29sIGNvbnRh
aW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9pZCBt
ZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20o
Y29uc3QgS2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1fa2V5
cy5jbGVhcigpOyB9CisgICAgYm9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7Cisg
ICAgYm9vbCBhZGQoUmVmUHRyPEtleT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVmUHRy
PEtleT4mKTsKKyAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnNp
emUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNBc1Jl
bGVhc2VkKCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3RhdHVz
VmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJlZ2lu
KCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7IH0K
KyAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byByYmVnaW4oKSB7IHJldHVy
biBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmVuZCgpIHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7
IH0KKyAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tleXM7Cit9OworCitjbGFzcyBDRE1J
bnN0YW5jZVByb3h5OworCisvLyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEphdmFT
Y3JpcHQgZmFjYWRlLiBUaGlzIGNhbiBiZSB1c2VkCisvLyBmcm9tIGJhY2tncm91bmQgdGhyZWFk
cyAoaS5lLiBkZWNyeXB0b3JzKS4KK2NsYXNzIENETVByb3h5IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPENETVByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBTZWNv
bmRzIE1heEtleVdhaXRUaW1lU2Vjb25kcyA9IDVfczsKKworICAgIHZpcnR1YWwgfkNETVByb3h5
KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB1cGRhdGVLZXlTdG9yZShjb25zdCBLZXlTdG9yZSYg
bmV3S2V5U3RvcmUpOworICAgIHZvaWQgc2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSopOwor
Citwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2NrZWQo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiB0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNv
bnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdG
b3JLZXkoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKKyAgICBDRE1JbnN0
YW5jZVByb3h5KiBtX2luc3RhbmNlOworCisgICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4Owor
ICAgIG11dGFibGUgQ29uZGl0aW9uIG1fa2V5c0NvbmRpdGlvbjsKKyAgICAvLyBGSVhNRTogRHVw
bGljYXRlZCBrZXkgc3RvcmVzIGluIHRoZSBpbnN0YW5jZSBhbmQgdGhlIHByb3h5IGFyZSBwcm9i
YWJseSBub3QgbmVlZGVkLCBidXQgc2ltcGxpZmllZAorICAgIC8vIHRoZSBpbml0aWFsIGltcGxl
bWVudGF0aW9uIGluIHRlcm1zIG9mIHRocmVhZGluZyBpbnZhcmlhbnRzLgorICAgIEtleVN0b3Jl
IG1fa2V5U3RvcmU7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBtYW5h
Z2VtZW50IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJyZWFs
IENETSIgc3RhdGUgY2hhbmdlcyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBwdWJs
aWMgQ0RNSW5zdGFuY2UgeworcHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoQ0RNUHJveHkq
IHByb3h5KSA6IG1fY2RtUHJveHkoYWRvcHRSZWYocHJveHkpKSB7IHByb3h5LT5zZXRJbnN0YW5j
ZSh0aGlzKTsgfQorICAgIHZpcnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisK
KyAgICAvLyBNYWluLXRocmVhZCBvbmx5LgorICAgIHZvaWQgbWVyZ2VLZXlzRnJvbShjb25zdCBL
ZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmKTsK
KworICAgIC8vIE1lZGlhIHBsYXllciBxdWVyeSBtZXRob2RzIC0gbWFpbiB0aHJlYWQgb25seS4K
KyAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JL
ZXkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bURlY3J5cHRv
cnNXYWl0aW5nRm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlhUGxheWVyKiBw
bGF5ZXIpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9wbGF5ZXIgPSBwbGF5ZXI7IH0KKwor
ICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRocmVhZC1zYWZlLgorICAgIHZvaWQgc3Rh
cnRlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIHRyYWNrU2Vzc2lvbihjb25zdCBSZWZQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uPiBzZXNzaW9uKSB7IG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24pOyB9CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPENETVByb3h5PiBtX2NkbVByb3h5OworICAgIC8vIEZJWE1FOiBX
ZWFrUHRyIGZvciB0aGUgbV9wbGF5ZXI/IFRoaXMgaXMgYWNjZXNzZWQgZnJvbSBiYWNrZ3JvdW5k
IGFuZCBtYWluIHRocmVhZHMsIGl0J3MKKyAgICAvLyBjb25jZXJuaW5nIHdlIGNvdWxkIGJlIGFj
Y2Vzc2luZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2h1dGRvd24gb24gdGhlIG1haW4tdGhyZWFk
LCBlaD8KKyAgICAvLyBBcyBhIENETVByb3h5LCB3ZSAqKipzaG91bGQqKiogYmUgdHVybmVkIG9m
ZiBiZWZvcmUgdGhpcyBwb2ludGVyIGV2ZXIgZ29lcyBiYWQuCisgICAgTWVkaWFQbGF5ZXIqIG1f
cGxheWVyIHsgbnVsbHB0ciB9OyAvLyBGSVhNRTogTWFpblRocmVhZDxUPj8KKworICAgIHN0ZDo6
YXRvbWljPGludD4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKyAgICBWZWN0b3I8UmVm
UHRyPENETUluc3RhbmNlU2Vzc2lvbj4+IG1fc2Vzc2lvbnM7CisKKyAgICBLZXlTdG9yZSBtX2tl
eVN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAppbmRleCA2NDg1
ZGI3NWQ3ZTczMzliMTU2MWRjNmQ1OGVmMjljOWIzMTIzNTgwLi4zOWUwNzFjMzAyZTY4OGY5M2Ji
MmIwYzVlMWNmNmQyZjYwMTY2OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCkBA
IC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00MywzMyArNDYsNDMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktleSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6Ly93
d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1aW50
OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4
YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIs
IDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9
IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNpemUg
PSAxNjsKK25hbWVzcGFjZSB7CiAKLWNsYXNzIENsZWFyS2V5U3RhdGUgewotICAgIHVzaW5nIEtl
eVN0b3JlID0gSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+
PjsKLQotcHVibGljOgotICAgIHN0YXRpYyBDbGVhcktleVN0YXRlJiBzaW5nbGV0b24oKTsKK3N0
YXRpYyBib29sIHJlYWRVSW50MzIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSwgc2l6ZV90JiBvZmZzZXQsIHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJH
KG9mZnNldCwgb2Zmc2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zm
c2V0IDwgc2l6ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS2V5U3Rv
cmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0KKyAgICB2YWx1ZSA9IG50b2hsKCpyZWludGVy
cHJldF9jYXN0X3B0cjxjb25zdCB1aW50MzJfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9m
ZnNldCArPSBzaXplb2YodmFsdWUpOwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZl
ckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPjsKLSAgICBDbGVhcktleVN0YXRlKCk7Ci0gICAgS2V5
U3RvcmUgbV9rZXlzOwotfTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotQ2xlYXJLZXlTdGF0ZSYg
Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkKK3N0YXRpYyBib29sIHJlYWRVSW50MTYoY29uc3Qg
dWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90JiBvZmZzZXQsIHVpbnQx
Nl90JiB2YWx1ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT4g
c19zdGF0ZTsKLSAgICByZXR1cm4gc19zdGF0ZTsKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwgb2Zm
c2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6ZW9m
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9ocygqcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDE2X3QqPihidWZmZXIgKyBvZmZzZXQpKTsKKyAg
ICBvZmZzZXQgKz0gc2l6ZW9mKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1DbGVh
cktleVN0YXRlOjpDbGVhcktleVN0YXRlKCkgPSBkZWZhdWx0OworLy8gQ2xlYXJLZXkgQ0VOQyBT
eXN0ZW1JRC4KKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbWUtaW5pdGRhdGEtY2VuYy8jY29t
bW9uLXN5c3RlbQorY29uc3QgdWludDhfdCBjbGVhcktleUNlbmNTeXN0ZW1JZFtdID0geyAweDEw
LCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAw
eDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjbGVh
cktleUNlbmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2xlYXJLZXlDZW5jU3lzdGVtSWQpOworZW51
bSB7CisgICAgQUVTMTI4Q1RSQmxvY2tTaXplSW5CeXRlcyA9IDE2LAorICAgIENsZWFyS2V5S2V5
SURTaXplSW5CeXRlcyA9IDE2LAorICAgIENsZWFyS2V5SVZTaXplSW5CeXRlcyA9IDE2LAorfTsK
KworfQogCiBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0
IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewpAQCAtODgsNyArMTAxLDcgQEAgc3RhdGljIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZl
cikKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUlu
c3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmpl
Y3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUgJ2tl
eXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSByb290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04gZnVy
dGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3JtYXQu
CkBAIC0xMDEsNyArMTE0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjoKICAgICBpZiAoIWl0
LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4gZGVjb2RlZEtleXM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0
ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAg
ICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKICAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsKQEAgLTExNiwxMSArMTI5LDExIEBAIHN0YXRp
YyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNl
Rm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5n
KCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eUlERGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERl
Y29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZh
bHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSks
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkgfSk7CisgICAgICAg
ICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0
YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZh
bGlkRm9ybWF0KQpAQCAtMjEyLDcgKzIyNSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAg
ICAgaW5kZXggKz0gNDsgLy8gS2V5SWRzQ291bnQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBv
dmVyZmxvdy4KLSAgICBpZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIGtleUlkU2l6ZSkp
ID49IGluaXREYXRhU2l6ZSkKKyAgICBpZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIENs
ZWFyS2V5S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRhU2l6ZSkKICAgICAgICAgcmV0dXJu
IGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQgPSBpbmRleDsgLy8gVGhlIGxvY2F0
aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4KQEAgLTI1MSw5ICsyNjQsOSBAQCBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoY29u
c3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFycmF5IG9m
IGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVybCBlbmNv
ZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZhbHVlLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAgICAgICAg
U3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBrZXlJZFNp
emUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGF0YVtp
bmRleF0sIENsZWFyS2V5S2V5SURTaXplSW5CeXRlcyk7CiAgICAgICAgIGtleUlkc0FycmF5LT5w
dXNoU3RyaW5nKGtleUlkKTsKLSAgICAgICAgaW5kZXggKz0ga2V5SWRTaXplOworICAgICAgICBp
bmRleCArPSBDbGVhcktleUtleUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCiAgICAgb2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoa2V5SWRzQXJyYXkpKTsKQEAgLTQ1Niw0MSArNDY5LDEz
MSBAQCBPcHRpb25hbDxTdHJpbmc+IENETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVTZXNzaW9u
SWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpCiAgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0KIAot
Ly8gVGhpcyBpcyBmb3IgdGhyZWFkLXNhZmV0eSBkdXJpbmcgYW4gYXJjaGl0ZWN0dXJhbCBzaXR1
YXRpb24gdGhhdCBpcwotLy8gbGVzcyB0aGFuIGlkZWFsLiBUaGUgR1N0cmVhbWVyIGRlY3J5cHRv
cnMgY3VycmVudGx5IG5lZWQgdG8gaXRlcmF0ZQotLy8gYWxsIGtub3duIHNlc3Npb24ga2V5cyB0
byBmaW5kIHRoZSBrZXkgZGF0YSBmb3IgcHJpbWluZwotLy8gR0NyeXB0LiBJZGVhbGx5LCBhbGwg
ZGVjcnlwdGlvbiB3b3VsZCBiZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YKLS8vIFByb3h5Q0RNIG9i
amVjdCBsaWtlIHRoaXMgb25lLiBXaGF0IHRoZSBiYWNrZ3JvdW5kIEdTdHJlYW1lcgotLy8gdGhy
ZWFkIHdhcyBkb2luZyB3YXMgZ2V0dGluZyBjb3BpZXMgKGkuZS4gcmVmKCkncykgb2YgU2hhcmVk
QnVmZmVycwotLy8gY3JlYXRlZCBvbiB0aGUgbWFpbi10aHJlYWQuIFdpdGggdGhlIG5ldyBzYWZl
dHkgYXNzZXJ0aW9ucyBpbgotLy8gV2ViS2l0LCB3ZSBjYW4gbm8gbG9uZ2VyIGRvIHRoaXMuIElu
c3RlYWQsIGNvbnZlcnQgdGhlIHJlZmNvdW50ZWQKLS8vIFNoYXJlZEJ1ZmZlcnMgaW50byBTdHJp
bmdzIHdoaWNoIGNhbiBiZSBzYWZlbHkgY29waWVkIGFjcm9zcwotLy8gdGhyZWFkcy4KLXN0YXRp
YyBQcm94eUNETUNsZWFyS2V5OjpLZXkgaXNvbGF0ZWRLZXkoY29uc3QgQ0RNSW5zdGFuY2VDbGVh
cktleTo6S2V5JiBrZXkpCisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KCkK
IHsKLSAgICByZXR1cm4geyBrZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0YSgp
LCBrZXkua2V5SUREYXRhLT5zaXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgp
LCBrZXkua2V5VmFsdWVEYXRhLT5zaXplKCkpIH07CisgICAgZ2NyeV9jaXBoZXJfY2xvc2UobV9n
Y3J5SGFuZGxlKTsKIH0KIAotY29uc3QgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gUHJv
eHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzKCkgY29uc3QKK2Jvb2wgQ0RNUHJveHlDbGVhcktl
eTo6Y2VuY1NldENvdW50ZXJWZWN0b3IoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkK
IHsKLSAgICAvLyBSZXR1cm4gdGhlIGtleXMgb2YgYWxsIHNlc3Npb25zLCBtYXkgYmUgY29waWVk
IHRvIGJhY2tncm91bmQgdGhyZWFkcy4KLSAgICBWZWN0b3I8UHJveHlDRE1DbGVhcktleTo6S2V5
PiBhbGxLZXlzIHsgfTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsK
LSAgICBzaXplX3QgaW5pdGlhbENhcGFjaXR5ID0gMDsKLSAgICBmb3IgKGF1dG8mIGtleVZlY3Rv
ciA6IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkKLSAgICAgICAg
aW5pdGlhbENhcGFjaXR5ICs9IGtleVZlY3Rvci5zaXplKCk7Ci0gICAgYWxsS2V5cy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSk7CisgICAgdWludDhfdCBjdHJbQUVTMTI4
Q1RSQmxvY2tTaXplSW5CeXRlc107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0gOCkg
eworICAgICAgICAvLyBJU08vSUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMwogCi0gICAgZm9y
IChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAg
ICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRlZEtleShrZXkpKTsKKyAgICAgICAgLy8g
V2hlbiBhbiA4LWJ5dGUgSVYgaXMgaW5kaWNhdGVkLCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgOAor
ICAgICAgICAvLyBieXRlcyBvZiB0aGUgMTYgYnl0ZSBJViAoYnl0ZXMgOCB0byAxNSkgU0hBTEwg
YmUgc2V0IHRvCisgICAgICAgIC8vIHplcm8uCisgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4
KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgaW5wdXQuaXYsIDgpOworICAgIH0gZWxzZQorICAgICAg
ICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgQ2xlYXJLZXlJVlNpemVJbkJ5dGVzKTsKKworICAgIGlm
IChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9nY3J5SGFu
ZGxlLCBjdHIsIENsZWFyS2V5SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIsIGdw
Z19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGFsbEtleXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJv
eHlDbGVhcktleTo6Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0
JiBpbikKK3sKKyAgICAvLyBGSVhNRTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRo
aXMgd2hpbGUgc3RpbGwgZXhwb3NpbmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMg
RGVjcnlwdElucHV0IEFQST8gVGhlc2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0
ZXMpLCBzbyBub3QgYSBodWdlIGRlYWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtl
eUlEVmVjOworICAgIGtleUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRl
cyk7CisKKyAgICBhdXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAg
IGlmICgha2V5RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJy
b3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRh
dGEoKSwga2V5RGF0YS0+c2l6ZSgpKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJv
eHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9y
KGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2Vu
Y0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJ
bkJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Q
cm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRl
cyIsIGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9y
X3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5j
cnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhl
cl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5
Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0
KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNp
emVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1w
bGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1
dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1w
bGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlw
dGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1
YnNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVz
QnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZl
ckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIg
b2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1w
bGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBs
ZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRl
cyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxl
SW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFy
Qnl0ZXMgPSAwOworICAgICAgICAgICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1
dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7
CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5
IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdl
YkNvcmUuCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBi
eXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwg
c3Vic2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMg
LSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJC
eXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vi
c2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBk
ZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5w
dXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0
KTsKKworICAgICAgICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0
ZWRCdWZmZXJCeXRlT2Zmc2V0LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsK
KyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9S
KGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRl
czsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVBy
b3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29u
dGV4dCYgaW5wdXQpCit7CisgICAgaWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwg
IWNlbmNTZXREZWNyeXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGlucHV0LmlzU3Vic2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlu
cHV0KSA6IGNlbmNEZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlD
bGVhcktleTo6aW5pdGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJv
ciA9IGdjcnlfY2lwaGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBH
Q1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAl
cyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAm
JiAiU2hvdWxkIG5vdCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOwor
ICAgIH0KIH0KIAogQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0g
ICAgOiBtX3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKKyAgICA6
IENETUluc3RhbmNlUHJveHkobmV3IENETVByb3h5Q2xlYXJLZXkoKnRoaXMpKQogewogfQogCkBA
IC01MzUsMzYgKzYzOCw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5
U3lzdGVtKCkgY29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VD
bGVhcktleTo6Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleTo6a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IlsiLCBrZXlJRERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVy
biBtYWtlU3RyaW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29u
c3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SURE
YXRhKTsKLSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SURE
YXRhID09ICprMi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3Rh
bmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIp
Ci17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7
Ci0KLSAgICBpZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6
ZSgpOwotCi0gICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SURE
YXRhLT5kYXRhKCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uPiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5KCp0aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVy
biBuZXdTZXNzaW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1
ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykK
QEAgLTU3Miw2ICs2NDgsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1
ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1
aW50MzJfdCBzX3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAK
KyAgICBtX3Nlc3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMi
KSkKICAgICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0
RGF0YS5nZXQoKSk7CiAKQEAgLTU3OSwxOCArNjU3LDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5n
JiBpCiAgICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0
RGF0YS5nZXQoKSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXRE
YXRhID0gV1RGTW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1
ZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0
aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5p
dERhdGEpXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEp
LCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAg
ICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwg
U3VjY2VlZGVkKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBl
LCBjb25zdCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBj
YWxsYmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0
aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25N
YWluVGhyZWFkKCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAg
W3RoaXMsICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0
dXNWZWN0b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzY4MCwyMyBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lv
bklkLCBMaWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNP
Tk9iamVjdChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBK
U09OIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxp
Y2Vuc2UgZm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3
aGljaCBjdXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgp
LCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBh
cnNlTGljZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdl
dCBWZWN0b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklY
TUU6IFJlZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2lu
Z2xldG9uKCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1J
bnN0YW5jZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAg
IGJvb2wga2V5c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5
IDogKmRlY29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkg
LSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5r
ZXlJREFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlE
ID0gc3RkOjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAg
ICAgICAgICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5
JiBjb250YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtl
eSA9PSBkZWNvZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtl
eVdpdGhNYXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEg
JXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2Ft
ZUtleVZhbHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50
Iik7Ci0gICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUo
ZGVjb2RlZEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExP
RyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAg
ICAgICAga2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAg
ICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAg
ICAgYm9vbCBrZXlzQ2hhbmdlZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVk
S2V5cykpOwogCi0gICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMg
cHJvdmlkZWQgJXp1IGtleXMiLCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIs
IHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAg
ICAgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtl
eXNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAg
ICBzdGQ6OnNvcnQoa2V5VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAg
ICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlT
dGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtl
eVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+
LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAg
ICAgIGNoYW5nZWRLZXlzID0gV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwg
c2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5t
ZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tl
eVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1Zh
bHVlOjpTdWNjZWVkZWQpOwpAQCAtNjU3LDQ3ICs3MDQsMjcgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGlj
ZW5zZVQKICAgICB9CiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVu
dEZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQg
aW5mb3JtYXRpb24gYW5kIHVzZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNz
aW9uSWQuCi0gICAgICAgIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUo
c2Vzc2lvbklkKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAl
cyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9u
SWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5
c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwog
ICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVl
OjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBj
YXNlIG5vIGZvcm1hdCB3YXMgcmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJL
ZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0
Iiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2Us
IFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5n
JiBzZXNzaW9uSWQsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2Fs
bGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNh
bGxzLgotICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJh
Y2tdKE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1
ZSBzdWNjZXNzLCBTZXNzaW9uTG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoCi0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBX
VEZNb3ZlKGV4aXN0aW5nS2V5cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3Rp
bmdLZXlzKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJl
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgIC8vIENvbnN0cnVjdCB0
aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIGFsbCB0aGUga25vd24ga2V5
cyBmb3IgdGhpcyBzZXNzaW9uLgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7
Ci0gICAgewotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCku
a2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAg
IGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKFdU
Rjo6bnVsbG9wdCwgRmFpbGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGEpOwor
ICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworICAgIEtleVN0YXR1c1ZlY3Rv
ciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9y
KCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksICZrZXlTdGF0dXNWZWN0b3JdKCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvJiBrZXlWZWN0b3IgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGtleVN0
YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAg
ICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1Zl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0
dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0gICAgfQogCi0gICAgZGlzcGF0
Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFN1Y2NlZWRlZCwgU2Vzc2lvbkxv
YWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0
b3IpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZh
aWx1cmU6Ok5vbmUpOworICAgIH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBj
YWxsYmFjaykKQEAgLTcxMyw3ICs3NDAsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwogCiB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBT
dHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2sm
JiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxl
cyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRo
cmVhZCgpIGNhbGxzLgorICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworCiAg
ICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10oS2V5
U3RhdHVzVmVjdG9yJiYga2V5U3RhdHVzVmVjdG9yLCBPcHRpb25hbDxSZWY8U2hhcmVkQnVmZmVy
Pj4mJiBtZXNzYWdlLCBTdWNjZXNzVmFsdWUgc3VjY2VzcykgewogICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZCgKQEAgLTcyNywzNSArNzU1LDE3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNl
CiAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2Vu
dGluZyByZWxlYXNlZCBrZXlzLCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vu
c2UgcmVsZWFzZScgZm9ybWF0LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7
CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5
c0FzUmVsZWFzZWQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsK
LSAgICAgICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBzZXNzaW9uIElE
LCBiYWlsaW5nIGlmIG5vbmUgaXMgZm91bmQuCi0gICAgICAgIGF1dG8mIGtleXMgPSBDbGVhcktl
eVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlzLmZpbmQo
c2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAgICAgICAg
IGRpc3BhdGNoQ2FsbGJhY2soS2V5U3RhdHVzVmVjdG9yIHsgfSwgV1RGOjpudWxsb3B0LCBTdWNj
ZXNzVmFsdWU6OkZhaWxlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBSZXRyaWV2ZSB0aGUgS2V5IHZlY3RvciwgY29udGFpbmluZyBhbGwgdGhlIGtleXMg
Zm9yIHRoaXMgc2Vzc2lvbiwgYW5kCi0gICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSBrZXkgbWFw
IGVudHJ5IGZvciB0aGlzIHNlc3Npb24uCi0gICAgICAgIGF1dG8ga2V5VmVjdG9yID0gV1RGTW92
ZShpdC0+dmFsdWUpOwotICAgICAgICBrZXlzLnJlbW92ZShpdCk7Ci0KLSAgICAgICAgLy8gQ29u
c3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCBwYWlyaW5nIGtleSBJRHMgd2l0aCB0
aGUgJ3JlbGVhc2VkJyBzdGF0dXMuCi0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
c3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEs
IEtleVN0YXR1czo6UmVsZWFzZWQgfSk7Ci0KICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhh
dCByZXByZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tp
ZHMnIGFycmF5CiAgICAgICAgIC8vIG9mIGJhc2U2NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFs
bCBrZXlzIHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLgogICAgICAgICBh
dXRvIHJvb3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICB7CiAgICAg
ICAgICAgICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoa2V5
LmtleUlERGF0YS0+c2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSk7Ci0gICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNv
ZGUoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5LmtleUlE
RGF0YS0+c2l6ZSgpKSkpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tl
eVN0b3JlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJh
eS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgpLCBrZXkt
PmlkKCkuc2l6ZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5z
ZXRBcnJheSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNzY2LDYgKzc3
Niw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRh
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAgICAgICAgIG1lc3NhZ2UgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0
aCgpKTsKICAgICB9CiAKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICBkaXNw
YXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZlcj4o
Km1lc3NhZ2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1D
bGVhcktleS5oCmluZGV4IDg1YjMxOWIxYTM4YzEyMTY5OTE5NzViODAxOWFkMmIxNmIzNmMxNDcu
LjhjMmZkN2VlMWQwZDBhNWZmOTYyYjMyMjU2ZDFlZDBlNGQxOGMzMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuaApAQCAtMzEsMTAgKzMxLDEyIEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKIAogI2luY2x1ZGUgIkNETUZhY3RvcnkuaCIKLSNpbmNsdWRlICJDRE1JbnN0YW5jZS5o
IgogI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNETVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPGdjcnlwdC5oPgorI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsMjcgKzc5LDEzIEBAIHB1YmxpYzoKICAg
ICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0
IGZpbmFsOwogfTsKIAotY2xhc3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBQcm94
eUNETSB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAgICAg
ICAgU3RyaW5nIGtleVZhbHVlRGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlDRE1D
bGVhcktleSgpID0gZGVmYXVsdDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtleXMo
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsKLQot
Y2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKK2NsYXNzIENETUluc3Rh
bmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2VQcm94eSwgcHVibGljIENhbk1h
a2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKIHB1YmxpYzoKICAgICBDRE1JbnN0YW5j
ZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwogCisgICAg
Ly8gQ0RNSW5zdGFuY2UKICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVhcktleTsgfQot
CiAgICAgU3VjY2Vzc1ZhbHVlIGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1L
ZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldERpc3Rp
bmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBz
ZXRQZXJzaXN0ZW50U3RhdGVBbGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3ICs5Myw5MSBA
QCBwdWJsaWM6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJikgZmluYWw7CiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsK
ICAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0K
LSAgICBzdHJ1Y3QgS2V5IHsKLSAgICAgICAgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXMg
c3RhdHVzOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlJRERhdGE7Ci0gICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVZhbHVlRGF0YTsKLQotICAgICAgICBTdHJpbmcga2V5
SURBc1N0cmluZygpIGNvbnN0OwotICAgICAgICBTdHJpbmcga2V5VmFsdWVBc1N0cmluZygpIGNv
bnN0OwotCi0gICAgICAgIGJvb2wgaGFzU2FtZUtleVZhbHVlKGNvbnN0IEtleSAmb3RoZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChrZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAg
QVNTRVJUKG90aGVyLmtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gKmtleVZhbHVl
RGF0YSA9PSAqb3RoZXIua2V5VmFsdWVEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHdv
IGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5IHZh
bHVlIGFuZCBzdGF0dXMuCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0gICAgICAgIC8vIEtleSdzIGFyZSBvcmRlcmVkIGJ5IHRo
ZWlyIElEcywgZmlyc3QgYnkgc2l6ZSwgdGhlbiBieSBjb250ZW50cy4KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotCi0gICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyBy
ZXR1cm4gIShvcGVyYXRvcj09KGsxLCBrMikpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPihjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I9PShr
MSwgazIpICYmICFvcGVyYXRvcjwoazEsIGsyKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj4o
azEsIGsyKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj49KGNvbnN0IEtleSAmazEs
IGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcjwoazEsIGsyKTsgfQotICAgIH07Ci0K
LSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
cm94eUNETTsgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxQcm94eUNETT4gbV9wcm94eUNETTsK
IH07CiAKIGNsYXNzIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5IGZpbmFsIDogcHVibGljIENE
TUluc3RhbmNlU2Vzc2lvbiwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5PiB7CiBwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoQ0RN
SW5zdGFuY2VDbGVhcktleSYgcGFyZW50KQorICAgICAgICA6IG1fcGFyZW50SW5zdGFuY2UocGFy
ZW50KSB7IH0KICAgICB2b2lkIHJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9t
U3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vu
c2VDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5n
JiwgTGljZW5zZVR5cGUsIGNvbnN0IFNoYXJlZEJ1ZmZlciYsIExpY2Vuc2VVcGRhdGVDYWxsYmFj
ayYmKSBmaW5hbDsKICAgICB2b2lkIGxvYWRTZXNzaW9uKExpY2Vuc2VUeXBlLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZv
aWQgY2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWNrJiYpIGZp
bmFsOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5
cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBzdG9yZVJl
Y29yZE9mS2V5VXNhZ2UoY29uc3QgU3RyaW5nJikgZmluYWw7Citwcml2YXRlOgorICAgIFN0cmlu
ZyBtX3Nlc3Npb25JRDsKKyAgICBDRE1JbnN0YW5jZUNsZWFyS2V5JiBtX3BhcmVudEluc3RhbmNl
OworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9OworCisvLyBUaGlzIGlzIHRoZSB0aHJlYWQt
c2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBzaG91bGQgdXNlIHRvIG1ha2UgdXNlIG9mIGEK
Ky8vIHBsYXRmb3JtIENETSBtb2R1bGUuCitjbGFzcyBDRE1Qcm94eUNsZWFyS2V5IGZpbmFsIDog
cHVibGljIENETVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlDbGVhcktleSwg
V2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKK3B1YmxpYzoKKyAgICBDRE1Q
cm94eUNsZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkmIGluc3RhbmNlKQorICAgICAgICA6IG1f
Y2RtSW5zdGFuY2UoaW5zdGFuY2UpCisgICAgeworICAgICAgICAvLyBGb3Igbm93IHdlIGRvbid0
IHVzZSB0aGlzIGxpbmsgYmFjayB0byB0aGUgIm1haW4tdGhyZWFkIGluc3RhbmNlIiwKKyAgICAg
ICAgLy8gYnV0IGhhdmluZyB0aGUgY29ubmVjdGlvbiByZWFkeSBtYWRlIHdpbGwgYWxtb3N0IGNl
cnRhaW5seSBiZSB1c2VmdWwKKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgVU5V
U0VEX1BBUkFNKG1fY2RtSW5zdGFuY2UpOworICAgICAgICBpbml0aWFsaXplR2NyeXB0KCk7Cisg
ICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXkoKTsKKworICAgIC8vIEZJWE1FOiBU
aGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJlZEJ1ZmZlcnMsCisgICAg
Ly8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXplX3R9IGlkaW9tcyBmb3IgcmVwcmVz
ZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4IHRoYXQgc29tZWhvdy4gTm90ZSBT
aGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAgICAvLyB0aGV5J3JlIG5vdCB0aHJl
YWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWluCisgICAgLy8gdGhyZWFkLXNhZmV0
eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291bGQgYmUKKyAgICAvLyBt
YWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJzIGZvciBkcm9wcGluZyBp
bnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3YXJlIGNvbnRhaW5lcnMu
Li4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsKKyAgICAgICAgLy8gRklYTUU6IEVu
YWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGllZCB0eXBlcy4KKyAgICAgICAgY29u
c3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBrZXlJRFNpemVJbkJ5dGVzOworCisg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBzaXplX3QgaXZTaXplSW5CeXRlczsK
KworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAgICAgIHNpemVfdCBlbmNy
eXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAvLyBGSVhNRTogR1N0cmVhbWVyLXNw
ZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGdldCByaWQgb2Yg
dGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQgYmVmb3JlCisgICAgICAg
IC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVjdG9yPHNpemVfdD4gdGhh
dCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9kZWNyeXB0ZWQvY2xlYXIvZGVjcnlw
dGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90Pj4K
KyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVhci9kZWNyeXB0ZWQgc2l6
ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAgICAgLy8gYmVjb21lIGEgc3RydWN0
IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1wbGUuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MzAKKyAgICAgICAg
Y29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YnNhbXBs
ZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisKKyAg
ICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJzYW1wbGVzOyB9
CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRp
b24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGlu
IHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVk
IGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgY2Vu
Y0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0
aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQg
QUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2
ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXVz
ZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAgYm9vbCBjZW5jU2V0Q291bnRlclZl
Y3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNTZXREZWNyeXB0
aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRG
dWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRTdWJz
YW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYg
bV9jZG1JbnN0YW5jZTsKKworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBz
b21ldGhpbmcgaW4gV2ViQ29yZSBmb3IgY3J5cHRvLi4uCisgICAgZ2NyeV9jaXBoZXJfaGRfdCBt
X2djcnlIYW5kbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakMuaAppbmRleCA0NzcyZmNiMzIzNmQzOTAyOTUzNGM0NmZiNGYxMDI5OTc4M2U2Y2I2Li5i
MTFmNzFhOWI1ZTM4YmY2OThiMTM5NDlkZGRlODZmM2RkOTk0Y2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLmgKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRT
ZXJ2ZXJDZXJ0aWZpY2F0ZShSZWY8U2hhcmVkQnVmZmVyPiYmKSBmaW5hbDsKICAgICBTdWNjZXNz
VmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBSZWZQ
dHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBjcmVhdGVTZXNzaW9uKCkgZmluYWw7Ci0gICAgUmVmUHRy
PFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAog
ICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYTEyZWY0ZjZkYmE2
ZjAxNWU3NjE1MWYxNDdjYzZjMDc5ZTYyZGE3ZS4uYTM5ODgwOGEyY2ViMGU5NTcwYmRkZDhhZTA2
ZDg2NWQwNzUxYjU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKQEAgLTE3ODgsNiArMTc4OCw1MCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgfSwgdGhp
cywgbnVsbHB0cik7CiB9CiAKK0luaXREYXRhIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgSW5pdERhdGEgaW5pdERhdGE7
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOworICAg
ICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2Fn
ZSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImZvdW5kICV6dSBwcm90
ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3Rl
bUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxl
U3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50
S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgp
LCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAgICAgICBpbml0
RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAgICAgICAgICAgIG1faGFu
ZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbml0RGF0YTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRGb3JDRE1BdHRhY2htZW50KCkKK3sKKyAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwaXBlbGluZSgp
LCAiY2FuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIHdhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNl
Iik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBh
IENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKKyAgICB7
CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNo
bWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0
aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgeworICAgICAg
ICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
cmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKEdT
VF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04g
JiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODIzLDQxICsxODY3LDkgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICghZ19zdHJjbXAw
KGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7Ci0g
ICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4n
dCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQg
bWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlw
dGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0RGF0
YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJv
dGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVj
dGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQg
JXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0
aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5h
dmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBldmVu
dCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBH
c3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJz
ZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxw
dHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlk
LCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQo
R1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEp
KTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEg
Q0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxzZTsKLSAg
ICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0gaG9sZExvY2so
bV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1B
dHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3Ro
aXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2ggJiYgIWlzUGxh
eWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHko
KSkgeworICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChwYXJzZUluaXREYXRh
RnJvbVByb3RlY3Rpb25NZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgYm9vbCBpc0NETUF0dGFj
aGVkID0gd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKKyAgICAgICAgaWYgKGlzQ0RNQXR0YWNoZWQg
JiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgp
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5U3lzdGVt
VXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2RtSW5zdGFu
Y2UtPmtleVN5c3RlbSgpKTsKICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkgc3lzdGVt
ICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEoKSwgcHJl
ZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogCkBA
IC0xODY1LDEwICsxODc3LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAgICAgR3N0U3Ry
dWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJl
KGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0
cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywgcHJlZmVycmVk
S2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29u
dGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgp
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNl
IG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHBpcGVs
aW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQsIG5vIENETSBhdmFpbGFibGUiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQogCkBAIC0yMTk4LDE5ICsyMjExLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIHBy
b2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgZ3N0X21wZWd0c19zZWN0
aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVj
dHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtleSBtZXNzYWdlIGZyb20gJXMiLCBH
U1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9y
S2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBkZWNyeXB0b3JzIHNob3VsZCBi
ZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBiZWluZyBjcmVhdGVkIGFuZCBsaW5r
ZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRoZXkgYXJlIG5vdCBhbmQgY3VycmVudAot
ICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1ha2UgdGhpcyB2ZXJ5IGVhc3ku
IEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBzb29uIGFuZCBpdCBkb2VzIG5vdCBw
YXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlCi0gICAg
ICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBtZWFudGltZSwgZm9yY2UgYXR0ZW1w
dCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4KLSAgICAgICAgICAgIGF0dGVtcHRU
b0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1
Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtleS1yZWNlaXZlZCIpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0ta2V5LXJlY2VpdmVkIG1lc3Nh
Z2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgICAg
IHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgZWxz
ZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJodHRwLWhlYWRlcnMiKSkg
ewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUHJvY2Vzc2luZyBI
VFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOwpAQCAtMzcyOCwxNCAr
MzcyOCwxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VB
dHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIs
IEZBTFNFKSk7CisgICAgbV9jZG1JbnN0YW5jZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNSW5zdGFu
Y2VQcm94eSo+KCZpbnN0YW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jZG1JbnN0YW5jZSk7
CisgICAgbV9jZG1JbnN0YW5jZS0+c2V0UGxheWVyKG1fcGxheWVyKTsKKworICAgIEdSZWZQdHI8
R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0t
cHJveHkiLCBGQUxTRSkpOwogICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdz
dF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3Ry
dWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5U
RVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0tcHJveHkiLCBHX1RZUEVfUE9JTlRF
UiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSwgbnVsbHB0cik7CiAgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5
IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5
Q0RNKCkuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNE
TSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNl
LT5wcm94eSgpLmdldCgpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2NkbUF0dGFjaG1lbnRN
dXRleCk7CiAgICAgLy8gV2UgbXVzdCBub3RpZnkgYWxsIHdhaXRlcnMsIHNpbmNlIHNldmVyYWwg
ZGVtdXhlcnMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHdhaXRpbmcgZm9yIGEgQ0RNLgpAQCAtMzc1
Nyw3ICszNzYwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3Rh
bmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1w
dHkgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwogICAgIG1fY2RtSW5zdGFuY2UgPSBu
dWxscHRyOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1w
cm94eSIsIEZBTFNFKSk7CiAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQo
bV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkpOwogfQogCkBAIC0zNzkwLDUxICszNzkz
LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9u
RXZlbnQoR3N0RXZlbnQqIGV2ZW50KQogICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KHtldmVudEtleVN5c3RlbVVVSUQsIGluaXREYXRhfSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgaXNXYWl0aW5nRm9yS2V5KQot
ewotICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3ZSBh
cmUgcmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3YWl0
aW5nIGRlY3J5cHRvcnMuCi0gICAgR1NUX1RSQUNFKCJpc1dhaXRpbmdGb3JLZXkgJXMsIG1faXNX
YWl0aW5nRm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKGlzV2FpdGluZ0ZvcktleSksIGJvb2xG
b3JQcmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwotICAgIGlmIChpc1dhaXRpbmdGb3JLZXkg
PT0gbV9pc1dhaXRpbmdGb3JLZXkgfHwgKCFpc1dhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGlu
Z0ZvcktleSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1dhaXRpbmdGb3JLZXkgPSBp
c1dhaXRpbmdGb3JLZXk7Ci0gICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAl
cyIsIGJvb2xGb3JQcmludGluZyhtX2lzV2FpdGluZ0ZvcktleSkpOwotICAgIG1fcGxheWVyLT53
YWl0aW5nRm9yS2V5Q2hhbmdlZCgpOwotfQotCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6d2FpdGluZ0ZvcktleSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQorICAg
IGlmICghbV9waXBlbGluZSB8fCAhbV9jZG1JbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlw
ZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9u
ZXdfY3VzdG9tKEdTVF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhbnkt
ZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSk7Ci0gICAgaWYgKHN0YXRlID49IEdTVF9TVEFU
RV9QQVVTRUQpIHsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGlu
ZS5nZXQoKSwgcXVlcnkuZ2V0KCkpOwotICAgICAgICBHU1RfVFJBQ0UoInF1ZXJ5IHJlc3VsdCAl
cywgb24gJXMiLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoc3RhdGUpKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlID49IEdTVF9TVEFURV9SRUFEWSkg
ewotICAgICAgICAvLyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhlIHBpcGVsaW5lIGlzIGVhc2llciBi
dXQgaXQgb25seSB3b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdXAgYW5kIHJ1bm5pbmcs
IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5kIGFzayB0aGUgZGVjcnlwdG9ycyBk
aXJlY3RseS4KLSAgICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4gaXRlcmF0b3IoZ3N0X2Jp
bl9pdGVyYXRlX3JlY3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgICAgICBH
c3RJdGVyYXRvclJlc3VsdCBpdGVyYXRvclJlc3VsdDsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgaXRlcmF0b3JSZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9sZChpdGVyYXRvci5nZXQoKSwgW10o
Y29uc3QgR1ZhbHVlICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4g
ewotICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSBHU1RfRUxFTUVOVChnX3Zh
bHVlX2dldF9vYmplY3QoaXRlbSkpOwotICAgICAgICAgICAgICAgIEdzdFF1ZXJ5KiBxdWVyeSA9
IEdTVF9RVUVSWShkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIVdFQktJVF9JU19NRURJ
QV9DRU5DX0RFQ1JZUFQoZWxlbWVudCkgfHwgIWdzdF9lbGVtZW50X3F1ZXJ5KGVsZW1lbnQsIHF1
ZXJ5KTsKLSAgICAgICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgICAg
ICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICB9IHdoaWxl
IChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgICAgaWYgKGl0
ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgICAgIEdTVF9XQVJO
SU5HKCJpdGVyYXRvciByZXR1cm5lZCBhbiBlcnJvciIpOwotICAgICAgICByZXN1bHQgPSBpdGVy
YXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfT0s7Ci0gICAgICAgIEdTVF9UUkFDRSgiaXRlcmF0
b3IgcmVzdWx0ICVkLCB3YWl0aW5nICVzIiwgaXRlcmF0b3JSZXN1bHQsIGJvb2xGb3JQcmludGlu
ZyhyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX2Nk
bUluc3RhbmNlLT5pc1dhaXRpbmdGb3JLZXkoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggYjJiYjU0MWEzMjZhZTliZWZh
NWIwMzc3OWMwZDExMDYzNWQ3OWUxNC4uNTIxYjIwZDExY2M4ZGQ5NGJlMjg0ZDc0Njk5Y2QyNzE3
YjRlMDU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aApAQCAtNzYsNiArNzYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdE1wZWd0c1NlY3Rpb24gR3N0
TXBlZ3RzU2VjdGlvbjsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQorI2luY2x1ZGUgIkNETVByb3h5LmgiCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgX0dz
dFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9J
bmZvIEdzdFZpZGVvSW5mbzsKIHR5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250
ZXh0OwpAQCAtMzcxLDcgKzM3NSw3IEBAIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKQogICAgIExvY2sgbV9jZG1BdHRhY2htZW50TXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1f
Y2RtQXR0YWNobWVudENvbmRpdGlvbjsKLSAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1f
Y2RtSW5zdGFuY2U7CisgICAgUmVmUHRyPENETUluc3RhbmNlUHJveHk+IG1fY2RtSW5zdGFuY2U7
CiAKICAgICBMb2NrIG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFu
ZGxlZFByb3RlY3Rpb25FdmVudHMuCiAgICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJv
dGVjdGlvbkV2ZW50czsKQEAgLTQ1MCw3ICs0NTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXND
RE1BdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2RtSW5zdGFuY2U7IH0KICAgICB2b2lkIGF0
dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwogICAgIHZvaWQgaW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBzZXRXYWl0aW5nRm9yS2V5
KGJvb2wpOworICAgIEluaXREYXRhIHBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2Uo
R3N0TWVzc2FnZSopOworICAgIGJvb2wgd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKICNlbmRpZgog
CiAgICAgQXRvbWljPGJvb2w+IG1faXNQbGF5ZXJTaHV0dGluZ0Rvd247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmlu
ZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLmI0YWM1NTE1YmUw
NTQyZGJjOGJjYzAyZGJmMjZkMzZjNzk3NWE0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0zNywxMiAr
MzcsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUgewotICAgIFJlZlB0cjxQcm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBnY3J5X2Np
cGhlcl9oZF90IGhhbmRsZTsKKyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gY2RtUHJveHk7
CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9vbCBoYW5k
bGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBS
ZWZQdHI8UHJveHlDRE0+KTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7CiBzdGF0
aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RC
dWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQg
c3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVCVUdfQ0FU
RUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29y
eSk7CkBAIC04NCw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlf
ZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlv
blN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKLSAgICBj
ZW5jQ2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFuZGxlS2V5
UmVzcG9uc2UpOworICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19G
VU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9E
RUJVR19GVU5DUFRSKGRlY3J5cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBAIC05Myw2
MSArOTIsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdlYmtpdF9t
ZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBz
ZWxmKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2VsZi0+cHJp
diA9IHByaXY7CiAgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZh
dGUoKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHBy
aXYtPmhhbmRsZSksIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdD
UllfQ0lQSEVSX1NFQ1VSRSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIGNyZWF0ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJv
cihlcnJvcikpOwotICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0YXRpYyB2
b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAgICAgV2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBn
Y3J5X2NpcGhlcl9jbG9zZShwcml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9D
TEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVz
cG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFBy
b3h5Q0RNPiBwcm94eUNETSkKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94
eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChz
ZWxmKSk7Ci0gICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5Q0RNQ2xl
YXJLZXkqPihwcm94eUNETS5nZXQoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOworICAg
IHByaXYtPmNkbVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5Kj4oY2Rt
UHJveHkuZ2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKIH0KIAotc3RhdGljIGJv
b2wgZmluZEFuZFNldEtleShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYs
IGNvbnN0IFN0cmluZyYmIGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZm
ZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291
bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5VmFsdWU7
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtl
eXMoKSkgewotICAgICAgICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAg
ICAga2V5VmFsdWUgPSBrZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1QocHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXpl
SW5CeXRlcygpID09IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3Ig
PSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgp
LCBrZXlWYWx1ZS5zaXplSW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBy
aXYsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Cisg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwog
Ci1zdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1
ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1w
bGVzQnVmZmVyKQotewotICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAibm8gSVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAha2V5SURC
dWZmZXIgfHwgIWJ1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZh
bGlkIGRlY3J5cHQoKSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMTU3LDI3ICsxMjcsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0laRV07Ci0g
ICAgaWYgKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1zZXQoY3Ry
ICsgOCwgMCwgOCk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCks
IDgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgp
ID09IENMRUFSS0VZX1NJWkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+
ZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFU
RShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90IGNpcGhl
ckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9T
SVpFKTsKLSAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiZ2NyeV9jaXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVy
RXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghYnVmZmVy
KSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBkZWNyeXB0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBlZEtleUlk
QnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIsIEdT
VF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKQEAgLTE5
MCw3MiArMTM5LDI5IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBwZWRLZXlJ
ZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAgICB1bnNp
Z25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwotCi0gICAg
aWYgKCFzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNyeXB0aW9u
LgotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9u
OiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgICAg
IC8vIENoZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBwZWRCdWZm
ZXItPnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNy
eXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6
ZSgpLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVk
OiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwuCi0gICAg
aWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkVycm9yLCB0aGUgc3ViU2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1dG8gbWFw
cGVkU3ViU2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1
YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJTYW1wbGVz
QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAg
c3Vic2FtcGxlIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
R1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBw
ZWRTdWJTYW1wbGVzQnVmZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUo
KSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1
IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChwb3NpdGlv
biA8IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVzQ2xlYXIg
PSAwOwotICAgICAgICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAgICAgaWYg
KHNhbXBsZUluZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghZ3N0X2J5
dGVfcmVhZGVyX2dldF91aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIpCi0gICAg
ICAgICAgICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlci5nZXQo
KSwgJm5CeXRlc0VuY3J5cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNlbGYsICJ1bnN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNFbmNyeXB0
ZWQgPSBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1IGJ5dGVz
IGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNDbGVhcjsK
LSAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICh0b2Rv
PSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXItPnNpemUo
KSAtIHBvc2l0aW9uKTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVj
cnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24sIG5CeXRl
c0VuY3J5cHRlZCwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4ICV1IGRl
Y3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJy
b3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdzdE1hcHBl
ZEJ1ZmZlcj4gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFyS2V5Ojpj
ZW5jRGVjcnlwdENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFwcGVkS2V5
SWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBtYXBwZWRL
ZXlJZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZlci0+ZGF0
YSgpOworICAgIGNvbnRleHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5zaXplKCk7
CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEoKTsKKyAg
ICBjb250ZXh0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVyLT5zaXpl
KCk7CisgICAgY29udGV4dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7CisgICAgaWYg
KCFzdWJzYW1wbGVDb3VudCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbnVs
bHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIpOworICAg
ICAgICBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpj
cmVhdGUoc3Vic2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYgKCFtYXBw
ZWRTdWJzYW1wbGVzQnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBtYXBw
ZWRTdWJzYW1wbGVzQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1
ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eS0+Y2VuY0RlY3J5
cHQoY29udGV4dCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBV
U0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2Vi
S2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4M2QwNDc0
ODYwZjZlZjgxN2YzMWNkYzE1ZTQ4YWMxODZjMDM0NC4uNDdiNTYwZjczOTIwOWRjMmExNjI0NGMw
Nzk4MDM3NDdjMzA0MTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0yNSwz
NCArMjUsMzQgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFN
RVIpCiAKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5o
IgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Db25k
aXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQcm94eUNE
TTsKK3VzaW5nIFdlYkNvcmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5D
X0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rpb25FdmVu
dDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVjZWl2ZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAgTG9jayBt
dXRleDsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94eT4gY2Rt
UHJveHk7CisKKyAgICBMb2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRpb24gY2Rt
QXR0YWNobWVudENvbmRpdGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhT
ZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7
CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2FwcyogdHJhbnNm
b3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBzKiwgR3N0
Q2FwcyopOwogc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJh
bnNmb3JtKiwgR3N0QnVmZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihH
c3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRs
ZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsKLXN0YXRp
YyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCopOwogc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0Q29udGV4
dCopOwogCi0KIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NvbW1vbl9l
bmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkK
IApAQCAtNzYsNyArNzYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5
cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJhc2VUcmFu
c2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFuc2Zvcm1D
YXBzKTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3Vn
aCA9IEZBTFNFOwogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJV
R19GVU5DUFRSKHNpbmtFdmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+cXVl
cnkgPSBHU1RfREVCVUdfRlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUpKTsKIH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RGbG93UmV0
dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBi
dWZmZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9
IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
X0dFVF9QUklWQVRFKHNlbGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsK
IAotICAgIC8vIFRoZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuIFdhaXQg
Zm9yIGl0LgotICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBpdCIpOwot
ICAgICAgICBpZiAoR1NUX1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVT
RUQgfHwgKEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9TVEFURV9W
T0lEX1BFTkRJTkcgJiYgR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1Rf
U1RBVEVfUEFVU0VEKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiY2Fu
J3QgcHJvY2VzcyBrZXkgcmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gU2VuZCAiZHJtLWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhlIHBsYXll
ciB0byByZXNlbmQgdGhlIENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3JtIHdlIGFy
ZSB3YWl0aW5nIGZvciBrZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0cnVlOwot
ICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksIGdzdF9t
ZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2Vt
cHR5KCJkcm0td2FpdGluZy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2
LT5jZG1BdHRhY2htZW50TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9y
KHByaXYtPm11dGV4LCBTZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0dXJuIHBy
aXYtPmtleVJlY2VpdmVkOworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8gYmUgbmVn
b3RpYXRlZCBiZWZvcmUgd2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFwcml2LT5j
ZG1Qcm94eSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90IGF2YWls
YWJsZSwgZ29pbmcgdG8gd2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0YWNobWVu
dENvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vjb25kc1Rv
V2FpdEZvckNETVByb3h5LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYtPmNkbVBy
b3h5OwogICAgICAgICB9KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUiKTsKKyAg
ICAgICAgaWYgKCFwcml2LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiQ0RNUHJveHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAgICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0gICAgICAg
IHByaXYtPndhaXRpbmdGb3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9t
ZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JK
RUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZlZCIpKSk7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGgg
YWRkcmVzcyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBHc3RQcm90
ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rp
b25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpAQCAtMjA3
LDMyICsxOTcsMzAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RC
YXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20g
YnVmZmVyICVwIiwgYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JU
RUQ7CiAgICAgfQorICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VT
Y29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9y
ZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25N
ZXRhKSk7CisgICAgfSk7CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFnc3Rfc3Ry
dWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUp
KSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6
ZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRf
Y2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X05PVF9TVVBQT1JURUQ7CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwogICAgIGlm
ICghZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywgImVuY3J5
cHRlZCIsICZlbmNyeXB0ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZh
aWxlZCB0byBnZXQgZW5jcnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7
CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGlm
ICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0
YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7Cisg
ICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09L
OwotICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTog
JSIgR1NUX1BUUl9GT1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVuc2lnbmVk
IHN1YlNhbXBsZUNvdW50OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0
aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291
bnQiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxP
V19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3RhdGljIEdz
dEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RC
dWZmZXIqIGJ1ZmZlcikKICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShw
cm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2YWx1ZSkg
ewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJz
YW1wbGVzIik7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVp
bnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgICAgIHJl
dHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1YlNhbXBs
ZXNCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlmICghc3Vi
U2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiVGhl
cmUgaXMgbm8gc3Vic2FtcGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBsZSBjb3Vu
dCIpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAg
IH0KICAgICB9CiAKICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rp
b25NZXRhLT5pbmZvLCAia2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIiKTsKLSAg
ICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQ
UE9SVEVEOwogICAgIH0KICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3ZhbHVlX2dl
dF9idWZmZXIodmFsdWUpOwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJu
IHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZm
ZXIpCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+
aW5mbywgIml2Iik7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0X2J1ZmZl
cl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rp
b25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0K
IApAQCAtMjcwLDcxICsyNTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5Q
bGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+ZGVjcnlw
dChzZWxmLCBpdkJ1ZmZlciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1
YlNhbXBsZXNCdWZmZXIpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5
cHRpb24gZmFpbGVkIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1
cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVyX3JlbW92
ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEp
KTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RNSW5zdGFu
Y2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3N0
YXRpYyBib29sIGlzQ0RNUHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2Vs
Zik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgp
OworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2LT5tdXRl
eC5pc0xvY2tlZCgpKTsKLQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAgICAgR1Jl
ZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250
ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4g
dXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2FnZS4gSW4g
dGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRo
ZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5n
IHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1bCBidXQg
dGhlIHBsYXllciBzZXRzIHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUgQ0RNSW5z
dGFuY2UgYW5kIGlmIGl0IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9mIGFza2lu
ZyBmb3Igb25lIGFzIGl0IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9z
c3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dl
ciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIg
cXVlcmllcyBub3IgYnVzCi0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KLSAg
ICAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBn
c3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQu
Z2V0KCkpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNETSA9IHZh
bHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFs
dWUpKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0gICAgICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5
IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBwcml2LT5w
cm94eUNETS0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIpOworc3Rh
dGljIENETVByb3h5KiBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYp
LCAiZHJtLWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkgPSBudWxscHRyOworCisg
ICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2Fu
J3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRo
ZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAgICAvLyBtZXNzYWdlLiBJ
biB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkg
dGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29p
bmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRo
ZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3Rh
bmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcg
Zm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRm
b3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUg
YnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmll
cyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgorICAgIGlmIChjb250
ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92
YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLXByb3h5
Iik7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJveHkgPSByZWludGVycHJl
dF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICAg
ICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
cmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByb3h5
LCBwcm94eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAg
ICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNE
TVByb3h5IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAgICB9Ci0KLSAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZhaWxhYmxlICVzIiwgYm9vbEZvclBy
aW50aW5nKHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RN
OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFu
ZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQorc3RhdGljIHZv
aWQgYXR0YWNoQ0RNUHJveHkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZiwgQ0RNUHJveHkqIHByb3h5KQogewotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKICAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CiAgICAgV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRf
R0VUX0NMQVNTKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCi0gICAgc3dp
dGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01f
RE9XTlNUUkVBTV9PT0I6IHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzNTUKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRs
aW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KLSAgICAgICAgLy8gYWRkaXRp
b24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQotICAg
ICAgICAvLyBwcmVmZXJyZWQgc3lzdGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0dXJlIHBy
b3RlY3Rpb24KLSAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRl
bXV4ZXIsIHNvIHRoZSBtdXN0IGJlCi0gICAgICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBpZiAoIWlzQ0RNSW5z
dGFuY2VBdmFpbGFibGUoc2VsZikpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIk5vIENETSBpbnN0YW5jZSBhdmFpbGFibGUiKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiQXR0YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHByaXYtPmNkbVByb3h5ID0g
cHJveHk7CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkp
OworICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICghaXNDRE1Qcm94eUF2YWls
YWJsZShzZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAgICAg
ICBDRE1Qcm94eSogcHJveHkgPSBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KHNlbGYpOworICAg
ICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgIGF0dGFjaENETVByb3h5KHNlbGYsIHByb3h5
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gcmV0cmlldmUgQ0RNUHJveHkg
ZnJvbSBjb250ZXh0Iik7CiAgICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0gICAg
ICAgIGlmIChrbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlDRE0pKSB7
Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQiKTsKLSAg
ICAgICAgICAgIHByaXYtPmtleVJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByaXYtPmNv
bmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICAgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywg
R3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBGQUxTRTsKIAorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1CisgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHBy
b3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KKyAgICAvLyBhZGRpdGlvbiB0byBvdXQt
b2YtYmFuZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCisgICAgLy8gcHJlZmVy
cmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCisgICAg
Ly8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRoZXkgbXVz
dCBiZQorICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBF
KGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjogewor
ICAgICAgICBBU1NFUlQoZ3N0X2V2ZW50X2hhc19uYW1lKGV2ZW50LCAiYXR0ZW1wdC10by1kZWNy
eXB0IikpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJIYW5kbGluZyBhdHRlbXB0
LXRvLWRlY3J5cHQiKTsKKyAgICAgICAgcmVzdWx0ID0gaW5zdGFsbENETVByb3h5SWZOb3RBdmFp
bGFibGUoc2VsZik7CiAgICAgICAgIGdzdF9ldmVudF91bnJlZihldmVudCk7Ci0gICAgICAgIHJl
c3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMzQ1
LDE2ICszNTQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJh
bnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdz
dFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFF1ZXJ5KiBxdWVyeSkKLXsKLSAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9oYXNfbmFtZShnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZShxdWVyeSksICJhbnkt
ZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSB7Ci0gICAgICAgIFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQ
VF9HRVRfUFJJVkFURSh0cmFucyk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QodHJhbnMsICJh
bnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSBxdWVyeSwgd2FpdGluZ2ZvcmtleSAlcyIsIGJv
b2xGb3JQcmludGluZyhwcml2LT53YWl0aW5nRm9yS2V5KSk7Ci0gICAgICAgIHJldHVybiBwcml2
LT53YWl0aW5nRm9yS2V5OwotICAgIH0KLSAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NM
QVNTKHBhcmVudF9jbGFzcyktPnF1ZXJ5KHRyYW5zLCBkaXJlY3Rpb24sIHF1ZXJ5KTsKLX0KLQog
c3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVu
dCk7CkBAIC0zNjMsNyArMzYyLDcgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5n
ZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW4KICAgICBzd2l0
Y2ggKHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JF
QURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7Ci0g
ICAgICAgIHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0
YWNobWVudENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CkBAIC0zODAsMTIgKzM3OSwxNCBAQCBzdGF0aWMgdm9pZCBzZXRD
b250ZXh0KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQqIGNvbnRleHQpCiB7CiAgICAg
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9D
RU5DX0RFQ1JZUFQoZWxlbWVudCk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRF
KHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xh
c3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKIAotICAgIGlm
IChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLWluc3RhbmNl
IikpIHsKLSAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3Zh
bHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0taW5zdGFuY2UiKTsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBwcml2LT5w
cm94eUNETSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0
X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2Vs
ZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPnByb3h5Q0RNLmdldCgpKTsK
KyAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1w
cm94eSIpKSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dl
dF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLXByb3h5Iik7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7Cisg
ICAgICAgIHByaXYtPmNkbVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENETVByb3h5
Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+Y2Rt
UHJveHkuZ2V0KCkpOworICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxmLCBwcml2
LT5jZG1Qcm94eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVh
bWVyLmgKaW5kZXggMDY1MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1ZC4uODU3
NWEwNzEwMmJkMTMzZjkyNWRlMWEwN2FkYzkyMmM3YTA1ODQyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNy
eXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
ICYmIFVTRShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2luY2x1ZGUg
PENETVByb3h5Lmg+CiAjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgogI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw4ICs1NSw4
IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHsKICAg
ICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBjaGFyKiBw
cm90ZWN0aW9uU3lzdGVtSWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5Q0RNPik7
Ci0gICAgYm9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
LCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIq
IGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNC
dWZmZXIpOworICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5Pik7CisgICAgYm9vbCAo
KmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIq
IGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5z
aWduZWQgc3Vic2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpOwogfTsK
IAogR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAK
aW5kZXggYjMyYjVhMDE2ODQ1NWRlY2U5OTVkNTZhNmI0MzRlOGRkNGZiZTY4MS4uY2U1ZDhmN2Q2
YmRmMzhiNTkyMjA5MzAyYTZlNmQ3MWIzNjk2NjMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Nb2NrQ0RNRmFjdG9yeS5jcHAKQEAgLTIyNiw4ICsyMjYsNiBAQCBPcHRpb25hbDxTdHJpbmc+
IE1vY2tDRE06OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25z
dAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVByb3h5Q0RNTW9jazo6flByb3h5Q0RN
TW9jaygpID0gZGVmYXVsdDsKLQogTW9ja0NETUluc3RhbmNlOjpNb2NrQ0RNSW5zdGFuY2UoV2Vh
a1B0cjxNb2NrQ0RNPiBjZG0pCiAgICAgOiBtX2NkbShjZG0pCiB7CkBAIC0yOTYsMTEgKzI5NCw2
IEBAIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IE1vY2tDRE1JbnN0YW5jZTo6Y3JlYXRlU2Vz
c2lvbigpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uKG1h
a2VXZWFrUHRyKCp0aGlzKSkpOwogfQogCi1SZWZQdHI8UHJveHlDRE0+IE1vY2tDRE1JbnN0YW5j
ZTo6cHJveHlDRE0oKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJveHlDRE1N
b2NrKCkpOwotfQotCiBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpNb2NrQ0RNSW5zdGFuY2VTZXNz
aW9uKFdlYWtQdHI8TW9ja0NETUluc3RhbmNlPiYmIGluc3RhbmNlKQogICAgIDogbV9pbnN0YW5j
ZShXVEZNb3ZlKGluc3RhbmNlKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rv
cnkuaAppbmRleCBkN2U2NmU2MDE2ZDEwMTc4MTJlYWZhOGM4MGI0N2Q0NzI4MzUwY2QxLi4zOTkw
OWI5MzAzYTk0YzkzNjhlYWEwZjYyNWY0YjY3ZTUyNTA1OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNRmFjdG9yeS5oCkBAIC05OSwxMSArOTksNiBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX3Nlc3Npb25zOwogfTsK
IAotY2xhc3MgUHJveHlDRE1Nb2NrIGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5Qcm94eUNETU1vY2soKTsKLX07Ci0KIGNsYXNzIE1vY2tDRE0gOiBwdWJs
aWMgQ0RNUHJpdmF0ZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1vY2tDRE0+IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE1MCw3ICsxNDUsNiBAQCBwcml2YXRl
OgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZp
bmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVm
UHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotICAgIFJlZlB0
cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbDsKIAogICAgIFdlYWtQdHI8TW9ja0NE
TT4gbV9jZG07CiAgICAgYm9vbCBtX2Rpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkIHsgdHJ1
ZSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390350</attachid>
            <date>2020-02-11 04:38:39 -0800</date>
            <delta_ts>2020-02-11 05:10:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211123837.patch</filename>
            <type>text/plain</type>
            <size>114387</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uOGZiNzI4NDRkMjIyODA1MmNhM2VlMmZhMjhjNDlh
OTE0ZDkwNjI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW50cm9kdWNlIGEgbmV3IHN1YmNsYXNzIG9mIENETUluc3RhbmNlLCBD
RE1Qcm94eUluc3RhbmNlLgorCisgICAgICAgIENETUluc3RhbmNlIGlzIGEgbWFpbi10aHJlYWQg
b25seSBjbGFzcywgaXRzIHB1cnBvc2UgaXMgdG8gcHJvdmlkZQorICAgICAgICBhbiBpbnRlcmZh
Y2UgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIEphdmFTY3JpcHQgRU1FIEFQSXMsIHdoaWNoIGJ5Cisg
ICAgICAgIGRlc2lnbiwgZG9uJ3QgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aCBhIHJlYWwgRFJNIHN5
c3RlbSwgd2hhdCBtaWdodAorICAgICAgICBhbHNvIGJlIGNhbGxlZCAiVGhlIENETSBJbnN0YW5j
ZSIuIFRoYXQncyB3aHkgdGhlIG5hbWluZyBpcworICAgICAgICBtaXNsZWFkaW5nIGhlcmUsIENE
TUluc3RhbmNlIGlzbid0IGFjdHVhbGx5IGFuIGluc3RhbmNlIG9mIGEgcmVhbAorICAgICAgICBD
RE0sIHJhdGhlciBpdCBpcyBhIGZhY2FkZSBmb3IgSmF2YVNjcmlwdC4KKworICAgICAgICBDRE1Q
cm94eUluc3RhbmNlIGlzIGEgc3ViLWNsYXNzIHdoaWNoIHByb3ZpZGVzIHR3byBBUElzLAorICAg
ICAgICAxLyBGb3IgYmFja2dyb3VuZCBtZWRpYSB0aHJlYWRzIHRvIHNhZmVseSBpbnRlcnJvZ2F0
ZSB0aGUgc3RhdHVzCisgICAgICAgIG9mIGtleXMgYW5kIHRvIHBlcmZvcm0gZGVjcnlwdGlvbiB1
c2luZyBzYWlkIGtleXMuIFRoaXMgQVBJIGlzCisgICAgICAgIGV4cG9zZWQgYnkgQ0RNUHJveHkg
YW5kIGlzIHBsYXRmb3JtIHNwZWNpZmljLgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0
byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0
IHRoZWlyIHN0YXR1cyBpcy4KKworICAgICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhy
ZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVhbCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIg
cXVpcmtzLiBUaGUgdHdvIG1haW4gcHJvYmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisg
ICAgICAgIGhhdmUgaW4gV2ViS2l0IGlzIGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZy
b20gYmFja2dyb3VuZAorICAgICAgICBtZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5h
Z2VtZW50IGlzIGhvdyB0byBtYW5hZ2UgdGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAg
ICAgY29oZXJlbnQgd2l0aCBKYXZhU2NyaXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxl
bWVudGF0aW9uLAorICAgICAgICB0aGUgcmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFj
a2dyb3VuZCBtZWRpYQorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1
bHQga2V5IHN0b3JlIGludGVyZmFjZSBmb3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFz
c2VzIGNhbiwgb24gcmVjZWlwdCBvZiBuZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJl
YWwgQ0RNLCB0ZWxsIENETVByb3h5IGFib3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBz
dGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20g
dGhlcmUsCisgICAgICAgIGxldHRpbmcgSmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0
aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8KKyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMg
d2VsbCBhcyB0aGUgbWVkaWEgZGVjb2RlIHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQg
Y29tZSBhc2tpbmcuCisKKyAgICAgICAgQWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlz
IGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcgdGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5z
dGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRo
aXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAg
ICAgIHRocmVhZC11bnNhZmUgYWNjZXNzIG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdl
IGhhZCB0byBkbworICAgICAgICBzb21ldGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNv
bWV0aGluZyB3YXMgUHJveHlDRE0gKGEKKyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBu
b3cpLCB3aGljaCB3YXMgYSBoYWNrIGFuZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0
LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFu
ZAorICAgICAgICBpdCB3aWxsIGJ5IGRlZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcg
b2YgdGhlIGtleSBzdG9yZSBmb3IKKyAgICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVy
cm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5kIHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRl
Y3J5cHRpb24gLyBkZWNvZGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIENETVBy
b3h5IHRvIGJ1aWxkCisgICAgICAgIGRlZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5
Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEgdGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29t
ZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2VydHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiBy
ZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAgZm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0
IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3JyeSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lv
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92
ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlW
YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6Omlk
QXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6
YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Np
b25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OktleSk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6aXNXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlUHJveHk6OnNldFBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5Ojp0cmFja1Nlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5z
ZUZvcm1hdCk6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldyBLZXkgY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKTogUmVmYWN0b3JlZCB0
bworICAgICAgICB1c2UgYmV0dGVyIG5hbWVkIGNvbnN0YW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKTogVXNlIHRoZQorICAgICAgICB0
cmFja1Nlc3Npb24gbWV0aG9kIHRvIGFsbG93IGVhc2llciBtb25pdG9yaW5nIG9mIGFsbCBFTUUK
KyAgICAgICAgc2Vzc2lvbnMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVxdWVzdExpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICBrZWVwIHRyYWNr
IG9mIGdlbmVyYXRlZCBzZXNzaW9uIElEcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAgdXNl
IG5ldyBrZXkgbWFuYWdlbWVudCBjbGFzc2VzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OmxvYWRTZXNzaW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OmtleXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omlzb2xhdGVkS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3h5
Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpDRE1JbnN0YW5jZUNsZWFyS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmlu
ZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5
OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBE
ZWxldGVkLiBJdCBsb29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0
aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2Ug
YW4KKyAgICAgICAgb3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAq
IHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9y
IHRvIHVzZQorICAgICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9k
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVm
YWN0b3JlZCBvdXQgb2Ygc3luY01lc3NhZ2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBp
bnRvCisgICAgICAgIHdhaXRGb3JDRE1BdHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5
IGNvZGUsIGl0IHdhcyBhbGwgYnJva2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVu
Zm9yY2UgdXNlIG9mIENETUluc3RhbmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMg
d2lsbCBiZQorICAgICAgICB1c2luZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20g
YmFja2dyb3VuZAorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8g
dGhlIE1lZGlhUGxheWVyIGZvcgorICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNv
IHdpcmUgdGhhdCBpbiBoZXJlIHRvby4gQWxzbyB3aXJlIHRoZQorICAgICAgICBHU3RyZWFtZXIg
c3BlY2lmaWMgQ2xlYXJLZXkgcHJveHkgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBL
ZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBv
ZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdwor
ICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHA6
CisgICAgICAgIEFkZGVkLiBHKi1zcGVjaWZpYyBDbGVhcktleSBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdFN1
YnNhbXBsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5
cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlw
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNs
ZWFyS2V5Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3Rv
ciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5
cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
aW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToK
KyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVk
LiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBiZWVuIGNo
YW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHRyYW5z
Zm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Qcm94eUF2YWlsYWJsZSk6CisgICAgICAgIChn
ZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAgICAgICAgKGF0dGFjaENETVByb3h5KToKKyAg
ICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKToKKyAgICAgICAgKHNpbmtFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3RhdGUpOgorICAgICAgICAoc2V0Q29udGV4dCk6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6
IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5
b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYW5kYXRlIFVVSUQg
dmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRhdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQx
ODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFj
ZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0QTVEMDFGNzFDQjZCMDBG
NTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDk0
QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1l
ZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1NZWRp
YUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcx
Q0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5
NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUy
NUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1
MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVD
NSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENE
TVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHku
aCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAq
LywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8s
CiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFj
Yzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRh
YTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAt
MTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICApCiAKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdj
YzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMx
NGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5j
ZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwg
bm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNr
Z3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3Vy
YXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBi
ZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNs
YXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjODY1
Y2E4OTIzNmI4ZmNmNTc4MWVkYmQzNGNhMWJmOWU5ZTMxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKQEAgLTAs
MCArMSwzMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVByb3h5
LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNTdHJpbmco
KSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmco
bV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSksICJd
Iik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICByZXR1cm4gKnN0b3JlZEtl
eSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQorCit2b2lkIEtleVN0b3Jl
OjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMi
LCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkg
OiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3Qg
YXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAgICAgLy8gaW4gdGhlIGtl
eXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNo
IGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBj
b21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJl
ZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0g
V1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxh
eWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBk
aWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IHN0b3JlIG5v
dyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBt
X2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5IC0gS2V5IElEOiAlcyIs
IGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRpZiAvLyAhTE9HX0RJU0FC
TEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQoKSBjb25zdAoreworICAg
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IGNv
bnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRvJiBrZXlTdGF0dXMgOiBr
ZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQgPSBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsK
K30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYgbmV3S2V5
cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92ZShrZXkpKSkKKyAgICAg
ICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpZEtl
eVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkp
Cit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIHNpemVfdCBrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0
cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsK
KyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90
Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleVdpdGhN
YXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNhbiB0aGlzIHJlYWxseSBo
YXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5
IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5p
ZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAgICBtX2tleXMuYXBwZW5k
KGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBrZXkt
PmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3RvcmVDaGFuZ2U7Cit9CisK
K3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikK
K3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAgICAgICByZW1vdmUoa2V5
KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCit7
CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNpemVfdCBrZXlXaXRoTWF0
Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGFuZCAldSBzZXNz
aW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwga2V5LT5u
dW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIGtleVdpdGhN
YXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7CisgICAgICAgIGlmICgha2V5
V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyIsIGtleVdp
dGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAg
ICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4KTsKKyAgICAgICAgICAg
IHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMg
aWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25zdCBWZWN0b3I8dWludDhf
dD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7CisgICAgICAgIGlmICgq
a2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwg
dGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3Io
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
dW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7CisgICAgICAg
IC8vIEZJWE1FOiBWZWN0b3I8dWludDhfdD4gcmVwcmVzZW50YXRpb24gaXMgY29weS1oZWF2eSwg
YnV0IHRoZQorICAgICAgICAvLyBkYXRhIGFyZSBzbWFsbCBpbiBudW1iZXIsIHNvIHByb2JhYmx5
IGl0J3MgZmluZS4KKyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7
IGtleS0+aWRBc1NoYXJlZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOworICAgIH0KKyAgICBy
ZXR1cm4ga2V5U3RhdHVzVmVjdG9yOworfQorCit2b2lkIENETVByb3h5Ojp1cGRhdGVLZXlTdG9y
ZShjb25zdCBLZXlTdG9yZSYgbmV3S2V5U3RvcmUpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2tleXNNdXRleCk7CisgICAgbV9rZXlTdG9yZS5tZXJnZShuZXdLZXlTdG9yZSk7Cisg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdXBkYXRpbmcga2V5IHN0b3JlIGZyb20gYSBz
ZXNzaW9uIHVwZGF0ZSIpOworICAgIG1fa2V5c0NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKK30KKwor
dm9pZCBDRE1Qcm94eTo6c2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSogaW5zdGFuY2UpCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIG1faW5z
dGFuY2UgPSBpbnN0YW5jZTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IENETVByb3h5OjprZXlWYWx1
ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIEFTU0VSVChtX2tleVN0b3JlLmNvbnRhaW5z
S2V5SUQoa2V5SUQpKTsKKyAgICByZXR1cm4gbV9rZXlTdG9yZS5rZXlWYWx1ZShrZXlJRCk7Cit9
CisKK3ZvaWQgQ0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gc3RhcnRlZCB3YWl0aW5nIGZvciBhIGtleSIpOworICAgIEFTU0VSVCht
X2luc3RhbmNlKTsKKyAgICBtX2luc3RhbmNlLT5zdGFydGVkV2FpdGluZ0ZvcktleSgpOworfQor
Cit2b2lkIENETVByb3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHN0b3BwZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9p
bnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+c3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwor
T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6dHJ5V2FpdEZvcktleShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5
KCk7CisgICAgLy8gVW5jb25kaXRpb25hbGx5IHNheWluZyB3ZSBoYXZlIHN0b3BwZWQgd2FpdGlu
ZyBmb3IgYSBrZXkgbWVhbnMgdGhhdCBkZWNyeXB0b3JzIG9ubHkgZ2V0CisgICAgLy8gb25lIHNo
b3QgYXQgZmV0Y2hpbmcgYSBrZXkuIElmIE1heEtleVdhaXRUaW1lU2Vjb25kcyBleHBpcmVzLCB0
aGF0J3MgaXQsIG5vIG1vcmUgY2xlYXIgYnl0ZXMKKyAgICAvLyBmb3IgeW91LgorICAgIGF1dG8g
c3RvcFdhaXRpbmdGb3JLZXlPblJldHVybiA9IG1ha2VTY29wZUV4aXQoW3RoaXNdIHsKKyAgICAg
ICAgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB9KTsKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNUHJveHkgLSB0cnlpbmcgdG8gd2FpdCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJp
bmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBib29sIHdhc0tleVJlY2VpdmVkID0gZmFs
c2U7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsK
KyAgICAgICAgd2FzS2V5UmVjZWl2ZWQgPSBtX2tleXNDb25kaXRpb24ud2FpdEZvcihtX2tleXNN
dXRleCwgQ0RNUHJveHk6Ok1heEtleVdhaXRUaW1lU2Vjb25kcywgWyYsIHRoaXMsIGtleUlEXSgp
IHsKKyAgICAgICAgICAgIHJldHVybiBrZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIGlmICh3YXNLZXlSZWNlaXZlZCkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdWNjZXNzZnVsbHkgd2FpdGVkIGZvciBrZXkgSUQgJXMi
LCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm4ga2V5VmFsdWUoa2V5SUQpOworICAgIH0KKyAgICAKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkgLSBrZXkgSUQgJXMgbm90IGF2YWlsYWJsZSIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlE
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworYm9vbCBD
RE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2NrZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKTsK
K30KKworYm9vbCBDRE1Qcm94eTo6a2V5QXZhaWxhYmxlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7
CisgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKK30KKworT3B0aW9uYWw8
VmVjdG9yPHVpbnQ4X3Q+PiBDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgaWYgKCFrZXlBdmFpbGFibGUoa2V5SUQpKSB7
CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSBrZXkgY2FjaGUgZG9lcyBub3QgY29u
dGFpbiBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm4gdHJ5V2FpdEZvcktleShrZXlJRCk7CisgICAgfQorCisgICAgcmV0
dXJuIGtleVZhbHVlKGtleUlEKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdGFydGVk
V2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXll
cik7CisgICAgYm9vbCB3YXNXYWl0aW5nRm9yS2V5ID0gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zv
cktleSA+IDA7CisgICAgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSsrOworCisgICAgY2Fs
bE9uTWFpblRocmVhZChbcGxheWVyID0gbV9wbGF5ZXIsIHdhc1dhaXRpbmdGb3JLZXldIHsKKyAg
ICAgICAgaWYgKHBsYXllciAmJiB3YXNXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVy
LT53YWl0aW5nRm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNl
UHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpICYmIG1fcGxheWVyICYmIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwKTsKKyAg
ICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5LS07CisgICAgYm9vbCBpc05vYm9keVdhaXRp
bmdGb3JLZXkgPSAhbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3BsYXllciA9IG1fcGxheWVyLCBpc05vYm9keVdhaXRpbmdGb3JLZXldIHsKKyAg
ICAgICAgaWYgKHBsYXllciAmJiBpc05vYm9keVdhaXRpbmdGb3JLZXkpCisgICAgICAgICAgICBw
bGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ0RNSW5z
dGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7Cisg
ICAgLy8gRklYTUU6IE5vdGlmeSBKUyB3aGVuIGFwcHJvcHJpYXRlLgorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgbV9rZXlTdG9yZS5tZXJnZShrZXlTdG9yZSk7CisgICAgTE9HKEVN
RSwgIkVNRSAtIENETUluc3RhbmNlUHJveHkgLSBtZXJnaW5nIGtleXMgaW50byBwcm94eSBpbnN0
YW5jZSBhbmQgbm90aWZ5aW5nIENETVByb3h5IG9mIGNoYW5nZXMiKTsKKyAgICBBU1NFUlQobV9j
ZG1Qcm94eSk7CisgICAgbV9jZG1Qcm94eS0+dXBkYXRlS2V5U3RvcmUoa2V5U3RvcmUpOworfQor
Cit2b2lkIENETUluc3RhbmNlUHJveHk6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3Jl
JiBrZXlTdG9yZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fa2V5U3Rv
cmUucmVtb3ZlQWxsS2V5c0Zyb20oa2V5U3RvcmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI2
YWQ3OTM3N2RhOWFiMmIyMjkxNGZlYWQ0MjM5YjBkYzIzNWMwYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmgKQEAgLTAs
MCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQorCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNl
c3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBLZXkgOiBwdWJsaWMg
UmVmQ291bnRlZDxLZXk+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXMgPSBDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1czsKKworICAgIHN0YXRpYyBSZWZQdHI8S2V5PiBjcmVhdGUo
S2V5U3RhdHVzIHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90
PiYmIGtleVZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5KHN0
YXR1cywgV1RGTW92ZShrZXlJRCksIFdURk1vdmUoa2V5VmFsdWUpKSk7CisgICAgfQorICAgIFJl
ZjxTaGFyZWRCdWZmZXI+IGlkQXNTaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShtX2lkLmRhdGEoKSwgbV9pZC5zaXplKCkpOyB9CisKKyAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBLZXlTdGF0dXMg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgIFN0cmluZyBpZEFzU3Ry
aW5nKCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKworICAgIC8v
IFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtl
eSB2YWx1ZSBhbmQgc3RhdHVzLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gazEubV9pZCA9PSBrMi5tX2lkOyB9CisgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmssIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQpIHsgcmV0dXJuIGsubV9pZCA9PSBrZXlJRDsgfQorICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCwgY29uc3QgS2V5ICZrKSB7IHJl
dHVybiBrID09IGtleUlEOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRTZXNzaW9uUmVmZXJl
bmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2VzKys7
IH0KKyAgICB2b2lkIHJlbW92ZVNlc3Npb25SZWZlcmVuY2UoKSB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMtLTsgfQorICAgIHVuc2lnbmVkIG51bVNlc3Np
b25SZWZlcmVuY2VzKCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9u
dW1TZXNzaW9uUmVmZXJlbmNlczsgfQorICAgIGZyaWVuZCBjbGFzcyBLZXlTdG9yZTsKKworICAg
IEtleShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVp
bnQ4X3Q+JiYga2V5VmFsdWUpCisgICAgICAgIDogbV9zdGF0dXMoc3RhdHVzKSwgbV9pZChXVEZN
b3ZlKGtleUlEKSksIG1fdmFsdWUoV1RGTW92ZShrZXlWYWx1ZSkpIHsgfQorCisgICAgS2V5U3Rh
dHVzIG1fc3RhdHVzOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2lkOworICAgIFZlY3Rvcjx1aW50
OF90PiBtX3ZhbHVlOworICAgIHVuc2lnbmVkIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMgeyAwIH07
Cit9OworCitjbGFzcyBLZXlTdG9yZSB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzVmVj
dG9yID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3I7CisKKyAgICBib29sIGNv
bnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9p
ZCBtZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zy
b20oY29uc3QgS2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXMoKSB7IG1f
a2V5cy5jbGVhcigpOyB9CisgICAgYm9vbCBhZGRLZXlzKFZlY3RvcjxSZWZQdHI8S2V5Pj4mJik7
CisgICAgYm9vbCBhZGQoUmVmUHRyPEtleT4mJik7CisgICAgYm9vbCByZW1vdmUoY29uc3QgUmVm
UHRyPEtleT4mKTsKKyAgICB1bnNpZ25lZCBudW1LZXlzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlz
LnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5VmFsdWUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGFsbEtleXNB
c1JlbGVhc2VkKCkgY29uc3Q7CisgICAgS2V5U3RhdHVzVmVjdG9yIGNvbnZlcnRUb0pTS2V5U3Rh
dHVzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLmJl
Z2luKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmJlZ2luKCk7
IH0KKyAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byByYmVnaW4oKSB7IHJl
dHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmVuZCgpIHsgcmV0dXJuIG1fa2V5cy5yZW5k
KCk7IH0KKyAgICBhdXRvIHJlbmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBtX2tleXM7Cit9OworCitjbGFzcyBD
RE1JbnN0YW5jZVByb3h5OworCisvLyBIYW5kbGUgdG8gYSAicmVhbCIgQ0RNLCBub3QgdGhlIEph
dmFTY3JpcHQgZmFjYWRlLiBUaGlzIGNhbiBiZSB1c2VkCisvLyBmcm9tIGJhY2tncm91bmQgdGhy
ZWFkcyAoaS5lLiBkZWNyeXB0b3JzKS4KK2NsYXNzIENETVByb3h5IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPENETVByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBT
ZWNvbmRzIE1heEtleVdhaXRUaW1lU2Vjb25kcyA9IDVfczsKKworICAgIHZpcnR1YWwgfkNETVBy
b3h5KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB1cGRhdGVLZXlTdG9yZShjb25zdCBLZXlTdG9y
ZSYgbmV3S2V5U3RvcmUpOworICAgIHZvaWQgc2V0SW5zdGFuY2UoQ0RNSW5zdGFuY2VQcm94eSop
OworCitwcm90ZWN0ZWQ6CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZhbHVlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIGJvb2wga2V5QXZhaWxhYmxlVW5sb2Nr
ZWQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgT3B0aW9uYWw8VmVj
dG9yPHVpbnQ4X3Q+PiB0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQp
IGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0T3JXYWl0Rm9yS2V5KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgc3RhcnRlZFdhaXRp
bmdGb3JLZXkoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBMb2NrIG1faW5zdGFuY2VNdXRleDsKKyAgICBDRE1J
bnN0YW5jZVByb3h5KiBtX2luc3RhbmNlOworCisgICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4
OworICAgIG11dGFibGUgQ29uZGl0aW9uIG1fa2V5c0NvbmRpdGlvbjsKKyAgICAvLyBGSVhNRTog
RHVwbGljYXRlZCBrZXkgc3RvcmVzIGluIHRoZSBpbnN0YW5jZSBhbmQgdGhlIHByb3h5IGFyZSBw
cm9iYWJseSBub3QgbmVlZGVkLCBidXQgc2ltcGxpZmllZAorICAgIC8vIHRoZSBpbml0aWFsIGlt
cGxlbWVudGF0aW9uIGluIHRlcm1zIG9mIHRocmVhZGluZyBpbnZhcmlhbnRzLgorICAgIEtleVN0
b3JlIG1fa2V5U3RvcmU7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBjb21tb24gc2Vzc2lvbiBt
YW5hZ2VtZW50IGNvZGUgYW5kIGZvciBjb21tdW5pY2F0aW5nIG1lc3NhZ2VzCisvLyBmcm9tICJy
ZWFsIENETSIgc3RhdGUgY2hhbmdlcyB0byBKUy4KK2NsYXNzIENETUluc3RhbmNlUHJveHkgOiBw
dWJsaWMgQ0RNSW5zdGFuY2UgeworcHVibGljOgorICAgIENETUluc3RhbmNlUHJveHkoKSA9IGRl
ZmF1bHQ7CisgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VQcm94eSgpID0gZGVmYXVsdDsKKworICAg
IC8vIE1haW4tdGhyZWFkIG9ubHkuCisgICAgdm9pZCBzZXRQcm94eShSZWY8Q0RNUHJveHk+JiYg
cHJveHkpCisgICAgeworICAgICAgICBtX2NkbVByb3h5ID0gV1RGTW92ZShwcm94eSk7CisgICAg
ICAgIG1fY2RtUHJveHktPnNldEluc3RhbmNlKHRoaXMpOworICAgIH0KKyAgICB2b2lkIG1lcmdl
S2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNv
bnN0IEtleVN0b3JlJik7CisKKyAgICAvLyBNZWRpYSBwbGF5ZXIgcXVlcnkgbWV0aG9kcyAtIG1h
aW4gdGhyZWFkIG9ubHkuCisgICAgUmVmUHRyPENETVByb3h5PiBwcm94eSgpIGNvbnN0IHsgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fY2RtUHJveHk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNXYWl0aW5nRm9yS2V5KCkgY29uc3QgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1
cm4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+IDA7IH0KKyAgICB2b2lkIHNldFBsYXll
cihNZWRpYVBsYXllciogcGxheWVyKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fcGxheWVy
ID0gcGxheWVyOyB9CisKKyAgICAvLyBQcm94eSBtZXRob2RzIC0gbXVzdCBiZSB0aHJlYWQtc2Fm
ZS4KKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCk7CisgICAgdm9pZCBzdG9wcGVkV2Fp
dGluZ0ZvcktleSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB0cmFja1Nlc3Npb24oY29uc3Qg
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gc2Vzc2lvbikgeyBtX3Nlc3Npb25zLmFwcGVuZChz
ZXNzaW9uKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxDRE1Qcm94eT4gbV9jZG1Qcm94eTsK
KyAgICAvLyBGSVhNRTogV2Vha1B0ciBmb3IgdGhlIG1fcGxheWVyPyBUaGlzIGlzIGFjY2Vzc2Vk
IGZyb20gYmFja2dyb3VuZCBhbmQgbWFpbiB0aHJlYWRzLCBpdCdzCisgICAgLy8gY29uY2Vybmlu
ZyB3ZSBjb3VsZCBiZSBhY2Nlc3NpbmcgaXQgaW4gdGhlIG1pZGRsZSBvZiBhIHNodXRkb3duIG9u
IHRoZSBtYWluLXRocmVhZCwgZWg/CisgICAgLy8gQXMgYSBDRE1Qcm94eSwgd2UgKioqc2hvdWxk
KioqIGJlIHR1cm5lZCBvZmYgYmVmb3JlIHRoaXMgcG9pbnRlciBldmVyIGdvZXMgYmFkLgorICAg
IE1lZGlhUGxheWVyKiBtX3BsYXllciB7IG51bGxwdHIgfTsgLy8gRklYTUU6IE1haW5UaHJlYWQ8
VD4/CisKKyAgICBzdGQ6OmF0b21pYzxpbnQ+IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7
CisgICAgVmVjdG9yPFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+PiBtX3Nlc3Npb25zOworCisg
ICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5jcHAKaW5kZXggNjQ4NWRiNzVkN2U3MzM5YjE1NjFkYzZkNThlZjI5YzliMzEyMzU4MC4uZTFj
MjNjNmY1M2Y2ZmE0MTQxOTY1OGEwMzVjMzBiMTBmMjU2NGU4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NE
TUNsZWFyS2V5LmNwcApAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIkNETVNlc3Npb25UeXBl
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CkBAIC00MywzNCArNDUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLS8vIENsZWFyS2V5IENFTkMgU3lzdGVtSUQuCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIv
ZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1vbi1zeXN0ZW0KLWNvbnN0IHVpbnQ4X3QgY2xlYXJLZXlD
ZW5jU3lzdGVtSWRbXSA9IHsgMHgxMCwgMHg3NywgMHhlZiwgMHhlYywgMHhjMCwgMHhiMiwgMHg0
ZCwgMHgwMiwgMHhhYywgMHhlMywgMHgzYywgMHgxZSwgMHg1MiwgMHhlMiwgMHhmYiwgMHg0YiB9
OwotY29uc3QgdW5zaWduZWQgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID0gc2l6ZW9mKGNsZWFy
S2V5Q2VuY1N5c3RlbUlkKTsKLWNvbnN0IHVuc2lnbmVkIGtleUlkU2l6ZSA9IDE2OwotCi1jbGFz
cyBDbGVhcktleVN0YXRlIHsKLSAgICB1c2luZyBLZXlTdG9yZSA9IEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj47Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMg
Q2xlYXJLZXlTdGF0ZSYgc2luZ2xldG9uKCk7Ci0KLSAgICBLZXlTdG9yZSYga2V5cygpIHsgcmV0
dXJuIG1fa2V5czsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxDbGVhcktleVN0YXRlPjsKLSAgICBDbGVhcktleVN0YXRlKCk7Ci0gICAgS2V5U3RvcmUgbV9r
ZXlzOwotfTsKLQotQ2xlYXJLZXlTdGF0ZSYgQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT4gc19zdGF0ZTsKLSAgICBy
ZXR1cm4gc19zdGF0ZTsKLX0KLQotQ2xlYXJLZXlTdGF0ZTo6Q2xlYXJLZXlTdGF0ZSgpID0gZGVm
YXVsdDsKLQogc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25z
dCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBGYWlsIG9uIGxhcmdlIGJ1ZmZlcnMg
d2hvc2Ugc2l6ZSBkb2Vzbid0IGZpdCBpbnRvIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIuCkBA
IC04OCw3ICs2Miw3IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmpl
Y3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAgICAgcmV0dXJuIG9iamVjdDsKIH0KIAot
c3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PiBwYXJzZUxp
Y2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQorc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxSZWZQdHI8S2V5Pj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3Qm
IHJvb3QpCiB7CiAgICAgLy8gSWYgdGhlICdrZXlzJyBrZXkgaXMgcHJlc2VudCBpbiB0aGUgcm9v
dCBvYmplY3QsIHBhcnNlIHRoZSBKU09OIGZ1cnRoZXIKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhl
IHNwZWNpZmllZCAnbGljZW5zZScgZm9ybWF0LgpAQCAtMTAxLDcgKzc1LDcgQEAgc3RhdGljIE9w
dGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3Jt
YXQoY29uc3QgSlNPTjoKICAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPENETUluc3RhbmNlQ2xl
YXJLZXk6OktleT4gZGVjb2RlZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxLZXk+PiBkZWNvZGVk
S2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjphbGxfb2Yoa2V5c0FycmF5LT5iZWdp
bigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRlY29kZWRLZXlzXSAoY29uc3QgYXV0
byYgdmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGtleU9iamVjdDsK
QEAgLTExNiwxMSArOTAsMTEgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjoKICAgICAgICAgICAg
IGlmICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5n
ZXRTdHJpbmcoImsiLCBrZXlWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7CisgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SUREYXRhLCBrZXlWYWx1ZURhdGE7CiAgICAgICAg
ICAgICBpZiAoIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleUlELCB7IGtleUlERGF0YSB9KSB8fCAh
V1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5VmFsdWUsIHsga2V5VmFsdWVEYXRhIH0pKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5k
KHsgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgU2hhcmVkQnVmZmVyOjpj
cmVhdGUoV1RGTW92ZShrZXlJRERhdGEpKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShr
ZXlWYWx1ZURhdGEpKSB9KTsKKyAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZChLZXk6OmNy
ZWF0ZShDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBXVEZNb3ZlKGtleUlE
RGF0YSksIFdURk1vdmUoa2V5VmFsdWVEYXRhKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0pOwogICAgIGlmICghdmFsaWRGb3JtYXQpCkBAIC0xODEsNyArMTU1LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICB3aGlsZSAodHJ1ZSkgewogCiAgICAgICAgIC8v
IENoZWNrIHRoZSBvdmVyZmxvdyBJbml0RGF0YS4KLSAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBj
bGVhcktleUNlbmNTeXN0ZW1JZFNpemUgPj0gaW5pdERhdGFTaXplKQorICAgICAgICBpZiAoaW5k
ZXggKyAxMiArIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplID49IGluaXREYXRhU2l6ZSkKICAg
ICAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKICAgICAgICAgcHNzaFNpemUgPSBkYXRhW2lu
ZGV4ICsgMl0gKiAyNTYgKyBkYXRhW2luZGV4ICsgM107CkBAIC0xOTEsNyArMTY1LDcgQEAgc3Rh
dGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlvbkZy
b21DZW5jSW5pdERhdGEoY29uc3QKICAgICAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKICAg
ICAgICAgLy8gMTIgPSBCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFkZXIuCi0gICAgICAg
IGlmICghbWVtY21wKCZkYXRhW2luZGV4ICsgMTJdLCBjbGVhcktleUNlbmNTeXN0ZW1JZCwgY2xl
YXJLZXlDZW5jU3lzdGVtSWRTaXplKSkgeworICAgICAgICBpZiAoIW1lbWNtcCgmZGF0YVtpbmRl
eCArIDEyXSwgQ2xlYXJLZXk6OmNlbmNTeXN0ZW1JZCwgQ2xlYXJLZXk6OmNlbmNTeXN0ZW1JZFNp
emUpKSB7CiAgICAgICAgICAgICBmb3VuZFBzc2ggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTIwMiw3ICsxNzYsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShjb25zdAog
ICAgIGlmICghZm91bmRQc3NoKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCi0gICAgaW5k
ZXggKz0gKDEyICsgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplKTsgLy8gMTIgKEJNRkYgYm94IGhl
YWRlciArIEZ1bGwgYm94IGhlYWRlcikgKyBTeXN0ZW1JRCBzaXplLgorICAgIGluZGV4ICs9ICgx
MiArIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKTsgLy8gMTIgKEJNRkYgYm94IGhlYWRlciAr
IEZ1bGwgYm94IGhlYWRlcikgKyBTeXN0ZW1JRCBzaXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92
ZXJmbG93LgogICAgIGlmIChpbmRleCArIDMgPj0gaW5pdERhdGFTaXplKQpAQCAtMjEyLDcgKzE4
Niw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRz
TG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAgaW5kZXggKz0gNDsgLy8gS2V5SWRz
Q291bnQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KLSAgICBpZiAoKGluZGV4
ICsgKGtleUlkc01hcC5maXJzdCAqIGtleUlkU2l6ZSkpID49IGluaXREYXRhU2l6ZSkKKyAgICBp
ZiAoKGluZGV4ICsgKGtleUlkc01hcC5maXJzdCAqIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
KSkgPj0gaW5pdERhdGFTaXplKQogICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAga2V5
SWRzTWFwLnNlY29uZCA9IGluZGV4OyAvLyBUaGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IEtleUlk
IGluIGluaXREYXRhLgpAQCAtMjUxLDkgKzIyNSw5IEBAIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGluaXRE
CiAgICAgLy8gImtpZHMiCiAgICAgLy8gQW4gYXJyYXkgb2Yga2V5IElEcy4gRWFjaCBlbGVtZW50
IG9mIHRoZSBhcnJheSBpcyB0aGUgYmFzZTY0dXJsIGVuY29kaW5nIG9mIHRoZSBvY3RldCBzZXF1
ZW5jZSBjb250YWluaW5nIHRoZSBrZXkgSUQgdmFsdWUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGtleUlkQ291bnQ7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIGtleUlkU2l6ZSk7CisgICAgICAgIFN0cmluZyBr
ZXlJZCA9IFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwgQ2xlYXJLZXk6OktleUlE
U2l6ZUluQnl0ZXMpOwogICAgICAgICBrZXlJZHNBcnJheS0+cHVzaFN0cmluZyhrZXlJZCk7Ci0g
ICAgICAgIGluZGV4ICs9IGtleUlkU2l6ZTsKKyAgICAgICAgaW5kZXggKz0gQ2xlYXJLZXk6Oktl
eUlEU2l6ZUluQnl0ZXM7CiAgICAgfQogCiAgICAgb2JqZWN0LT5zZXRBcnJheSgia2lkcyIsIFdU
Rk1vdmUoa2V5SWRzQXJyYXkpKTsKQEAgLTQ1Niw0NCArNDMwLDYgQEAgT3B0aW9uYWw8U3RyaW5n
PiBDRE1Qcml2YXRlQ2xlYXJLZXk6OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkKQogICAgIHJldHVybiBzZXNzaW9uSWQ7CiB9CiAKLS8vIFRoaXMgaXMgZm9yIHRocmVh
ZC1zYWZldHkgZHVyaW5nIGFuIGFyY2hpdGVjdHVyYWwgc2l0dWF0aW9uIHRoYXQgaXMKLS8vIGxl
c3MgdGhhbiBpZGVhbC4gVGhlIEdTdHJlYW1lciBkZWNyeXB0b3JzIGN1cnJlbnRseSBuZWVkIHRv
IGl0ZXJhdGUKLS8vIGFsbCBrbm93biBzZXNzaW9uIGtleXMgdG8gZmluZCB0aGUga2V5IGRhdGEg
Zm9yIHByaW1pbmcKLS8vIEdDcnlwdC4gSWRlYWxseSwgYWxsIGRlY3J5cHRpb24gd291bGQgYmUg
dGhlIHJlc3BvbnNpYmlsaXR5IG9mCi0vLyBQcm94eUNETSBvYmplY3QgbGlrZSB0aGlzIG9uZS4g
V2hhdCB0aGUgYmFja2dyb3VuZCBHU3RyZWFtZXIKLS8vIHRocmVhZCB3YXMgZG9pbmcgd2FzIGdl
dHRpbmcgY29waWVzIChpLmUuIHJlZigpJ3MpIG9mIFNoYXJlZEJ1ZmZlcnMKLS8vIGNyZWF0ZWQg
b24gdGhlIG1haW4tdGhyZWFkLiBXaXRoIHRoZSBuZXcgc2FmZXR5IGFzc2VydGlvbnMgaW4KLS8v
IFdlYktpdCwgd2UgY2FuIG5vIGxvbmdlciBkbyB0aGlzLiBJbnN0ZWFkLCBjb252ZXJ0IHRoZSBy
ZWZjb3VudGVkCi0vLyBTaGFyZWRCdWZmZXJzIGludG8gU3RyaW5ncyB3aGljaCBjYW4gYmUgc2Fm
ZWx5IGNvcGllZCBhY3Jvc3MKLS8vIHRocmVhZHMuCi1zdGF0aWMgUHJveHlDRE1DbGVhcktleTo6
S2V5IGlzb2xhdGVkS2V5KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYga2V5KQotewot
ICAgIHJldHVybiB7IGtleS5zdGF0dXMsIFN0cmluZyhrZXkua2V5SUREYXRhLT5kYXRhKCksIGtl
eS5rZXlJRERhdGEtPnNpemUoKSksIFN0cmluZyhrZXkua2V5VmFsdWVEYXRhLT5kYXRhKCksIGtl
eS5rZXlWYWx1ZURhdGEtPnNpemUoKSkgfTsKLX0KLQotY29uc3QgVmVjdG9yPFByb3h5Q0RNQ2xl
YXJLZXk6OktleT4gUHJveHlDRE1DbGVhcktleTo6aXNvbGF0ZWRLZXlzKCkgY29uc3QKLXsKLSAg
ICAvLyBSZXR1cm4gdGhlIGtleXMgb2YgYWxsIHNlc3Npb25zLCBtYXkgYmUgY29waWVkIHRvIGJh
Y2tncm91bmQgdGhyZWFkcy4KLSAgICBWZWN0b3I8UHJveHlDRE1DbGVhcktleTo6S2V5PiBhbGxL
ZXlzIHsgfTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKLSAgICBz
aXplX3QgaW5pdGlhbENhcGFjaXR5ID0gMDsKLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6IENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkKLSAgICAgICAgaW5pdGlh
bENhcGFjaXR5ICs9IGtleVZlY3Rvci5zaXplKCk7Ci0gICAgYWxsS2V5cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSk7Ci0KLSAgICBmb3IgKGF1dG8mIGtleVZlY3RvciA6
IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS52YWx1ZXMoKSkgewotICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGFsbEtleXMudW5jaGVja2Vk
QXBwZW5kKGlzb2xhdGVkS2V5KGtleSkpOwotICAgIH0KLQotICAgIHJldHVybiBhbGxLZXlzOwot
fQotCi1DRE1JbnN0YW5jZUNsZWFyS2V5OjpDRE1JbnN0YW5jZUNsZWFyS2V5KCkKLSAgICA6IG1f
cHJveHlDRE0oYWRvcHRSZWYoKm5ldyBQcm94eUNETUNsZWFyS2V5KCkpKQotewotfQotCiBDRE1J
bnN0YW5jZUNsZWFyS2V5Ojp+Q0RNSW5zdGFuY2VDbGVhcktleSgpID0gZGVmYXVsdDsKIAogQ0RN
SW5zdGFuY2U6OlN1Y2Nlc3NWYWx1ZSBDRE1JbnN0YW5jZUNsZWFyS2V5Ojppbml0aWFsaXplV2l0
aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpCkBAIC01MzUs
MzYgKzQ3MSw5IEBAIGNvbnN0IFN0cmluZyYgQ0RNSW5zdGFuY2VDbGVhcktleTo6a2V5U3lzdGVt
KCkgY29uc3QKIAogUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktl
eTo6Y3JlYXRlU2Vzc2lvbigpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleSgpKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eTo6a2V5SURBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBr
ZXlJRERhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbIiwga2V5VmFsdWVEYXRhLT50b0hleFN0cmluZygpLCAiXSIpOwotfQotCi1ib29s
IG9wZXJhdG9yPT0oY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsK
LSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIHJldHVybiAqazEua2V5SUREYXRhID09
ICprMi5rZXlJRERhdGE7Ci19Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xl
YXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17Ci0g
ICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0KLSAg
ICBpZiAoazEua2V5SUREYXRhLT5zaXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBrMS5rZXlJRERhdGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOwot
Ci0gICAgcmV0dXJuIG1lbWNtcChrMS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5k
YXRhKCksIGsxLmtleUlERGF0YS0+c2l6ZSgpKTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNz
aW9uPiBuZXdTZXNzaW9uID0gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
KCp0aGlzKSk7CisgICAgdHJhY2tTZXNzaW9uKG5ld1Nlc3Npb24pOworICAgIHJldHVybiBuZXdT
ZXNzaW9uOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hh
cmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTU3
Miw2ICs0ODEsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGlj
ZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgIHN0YXRpYyB1aW50MzJf
dCBzX3Nlc3Npb25JZFZhbHVlID0gMDsKICAgICArK3Nfc2Vzc2lvbklkVmFsdWU7CiAKKyAgICBt
X3Nlc3Npb25JRCA9IFN0cmluZzo6bnVtYmVyKHNfc2Vzc2lvbklkVmFsdWUpOworCiAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGluaXREYXRhVHlwZSwgImNlbmMiKSkKICAg
ICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKQEAgLTU3OSwxOCArNDkwLDE2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAg
ICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleUlkRnJvbVdlYk1Jbml0RGF0YShpbml0RGF0YS5n
ZXQoKSk7CiAKICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICBbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0g
V1RGTW92ZShpbml0RGF0YSksIHNlc3Npb25JZFZhbHVlID0gc19zZXNzaW9uSWRWYWx1ZV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEpLCBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSWRWYWx1ZSksIGZhbHNlLCBTdWNjZWVkZWQpOworICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIG1fc2Vzc2lvbklELCBmYWxzZSwgU3VjY2Vl
ZGVkKTsKICAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBjb25z
dCBTaGFyZWRCdWZmZXImIHJlc3BvbnNlLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2Fs
bGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nCi0gICAgLy8gZHVwbGljYXRlZCBjYWxsT25NYWluVGhy
ZWFkKCkgY2FsbHMuCiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMs
ICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0
b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQsNTIgKzUxMywyMyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVj
dChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwg
c2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNl
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2Ug
Zm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBj
dXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tl
eVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGlj
ZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0
b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJl
ZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9u
KCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wg
a2V5c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRl
Y29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNv
ZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFz
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3Rk
OjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAg
ICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250
YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBk
ZWNvZGVkS2V5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhN
YXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBr
ZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZh
bHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0g
ICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2Rl
ZEtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAg
a2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBr
ZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9v
bCBrZXlzQ2hhbmdlZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykp
OwogCi0gICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlk
ZWQgJXp1IGtleXMiLCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Np
b25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0
aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFu
Z2VkKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6
OnNvcnQoa2V5VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAg
IEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNW
ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1
c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlT
dGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNo
YW5nZWRLZXlzID0gV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lv
bklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtl
eXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3Jl
LmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNw
YXRjaENhbGxiYWNrKGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpT
dWNjZWVkZWQpOwpAQCAtNjU3LDQ3ICs1MzcsMjcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQK
ICAgICB9CiAKICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1h
dCgqcm9vdCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3Jt
YXRpb24gYW5kIHVzZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQu
Ci0gICAgICAgIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lv
bklkKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxl
YXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20o
bV9rZXlTdG9yZSk7CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAg
ICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNj
ZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5v
IGZvcm1hdCB3YXMgcmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBz
ZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vz
c2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6
bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNz
aW9uSWQsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsK
LSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sg
ZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgot
ICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9w
dGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNj
ZXNzLCBTZXNzaW9uTG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoCi0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3Zl
KGV4aXN0aW5nS2V5cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlz
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5
U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIGFsbCB0aGUga25vd24ga2V5cyBmb3Ig
dGhpcyBzZXNzaW9uLgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAg
ewotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygp
OwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChp
dCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKFdURjo6bnVs
bG9wdCwgRmFpbGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGEpOworICAgIEFT
U0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlT
dGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksICZrZXlTdGF0dXNWZWN0b3JdKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAot
ICAgICAgICBhdXRvJiBrZXlWZWN0b3IgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGtleVN0YXR1c1Zl
Y3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51
bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsg
KmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0gICAgfQotCi0gICAgZGlzcGF0Y2hDYWxs
YmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWls
dXJlOjpOb25lKTsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6
Ok5vbmUpOworICAgIH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpj
bG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFj
aykKQEAgLTcxMyw3ICs1NzMsOCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpj
bG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwogCiB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcm
IHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUg
Y2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgp
IGNhbGxzLgorICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOworCiAgICAgYXV0
byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10oS2V5U3RhdHVz
VmVjdG9yJiYga2V5U3RhdHVzVmVjdG9yLCBPcHRpb25hbDxSZWY8U2hhcmVkQnVmZmVyPj4mJiBt
ZXNzYWdlLCBTdWNjZXNzVmFsdWUgc3VjY2VzcykgewogICAgICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZCgKQEAgLTcyNywzNSArNTg4LDE3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAKICAg
ICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2VudGluZyBy
ZWxlYXNlZCBrZXlzLCBhbmQgdGhlIG1lc3NhZ2UgaW4gdGhlCiAgICAgLy8gJ2xpY2Vuc2UgcmVs
ZWFzZScgZm9ybWF0LgotICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAg
S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuYWxsS2V5c0FzUmVs
ZWFzZWQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtZXNzYWdlOwogICAgIHsKLSAgICAg
ICAgLy8gUmV0cmlldmUgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBzZXNzaW9uIElELCBiYWls
aW5nIGlmIG5vbmUgaXMgZm91bmQuCi0gICAgICAgIGF1dG8mIGtleXMgPSBDbGVhcktleVN0YXRl
OjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlzLmZpbmQoc2Vzc2lv
bklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGRpc3Bh
dGNoQ2FsbGJhY2soS2V5U3RhdHVzVmVjdG9yIHsgfSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFs
dWU6OkZhaWxlZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBSZXRyaWV2ZSB0aGUgS2V5IHZlY3RvciwgY29udGFpbmluZyBhbGwgdGhlIGtleXMgZm9yIHRo
aXMgc2Vzc2lvbiwgYW5kCi0gICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSBrZXkgbWFwIGVudHJ5
IGZvciB0aGlzIHNlc3Npb24uCi0gICAgICAgIGF1dG8ga2V5VmVjdG9yID0gV1RGTW92ZShpdC0+
dmFsdWUpOwotICAgICAgICBrZXlzLnJlbW92ZShpdCk7Ci0KLSAgICAgICAgLy8gQ29uc3RydWN0
IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCBwYWlyaW5nIGtleSBJRHMgd2l0aCB0aGUgJ3Jl
bGVhc2VkJyBzdGF0dXMuCi0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZl
Y3RvcikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpw
YWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIEtleVN0
YXR1czo6UmVsZWFzZWQgfSk7Ci0KICAgICAgICAgLy8gQ29uc3RydWN0IEpTT04gdGhhdCByZXBy
ZXNlbnRzIHRoZSAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQsIGNyZWF0aW5nIGEgJ2tpZHMnIGFy
cmF5CiAgICAgICAgIC8vIG9mIGJhc2U2NFVSTC1lbmNvZGVkIGtleSBJRHMgZm9yIGFsbCBrZXlz
IHRoYXQgd2VyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzZXNzaW9uLgogICAgICAgICBhdXRvIHJv
b3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICB7CiAgICAgICAgICAg
ICBhdXRvIGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LmtleUlE
RGF0YS0+c2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Ci0g
ICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUoa2V5
LmtleUlERGF0YS0+ZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5LmtleUlERGF0YS0+
c2l6ZSgpKSkpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBtX2tleVN0b3Jl
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGtleS0+aWQoKS5zaXplKCkgPD0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBhcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXktPmlkKCkuZGF0YSgpLCBrZXktPmlkKCku
c2l6ZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByb290T2JqZWN0LT5zZXRBcnJh
eSgia2lkcyIsIFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgfQpAQCAtNzY2LDYgKzYwOSw3IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0
IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlCiAgICAgICAgIG1lc3NhZ2UgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShtZXNzYWdlQ1N0cmluZy5kYXRhKCksIG1lc3NhZ2VDU3RyaW5nLmxlbmd0aCgpKTsK
ICAgICB9CiAKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICBkaXNwYXRjaENh
bGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgUmVmPFNoYXJlZEJ1ZmZlcj4oKm1lc3Nh
Z2UpLCBTdWNjZXNzVmFsdWU6OlN1Y2NlZWRlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5oCmluZGV4IDg1YjMxOWIxYTM4YzEyMTY5OTE5NzViODAxOWFkMmIxNmIzNmMxNDcuLjU0Y2M1
Yjc5NWRjOGU1YmI2N2NiYWQ3MjNjNGM1NjQ5NzkwY2ZkMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuaApAQCAtMzEsMTQgKzMxLDMwIEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
IAogI2luY2x1ZGUgIkNETUZhY3RvcnkuaCIKLSNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgogI2lu
Y2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNETVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUg
PGdjcnlwdC5oPgorI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgQ2xlYXJLZXkgeworCisvLyBDbGVhcktl
eSBDRU5DIFN5c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1j
ZW5jLyNjb21tb24tc3lzdGVtCitjb25zdCB1aW50OF90IGNlbmNTeXN0ZW1JZFtdID0geyAweDEw
LCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAw
eDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjZW5j
U3lzdGVtSWRTaXplID0gc2l6ZW9mKGNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhD
VFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgS2V5SURTaXplSW5CeXRlcyA9IDE2LAorICAg
IElWU2l6ZUluQnl0ZXMgPSAxNiwKK307CisKK30gLy8gbmFtZXNwYWNlIENsZWFyS2V5CisKIGNs
YXNzIENETUZhY3RvcnlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc3LDI3ICs5MywxMiBAQCBwdWJs
aWM6CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcm
KSBjb25zdCBmaW5hbDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJs
aWMgUHJveHlDRE0geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBD
RE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktl
eT4gewogcHVibGljOgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAg
IFN0cmluZyBrZXlWYWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xl
YXJLZXkoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkg
Y29uc3Q7Ci1wcml2YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNs
YXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7Ci1wdWJsaWM6Ci0gICAgQ0RN
SW5zdGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsK
IAorICAgIC8vIENETUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0
aW9uVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJL
ZXk7IH0KLQogICAgIFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29u
c3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBz
ZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNz
VmFsdWUgc2V0UGVyc2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0NyAr
MTA2LDIyIEBAIHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0
IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBm
aW5hbDsKLQotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsK
LSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAgIFN0
cmluZyBrZXlJREFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3Ry
aW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZv
dGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0gICAg
ICAgICAgICBBU1NFUlQob3RoZXIua2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiAq
a2V5VmFsdWVEYXRhID09ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmlu
ZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVy
ZWQgYnkgdGhlaXIgSURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAgICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0K
LSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkg
JmsyKSB7IHJldHVybiAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVy
YXRvcj09KGsxLCBrMikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9w
ZXJhdG9yPihrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3Qg
S2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0g
ICAgfTsKLQotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3Byb3h5Q0RNOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBtX3By
b3h5Q0RNOwogfTsKIAogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwgOiBw
dWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVh
cktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJbnN0
YW5jZShwYXJlbnQpIHsgfQogICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNv
bnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0
YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25z
dCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVwZGF0
ZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7
CiAgICAgdm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJh
Y2smJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBM
aWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lk
IHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6Cisg
ICAgU3RyaW5nIG1fc2Vzc2lvbklEOworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFyZW50
SW5zdGFuY2U7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0
YzQ2ZmI0ZjEwMjk5NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5
OTRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6
CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+
JiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpIGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Np
b24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25z
dCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCBhMTJlZjRmNmRiYTZmMDE1ZTc2MTUxZjE0N2NjNmMwNzllNjJkYTdlLi41NDVh
Y2M3NWMwMTdkYjlkMmE3NDhjOTlkNDRiMWE2MzIwZTdhM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNjUsNiArNjUsNyBAQAogCiAj
aWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCkBAIC0xNzg4LDYgKzE3ODksNTAgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBp
cGVsaW5lKQogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0
TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IEluaXREYXRhIGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJv
dGVjdGlvbk11dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9u
U3lzdGVtRXZlbnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5l
KCksICJmb3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJs
ZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lz
dGVtRXZlbnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0
byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdz
dEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJv
dGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsK
KworICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7
CisgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VR
TlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5pdERh
dGE7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0
YWNobWVudCgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1QocGlwZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0aW5n
IGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RNQXR0
YWNoID0gZmFsc2U7CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBo
b2xkTG9jayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9IG1f
Y2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3Ms
IFt0aGlzXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAgICAg
IH0pOworICAgIH0KKworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNz
YWdlKQogewogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdF
X1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0MSAr
MTg2OCw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
ICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlv
bi1zeXN0ZW0taWQiKSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAg
ICAgIEdTVF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0
ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBk
cm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7
Ci0KLSAgICAgICAgSW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9u
U3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAg
ICBHU1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMg
YXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3Rl
Y3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAg
ICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lz
dGVtSWQsICZkYXRhLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVu
ZCh7ZXZlbnRLZXlTeXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFBy
b3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJl
ZChXVEZNb3ZlKGluaXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5l
KCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlkQ0RN
QXR0YWNoID0gZmFsc2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNobWVu
dExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAgIGRp
ZENETUF0dGFjaCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNo
bWVudE11dGV4LCA0X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNDRE1B
dHRhY2hlZCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlk
Q0RNQXR0YWNoICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5r
ZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3Vu
dGVyZWQocGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7CisgICAg
ICAgIGJvb2wgaXNDRE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAgICAg
IGlmIChpc0NETUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUlu
c3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3Rl
bVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51
aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgp
LnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19O
QU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg2NSwxMCArMTg3OCwxMSBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkK
ICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0
X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQ
RV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3Nh
Z2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dB
Uk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9X
QVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBubyBD
RE0gYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYgLy8g
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMiw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCiAgICAgICAgICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAg
ICAgIGdzdF9tcGVndHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2VuZGlm
Ci0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVj
dHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1rZXkg
bWVzc2FnZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgICAg
ICAgICAgc2V0V2FpdGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
ZGVjcnlwdG9ycyBzaG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIgYmVp
bmcgY3JlYXRlZCBhbmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5IGFy
ZSBub3QgYW5kIGN1cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBt
YWtlIHRoaXMgdmVyeSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ugc29v
biBhbmQgaXQgZG9lcyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhpbmcg
dGhhdCBjb3VsZCBiZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUgbWVh
bnRpbWUsIGZvcmNlIGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQuCi0g
ICAgICAgICAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAgICAg
fSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktcmVj
ZWl2ZWQiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJt
LWtleS1yZWNlaXZlZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNz
YWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAgfQog
I2VuZGlmCiAgICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJl
LCAiaHR0cC1oZWFkZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlByb2Nlc3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0
dXJlKTsKQEAgLTM3MjgsMTQgKzM3MjksMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKKyAgICBt
X2NkbUluc3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3Rh
bmNlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3Rh
bmNlLT5zZXRQbGF5ZXIobV9wbGF5ZXIpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFByb3h5KGFk
b3B0UmVmKCpuZXcgQ0RNUHJveHlDbGVhcktleSkpOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIs
IEZBTFNFKSk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0dXJl
KiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRl
eHQuZ2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0t
aW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQo
KSwgbnVsbHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNk
bS1wcm94eSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgpLCBu
dWxscHRyKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVs
aW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0
IiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMg
Y29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBhbGwg
d2FpdGVycywgc2luY2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgd2Fp
dGluZyBmb3IgYSBDRE0uCkBAIC0zNzU3LDcgKzM3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2Up
CiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBp
bnN0YW5jZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7
CiAgICAgbV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwg
RkFMU0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0
X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVudF9z
ZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7
CiB9CiAKQEAgLTM3OTAsNTEgKzM3OTQsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXko
Ym9vbCBpc1dhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRp
ZCBub3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBi
dXQgdGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoImlz
V2FpdGluZ0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmco
aXNXYWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0g
ICAgaWYgKGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2FpdGlu
Z0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndh
aXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9y
S2V5KSk7Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fcGlwZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3RhbmNl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsK
LQotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkg
PSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0
cnVjdHVyZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAg
ICBpZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3Rf
ZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdT
VF9UUkFDRSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQp
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3Rh
dGUgPj0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0
aGUgcGlwZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5l
IGlzIHNldCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBh
bmQgYXNrIHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0
ZXJhdG9yPiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxp
bmUuZ2V0KCkpKSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0Owot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9m
b2xkKGl0ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9p
bnRlciBkYXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxl
bWVudCA9IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAg
ICAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAg
IHJldHVybiAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2Vs
ZW1lbnRfcXVlcnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVl
cnkuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRP
Ul9SRVNZTkMpCi0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5n
ZXQoKSk7Ci0gICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9S
RVNZTkMpOwotICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9S
KQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7
Ci0gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAg
ICAgICAgR1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRv
clJlc3VsdCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApp
bmRleCBiMmJiNTQxYTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li41MjFiMjBkMTFj
YzhkZDk0YmUyODRkNzQ2OTljZDI3MTdiNGUwNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0cnVj
dCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIAor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNlbmRp
ZgorCiB0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5
cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1Y3Qg
X0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVjdGVk
OgogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1lbnRN
dXRleDsKICAgICBDb25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJlZlB0
cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFu
Y2VQcm94eT4gbV9jZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8v
IEd1YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0
PHVpbnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jZG1J
bnN0YW5jZTsgfQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7
CiAgICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAg
ICB2b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgSW5pdERhdGEgcGFyc2VJbml0RGF0
YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgYm9vbCB3YWl0Rm9yQ0RN
QXR0YWNobWVudCgpOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0
aW5nRG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgwNDA0NTI4N2IzOTZhODUxMjgyN2ZjOGNiYTg0N2EyNDFhNTQ0MmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVBy
b3h5Q2xlYXJLZXkuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICog
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDRE1Qcm94eUNsZWFyS2V5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCBy
ZWFkVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVf
dCYgb2Zmc2V0LCB1aW50MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQsIG9m
ZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNpemVv
Zih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaGwoKnJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7Cisg
ICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkco
b2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZz
ZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9
IG50b2hzKCpyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9m
ZnNldCkpOworICAgIG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNs
ZWFyS2V5KCkKK3sKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOworfQorCiti
b29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNy
eXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdWludDhfdCBjdHJbQ2xlYXJLZXk6OkFFUzEyOENU
UkJsb2NrU2l6ZUluQnl0ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09IDgpIHsK
KyAgICAgICAgLy8gSVNPL0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKKworICAgICAgICAv
LyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBsZWFzdCBzaWduaWZpY2FudCA4
CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElWIChieXRlcyA4IHRvIDE1KSBTSEFM
TCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAs
IDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcyk7CisKKyAg
ICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1fZ2Ny
eUhhbmRsZSwgY3RyLCBDbGVhcktleTo6SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAl
cyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2Vu
Y1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAv
LyBGSVhNRTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3RpbGwg
ZXhwb3NpbmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0IEFQ
ST8gVGhlc2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3QgYSBo
dWdlIGRlYWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAgIGtl
eUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBhdXRv
IGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0YSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdj
cnlfY2lwaGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+
c2l6ZSgpKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVS
Uk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBD
RE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0
JiBpbikKK3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0g
ZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRl
ZEJ1ZmZlclNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3Ig
PSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBp
bi5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMi
LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNE
ZWNyeXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVuc2ln
bmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVC
dWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7Cisg
ICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZm
ZXJTaXplSW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVz
ID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAwOwor
CisgICAgICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsKKyAg
ICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5z
dWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1
YnNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0ZXMg
aW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVhZFVJ
bnQzMihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUlu
Qnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5
dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5
IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1wbGUg
YXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAg
ICAgICAgICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRCdWZm
ZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBub3Qg
c3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAgICAg
IExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAoJWx1
IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtQ2xl
YXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZm
ZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1
YnNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5cHRl
ZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1
IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNh
bXBsZUluZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVm
ZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICAg
ICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9n
Y3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zm
c2V0LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAgICAg
ICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2Rl
Y3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVkQnVm
ZmVyQnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNl
bmNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7
CisgICAgaWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNyeXB0
aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0
LmlzU3Vic2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNEZWNy
eXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5pdGlh
bGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVy
X29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RF
X0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJlcnJv
cihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5vdCBn
ZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvQ0RNUHJveHlDbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVjZjBjOTM0Njlh
OTEzOWI3ZmIwMTBjNTNiZjA1NjgzNmY1YzY5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5o
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNSW5z
dGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0
aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0byBtYWtl
IHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlDbGVhcktl
eSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENETVByb3h5
Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6
CisgICAgQ0RNUHJveHlDbGVhcktleSgpCisgICAgeworICAgICAgICBpbml0aWFsaXplR2NyeXB0
KCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXkoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJlZEJ1ZmZlcnMs
CisgICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXplX3R9IGlkaW9tcyBmb3Ig
cmVwcmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4IHRoYXQgc29tZWhvdy4g
Tm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAgICAvLyB0aGV5J3JlIG5v
dCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWluCisgICAgLy8gdGhyZWFk
LXNhZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291bGQgYmUKKyAg
ICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJzIGZvciBkcm9w
cGluZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3YXJlIGNvbnRh
aW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsKKyAgICAgICAgLy8gRklY
TUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGllZCB0eXBlcy4KKyAgICAg
ICAgY29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBrZXlJRFNpemVJbkJ5dGVz
OworCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBzaXplX3QgaXZTaXplSW5C
eXRlczsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAgICAgIHNpemVf
dCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAvLyBGSVhNRTogR1N0cmVh
bWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGdldCBy
aWQgb2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQgYmVmb3JlCisg
ICAgICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVjdG9yPHNpemVf
dD4gdGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9kZWNyeXB0ZWQvY2xlYXIv
ZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6
ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVhci9kZWNyeXB0
ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAgICAgLy8gYmVjb21lIGEg
c3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1wbGUuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MzAKKyAg
ICAgICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1
YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7
CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1TdWJzYW1w
bGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBsYWNlIGRl
Y3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lm
aWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0YSBpcyBk
ZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0LgorICAgIGJv
b2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1
cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJl
bHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UKKyAgICAv
LyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAgYm9vbCBjZW5jU2V0Q291
bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNlbmNTZXRE
ZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0Rl
Y3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5
cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBXZWJDb3JlIGZvciBjcnlwdG8uLi4KKyAg
ICBnY3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFy
S2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmlu
ZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLjU4M2YyNjE4NmFk
ZjhiNzg3YmI5MzM2Nzk3MTZiMDQ4M2YxZDJmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKIAog
I2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNUHJveHlDbGVhcktleS5oIgog
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgPGdjcnlwdC5oPgpAQCAtMzcsMTIgKzM4LDExIEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9Q
UklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZ
UEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSkK
IHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKLSAgICBSZWZQdHI8
UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0gICAgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7
CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+IGNkbVByb3h5OwogfTsKIAogc3RhdGljIHZv
aWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2UoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RNPik7
CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4pOwogc3RhdGljIGJvb2wgZGVjcnlwdChX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVm
ZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwg
R3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJr
aXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwpAQCAtODQsNyArODQs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5p
dChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
X0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJl
YW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVVSUQ7Ci0gICAgY2VuY0NsYXNzLT5oYW5kbGVL
ZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhhbmRsZUtleVJlc3BvbnNlKTsKKyAgICBj
ZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0
dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BUUihkZWNy
eXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpAQCAtOTMsNjEgKzkzLDMyIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVD
UllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAgIHNlbGYtPnByaXYgPSBwcml2OwogICAgIG5l
dyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Ci0gICAgaWYgKGdj
cnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5kbGUpLCBHQ1JZ
X0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUp
KSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVT
IDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAg
ICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQqIHNlbGYgPSBX
RUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOwogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgZ2NyeV9jaXBoZXJfY2xvc2Uo
cHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAo
b2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0p
CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHkpCiB7CiAgICAgV2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZ
UFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIHByaXYt
PnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETUNsZWFyS2V5Kj4ocHJveHlDRE0u
Z2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBwcml2LT5jZG1Qcm94eSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KGNkbVByb3h5LmdldCgpKTsKKyAg
ICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRBbmRTZXRLZXko
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBTdHJpbmcmJiBr
ZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwg
R3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1
YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtleVZhbHVlOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+aXNvbGF0ZWRLZXlzKCkpIHsKLSAgICAgICAg
aWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAgICAgICAgICAgIGtleVZhbHVlID0ga2V5
LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBy
aXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRpb24ga2V5Iik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSA9PSBDTEVB
UktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0
a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hhcmFjdGVyczgoKSwga2V5VmFsdWUuc2l6ZUlu
Qnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZ2NyeV9jaXBoZXJf
c2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQorICAgIFdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9Q
UklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKIAotc3RhdGljIGJvb2wgZGVj
cnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIq
IGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5z
aWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcikKLXsKLSAg
ICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIm5vIElW
IGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8ICFidWZmZXIp
IHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNyeXB0KCkgcGFy
YW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1NywyNyArMTI4
LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOwotICAgIGlmIChtYXBwZWRJVkJ1
ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOwotICAg
ICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSBDTEVBUktFWV9TSVpF
KTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlf
U0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NL
X0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGNp
cGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVy
X3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIgdG8gZGVjcnlwdCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBtYXBwZWRLZXlJZEJ1ZmZlciA9IFdlYkNvcmU6
OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAg
IGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7CkBAIC0xOTAsNzIgKzE0MCwyOSBAQCBz
dGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmcobWFwcGVkS2V5SWRCdWZmZXItPmRhdGEoKSwg
bWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAw
OwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKLQotICAgIGlmICghc3ViU2FtcGxlQ291
bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBi
eXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUg
YnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVyLT5zaXplKCkpIHsKLSAg
ICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUs
IG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUoKSwgMCwgMCk7Ci0gICAg
ICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBncGdfc3RyZXJy
b3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
Q2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBudWxsLgotICAgIGlmICghc3ViU2FtcGxlc0J1
ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJFcnJvciwgdGhlIHN1YlNh
bXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICBhdXRvIG1hcHBlZFN1YlNhbXBsZXNCdWZm
ZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBH
U1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdVbmlxdWVQdHI8R3N0Qnl0
ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3ViU2FtcGxlc0J1ZmZl
ci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCkpKTsKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIsIHBvc2l0aW9uLCBtYXBw
ZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXIt
PnNpemUoKSkgewotICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgZ3Vp
bnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAgICAgIGlmIChzYW1wbGVJbmRleCA8IHN1
YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWlu
dDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0NsZWFyKQotICAgICAgICAgICAgICAgIHx8ICFn
c3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNFbmNyeXB0
ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAidW5zdXBwb3J0
ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbkJ5
dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwcGVkQnVmZmVy
LT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAodG9kbz0lenUp
Iiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0
aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7Ci0gICAgICAgIGlmIChuQnl0
ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNh
bXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwgc2FtcGxlSW5k
ZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7Ci0g
ICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxl
LCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDAp
OwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNyeXB0aW9uIGZhaWxlZDog
JXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zaXRpb24g
Kz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZFN1
YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0
IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9IG1hcHBlZEtleUlkQnVmZmVyLT5kYXRhKCk7
CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVzID0gbWFwcGVkS2V5SWRCdWZmZXItPnNpemUo
KTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0
Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuZW5j
cnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5lbmNyeXB0
ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQu
bnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGlmICghc3Vic2FtcGxlQ291bnQp
CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVmZmVyKTsKKyAgICAgICAgbWFwcGVkU3Vic2Ft
cGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YnNhbXBsZXNC
dWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGlmICghbWFwcGVkU3Vic2FtcGxlc0J1ZmZl
cikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBz
dWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
KyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZl
ci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcyA9
IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNlbmNEZWNyeXB0KGNvbnRleHQpOwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRp
b25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2ODNkMDQ3NDg2MGY2ZWY4MTdmMzFjZGMx
NWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJhMTYyNDRjMDc5ODAzNzQ3YzMwNDEyNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25F
bmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMjUsMzQgKzI1LDM0IEBACiAKICNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSAi
Q0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3Ry
ZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6UHJveHlDRE07Cit1c2luZyBXZWJDb3Jl
OjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklW
QVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVf
TUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJp
dmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
IHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7Ci0gICAgUmVmUHRyPFBy
b3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtleVJlY2VpdmVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotICAgIExvY2sgbXV0ZXg7Ci0gICAgQ29uZGl0
aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJveHk+IGNkbVByb3h5OworCisgICAgTG9j
ayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29uZGl0aW9uIGNkbUF0dGFjaG1lbnRDb25kaXRp
b247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4U2Vjb25kc1RvV2FpdEZvckNE
TVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUo
R3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwogc3RhdGljIHZvaWQgZmlu
YWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENhcHMqIHRyYW5zZm9ybUNhcHMoR3N0QmFzZVRy
YW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsKIHN0YXRpYyBH
c3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSosIEdzdEJ1ZmZl
ciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSos
IEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zv
cm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7Ci1zdGF0aWMgYm9vbCBpc0NETUluc3Rh
bmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRp
YyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQqKTsKIAotCiBHU1RfREVC
VUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0
X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CiAKQEAgLTc2LDcgKzc2LDYg
QEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xh
c3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5z
Zm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJhbnNmb3JtQ2Fwcyk7CiAgICAgYmFzZVRy
YW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBGQUxTRTsKICAgICBi
YXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUihzaW5rRXZl
bnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZV
TkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFz
cywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKSk7CiB9
CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBs
YWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogewogICAgIFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxm
KTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CiAKLSAgICAvLyBUaGUga2V5
IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KLSAgICBpZiAo
IXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtl
eSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKLSAgICAgICAgaWYgKEdTVF9T
VEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChHU1RfU1RBVEVf
VEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICYmIEdT
VF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsK
LSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nlc3Mga2V5IHJl
cXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlbmQgImRybS1j
ZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRoZSBwbGF5ZXIgdG8gcmVzZW5kIHRoZSBD
RE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGluZm9ybSB3ZSBhcmUgd2FpdGluZyBmb3Iga2V5
LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gdHJ1ZTsKLSAgICAgICAgZ3N0X2VsZW1l
bnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVu
dChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLXdhaXRpbmct
Zm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNobWVudE11
dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihwcml2LT5tdXRleCwgU2Vj
b25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAgIHJldHVybiBwcml2LT5rZXlSZWNlaXZlZDsK
KyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdl
IGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdCBhdmFpbGFibGUsIGdvaW5nIHRvIHdh
aXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ud2FpdEZv
cihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1heFNlY29uZHNUb1dhaXRGb3JDRE1Qcm94eSwg
W3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKICAgICAgICAgfSk7
Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIGlmICghcHJpdi0+
Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5
IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxP
V19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2Vs
ZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIpOwotICAgICAgICBwcml2LT53YWl0aW5nRm9y
S2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVO
VChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0
cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVjZWl2ZWQiKSkpOworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFkZHJlc3MgJXAiLCBwcml2
LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAgICAgR3N0UHJvdGVjdGlvbk1ldGEqIHByb3Rl
Y3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9uTWV0YSo+KGdzdF9idWZm
ZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsKQEAgLTIwNywzMiArMTk3LDMwIEBAIHN0
YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFz
ZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZh
aWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZl
cik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KKyAgICBh
dXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFtidWZmZXIs
IHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVy
LCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIH0pOwog
CiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChw
cm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUiLCAmaXZTaXplKSkgewogICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKLSAgICAgICAgZ3N0
X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHBy
b3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwog
ICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRlZDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVf
Z2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVk
KSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5
cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBpZiAoIWl2U2l6ZSB8fCAhZW5j
cnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVy
cHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIGlmICghaXZTaXplIHx8
ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9CiAKICAgICBH
U1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0aW9uIG1ldGE6ICUiIEdTVF9QVFJfRk9STUFU
LCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudDsK
ICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmluZm8sICJz
dWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50Iik7Ci0gICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
ICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5z
Zm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAg
ICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlcyIpOwotICAgICAg
ICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9U
X1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBzdWJTYW1wbGVzQnVmZmVyID0gZ3N0X3Zh
bHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAgICBpZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsK
KyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIlRoZXJlIGlzIG5vIHN1YnNhbXBs
ZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1wbGUgY291bnQiKTsKKyAgICAgICAgICAg
IHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9CiAgICAgfQogCiAgICAg
dmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgImtp
ZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVyIik7Ci0gICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAg
ICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsK
QEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNl
KEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIHZhbHVlID0g
Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIpOwogICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVm
ZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI3MCw3MSArMjU5
LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5z
Zm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxm
LCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xhc3MtPmRlY3J5cHQoc2VsZiwgaXZCdWZmZXIs
IGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVmZmVyKSkg
ewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZhaWxlZCIpOwot
ICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgcmV0dXJuIEdT
VF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCitzdGF0aWMgYm9vbCBpc0NETVBy
b3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCiB7
CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICByZXR1cm4gcHJp
di0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQocHJpdi0+bXV0ZXguaXNMb2NrZWQoKSk7Ci0K
LSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChz
ZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0gICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUg
R1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdl
IHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQg
dGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1lc3NhZ2UuIEluIHRoaXMgY2FzZSB0aGF0IGRv
ZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ugb25seSB0aGUgYXBwIChwbGF5ZXIpIGFu
c3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVyeSBpcyBnb2luZyB0byBzb2x2ZSBpdC4gQSBt
ZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0
aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFuZCBpZiBpdCBk
b2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBp
cwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBU
aGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0
IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwot
ICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhlcmUuCi0gICAgICAgIGlmIChjb250ZXh0
KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRf
dmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1pbnN0
YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0
X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwot
ICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RNKQotICAgICAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVm
Y291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQoKSwgcHJpdi0+cHJveHlDRE0tPnJlZkNvdW50
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
c2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQiKTsKK3N0YXRpYyBDRE1Qcm94eSogZ2V0
Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0tcHJveHki
KSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFjY29yZGluZyB0
byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRl
eHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9u
ZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQg
ZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBsYXllcikg
YW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBB
IG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNldHMgdGhl
IGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9l
cyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMgaXQgaXMK
KyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1l
YW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFu
eSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cworICAgIC8v
IHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgeworICAgICAgICBj
b25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRf
Z2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAgICAgICBpZiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+
KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChwcm94eSkgewor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENE
TSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHktPnJlZkNvdW50
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBub3QgYXZhaWxh
YmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09CSkVDVChzZWxm
LCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2LT5wcm94
eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5z
Zm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFjaENETVByb3h5
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVByb3h5KiBwcm94
eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dF
VF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRD
bGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsK
LSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZ
UEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COiB7
Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2
ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91dC1vZi1iYW5k
IGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8gcHJlZmVycmVk
IHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCi0gICAgICAg
IC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGUgbXVz
dCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZhaWxhYmxlKHNl
bGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBDRE0gaW5zdGFu
Y2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRh
Y2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Q
cm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5OworICAgIGtsYXNz
LT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2LT5jZG1B
dHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5z
dGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikpIHsKKyAg
ICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkqIHByb3h5
ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAgICAgaWYgKHByb3h5KSB7
CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZyb20gY29udGV4dCIpOwog
ICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBpZiAoa2xhc3MtPmhh
bmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnByb3h5Q0RNKSkgewotICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkIik7Ci0gICAgICAgICAgICBwcml2LT5r
ZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25l
KCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHNp
bmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkK
K3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7
CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBp
biB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4g
cmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0gSUQgY29u
dGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgorICAgIC8vIGV2ZW50cyB3aWxsIG5v
dCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGV5IG11c3QgYmUKKyAgICAvLyBoYW5k
bGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBj
YXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgQVNTRVJUKGdz
dF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVtcHQtdG8tZGVjcnlwdCIpKTsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgYXR0ZW1wdC10by1kZWNyeXB0Iik7Cisg
ICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYpOwogICAg
ICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVFOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzU0LDYgQEAgc3Rh
dGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdz
dEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4g
cXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGly
ZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25h
bWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13YWl0aW5n
LWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUodHJh
bnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRvci13YWl0
aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRpbmcocHJp
di0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0ZvcktleTsK
LSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRfY2xhc3Mp
LT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5n
ZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYzLDcgKzM2
Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50
KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2LT5jb25k
aXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24u
bm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50
KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1l
bnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBXZWJL
aXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lUX01FRElB
X0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKLSAgICBpZiAoZ3N0X2NvbnRleHRfaGFz
X2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7Ci0gICAgICAgIGNv
bnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9n
ZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/
IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkg
OiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZlZCBuZXcg
Q0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgaWYgKGdzdF9jb250
ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0tcHJveHkiKSkgeworICAgICAg
ICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRl
eHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1wcm94eSIpOworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgICAgICBwcml2LT5jZG1Q
cm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3Bv
aW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwg
InJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKKyAg
ICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4IDA2NTFk
ZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjg1NzVhMDcxMDJiZDEzM2Y5MjVk
ZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdT
dHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBAIC0yNCw3
ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVS
KQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94eS5oPgogI2lu
Y2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3QgX1dlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFzZVRyYW5zZm9y
bUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5c3RlbUlk
OwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOwotICAgIGJvb2wgKCpkZWNy
eXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1
ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVk
IHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAgICBib29s
ICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCos
IFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOworICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVm
ZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXND
b3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CiAKIEdfRU5EX0RFQ0xTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0
NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2
ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rvcnku
Y3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6
ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRlZmF1bHQ7
Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NETT4gY2Rt
KQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigqdGhpcykp
KTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RNKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0KLQogTW9j
a0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tD
RE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShpbnN0YW5j
ZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5
LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXggZDdlNjZl
NjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFh
MGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rv
cnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFByb3h5Q0RN
TW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UHJv
eHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZhdGUsIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNjZXNzVmFs
dWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBT
dHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNl
c3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5
Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwogICAgIGJv
b2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390354</attachid>
            <date>2020-02-11 05:10:13 -0800</date>
            <delta_ts>2020-02-11 09:50:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211131011.patch</filename>
            <type>text/plain</type>
            <size>114227</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uOGZiNzI4NDRkMjIyODA1MmNhM2VlMmZhMjhjNDlh
OTE0ZDkwNjI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW50cm9kdWNlIGEgbmV3IHN1YmNsYXNzIG9mIENETUluc3RhbmNlLCBD
RE1Qcm94eUluc3RhbmNlLgorCisgICAgICAgIENETUluc3RhbmNlIGlzIGEgbWFpbi10aHJlYWQg
b25seSBjbGFzcywgaXRzIHB1cnBvc2UgaXMgdG8gcHJvdmlkZQorICAgICAgICBhbiBpbnRlcmZh
Y2UgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIEphdmFTY3JpcHQgRU1FIEFQSXMsIHdoaWNoIGJ5Cisg
ICAgICAgIGRlc2lnbiwgZG9uJ3QgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aCBhIHJlYWwgRFJNIHN5
c3RlbSwgd2hhdCBtaWdodAorICAgICAgICBhbHNvIGJlIGNhbGxlZCAiVGhlIENETSBJbnN0YW5j
ZSIuIFRoYXQncyB3aHkgdGhlIG5hbWluZyBpcworICAgICAgICBtaXNsZWFkaW5nIGhlcmUsIENE
TUluc3RhbmNlIGlzbid0IGFjdHVhbGx5IGFuIGluc3RhbmNlIG9mIGEgcmVhbAorICAgICAgICBD
RE0sIHJhdGhlciBpdCBpcyBhIGZhY2FkZSBmb3IgSmF2YVNjcmlwdC4KKworICAgICAgICBDRE1Q
cm94eUluc3RhbmNlIGlzIGEgc3ViLWNsYXNzIHdoaWNoIHByb3ZpZGVzIHR3byBBUElzLAorICAg
ICAgICAxLyBGb3IgYmFja2dyb3VuZCBtZWRpYSB0aHJlYWRzIHRvIHNhZmVseSBpbnRlcnJvZ2F0
ZSB0aGUgc3RhdHVzCisgICAgICAgIG9mIGtleXMgYW5kIHRvIHBlcmZvcm0gZGVjcnlwdGlvbiB1
c2luZyBzYWlkIGtleXMuIFRoaXMgQVBJIGlzCisgICAgICAgIGV4cG9zZWQgYnkgQ0RNUHJveHkg
YW5kIGlzIHBsYXRmb3JtIHNwZWNpZmljLgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0
byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0
IHRoZWlyIHN0YXR1cyBpcy4KKworICAgICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhy
ZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVhbCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIg
cXVpcmtzLiBUaGUgdHdvIG1haW4gcHJvYmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisg
ICAgICAgIGhhdmUgaW4gV2ViS2l0IGlzIGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZy
b20gYmFja2dyb3VuZAorICAgICAgICBtZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5h
Z2VtZW50IGlzIGhvdyB0byBtYW5hZ2UgdGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAg
ICAgY29oZXJlbnQgd2l0aCBKYXZhU2NyaXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxl
bWVudGF0aW9uLAorICAgICAgICB0aGUgcmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFj
a2dyb3VuZCBtZWRpYQorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1
bHQga2V5IHN0b3JlIGludGVyZmFjZSBmb3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFz
c2VzIGNhbiwgb24gcmVjZWlwdCBvZiBuZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJl
YWwgQ0RNLCB0ZWxsIENETVByb3h5IGFib3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBz
dGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20g
dGhlcmUsCisgICAgICAgIGxldHRpbmcgSmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0
aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8KKyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMg
d2VsbCBhcyB0aGUgbWVkaWEgZGVjb2RlIHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQg
Y29tZSBhc2tpbmcuCisKKyAgICAgICAgQWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlz
IGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcgdGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5z
dGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRo
aXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAg
ICAgIHRocmVhZC11bnNhZmUgYWNjZXNzIG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdl
IGhhZCB0byBkbworICAgICAgICBzb21ldGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNv
bWV0aGluZyB3YXMgUHJveHlDRE0gKGEKKyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBu
b3cpLCB3aGljaCB3YXMgYSBoYWNrIGFuZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0
LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFu
ZAorICAgICAgICBpdCB3aWxsIGJ5IGRlZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcg
b2YgdGhlIGtleSBzdG9yZSBmb3IKKyAgICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVy
cm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5kIHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRl
Y3J5cHRpb24gLyBkZWNvZGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIENETVBy
b3h5IHRvIGJ1aWxkCisgICAgICAgIGRlZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5
Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEgdGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29t
ZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2VydHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiBy
ZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAgZm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0
IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3JyeSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lv
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92
ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlW
YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6Omlk
QXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6
YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Np
b25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OktleSk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6aXNXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlUHJveHk6OnNldFBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5Ojp0cmFja1Nlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5z
ZUZvcm1hdCk6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldyBLZXkgY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKTogUmVmYWN0b3JlZCB0
bworICAgICAgICB1c2UgYmV0dGVyIG5hbWVkIGNvbnN0YW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKTogVXNlIHRoZQorICAgICAgICB0
cmFja1Nlc3Npb24gbWV0aG9kIHRvIGFsbG93IGVhc2llciBtb25pdG9yaW5nIG9mIGFsbCBFTUUK
KyAgICAgICAgc2Vzc2lvbnMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVxdWVzdExpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICBrZWVwIHRyYWNr
IG9mIGdlbmVyYXRlZCBzZXNzaW9uIElEcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAgdXNl
IG5ldyBrZXkgbWFuYWdlbWVudCBjbGFzc2VzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OmxvYWRTZXNzaW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OmtleXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omlzb2xhdGVkS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3h5
Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpDRE1JbnN0YW5jZUNsZWFyS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmlu
ZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5
OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBE
ZWxldGVkLiBJdCBsb29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0
aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2Ug
YW4KKyAgICAgICAgb3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAq
IHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9y
IHRvIHVzZQorICAgICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9k
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVm
YWN0b3JlZCBvdXQgb2Ygc3luY01lc3NhZ2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBp
bnRvCisgICAgICAgIHdhaXRGb3JDRE1BdHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5
IGNvZGUsIGl0IHdhcyBhbGwgYnJva2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVu
Zm9yY2UgdXNlIG9mIENETUluc3RhbmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMg
d2lsbCBiZQorICAgICAgICB1c2luZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20g
YmFja2dyb3VuZAorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8g
dGhlIE1lZGlhUGxheWVyIGZvcgorICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNv
IHdpcmUgdGhhdCBpbiBoZXJlIHRvby4gQWxzbyB3aXJlIHRoZQorICAgICAgICBHU3RyZWFtZXIg
c3BlY2lmaWMgQ2xlYXJLZXkgcHJveHkgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBL
ZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBv
ZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdwor
ICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHA6
CisgICAgICAgIEFkZGVkLiBHKi1zcGVjaWZpYyBDbGVhcktleSBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdFN1
YnNhbXBsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5
cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlw
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNs
ZWFyS2V5Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3Rv
ciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5
cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
aW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToK
KyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVk
LiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBiZWVuIGNo
YW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHRyYW5z
Zm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Qcm94eUF2YWlsYWJsZSk6CisgICAgICAgIChn
ZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAgICAgICAgKGF0dGFjaENETVByb3h5KToKKyAg
ICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKToKKyAgICAgICAgKHNpbmtFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3RhdGUpOgorICAgICAgICAoc2V0Q29udGV4dCk6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6
IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5
b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYW5kYXRlIFVVSUQg
dmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRhdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQx
ODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFj
ZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0QTVEMDFGNzFDQjZCMDBG
NTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDk0
QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1l
ZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1NZWRp
YUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcx
Q0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5
NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUy
NUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1
MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVD
NSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENE
TVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHku
aCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAq
LywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8s
CiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFj
Yzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRh
YTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAt
MTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICApCiAKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdj
YzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMx
NGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5j
ZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwg
bm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNr
Z3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3Vy
YXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBi
ZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNs
YXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODE5
NWJjN2Y2NDRmZjk3ODM5Mjk0ZWU5ZTE3N2U0YWI2NzhkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKQEAgLTAs
MCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVByb3h5
LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNTdHJpbmco
KSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmco
bV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSksICJd
Iik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICByZXR1cm4gKnN0b3JlZEtl
eSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQorCit2b2lkIEtleVN0b3Jl
OjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMi
LCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkg
OiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3Qg
YXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAgICAgLy8gaW4gdGhlIGtl
eXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNo
IGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBj
b21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJl
ZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0g
V1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxh
eWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBk
aWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IHN0b3JlIG5v
dyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBt
X2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5IC0gS2V5IElEOiAlcyIs
IGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRpZiAvLyAhTE9HX0RJU0FC
TEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQoKSBjb25zdAoreworICAg
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IGNv
bnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRvJiBrZXlTdGF0dXMgOiBr
ZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQgPSBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsK
K30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYgbmV3S2V5
cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92ZShrZXkpKSkKKyAgICAg
ICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpZEtl
eVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkp
Cit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIHNpemVfdCBrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0
cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsK
KyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90
Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleVdpdGhN
YXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNhbiB0aGlzIHJlYWxseSBo
YXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5
IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5p
ZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAgICBtX2tleXMuYXBwZW5k
KGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBrZXkt
PmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3RvcmVDaGFuZ2U7Cit9CisK
K3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikK
K3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAgICAgICByZW1vdmUoa2V5
KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCit7
CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNpemVfdCBrZXlXaXRoTWF0
Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGFuZCAldSBzZXNz
aW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwga2V5LT5u
dW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIGtleVdpdGhN
YXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7CisgICAgICAgIGlmICgha2V5
V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyIsIGtleVdp
dGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAg
ICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4KTsKKyAgICAgICAgICAg
IHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMg
aWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25zdCBWZWN0b3I8dWludDhf
dD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7CisgICAgICAgIGlmICgq
a2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwg
dGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3Io
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
dW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAgICAgICBr
ZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVy
PiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM+IHsga2V5LT5pZEFzU2hhcmVkQnVmZmVy
KCksIGtleS0+c3RhdHVzKCkgfSk7CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsKK30KKwor
dm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3Jl
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5
U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsKKyAgICBtX2tleXND
b25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENE
TUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3Rv
cjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAg
ICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1f
a2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2Fp
dGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3Rh
bmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGlu
ZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+
c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRp
bmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5j
ZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcg
Zm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0
b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RN
UHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QK
K3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVuY29uZGl0aW9uYWxseSBz
YXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlw
dG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5nIGEga2V5LiBJZiBNYXhL
ZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBtb3JlIGNsZWFyIGJ5dGVz
CisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9yS2V5T25SZXR1cm4gPSBt
YWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cisg
ICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5aW5nIHRvIHdhaXQgZm9y
IGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tleVJlY2VpdmVkID0gbV9r
ZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5OjpNYXhLZXlXYWl0VGlt
ZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5QXZh
aWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAod2Fz
S2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gc3VjY2Vz
c2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICB9Cisg
ICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVzIG5vdCBhdmFpbGFi
bGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2Vk
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5
U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWls
YWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBrZXlBdmFpbGFibGVVbmxv
Y2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7Cit9CisKK3Zv
aWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wgd2FzV2FpdGluZ0Zvcktl
eSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAgIG1fbnVtRGVjcnlwdG9y
c1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1fcGxh
eWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgd2FzV2FpdGlu
Z0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSgp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXllciAmJiBtX251bURlY3J5
cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zvcktl
eS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1fbnVtRGVjcnlwdG9yc1dh
aXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwg
aXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgaXNOb2JvZHlX
YWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5nRm9yS2V5Q2hhbmdlZCgp
OworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20oY29u
c3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBOb3RpZnkgSlMgd2hlbiBh
cHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fa2V5U3RvcmUu
bWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1JbnN0YW5jZVByb3h5IC0g
bWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlmeWluZyBDRE1Qcm94eSBv
ZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAgIG1fY2RtUHJveHktPnVw
ZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpyZW1v
dmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXNGcm9tKGtleVN0b3Jl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNmFkNzkzNzdkYTlhYjJiMjI5MTRmZWFkNDIzOWIw
ZGMyMzVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNETUluc3RhbmNl
LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5PiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM7CisKKyAg
ICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50
OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3Zl
KGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1f
aWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0OworICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBo
YXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KKyAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJu
IGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
S2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJldHVybiBrLm1faWQgPT0g
a2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJRDsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCByZW1vdmVTZXNzaW9uUmVm
ZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2Vz
LS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygpIGNvbnN0IHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXM7IH0KKyAgICBm
cmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9y
PHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgICAgICA6
IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUo
a2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsKKyAgICB1bnNpZ25lZCBt
X251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3MgS2V5U3RvcmUgeworcHVi
bGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVy
KTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Cisg
ICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQorICAgIGJvb2wgYWRk
S2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYp
OworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgdW5zaWduZWQgbnVt
S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Owor
ICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIEtleVN0
YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0OworCisgICAgYXV0
byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBlbmQoKSB7IHJldHVybiBt
X2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5lbmQo
KTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJiZWdpbigpOyB9CisgICAg
YXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRv
IHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8
S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKKworLy8gSGFuZGxl
IHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUg
dXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCitjbGFz
cyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDRE1Qcm94eT4geworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMg
PSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKTsKKyAgICB2b2lkIHNl
dEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVkOgorICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAg
ICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsK
KyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5
SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gdHJ5V2FpdEZvcktleShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBj
b25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAgdm9pZCBz
dG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgTG9j
ayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSogbV9pbnN0YW5jZTsKKwor
ICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2tl
eXNDb25kaXRpb247CisgICAgLy8gRklYTUU6IER1cGxpY2F0ZWQga2V5IHN0b3JlcyBpbiB0aGUg
aW5zdGFuY2UgYW5kIHRoZSBwcm94eSBhcmUgcHJvYmFibHkgbm90IG5lZWRlZCwgYnV0IHNpbXBs
aWZpZWQKKyAgICAvLyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBpbiB0ZXJtcyBvZiB0aHJl
YWRpbmcgaW52YXJpYW50cy4KKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworLy8gQmFz
ZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24gbWFuYWdlbWVudCBjb2RlIGFuZCBmb3IgY29tbXVu
aWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAicmVhbCBDRE0iIHN0YXRlIGNoYW5nZXMgdG8gSlMu
CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3RhbmNlIHsKK3B1YmxpYzoK
KyAgICBDRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgfkNETUluc3Rh
bmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVhZCBvbmx5LgorICAgIHZv
aWQgc2V0UHJveHkoUmVmPENETVByb3h5PiYmIHByb3h5KQorICAgIHsKKyAgICAgICAgbV9jZG1Q
cm94eSA9IFdURk1vdmUocHJveHkpOworICAgICAgICBtX2NkbVByb3h5LT5zZXRJbnN0YW5jZSh0
aGlzKTsKKyAgICB9CisgICAgdm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7Cisg
ICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOworCisgICAgLy8gTWVk
aWEgcGxheWVyIHF1ZXJ5IG1ldGhvZHMgLSBtYWluIHRocmVhZCBvbmx5LgorICAgIFJlZlB0cjxD
RE1Qcm94eT4gcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBt
X2NkbVByb3h5OyB9CisgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvcktleSgpIGNvbnN0IHsg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JL
ZXkgPiAwOyB9CisgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikgeyBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQorCisgICAgLy8gUHJveHkg
bWV0aG9kcyAtIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zv
cktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgdHJhY2tTZXNzaW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IHNl
c3Npb24pIHsgbV9zZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8Q0RNUHJveHk+IG1fY2RtUHJveHk7CisgICAgLy8gRklYTUU6IFdlYWtQdHIgZm9yIHRo
ZSBtX3BsYXllcj8gVGhpcyBpcyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91bmQgYW5kIG1haW4gdGhy
ZWFkcywgaXQncworICAgIC8vIGNvbmNlcm5pbmcgd2UgY291bGQgYmUgYWNjZXNzaW5nIGl0IGlu
IHRoZSBtaWRkbGUgb2YgYSBzaHV0ZG93biBvbiB0aGUgbWFpbi10aHJlYWQsIGVoPworICAgIC8v
IEFzIGEgQ0RNUHJveHksIHdlICoqKnNob3VsZCoqKiBiZSB0dXJuZWQgb2ZmIGJlZm9yZSB0aGlz
IHBvaW50ZXIgZXZlciBnb2VzIGJhZC4KKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXIgeyBudWxs
cHRyIH07IC8vIEZJWE1FOiBNYWluVGhyZWFkPFQ+PworCisgICAgc3RkOjphdG9taWM8aW50PiBt
X251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworICAgIFZlY3RvcjxSZWZQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uPj4gbV9zZXNzaW9uczsKKworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVkYjc1ZDdlNzMzOWIx
NTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLmUxYzIzYzZmNTNmNmZhNDE0MTk2NThhMDM1YzMwYjEw
ZjI1NjRlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDMsMzQgKzQ1
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktleSBDRU5DIFN5c3RlbUlE
LgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lz
dGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4Nzcs
IDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4
MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2Vu
Y1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7Ci1jb25zdCB1bnNp
Z25lZCBrZXlJZFNpemUgPSAxNjsKLQotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcg
S2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOwot
Ci0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0KLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT47Ci0gICAgQ2xlYXJL
ZXlTdGF0ZSgpOwotICAgIEtleVN0b3JlIG1fa2V5czsKLX07Ci0KLUNsZWFyS2V5U3RhdGUmIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENs
ZWFyS2V5U3RhdGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7Ci19Ci0KLUNsZWFyS2V5
U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHN0YXRpYyBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAg
ICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9lc24ndCBmaXQgaW50byBh
IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgpAQCAtODgsNyArNjIsNyBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vu
c2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5
cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0
aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4K
QEAgLTEwMSw3ICs3NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVh
cktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgaWYgKCFpdC0+
dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRlY29kZWRLZXlzOworICAg
IFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9vbCB2YWxpZEZvcm1hdCA9
IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5LT5lbmQoKSwKICAgICAg
ICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzkwLDExIEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9y
bWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJr
aWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtl
eUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlE
RGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29k
ZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVl
LCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSksIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkgfSk7CisgICAgICAgICAg
ICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0YSkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlk
Rm9ybWF0KQpAQCAtMTgxLDcgKzE1NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAg
d2hpbGUgKHRydWUpIHsKIAogICAgICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cgSW5pdERhdGEu
Ci0gICAgICAgIGlmIChpbmRleCArIDEyICsgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID49IGlu
aXREYXRhU2l6ZSkKKyAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBDbGVhcktleTo6Y2VuY1N5c3Rl
bUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwog
CiAgICAgICAgIHBzc2hTaXplID0gZGF0YVtpbmRleCArIDJdICogMjU2ICsgZGF0YVtpbmRleCAr
IDNdOwpAQCAtMTkxLDcgKzE2NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIC8vIDEyID0gQk1GRiBib3ggaGVhZGVy
ICsgRnVsbCBib3ggaGVhZGVyLgotICAgICAgICBpZiAoIW1lbWNtcCgmZGF0YVtpbmRleCArIDEy
XSwgY2xlYXJLZXlDZW5jU3lzdGVtSWQsIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSkpIHsKKyAg
ICAgICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIENsZWFyS2V5OjpjZW5jU3lzdGVt
SWQsIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKSkgewogICAgICAgICAgICAgZm91bmRQc3No
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDIsNyArMTc2LDcg
QEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2Nh
dGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpZiAoIWZvdW5kUHNzaCkKICAgICAgICAg
cmV0dXJuIGtleUlkc01hcDsKIAotICAgIGluZGV4ICs9ICgxMiArIGNsZWFyS2V5Q2VuY1N5c3Rl
bUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFkZXIpICsgU3lz
dGVtSUQgc2l6ZS4KKyAgICBpbmRleCArPSAoMTIgKyBDbGVhcktleTo6Y2VuY1N5c3RlbUlkU2l6
ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFkZXIpICsgU3lzdGVtSUQg
c2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KICAgICBpZiAoaW5kZXggKyAzID49
IGluaXREYXRhU2l6ZSkKQEAgLTIxMiw3ICsxODYsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShjb25z
dAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAKICAgICAvLyBDaGVjayB0
aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3QgKiBrZXlJZFNp
emUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3Qg
KiBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRhU2l6ZSkKICAgICAgICAg
cmV0dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQgPSBpbmRleDsgLy8gVGhl
IGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4KQEAgLTI1MSw5ICsyMjUs
OSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERh
dGEoY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFy
cmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVy
bCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZh
bHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAg
ICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBr
ZXlJZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgm
ZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsKICAgICAgICAga2V5SWRz
QXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCArPSBrZXlJZFNpemU7Cisg
ICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIAogICAg
IG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CkBAIC00NTYs
NDQgKzQzMCw2IEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6
ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICByZXR1cm4gc2Vzc2lvbklk
OwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmluZyBhbiBhcmNoaXRlY3R1
cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwuIFRoZSBHU3RyZWFtZXIg
ZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBhbGwga25vd24gc2Vzc2lv
biBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0vLyBHQ3J5cHQuIElkZWFs
bHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZgotLy8gUHJv
eHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tncm91bmQgR1N0cmVhbWVy
Ci0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAoaS5lLiByZWYoKSdzKSBv
ZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRocmVhZC4gV2l0aCB0aGUg
bmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNhbiBubyBsb25nZXIgZG8g
dGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8gU2hhcmVkQnVmZmVycyBp
bnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNyb3NzCi0vLyB0aHJlYWRz
Lgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtleShjb25zdCBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKLXsKLSAgICByZXR1cm4geyBrZXkuc3RhdHVzLCBTdHJp
bmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5zaXplKCkpLCBTdHJpbmco
a2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRhLT5zaXplKCkpIH07Ci19
Ci0KLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IFByb3h5Q0RNQ2xlYXJLZXk6
Omlzb2xhdGVkS2V5cygpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIHRoZSBrZXlzIG9mIGFsbCBz
ZXNzaW9ucywgbWF5IGJlIGNvcGllZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMuCi0gICAgVmVjdG9y
PFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gYWxsS2V5cyB7IH07Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2tleXNNdXRleCk7Ci0gICAgc2l6ZV90IGluaXRpYWxDYXBhY2l0eSA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlz
KCkudmFsdWVzKCkpCi0gICAgICAgIGluaXRpYWxDYXBhY2l0eSArPSBrZXlWZWN0b3Iuc2l6ZSgp
OwotICAgIGFsbEtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpOwot
Ci0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5r
ZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0g
ICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRlZEtleShrZXkpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYWxsS2V5czsKLX0KLQotQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RN
SW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlD
RE1DbGVhcktleSgpKSkKLXsKLX0KLQogQ0RNSW5zdGFuY2VDbGVhcktleTo6fkNETUluc3RhbmNl
Q2xlYXJLZXkoKSA9IGRlZmF1bHQ7CiAKIENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWUgQ0RNSW5z
dGFuY2VDbGVhcktleTo6aW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5
c3RlbUNvbmZpZ3VyYXRpb24mKQpAQCAtNTM1LDM2ICs0NzEsOSBAQCBjb25zdCBTdHJpbmcmIENE
TUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJlZlB0cjxDRE1JbnN0YW5j
ZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24oKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKSk7Ci19Ci0KLVN0
cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5SUREYXRhLT50b0hleFN0cmluZygpLCAiXSIp
OwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleVZhbHVlRGF0YS0+dG9I
ZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENETUluc3RhbmNl
Q2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17
Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0K
LSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9PSAqazIua2V5SUREYXRhOwotfQotCi1ib29sIG9w
ZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAg
IEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgaWYgKGsxLmtleUlERGF0YS0+c2l6ZSgpICE9
IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gazEua2V5SUREYXRhLT5zaXpl
KCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsKLQotICAgIHJldHVybiBtZW1jbXAoazEua2V5SURE
YXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJRERhdGEtPnNpemUoKSk7
CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lvbiA9IGFkb3B0UmVmKG5l
dyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgqdGhpcykpOworICAgIHRyYWNrU2Vzc2lvbihu
ZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAogdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21T
dHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5z
ZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01NzIsNiArNDgxLDggQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21T
dHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMyX3Qgc19zZXNzaW9uSWRWYWx1ZSA9IDA7CiAgICAg
KytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAgbV9zZXNzaW9uSUQgPSBTdHJpbmc6Om51bWJlcihz
X3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAgICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleWlk
c0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCkBAIC01NzksMTggKzQ5MCwxNiBA
QCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNl
VHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlJ
ZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCiAgICAgY2FsbE9uTWFpblRocmVh
ZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpLCBzZXNzaW9uSWRW
YWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkgbXV0YWJsZSB7CisgICAgICAgIFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
aW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklkVmFsdWUpLCBm
YWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEp
LCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2NlZWRlZCk7CiAgICAgICAgIH0pOwogfQogCiB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYg
c2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiByZXNwb25zZSwgTGlj
ZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1
bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZwotICAg
IC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgogICAgIGF1dG8gZGlzcGF0
Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKGJvb2wgc2Vzc2lvbldhc0Ns
b3NlZCwgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiYmIGNoYW5nZWRLZXlzLCBTdWNjZXNzVmFs
dWUgc3VjY2VlZGVkKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNjA0LDUy
ICs1MTMsMjMgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5z
ZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKIAogICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJvb3QgPSBwYXJzZUpTT05PYmplY3QocmVzcG9uc2UpOwogICAgIGlmICghcm9vdCkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBw
YXlsb2FkIHdhcyBub3QgdmFsaWQgSlNPTiIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6
OkZhaWxlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSB1cGRhdGluZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOworICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxp
Y2Vuc2UgZm9yIHNlc3Npb24gJXMgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5zICV1IGtleXMiLCBz
ZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgaWYg
KGF1dG8gZGVjb2RlZEtleXMgPSBwYXJzZUxpY2Vuc2VGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAg
IC8vIFJldHJpZXZlIHRoZSB0YXJnZXQgVmVjdG9yIG9mIEtleSBvYmplY3RzIGZvciB0aGlzIHNl
c3Npb24uCi0gICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIHN0YXRlIG1hbmFnZW1lbnQg
Y29kZS4KLSAgICAgICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4mIGtleVZlY3Rv
ciA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5lbnN1cmUoc2Vzc2lvbklkLCBb
XSB7IHJldHVybiBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiB7IH07IH0pLml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgICAgICBib29sIGtleXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
IGZvciAoYXV0byYgZGVjb2RlZEtleSA6ICpkZWNvZGVkS2V5cykgewotICAgICAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRGVjb2RlZCBhIGtleSB3aXRoIElEICVzIGFuZCBrZXkg
ZGF0YSAlcyIsIGRlY29kZWRLZXkua2V5SURBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29k
ZWRLZXkua2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgYXV0
byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwg
a2V5VmVjdG9yLmVuZCgpLAotICAgICAgICAgICAgICAgIFsmZGVjb2RlZEtleV0gKGNvbnN0IENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleSYgY29udGFpbmVkS2V5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250YWluZWRLZXkgPT0gZGVjb2RlZEtleTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRCAhPSBrZXlWZWN0b3IuZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBFeGlzdGlu
ZyBrZXkgZm91bmQgd2l0aCBkYXRhICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmtleVZhbHVl
QXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgIGlmICgha2V5V2l0
aE1hdGNoaW5nS2V5SUQtPmhhc1NhbWVLZXlWYWx1ZShkZWNvZGVkS2V5KSkgewotICAgICAgICAg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGluZyBrZXkgc2luY2Ug
dGhlIGRhdGEgYXJlIGRpZmZlcmVudCIpOwotICAgICAgICAgICAgICAgICAgICAqa2V5V2l0aE1h
dGNoaW5nS2V5SUQgPSBXVEZNb3ZlKGRlY29kZWRLZXkpOwotICAgICAgICAgICAgICAgICAgICBr
ZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBUaGlzIGlzIGEg
bmV3IGtleSIpOwotICAgICAgICAgICAgICAgIGtleVZlY3Rvci5hcHBlbmQoV1RGTW92ZShkZWNv
ZGVkS2V5KSk7Ci0gICAgICAgICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBtX2tleVN0b3JlLmFk
ZEtleXMoV1RGTW92ZSgqZGVjb2RlZEtleXMpKTsKIAotICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVjdG9yLnNpemUo
KSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzICV1
IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9y
ZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdl
ZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gU29ydCBi
eSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtleVZlY3Rvci5iZWdpbigpLCBrZXlW
ZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
a2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rv
cikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6
cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXku
c3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IFdURk1vdmUoa2V5U3RhdHVz
VmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24g
JXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3Rvcigp
OwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGTW92ZShj
aGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKQEAgLTY1Nyw0NyArNTM3LDI3
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3Qg
U3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgfQogCiAgICAgaWYgKHBhcnNlTGljZW5z
ZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUg
dGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAgICAgICBDbGVhcktleVN0YXRlOjpzaW5n
bGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7CisgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFs
bCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BhcmVu
dEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBtX2tleVN0
b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3JtYXQgd2FzIHJlY29nbml6ZWQuCisgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMg
YW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICBk
aXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVk
KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24oTGlj
ZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vz
c2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3Ig
dGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVk
IGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQot
ICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhp
c3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VzcywgU2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRG
YWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICAgICAgICAg
IFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlzdGluZ0tleXMpLCBzdWNjZXNzLCBsb2Fk
RmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07
Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHJlcHJlc2Vu
dGluZyBhbGwgdGhlIGtub3duIGtleXMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yOwotICAgIHsKLSAgICAgICAgYXV0byYga2V5cyA9IENsZWFy
S2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAgICAgICAgYXV0byBpdCA9IGtleXMuZmlu
ZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0ga2V5cy5lbmQoKSkgewotICAgICAgICAg
ICAgZGlzcGF0Y2hDYWxsYmFjayhXVEY6Om51bGxvcHQsIEZhaWxlZCwgU2Vzc2lvbkxvYWRGYWls
dXJlOjpOb1Nlc3Npb25EYXRhKTsKKyAgICBBU1NFUlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklE
KTsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5jb252
ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCAma2V5
U3RhdHVzVmVjdG9yXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgYXV0byYga2V5VmVjdG9yID0gaXQt
PnZhbHVlOwotICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShr
ZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0g
ICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8
U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0p
OwotICAgIH0KLQotICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3Ip
LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgICAgIGNhbGxiYWNr
KFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFN1
Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICB9KTsKIH0KIAogdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENs
b3NlU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC03MTMsNyArNTczLDggQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENs
b3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVt
b3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1v
dmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVy
IGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBk
dXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KKyAgICBBU1NFUlQoc2Vzc2lvbklk
ID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAgICAg
IFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3RvciYmIGtleVN0YXR1c1ZlY3RvciwgT3B0
aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2FnZSwgU3VjY2Vzc1ZhbHVlIHN1Y2Nlc3Mp
IHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC03MjcsMzUgKzU4OCwxNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBT
dHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNW
ZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5kIHRoZSBtZXNzYWdl
IGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAgICBLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0
b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2VkKCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZlIGluZm9ybWF0aW9uIGZv
ciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBpZiBub25lIGlzIGZvdW5kLgotICAgICAg
ICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAg
ICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlz
LmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKEtleVN0YXR1c1ZlY3RvciB7
IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIEtleSB2ZWN0b3IsIGNv
bnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb24sIGFuZAotICAgICAgICAvLyB0
aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3IgdGhpcyBzZXNzaW9uLgotICAgICAgICBh
dXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVlKTsKLSAgICAgICAga2V5cy5yZW1vdmUo
aXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwg
cGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNlZCcgc3RhdHVzLgotICAgICAgICBrZXlT
dGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBrZXlTdGF0dXNW
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3Rh
dHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH0pOwotCiAgICAgICAg
IC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vuc2UgcmVsZWFzZScg
Zm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBvZiBiYXNlNjRVUkwt
ZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEtPnNpemUoKSA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3Ry
aW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJRERhdGEtPmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUoKSkpKTsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChr
ZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7
CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNlNjRVUkxFbmNvZGUo
a2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGFycmF5KSk7CiAg
ICAgICAgIH0KQEAgLTc2Niw2ICs2MDksNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogICAg
ICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNTdHJpbmcuZGF0YSgp
LCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCisgICAgbV9rZXlTdG9yZS5yZW1v
dmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3Rv
ciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4NWIzMTliMWEzOGMxMjE2OTkx
OTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li42NzA0YWU3YTk1N2YzMmZlMWY4NDk4M2VkM2IzZjY1MDJh
NTMxNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAgLTMxLDE0ICszMSwyOCBAQAog
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNsdWRlICJDRE1GYWN0b3J5LmgiCi0j
aW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Npb24uaCIK
ICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK25hbWVzcGFjZSBDbGVhcktleSB7CisKKy8vIENsZWFyS2V5IENFTkMgU3lz
dGVtSUQuCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLWNlbmMvI2NvbW1v
bi1zeXN0ZW0KK2NvbnN0IHVpbnQ4X3QgY2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4NzcsIDB4
ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4MWUs
IDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNlbmNTeXN0ZW1JZFNp
emUgPSBzaXplb2YoY2VuY1N5c3RlbUlkKTsKK2VudW0geworICAgIEFFUzEyOENUUkJsb2NrU2l6
ZUluQnl0ZXMgPSAxNiwKKyAgICBLZXlJRFNpemVJbkJ5dGVzID0gMTYsCisgICAgSVZTaXplSW5C
eXRlcyA9IDE2LAorfTsKKworfSAvLyBuYW1lc3BhY2UgQ2xlYXJLZXkKKwogY2xhc3MgQ0RNRmFj
dG9yeUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUZhY3RvcnkgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNzcsMjcgKzkxLDEyIEBAIHB1YmxpYzoKICAgICBP
cHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZp
bmFsOwogfTsKIAotY2xhc3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBQcm94eUNE
TSB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUluc3RhbmNl
UHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7CiBwdWJs
aWM6Ci0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzIHN0YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAgICAgICAgU3RyaW5nIGtl
eVZhbHVlRGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlDRE1DbGVhcktleSgpID0g
ZGVmYXVsdDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtleXMoKSBjb25zdDsKLXBy
aXZhdGU6Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsKLQotY2xhc3MgQ0RNSW5z
dGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKLXB1YmxpYzoKLSAgICBDRE1JbnN0YW5jZUNs
ZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgpOwogCisgICAgLy8g
Q0RNSW5zdGFuY2UKICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50YXRpb25UeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVhcktleTsgfQotCiAg
ICAgU3VjY2Vzc1ZhbHVlIGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlT
eXN0ZW1Db25maWd1cmF0aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldERpc3RpbmN0
aXZlSWRlbnRpZmllcnNBbGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRQ
ZXJzaXN0ZW50U3RhdGVBbGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3ICsxMDQsMjIgQEAg
cHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAg
ICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotCi0g
ICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0
YXR1czsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwotICAgICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAgU3RyaW5nIGtleUlE
QXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmcoKSBjb25z
dDsKLQotICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIEFT
U0VSVChvdGhlci5rZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJuICprZXlWYWx1ZURh
dGEgPT0gKm90aGVyLmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR3byBr
ZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1
ZSBhbmQgc3RhdHVzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAm
azEsIGNvbnN0IEtleSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBieSB0aGVp
ciBJRHMsIGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAgICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLQotICAgICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0
dXJuICEob3BlcmF0b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj4oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPT0oazEs
IGsyKSAmJiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I+KGsx
LCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkgJmsxLCBj
b25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICB9OwotCi0g
ICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJv
eHlDRE07IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1fcHJveHlDRE07CiB9
OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1J
bnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleT4gewogcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5KENETUlu
c3RhbmNlQ2xlYXJLZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudEluc3RhbmNlKHBhcmVu
dCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0
cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRhLCBMaWNlbnNl
Q2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYs
IExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2sm
JikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lk
IGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmKSBmaW5h
bDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBl
LCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgc3RvcmVSZWNv
cmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToKKyAgICBTdHJpbmcg
bV9zZXNzaW9uSUQ7CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJlbnRJbnN0YW5jZTsK
KyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDLmgKaW5kZXggNDc3MmZjYjMyMzZkMzkwMjk1MzRjNDZmYjRmMTAy
OTk3ODNlNmNiNi4uYjExZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRkZTg2ZjNkZDk5NGNjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5oCkBAIC04MCw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICBTdWNj
ZXNzVmFsdWUgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7
CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJikgZmlu
YWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFs
OwotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBu
dWxscHRyOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4
IGExMmVmNGY2ZGJhNmYwMTVlNzYxNTFmMTQ3Y2M2YzA3OWU2MmRhN2UuLjU0NWFjYzc1YzAxN2Ri
OWQyYTc0OGM5OWQ0NGIxYTYzMjBlN2EzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RN
UHJveHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCIKQEAgLTE3ODgsNiArMTc4OSw1MCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCiAg
ICAgfSwgdGhpcywgbnVsbHB0cik7CiB9CiAKK0luaXREYXRhIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgSW5pdERhdGEg
aW5pdERhdGE7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0
ZXgpOworICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMobWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImZvdW5k
ICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVj
dGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMu
YXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6
IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAgR3N0QnVmZmVyKiBk
YXRhID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2
ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAg
ICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAgICAgICAg
ICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQu
Z2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbml0RGF0YTsKK30KKwor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRGb3JDRE1BdHRhY2htZW50KCkK
K3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChw
aXBlbGluZSgpLCAiY2FuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIHdhaXRpbmcgZm9yIGEgQ0RN
IGluc3RhbmNlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0
aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBmYWxz
ZTsKKyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRMb2NrKG1f
Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2ht
ZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkg
eworICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAg
ICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NP
TExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODIzLDQxICsxODY4LDkgQEAg
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICgh
Z19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1p
ZCIpKSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VS
Uk9SKCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVk
IGNvbnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJy
ZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAg
ICBJbml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFD
RSgiZm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUi
LCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3Rl
bUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChh
dXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9l
dmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRh
dGEsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtl
eVN5c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2
ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUo
aW5pdERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRp
bmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRDRE1BdHRhY2ggPSBm
YWxzZTsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2htZW50TG9ja2VyID0g
aG9sZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAgZGlkQ0RNQXR0YWNo
ID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgs
IDRfcywgW3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkaWRDRE1BdHRhY2gg
JiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgp
LmlzRW1wdHkoKSkgeworICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChwYXJz
ZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgYm9vbCBp
c0NETUF0dGFjaGVkID0gd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKKyAgICAgICAgaWYgKGlzQ0RN
QXR0YWNoZWQgJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2UtPmtl
eVN5c3RlbSgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVk
S2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1f
Y2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKICAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBr
ZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRh
dGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2Fn
ZSkpOwogCkBAIC0xODY1LDEwICsxODc4LDExIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAg
ICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVf
c3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQo
Y29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywg
cHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7CiAgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250
ZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FSTklORygiQ0RN
IGluc3RhbmNlIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JK
RUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQsIG5vIENETSBhdmFpbGFi
bGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQogCkBAIC0yMTk4LDE5ICsyMjEyLDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAg
ICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAgICAgICAgICAgZ3N0X21w
ZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19u
YW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtleSBtZXNzYWdlIGZy
b20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRX
YWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBkZWNyeXB0b3Jz
IHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBiZWluZyBjcmVhdGVk
IGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRoZXkgYXJlIG5vdCBhbmQg
Y3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IG1ha2UgdGhpcyB2
ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBzb29uIGFuZCBpdCBk
b2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0aGluZyB0aGF0IGNvdWxk
IGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBtZWFudGltZSwgZm9y
Y2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4KLSAgICAgICAgICAg
IGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgICAgICB9IGVsc2UgaWYg
KGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtleS1yZWNlaXZlZCIpKSB7
Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJkcm0ta2V5LXJlY2Vp
dmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKLSAg
ICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAgICB9CiAjZW5kaWYKICAg
ICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJodHRwLWhl
YWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUHJv
Y2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOwpAQCAt
MzcyOCwxNCArMzcyOSwxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2Rt
SW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOworICAgIG1fY2RtSW5zdGFu
Y2UgPSByZWludGVycHJldF9jYXN0PENETUluc3RhbmNlUHJveHkqPigmaW5zdGFuY2UpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fY2RtSW5zdGFuY2UpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFBs
YXllcihtX3BsYXllcik7CisgICAgbV9jZG1JbnN0YW5jZS0+c2V0UHJveHkoYWRvcHRSZWYoKm5l
dyBDRE1Qcm94eUNsZWFyS2V5KSk7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsK
KyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRf
bmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRT
dHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7
Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1pbnN0YW5jZSIs
IEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpLCBudWxscHRy
KTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2RtLXByb3h5Iiwg
R19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCksIG51bGxwdHIpOwog
ICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkp
LCBjb250ZXh0LmdldCgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUlu
c3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0Iiwg
bV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9j
ZG1BdHRhY2htZW50TXV0ZXgpOwogICAgIC8vIFdlIG11c3Qgbm90aWZ5IGFsbCB3YWl0ZXJzLCBz
aW5jZSBzZXZlcmFsIGRlbXV4ZXJzIGNhbiBiZSBzaW11bHRhbmVvdXNseSB3YWl0aW5nIGZvciBh
IENETS4KQEAgLTM3NTcsNyArMzc2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKICAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcgQ0RNIGluc3RhbmNlICVw
LCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKICAgICBtX2Nk
bUluc3RhbmNlID0gbnVsbHB0cjsKIAotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9
IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOwor
ICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9u
ZXcoImRybS1jZG0tcHJveHkiLCBGQUxTRSkpOwogICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0
KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIH0KIApAQCAt
Mzc5MCw1MSArMzc5NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFu
ZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0aWFsaXphdGlvbkRh
dGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIGlzV2Fp
dGluZ0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFu
Z2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBh
cmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgiaXNXYWl0aW5nRm9y
S2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyhpc1dhaXRpbmdG
b3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAoaXNX
YWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0aW5nRm9yS2V5ICYm
IHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0
aW5nRm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Ig
a2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsKLSAg
ICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICghbV9w
aXBlbGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFuY2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dl
dF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9v
bCByZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1Jl
Zihnc3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25l
d19lbXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0
ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1
ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJx
dWVyeSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1Rf
U1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGlu
ZSBpcyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVw
IGFuZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhl
IGRlY3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0
ZXJhdG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkp
KTsKLSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0
b3IuZ2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEp
IC0+IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NU
X0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RR
dWVyeSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFX
RUJLSVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVy
eShlbGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7
Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykK
LSAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAg
ICAgICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0g
ICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAg
ICAgICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAg
cmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1Rf
VFJBQ0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBi
b29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGIyYmI1
NDFhMzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLjUyMWIyMGQxMWNjOGRkOTRiZTI4
NGQ3NDY5OWNkMjcxN2I0ZTA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVn
dHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCisjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2VuZGlmCisKIHR5cGVk
ZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1
Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250
ZXh0IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVudE11dGV4OwogICAg
IENvbmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVmUHRyPGNvbnN0IENE
TUluc3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVByb3h5PiBt
X2NkbUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFj
Y2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hTZXQ8dWludDMyX3Q+
IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2NkbUluc3RhbmNlOyB9
CiAgICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKICAgICB2b2lk
IGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0
V2FpdGluZ0ZvcktleShib29sKTsKKyAgICBJbml0RGF0YSBwYXJzZUluaXREYXRhRnJvbVByb3Rl
Y3Rpb25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICBib29sIHdhaXRGb3JDRE1BdHRhY2htZW50
KCk7CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1dHRpbmdEb3duOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9DRE1Qcm94eUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA0MDQ1Mjg3
YjM5NmE4NTEyODI3ZmM4Y2JhODQ3YTI0MWE1NDQyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktl
eS5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBib29sIHJlYWRVSW50MzIo
Y29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90JiBvZmZzZXQs
IHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwgb2Zmc2V0IDw9IGJ1
ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6ZW9mKHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9obCgqcmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y29uc3QgdWludDMyX3QqPihidWZmZXIgKyBvZmZzZXQpKTsKKyAgICBvZmZzZXQg
Kz0gc2l6ZW9mKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBy
ZWFkVUludDE2KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVf
dCYgb2Zmc2V0LCB1aW50MTZfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQsIG9m
ZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNpemVv
Zih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaHMoKnJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQxNl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7Cisg
ICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2Uge30KKworQ0RNUHJveHlDbGVhcktleTo6fkNETVByb3h5Q2xlYXJLZXkoKQor
eworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKG1fZ2NyeUhhbmRsZSk7Cit9CisKK2Jvb2wgQ0RNUHJv
eHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0
JiBpbnB1dCkKK3sKKyAgICB1aW50OF90IGN0cltDbGVhcktleTo6QUVTMTI4Q1RSQmxvY2tTaXpl
SW5CeXRlc107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0gOCkgeworICAgICAgICAv
LyBJU08vSUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMworCisgICAgICAgIC8vIFdoZW4gYW4g
OC1ieXRlIElWIGlzIGluZGljYXRlZCwgdGhlIGxlYXN0IHNpZ25pZmljYW50IDgKKyAgICAgICAg
Ly8gYnl0ZXMgb2YgdGhlIDE2IGJ5dGUgSVYgKGJ5dGVzIDggdG8gMTUpIFNIQUxMIGJlIHNldCB0
bworICAgICAgICAvLyB6ZXJvLgorICAgICAgICBtZW1zZXQoY3RyICsgOCwgMCwgOCk7CisgICAg
ICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCA4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbWVtY3B5
KGN0ciwgaW5wdXQuaXYsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5
X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9nY3J5SGFuZGxlLCBj
dHIsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGN0cik6ICVzIiwgZ3BnX3N0
cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlw
dGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAgIC8vIEZJWE1FOiBV
bm5lY2Vzc2FyeSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGlsbCBleHBvc2luZwor
ICAgIC8vIGEgbm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQgQVBJPyBUaGVzZSBi
dWZmZXJzIGFyZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBhIGh1Z2UgZGVhbCwg
SSBndWVzcy4KKyAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CisgICAga2V5SURWZWMuYXBw
ZW5kKGluLmtleUlELCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKKworICAgIGF1dG8ga2V5RGF0YSA9
IGdldE9yV2FpdEZvcktleShrZXlJRFZlYyk7CisgICAgaWYgKCFrZXlEYXRhKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJf
c2V0a2V5KG1fZ2NyeUhhbmRsZSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRhLT5zaXplKCkpKSB7
CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9j
aXBoZXJfc2V0a2V5KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xl
YXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRleHQmIGluKQorewor
ICAgIGlmICghaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBmdWxsLXNhbXBs
ZSBkZWNyeXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgaW4uZW5jcnlwdGVkQnVmZmVyU2l6
ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbi5lbmNyeXB0ZWRCdWZmZXIsIGluLmVuY3J5cHRl
ZEJ1ZmZlclNpemVJbkJ5dGVzLCAwLCAwKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJl
cnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRTdWJz
YW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdW5zaWduZWQgZW5jcnlw
dGVkQnVmZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgc2l6ZV90IHN1YlNhbXBsZUJ1ZmZlckJ5dGVP
ZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIHN1YnNhbXBsZUluZGV4ID0gMDsKKyAgICB3aGlsZSAo
ZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCA8IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5
dGVzKSB7CisgICAgICAgIHVpbnQxNl90IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAg
ICAgICB1aW50MzJfdCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IDA7CisKKyAgICAgICAg
aWYgKHN1YnNhbXBsZUluZGV4IDwgaW5wdXQubnVtU3Vic2FtcGxlcykgeworICAgICAgICAgICAg
aWYgKCFyZWFkVUludDE2KGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNC
dWZmZXJTaXplSW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVt
Q2xlYXJCeXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlD
bGVhcktleSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBjbGVhciBieXRlcyBpbiBzdWJzYW1w
bGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZWFkVUludDMyKGlucHV0
LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcywgc3Vi
U2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpKSB7Cisg
ICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBu
b3QgcmVhZCBudW1iZXIgb2YgZW5jcnlwdGVkIGJ5dGVzIGluIHN1YnNhbXBsZSBhdCBpbmRleCAl
dSIsIHN1YnNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzdWJzYW1wbGVJbmRleCsrOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7CisgICAgICAgICAgICBz
dWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IGlucHV0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5
dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEZJWE1FOiBUaGVzZSBhcmUgaGlnaC1mcmVxdWVuY3kgbWVzc2FnZXMsIG5vdCBzdXJlIGlmIHRo
ZXJlJ3MgYSBiZXR0ZXIgbG9nZ2luZyBsaWIgaW4gV2ViQ29yZS4KKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIHN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGNsZWFyICglbHUgYnl0ZXMgbGVm
dCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzLCBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZz
ZXQpOworCisgICAgICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0gc3Vic2FtcGxlTnVt
Q2xlYXJCeXRlczsKKworICAgICAgICBpZiAoc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMpIHsK
KyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRl
cyBlbmNyeXB0ZWQgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vic2FtcGxlSW5kZXgs
IHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5C
eXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAgICAgICBpZiAoZ2Ny
eV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChtX2djcnlIYW5kbGUs
IGlucHV0LmVuY3J5cHRlZEJ1ZmZlciArIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNh
bXBsZU51bUVuY3J5cHRlZEJ5dGVzLCAwLCAwKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfZGVjcnlwdCk6ICVz
IiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zm
c2V0ICs9IHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHQo
Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkKK3sKKyAgICBpZiAo
IWNlbmNTZXRDb3VudGVyVmVjdG9yKGlucHV0KSB8fCAhY2VuY1NldERlY3J5cHRpb25LZXkoaW5w
dXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5wdXQuaXNTdWJzYW1w
bGVkKCkgPyBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoaW5wdXQpIDogY2VuY0RlY3J5cHRGdWxsU2Ft
cGxlKGlucHV0KTsKK30KKwordm9pZCBDRE1Qcm94eUNsZWFyS2V5Ojppbml0aWFsaXplR2NyeXB0
KCkKK3sKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmbV9n
Y3J5SGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZ
X0NJUEhFUl9TRUNVUkUpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFy
S2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfb3Blbik6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJTaG91bGQgbm90IGdldCB0aGlzIGZh
ciB3aXRoIGEgZnVuY3Rpb25hbCBHQ3J5cHQhIik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94
eUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL0NETVByb3h5Q2xlYXJLZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDI0MGM5ZjhkNGNlNjdhYWJkMWRm
ZWQwN2I2NmI1MTA0MTIxOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmgKQEAgLTAsMCAr
MSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQorCisjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRlICJDRE1JbnN0YW5jZVNlc3Np
b24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhyZWFkcyBzaG91bGQg
dXNlIHRvIG1ha2UgdXNlIG9mIGEKKy8vIHBsYXRmb3JtIENETSBtb2R1bGUuCitjbGFzcyBDRE1Q
cm94eUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8Q0RNUHJveHlDbGVhcktleSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+
IHsKK3B1YmxpYzoKKyAgICBDRE1Qcm94eUNsZWFyS2V5KCkKKyAgICB7CisgICAgICAgIGluaXRp
YWxpemVHY3J5cHQoKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0RNUHJveHlDbGVhcktleSgpOwor
CisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBsYWNrIG9mIGNvbnNpc3RlbmN5IGJldHdlZW4gU2hh
cmVkQnVmZmVycywKKyAgICAvLyBWZWN0b3I8Y2hhcj4ncyBhbmQge3VpbnQ4X3QqLHNpemVfdH0g
aWRpb21zIGZvciByZXByZXNlbnRpbmcgYSBjaHVuayBvZgorICAgIC8vIGJ5dGVzLiBGaXggdGhh
dCBzb21laG93LiBOb3RlIFNoYXJlZEJ1ZmZlcnMgYXJlIGRhbmdlcm91cyBzaW5jZQorICAgIC8v
IHRoZXkncmUgbm90IHRocmVhZC1zYWZlIGFuZCB0aGlzIGNsYXNzIG11c3QgbWFpbnRhaW4KKyAg
ICAvLyB0aHJlYWQtc2FmZXR5LCBidXQgbWF5YmUgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudCBj
b3VsZCBiZQorICAgIC8vIG1hZGUgdG8gd29yaywgaG93ZXZlciB0aGF0IGhhcyB6ZXJvIGhlbHBl
cnMgZm9yIGRyb3BwaW5nIGludG8KKyAgICAvLyBpdGVyYXRvci1hd2FyZSAvIGNvbXBhcmF0b3It
YXdhcmUgY29udGFpbmVycy4uLgorICAgIHN0cnVjdCBjZW5jRGVjcnlwdENvbnRleHQgeworICAg
ICAgICAvLyBGSVhNRTogRW5hY2Fwc3VsYXRlIHRoZXNlIGZpZWxkcyBpbiBub24tY29waWVkIHR5
cGVzLgorICAgICAgICBjb25zdCB1aW50OF90KiBrZXlJRDsKKyAgICAgICAgc2l6ZV90IGtleUlE
U2l6ZUluQnl0ZXM7CisKKyAgICAgICAgY29uc3QgdWludDhfdCogaXY7CisgICAgICAgIHNpemVf
dCBpdlNpemVJbkJ5dGVzOworCisgICAgICAgIHVpbnQ4X3QqIGVuY3J5cHRlZEJ1ZmZlcjsKKyAg
ICAgICAgc2l6ZV90IGVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzOworCisgICAgICAgIC8vIEZJ
WE1FOiBHU3RyZWFtZXItc3BlY2lmaWMgZGF0YSBsYXlvdXQuCisgICAgICAgIC8vIElmIHdlIHdh
bnQgdG8gZ2V0IHJpZCBvZiB0aGUgc3BlY2lmaWMgZGF0YSBsYXlvdXQsIHdlIGNhbiBwYXJzZSBp
dCBiZWZvcmUKKyAgICAgICAgLy8gYXNzaWduaW5nIGl0IGhlcmUgYW5kIG1heWJlIGhhdmUgYSBW
ZWN0b3I8c2l6ZV90PiB0aGF0IGlzIGEgc2VyaWVzIG9mCisgICAgICAgIC8vIGNsZWFyL2RlY3J5
cHRlZC9jbGVhci9kZWNyeXB0ZWQuLi4gT3IgbWF5YmUgZXZlbiBhIFZlY3RvcjxzdGQ6OnBhaXI8
c2l6ZV90LCBzaXplX3Q+PgorICAgICAgICAvLyByZXByZXNlbnRpbmcgc2VxdWVuY2VzIG9mIGNs
ZWFyL2RlY3J5cHRlZCBzaXplcy4gVGhhdCBzdGQ6OnBhaXIgY291bGQgZXZlbgorICAgICAgICAv
LyBiZWNvbWUgYSBzdHJ1Y3QgQ2xlYXJEZWNyeXB0ZWRDaHVua1NpemVzSW5CeXRlcyBmb3IgZXhh
bXBsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNjczMAorICAgICAgICBjb25zdCB1aW50OF90KiBzdWJzYW1wbGVzQnVmZmVyOworICAgICAg
ICBzaXplX3Qgc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgbnVt
U3Vic2FtcGxlczsKKworICAgICAgICBib29sIGlzU3Vic2FtcGxlZCgpIGNvbnN0IHsgcmV0dXJu
IG51bVN1YnNhbXBsZXM7IH0KKyAgICB9OworCisgICAgLy8gRklYTUU6IFVuY29uZGl0aW9uYWwg
aW4tcGxhY2UgZGVjcnlwdGlvbi4gV2hhdCBhYm91dCBTVlA/CisgICAgLy8gRklYTUU6IEdTdHJl
YW1lci1zcGVjaWZpYywgaW4gdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBzdWJzYW1wbGUKKyAgICAv
LyBkYXRhIGlzIGRlZmluZWQgYnkgd2hhdGV2ZXIgcXRkZW11eCBkZWNpZGVzIHRvIGRvIHdpdGgg
aXQuCisgICAgYm9vbCBjZW5jRGVjcnlwdChjZW5jRGVjcnlwdENvbnRleHQmKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGluaXRpYWxpemVHY3J5cHQoKTsKKworICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIG9ubHkgc3VwcG9ydCBBRVMgaW4gQ1RSIG1vZGUsIGluIHRoZSBmdXR1cmUKKyAgICAvLyB3
ZSB3aWxsIHN1cmVseSBoYXZlIHRvIHN1cHBvcnQgbW9yZSBwcm90ZWN0aW9uIHNjaGVtZXMuIENh
biB3ZQorICAgIC8vIHJldXNlIHNvbWUgQ3J5cHRvIEFQSXMgaW4gV2ViQ29yZT8KKyAgICBib29s
IGNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJv
b2wgY2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAg
Ym9vbCBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisgICAgYm9v
bCBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRoaW5nIGluIFdlYkNvcmUgZm9yIGNy
eXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5SGFuZGxlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJl
YW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFhZTdjMGU5MzRhOS4u
NTgzZjI2MTg2YWRmOGI3ODdiYjkzMzY3OTcxNmIwNDgzZjFkMmZlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAK
QEAgLTI1LDYgKzI1LDcgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NU
UkVBTUVSKQogCiAjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRlICJDRE1Qcm94eUNs
ZWFyS2V5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8Z2NyeXB0Lmg+CkBAIC0zNywxMiArMzgsMTEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmop
LCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUgewot
ICAgIFJlZlB0cjxQcm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBnY3J5X2NpcGhlcl9o
ZF90IGhhbmRsZTsKKyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gY2RtUHJveHk7CiB9Owog
CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9vbCBoYW5kbGVLZXlS
ZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBSZWZQdHI8
UHJveHlDRE0+KTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7CiBzdGF0aWMgYm9v
bCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIq
IGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5zaWduZWQgc3ViU2Ft
cGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVCVUdfQ0FURUdPUllf
U1RBVElDKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19jYXRlZ29yeSk7CkBA
IC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlw
dF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdFQktJVF9NRURJQV9D
RU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJvdGVjdGlvblN5c3Rl
bUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsKLSAgICBjZW5jQ2xh
c3MtPmhhbmRsZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFuZGxlS2V5UmVzcG9u
c2UpOworICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9ERUJVR19GVU5DUFRS
KGNkbVByb3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9IEdTVF9ERUJVR19G
VU5DUFRSKGRlY3J5cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBz
aXplb2YoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBAIC05Myw2MSArOTMs
MzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0X2NsYXNzX2lu
aXQoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9j
bGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0KiBzZWxmKQog
ewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9N
RURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2VsZi0+cHJpdiA9IHBy
aXY7CiAgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsK
LSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmKHByaXYtPmhh
bmRsZSksIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9DVFIsIEdDUllfQ0lQ
SEVSX1NFQ1VSRSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IGNyZWF0ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJv
cikpOwotICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dCogc2VsZiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAgICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsKLSAgICBnY3J5X2Np
cGhlcl9jbG9zZShwcml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdFByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywg
ZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9uc2Uo
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5Q0RN
PiBwcm94eUNETSkKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBjZG1Qcm94eSkKIHsK
ICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7
Ci0gICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5Q0RNQ2xlYXJLZXkq
Pihwcm94eUNETS5nZXQoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOworICAgIHByaXYt
PmNkbVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5Kj4oY2RtUHJveHku
Z2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKIH0KIAotc3RhdGljIGJvb2wgZmlu
ZEFuZFNldEtleShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYsIGNvbnN0
IFN0cmluZyYmIGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtl
eUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2FtcGxlQ291bnQsIEdz
dEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5VmFsdWU7Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29sYXRlZEtleXMoKSkg
ewotICAgICAgICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAgICAgICAgICAga2V5
VmFsdWUgPSBrZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1QocHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBrZXkiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1ZS5zaXplSW5CeXRl
cygpID09IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5
X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0ZXJzOCgpLCBrZXlW
YWx1ZS5zaXplSW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJn
Y3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgV2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwogCi1zdGF0
aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYs
IEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIsIEdzdEJ1ZmZlciog
YnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVm
ZmVyKQotewotICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAibm8gSVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAha2V5SURCdWZmZXIg
fHwgIWJ1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJpbnZhbGlkIGRl
Y3J5cHQoKSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MTU3LDI3ICsxMjgsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0laRV07Ci0gICAgaWYg
KG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1zZXQoY3RyICsgOCwg
MCwgOCk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5kYXRhKCksIDgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IENM
RUFSS0VZX1NJWkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgp
LCBDTEVBUktFWV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJL
SVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90IGNpcGhlckVycm9y
ID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVBUktFWV9TSVpFKTsK
LSAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
Z2NyeV9jaXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3Ip
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghYnVmZmVyKSB7Ci0g
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBkZWNyeXB0Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBlZEtleUlkQnVmZmVy
ID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIsIEdTVF9NQVBf
UkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKQEAgLTE5MCw3MiAr
MTQwLDI5IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBwZWRLZXlJZEJ1ZmZl
ci0+ZGF0YSgpLCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwotCi0gICAgaWYgKCFz
dWJTYW1wbGVDb3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNyeXB0aW9uLgotICAg
ICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9uOiAlenUg
ZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0gICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNp
emUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHBy
aXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAw
LCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIs
IGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwuCi0gICAgaWYgKCFz
dWJTYW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkVycm9y
LCB0aGUgc3ViU2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1dG8gbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YlNhbXBs
ZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJTYW1wbGVzQnVmZmVy
KSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2Ft
cGxlIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR1VuaXF1
ZVB0cjxHc3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJT
YW1wbGVzQnVmZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOwot
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9z
aXRpb24sIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVzQ2xlYXIgPSAwOwot
ICAgICAgICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAgICAgaWYgKHNhbXBs
ZUluZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVh
ZGVyX2dldF91aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIpCi0gICAgICAgICAg
ICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlci5nZXQoKSwgJm5C
eXRlc0VuY3J5cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJ1bnN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNFbmNyeXB0ZWQgPSBt
YXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NU
X1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFy
ICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6
ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNDbGVhcjsKLSAgICAg
ICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChz
ZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSki
LCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBv
c2l0aW9uKTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChw
cml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24sIG5CeXRlc0VuY3J5
cHRlZCwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4ICV1IGRlY3J5cHRp
b24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwb3NpdGlvbiArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZl
cj4gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVj
cnlwdENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFwcGVkS2V5SWRCdWZm
ZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBtYXBwZWRLZXlJZEJ1
ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGNvbnRleHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5zaXplKCk7CisgICAg
Y29udGV4dC5lbmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250
ZXh0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVyLT5zaXplKCk7Cisg
ICAgY29udGV4dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7CisgICAgaWYgKCFzdWJz
YW1wbGVDb3VudCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbnVsbHB0cjsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIpOworICAgICAgICBt
YXBwZWRTdWJzYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUo
c3Vic2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYgKCFtYXBwZWRTdWJz
YW1wbGVzQnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIgPSBtYXBwZWRTdWJz
YW1wbGVzQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlclNp
emVJbkJ5dGVzID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwogICAgIH0KIAotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eS0+Y2VuY0RlY3J5cHQoY29u
dGV4dCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4M2QwNDc0ODYwZjZl
ZjgxN2YzMWNkYzE1ZTQ4YWMxODZjMDM0NC4uNDdiNTYwZjczOTIwOWRjMmExNjI0NGMwNzk4MDM3
NDdjMzA0MTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0yNSwzNCArMjUs
MzQgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShHU1RSRUFNRVIpCiAK
KyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2lu
Y2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQcm94eUNETTsKK3Vz
aW5nIFdlYkNvcmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZ
UFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBX
RUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdFByaXZhdGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rpb25FdmVudDsKLSAg
ICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVjZWl2ZWQgeyBmYWxz
ZSB9OwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAgTG9jayBtdXRleDsK
LSAgICBDb25kaXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHk7
CisKKyAgICBMb2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRpb24gY2RtQXR0YWNo
bWVudENvbmRpdGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhTZWNvbmRz
VG9XYWl0Rm9yQ0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBj
aGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7CiBzdGF0
aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2FwcyogdHJhbnNmb3JtQ2Fw
cyhHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBzKiwgR3N0Q2Fwcyop
Owogc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3Jt
KiwgR3N0QnVmZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNl
VHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0
QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsKLXN0YXRpYyBib29s
IGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCopOwogc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0Q29udGV4dCopOwog
Ci0KIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0
aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkKIApAQCAt
NzYsNyArNzYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9uX2VuY3J5cHRpb25f
ZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJhc2VUcmFuc2Zvcm1D
bGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFuc2Zvcm1DYXBzKTsK
ICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZB
TFNFOwogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5D
UFRSKHNpbmtFdmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+cXVlcnkgPSBH
U1RfREVCVUdfRlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUpKTsKIH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRy
YW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIp
CiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKHNlbGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKIAotICAg
IC8vIFRoZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQuIFdhaXQgZm9yIGl0
LgotICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBpdCIpOwotICAgICAg
ICBpZiAoR1NUX1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFURV9QQVVTRUQgfHwg
KEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9TVEFURV9WT0lEX1BF
TkRJTkcgJiYgR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVf
UEFVU0VEKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiY2FuJ3QgcHJv
Y2VzcyBrZXkgcmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIpOwotICAgICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
U2VuZCAiZHJtLWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhlIHBsYXllciB0byBy
ZXNlbmQgdGhlIENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3JtIHdlIGFyZSB3YWl0
aW5nIGZvciBrZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0cnVlOwotICAgICAg
ICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiksIGdzdF9tZXNzYWdl
X25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJk
cm0td2FpdGluZy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1B
dHRhY2htZW50TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53YWl0Rm9yKHByaXYt
Pm11dGV4LCBTZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0dXJuIHByaXYtPmtl
eVJlY2VpdmVkOworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8gYmUgbmVnb3RpYXRl
ZCBiZWZvcmUgd2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFwcml2LT5jZG1Qcm94
eSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90IGF2YWlsYWJsZSwg
Z29pbmcgdG8gd2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0YWNobWVudENvbmRp
dGlvbi53YWl0Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vjb25kc1RvV2FpdEZv
ckNETVByb3h5LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYtPmNkbVByb3h5Owog
ICAgICAgICB9KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkgewotICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAg
aWYgKCFwcml2LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiQ0RNUHJveHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAgICAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0gICAgICAgIHByaXYt
PndhaXRpbmdGb3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdl
KEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNl
bGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZlZCIpKSk7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxlIHdpdGggYWRkcmVz
cyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBHc3RQcm90ZWN0aW9u
TWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFByb3RlY3Rpb25NZXRh
Kj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpAQCAtMjA3LDMyICsx
OTcsMzAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJh
bnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRhIGZyb20gYnVmZmVy
ICVwIiwgYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAg
ICAgfQorICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9IG1ha2VTY29wZUV4
aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7
CisgICAgfSk7CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFnc3Rfc3RydWN0dXJl
X2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZpdlNpemUpKSB7CiAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgaXZfc2l6ZSIpOwot
ICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxH
c3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwogICAgIGlmICghZ3N0
X3N0cnVjdHVyZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywgImVuY3J5cHRlZCIs
ICZlbmNyeXB0ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0
byBnZXQgZW5jcnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAotICAgIGlmICghaXZT
aXplIHx8ICFlbmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CisgICAgaWYg
KCFpdlNpemUgfHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAg
IH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24gbWV0YTogJSIgR1NU
X1BUUl9GT1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVuc2lnbmVkIHN1YlNh
bXBsZUNvdW50OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0
YS0+aW5mbywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkpIHsKICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVfY291bnQiKTsK
LSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3RhdGljIEdzdEZsb3dS
ZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIq
IGJ1ZmZlcikKICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0
aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1wbGVz
Iik7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1YlNhbXBsZXNCdWZm
ZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlmICghc3ViU2FtcGxl
c0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiVGhlcmUgaXMg
bm8gc3Vic2FtcGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBsZSBjb3VudCIpOwor
ICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHByb3RlY3Rpb25NZXRh
LT5pbmZvLCAia2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIiKTsKLSAgICAgICAg
Z3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+
KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OwogICAgIH0KICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZm
ZXIodmFsdWUpOwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5z
Zm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAg
ICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywg
Iml2Iik7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJGYWlsZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1v
dmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRh
KSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAt
MjcwLDcxICsyNTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShH
c3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+ZGVjcnlwdChzZWxm
LCBpdkJ1ZmZlciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291bnQsIHN1YlNhbXBs
ZXNCdWZmZXIpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkRlY3J5cHRpb24g
ZmFpbGVkIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVy
cHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRh
KGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAg
ICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFp
bGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3N0YXRpYyBi
b29sIGlzQ0RNUHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAg
IHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2LT5tdXRleC5pc0xv
Y2tlZCgpKTsKLQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdT
VF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAgICAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmluZCB0aGUg
Y29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4gdXBzdHJl
YW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBj
YXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAg
KHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNv
bHZlIGl0LiBBIG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1bCBidXQgdGhlIHBs
YXllciBzZXRzIHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUgQ0RNSW5zdGFuY2Ug
YW5kIGlmIGl0IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9mIGFza2luZyBmb3Ig
b25lIGFzIGl0IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRm
b3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUg
YnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmll
cyBub3IgYnVzCi0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KLSAgICAgICAg
aWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3Ry
dWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkp
LCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNETSA9IHZhbHVlID8g
cmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6
IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0gICAgICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3Rh
bmNlICVwLCByZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBwcml2LT5wcm94eUNE
TS0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIpOworc3RhdGljIENE
TVByb3h5KiBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJt
LWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkgPSBudWxscHRyOworCisgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRoZW4gYW4g
dXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAgICAvLyBtZXNzYWdlLiBJbiB0aGlz
IGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNlIG9ubHkgdGhlIGFw
cCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkgaXMgZ29pbmcgdG8g
c29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5
ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFu
ZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9u
ZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9zc3BsYXRmb3JtIGNv
ZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dlciB0aGUgYnVzIHJl
cXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIgcXVlcmllcyBub3Ig
YnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgorICAgIGlmIChjb250ZXh0KSB7
CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShn
c3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2RtLXByb3h5Iik7Cisg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJveHkgPSByZWludGVycHJldF9jYXN0
PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICAgICAgaWYg
KHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2
ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByb3h5LCBwcm94
eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OworICAgICAgICAg
ICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5
IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAgICB9Ci0KLSAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZhaWxhYmxlICVzIiwgYm9vbEZvclByaW50aW5n
KHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RNOworICAg
IHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihH
c3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQorc3RhdGljIHZvaWQgYXR0
YWNoQ0RNUHJveHkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgQ0RN
UHJveHkqIHByb3h5KQogewotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKICAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5D
X0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX0NM
QVNTKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCi0gICAgc3dpdGNoIChH
U1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNU
UkVBTV9PT0I6IHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTEzNTUKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHBy
b3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KLSAgICAgICAgLy8gYWRkaXRpb24gdG8g
b3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQotICAgICAgICAv
LyBwcmVmZXJyZWQgc3lzdGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0dXJlIHByb3RlY3Rp
b24KLSAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIs
IHNvIHRoZSBtdXN0IGJlCi0gICAgICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBpZiAoIWlzQ0RNSW5zdGFuY2VB
dmFpbGFibGUoc2VsZikpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5v
IENETSBpbnN0YW5jZSBhdmFpbGFibGUiKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBy
aXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiQXR0
YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHByaXYtPmNkbVByb3h5ID0gcHJveHk7
CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkpOworICAg
IHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICghaXNDRE1Qcm94eUF2YWlsYWJsZShz
ZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKworICAgICAgICBDRE1Q
cm94eSogcHJveHkgPSBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KHNlbGYpOworICAgICAgICBp
ZiAocHJveHkpIHsKKyAgICAgICAgICAgIGF0dGFjaENETVByb3h5KHNlbGYsIHByb3h5KTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gcmV0cmlldmUgQ0RNUHJveHkgZnJvbSBj
b250ZXh0Iik7CiAgICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0gICAgICAgIGlm
IChrbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlDRE0pKSB7Ci0gICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQiKTsKLSAgICAgICAg
ICAgIHByaXYtPmtleVJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHByaXYtPmNvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKLSAgICAgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZl
bnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBGQUxTRTsKIAorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkxMzU1CisgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRsaW5nIHByb3RlY3Rp
b24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KKyAgICAvLyBhZGRpdGlvbiB0byBvdXQtb2YtYmFu
ZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCisgICAgLy8gcHJlZmVycmVkIHN5
c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCisgICAgLy8gZXZl
bnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRoZXkgbXVzdCBiZQor
ICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50
KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjogeworICAgICAg
ICBBU1NFUlQoZ3N0X2V2ZW50X2hhc19uYW1lKGV2ZW50LCAiYXR0ZW1wdC10by1kZWNyeXB0Iikp
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJIYW5kbGluZyBhdHRlbXB0LXRvLWRl
Y3J5cHQiKTsKKyAgICAgICAgcmVzdWx0ID0gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUo
c2VsZik7CiAgICAgICAgIGdzdF9ldmVudF91bnJlZihldmVudCk7Ci0gICAgICAgIHJlc3VsdCA9
IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMzQ1LDE2ICsz
NTQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3Jt
KiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRp
YyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdFBhZERp
cmVjdGlvbiBkaXJlY3Rpb24sIEdzdFF1ZXJ5KiBxdWVyeSkKLXsKLSAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9oYXNfbmFtZShnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZShxdWVyeSksICJhbnktZGVjcnlw
dG9yLXdhaXRpbmctZm9yLWtleSIpKSB7Ci0gICAgICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
UFJJVkFURSh0cmFucyk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QodHJhbnMsICJhbnktZGVj
cnlwdG9yLXdhaXRpbmctZm9yLWtleSBxdWVyeSwgd2FpdGluZ2ZvcmtleSAlcyIsIGJvb2xGb3JQ
cmludGluZyhwcml2LT53YWl0aW5nRm9yS2V5KSk7Ci0gICAgICAgIHJldHVybiBwcml2LT53YWl0
aW5nRm9yS2V5OwotICAgIH0KLSAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTKHBh
cmVudF9jbGFzcyktPnF1ZXJ5KHRyYW5zLCBkaXJlY3Rpb24sIHF1ZXJ5KTsKLX0KLQogc3RhdGlj
IEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdz
dFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CkBA
IC0zNjMsNyArMzYyLDcgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRl
KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW4KICAgICBzd2l0Y2ggKHRy
YW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgog
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZIik7Ci0gICAgICAg
IHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0YWNobWVu
dENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CkBAIC0zODAsMTIgKzM3OSwxNCBAQCBzdGF0aWMgdm9pZCBzZXRDb250ZXh0
KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFQoZWxlbWVudCk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYp
OworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKIAotICAgIGlmIChnc3Rf
Y29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLWluc3RhbmNlIikpIHsK
LSAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKGdz
dF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0taW5zdGFuY2UiKTsKLSAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBwcml2LT5wcm94eUNE
TSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50
ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJl
Y2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPnByb3h5Q0RNLmdldCgpKTsKKyAgICBp
ZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1wcm94eSIp
KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLXByb3h5Iik7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAg
IHByaXYtPmNkbVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192
YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJpdi0+Y2RtUHJveHku
Z2V0KCkpOworICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxmLCBwcml2LT5jZG1Q
cm94eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgK
aW5kZXggMDY1MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1ZC4uODU3NWEwNzEw
MmJkMTMzZjkyNWRlMWEwN2FkYzkyMmM3YTA1ODQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVy
LmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVT
RShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2luY2x1ZGUgPENETVBy
b3h5Lmg+CiAjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgogI2luY2x1ZGUg
PGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw4ICs1NSw4IEBAIHN0
cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzIHsKICAgICBHc3RC
YXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBjaGFyKiBwcm90ZWN0
aW9uU3lzdGVtSWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5Q0RNPik7Ci0gICAg
Ym9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RC
dWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZl
ciwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXNCdWZmZXIp
OworICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5Pik7CisgICAgYm9vbCAoKmRlY3J5
cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVm
ZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQg
c3Vic2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpOwogfTsKIAogR19F
TkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rv
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKaW5kZXgg
YjMyYjVhMDE2ODQ1NWRlY2U5OTVkNTZhNmI0MzRlOGRkNGZiZTY4MS4uY2U1ZDhmN2Q2YmRmMzhi
NTkyMjA5MzAyYTZlNmQ3MWIzNjk2NjMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNRmFjdG9yeS5jcHAKQEAgLTIyNiw4ICsyMjYsNiBAQCBPcHRpb25hbDxTdHJpbmc+IE1vY2tD
RE06OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKSBjb25zdAogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVByb3h5Q0RNTW9jazo6flByb3h5Q0RNTW9jaygp
ID0gZGVmYXVsdDsKLQogTW9ja0NETUluc3RhbmNlOjpNb2NrQ0RNSW5zdGFuY2UoV2Vha1B0cjxN
b2NrQ0RNPiBjZG0pCiAgICAgOiBtX2NkbShjZG0pCiB7CkBAIC0yOTYsMTEgKzI5NCw2IEBAIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IE1vY2tDRE1JbnN0YW5jZTo6Y3JlYXRlU2Vzc2lvbigp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uKG1ha2VXZWFr
UHRyKCp0aGlzKSkpOwogfQogCi1SZWZQdHI8UHJveHlDRE0+IE1vY2tDRE1JbnN0YW5jZTo6cHJv
eHlDRE0oKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJveHlDRE1Nb2NrKCkp
OwotfQotCiBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uKFdl
YWtQdHI8TW9ja0NETUluc3RhbmNlPiYmIGluc3RhbmNlKQogICAgIDogbV9pbnN0YW5jZShXVEZN
b3ZlKGluc3RhbmNlKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9j
a0NETUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApp
bmRleCBkN2U2NmU2MDE2ZDEwMTc4MTJlYWZhOGM4MGI0N2Q0NzI4MzUwY2QxLi4zOTkwOWI5MzAz
YTk0YzkzNjhlYWEwZjYyNWY0YjY3ZTUyNTA1OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9N
b2NrQ0RNRmFjdG9yeS5oCkBAIC05OSwxMSArOTksNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX3Nlc3Npb25zOwogfTsKIAotY2xh
c3MgUHJveHlDRE1Nb2NrIGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5Qcm94eUNETU1vY2soKTsKLX07Ci0KIGNsYXNzIE1vY2tDRE0gOiBwdWJsaWMgQ0RN
UHJpdmF0ZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1vY2tDRE0+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE1MCw3ICsxNDUsNiBAQCBwcml2YXRlOgogICAg
IFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwog
ICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPENE
TUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotICAgIFJlZlB0cjxQcm94
eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbDsKIAogICAgIFdlYWtQdHI8TW9ja0NETT4gbV9j
ZG07CiAgICAgYm9vbCBtX2Rpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkIHsgdHJ1ZSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390377</attachid>
            <date>2020-02-11 09:50:16 -0800</date>
            <delta_ts>2020-02-11 11:24:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211175014.patch</filename>
            <type>text/plain</type>
            <size>114510</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uOGZiNzI4NDRkMjIyODA1MmNhM2VlMmZhMjhjNDlh
OTE0ZDkwNjI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKworICAgICAgICBbRU1FXVtHU3RyZWFt
ZXJdIEludHJvZHVjZSBDRE1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2NzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW50cm9kdWNlIGEgbmV3IHN1YmNsYXNzIG9mIENETUluc3RhbmNlLCBD
RE1Qcm94eUluc3RhbmNlLgorCisgICAgICAgIENETUluc3RhbmNlIGlzIGEgbWFpbi10aHJlYWQg
b25seSBjbGFzcywgaXRzIHB1cnBvc2UgaXMgdG8gcHJvdmlkZQorICAgICAgICBhbiBpbnRlcmZh
Y2UgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIEphdmFTY3JpcHQgRU1FIEFQSXMsIHdoaWNoIGJ5Cisg
ICAgICAgIGRlc2lnbiwgZG9uJ3QgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aCBhIHJlYWwgRFJNIHN5
c3RlbSwgd2hhdCBtaWdodAorICAgICAgICBhbHNvIGJlIGNhbGxlZCAiVGhlIENETSBJbnN0YW5j
ZSIuIFRoYXQncyB3aHkgdGhlIG5hbWluZyBpcworICAgICAgICBtaXNsZWFkaW5nIGhlcmUsIENE
TUluc3RhbmNlIGlzbid0IGFjdHVhbGx5IGFuIGluc3RhbmNlIG9mIGEgcmVhbAorICAgICAgICBD
RE0sIHJhdGhlciBpdCBpcyBhIGZhY2FkZSBmb3IgSmF2YVNjcmlwdC4KKworICAgICAgICBDRE1Q
cm94eUluc3RhbmNlIGlzIGEgc3ViLWNsYXNzIHdoaWNoIHByb3ZpZGVzIHR3byBBUElzLAorICAg
ICAgICAxLyBGb3IgYmFja2dyb3VuZCBtZWRpYSB0aHJlYWRzIHRvIHNhZmVseSBpbnRlcnJvZ2F0
ZSB0aGUgc3RhdHVzCisgICAgICAgIG9mIGtleXMgYW5kIHRvIHBlcmZvcm0gZGVjcnlwdGlvbiB1
c2luZyBzYWlkIGtleXMuIFRoaXMgQVBJIGlzCisgICAgICAgIGV4cG9zZWQgYnkgQ0RNUHJveHkg
YW5kIGlzIHBsYXRmb3JtIHNwZWNpZmljLgorICAgICAgICAyLyBGb3IgbWVkaWEgcGxheWVycyB0
byBzYWZlbHkgYXNzZXNzIHRoZSBzdGF0ZSBvZiBkZWNyeXB0b3JzIGFuZAorICAgICAgICB3aGF0
IHRoZWlyIHN0YXR1cyBpcy4KKworICAgICAgICBDRE1Qcm94eSBleGlzdHMgdG8gYWxsb3cgdGhy
ZWFkLXNhZmUgYWNjZXNzIHRvIGEgcmVhbCBDRE0sIGFsb25nCisgICAgICAgIHdpdGggdGhlaXIg
cXVpcmtzLiBUaGUgdHdvIG1haW4gcHJvYmxlbXMgR1RLIGludGVncmF0b3JzIG9mIGEgQ0RNCisg
ICAgICAgIGhhdmUgaW4gV2ViS2l0IGlzIGtleSBtYW5hZ2VtZW50IGFuZCBDRE0gYWNjZXNzIGZy
b20gYmFja2dyb3VuZAorICAgICAgICBtZWRpYSB0aHJlYWRzLgorCisgICAgICAgIEtleSBtYW5h
Z2VtZW50IGlzIGhvdyB0byBtYW5hZ2UgdGhlIHN0YXRlIG9mIGtleXMgaW4gYSB3YXkKKyAgICAg
ICAgY29oZXJlbnQgd2l0aCBKYXZhU2NyaXB0LCB0aGUgY3Jvc3MtcGxhdGZvcm0gRU1FIGltcGxl
bWVudGF0aW9uLAorICAgICAgICB0aGUgcmVhbCBDRE1zIHRoZW1zZWx2ZXMsIGFuZCB0aGUgYmFj
a2dyb3VuZCBtZWRpYQorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSBwcm92aWRlcyBhIGRlZmF1
bHQga2V5IHN0b3JlIGludGVyZmFjZSBmb3IKKyAgICAgICAgc3ViLWNsYXNzZXMuIFN1Yi1jbGFz
c2VzIGNhbiwgb24gcmVjZWlwdCBvZiBuZXcgaW5mb3JtYXRpb24gZnJvbSBhCisgICAgICAgIHJl
YWwgQ0RNLCB0ZWxsIENETVByb3h5IGFib3V0IHRoZSBrZXlzIGFuZCB0aGVpcgorICAgICAgICBz
dGF0dXNlcy4gQ0RNUHJveHkgaXMgaW50ZW5kZWQgdG8gRG8gVGhlIFJpZ2h0IFRoaW5nIGZyb20g
dGhlcmUsCisgICAgICAgIGxldHRpbmcgSmF2YVNjcmlwdCBhbmQgV2ViQ29yZSBrbm93IGFsbCB0
aGUgZGV0YWlscyB0aGV5IG5lZWQgdG8KKyAgICAgICAgYWJvdXQgdGhlIG5ldyBzdGF0ZSwgYXMg
d2VsbCBhcyB0aGUgbWVkaWEgZGVjb2RlIHRocmVhZHMgd2hlbiB0aGV5CisgICAgICAgIG5leHQg
Y29tZSBhc2tpbmcuCisKKyAgICAgICAgQWNjZXNzIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIGlz
IGlsbC1hZHZpc2VkIHdoZW4gdXNpbmcgdGhlCisgICAgICAgIHRocmVhZC11bnNhZmUgQ0RNSW5z
dGFuY2UuIFdlIHVzZWQgdG8gZ2V0IGF3YXkgd2l0aCBkb2luZyBleGFjdGx5CisgICAgICAgIHRo
aXMsIGJ1dCBXZWJDb3JlIHJlY2VudGx5IGJlY2FtZSBtb3JlIGRpbGlnZW50IGFib3V0CisgICAg
ICAgIHRocmVhZC11bnNhZmUgYWNjZXNzIG9mIG1haW4tdGhyZWFkLW9ubHkgZGF0YSwgYW5kIHdl
IGhhZCB0byBkbworICAgICAgICBzb21ldGhpbmcgdG8gZml4IHRoZSBhc3NlcnRzLiBUaGF0IHNv
bWV0aGluZyB3YXMgUHJveHlDRE0gKGEKKyAgICAgICAgdGVycmlibGUgbmFtZSwgcmVtb3ZlZCBu
b3cpLCB3aGljaCB3YXMgYSBoYWNrIGFuZCBwbGVhc2UgZm9yZ2V0CisgICAgICAgIGFib3V0IGl0
LiBDRE1Qcm94eSBjYW4gYmUgc2FmZWx5IHBhc3NlZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMsIGFu
ZAorICAgICAgICBpdCB3aWxsIGJ5IGRlZmF1bHQgcHJvdmlkZSBhIHRocmVhZC1zYWZlIHZpZXcg
b2YgdGhlIGtleSBzdG9yZSBmb3IKKyAgICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHRvIGludGVy
cm9nYXRlIHRoZSBrZXkgc3RvcmUgYW5kIHBlcmZvcm0KKyAgICAgICAgQ0RNLXNwZWNpZmljIGRl
Y3J5cHRpb24gLyBkZWNvZGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIENETVBy
b3h5IHRvIGJ1aWxkCisgICAgICAgIGRlZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlOiBBZGQgQ0RNUHJveHkgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24gZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNSW5zdGFuY2UuaDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gb2xkCisgICAgICAgIFByb3h5
Q0RNIHNoaW0uIFRoaXMgYXBwcm9hY2ggd2FzIGEgdGVtcG9yYXJ5IGhhY2sgdG8gYXZvaWQgc29t
ZQorICAgICAgICB0aHJlYWQtc2FmZXR5IGFzc2VydHMuIEkgdG9vayB0aGUgbGliZXJ0eSBvZiBy
ZW5hbWluZyB0byBDRE1Qcm94eSwKKyAgICAgICAgZm9yIG5vIG90aGVyIHJlYXNvbiB0aGF0IGl0
IGZlbHQgbGlrZSBhIGJldHRlciBuYW1lLCBzb3JyeSBmb3IgdGhlCisgICAgICAgIGNvbmZ1c2lv
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZEFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OktleTo6dmFsdWVBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlT
dG9yZTo6Y29udGFpbnNLZXlJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmFsbEtleXNBc1JlbGVhc2VkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphZGRLZXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OktleVN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92
ZUFsbEtleXNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmtleVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OktleVN0b3JlOjpjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJveHk6OnNldEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlW
YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdG
b3JLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Ojp0cnlXYWl0Rm9yS2V5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpnZXRPcldhaXRGb3JLZXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6bWVyZ2VLZXlzRnJvbSk6
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbSk6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpLZXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6Omlk
QXNTaGFyZWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjppZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleTo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpzdGF0dXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6
YWRkU2Vzc2lvblJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OnJlbW92ZVNlc3Np
b25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpudW1TZXNzaW9uUmVmZXJlbmNl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6OktleSk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmVtb3ZlQWxsS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6
bnVtS2V5cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmVuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OktleVN0b3JlOjpyYmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbmQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6c2V0UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VQcm94eTo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5z
dGFuY2VQcm94eTo6aXNXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNE
TUluc3RhbmNlUHJveHk6OnNldFBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVByb3h5Ojp0cmFja1Nlc3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5z
ZUZvcm1hdCk6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldyBLZXkgY2xhc3MuCisgICAgICAgIChXZWJD
b3JlOjpleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKTogUmVmYWN0b3JlZCB0
bworICAgICAgICB1c2UgYmV0dGVyIG5hbWVkIGNvbnN0YW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVhdGVTZXNzaW9uKTogVXNlIHRoZQorICAgICAgICB0
cmFja1Nlc3Npb24gbWV0aG9kIHRvIGFsbG93IGVhc2llciBtb25pdG9yaW5nIG9mIGFsbCBFTUUK
KyAgICAgICAgc2Vzc2lvbnMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVxdWVzdExpY2Vuc2UpOiBSZWZhY3RvciB0bworICAgICAgICBrZWVwIHRyYWNr
IG9mIGdlbmVyYXRlZCBzZXNzaW9uIElEcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAgdXNl
IG5ldyBrZXkgbWFuYWdlbWVudCBjbGFzc2VzLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OmxvYWRTZXNzaW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OmtleXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omlzb2xhdGVkS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByb3h5
Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpDRE1JbnN0YW5jZUNsZWFyS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmlu
ZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5
OjpLZXk6OmtleVZhbHVlQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOiBE
ZWxldGVkLiBJdCBsb29rcyBsaWtlIHdlIHdlcmUgdW5uZWNlc3NhcmlseQorICAgICAgICBzb3J0
aW5nIHRoZSBrZXkgdmVjdG9ycy4gSXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBpbXBvc2Ug
YW4KKyAgICAgICAgb3JkZXJpbmcgb24ga2V5cywgc28gSSByZW1vdmVkIGl0LgorICAgICAgICAq
IHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6IFJlZmFjdG9y
IHRvIHVzZQorICAgICAgICBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5oOgorICAgICAgICBSZW1vdmUgb2Jzb2xldGUgUHJveHlDRE0gbWV0aG9k
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKToKKyAgICAgICAgUmVm
YWN0b3JlZCBvdXQgb2Ygc3luY01lc3NhZ2UuIFRoZSBjb2RlIHdhcyBtb3ZlZCBoZXJlIGFuZCBp
bnRvCisgICAgICAgIHdhaXRGb3JDRE1BdHRhY2htZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCk6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOiBSZW1vdmUKKyAgICAgICAgd2FpdGluZy1mb3Ita2V5
IGNvZGUsIGl0IHdhcyBhbGwgYnJva2VuIGFueXdheS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZCk6CisgICAgICAgIEVu
Zm9yY2UgdXNlIG9mIENETUluc3RhbmNlUHJveHksIGFsbCBHU3RyZWFtZXItYmFzZWQgcG9ydHMg
d2lsbCBiZQorICAgICAgICB1c2luZyB0aGUgQ0RNUHJveHkgZGVyaXZlZCBjbGFzc2VzIGZyb20g
YmFja2dyb3VuZAorICAgICAgICB0aHJlYWRzLiBDRE1Qcm94eSdzIG5lZWQgYSBoYW5kbGUgdG8g
dGhlIE1lZGlhUGxheWVyIGZvcgorICAgICAgICB3YWl0aW5nRm9yS2V5IG1hbmFnZW1lbnQsIHNv
IHdpcmUgdGhhdCBpbiBoZXJlIHRvby4gQWxzbyB3aXJlIHRoZQorICAgICAgICBHU3RyZWFtZXIg
c3BlY2lmaWMgQ2xlYXJLZXkgcHJveHkgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOiBL
ZXkKKyAgICAgICAgc3RhdHVzIG5vdGlmaWNhdGlvbnMgYXJlIHRoZSByZXNwb25zaWJpbGl0eSBv
ZiB0aGUgQ0RNUHJveHkgbm93LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6IE5vdwor
ICAgICAgICB3ZSB1c2UgQ0RNSW5zdGFuY2VQcm94eSwgbm90IENETUluc3RhbmNlLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHA6
CisgICAgICAgIEFkZGVkLiBHKi1zcGVjaWZpYyBDbGVhcktleSBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXREZWNyeXB0aW9uS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdFN1
YnNhbXBsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5
cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlw
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNs
ZWFyS2V5Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICBSZWZhY3Rv
ciB0byB1c2UgQ0RNUHJveHkuCisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5
cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
aW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAgICAgIChjZG1Qcm94eUF0dGFjaGVkKToK
KyAgICAgICAgKGRlY3J5cHQpOgorICAgICAgICAoaGFuZGxlS2V5UmVzcG9uc2UpOiBEZWxldGVk
LiBUaGlzIHdhcyBhIGJhZGx5IG5hbWVkIG1ldGhvZCB0aGF0CisgICAgICAgIGhhcyBiZWVuIGNo
YW5nZWQgdG8gY2RtUHJveHlBdHRhY2hlZC4KKyAgICAgICAgKGZpbmRBbmRTZXRLZXkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHA6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfY29tbW9uX2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KToKKyAgICAgICAgKHRyYW5z
Zm9ybUluUGxhY2UpOgorICAgICAgICAoaXNDRE1Qcm94eUF2YWlsYWJsZSk6CisgICAgICAgIChn
ZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KToKKyAgICAgICAgKGF0dGFjaENETVByb3h5KToKKyAg
ICAgICAgKGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKToKKyAgICAgICAgKHNpbmtFdmVu
dEhhbmRsZXIpOgorICAgICAgICAoY2hhbmdlU3RhdGUpOgorICAgICAgICAoc2V0Q29udGV4dCk6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNDRE1JbnN0YW5jZUF2YWlsYWJsZSk6
IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0NETUluc3RhbmNlOjpwcm94eUNETSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oOgorCiAyMDIwLTAyLTA3ICB5
b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYW5kYXRlIFVVSUQg
dmVyc2lvbiA0IGZvciBtRE5TIElDRSBjYW5kaWRhdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQx
ODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFj
ZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0QTVEMDFGNzFDQjZCMDBG
NTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDk0
QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyogQ0RNUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1l
ZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1NZWRp
YUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcx
Q0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5
NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUy
NUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1
MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVD
NSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENE
TVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHku
aCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAq
LywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8s
CiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFj
Yzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRh
YTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAt
MTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkKICAgICApCiAKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdj
YzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMx
NGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcgKzM5LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5j
ZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwg
bm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNlZAotLy8gZnJvbSBiYWNr
Z3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQcm94eUNETSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtleVN5c3RlbUNvbmZpZ3Vy
YXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBi
ZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1
Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpID0gMDsKICAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7CiAKICAgICBlbnVtIGNs
YXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODE5
NWJjN2Y2NDRmZjk3ODM5Mjk0ZWU5ZTE3N2U0YWI2NzhkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5jcHAKQEAgLTAs
MCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNETVByb3h5
LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hleFN0cmluZyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBLZXk6OmlkQXNTdHJpbmco
KSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmco
bV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV92YWx1ZSksICJd
Iik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICByZXR1cm4gKnN0b3JlZEtl
eSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQorCit2b2lkIEtleVN0b3Jl
OjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0b3JlIG9mICV1IGtleXMi
LCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkg
OiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3Qg
YXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAgICAgLy8gaW4gdGhlIGtl
eXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNo
IGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyBleHRyYSBj
b21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJl
ZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0g
V1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQoa2V5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBlbiB3aXRoIERBU0ggcGxh
eWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAgICAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRoZSBzYW1lIElEIGFuZCBk
aWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IHN0b3JlIG5v
dyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBt
X2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5IC0gS2V5IElEOiAlcyIs
IGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRpZiAvLyAhTE9HX0RJU0FC
TEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQoKSBjb25zdAoreworICAg
IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IGNv
bnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRvJiBrZXlTdGF0dXMgOiBr
ZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQgPSBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsK
K30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYgbmV3S2V5
cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92ZShrZXkpKSkKKyAgICAg
ICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpZEtl
eVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVmUHRyPEtleT4mJiBrZXkp
Cit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAgIHNpemVfdCBrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0
cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkgPT0gKnN0b3JlZEtleTsK
KyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90
Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5
V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleVdpdGhN
YXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNhbiB0aGlzIHJlYWxseSBo
YXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5
IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5IHN0b3JlIiwga2V5LT5p
ZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAgICBtX2tleXMuYXBwZW5k
KGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBrZXkt
PmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3RvcmVDaGFuZ2U7Cit9CisK
K3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcikK
K3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAgICAgICByZW1vdmUoa2V5
KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+JiBrZXkpCit7
CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNpemVfdCBrZXlXaXRoTWF0
Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGFuZCAldSBzZXNz
aW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwga2V5LT5u
dW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIGtleVdpdGhN
YXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7CisgICAgICAgIGlmICgha2V5
V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0aCBJRCAlcyIsIGtleVdp
dGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAg
ICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4KTsKKyAgICAgICAgICAg
IHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUga2V5IHdpdGggSUQgJXMg
aWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25zdCBWZWN0b3I8dWludDhf
dD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7CisgICAgICAgIGlmICgq
a2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0IGV4aXN0IHRvIGNhbGwg
dGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitDRE1JbnN0YW5jZVNlc3Np
b246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3Io
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShu
dW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKQorICAgICAgICBr
ZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVy
PiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM+IHsga2V5LT5pZEFzU2hhcmVkQnVmZmVy
KCksIGtleS0+c3RhdHVzKCkgfSk7CisgICAgcmV0dXJuIGtleVN0YXR1c1ZlY3RvcjsKK30KKwor
dm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3Jl
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIG1fa2V5
U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUiKTsKKyAgICBtX2tleXND
b25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnNldEluc3RhbmNlKENE
TUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Cit9CisKK1ZlY3Rv
cjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAg
ICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7CisgICAgcmV0dXJuIG1f
a2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVByb3h5OjpzdGFydGVkV2Fp
dGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2luc3Rh
bmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN0YXJ0ZWQgd2FpdGlu
ZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisgICAgbV9pbnN0YW5jZS0+
c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94eTo6c3RvcHBlZFdhaXRp
bmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5j
ZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBzdG9wcGVkIHdhaXRpbmcg
Zm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0
b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RN
UHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QK
K3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVuY29uZGl0aW9uYWxseSBz
YXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1lYW5zIHRoYXQgZGVjcnlw
dG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5nIGEga2V5LiBJZiBNYXhL
ZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBtb3JlIGNsZWFyIGJ5dGVz
CisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9yS2V5T25SZXR1cm4gPSBt
YWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cisg
ICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5aW5nIHRvIHdhaXQgZm9y
IGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tleVJlY2VpdmVkID0gbV9r
ZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5OjpNYXhLZXlXYWl0VGlt
ZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAgICByZXR1cm4ga2V5QXZh
aWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAod2Fz
S2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gc3VjY2Vz
c2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtleUlEKTsKKyAgICB9Cisg
ICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElEICVzIG5vdCBhdmFpbGFi
bGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWlsYWJsZVVubG9ja2Vk
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fa2V5
U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2YWls
YWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBrZXlBdmFpbGFibGVVbmxv
Y2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gQ0RNUHJveHk6Omdl
dE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAoreworICAg
IGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHRyeVdhaXRGb3JL
ZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShrZXlJRCk7Cit9CisKK3Zv
aWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wgd2FzV2FpdGluZ0Zvcktl
eSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAgIG1fbnVtRGVjcnlwdG9y
c1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1fcGxh
eWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgd2FzV2FpdGlu
Z0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVkV2FpdGluZ0ZvcktleSgp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXllciAmJiBtX251bURlY3J5
cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zvcktl
eS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1fbnVtRGVjcnlwdG9yc1dh
aXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwg
aXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5ZXIgJiYgaXNOb2JvZHlX
YWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5nRm9yS2V5Q2hhbmdlZCgp
OworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20oY29u
c3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBOb3RpZnkgSlMgd2hlbiBh
cHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fa2V5U3RvcmUu
bWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1JbnN0YW5jZVByb3h5IC0g
bWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlmeWluZyBDRE1Qcm94eSBv
ZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAgIG1fY2RtUHJveHktPnVw
ZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpyZW1v
dmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXNGcm9tKGtleVN0b3Jl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNmFkNzkzNzdkYTlhYjJiMjI5MTRmZWFkNDIzOWIw
ZGMyMzVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNETUluc3RhbmNl
LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5PiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM7CisKKyAg
ICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50
OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUoa2V5SUQpLCBXVEZNb3Zl
KGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBpZEFzU2hhcmVkQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUobV9pZC5kYXRhKCksIG1f
aWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUoKSB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0OworICAgIFN0cmluZyB2YWx1
ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBo
YXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KKyAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJu
IGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
S2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJldHVybiBrLm1faWQgPT0g
a2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJRDsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCByZW1vdmVTZXNzaW9uUmVm
ZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNlc3Npb25SZWZlcmVuY2Vz
LS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygpIGNvbnN0IHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVyZW5jZXM7IH0KKyAgICBm
cmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVzIHN0YXR1cywgVmVjdG9y
PHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZhbHVlKQorICAgICAgICA6
IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBtX3ZhbHVlKFdURk1vdmUo
a2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsKKyAgICB1bnNpZ25lZCBt
X251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3MgS2V5U3RvcmUgeworcHVi
bGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3QgS2V5U3RvcmUmIG90aGVy
KTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7Cisg
ICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsgfQorICAgIGJvb2wgYWRk
S2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRkKFJlZlB0cjxLZXk+JiYp
OworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7CisgICAgdW5zaWduZWQgbnVt
S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Owor
ICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNvbnN0OworICAgIEtleVN0
YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNvbnN0OworCisgICAgYXV0
byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBlbmQoKSB7IHJldHVybiBt
X2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5lbmQo
KTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJiZWdpbigpOyB9CisgICAg
YXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2luKCk7IH0KKyAgICBhdXRv
IHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0byByZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8
S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94eTsKKworLy8gSGFuZGxl
IHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUg
dXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCitjbGFz
cyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDRE1Qcm94eT4geworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlXYWl0VGltZVNlY29uZHMg
PSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3JlKTsKKyAgICB2b2lkIHNl
dEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVkOgorICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAg
ICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsK
KyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5
SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gdHJ5V2FpdEZvcktleShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBj
b25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29uc3Q7CisgICAgdm9pZCBz
dG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgTG9j
ayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSogbV9pbnN0YW5jZTsKKwor
ICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxlIENvbmRpdGlvbiBtX2tl
eXNDb25kaXRpb247CisgICAgLy8gRklYTUU6IER1cGxpY2F0ZWQga2V5IHN0b3JlcyBpbiB0aGUg
aW5zdGFuY2UgYW5kIHRoZSBwcm94eSBhcmUgcHJvYmFibHkgbm90IG5lZWRlZCwgYnV0IHNpbXBs
aWZpZWQKKyAgICAvLyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBpbiB0ZXJtcyBvZiB0aHJl
YWRpbmcgaW52YXJpYW50cy4KKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworLy8gQmFz
ZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24gbWFuYWdlbWVudCBjb2RlIGFuZCBmb3IgY29tbXVu
aWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAicmVhbCBDRE0iIHN0YXRlIGNoYW5nZXMgdG8gSlMu
CitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3RhbmNlIHsKK3B1YmxpYzoK
KyAgICBDRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgfkNETUluc3Rh
bmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVhZCBvbmx5LgorICAgIHZv
aWQgc2V0UHJveHkoUmVmPENETVByb3h5PiYmIHByb3h5KQorICAgIHsKKyAgICAgICAgbV9jZG1Q
cm94eSA9IFdURk1vdmUocHJveHkpOworICAgICAgICBtX2NkbVByb3h5LT5zZXRJbnN0YW5jZSh0
aGlzKTsKKyAgICB9CisgICAgdm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJik7Cisg
ICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOworCisgICAgLy8gTWVk
aWEgcGxheWVyIHF1ZXJ5IG1ldGhvZHMgLSBtYWluIHRocmVhZCBvbmx5LgorICAgIFJlZlB0cjxD
RE1Qcm94eT4gcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBt
X2NkbVByb3h5OyB9CisgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvcktleSgpIGNvbnN0IHsg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JL
ZXkgPiAwOyB9CisgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikgeyBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQorCisgICAgLy8gUHJveHkg
bWV0aG9kcyAtIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zv
cktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgdHJhY2tTZXNzaW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IHNl
c3Npb24pIHsgbV9zZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8Q0RNUHJveHk+IG1fY2RtUHJveHk7CisgICAgLy8gRklYTUU6IFdlYWtQdHIgZm9yIHRo
ZSBtX3BsYXllcj8gVGhpcyBpcyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91bmQgYW5kIG1haW4gdGhy
ZWFkcywgaXQncworICAgIC8vIGNvbmNlcm5pbmcgd2UgY291bGQgYmUgYWNjZXNzaW5nIGl0IGlu
IHRoZSBtaWRkbGUgb2YgYSBzaHV0ZG93biBvbiB0aGUgbWFpbi10aHJlYWQsIGVoPworICAgIC8v
IEFzIGEgQ0RNUHJveHksIHdlICoqKnNob3VsZCoqKiBiZSB0dXJuZWQgb2ZmIGJlZm9yZSB0aGlz
IHBvaW50ZXIgZXZlciBnb2VzIGJhZC4KKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXIgeyBudWxs
cHRyIH07IC8vIEZJWE1FOiBNYWluVGhyZWFkPFQ+PworCisgICAgc3RkOjphdG9taWM8aW50PiBt
X251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworICAgIFZlY3RvcjxSZWZQdHI8Q0RNSW5zdGFu
Y2VTZXNzaW9uPj4gbV9zZXNzaW9uczsKKworICAgIEtleVN0b3JlIG1fa2V5U3RvcmU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01F
RElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0ODVkYjc1ZDdlNzMzOWIx
NTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjFjZWZkOWZiNDBlODU1MzM3ZGU5MmJlZTQ5MTFjMjQ3
NjNiMzU3ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDMsMzQgKzQ1
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktleSBDRU5DIFN5c3RlbUlE
LgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lz
dGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10gPSB7IDB4MTAsIDB4Nzcs
IDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMsIDB4M2MsIDB4
MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2lnbmVkIGNsZWFyS2V5Q2Vu
Y1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1JZCk7Ci1jb25zdCB1bnNp
Z25lZCBrZXlJZFNpemUgPSAxNjsKLQotY2xhc3MgQ2xlYXJLZXlTdGF0ZSB7Ci0gICAgdXNpbmcg
S2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6Oktl
eT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUmIHNpbmdsZXRvbigpOwot
Ci0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0KLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0ZT47Ci0gICAgQ2xlYXJL
ZXlTdGF0ZSgpOwotICAgIEtleVN0b3JlIG1fa2V5czsKLX07Ci0KLUNsZWFyS2V5U3RhdGUmIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENs
ZWFyS2V5U3RhdGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7Ci19Ci0KLUNsZWFyS2V5
U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHN0YXRpYyBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAg
ICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9lc24ndCBmaXQgaW50byBh
IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgpAQCAtODgsNyArNjIsNyBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5z
dGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleT4+PiBwYXJzZUxpY2Vu
c2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAgIC8vIElmIHRoZSAna2V5
cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJzZSB0aGUgSlNPTiBmdXJ0
aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xpY2Vuc2UnIGZvcm1hdC4K
QEAgLTEwMSw3ICs3NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVh
cktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgaWYgKCFpdC0+
dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRlY29kZWRLZXlzOworICAg
IFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9vbCB2YWxpZEZvcm1hdCA9
IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5LT5lbmQoKSwKICAgICAg
ICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzkwLDExIEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9y
bWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJr
aWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtl
eUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlE
RGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6OmJhc2U2NFVSTERlY29k
ZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJMRGVjb2RlKGtleVZhbHVl
LCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5SUREYXRhKSksIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkgfSk7CisgICAgICAgICAg
ICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlT
dGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3ZlKGtleVZhbHVlRGF0YSkp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsKICAgICBpZiAoIXZhbGlk
Rm9ybWF0KQpAQCAtMTgxLDcgKzE1NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAg
d2hpbGUgKHRydWUpIHsKIAogICAgICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cgSW5pdERhdGEu
Ci0gICAgICAgIGlmIChpbmRleCArIDEyICsgY2xlYXJLZXlDZW5jU3lzdGVtSWRTaXplID49IGlu
aXREYXRhU2l6ZSkKKyAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBDbGVhcktleTo6Y2VuY1N5c3Rl
bUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwog
CiAgICAgICAgIHBzc2hTaXplID0gZGF0YVtpbmRleCArIDJdICogMjU2ICsgZGF0YVtpbmRleCAr
IDNdOwpAQCAtMTkxLDcgKzE2NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIC8vIDEyID0gQk1GRiBib3ggaGVhZGVy
ICsgRnVsbCBib3ggaGVhZGVyLgotICAgICAgICBpZiAoIW1lbWNtcCgmZGF0YVtpbmRleCArIDEy
XSwgY2xlYXJLZXlDZW5jU3lzdGVtSWQsIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSkpIHsKKyAg
ICAgICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIENsZWFyS2V5OjpjZW5jU3lzdGVt
SWQsIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKSkgewogICAgICAgICAgICAgZm91bmRQc3No
ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDIsNyArMTc2LDcg
QEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2Nh
dGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpZiAoIWZvdW5kUHNzaCkKICAgICAgICAg
cmV0dXJuIGtleUlkc01hcDsKIAotICAgIGluZGV4ICs9ICgxMiArIGNsZWFyS2V5Q2VuY1N5c3Rl
bUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFkZXIpICsgU3lz
dGVtSUQgc2l6ZS4KKyAgICBpbmRleCArPSAoMTIgKyBDbGVhcktleTo6Y2VuY1N5c3RlbUlkU2l6
ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFkZXIpICsgU3lzdGVtSUQg
c2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KICAgICBpZiAoaW5kZXggKyAzID49
IGluaXREYXRhU2l6ZSkKQEAgLTIxMiw3ICsxODYsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YShjb25z
dAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAKICAgICAvLyBDaGVjayB0
aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3QgKiBrZXlJZFNp
emUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAuZmlyc3Qg
KiBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRhU2l6ZSkKICAgICAgICAg
cmV0dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQgPSBpbmRleDsgLy8gVGhl
IGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4KQEAgLTI1MSw5ICsyMjUs
OSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERh
dGEoY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRzIgogICAgIC8vIEFuIGFy
cmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdGhlIGJhc2U2NHVy
bCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmluZyB0aGUga2V5IElEIHZh
bHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENvdW50OyBpKyspIHsKLSAg
ICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBr
ZXlJZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJhc2U2NFVSTEVuY29kZSgm
ZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsKICAgICAgICAga2V5SWRz
QXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCArPSBrZXlJZFNpemU7Cisg
ICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzOwogICAgIH0KIAogICAg
IG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0FycmF5KSk7CkBAIC00NTYs
NDQgKzQzMCw2IEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNsZWFyS2V5OjpzYW5pdGl6
ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICByZXR1cm4gc2Vzc2lvbklk
OwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmluZyBhbiBhcmNoaXRlY3R1
cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwuIFRoZSBHU3RyZWFtZXIg
ZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBhbGwga25vd24gc2Vzc2lv
biBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0vLyBHQ3J5cHQuIElkZWFs
bHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZgotLy8gUHJv
eHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tncm91bmQgR1N0cmVhbWVy
Ci0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAoaS5lLiByZWYoKSdzKSBv
ZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRocmVhZC4gV2l0aCB0aGUg
bmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNhbiBubyBsb25nZXIgZG8g
dGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8gU2hhcmVkQnVmZmVycyBp
bnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNyb3NzCi0vLyB0aHJlYWRz
Lgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtleShjb25zdCBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKLXsKLSAgICByZXR1cm4geyBrZXkuc3RhdHVzLCBTdHJp
bmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5zaXplKCkpLCBTdHJpbmco
a2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRhLT5zaXplKCkpIH07Ci19
Ci0KLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IFByb3h5Q0RNQ2xlYXJLZXk6
Omlzb2xhdGVkS2V5cygpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIHRoZSBrZXlzIG9mIGFsbCBz
ZXNzaW9ucywgbWF5IGJlIGNvcGllZCB0byBiYWNrZ3JvdW5kIHRocmVhZHMuCi0gICAgVmVjdG9y
PFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gYWxsS2V5cyB7IH07Ci0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2tleXNNdXRleCk7Ci0gICAgc2l6ZV90IGluaXRpYWxDYXBhY2l0eSA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlz
KCkudmFsdWVzKCkpCi0gICAgICAgIGluaXRpYWxDYXBhY2l0eSArPSBrZXlWZWN0b3Iuc2l6ZSgp
OwotICAgIGFsbEtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpOwot
Ci0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5r
ZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0g
ICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRlZEtleShrZXkpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYWxsS2V5czsKLX0KLQotQ0RNSW5zdGFuY2VDbGVhcktleTo6Q0RN
SW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0UmVmKCpuZXcgUHJveHlD
RE1DbGVhcktleSgpKSkKLXsKLX0KLQogQ0RNSW5zdGFuY2VDbGVhcktleTo6fkNETUluc3RhbmNl
Q2xlYXJLZXkoKSA9IGRlZmF1bHQ7CiAKIENETUluc3RhbmNlOjpTdWNjZXNzVmFsdWUgQ0RNSW5z
dGFuY2VDbGVhcktleTo6aW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9uKGNvbnN0IENETUtleVN5
c3RlbUNvbmZpZ3VyYXRpb24mKQpAQCAtNTM1LDM2ICs0NzEsOSBAQCBjb25zdCBTdHJpbmcmIENE
TUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJlZlB0cjxDRE1JbnN0YW5j
ZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24oKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKSk7Ci19Ci0KLVN0
cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5SUREYXRhLT50b0hleFN0cmluZygpLCAiXSIp
OwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleVZhbHVlRGF0YS0+dG9I
ZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENETUluc3RhbmNl
Q2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCi17
Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsyLmtleUlERGF0YSk7Ci0K
LSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9PSAqazIua2V5SUREYXRhOwotfQotCi1ib29sIG9w
ZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0
YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAg
IEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgaWYgKGsxLmtleUlERGF0YS0+c2l6ZSgpICE9
IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gazEua2V5SUREYXRhLT5zaXpl
KCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsKLQotICAgIHJldHVybiBtZW1jbXAoazEua2V5SURE
YXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJRERhdGEtPnNpemUoKSk7
CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lvbiA9IGFkb3B0UmVmKG5l
dyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgqdGhpcykpOworICAgIHRyYWNrU2Vzc2lvbihu
ZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAogdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21T
dHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5z
ZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01NzIsNiArNDgxLDggQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21T
dHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMyX3Qgc19zZXNzaW9uSWRWYWx1ZSA9IDA7CiAgICAg
KytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAgbV9zZXNzaW9uSUQgPSBTdHJpbmc6Om51bWJlcihz
X3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAgICAgICAgIGluaXREYXRhID0gZXh0cmFjdEtleWlk
c0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCkBAIC01NzksMTggKzQ5MCwyMSBA
QCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNl
VHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlJ
ZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCiAgICAgY2FsbE9uTWFpblRocmVh
ZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpLCBzZXNzaW9uSWRW
YWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkgbXV0YWJsZSB7CisgICAgICAgIFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
aW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklkVmFsdWUpLCBm
YWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5pdERhdGEp
LCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2NlZWRlZCk7CiAgICAgICAgIH0pOwogfQogCiB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYg
c2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiByZXNwb25zZSwgTGlj
ZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1
bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZwotICAg
IC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgorI2lmIExPR19ESVNBQkxF
RCB8fCBSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIC8vIFdlIG9ubHkgdXNlIHRoZSBzZXNpb24g
SUQgZm9yIGRlYnVnIGxvZ2dpbmcuIFRoZSB2ZXJib3NlIHByZXByb2Nlc3NvciBjaGVja3MgYXJl
IGJlY2F1c2UKKyAgICAvLyB0aGUgTWFjIHBvcnQgaGFzIC1XZXJyb3IgLVd1bnVzZWQtcGFyYW1l
dGVyLgorICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlmCiAgICAgYXV0byBkaXNw
YXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10oYm9vbCBzZXNzaW9uV2Fz
Q2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgY2hhbmdlZEtleXMsIFN1Y2Nlc3NW
YWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC02MDQs
NTIgKzUxOCwyMyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNl
bnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7CiAgICAgaWYgKCFyb290
KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgdXBkYXRl
IHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwog
ICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1
ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24gJXMiLCBzZXNzaW9uSWQu
dXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcg
bGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJyZW50bHkgY29udGFpbnMgJXUga2V5cyIs
IHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICBp
ZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgqcm9vdCkpIHsKLSAgICAg
ICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMg
c2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVu
dCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVj
dG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQs
IFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRl
cmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBM
T0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGggSUQgJXMgYW5kIGtl
eSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVj
b2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBh
dXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtleVZlY3Rvci5iZWdpbigp
LCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAgWyZkZWNvZGVkS2V5XSAoY29uc3Qg
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5OwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlEICE9IGtleVZlY3Rvci5l
bmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIEV4aXN0
aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFs
dWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFrZXlX
aXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRLZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5j
ZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICprZXlXaXRo
TWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtleSk7Ci0gICAgICAgICAgICAgICAgICAg
IGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFRoaXMgaXMg
YSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFwcGVuZChXVEZNb3ZlKGRl
Y29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBrZXlzQ2hhbmdlZCA9IG1fa2V5U3RvcmUu
YWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykpOwogCi0gICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMiLCBrZXlWZWN0b3Iuc2l6
ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMg
JXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0
b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiBjaGFu
Z2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAvLyBTb3J0
IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6OnNvcnQoa2V5VmVjdG9yLmJlZ2luKCksIGtl
eVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNW
ZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVj
dG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3Rk
OjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtl
eS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gV1RGTW92ZShrZXlTdGF0
dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lv
biAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAg
ICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9y
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEZNb3Zl
KGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwpAQCAtNjU3LDQ3ICs1NDIs
MzEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25z
dCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICB9CiAKICAgICBpZiAocGFyc2VMaWNl
bnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsKLSAgICAgICAgLy8gRklY
TUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3JtYXRpb24gYW5kIHVzZSBpdCB0byB2YWxpZGF0
ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQuCi0gICAgICAgIENsZWFyS2V5U3RhdGU6OnNp
bmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lvbklkKTsKKyAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xlZGdlZCwgY2xlYXJpbmcg
YWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fcGFy
ZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7CisgICAgICAgIG1fa2V5
U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKHRydWUsIFdU
Rjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5vIGZvcm1hdCB3YXMgcmVjb2duaXplZC4KKyAg
ICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBwYXlsb2FkIHdh
cyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOwogICAg
IGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWls
ZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbihM
aWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0IFN0cmluZyYsIExvYWRT
ZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2UgYSBoZWxwZXIgZnVuY3Rv
ciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2b2lkaW5nIGR1cGxpY2F0
ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgotICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFjayA9
Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4mJiBl
eGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzLCBTZXNzaW9uTG9hZEZhaWx1cmUgbG9h
ZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCi0gICAgICAgICAgICAg
ICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIHN1Y2Nlc3MsIGxv
YWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
fTsKKyNpZmRlZiBOREVCVUcKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklkKTsKKyNlbmRpZgog
Ci0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRp
bmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlzIHNlc3Npb24uCi0gICAgS2V5U3RhdHVzVmVj
dG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0gICAgICAgIGF1dG8mIGtleXMgPSBDbGVhcktl
eVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8gaXQgPSBrZXlzLmZpbmQo
c2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkpIHsKLSAgICAgICAgICAg
IGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0LCBGYWlsZWQsIFNlc3Npb25Mb2FkRmFpbHVy
ZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJUKHNlc3Npb25JZCA9PSBtX3Nlc3Npb25JRCk7
CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1fa2V5U3RvcmUuY29udmVy
dFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgJmtleVN0
YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQogCi0gICAgICAgIGF1dG8mIGtleVZlY3RvciA9IGl0LT52
YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5
VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAg
ICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNo
YXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwga2V5LnN0YXR1cyB9KTsK
LSAgICB9Ci0KLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKSwg
U3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBTdWNj
ZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9z
ZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNzEzLDcgKzU4Miw4IEBAIHZvaWQgQ0RN
SW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9z
ZVNlc3Npb25DYWxsYmFjCiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92
ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgUmVtb3Zl
U2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8vIFVzZSBhIGhlbHBlciBm
dW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRjaCwgYXZvaWRpbmcgZHVw
bGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMuCisgICAgQVNTRVJUKHNlc3Npb25JZCA9
PSBtX3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQogICAgICAgICBb
dGhpcywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0b3ImJiBrZXlTdGF0dXNWZWN0b3IsIE9wdGlv
bmFsPFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3NhZ2UsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzKSB7
CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNzI3LDM1ICs1OTcsMTcgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3Ry
aW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVj
dG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBp
biB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVj
dG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9y
ID0gbV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNlZCgpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBmb3Ig
dGhlIGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcgaWYgbm9uZSBpcyBmb3VuZC4KLSAgICAgICAg
YXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAgICAgICAg
YXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0ga2V5cy5l
bmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhLZXlTdGF0dXNWZWN0b3IgeyB9
LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHJpZXZlIHRoZSBLZXkgdmVjdG9yLCBjb250
YWluaW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uLCBhbmQKLSAgICAgICAgLy8gdGhl
biByZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgYXV0
byBrZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1ZSk7Ci0gICAgICAgIGtleXMucmVtb3ZlKGl0
KTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHBh
aXJpbmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFzZWQnIHN0YXR1cy4KLSAgICAgICAga2V5U3Rh
dHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAg
ICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVj
dG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1
cz4geyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKLQogICAgICAgICAv
LyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNlbnNlIHJlbGVhc2UnIGZv
cm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8gb2YgYmFzZTY0VVJMLWVu
Y29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRhLT5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmlu
ZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5SUREYXRhLT5kYXRhKCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXplKCkpKSk7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoa2V5
LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwor
ICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtl
eS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAg
ICAgICB9CkBAIC03NjYsNiArNjE4LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKICAgICAg
ICAgbWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwg
bWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0KIAorICAgIG1fa2V5U3RvcmUucmVtb3Zl
QWxsS2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3Ip
LCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5kZXggODViMzE5YjFhMzhjMTIxNjk5MTk3
NWI4MDE5YWQyYjE2YjM2YzE0Ny4uNjcwNGFlN2E5NTdmMzJmZTFmODQ5ODNlZDNiM2Y2NTAyYTUz
MTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC0zMSwxNCArMzEsMjggQEAKICNp
ZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5jbHVkZSAiQ0RNRmFjdG9yeS5oIgotI2lu
Y2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCiAj
aW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCituYW1lc3BhY2UgQ2xlYXJLZXkgeworCisvLyBDbGVhcktleSBDRU5DIFN5c3Rl
bUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24t
c3lzdGVtCitjb25zdCB1aW50OF90IGNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVm
LCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAw
eDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjZW5jU3lzdGVtSWRTaXpl
ID0gc2l6ZW9mKGNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJ
bkJ5dGVzID0gMTYsCisgICAgS2V5SURTaXplSW5CeXRlcyA9IDE2LAorICAgIElWU2l6ZUluQnl0
ZXMgPSAxNiwKK307CisKK30gLy8gbmFtZXNwYWNlIENsZWFyS2V5CisKIGNsYXNzIENETUZhY3Rv
cnlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc3LDI3ICs5MSwxMiBAQCBwdWJsaWM6CiAgICAgT3B0
aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5h
bDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0g
eworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVBy
b3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4gewogcHVibGlj
OgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlW
YWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRl
ZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2
YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3Rh
bmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7Ci1wdWJsaWM6Ci0gICAgQ0RNSW5zdGFuY2VDbGVh
cktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAgIC8vIENE
TUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0KLQogICAg
IFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lz
dGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2
ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0UGVy
c2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0NyArMTA0LDIyIEBAIHB1
YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcm
KSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAg
IFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLQotICAg
IHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0
dXM7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsKLSAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAgIFN0cmluZyBrZXlJREFz
U3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3Q7
Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZvdGhlcikKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICBBU1NF
UlQob3RoZXIua2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiAqa2V5VmFsdWVEYXRh
ID09ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUd28ga2V5
cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUg
YW5kIHN0YXR1cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsx
LCBjb25zdCBLZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVyZWQgYnkgdGhlaXIg
SURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAgICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0KLSAgICAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVy
biAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGsxLCBr
MikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPihrMSwg
azIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgS2V5ICZrMSwgY29u
c3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgfTsKLQotICAg
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3h5
Q0RNOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBtX3Byb3h5Q0RNOwogfTsK
IAogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5z
dGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uQ2xl
YXJLZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0
YW5jZUNsZWFyS2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQp
IHsgfQogICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJp
bmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNh
bGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBM
aWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBj
bG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7
CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwg
UmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3Jk
T2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1f
c2Vzc2lvbklEOworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFyZW50SW5zdGFuY2U7Cisg
ICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5
NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vz
c1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwog
ICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFs
OwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsK
LSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBh
MTJlZjRmNmRiYTZmMDE1ZTc2MTUxZjE0N2NjNmMwNzllNjJkYTdlLi41NDVhY2M3NWMwMTdkYjlk
MmE3NDhjOTlkNDRiMWE2MzIwZTdhM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNjUsNiArNjUsNyBAQAogCiAjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNETVBy
b3h5Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVj
cnlwdG9yR1N0cmVhbWVyLmgiCkBAIC0xNzg4LDYgKzE3ODksNTAgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAg
IH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIEluaXREYXRhIGlu
aXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4
KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZlbnRz
KG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJmb3VuZCAl
enUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2
YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBw
cm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0
YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVu
dC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAg
ICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAgICAg
ICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50Lmdl
dCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5pdERhdGE7Cit9CisKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCgpCit7
CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlw
ZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0aW5nIGZvciBhIENETSBp
bnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGlu
ZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFsc2U7
CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xkTG9jayhtX2Nk
bUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9IG1fY2RtQXR0YWNobWVu
dENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3MsIFt0aGlzXSgpIHsK
KyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogewogICAg
IGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xM
RUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0MSArMTg2OCw5IEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNz
YWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBpZiAoIWdf
c3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQi
KSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJP
UigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBj
b250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0tcHJlZmVycmVk
LWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7Ci0KLSAgICAgICAg
SW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
ayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRz
IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAgICBHU1RfVFJBQ0Uo
ImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwg
cHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1F
dmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0
byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBnc3RfZXZl
bnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRh
LCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7ZXZlbnRLZXlT
eXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVu
dHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3ZlKGlu
aXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5n
IGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFs
c2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhv
bGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAgIGRpZENETUF0dGFjaCA9
IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0
X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNDRE1BdHRhY2hlZCgpOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlkQ0RNQXR0YWNoICYm
ICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQocGFyc2VJ
bml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIGJvb2wgaXND
RE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAgICAgIGlmIChpc0NETUF0
dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlT
eXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtl
eVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2Nk
bUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5
IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRh
KCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2Up
KTsKIApAQCAtMTg2NSwxMCArMTg3OCwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAg
IEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0
cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNv
bnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHBy
ZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4
dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBp
bnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVD
VChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBubyBDRE0gYXZhaWxhYmxl
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAg
ICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgIGdzdF9tcGVn
dHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2VuZGlmCi0jaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFt
ZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1rZXkgbWVzc2FnZSBmcm9t
ICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgICAgICAgICAgc2V0V2Fp
dGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZGVjcnlwdG9ycyBz
aG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIgYmVpbmcgY3JlYXRlZCBh
bmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5IGFyZSBub3QgYW5kIGN1
cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYWtlIHRoaXMgdmVy
eSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ugc29vbiBhbmQgaXQgZG9l
cyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhpbmcgdGhhdCBjb3VsZCBi
ZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUgbWVhbnRpbWUsIGZvcmNl
IGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQuCi0gICAgICAgICAgICBh
dHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAgICAgfSBlbHNlIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktcmVjZWl2ZWQiKSkgewot
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLWtleS1yZWNlaXZl
ZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiaHR0cC1oZWFk
ZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByb2Nl
c3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKQEAgLTM3
MjgsMTQgKzM3MjksMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUlu
c3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKKyAgICBtX2NkbUluc3RhbmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3RhbmNlKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3RhbmNlLT5zZXRQbGF5
ZXIobV9wbGF5ZXIpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFByb3h5KGFkb3B0UmVmKCpuZXcg
Q0RNUHJveHlDbGVhcktleSkpOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7Cisg
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25l
dygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3Ry
dWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwot
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBH
X1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwgbnVsbHB0cik7
CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1wcm94eSIsIEdf
VFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgpLCBudWxscHRyKTsKICAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwg
Y29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0
YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1f
Y2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fY2Rt
QXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBhbGwgd2FpdGVycywgc2lu
Y2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgd2FpdGluZyBmb3IgYSBD
RE0uCkBAIC0zNzU3LDcgKzM3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBpbnN0YW5jZSAlcCwg
c2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7CiAgICAgbV9jZG1J
bnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKKyAg
ICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3
KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChH
U1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiB9CiAKQEAgLTM3
OTAsNTEgKzM3OTQsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRs
ZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlhbGl6YXRpb25EYXRh
RW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCBpc1dhaXRp
bmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdl
IG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJl
IHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoImlzV2FpdGluZ0Zvcktl
eSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcoaXNXYWl0aW5nRm9y
S2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKGlzV2Fp
dGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2FpdGluZ0ZvcktleSAmJiB0
aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzV2FpdGlu
Z0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtl
eSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAg
bV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGlw
ZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3RhbmNlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKLQotICAgIGJvb2wg
cmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYo
Z3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVjdHVyZV9uZXdf
ZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAgICBpZiAoc3RhdGUg
Pj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3RfZWxlbWVudF9xdWVy
eShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRSgicXVl
cnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPj0gR1NUX1NU
QVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUgcGlwZWxpbmUg
aXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCB1cCBh
bmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQgYXNrIHRoZSBk
ZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBpdGVy
YXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpKSk7
Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0OwotICAgICAgICBkbyB7
Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xkKGl0ZXJhdG9y
LmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRlciBkYXRhKSAt
PiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9F
TEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAgICAgICAgR3N0UXVl
cnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiAhV0VC
S0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1lbnRfcXVlcnko
ZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnkuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0g
ICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQoKSk7Ci0gICAg
ICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOwotICAg
ICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQotICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7Ci0gICAgICAgIHJl
c3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAgICAgICAgR1NUX1RS
QUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJlc3VsdCwgYm9v
bEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwogfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBiMmJiNTQx
YTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li41MjFiMjBkMTFjYzhkZDk0YmUyODRk
NzQ2OTljZDI3MTdiNGUwNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3Rz
U2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNlbmRpZgorCiB0eXBlZGVm
IHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5cGVkZWYgc3RydWN0
IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4
dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVjdGVkOgogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1lbnRNdXRleDsKICAgICBD
b25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJlZlB0cjxjb25zdCBDRE1J
bnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VQcm94eT4gbV9j
ZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nl
c3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0PHVpbnQzMl90PiBt
X2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jZG1JbnN0YW5jZTsgfQog
ICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CiAgICAgdm9pZCBp
bml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAgICB2b2lkIHNldFdh
aXRpbmdGb3JLZXkoYm9vbCk7CisgICAgSW5pdERhdGEgcGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0
aW9uTWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgYm9vbCB3YWl0Rm9yQ0RNQXR0YWNobWVudCgp
OwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0aW5nRG93bjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNDA0NTI4N2Iz
OTZhODUxMjgyN2ZjOGNiYTg0N2EyNDFhNTQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXku
Y3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDRE1Qcm94eUNsZWFyS2V5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWFkVUludDMyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCYgb2Zmc2V0LCB1
aW50MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQsIG9mZnNldCA8PSBidWZm
ZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNpemVvZih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJwcmV0X2Nh
c3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9
IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVh
ZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3Qm
IG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZz
ZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2Yo
dmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAg
IG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIHt9CisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KCkKK3sK
KyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOworfQorCitib29sIENETVByb3h5
Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYg
aW5wdXQpCit7CisgICAgdWludDhfdCBjdHJbQ2xlYXJLZXk6OkFFUzEyOENUUkJsb2NrU2l6ZUlu
Qnl0ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09IDgpIHsKKyAgICAgICAgLy8g
SVNPL0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKKworICAgICAgICAvLyBXaGVuIGFuIDgt
Ynl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8v
IGJ5dGVzIG9mIHRoZSAxNiBieXRlIElWIChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8K
KyAgICAgICAgLy8gemVyby4KKyAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAg
ICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShj
dHIsIGlucHV0Lml2LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcyk7CisKKyAgICBpZiAoZ2NyeV9l
cnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1fZ2NyeUhhbmRsZSwgY3Ry
LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIsIGdwZ19zdHJl
cnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldERlY3J5cHRp
b25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyBGSVhNRTogVW5u
ZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3RpbGwgZXhwb3NpbmcKKyAg
ICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0IEFQST8gVGhlc2UgYnVm
ZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3QgYSBodWdlIGRlYWwsIEkg
Z3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAgIGtleUlEVmVjLmFwcGVu
ZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBhdXRvIGtleURhdGEgPSBn
ZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0YSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3Nl
dGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+c2l6ZSgpKSkgewor
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lw
aGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFy
S2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAg
ICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUg
ZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJ
bkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhl
cl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRC
dWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVBy
b3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJy
b3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2Ft
cGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRl
ZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zm
c2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVu
Y3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRl
cykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAg
ICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlm
IChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlm
ICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVm
ZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUNs
ZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xl
YXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxl
IGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5z
dWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNh
bXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAg
ICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90
IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUi
LCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAgICAgICAgc3Vi
c2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRl
cyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBG
SVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVy
ZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAgICAgIExPRyhFTUUsICJF
TUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQg
dG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5w
dXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0
KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUNs
ZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSB7Cisg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMg
ZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBz
dWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0
ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKGdjcnlf
ZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBp
bnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0LCBzdWJzYW1w
bGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIs
IGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNl
dCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0KENE
TVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgaWYgKCFj
ZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNyeXB0aW9uS2V5KGlucHV0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0LmlzU3Vic2FtcGxl
ZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNEZWNyeXB0RnVsbFNhbXBs
ZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlwdCgp
Cit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJm1fZ2Ny
eUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9D
SVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktl
eSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5vdCBnZXQgdGhpcyBmYXIg
d2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9DRE1Qcm94eUNsZWFyS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyNDBjOWY4ZDRjZTY3YWFiZDFkZmVk
MDdiNjZiNTEwNDEyMThiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5oCkBAIC0wLDAgKzEs
MTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
KworI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9u
LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVz
ZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJv
eHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRy
PENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7
CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleSgpCisgICAgeworICAgICAgICBpbml0aWFs
aXplR2NyeXB0KCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXkoKTsKKwor
ICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJl
ZEJ1ZmZlcnMsCisgICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXplX3R9IGlk
aW9tcyBmb3IgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4IHRoYXQg
c29tZWhvdy4gTm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAgICAvLyB0
aGV5J3JlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWluCisgICAg
Ly8gdGhyZWFkLXNhZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291
bGQgYmUKKyAgICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJz
IGZvciBkcm9wcGluZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3
YXJlIGNvbnRhaW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsKKyAgICAg
ICAgLy8gRklYTUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGllZCB0eXBl
cy4KKyAgICAgICAgY29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBrZXlJRFNp
emVJbkJ5dGVzOworCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBzaXplX3Qg
aXZTaXplSW5CeXRlczsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAg
ICAgIHNpemVfdCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAvLyBGSVhN
RTogR1N0cmVhbWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3ZSB3YW50
IHRvIGdldCByaWQgb2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQg
YmVmb3JlCisgICAgICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVj
dG9yPHNpemVfdD4gdGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9kZWNyeXB0
ZWQvY2xlYXIvZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNp
emVfdCwgc2l6ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVh
ci9kZWNyeXB0ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAgICAgLy8g
YmVjb21lIGEgc3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1w
bGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDY3MzAKKyAgICAgICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAg
c2l6ZV90IHN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1
YnNhbXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBu
dW1TdWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGlu
LXBsYWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFt
ZXItc3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8g
ZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0
LgorICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3
ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ug
d2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4g
d2UKKyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAgYm9vbCBj
ZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29s
IGNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJv
b2wgY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wg
Y2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBXZWJDb3JlIGZvciBjcnlw
dG8uLi4KKyAgICBnY3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dl
YktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLjU4
M2YyNjE4NmFkZjhiNzg3YmI5MzM2Nzk3MTZiMDQ4M2YxZDJmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJF
QU1FUikKIAogI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNUHJveHlDbGVh
cktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIkdTdHJlYW1l
ckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGdjcnlwdC5oPgpAQCAtMzcsMTIgKzM4LDExIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNS
WVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQ
cml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKLSAg
ICBSZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0gICAgZ2NyeV9jaXBoZXJfaGRf
dCBoYW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+IGNkbVByb3h5OwogfTsKIAog
c3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVz
cG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFBy
b3h5Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4pOwogc3RhdGljIGJvb2wg
ZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBp
diwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBs
ZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NU
QVRJQyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwpAQCAt
ODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRf
Y2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1J
ZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVVSUQ7Ci0gICAgY2VuY0NsYXNz
LT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhhbmRsZUtleVJlc3BvbnNl
KTsKKyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BUUihj
ZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVO
Q1BUUihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6
ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpAQCAtOTMsNjEgKzkzLDMy
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0
KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xl
YXJfa2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZikKIHsK
ICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVE
SUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAgIHNlbGYtPnByaXYgPSBwcml2
OwogICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Ci0g
ICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5k
bGUpLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhF
Ul9TRUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBj
cmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3Ip
KTsKLSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQogCiBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOwogICAgIFdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgZ2NyeV9jaXBo
ZXJfY2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZp
bmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4g
cHJveHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHkpCiB7CiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwot
ICAgIHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETUNsZWFyS2V5Kj4o
cHJveHlDRE0uZ2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBwcml2LT5j
ZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KGNkbVByb3h5Lmdl
dCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRB
bmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBT
dHJpbmcmJiBrZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJ
REJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50LCBHc3RC
dWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtleVZhbHVlOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+aXNvbGF0ZWRLZXlzKCkpIHsK
LSAgICAgICAgaWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAgICAgICAgICAgIGtleVZh
bHVlID0ga2V5LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHByaXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRpb24ga2V5Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFsdWUuc2l6ZUluQnl0ZXMo
KSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9j
aXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hhcmFjdGVyczgoKSwga2V5VmFs
dWUuc2l6ZUluQnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZ2Ny
eV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQorICAgIFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNS
WVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKIAotc3RhdGlj
IGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBH
c3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1
ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZl
cikKLXsKLSAgICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIm5vIElWIGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8
ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNy
eXB0KCkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1
NywyNyArMTI4LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOwotICAgIGlmICht
YXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAs
IDgpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSBDTEVB
UktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwg
Q0xFQVJLRVlfU0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9
IGdjcnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xFQVJLRVlfU0laRSk7Ci0g
ICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdj
cnlfY2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIgdG8gZGVjcnlwdCIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBtYXBwZWRLZXlJZEJ1ZmZlciA9
IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JF
QUQpOwogICAgIGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7CkBAIC0xOTAsNzIgKzE0
MCwyOSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmcobWFwcGVkS2V5SWRCdWZmZXIt
PmRhdGEoKSwgbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwotCi0gICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKLQotICAgIGlmICghc3Vi
U2FtcGxlQ291bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjogJXp1IGVu
Y3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBDaGVj
ayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVyLT5zaXpl
KCkpIHsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2
LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUoKSwgMCwg
MCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBn
cGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gQ2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBudWxsLgotICAgIGlmICghc3Vi
U2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJFcnJvciwg
dGhlIHN1YlNhbXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICBhdXRvIG1hcHBlZFN1YlNh
bXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1wbGVz
QnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZlcikg
ewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBs
ZSBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdVbmlxdWVQ
dHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3ViU2Ft
cGxlc0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCkpKTsKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIsIHBvc2l0
aW9uLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBw
ZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKLSAg
ICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAgICAgIGlmIChzYW1wbGVJ
bmRleCA8IHN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRl
cl9nZXRfdWludDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0NsZWFyKQotICAgICAgICAgICAg
ICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIuZ2V0KCksICZuQnl0
ZXNFbmNyeXB0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAi
dW5zdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFw
cGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAo
dG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXItPnNpemUo
KSAtIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7Ci0gICAgICAg
IGlmIChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2Vs
ZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwg
c2FtcGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3Np
dGlvbik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJp
di0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0
ZWQsIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNyeXB0aW9u
IGZhaWxlZDogJXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cG9zaXRpb24gKz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+
IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5
cHRDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9IG1hcHBlZEtleUlkQnVmZmVy
LT5kYXRhKCk7CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVzID0gbWFwcGVkS2V5SWRCdWZm
ZXItPnNpemUoKTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAg
ICBjb250ZXh0Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpOworICAgIGNv
bnRleHQuZW5jcnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4
dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpOworICAg
IGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGlmICghc3Vic2Ft
cGxlQ291bnQpCisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7Cisg
ICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVmZmVyKTsKKyAgICAgICAgbWFw
cGVkU3Vic2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1
YnNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGlmICghbWFwcGVkU3Vic2Ft
cGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVk
IHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vic2Ft
cGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXJTaXpl
SW5CeXRlcyA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUoKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNlbmNEZWNyeXB0KGNvbnRl
eHQpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2ODNkMDQ3NDg2MGY2ZWY4
MTdmMzFjZGMxNWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJhMTYyNDRjMDc5ODAzNzQ3
YzMwNDEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMjUsMzQgKzI1LDM0
IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCisj
aW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNs
dWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6UHJveHlDRE07Cit1c2lu
ZyBXZWJDb3JlOjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
X0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7Ci0gICAg
UmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtleVJlY2VpdmVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotICAgIExvY2sgbXV0ZXg7Ci0g
ICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJveHk+IGNkbVByb3h5Owor
CisgICAgTG9jayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29uZGl0aW9uIGNkbUF0dGFjaG1l
bnRDb25kaXRpb247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4U2Vjb25kc1Rv
V2FpdEZvckNETVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hh
bmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwogc3RhdGlj
IHZvaWQgZmluYWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENhcHMqIHRyYW5zZm9ybUNhcHMo
R3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsK
IHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSos
IEdzdEJ1ZmZlciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRy
YW5zZm9ybSosIEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJh
c2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7Ci1zdGF0aWMgYm9vbCBp
c0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
KTsKIHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQqKTsKIAot
CiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlv
bl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CiAKQEAgLTc2
LDcgKzc2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2Rl
Y3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBiYXNlVHJhbnNmb3JtQ2xh
c3MtPnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJhbnNmb3JtQ2Fwcyk7CiAg
ICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBGQUxT
RTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BU
UihzaW5rRXZlbnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnF1ZXJ5ID0gR1NU
X0RFQlVHX0ZVTkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2
YXRlKSk7CiB9CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFu
c2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQog
ewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJ
VkFURShzZWxmKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CiAKLSAgICAv
LyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4K
LSAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKLSAgICAgICAg
aWYgKEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChH
U1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5E
SU5HICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BB
VVNFRCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nl
c3Mga2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgICAg
IHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNl
bmQgImRybS1jZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRoZSBwbGF5ZXIgdG8gcmVz
ZW5kIHRoZSBDRE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGluZm9ybSB3ZSBhcmUgd2FpdGlu
ZyBmb3Iga2V5LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gdHJ1ZTsKLSAgICAgICAg
Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9u
ZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJt
LXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0
YWNobWVudE11dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihwcml2LT5t
dXRleCwgU2Vjb25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAgIHJldHVybiBwcml2LT5rZXlS
ZWNlaXZlZDsKKyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQg
YmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlmICghcHJpdi0+Y2RtUHJveHkp
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdCBhdmFpbGFibGUsIGdv
aW5nIHRvIHdhaXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRp
b24ud2FpdEZvcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1heFNlY29uZHNUb1dhaXRGb3JD
RE1Qcm94eSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKICAg
ICAgICAgfSk7Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIGlm
ICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkNETVByb3h5IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsKICAgICAgICAgICAgIHJldHVy
biBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIpOwotICAgICAgICBwcml2LT53
YWl0aW5nRm9yS2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShH
U1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxm
KSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVjZWl2ZWQiKSkpOworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFkZHJlc3Mg
JXAiLCBwcml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAgICAgR3N0UHJvdGVjdGlvbk1l
dGEqIHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9uTWV0YSo+
KGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsKQEAgLTIwNywzMiArMTk3
LDMwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5z
Zm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAl
cCIsIGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAg
IH0KKyAgICBhdXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0
KFtidWZmZXIsIHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21l
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwor
ICAgIH0pOwogCiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9n
ZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUiLCAmaXZTaXplKSkgewogICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKLSAg
ICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQ
UE9SVEVEOwogICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRlZDsKICAgICBpZiAoIWdzdF9z
dHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAm
ZW5jcnlwdGVkKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8g
Z2V0IGVuY3J5cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVm
ZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBpZiAoIWl2U2l6
ZSB8fCAhZW5jcnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVy
LCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIGlmICgh
aXZTaXplIHx8ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9
CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0aW9uIG1ldGE6ICUiIEdTVF9Q
VFJfRk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1bnNpZ25lZCBzdWJTYW1w
bGVDb3VudDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEt
PmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50Iik7Ci0g
ICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdz
dE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NV
UFBPUlRFRDsKICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0YXRpYyBHc3RGbG93UmV0
dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBi
dWZmZXIpCiAgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlcyIp
OwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBzdWJTYW1wbGVzQnVmZmVy
ID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAgICBpZiAoIXN1YlNhbXBsZXNC
dWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIlRoZXJlIGlzIG5v
IHN1YnNhbXBsZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1wbGUgY291bnQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9CiAgICAg
fQogCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+
aW5mbywgImtpZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVyIik7Ci0gICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
ICAgICB9CiAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVy
KHZhbHVlKTsKQEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zv
cm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAg
IHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJp
diIpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3Zl
X21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkp
OwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI3
MCw3MSArMjU5LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0
QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xhc3MtPmRlY3J5cHQoc2VsZiwg
aXZCdWZmZXIsIGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVz
QnVmZmVyKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZh
aWxlZCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnBy
ZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShi
dWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAg
cmV0dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxh
YmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCitzdGF0aWMgYm9v
bCBpc0NETVByb3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICBy
ZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQocHJpdi0+bXV0ZXguaXNMb2Nr
ZWQoKSk7Ci0KLSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0
Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1Rf
RUxFTUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0gICAgICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNv
bnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFt
IG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1lc3NhZ2UuIEluIHRoaXMgY2Fz
ZSB0aGF0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ugb25seSB0aGUgYXBwIChw
bGF5ZXIpIGFuc3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVyeSBpcyBnb2luZyB0byBzb2x2
ZSBpdC4gQSBtZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5
ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFu
ZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9u
ZSBhcyBpdCBpcwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9y
bSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1
cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMg
bm9yIGJ1cwotICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhlcmUuCi0gICAgICAgIGlm
IChjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwg
ImNkbS1pbnN0YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJl
aW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBu
dWxscHRyOwotICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RNKQotICAgICAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5j
ZSAlcCwgcmVmY291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQoKSwgcHJpdi0+cHJveHlDRE0t
PnJlZkNvdW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQiKTsKK3N0YXRpYyBDRE1Q
cm94eSogZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1j
ZG0tcHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQg
dGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVw
c3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBj
YXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAg
KHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNv
bHZlIGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVy
IHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQg
aWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUg
YXMgaXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2Rl
LiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1
ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1
cworICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgewor
ICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0
X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxD
RE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChw
cm94eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVk
IGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHkt
PnJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBu
b3QgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09C
SkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhw
cml2LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0
QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFj
aENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVBy
b3h5KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFT
UyhzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NU
X0VWRU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJF
QU1fT09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90
ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91
dC1vZi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8g
cHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9u
Ci0gICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBz
byB0aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZh
aWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBD
RE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2
LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFj
aGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5Owor
ICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBw
cml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2Vs
ZikpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJv
eHkqIHByb3h5ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAgICAgaWYg
KHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZyb20gY29u
dGV4dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBpZiAo
a2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnByb3h5Q0RNKSkgewotICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkIik7Ci0gICAgICAgICAg
ICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5jb25kaXRpb24u
bm90aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdi
b29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50
KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gRkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9u
IGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQg
ZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAgIC8vIHByZWZlcnJlZCBzeXN0
ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgorICAgIC8vIGV2ZW50
cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGV5IG11c3QgYmUKKyAg
ICAvLyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkp
IHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAg
QVNTRVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVtcHQtdG8tZGVjcnlwdCIpKTsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgYXR0ZW1wdC10by1kZWNy
eXB0Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNl
bGYpOwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBU
UlVFOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzU0
LDYgQEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSog
dHJhbnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
Z2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfaGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRv
ci13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BS
SVZBVEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5
cHRvci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJp
bnRpbmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGlu
Z0ZvcktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJl
bnRfY2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBH
c3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAt
MzYzLDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShH
c3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFu
c2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBw
cml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRD
b25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChH
c3RFbGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUKGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsK
KyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VC
S0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKLSAgICBpZiAoZ3N0X2Nv
bnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7Ci0g
ICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3Rf
Y29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0g
PSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVy
KHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNl
aXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgaWYg
KGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0tcHJveHkiKSkg
eworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUo
Z3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1wcm94eSIpOworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgICAgICBw
cml2LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFs
dWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5Lmdl
dCgpKTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJv
eHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmlu
ZGV4IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjg1NzVhMDcxMDJi
ZDEzM2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5o
CkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0Uo
R1NUUkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94
eS5oPgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsOCArNTUsOCBAQCBzdHJ1
Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFz
ZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlv
blN5c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOwotICAgIGJv
b2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVm
ZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIs
IHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsK
KyAgICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOworICAgIGJvb2wgKCpkZWNyeXB0
KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZl
ciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1
YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CiAKIEdfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIz
MmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5
MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RN
OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9
IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9j
a0NETT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQ
dHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0
cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5
Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsK
LX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFr
UHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92
ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5k
ZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5
NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9j
a0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNz
IFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVBy
aXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBT
dWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAg
ICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1J
bnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlD
RE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2Rt
OwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390398</attachid>
            <date>2020-02-11 11:24:14 -0800</date>
            <delta_ts>2020-02-11 12:21:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211192412.patch</filename>
            <type>text/plain</type>
            <size>114981</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uZDU3ZjVlODdlZGYyZWZlMTY2ZTM5MmNjYmYxNTdi
Mjc1YTVlNmMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
IGFuZCBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgMi8gRm9yIG1lZGlhIHBsYXllcnMg
dG8gc2FmZWx5IGFzc2VzcyB0aGUgc3RhdGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAgICAgICAgd2hh
dCB0aGVpciBzdGF0dXMgaXMuCisKKyAgICAgICAgQ0RNUHJveHkgZXhpc3RzIHRvIGFsbG93IHRo
cmVhZC1zYWZlIGFjY2VzcyB0byBhIHJlYWwgQ0RNLCBhbG9uZworICAgICAgICB3aXRoIHRoZWly
IHF1aXJrcy4gVGhlIHR3byBtYWluIHByb2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBvZiBhIENETQor
ICAgICAgICBoYXZlIGluIFdlYktpdCBpcyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RNIGFjY2VzcyBm
cm9tIGJhY2tncm91bmQKKyAgICAgICAgbWVkaWEgdGhyZWFkcy4KKworICAgICAgICBLZXkgbWFu
YWdlbWVudCBpcyBob3cgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEgd2F5CisgICAg
ICAgIGNvaGVyZW50IHdpdGggSmF2YVNjcmlwdCwgdGhlIGNyb3NzLXBsYXRmb3JtIEVNRSBpbXBs
ZW1lbnRhdGlvbiwKKyAgICAgICAgdGhlIHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBhbmQgdGhlIGJh
Y2tncm91bmQgbWVkaWEKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlkZXMgYSBkZWZh
dWx0IGtleSBzdG9yZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIHN1Yi1jbGFzc2VzLiBTdWItY2xh
c3NlcyBjYW4sIG9uIHJlY2VpcHQgb2YgbmV3IGluZm9ybWF0aW9uIGZyb20gYQorICAgICAgICBy
ZWFsIENETSwgdGVsbCBDRE1Qcm94eSBhYm91dCB0aGUga2V5cyBhbmQgdGhlaXIKKyAgICAgICAg
c3RhdHVzZXMuIENETVByb3h5IGlzIGludGVuZGVkIHRvIERvIFRoZSBSaWdodCBUaGluZyBmcm9t
IHRoZXJlLAorICAgICAgICBsZXR0aW5nIEphdmFTY3JpcHQgYW5kIFdlYkNvcmUga25vdyBhbGwg
dGhlIGRldGFpbHMgdGhleSBuZWVkIHRvCisgICAgICAgIGFib3V0IHRoZSBuZXcgc3RhdGUsIGFz
IHdlbGwgYXMgdGhlIG1lZGlhIGRlY29kZSB0aHJlYWRzIHdoZW4gdGhleQorICAgICAgICBuZXh0
IGNvbWUgYXNraW5nLgorCisgICAgICAgIEFjY2VzcyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyBp
cyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICB0aHJlYWQtdW5zYWZlIENETUlu
c3RhbmNlLiBXZSB1c2VkIHRvIGdldCBhd2F5IHdpdGggZG9pbmcgZXhhY3RseQorICAgICAgICB0
aGlzLCBidXQgV2ViQ29yZSByZWNlbnRseSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBhYm91dAorICAg
ICAgICB0aHJlYWQtdW5zYWZlIGFjY2VzcyBvZiBtYWluLXRocmVhZC1vbmx5IGRhdGEsIGFuZCB3
ZSBoYWQgdG8gZG8KKyAgICAgICAgc29tZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0cy4gVGhhdCBz
b21ldGhpbmcgd2FzIFByb3h5Q0RNIChhCisgICAgICAgIHRlcnJpYmxlIG5hbWUsIHJlbW92ZWQg
bm93KSwgd2hpY2ggd2FzIGEgaGFjayBhbmQgcGxlYXNlIGZvcmdldAorICAgICAgICBhYm91dCBp
dC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVseSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLCBh
bmQKKyAgICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQtc2FmZSB2aWV3
IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFkcyB0byBpbnRl
cnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFuZCBwZXJmb3JtCisgICAgICAgIENETS1zcGVjaWZpYyBk
ZWNyeXB0aW9uIC8gZGVjb2RlLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBDRE1Q
cm94eSB0byBidWlsZAorICAgICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1v
dmVBbGxLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzdG9wcGVkV2FpdGlu
Z0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZvcktl
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWlsYWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20p
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20p
OgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojpp
ZEFzU2hhcmVkQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6
OmFkZFNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpyZW1vdmVTZXNz
aW9uUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6bnVtU2Vzc2lvblJlZmVyZW5j
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om51bUtleXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpy
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnNldFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OmlzV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6dHJhY2tTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAg
dHJhY2tTZXNzaW9uIG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1F
CisgICAgICAgIHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFj
ayBvZiBnZW5lcmF0ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVz
ZSBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjppc29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94
eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KTog
RGVsZXRlZC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHVubmVjZXNzYXJpbHkKKyAgICAgICAgc29y
dGluZyB0aGUga2V5IHZlY3RvcnMuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG8gaW1wb3Nl
IGFuCisgICAgICAgIG9yZGVyaW5nIG9uIGtleXMsIHNvIEkgcmVtb3ZlZCBpdC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oOiBSZWZhY3Rv
ciB0byB1c2UKKyAgICAgICAgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMuaDoKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIFByb3h5Q0RNIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZSk6CisgICAgICAgIFJl
ZmFjdG9yZWQgb3V0IG9mIHN5bmNNZXNzYWdlLiBUaGUgY29kZSB3YXMgbW92ZWQgaGVyZSBhbmQg
aW50bworICAgICAgICB3YWl0Rm9yQ0RNQXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0dGFjaG1lbnQpOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRpbmctZm9yLWtl
eSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgorICAgICAgICBF
bmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJhc2VkIHBvcnRz
IHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xhc3NlcyBmcm9t
IGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEgaGFuZGxlIHRv
IHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5hZ2VtZW50LCBz
byB3aXJlIHRoYXQgaW4gaGVyZSB0b28uIEFsc28gd2lyZSB0aGUKKyAgICAgICAgR1N0cmVhbWVy
IHNwZWNpZmljIENsZWFyS2V5IHByb3h5IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5IGNvbnN0KTog
S2V5CisgICAgICAgIHN0YXR1cyBub3RpZmljYXRpb25zIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkg
b2YgdGhlIENETVByb3h5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOiBOb3cK
KyAgICAgICAgd2UgdXNlIENETUluc3RhbmNlUHJveHksIG5vdCBDRE1JbnN0YW5jZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
OgorICAgICAgICBBZGRlZC4gRyotc3BlY2lmaWMgQ2xlYXJLZXkgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVhcktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktl
eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxT
YW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRT
dWJzYW1wbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRpYWxpemVHY3J5
cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVmYWN0
b3IgdG8gdXNlIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0
X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6
CisgICAgICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRl
ZC4gVGhpcyB3YXMgYSBiYWRseSBuYW1lZCBtZXRob2QgdGhhdAorICAgICAgICBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGNkbVByb3h5QXR0YWNoZWQuCisgICAgICAgIChmaW5kQW5kU2V0S2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh0cmFu
c2Zvcm1JblBsYWNlKToKKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOgorICAgICAgICAo
Z2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dCk6CisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6Cisg
ICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6CisgICAgICAgIChzaW5rRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLgorICAgICAgICAocXVlcnlIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZTo6cHJveHlDRE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuaDoKKwogMjAyMC0wMi0wNyAg
eW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFuZGF0ZSBVVUlE
IHZlcnNpb24gNCBmb3IgbUROUyBJQ0UgY2FuZGlkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5Mjhl
YzU1ZmVmYTk5NzA3MDhmNjUwNzcxZDBlOTY2YTNmYWIxY2RmLi42MmU1MzVhOWEwMWRlYzgxZGU0
YTQzYjQ1Mzg2MTcwMzQ3YWI2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxNyw2ICsxODE3LDcg
QEAgcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xl
LmNwcAogCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAorcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1
N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5
YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0
QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyog
Q0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RN
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAw
RjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1
RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRB
NUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2
MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RN
UmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVz
dHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXgg
ODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYy
ZGQ4YWVjN2NlYmUzMzRhYTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZQpAQCAtMTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSkKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkK
IAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3Rh
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5j
ZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYz
ZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcg
KzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBj
bGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRv
IGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNl
ZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQ
cm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGlj
OgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1J
bnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7
CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJiODE5NWJjN2Y2NDRmZjk3ODM5Mjk0ZWU5ZTE3N2U0YWI2NzhkNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hl
eFN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBL
ZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVj
dG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJp
bmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICBy
ZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQor
Cit2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0
b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRo
YXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAg
ICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBv
dmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5l
ZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0
b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQo
a2V5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBl
biB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRo
ZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJM
RUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5
IC0ga2V5IHN0b3JlIG5vdyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBtX2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5
IC0gS2V5IElEOiAlcyIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRp
ZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQo
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvciA9IGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRv
JiBrZXlTdGF0dXMgOiBrZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQg
PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtl
eVN0YXR1c1ZlY3RvcjsKK30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRy
PEtleT4+JiYgbmV3S2V5cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92
ZShrZXkpKSkKKyAgICAgICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVm
UHRyPEtleT4mJiBrZXkpCit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAg
IHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhb
Jl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkg
PT0gKnN0b3JlZEtleTsKKyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGtleVdpdGhNYXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNh
biB0aGlzIHJlYWxseSBoYXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5
IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAg
ICBtX2tleXMuYXBwZW5kKGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBrZXktPmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3Rv
cmVDaGFuZ2U7Cit9CisKK3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJiBvdGhlcikKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAg
ICAgICByZW1vdmUoa2V5KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0
cjxLZXk+JiBrZXkpCit7CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNp
emVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElE
ICVzIGFuZCAldSBzZXNzaW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwga2V5LT5udW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5
V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07Cisg
ICAgICAgIGtleVdpdGhNYXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7Cisg
ICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0
aCBJRCAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4
KTsKKyAgICAgICAgICAgIHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUg
a2V5IHdpdGggSUQgJXMgaWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25z
dCBWZWN0b3I8dWludDhfdD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleUlEKSBjb25zdAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7
CisgICAgICAgIGlmICgqa2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFs
dWUoKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0
IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNL
ZXlTdGF0dXNWZWN0b3IoKSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9r
ZXlzKQorICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxS
ZWY8U2hhcmVkQnVmZmVyPiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM+IHsga2V5LT5p
ZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkgfSk7CisgICAgcmV0dXJuIGtleVN0YXR1
c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3Rv
cmUmIG5ld0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0
ZXgpOworICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJF
TUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUi
KTsKKyAgICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6
OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFu
Y2U7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
a2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7
CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVBy
b3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7Cisg
ICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94
eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBz
dG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAg
IG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVu
Y29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1l
YW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5n
IGEga2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBt
b3JlIGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9y
S2V5T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0
aW5nRm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5
aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tl
eVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5
OjpNYXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAg
ICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtl
eUlEKTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElE
ICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRh
KCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2
YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RN
UHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBr
ZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVz
IiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShr
ZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXko
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wg
d2FzV2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAg
IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3BsYXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0Zvcktl
eUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVk
V2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXll
ciAmJiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0
b3JzV2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1f
bnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5
ZXIgPSBtX3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgaXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5n
Rm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1l
cmdlS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBO
b3RpZnkgSlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1J
bnN0YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlm
eWluZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAg
IG1fY2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0
YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtl
eXNGcm9tKGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNmFkNzkzNzdkYTlhYjJi
MjI5MTRmZWFkNDIzOWIwZGMyMzVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1
ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0
dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUo
a2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVy
PiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYg
dmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0Owor
ICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUg
ZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0
YXR1cy4KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpIHsgcmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJl
dHVybiBrLm1faWQgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJ
RDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCBy
ZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNl
c3Npb25SZWZlcmVuY2VzLS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygp
IGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVy
ZW5jZXM7IH0KKyAgICBmcmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVz
IHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZh
bHVlKQorICAgICAgICA6IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBt
X3ZhbHVlKFdURk1vdmUoa2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsK
KyAgICBWZWN0b3I8dWludDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsK
KyAgICB1bnNpZ25lZCBtX251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3Mg
S2V5U3RvcmUgeworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3Qg
S2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0
b3JlJiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsg
fQorICAgIGJvb2wgYWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRk
KFJlZlB0cjxLZXk+JiYpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7Cisg
ICAgdW5zaWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNv
bnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNv
bnN0OworCisgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAg
YXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBl
bmQoKSB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJi
ZWdpbigpOyB9CisgICAgYXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2lu
KCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0
byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAg
IFZlY3RvcjxSZWZQdHI8S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94
eTsKKworLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2Fk
ZS4gVGhpcyBjYW4gYmUgdXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVj
cnlwdG9ycykuCitjbGFzcyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxD
RE1Qcm94eT4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlX
YWl0VGltZVNlY29uZHMgPSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVs
dDsKKworICAgIHZvaWQgdXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3Jl
KTsKKyAgICB2b2lkIHNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVk
OgorICAgIFZlY3Rvcjx1aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29u
c3Q7CisgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIG11dGFibGUgTG9jayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSog
bV9pbnN0YW5jZTsKKworICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxl
IENvbmRpdGlvbiBtX2tleXNDb25kaXRpb247CisgICAgLy8gRklYTUU6IER1cGxpY2F0ZWQga2V5
IHN0b3JlcyBpbiB0aGUgaW5zdGFuY2UgYW5kIHRoZSBwcm94eSBhcmUgcHJvYmFibHkgbm90IG5l
ZWRlZCwgYnV0IHNpbXBsaWZpZWQKKyAgICAvLyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBp
biB0ZXJtcyBvZiB0aHJlYWRpbmcgaW52YXJpYW50cy4KKyAgICBLZXlTdG9yZSBtX2tleVN0b3Jl
OworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24gbWFuYWdlbWVudCBjb2Rl
IGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAicmVhbCBDRE0iIHN0YXRl
IGNoYW5nZXMgdG8gSlMuCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3Rh
bmNlIHsKK3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVh
ZCBvbmx5LgorICAgIHZvaWQgc2V0UHJveHkoUmVmPENETVByb3h5PiYmIHByb3h5KQorICAgIHsK
KyAgICAgICAgbV9jZG1Qcm94eSA9IFdURk1vdmUocHJveHkpOworICAgICAgICBtX2NkbVByb3h5
LT5zZXRJbnN0YW5jZSh0aGlzKTsKKyAgICB9CisgICAgdm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0
IEtleVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYp
OworCisgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1ldGhvZHMgLSBtYWluIHRocmVhZCBvbmx5
LgorICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
cktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlw
dG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CisgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQor
CisgICAgLy8gUHJveHkgbWV0aG9kcyAtIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgdm9pZCBz
dGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgdHJhY2tTZXNzaW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0
YW5jZVNlc3Npb24+IHNlc3Npb24pIHsgbV9zZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbik7IH0KKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8Q0RNUHJveHk+IG1fY2RtUHJveHk7CisgICAgLy8gRklYTUU6
IFdlYWtQdHIgZm9yIHRoZSBtX3BsYXllcj8gVGhpcyBpcyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91
bmQgYW5kIG1haW4gdGhyZWFkcywgaXQncworICAgIC8vIGNvbmNlcm5pbmcgd2UgY291bGQgYmUg
YWNjZXNzaW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzaHV0ZG93biBvbiB0aGUgbWFpbi10aHJl
YWQsIGVoPworICAgIC8vIEFzIGEgQ0RNUHJveHksIHdlICoqKnNob3VsZCoqKiBiZSB0dXJuZWQg
b2ZmIGJlZm9yZSB0aGlzIHBvaW50ZXIgZXZlciBnb2VzIGJhZC4KKyAgICBNZWRpYVBsYXllciog
bV9wbGF5ZXIgeyBudWxscHRyIH07IC8vIEZJWE1FOiBNYWluVGhyZWFkPFQ+PworCisgICAgc3Rk
OjphdG9taWM8aW50PiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworICAgIFZlY3RvcjxS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPj4gbV9zZXNzaW9uczsKKworICAgIEtleVN0b3JlIG1f
a2V5U3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0
ODVkYjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjFjZWZkOWZiNDBlODU1MzM3
ZGU5MmJlZTQ5MTFjMjQ3NjNiMzU3ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
QEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNDMsMzQgKzQ1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktl
eSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1j
ZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10g
PSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMs
IDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2ln
bmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1J
ZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNpemUgPSAxNjsKLQotY2xhc3MgQ2xlYXJLZXlTdGF0
ZSB7Ci0gICAgdXNpbmcgS2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3Rh
bmNlQ2xlYXJLZXk6OktleT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUm
IHNpbmdsZXRvbigpOwotCi0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0K
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0
ZT47Ci0gICAgQ2xlYXJLZXlTdGF0ZSgpOwotICAgIEtleVN0b3JlIG1fa2V5czsKLX07Ci0KLUNs
ZWFyS2V5U3RhdGUmIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPENsZWFyS2V5U3RhdGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7
Ci19Ci0KLUNsZWFyS2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHN0YXRp
YyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVy
JiBidWZmZXIpCiB7CiAgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9l
c24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgpAQCAtODgsNyArNjIsNyBA
QCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtl
eT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAg
IC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJz
ZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xp
Y2Vuc2UnIGZvcm1hdC4KQEAgLTEwMSw3ICs3NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRl
Y29kZWRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9v
bCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5
LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzkw
LDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVj
dC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwg
a2V5VmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6
OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJM
RGVjb2RlKGtleVZhbHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
a2V5SUREYXRhKSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkg
fSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3Zl
KGtleVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsK
ICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMTgxLDcgKzE1NSw3IEBAIHN0YXRpYyBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXRE
YXRhKGNvbnN0CiAgICAgd2hpbGUgKHRydWUpIHsKIAogICAgICAgICAvLyBDaGVjayB0aGUgb3Zl
cmZsb3cgSW5pdERhdGEuCi0gICAgICAgIGlmIChpbmRleCArIDEyICsgY2xlYXJLZXlDZW5jU3lz
dGVtSWRTaXplID49IGluaXREYXRhU2l6ZSkKKyAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBDbGVh
cktleTo6Y2VuY1N5c3RlbUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgICAgICByZXR1
cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIHBzc2hTaXplID0gZGF0YVtpbmRleCArIDJdICogMjU2
ICsgZGF0YVtpbmRleCArIDNdOwpAQCAtMTkxLDcgKzE2NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRh
KGNvbnN0CiAgICAgICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIC8vIDEyID0g
Qk1GRiBib3ggaGVhZGVyICsgRnVsbCBib3ggaGVhZGVyLgotICAgICAgICBpZiAoIW1lbWNtcCgm
ZGF0YVtpbmRleCArIDEyXSwgY2xlYXJLZXlDZW5jU3lzdGVtSWQsIGNsZWFyS2V5Q2VuY1N5c3Rl
bUlkU2l6ZSkpIHsKKyAgICAgICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIENsZWFy
S2V5OjpjZW5jU3lzdGVtSWQsIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKSkgewogICAgICAg
ICAgICAgZm91bmRQc3NoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yMDIsNyArMTc2LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4
dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpZiAoIWZvdW5k
UHNzaCkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAotICAgIGluZGV4ICs9ICgxMiArIGNs
ZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJv
eCBoZWFkZXIpICsgU3lzdGVtSUQgc2l6ZS4KKyAgICBpbmRleCArPSAoMTIgKyBDbGVhcktleTo6
Y2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFk
ZXIpICsgU3lzdGVtSUQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KICAgICBp
ZiAoaW5kZXggKyAzID49IGluaXREYXRhU2l6ZSkKQEAgLTIxMiw3ICsxODYsNyBAQCBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShjb25zdAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAK
ICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAu
Zmlyc3QgKiBrZXlJZFNpemUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChr
ZXlJZHNNYXAuZmlyc3QgKiBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRh
U2l6ZSkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQg
PSBpbmRleDsgLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4K
QEAgLTI1MSw5ICsyMjUsOSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlk
c0Zyb21DZW5jSW5pdERhdGEoY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRz
IgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkg
aXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmlu
ZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENv
dW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
JmRhdGFbaW5kZXhdLCBrZXlJZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsK
ICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCAr
PSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
OwogICAgIH0KIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0Fy
cmF5KSk7CkBAIC00NTYsNDQgKzQzMCw2IEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICBy
ZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmlu
ZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwu
IFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBh
bGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0v
LyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJp
bGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tn
cm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAo
aS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRo
cmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNh
biBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8g
U2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNy
b3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtl
eShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKLXsKLSAgICByZXR1cm4geyBr
ZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5z
aXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRh
LT5zaXplKCkpIH07Ci19Ci0KLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IFBy
b3h5Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cygpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIHRo
ZSBrZXlzIG9mIGFsbCBzZXNzaW9ucywgbWF5IGJlIGNvcGllZCB0byBiYWNrZ3JvdW5kIHRocmVh
ZHMuCi0gICAgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gYWxsS2V5cyB7IH07Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7Ci0gICAgc2l6ZV90IGluaXRpYWxD
YXBhY2l0eSA9IDA7Ci0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpz
aW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpCi0gICAgICAgIGluaXRpYWxDYXBhY2l0eSArPSBr
ZXlWZWN0b3Iuc2l6ZSgpOwotICAgIGFsbEtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0
aWFsQ2FwYWNpdHkpOwotCi0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRl
OjpzaW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRl
ZEtleShrZXkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsS2V5czsKLX0KLQotQ0RNSW5zdGFu
Y2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0
UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKLXsKLX0KLQogQ0RNSW5zdGFuY2VDbGVhcktl
eTo6fkNETUluc3RhbmNlQ2xlYXJLZXkoKSA9IGRlZmF1bHQ7CiAKIENETUluc3RhbmNlOjpTdWNj
ZXNzVmFsdWUgQ0RNSW5zdGFuY2VDbGVhcktleTo6aW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9u
KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKQpAQCAtNTM1LDM2ICs0NzEsOSBAQCBj
b25zdCBTdHJpbmcmIENETUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Np
b24oKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXkoKSk7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5SUREYXRhLT50b0hl
eFN0cmluZygpLCAiXSIpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Ojpr
ZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtl
eVZhbHVlRGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsy
LmtleUlERGF0YSk7Ci0KLSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9PSAqazIua2V5SUREYXRh
OwotfQotCi1ib29sIG9wZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsx
LCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5r
ZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgaWYgKGsxLmtleUlE
RGF0YS0+c2l6ZSgpICE9IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gazEu
a2V5SUREYXRhLT5zaXplKCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsKLQotICAgIHJldHVybiBt
ZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJ
RERhdGEtPnNpemUoKSk7CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lv
biA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgqdGhpcykpOworICAg
IHRyYWNrU2Vzc2lvbihuZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAog
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBp
bml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01NzIsNiArNDgxLDggQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMyX3Qgc19zZXNzaW9uSWRW
YWx1ZSA9IDA7CiAgICAgKytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAgbV9zZXNzaW9uSUQgPSBT
dHJpbmc6Om51bWJlcihzX3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAgICAgICAgIGluaXREYXRh
ID0gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCkBAIC01
NzksMTggKzQ5MCwyMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0
TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBpbml0RGF0
YSA9IGV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCiAgICAg
Y2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERh
dGEpLCBzZXNzaW9uSWRWYWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkgbXV0YWJsZSB7CisgICAg
ICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vz
c2lvbklkVmFsdWUpLCBmYWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoaW5pdERhdGEpLCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2NlZWRlZCk7CiAgICAgICAg
IH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNl
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVy
JiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8g
VXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNo
LCBhdm9pZGluZwotICAgIC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgor
I2lmIExPR19ESVNBQkxFRCB8fCBSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIC8vIFdlIG9ubHkg
dXNlIHRoZSBzZXNpb24gSUQgZm9yIGRlYnVnIGxvZ2dpbmcuIFRoZSB2ZXJib3NlIHByZXByb2Nl
c3NvciBjaGVja3MgYXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgTWFjIHBvcnQgaGFzIC1XZXJyb3Ig
LVd1bnVzZWQtcGFyYW1ldGVyLgorICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlm
CiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10o
Ym9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgY2hhbmdl
ZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoCkBAIC02MDQsNTIgKzUxOCwyMyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7
CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNl
c3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJyZW50bHkgY29u
dGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtl
eXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgq
cm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Igb2YgS2V5IG9i
amVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMg
c3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVu
c3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wga2V5c0NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7
Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdp
dGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtl
eVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAgWyZkZWNv
ZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5Owot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlE
ICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hp
bmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRL
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVw
ZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtleSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFw
cGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBrZXlzQ2hhbmdl
ZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykpOwogCi0gICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMi
LCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
c2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8S2V5U3Rh
dHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAg
ICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6OnNvcnQoa2V5VmVj
dG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAgIEtleVN0YXR1c1Zl
Y3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtl
eS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNoYW5nZWRLZXlzID0g
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pT
S2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwpA
QCAtNjU3LDQ3ICs1NDIsMzEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICB9CiAKICAg
ICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3JtYXRpb24gYW5kIHVz
ZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQuCi0gICAgICAgIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lvbklkKTsKKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xl
ZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7
CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5vIGZvcm1hdCB3YXMg
cmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVw
ZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vzc2lvbklkLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3Vj
Y2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0
IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2Ug
YSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2
b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgotICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9wdGlvbmFsPEtleVN0
YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzLCBTZXNzaW9u
TG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
Ci0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3ZlKGV4aXN0aW5nS2V5
cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfTsKKyNpZmRlZiBOREVCVUcKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lv
bklkKTsKKyNlbmRpZgogCi0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2Jq
ZWN0LCByZXByZXNlbnRpbmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlzIHNlc3Npb24uCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0gICAgICAgIGF1dG8m
IGtleXMgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8g
aXQgPSBrZXlzLmZpbmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkp
IHsKLSAgICAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0LCBGYWlsZWQsIFNl
c3Npb25Mb2FkRmFpbHVyZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJUKHNlc3Npb25JZCA9
PSBtX3Nlc3Npb25JRCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1f
a2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgJmtleVN0YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCi0gICAgICAgIGF1dG8mIGtl
eVZlY3RvciA9IGl0LT52YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChz
dGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwg
a2V5LnN0YXR1cyB9KTsKLSAgICB9Ci0KLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5
U3RhdHVzVmVjdG9yKSwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNzEzLDcgKzU4
Miw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjCiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNl
bnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8v
IFVzZSBhIGhlbHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBkaXNwYXRj
aCwgYXZvaWRpbmcgZHVwbGljYXRlZCBjYWxsT25NYWluVGhyZWFkKCkgY2FsbHMuCisgICAgQVNT
RVJUKHNlc3Npb25JZCA9PSBtX3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRpc3BhdGNoQ2FsbGJh
Y2sgPQogICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0b3ImJiBrZXlTdGF0
dXNWZWN0b3IsIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3NhZ2UsIFN1Y2Nlc3NW
YWx1ZSBzdWNjZXNzKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNzI3LDM1
ICs1OTcsMTcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lv
bkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0
aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFu
ZCB0aGUgbWVzc2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlTdGF0dXNWZWN0b3Ig
a2V5U3RhdHVzVmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNlZCgpOwogICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAvLyBSZXRyaWV2ZSBp
bmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcgaWYgbm9uZSBpcyBm
b3VuZC4KLSAgICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtl
eXMoKTsKLSAgICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBp
ZiAoaXQgPT0ga2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhLZXlT
dGF0dXNWZWN0b3IgeyB9LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHJpZXZlIHRoZSBL
ZXkgdmVjdG9yLCBjb250YWluaW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uLCBhbmQK
LSAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9yIHRoaXMgc2Vzc2lv
bi4KLSAgICAgICAgYXV0byBrZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1ZSk7Ci0gICAgICAg
IGtleXMucmVtb3ZlKGl0KTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1Zl
Y3RvciBvYmplY3QsIHBhaXJpbmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFzZWQnIHN0YXR1cy4K
LSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9y
LnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAg
ICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1
ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9
KTsKLQogICAgICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNl
bnNlIHJlbGVhc2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8g
b2YgYmFzZTY0VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZl
Y3RvcikgewotICAgICAgICAgICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRhLT5zaXplKCkgPD0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBh
cnJheS0+cHVzaFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5SUREYXRhLT5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXplKCkpKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFz
ZTY0VVJMRW5jb2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92
ZShhcnJheSkpOwogICAgICAgICB9CkBAIC03NjYsNiArNjE4LDcgQEAgdm9pZCBDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9u
SWQsIExpY2UKICAgICAgICAgbWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VD
U3RyaW5nLmRhdGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0KIAorICAgIG1f
a2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShr
ZXlTdGF0dXNWZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1Y2Nlc3NWYWx1
ZTo6U3VjY2VlZGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5kZXggODViMzE5
YjFhMzhjMTIxNjk5MTk3NWI4MDE5YWQyYjE2YjM2YzE0Ny4uNjcwNGFlN2E5NTdmMzJmZTFmODQ5
ODNlZDNiM2Y2NTAyYTUzMTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC0zMSwx
NCArMzEsMjggQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5jbHVkZSAiQ0RN
RmFjdG9yeS5oIgotI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiQ0RNSW5zdGFu
Y2VTZXNzaW9uLmgiCiAjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgQ2xlYXJLZXkgeworCisvLyBDbGVh
cktleSBDRU5DIFN5c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0
YS1jZW5jLyNjb21tb24tc3lzdGVtCitjb25zdCB1aW50OF90IGNlbmNTeXN0ZW1JZFtdID0geyAw
eDEwLCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUz
LCAweDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBj
ZW5jU3lzdGVtSWRTaXplID0gc2l6ZW9mKGNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMx
MjhDVFJCbG9ja1NpemVJbkJ5dGVzID0gMTYsCisgICAgS2V5SURTaXplSW5CeXRlcyA9IDE2LAor
ICAgIElWU2l6ZUluQnl0ZXMgPSAxNiwKK307CisKK30gLy8gbmFtZXNwYWNlIENsZWFyS2V5CisK
IGNsYXNzIENETUZhY3RvcnlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc3LDI3ICs5MSwxMiBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJp
bmcmKSBjb25zdCBmaW5hbDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBw
dWJsaWMgUHJveHlDRE0geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1Ymxp
YyBDRE1JbnN0YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVh
cktleT4gewogcHVibGljOgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNl
c3Npb246OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAg
ICAgIFN0cmluZyBrZXlWYWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RN
Q2xlYXJLZXkoKSA9IGRlZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlz
KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0K
LWNsYXNzIENETUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7Ci1wdWJsaWM6Ci0gICAg
Q0RNSW5zdGFuY2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXko
KTsKIAorICAgIC8vIENETUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVu
dGF0aW9uVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xl
YXJLZXk7IH0KLQogICAgIFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24o
Y29uc3QgQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1
ZSBzZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNj
ZXNzVmFsdWUgc2V0UGVyc2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0
NyArMTA0LDIyIEBAIHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9y
eShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNv
bnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24o
KSBmaW5hbDsKLQotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0
YTsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAg
IFN0cmluZyBrZXlJREFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFz
U3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5
ICZvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0g
ICAgICAgICAgICBBU1NFUlQob3RoZXIua2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVy
biAqa2V5VmFsdWVEYXRhID09ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBUd28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25v
cmluZyBrZXkgdmFsdWUgYW5kIHN0YXR1cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9y
ZGVyZWQgYnkgdGhlaXIgSURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAg
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7
Ci0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBL
ZXkgJmsyKSB7IHJldHVybiAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFv
cGVyYXRvcj09KGsxLCBrMikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4g
IW9wZXJhdG9yPihrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29u
c3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9
Ci0gICAgfTsKLQotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3Byb3h5Q0RNOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBt
X3Byb3h5Q0RNOwogfTsKIAogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwg
OiBwdWJsaWMgQ0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleShDRE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJ
bnN0YW5jZShwYXJlbnQpIHsgfQogICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUs
IGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0
RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShj
b25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVw
ZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmlu
YWw7CiAgICAgdm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2Fs
bGJhY2smJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcm
LCBMaWNlbnNlVHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2
b2lkIHN0b3JlUmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fc2Vzc2lvbklEOworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFy
ZW50SW5zdGFuY2U7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5
NTM0YzQ2ZmI0ZjEwMjk5NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYz
ZGQ5OTRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RN
SW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJs
aWM6CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZm
ZXI+JiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYpIGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNl
c3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBj
b25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCBhMTJlZjRmNmRiYTZmMDE1ZTc2MTUxZjE0N2NjNmMwNzllNjJkYTdlLi41
NDVhY2M3NWMwMTdkYjlkMmE3NDhjOTlkNDRiMWE2MzIwZTdhM2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNjUsNiArNjUsNyBAQAog
CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgor
I2luY2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCkBAIC0xNzg4LDYgKzE3ODksNTAgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQq
IHBpcGVsaW5lKQogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgIEluaXREYXRhIGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1f
cHJvdGVjdGlvbk11dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0
aW9uU3lzdGVtRXZlbnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVs
aW5lKCksICJmb3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWls
YWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9u
U3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAo
YXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IEdzdEJ1ZmZlciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vf
cHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRy
KTsKKworICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRh
fSk7CisgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRf
U0VRTlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5p
dERhdGE7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RN
QXR0YWNobWVudCgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0
aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RN
QXR0YWNoID0gZmFsc2U7CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIg
PSBob2xkTG9jayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9
IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0
X3MsIFt0aGlzXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQogewogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNT
QUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0
MSArMTg2OCw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5j
TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlw
dGlvbi1zeXN0ZW0taWQiKSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAg
ICAgICAgIEdTVF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1z
eXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGlu
ZyBkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdl
Iik7Ci0KLSAgICAgICAgSW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0
aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAg
ICAgICBHU1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRv
cnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHBy
b3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAg
ICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5
U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFw
cGVuZCh7ZXZlbnRLZXlTeXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxl
ZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50
ZXJlZChXVEZNb3ZlKGluaXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlk
Q0RNQXR0YWNoID0gZmFsc2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNo
bWVudExvY2tlciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAg
IGRpZENETUF0dGFjaCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0
YWNobWVudE11dGV4LCA0X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXND
RE1BdHRhY2hlZCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZGlkQ0RNQXR0YWNoICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNl
LT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5j
b3VudGVyZWQocGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7Cisg
ICAgICAgIGJvb2wgaXNDRE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAg
ICAgIGlmIChpc0NETUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2Nk
bUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5
c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250
aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3Rl
bSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NS
Q19OQU1FKG1lc3NhZ2UpKTsKIApAQCAtMTg2NSwxMCArMTg3OCwxMSBAQCBib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250
ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdf
VFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1l
c3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdT
VF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBu
byBDRE0gYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMiw2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiAgICAgICAgICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAg
ICAgICAgIGdzdF9tcGVndHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0
cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1r
ZXkgbWVzc2FnZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAg
ICAgICAgICAgc2V0V2FpdGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGUgZGVjcnlwdG9ycyBzaG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIg
YmVpbmcgY3JlYXRlZCBhbmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5
IGFyZSBub3QgYW5kIGN1cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5v
dCBtYWtlIHRoaXMgdmVyeSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ug
c29vbiBhbmQgaXQgZG9lcyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhp
bmcgdGhhdCBjb3VsZCBiZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUg
bWVhbnRpbWUsIGZvcmNlIGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQu
Ci0gICAgICAgICAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXkt
cmVjZWl2ZWQiKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
ZHJtLWtleS1yZWNlaXZlZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRSht
ZXNzYWdlKSk7Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0
dXJlLCAiaHR0cC1oZWFkZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlByb2Nlc3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3Ry
dWN0dXJlKTsKQEAgLTM3MjgsMTQgKzM3MjksMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKKyAg
ICBtX2NkbUluc3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmlu
c3RhbmNlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUlu
c3RhbmNlLT5zZXRQbGF5ZXIobV9wbGF5ZXIpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFByb3h5
KGFkb3B0UmVmKCpuZXcgQ0RNUHJveHlDbGVhcktleSkpOwogCi0gICAgR1JlZlB0cjxHc3RDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5j
ZSIsIEZBTFNFKSk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVm
KGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0
dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNv
bnRleHQuZ2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJj
ZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5n
ZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwg
ImNkbS1wcm94eSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgp
LCBudWxscHRyKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3Bp
cGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250
ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQg
YXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBh
bGwgd2FpdGVycywgc2luY2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkg
d2FpdGluZyBmb3IgYSBDRE0uCkBAIC0zNzU3LDcgKzM3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFu
Y2UpCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENE
TSBpbnN0YW5jZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQo
KSk7CiAgICAgbV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
Z3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVu
dF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQo
KSk7CiB9CiAKQEAgLTM3OTAsNTEgKzM3OTQsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5p
dGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JL
ZXkoYm9vbCBpc1dhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVz
IGRpZCBub3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9y
ZSBidXQgdGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0Uo
ImlzV2FpdGluZ0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRp
bmcoaXNXYWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7
Ci0gICAgaWYgKGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2Fp
dGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2lzV2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUco
IndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5n
Rm9yS2V5KSk7Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3Rh
bmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAw
KTsKLQotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVl
cnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0
X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsK
LSAgICBpZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBn
c3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAg
IEdTVF9UUkFDRSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1
bHQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAo
c3RhdGUgPj0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBp
biB0aGUgcGlwZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVs
aW5lIGlzIHNldCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBp
dCBhbmQgYXNrIHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdz
dEl0ZXJhdG9yPiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlw
ZWxpbmUuZ2V0KCkpKSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0
OwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRv
cl9mb2xkKGl0ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBn
cG9pbnRlciBkYXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCog
ZWxlbWVudCA9IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAg
ICAgICAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0
X2VsZW1lbnRfcXVlcnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwg
cXVlcnkuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVS
QVRPUl9SRVNZTkMpCi0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRv
ci5nZXQoKSk7Ci0gICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRP
Ul9SRVNZTkMpOwotICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VS
Uk9SKQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9y
Iik7Ci0gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsK
LSAgICAgICAgR1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVy
YXRvclJlc3VsdCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwog
fQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aAppbmRleCBiMmJiNTQxYTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li41MjFiMjBk
MTFjYzhkZDk0YmUyODRkNzQ2OTljZDI3MTdiNGUwNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0
cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNl
bmRpZgorCiB0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsK
IHR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1
Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVj
dGVkOgogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1l
bnRNdXRleDsKICAgICBDb25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJl
ZlB0cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5z
dGFuY2VQcm94eT4gbV9jZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7
IC8vIEd1YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNo
U2V0PHVpbnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw4
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9j
ZG1JbnN0YW5jZTsgfQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNl
KCk7CiAgICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsK
LSAgICB2b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgSW5pdERhdGEgcGFyc2VJbml0
RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgYm9vbCB3YWl0Rm9y
Q0RNQXR0YWNobWVudCgpOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNo
dXR0aW5nRG93bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgwNDA0NTI4N2IzOTZhODUxMjgyN2ZjOGNiYTg0N2EyNDFhNTQ0MmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NE
TVByb3h5Q2xlYXJLZXkuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAor
ICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDRE1Qcm94eUNsZWFyS2V5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlT3Jk
ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9v
bCByZWFkVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNp
emVfdCYgb2Zmc2V0LCB1aW50MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQs
IG9mZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNp
emVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaGwo
KnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7
CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGJvb2wgcmVhZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplLCBzaXplX3QmIG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9B
Ukcob2Zmc2V0LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBv
ZmZzZXQgPCBzaXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1
ZSA9IG50b2hzKCpyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciAr
IG9mZnNldCkpOworICAgIG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94
eUNsZWFyS2V5KCkKK3sKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOworfQor
Citib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNE
ZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdWludDhfdCBjdHJbQ2xlYXJLZXk6OkFFUzEy
OENUUkJsb2NrU2l6ZUluQnl0ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09IDgp
IHsKKyAgICAgICAgLy8gSVNPL0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKKworICAgICAg
ICAvLyBXaGVuIGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBsZWFzdCBzaWduaWZpY2Fu
dCA4CisgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElWIChieXRlcyA4IHRvIDE1KSBT
SEFMTCBiZSBzZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAgICAgbWVtc2V0KGN0ciArIDgs
IDAsIDgpOworICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcyk7CisK
KyAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1f
Z2NyeUhhbmRsZSwgY3RyLCBDbGVhcktleTo6SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIp
OiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6
Y2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAg
ICAvLyBGSVhNRTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3Rp
bGwgZXhwb3NpbmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0
IEFQST8gVGhlc2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3Qg
YSBodWdlIGRlYWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAg
IGtleUlEVmVjLmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBh
dXRvIGtleURhdGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0
YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9
IGdjcnlfY2lwaGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0
YS0+c2l6ZSgpKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAt
IEVSUk9SKGdjcnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250
ZXh0JiBpbikKK3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5
IC0gZnVsbC1zYW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5
cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJy
b3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVy
LCBpbi5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVN
RSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTog
JXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNl
bmNEZWNyeXB0U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVu
c2lnbmVkIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1w
bGVCdWZmZXJCeXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7
CisgICAgd2hpbGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRC
dWZmZXJTaXplSW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5
dGVzID0gMDsKKyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAw
OworCisgICAgICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsK
KyAgICAgICAgICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1
dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQs
IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0
ZXMgaW4gc3Vic2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVh
ZFVJbnQzMihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6
ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRl
ZEJ5dGVzKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFy
S2V5IC0gY291bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1w
bGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOwor
ICAgICAgICAgICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRC
dWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBu
b3Qgc3VyZSBpZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAo
JWx1IGJ5dGVzIGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVt
Q2xlYXJCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRC
dWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9
IHN1YnNhbXBsZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5
cHRlZEJ5dGVzKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4
ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1
YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVk
QnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAg
ICAgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQo
bV9nY3J5SGFuZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRl
T2Zmc2V0LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAg
ICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVy
X2RlY3J5cHQpOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVk
QnVmZmVyQnl0ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6
OmNlbmNEZWNyeXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQp
Cit7CisgICAgaWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNy
eXB0aW9uS2V5KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlu
cHV0LmlzU3Vic2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNE
ZWNyeXB0RnVsbFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5p
dGlhbGl6ZUdjcnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lw
aGVyX29wZW4oJm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9N
T0RFX0NUUiwgR0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJl
cnJvcihlcnJvcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5v
dCBnZXQgdGhpcyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNUHJveHlDbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyNDBjOWY4
ZDRjZTY3YWFiZDFkZmVkMDdiNjZiNTEwNDEyMThiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktl
eS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKKworI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RN
SW5zdGFuY2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRo
cmVhZHMgc2hvdWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxl
LgorY2xhc3MgQ0RNUHJveHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6
YXRpb246OkVhZ2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleSgpCisgICAgewor
ICAgICAgICBpbml0aWFsaXplR2NyeXB0KCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5
Q2xlYXJLZXkoKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5j
eSBiZXR3ZWVuIFNoYXJlZEJ1ZmZlcnMsCisgICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50
OF90KixzaXplX3R9IGlkaW9tcyBmb3IgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBi
eXRlcy4gRml4IHRoYXQgc29tZWhvdy4gTm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMg
c2luY2UKKyAgICAvLyB0aGV5J3JlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0
IG1haW50YWluCisgICAgLy8gdGhyZWFkLXNhZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6
RGF0YVNlZ21lbnQgY291bGQgYmUKKyAgICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBo
YXMgemVybyBoZWxwZXJzIGZvciBkcm9wcGluZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUg
LyBjb21wYXJhdG9yLWF3YXJlIGNvbnRhaW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRD
b250ZXh0IHsKKyAgICAgICAgLy8gRklYTUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4g
bm9uLWNvcGllZCB0eXBlcy4KKyAgICAgICAgY29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAg
IHNpemVfdCBrZXlJRFNpemVJbkJ5dGVzOworCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2Owor
ICAgICAgICBzaXplX3QgaXZTaXplSW5CeXRlczsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0
ZWRCdWZmZXI7CisgICAgICAgIHNpemVfdCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKwor
ICAgICAgICAvLyBGSVhNRTogR1N0cmVhbWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAg
ICAvLyBJZiB3ZSB3YW50IHRvIGdldCByaWQgb2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3
ZSBjYW4gcGFyc2UgaXQgYmVmb3JlCisgICAgICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBt
YXliZSBoYXZlIGEgVmVjdG9yPHNpemVfdD4gdGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAv
LyBjbGVhci9kZWNyeXB0ZWQvY2xlYXIvZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0
b3I8c3RkOjpwYWlyPHNpemVfdCwgc2l6ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNl
cXVlbmNlcyBvZiBjbGVhci9kZWNyeXB0ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2
ZW4KKyAgICAgICAgLy8gYmVjb21lIGEgc3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0lu
Qnl0ZXMgZm9yIGV4YW1wbGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDY3MzAKKyAgICAgICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1
ZmZlcjsKKyAgICAgICAgc2l6ZV90IHN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAg
ICAgc2l6ZV90IG51bVN1YnNhbXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBj
b25zdCB7IHJldHVybiBudW1TdWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBV
bmNvbmRpdGlvbmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8v
IEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vi
c2FtcGxlCisgICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRl
cyB0byBkbyB3aXRoIGl0LgorICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0
Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBG
SVhNRTogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0
dXJlCisgICAgLy8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlv
biBzY2hlbWVzLiBDYW4gd2UKKyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNv
cmU/CisgICAgYm9vbCBjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRl
eHQmKTsKKyAgICBib29sIGNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29u
dGV4dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4
dCYpOworICAgIGJvb2wgY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYp
OworCisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBX
ZWJDb3JlIGZvciBjcnlwdG8uLi4KKyAgICBnY3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIx
YWU3YzBlOTM0YTkuLjU4M2YyNjE4NmFkZjhiNzg3YmI5MzM2Nzk3MTZiMDQ4M2YxZDJmZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVk
ZSAiQ0RNUHJveHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2lu
Y2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGdjcnlwdC5oPgpAQCAt
MzcsMTIgKzM4LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlIHsKLSAgICBSZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0gICAg
Z2NyeV9jaXBoZXJfaGRfdCBoYW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+IGNk
bVByb3h5OwogfTsKIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGljIGJv
b2wgaGFuZGxlS2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiwgUmVmUHRyPFByb3h5Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4p
Owogc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiwgR3N0QnVmZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVu
c2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NUX0RF
QlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdf
Y2F0ZWdvcnkpOwpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xl
YXJfa2V5X2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3MtPnBy
b3RlY3Rpb25TeXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVVSUQ7
Ci0gICAgY2VuY0NsYXNzLT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhh
bmRsZUtleVJlc3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1Rf
REVCVUdfRlVOQ1BUUihjZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQg
PSBHU1RfREVCVUdfRlVOQ1BUUihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpA
QCAtOTMsNjEgKzkzLDMyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVj
cnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3
ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVj
cnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAgIHNl
bGYtPnByaXYgPSBwcml2OwogICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKCk7Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29w
ZW4oJihwcml2LT5oYW5kbGUpLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVf
Q1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdf
c3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQogCiBz
dGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOwog
ICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7
Ci0gICAgZ2NyeV9jaXBoZXJfY2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19P
QkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRs
ZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJl
ZlB0cjxQcm94eUNETT4gcHJveHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4g
Y2RtUHJveHkpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2
ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RF
Q1JZUFQoc2VsZikpOwotICAgIHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQcm94
eUNETUNsZWFyS2V5Kj4ocHJveHlDRE0uZ2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNE
TTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktl
eSo+KGNkbVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0
YXRpYyBib29sIGZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KiBwcml2LCBjb25zdCBTdHJpbmcmJiBrZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwg
R3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNh
bXBsZUNvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtl
eVZhbHVlOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+aXNv
bGF0ZWRLZXlzKCkpIHsKLSAgICAgICAgaWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAg
ICAgICAgICAgIGtleVZhbHVlID0ga2V5LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRpb24g
a2V5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFs
dWUuc2l6ZUluQnl0ZXMoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90
IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hhcmFj
dGVyczgoKSwga2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChwcml2LCAiZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3Io
ZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQorICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNl
bGYpKTsKIAotc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVy
LCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZlciog
c3ViU2FtcGxlc0J1ZmZlcikKLXsKLSAgICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIm5vIElWIGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIgfHwg
IWtleUlEQnVmZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiaW52YWxpZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTE1NywyNyArMTI4LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJ
WkVdOwotICAgIGlmIChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAgbWVt
c2V0KGN0ciArIDgsIDAsIDgpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+
ZGF0YSgpLCA4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXIt
PnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZC
dWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VU
X1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJyb3Jf
dCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xF
QVJLRVlfU0laRSk7Ci0gICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgImdjcnlfY2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9y
KGNpcGhlckVycm9yKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
IWJ1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIgdG8g
ZGVjcnlwdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBtYXBw
ZWRLZXlJZEJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVm
ZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7
CkBAIC0xOTAsNzIgKzE0MCwyOSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmcobWFw
cGVkS2V5SWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwotCi0g
ICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsK
LQotICAgIGlmICghc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUgZW5j
cnlwdGlvbi4KLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5j
cnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQot
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFw
cGVkQnVmZmVyLT5zaXplKCkpIHsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBo
ZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZm
ZXItPnNpemUoKSwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9u
IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBudWxs
LgotICAgIGlmICghc3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJFcnJvciwgdGhlIHN1YlNhbXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICBh
dXRvIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNy
ZWF0ZShzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQg
dG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIEdVbmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9u
ZXcobWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVy
LT5zaXplKCkpKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNp
emU6ICV6dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGlsZSAo
cG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICBndWludDE2IG5CeXRl
c0NsZWFyID0gMDsKLSAgICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAg
ICAgIGlmIChzYW1wbGVJbmRleCA8IHN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAo
IWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0NsZWFy
KQotICAgICAgICAgICAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFk
ZXIuZ2V0KCksICZuQnl0ZXNFbmNyeXB0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzZWxmLCAidW5zdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVz
RW5jcnlwdGVkID0gbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAgfQot
Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVo
dSBieXRlcyBjbGVhciAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBw
ZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVz
Q2xlYXI7Ci0gICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRl
ZCAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVy
LT5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lw
aGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9u
LCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7
Ci0gICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBpbmRl
eCAldSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9yKGNp
cGhlckVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0cjxH
c3RNYXBwZWRCdWZmZXI+IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlDbGVh
cktleTo6Y2VuY0RlY3J5cHRDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9IG1h
cHBlZEtleUlkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVzID0g
bWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZCdWZm
ZXItPmRhdGEoKTsKKyAgICBjb250ZXh0Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+
c2l6ZSgpOworICAgIGNvbnRleHQuZW5jcnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRh
KCk7CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpOworICAgIGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50Owor
ICAgIGlmICghc3Vic2FtcGxlQ291bnQpCisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZl
ciA9IG51bGxwdHI7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVmZmVy
KTsKKyAgICAgICAgbWFwcGVkU3Vic2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1
ZmZlcjo6Y3JlYXRlKHN1YnNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGlm
ICghbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVy
ID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1YnNh
bXBsZXNCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNl
bmNEZWNyeXB0KGNvbnRleHQpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2
ODNkMDQ3NDg2MGY2ZWY4MTdmMzFjZGMxNWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJh
MTYyNDRjMDc5ODAzNzQ3YzMwNDEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApA
QCAtMjUsMzQgKzI1LDM0IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0Uo
R1NUUkVBTUVSKQogCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3
dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6
UHJveHlDRE07Cit1c2luZyBXZWJDb3JlOjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRfTUVE
SUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9u
RW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0
aW9uRXZlbnQ7Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtleVJl
Y2VpdmVkIHsgZmFsc2UgfTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotICAg
IExvY2sgbXV0ZXg7Ci0gICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJv
eHk+IGNkbVByb3h5OworCisgICAgTG9jayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29uZGl0
aW9uIGNkbUF0dGFjaG1lbnRDb25kaXRpb247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNlY29u
ZHMgTWF4U2Vjb25kc1RvV2FpdEZvckNETVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3RhdGVD
aGFuZ2VSZXR1cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5z
aXRpb24pOwogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENhcHMq
IHRyYW5zZm9ybUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2Fw
cyosIEdzdENhcHMqKTsKIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0
QmFzZVRyYW5zZm9ybSosIEdzdEJ1ZmZlciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhh
bmRsZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVl
cnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7
Ci1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqKTsKIHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCosIEdz
dENvbnRleHQqKTsKIAotCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9j
b21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2Nh
dGVnb3J5CiAKQEAgLTc2LDcgKzc2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1v
bl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBi
YXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJh
bnNmb3JtQ2Fwcyk7CiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFz
c3Rocm91Z2ggPSBGQUxTRTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBH
U1RfREVCVUdfRlVOQ1BUUihzaW5rRXZlbnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xh
c3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKSk7CiB9CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0
Rmxvd1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1
ZmZlciogYnVmZmVyKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
IHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5t
dXRleCk7CiAKLSAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0
LiBXYWl0IGZvciBpdC4KLSAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBmb3Ig
aXQiKTsKLSAgICAgICAgaWYgKEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RB
VEVfUEFVU0VEIHx8IChHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBHU1Rf
U1RBVEVfVk9JRF9QRU5ESU5HICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikp
IDwgR1NUX1NUQVRFX1BBVVNFRCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgImNhbid0IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUi
KTsKLSAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFNlbmQgImRybS1jZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRo
ZSBwbGF5ZXIgdG8gcmVzZW5kIHRoZSBDRE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGluZm9y
bSB3ZSBhcmUgd2FpdGluZyBmb3Iga2V5LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0g
dHJ1ZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYp
LCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJl
X25ld19lbXB0eSgiZHJtLXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIocHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRpb24u
d2FpdEZvcihwcml2LT5tdXRleCwgU2Vjb25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAgIHJl
dHVybiBwcml2LT5rZXlSZWNlaXZlZDsKKyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRv
IGJlIG5lZ290aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlmICgh
cHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5v
dCBhdmFpbGFibGUsIGdvaW5nIHRvIHdhaXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNkbUF0
dGFjaG1lbnRDb25kaXRpb24ud2FpdEZvcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1heFNl
Y29uZHNUb1dhaXRGb3JDRE1Qcm94eSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBwcml2
LT5jZG1Qcm94eTsKICAgICAgICAgfSk7Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQp
IHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxl
Iik7CisgICAgICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc2VsZiwgIkNETVByb3h5IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsKICAg
ICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIpOwot
ICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVtZW50
X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQo
R1NUX09CSkVDVChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVjZWl2
ZWQiKSkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJs
ZSB3aXRoIGFkZHJlc3MgJXAiLCBwcml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAgICAg
R3N0UHJvdGVjdGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQ
cm90ZWN0aW9uTWV0YSo+KGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsK
QEAgLTIwNywzMiArMTk3LDMwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0
YSBmcm9tIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1Rf
U1VQUE9SVEVEOwogICAgIH0KKyAgICBhdXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4g
PSBtYWtlU2NvcGVFeGl0KFtidWZmZXIsIHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdzdF9i
dWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90
ZWN0aW9uTWV0YSkpOworICAgIH0pOwogCiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlmICgh
Z3N0X3N0cnVjdHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUiLCAm
aXZTaXplKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0
IGl2X3NpemUiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRlZDsK
ICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8s
ICJlbmNyeXB0ZWQiLCAmZW5jcnlwdGVkKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJGYWlsZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAK
LSAgICBpZiAoIWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVt
b3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0
YSkpOworICAgIGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKLSAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0aW9u
IG1ldGE6ICUiIEdTVF9QVFJfRk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1
bnNpZ25lZCBzdWJTYW1wbGVDb3VudDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQo
cHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQp
KSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2Ft
cGxlX2NvdW50Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWlu
dGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0
YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFz
ZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRf
dmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlmICgh
dmFsdWUpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBn
ZXQgc3Vic2FtcGxlcyIpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAg
ICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBz
dWJTYW1wbGVzQnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAgICBp
ZiAoIXN1YlNhbXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIlRoZXJlIGlzIG5vIHN1YnNhbXBsZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1w
bGUgY291bnQiKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShw
cm90ZWN0aW9uTWV0YS0+aW5mbywgImtpZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVy
Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICB9CiAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92
YWx1ZV9nZXRfYnVmZmVyKHZhbHVlKTsKQEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxv
d1JldHVybiB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZl
ciogYnVmZmVyKQogICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJpdiIpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAgIGdz
dF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihw
cm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsK
ICAgICB9CiAKQEAgLTI3MCw3MSArMjU5LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5z
Zm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAg
ICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xhc3Mt
PmRlY3J5cHQoc2VsZiwgaXZCdWZmZXIsIGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNv
dW50LCBzdWJTYW1wbGVzQnVmZmVyKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJEZWNyeXB0aW9uIGZhaWxlZCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1
ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZl
cl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rp
b25NZXRhKSk7CiAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBpc0NE
TUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYpCitzdGF0aWMgYm9vbCBpc0NETVByb3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9u
RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklW
QVRFKHNlbGYpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVu
dE11dGV4KTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQocHJp
di0+bXV0ZXguaXNMb2NrZWQoKSk7Ci0KLSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0gICAg
ICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0gICAg
ICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNh
bid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0
aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1lc3Nh
Z2UuIEluIHRoaXMgY2FzZSB0aGF0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ug
b25seSB0aGUgYXBwIChwbGF5ZXIpIGFuc3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVyeSBp
cyBnb2luZyB0byBzb2x2ZSBpdC4gQSBtZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhlbHBm
dWwgYnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhl
IENETUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBv
ZiBhc2tpbmcgZm9yIG9uZSBhcyBpdCBpcwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQg
YnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0
byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBu
ZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwotICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhl
cmUuCi0gICAgICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZh
bHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShj
b250ZXh0LmdldCgpKSwgImNkbS1pbnN0YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJveHlD
RE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2lu
dGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RNKQot
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENE
TSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQoKSwg
cHJpdi0+cHJveHlDRE0tPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQi
KTsKK3N0YXRpYyBDRE1Qcm94eSogZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVO
VChzZWxmKSwgImRybS1jZG0tcHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0
cjsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlm
IHdlIGNhbid0IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1
ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVz
c2FnZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5j
ZSBvbmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5
IGlzIGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVs
IGJ1dCB0aGUgcGxheWVyIHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBD
RE1JbnN0YW5jZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2Yg
YXNraW5nIGZvciBvbmUgYXMgaXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jv
c3NwbGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3
ZXIgdGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVy
IHF1ZXJpZXMgbm9yIGJ1cworICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBp
ZiAoY29udGV4dCkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNk
bS1wcm94eSIpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVp
bnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAg
ICAgICAgICAgIGlmIChwcm94eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUi
LCBwcm94eSwgcHJveHktPnJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94
eTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNl
bGYsICJDRE1Qcm94eSBub3QgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0g
ICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJv
b2xGb3JQcmludGluZyhwcml2LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5w
cm94eUNETTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtF
dmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0
YXRpYyB2b2lkIGF0dGFjaENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYsIENETVByb3h5KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAg
ICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAot
ICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRf
Q1VTVE9NX0RPV05TVFJFQU1fT09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBi
ZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8v
IGFkZGl0aW9uIHRvIG91dC1vZi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVy
IGEKLSAgICAgICAgLy8gcHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1
dHVyZSBwcm90ZWN0aW9uCi0gICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5
IHRoZSBkZW11eGVyLCBzbyB0aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUu
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFp
c0NETUluc3RhbmNlQXZhaWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNlbGYsICJObyBDRE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIkF0dGFjaGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Q
cm94eSA9IHByb3h5OworICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNk
bVByb3h5KTsKKyAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJv
eHlBdmFpbGFibGUoc2VsZikpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisK
KyAgICAgICAgQ0RNUHJveHkqIHByb3h5ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxm
KTsKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxm
LCBwcm94eSk7CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENE
TVByb3h5IGZyb20gY29udGV4dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
IAotICAgICAgICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnByb3h5
Q0RNKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVk
Iik7Ci0gICAgICAgICAgICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAgICBw
cml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSog
dHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBoYW5k
bGluZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRpb24g
dG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAgIC8v
IHByZWZlcnJlZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlv
bgorICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0
aGV5IG11c3QgYmUKKyAgICAvLyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1RfRVZF
TlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9P
T0I6IHsKKyAgICAgICAgQVNTRVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVtcHQt
dG8tZGVjcnlwdCIpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxpbmcg
YXR0ZW1wdC10by1kZWNyeXB0Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlm
Tm90QXZhaWxhYmxlKHNlbGYpOwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAg
ICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoK
QEAgLTM0NSwxNiArMzU0LDYgQEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0
QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRy
YW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkp
LCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRp
YUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5D
X0RFQ1JZUFRfR0VUX1BSSVZBVEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRy
YW5zLCAiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkg
JXMiLCBib29sRm9yUHJpbnRpbmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1
cm4gcHJpdi0+d2FpdGluZ0ZvcktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5T
Rk9STV9DTEFTUyhwYXJlbnRfY2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7
Ci19Ci0KIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50
KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KGVsZW1lbnQpOwpAQCAtMzYzLDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVy
biBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAg
ICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNF
RF9UT19SRUFEWToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFE
WSIpOwotICAgICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYt
PmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGljIHZv
aWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQog
ewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRf
TUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRf
UFJJVkFURShzZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xh
c3MqIGtsYXNzID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAK
LSAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1p
bnN0YW5jZSIpKSB7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJl
X2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3Rh
bmNlIik7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAg
cHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3Zh
bHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHNlbGYsICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5n
ZXQoKSk7CisgICAgaWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRy
bS1jZG0tcHJveHkiKSkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVj
dHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1w
cm94eSIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0
ZXgpOworICAgICAgICBwcml2LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxD
RE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHBy
aXYtPmNkbVByb3h5LmdldCgpKTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2Vs
ZiwgcHJpdi0+Y2RtUHJveHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRv
ckdTdHJlYW1lci5oCmluZGV4IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZh
NWQuLjg1NzVhMDcxMDJiZDEzM2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNp
bmNsdWRlIDxDRE1Qcm94eS5oPgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0u
aD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUs
OCArNTUsOCBAQCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyB7CiAgICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3Qg
Y2hhciogcHJvdGVjdGlvblN5c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSko
V2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94
eUNETT4pOwotICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0
QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJT
YW1wbGVzQnVmZmVyKTsKKyAgICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOworICAg
IGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0
QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZm
ZXIsIHVuc2lnbmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVy
KTsKIH07CiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3Rv
cnkuY3BwCmluZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNl
NWQ4ZjdkNmJkZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8
U3RyaW5nPiBNb2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6On5Q
cm94eUNETU1vY2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUluc3Rh
bmNlKFdlYWtQdHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2LDEx
ICsyOTQsNiBAQCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNy
ZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNlU2Vz
c2lvbihtYWtlV2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RN
SW5zdGFuY2U6OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBy
b3h5Q0RNTW9jaygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUluc3Rh
bmNlU2Vzc2lvbihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IG1f
aW5zdGFuY2UoV1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE1GYWN0b3J5LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1MGNk
MS4uMzk5MDliOTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToK
ICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9u
czsKIH07CiAKLWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RN
IDogcHVibGljIENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAg
cHJpdmF0ZToKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJp
bmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwog
ICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAg
ICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFrUHRy
PE1vY2tDRE0+IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dl
ZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390404</attachid>
            <date>2020-02-11 12:21:09 -0800</date>
            <delta_ts>2020-02-11 12:25:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211202107.patch</filename>
            <type>text/plain</type>
            <size>115696</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uZDU3ZjVlODdlZGYyZWZlMTY2ZTM5MmNjYmYxNTdi
Mjc1YTVlNmMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
IGFuZCBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgMi8gRm9yIG1lZGlhIHBsYXllcnMg
dG8gc2FmZWx5IGFzc2VzcyB0aGUgc3RhdGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAgICAgICAgd2hh
dCB0aGVpciBzdGF0dXMgaXMuCisKKyAgICAgICAgQ0RNUHJveHkgZXhpc3RzIHRvIGFsbG93IHRo
cmVhZC1zYWZlIGFjY2VzcyB0byBhIHJlYWwgQ0RNLCBhbG9uZworICAgICAgICB3aXRoIHRoZWly
IHF1aXJrcy4gVGhlIHR3byBtYWluIHByb2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBvZiBhIENETQor
ICAgICAgICBoYXZlIGluIFdlYktpdCBpcyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RNIGFjY2VzcyBm
cm9tIGJhY2tncm91bmQKKyAgICAgICAgbWVkaWEgdGhyZWFkcy4KKworICAgICAgICBLZXkgbWFu
YWdlbWVudCBpcyBob3cgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEgd2F5CisgICAg
ICAgIGNvaGVyZW50IHdpdGggSmF2YVNjcmlwdCwgdGhlIGNyb3NzLXBsYXRmb3JtIEVNRSBpbXBs
ZW1lbnRhdGlvbiwKKyAgICAgICAgdGhlIHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBhbmQgdGhlIGJh
Y2tncm91bmQgbWVkaWEKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlkZXMgYSBkZWZh
dWx0IGtleSBzdG9yZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIHN1Yi1jbGFzc2VzLiBTdWItY2xh
c3NlcyBjYW4sIG9uIHJlY2VpcHQgb2YgbmV3IGluZm9ybWF0aW9uIGZyb20gYQorICAgICAgICBy
ZWFsIENETSwgdGVsbCBDRE1Qcm94eSBhYm91dCB0aGUga2V5cyBhbmQgdGhlaXIKKyAgICAgICAg
c3RhdHVzZXMuIENETVByb3h5IGlzIGludGVuZGVkIHRvIERvIFRoZSBSaWdodCBUaGluZyBmcm9t
IHRoZXJlLAorICAgICAgICBsZXR0aW5nIEphdmFTY3JpcHQgYW5kIFdlYkNvcmUga25vdyBhbGwg
dGhlIGRldGFpbHMgdGhleSBuZWVkIHRvCisgICAgICAgIGFib3V0IHRoZSBuZXcgc3RhdGUsIGFz
IHdlbGwgYXMgdGhlIG1lZGlhIGRlY29kZSB0aHJlYWRzIHdoZW4gdGhleQorICAgICAgICBuZXh0
IGNvbWUgYXNraW5nLgorCisgICAgICAgIEFjY2VzcyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyBp
cyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICB0aHJlYWQtdW5zYWZlIENETUlu
c3RhbmNlLiBXZSB1c2VkIHRvIGdldCBhd2F5IHdpdGggZG9pbmcgZXhhY3RseQorICAgICAgICB0
aGlzLCBidXQgV2ViQ29yZSByZWNlbnRseSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBhYm91dAorICAg
ICAgICB0aHJlYWQtdW5zYWZlIGFjY2VzcyBvZiBtYWluLXRocmVhZC1vbmx5IGRhdGEsIGFuZCB3
ZSBoYWQgdG8gZG8KKyAgICAgICAgc29tZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0cy4gVGhhdCBz
b21ldGhpbmcgd2FzIFByb3h5Q0RNIChhCisgICAgICAgIHRlcnJpYmxlIG5hbWUsIHJlbW92ZWQg
bm93KSwgd2hpY2ggd2FzIGEgaGFjayBhbmQgcGxlYXNlIGZvcmdldAorICAgICAgICBhYm91dCBp
dC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVseSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLCBh
bmQKKyAgICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQtc2FmZSB2aWV3
IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFkcyB0byBpbnRl
cnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFuZCBwZXJmb3JtCisgICAgICAgIENETS1zcGVjaWZpYyBk
ZWNyeXB0aW9uIC8gZGVjb2RlLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBDRE1Q
cm94eSB0byBidWlsZAorICAgICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1v
dmVBbGxLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzdG9wcGVkV2FpdGlu
Z0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZvcktl
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWlsYWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20p
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20p
OgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojpp
ZEFzU2hhcmVkQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6
OmFkZFNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpyZW1vdmVTZXNz
aW9uUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6bnVtU2Vzc2lvblJlZmVyZW5j
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om51bUtleXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpy
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnNldFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OmlzV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6dHJhY2tTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAg
dHJhY2tTZXNzaW9uIG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1F
CisgICAgICAgIHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFj
ayBvZiBnZW5lcmF0ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVz
ZSBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjppc29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94
eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KTog
RGVsZXRlZC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHVubmVjZXNzYXJpbHkKKyAgICAgICAgc29y
dGluZyB0aGUga2V5IHZlY3RvcnMuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG8gaW1wb3Nl
IGFuCisgICAgICAgIG9yZGVyaW5nIG9uIGtleXMsIHNvIEkgcmVtb3ZlZCBpdC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oOiBSZWZhY3Rv
ciB0byB1c2UKKyAgICAgICAgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMuaDoKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIFByb3h5Q0RNIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZSk6CisgICAgICAgIFJl
ZmFjdG9yZWQgb3V0IG9mIHN5bmNNZXNzYWdlLiBUaGUgY29kZSB3YXMgbW92ZWQgaGVyZSBhbmQg
aW50bworICAgICAgICB3YWl0Rm9yQ0RNQXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0dGFjaG1lbnQpOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRpbmctZm9yLWtl
eSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgorICAgICAgICBF
bmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJhc2VkIHBvcnRz
IHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xhc3NlcyBmcm9t
IGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEgaGFuZGxlIHRv
IHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5hZ2VtZW50LCBz
byB3aXJlIHRoYXQgaW4gaGVyZSB0b28uIEFsc28gd2lyZSB0aGUKKyAgICAgICAgR1N0cmVhbWVy
IHNwZWNpZmljIENsZWFyS2V5IHByb3h5IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5IGNvbnN0KTog
S2V5CisgICAgICAgIHN0YXR1cyBub3RpZmljYXRpb25zIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkg
b2YgdGhlIENETVByb3h5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOiBOb3cK
KyAgICAgICAgd2UgdXNlIENETUluc3RhbmNlUHJveHksIG5vdCBDRE1JbnN0YW5jZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
OgorICAgICAgICBBZGRlZC4gRyotc3BlY2lmaWMgQ2xlYXJLZXkgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVhcktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktl
eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxT
YW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRT
dWJzYW1wbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRpYWxpemVHY3J5
cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVmYWN0
b3IgdG8gdXNlIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0
X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6
CisgICAgICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRl
ZC4gVGhpcyB3YXMgYSBiYWRseSBuYW1lZCBtZXRob2QgdGhhdAorICAgICAgICBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGNkbVByb3h5QXR0YWNoZWQuCisgICAgICAgIChmaW5kQW5kU2V0S2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh0cmFu
c2Zvcm1JblBsYWNlKToKKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOgorICAgICAgICAo
Z2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dCk6CisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6Cisg
ICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6CisgICAgICAgIChzaW5rRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLgorICAgICAgICAocXVlcnlIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZTo6cHJveHlDRE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuaDoKKwogMjAyMC0wMi0wNyAg
eW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFuZGF0ZSBVVUlE
IHZlcnNpb24gNCBmb3IgbUROUyBJQ0UgY2FuZGlkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5Mjhl
YzU1ZmVmYTk5NzA3MDhmNjUwNzcxZDBlOTY2YTNmYWIxY2RmLi42MmU1MzVhOWEwMWRlYzgxZGU0
YTQzYjQ1Mzg2MTcwMzQ3YWI2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxNyw2ICsxODE3LDcg
QEAgcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xl
LmNwcAogCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAorcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1
N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5
YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0
QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyog
Q0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RN
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAw
RjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1
RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRB
NUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2
MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RN
UmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVz
dHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXgg
ODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYy
ZGQ4YWVjN2NlYmUzMzRhYTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZQpAQCAtMTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSkKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkK
IAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3Rh
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5j
ZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYz
ZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcg
KzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBj
bGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRv
IGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNl
ZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQ
cm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGlj
OgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1J
bnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7
CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJiODE5NWJjN2Y2NDRmZjk3ODM5Mjk0ZWU5ZTE3N2U0YWI2NzhkNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hl
eFN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBL
ZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVj
dG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJp
bmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICBy
ZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQor
Cit2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0
b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRo
YXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAg
ICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBv
dmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5l
ZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0
b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQo
a2V5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBl
biB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRo
ZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJM
RUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5
IC0ga2V5IHN0b3JlIG5vdyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBtX2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5
IC0gS2V5IElEOiAlcyIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRp
ZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQo
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvciA9IGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRv
JiBrZXlTdGF0dXMgOiBrZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQg
PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtl
eVN0YXR1c1ZlY3RvcjsKK30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRy
PEtleT4+JiYgbmV3S2V5cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92
ZShrZXkpKSkKKyAgICAgICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVm
UHRyPEtleT4mJiBrZXkpCit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAg
IHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhb
Jl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkg
PT0gKnN0b3JlZEtleTsKKyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGtleVdpdGhNYXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNh
biB0aGlzIHJlYWxseSBoYXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5
IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAg
ICBtX2tleXMuYXBwZW5kKGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBrZXktPmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3Rv
cmVDaGFuZ2U7Cit9CisKK3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJiBvdGhlcikKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAg
ICAgICByZW1vdmUoa2V5KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0
cjxLZXk+JiBrZXkpCit7CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNp
emVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElE
ICVzIGFuZCAldSBzZXNzaW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwga2V5LT5udW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5
V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07Cisg
ICAgICAgIGtleVdpdGhNYXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7Cisg
ICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0
aCBJRCAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4
KTsKKyAgICAgICAgICAgIHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUg
a2V5IHdpdGggSUQgJXMgaWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25z
dCBWZWN0b3I8dWludDhfdD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleUlEKSBjb25zdAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7
CisgICAgICAgIGlmICgqa2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFs
dWUoKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0
IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNL
ZXlTdGF0dXNWZWN0b3IoKSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9r
ZXlzKQorICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxS
ZWY8U2hhcmVkQnVmZmVyPiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM+IHsga2V5LT5p
ZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkgfSk7CisgICAgcmV0dXJuIGtleVN0YXR1
c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3Rv
cmUmIG5ld0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0
ZXgpOworICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJF
TUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUi
KTsKKyAgICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6
OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFu
Y2U7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
a2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7
CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVBy
b3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7Cisg
ICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94
eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBz
dG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAg
IG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVu
Y29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1l
YW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5n
IGEga2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBt
b3JlIGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9y
S2V5T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0
aW5nRm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5
aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tl
eVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5
OjpNYXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAg
ICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtl
eUlEKTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElE
ICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRh
KCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2
YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RN
UHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBr
ZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVz
IiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShr
ZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXko
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wg
d2FzV2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAg
IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3BsYXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0Zvcktl
eUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVk
V2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXll
ciAmJiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0
b3JzV2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1f
bnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5
ZXIgPSBtX3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgaXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5n
Rm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1l
cmdlS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBO
b3RpZnkgSlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1J
bnN0YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlm
eWluZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAg
IG1fY2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0
YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtl
eXNGcm9tKGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNmFkNzkzNzdkYTlhYjJi
MjI5MTRmZWFkNDIzOWIwZGMyMzVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1
ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0
dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUo
a2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVy
PiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYg
dmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0Owor
ICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUg
ZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0
YXR1cy4KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpIHsgcmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJl
dHVybiBrLm1faWQgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJ
RDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCBy
ZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNl
c3Npb25SZWZlcmVuY2VzLS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygp
IGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVy
ZW5jZXM7IH0KKyAgICBmcmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVz
IHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZh
bHVlKQorICAgICAgICA6IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBt
X3ZhbHVlKFdURk1vdmUoa2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsK
KyAgICBWZWN0b3I8dWludDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsK
KyAgICB1bnNpZ25lZCBtX251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3Mg
S2V5U3RvcmUgeworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3Qg
S2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0
b3JlJiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsg
fQorICAgIGJvb2wgYWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRk
KFJlZlB0cjxLZXk+JiYpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7Cisg
ICAgdW5zaWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNv
bnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNv
bnN0OworCisgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAg
YXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBl
bmQoKSB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJi
ZWdpbigpOyB9CisgICAgYXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2lu
KCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0
byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAg
IFZlY3RvcjxSZWZQdHI8S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94
eTsKKworLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2Fk
ZS4gVGhpcyBjYW4gYmUgdXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVj
cnlwdG9ycykuCitjbGFzcyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxD
RE1Qcm94eT4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlX
YWl0VGltZVNlY29uZHMgPSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVs
dDsKKworICAgIHZvaWQgdXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3Jl
KTsKKyAgICB2b2lkIHNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVk
OgorICAgIFZlY3Rvcjx1aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29u
c3Q7CisgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIG11dGFibGUgTG9jayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSog
bV9pbnN0YW5jZTsKKworICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxl
IENvbmRpdGlvbiBtX2tleXNDb25kaXRpb247CisgICAgLy8gRklYTUU6IER1cGxpY2F0ZWQga2V5
IHN0b3JlcyBpbiB0aGUgaW5zdGFuY2UgYW5kIHRoZSBwcm94eSBhcmUgcHJvYmFibHkgbm90IG5l
ZWRlZCwgYnV0IHNpbXBsaWZpZWQKKyAgICAvLyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBp
biB0ZXJtcyBvZiB0aHJlYWRpbmcgaW52YXJpYW50cy4KKyAgICBLZXlTdG9yZSBtX2tleVN0b3Jl
OworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24gbWFuYWdlbWVudCBjb2Rl
IGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAicmVhbCBDRE0iIHN0YXRl
IGNoYW5nZXMgdG8gSlMuCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3Rh
bmNlIHsKK3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVh
ZCBvbmx5LgorICAgIHZvaWQgc2V0UHJveHkoUmVmPENETVByb3h5PiYmIHByb3h5KQorICAgIHsK
KyAgICAgICAgbV9jZG1Qcm94eSA9IFdURk1vdmUocHJveHkpOworICAgICAgICBtX2NkbVByb3h5
LT5zZXRJbnN0YW5jZSh0aGlzKTsKKyAgICB9CisgICAgdm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0
IEtleVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYp
OworCisgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1ldGhvZHMgLSBtYWluIHRocmVhZCBvbmx5
LgorICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
cktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlw
dG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CisgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQor
CisgICAgLy8gUHJveHkgbWV0aG9kcyAtIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgdm9pZCBz
dGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgdHJhY2tTZXNzaW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0
YW5jZVNlc3Npb24+IHNlc3Npb24pIHsgbV9zZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbik7IH0KKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8Q0RNUHJveHk+IG1fY2RtUHJveHk7CisgICAgLy8gRklYTUU6
IFdlYWtQdHIgZm9yIHRoZSBtX3BsYXllcj8gVGhpcyBpcyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91
bmQgYW5kIG1haW4gdGhyZWFkcywgaXQncworICAgIC8vIGNvbmNlcm5pbmcgd2UgY291bGQgYmUg
YWNjZXNzaW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzaHV0ZG93biBvbiB0aGUgbWFpbi10aHJl
YWQsIGVoPworICAgIC8vIEFzIGEgQ0RNUHJveHksIHdlICoqKnNob3VsZCoqKiBiZSB0dXJuZWQg
b2ZmIGJlZm9yZSB0aGlzIHBvaW50ZXIgZXZlciBnb2VzIGJhZC4KKyAgICBNZWRpYVBsYXllciog
bV9wbGF5ZXIgeyBudWxscHRyIH07IC8vIEZJWE1FOiBNYWluVGhyZWFkPFQ+PworCisgICAgc3Rk
OjphdG9taWM8aW50PiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworICAgIFZlY3RvcjxS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPj4gbV9zZXNzaW9uczsKKworICAgIEtleVN0b3JlIG1f
a2V5U3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0
ODVkYjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjM0Mjc0ZTZhZThiZWM2OWU1
NTllMDRmYTIwMjI0ZGU0YjQzNDM1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
QEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNDMsMzQgKzQ1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktl
eSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1j
ZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10g
PSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMs
IDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2ln
bmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1J
ZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNpemUgPSAxNjsKLQotY2xhc3MgQ2xlYXJLZXlTdGF0
ZSB7Ci0gICAgdXNpbmcgS2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3Rh
bmNlQ2xlYXJLZXk6OktleT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUm
IHNpbmdsZXRvbigpOwotCi0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0K
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0
ZT47Ci0gICAgQ2xlYXJLZXlTdGF0ZSgpOwotICAgIEtleVN0b3JlIG1fa2V5czsKLX07Ci0KLUNs
ZWFyS2V5U3RhdGUmIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPENsZWFyS2V5U3RhdGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7
Ci19Ci0KLUNsZWFyS2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHN0YXRp
YyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVy
JiBidWZmZXIpCiB7CiAgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9l
c24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgpAQCAtODgsNyArNjIsNyBA
QCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtl
eT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAg
IC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJz
ZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xp
Y2Vuc2UnIGZvcm1hdC4KQEAgLTEwMSw3ICs3NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRl
Y29kZWRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9v
bCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5
LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzkw
LDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVj
dC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwg
a2V5VmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6
OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJM
RGVjb2RlKGtleVZhbHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
a2V5SUREYXRhKSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkg
fSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3Zl
KGtleVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsK
ICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMTgxLDcgKzE1NSw3IEBAIHN0YXRpYyBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXRE
YXRhKGNvbnN0CiAgICAgd2hpbGUgKHRydWUpIHsKIAogICAgICAgICAvLyBDaGVjayB0aGUgb3Zl
cmZsb3cgSW5pdERhdGEuCi0gICAgICAgIGlmIChpbmRleCArIDEyICsgY2xlYXJLZXlDZW5jU3lz
dGVtSWRTaXplID49IGluaXREYXRhU2l6ZSkKKyAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBDbGVh
cktleTo6Y2VuY1N5c3RlbUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgICAgICByZXR1
cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIHBzc2hTaXplID0gZGF0YVtpbmRleCArIDJdICogMjU2
ICsgZGF0YVtpbmRleCArIDNdOwpAQCAtMTkxLDcgKzE2NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRh
KGNvbnN0CiAgICAgICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIC8vIDEyID0g
Qk1GRiBib3ggaGVhZGVyICsgRnVsbCBib3ggaGVhZGVyLgotICAgICAgICBpZiAoIW1lbWNtcCgm
ZGF0YVtpbmRleCArIDEyXSwgY2xlYXJLZXlDZW5jU3lzdGVtSWQsIGNsZWFyS2V5Q2VuY1N5c3Rl
bUlkU2l6ZSkpIHsKKyAgICAgICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIENsZWFy
S2V5OjpjZW5jU3lzdGVtSWQsIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKSkgewogICAgICAg
ICAgICAgZm91bmRQc3NoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yMDIsNyArMTc2LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4
dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpZiAoIWZvdW5k
UHNzaCkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAotICAgIGluZGV4ICs9ICgxMiArIGNs
ZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJv
eCBoZWFkZXIpICsgU3lzdGVtSUQgc2l6ZS4KKyAgICBpbmRleCArPSAoMTIgKyBDbGVhcktleTo6
Y2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFk
ZXIpICsgU3lzdGVtSUQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KICAgICBp
ZiAoaW5kZXggKyAzID49IGluaXREYXRhU2l6ZSkKQEAgLTIxMiw3ICsxODYsNyBAQCBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShjb25zdAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAK
ICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAu
Zmlyc3QgKiBrZXlJZFNpemUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChr
ZXlJZHNNYXAuZmlyc3QgKiBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRh
U2l6ZSkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQg
PSBpbmRleDsgLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4K
QEAgLTI1MSw5ICsyMjUsOSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlk
c0Zyb21DZW5jSW5pdERhdGEoY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRz
IgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkg
aXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmlu
ZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENv
dW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
JmRhdGFbaW5kZXhdLCBrZXlJZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsK
ICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCAr
PSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
OwogICAgIH0KIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0Fy
cmF5KSk7CkBAIC00NTYsNDQgKzQzMCw2IEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICBy
ZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmlu
ZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwu
IFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBh
bGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0v
LyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJp
bGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tn
cm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAo
aS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRo
cmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNh
biBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8g
U2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNy
b3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtl
eShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKLXsKLSAgICByZXR1cm4geyBr
ZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5z
aXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRh
LT5zaXplKCkpIH07Ci19Ci0KLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IFBy
b3h5Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cygpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIHRo
ZSBrZXlzIG9mIGFsbCBzZXNzaW9ucywgbWF5IGJlIGNvcGllZCB0byBiYWNrZ3JvdW5kIHRocmVh
ZHMuCi0gICAgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gYWxsS2V5cyB7IH07Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7Ci0gICAgc2l6ZV90IGluaXRpYWxD
YXBhY2l0eSA9IDA7Ci0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpz
aW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpCi0gICAgICAgIGluaXRpYWxDYXBhY2l0eSArPSBr
ZXlWZWN0b3Iuc2l6ZSgpOwotICAgIGFsbEtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0
aWFsQ2FwYWNpdHkpOwotCi0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRl
OjpzaW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRl
ZEtleShrZXkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsS2V5czsKLX0KLQotQ0RNSW5zdGFu
Y2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0
UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKLXsKLX0KLQogQ0RNSW5zdGFuY2VDbGVhcktl
eTo6fkNETUluc3RhbmNlQ2xlYXJLZXkoKSA9IGRlZmF1bHQ7CiAKIENETUluc3RhbmNlOjpTdWNj
ZXNzVmFsdWUgQ0RNSW5zdGFuY2VDbGVhcktleTo6aW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9u
KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKQpAQCAtNTM1LDM2ICs0NzEsOSBAQCBj
b25zdCBTdHJpbmcmIENETUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Np
b24oKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXkoKSk7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5SUREYXRhLT50b0hl
eFN0cmluZygpLCAiXSIpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Ojpr
ZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtl
eVZhbHVlRGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsy
LmtleUlERGF0YSk7Ci0KLSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9PSAqazIua2V5SUREYXRh
OwotfQotCi1ib29sIG9wZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsx
LCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5r
ZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgaWYgKGsxLmtleUlE
RGF0YS0+c2l6ZSgpICE9IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gazEu
a2V5SUREYXRhLT5zaXplKCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsKLQotICAgIHJldHVybiBt
ZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJ
RERhdGEtPnNpemUoKSk7CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lv
biA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgqdGhpcykpOworICAg
IHRyYWNrU2Vzc2lvbihuZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAog
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBp
bml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01NzIsNiArNDgxLDggQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMyX3Qgc19zZXNzaW9uSWRW
YWx1ZSA9IDA7CiAgICAgKytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAgbV9zZXNzaW9uSUQgPSBT
dHJpbmc6Om51bWJlcihzX3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAgICAgICAgIGluaXREYXRh
ID0gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCkBAIC01
NzksMTggKzQ5MCwyMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0
TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBpbml0RGF0
YSA9IGV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCiAgICAg
Y2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERh
dGEpLCBzZXNzaW9uSWRWYWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkgbXV0YWJsZSB7CisgICAg
ICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vz
c2lvbklkVmFsdWUpLCBmYWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoaW5pdERhdGEpLCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2NlZWRlZCk7CiAgICAgICAg
IH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNl
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVy
JiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8g
VXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNo
LCBhdm9pZGluZwotICAgIC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgor
I2lmIExPR19ESVNBQkxFRCB8fCBSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIC8vIFdlIG9ubHkg
dXNlIHRoZSBzZXNpb24gSUQgZm9yIGRlYnVnIGxvZ2dpbmcuIFRoZSB2ZXJib3NlIHByZXByb2Nl
c3NvciBjaGVja3MgYXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgTWFjIHBvcnQgaGFzIC1XZXJyb3Ig
LVd1bnVzZWQtcGFyYW1ldGVyLgorICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlm
CiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10o
Ym9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgY2hhbmdl
ZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoCkBAIC02MDQsNTIgKzUxOCwyMyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7
CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNl
c3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJyZW50bHkgY29u
dGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtl
eXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgq
cm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Igb2YgS2V5IG9i
amVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMg
c3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVu
c3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wga2V5c0NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7
Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdp
dGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtl
eVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAgWyZkZWNv
ZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5Owot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlE
ICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hp
bmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRL
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVw
ZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtleSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFw
cGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBrZXlzQ2hhbmdl
ZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykpOwogCi0gICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMi
LCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
c2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8S2V5U3Rh
dHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAg
ICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6OnNvcnQoa2V5VmVj
dG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAgIEtleVN0YXR1c1Zl
Y3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtl
eS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNoYW5nZWRLZXlzID0g
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pT
S2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwpA
QCAtNjU3LDQ3ICs1NDIsMzEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICB9CiAKICAg
ICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3JtYXRpb24gYW5kIHVz
ZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQuCi0gICAgICAgIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lvbklkKTsKKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xl
ZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7
CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5vIGZvcm1hdCB3YXMg
cmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVw
ZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vzc2lvbklkLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3Vj
Y2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0
IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2Ug
YSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2
b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgotICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9wdGlvbmFsPEtleVN0
YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzLCBTZXNzaW9u
TG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
Ci0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3ZlKGV4aXN0aW5nS2V5
cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfTsKKyNpZmRlZiBOREVCVUcKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lv
bklkKTsKKyNlbmRpZgogCi0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2Jq
ZWN0LCByZXByZXNlbnRpbmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlzIHNlc3Npb24uCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0gICAgICAgIGF1dG8m
IGtleXMgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8g
aXQgPSBrZXlzLmZpbmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkp
IHsKLSAgICAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0LCBGYWlsZWQsIFNl
c3Npb25Mb2FkRmFpbHVyZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJUKHNlc3Npb25JZCA9
PSBtX3Nlc3Npb25JRCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1f
a2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgJmtleVN0YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8mIGtl
eVZlY3RvciA9IGl0LT52YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChz
dGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwg
a2V5LnN0YXR1cyB9KTsKLSAgICB9CiAKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5
U3RhdHVzVmVjdG9yKSwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNzEzLDcgKzU4
MiwxMiBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24oY29u
c3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGlj
ZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0
Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgorI2lmZGVm
IE5ERUJVRworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlmCisKKyAgICBBU1NF
UlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFj
ayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3RvciYmIGtleVN0YXR1
c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2FnZSwgU3VjY2Vzc1Zh
bHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC03MjcsMzUg
KzYwMSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9u
RGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8gQ29uc3RydWN0IHRo
ZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5k
IHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAg
ICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0YXR1c1ZlY3RvciBr
ZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2VkKCk7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZlIGlu
Zm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBpZiBub25lIGlzIGZv
dW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5
cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlm
IChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKEtleVN0
YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIEtl
eSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb24sIGFuZAot
ICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3IgdGhpcyBzZXNzaW9u
LgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVlKTsKLSAgICAgICAg
a2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVj
dG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNlZCcgc3RhdHVzLgot
ICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iu
c2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAg
ICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVm
ZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH0p
OwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vu
c2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBv
ZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVj
dG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEtPnNpemUoKSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFy
cmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJRERhdGEtPmRhdGEo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUoKSkpKTsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNl
NjRVUkxFbmNvZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3Zl
KGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2ICs2MjIsNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNT
dHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCisgICAgbV9r
ZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtl
eVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVl
OjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4NWIzMTli
MWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li42NzA0YWU3YTk1N2YzMmZlMWY4NDk4
M2VkM2IzZjY1MDJhNTMxNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAgLTMxLDE0
ICszMSwyOCBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNsdWRlICJDRE1G
YWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJDRE1JbnN0YW5j
ZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHku
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBDbGVhcktleSB7CisKKy8vIENsZWFy
S2V5IENFTkMgU3lzdGVtSUQuCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRh
LWNlbmMvI2NvbW1vbi1zeXN0ZW0KK2NvbnN0IHVpbnQ4X3QgY2VuY1N5c3RlbUlkW10gPSB7IDB4
MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMs
IDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNl
bmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2VuY1N5c3RlbUlkKTsKK2VudW0geworICAgIEFFUzEy
OENUUkJsb2NrU2l6ZUluQnl0ZXMgPSAxNiwKKyAgICBLZXlJRFNpemVJbkJ5dGVzID0gMTYsCisg
ICAgSVZTaXplSW5CeXRlcyA9IDE2LAorfTsKKworfSAvLyBuYW1lc3BhY2UgQ2xlYXJLZXkKKwog
Y2xhc3MgQ0RNRmFjdG9yeUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUZhY3RvcnkgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNzcsMjcgKzkxLDEyIEBAIHB1
YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xhc3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1
YmxpYyBQcm94eUNETSB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGlj
IENETUluc3RhbmNlUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFy
S2V5PiB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAgICAg
ICAgU3RyaW5nIGtleVZhbHVlRGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlDRE1D
bGVhcktleSgpID0gZGVmYXVsdDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtleXMo
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsKLQot
Y2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKLXB1YmxpYzoKLSAgICBD
RE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgp
OwogCisgICAgLy8gQ0RNSW5zdGFuY2UKICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50
YXRpb25UeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVh
cktleTsgfQotCiAgICAgU3VjY2Vzc1ZhbHVlIGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihj
b25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVl
IHNldERpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nl
c3NWYWx1ZSBzZXRQZXJzaXN0ZW50U3RhdGVBbGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3
ICsxMDQsMjIgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29u
c3QgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
IGZpbmFsOwotCi0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRh
OwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAg
U3RyaW5nIGtleUlEQXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkg
Jm90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAg
ICAgICAgICAgIEFTU0VSVChvdGhlci5rZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJu
ICprZXlWYWx1ZURhdGEgPT0gKm90aGVyLmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9y
aW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3Jk
ZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAg
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsK
LQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpIHsgcmV0dXJuICEob3BlcmF0b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9w
ZXJhdG9yPT0oazEsIGsyKSAmJiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAh
b3BlcmF0b3I+KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0K
LSAgICB9OwotCi0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcHJveHlDRE07IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1f
cHJveHlDRE07CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6
IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleT4gewogcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudElu
c3RhbmNlKHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwg
Y29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXRE
YXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNv
bnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBk
YXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5h
bDsKICAgICB2b2lkIGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxs
YmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYs
IExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZv
aWQgc3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJl
bnRJbnN0YW5jZTsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKaW5kZXggNDc3MmZjYjMyMzZkMzkwMjk1
MzRjNDZmYjRmMTAyOTk3ODNlNmNiNi4uYjExZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRkZTg2ZjNk
ZDk5NGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCkBAIC04MCw3ICs4MCw2IEBAIHB1Ymxp
YzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZl
cj4mJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJikgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vz
c2lvbigpIGZpbmFsOwotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNv
bnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCmluZGV4IGExMmVmNGY2ZGJhNmYwMTVlNzYxNTFmMTQ3Y2M2YzA3OWU2MmRhN2UuLjU0
NWFjYzc1YzAxN2RiOWQyYTc0OGM5OWQ0NGIxYTYzMjBlN2EzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAK
ICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiQ0RNUHJveHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCIKQEAgLTE3ODgsNiArMTc4OSw1MCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCog
cGlwZWxpbmUpCiAgICAgfSwgdGhpcywgbnVsbHB0cik7CiB9CiAKK0luaXREYXRhIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShH
c3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisg
ICAgSW5pdERhdGEgaW5pdERhdGE7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9w
cm90ZWN0aW9uTXV0ZXgpOworICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMobWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxh
YmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChh
dXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAg
R3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9w
cm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIp
OworCisgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9
KTsKKyAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9T
RVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbml0
RGF0YTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRGb3JDRE1B
dHRhY2htZW50KCkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChwaXBlbGluZSgpLCAiY2FuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIHdhaXRp
bmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1B
dHRhY2ggPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9
IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0g
bV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRf
cywgW3RoaXNdKCkgeworICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiB7CiAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NB
R0VfU1RSRUFNX0NPTExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODIzLDQx
ICsxODY4LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNN
ZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQogICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0
aW9uLXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAg
ICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5
c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5n
IGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2Ui
KTsKLQotICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rp
b25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAg
ICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9y
cyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJv
dGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAg
ICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlT
eXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBw
ZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVk
UHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRl
cmVkKFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRD
RE1BdHRhY2ggPSBmYWxzZTsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2ht
ZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAg
ZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRh
Y2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NE
TUF0dGFjaGVkKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
aWRDRE1BdHRhY2ggJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2Ut
PmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNv
dW50ZXJlZChwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKG1lc3NhZ2UpKTsKKyAg
ICAgICAgYm9vbCBpc0NETUF0dGFjaGVkID0gd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKKyAgICAg
ICAgaWYgKGlzQ0RNQXR0YWNoZWQgJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2Rt
SW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgY2hh
ciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lz
dGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKICAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRp
bnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVt
KCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JD
X05BTUUobWVzc2FnZSkpOwogCkBAIC0xODY1LDEwICsxODc4LDExIEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRl
eHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlkIiwgR19U
WVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7CiAgICAgICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVz
c2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1Rf
V0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NU
X1dBUk5JTkdfT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQsIG5v
IENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0yMTk4LDE5ICsyMjEyLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAgICAg
ICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewotICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtl
eSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBi
ZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRoZXkg
YXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90
IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBz
b29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0aGlu
ZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBt
ZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4K
LSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgICAg
ICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtleS1y
ZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJk
cm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1
Y3R1cmUpOwpAQCAtMzcyOCwxNCArMzcyOSwxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOworICAg
IG1fY2RtSW5zdGFuY2UgPSByZWludGVycHJldF9jYXN0PENETUluc3RhbmNlUHJveHkqPigmaW5z
dGFuY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2RtSW5zdGFuY2UpOworICAgIG1fY2RtSW5z
dGFuY2UtPnNldFBsYXllcihtX3BsYXllcik7CisgICAgbV9jZG1JbnN0YW5jZS0+c2V0UHJveHko
YWRvcHRSZWYoKm5ldyBDRE1Qcm94eUNsZWFyS2V5KSk7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
Z3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBHc3RTdHJ1Y3R1
cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29u
dGV4dC5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNk
bS1pbnN0YW5jZSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdl
dCgpLCBudWxscHRyKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAi
Y2RtLXByb3h5IiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCks
IG51bGxwdHIpOwogICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRl
eHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBh
cyBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSk7CiAKICAgICBMb2NrSG9s
ZGVyIGxvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwogICAgIC8vIFdlIG11c3Qgbm90aWZ5IGFs
bCB3YWl0ZXJzLCBzaW5jZSBzZXZlcmFsIGRlbXV4ZXJzIGNhbiBiZSBzaW11bHRhbmVvdXNseSB3
YWl0aW5nIGZvciBhIENETS4KQEAgLTM3NTcsNyArMzc2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5j
ZSkKICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcgQ0RN
IGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdldCgp
KTsKICAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKIAotICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2Ui
LCBGQUxTRSkpOworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihn
c3RfY29udGV4dF9uZXcoImRybS1jZG0tcHJveHkiLCBGQUxTRSkpOwogICAgIGdzdF9lbGVtZW50
X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgp
KTsKIH0KIApAQCAtMzc5MCw1MSArMzc5NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0
aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0p
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0Zvcktl
eShib29sIGlzV2FpdGluZ0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMg
ZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3Jl
IGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgi
aXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGlu
Zyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsK
LSAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0
aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faXNXYWl0aW5nRm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygi
d2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdG
b3JLZXkpKTsKLSAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewot
ICAgIGlmICghbV9waXBlbGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFu
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdz
dF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDAp
OwotCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVy
eSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwot
ICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdz
dF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAg
R1NUX1RSQUNFKCJxdWVyeSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3Vs
dCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChz
dGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGlu
IHRoZSBwaXBlbGluZSBpcyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxp
bmUgaXMgc2V0IHVwIGFuZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0
IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0
SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSkpKTsKLSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9y
X2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdw
b2ludGVyIGRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBl
bGVtZW50ID0gR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAg
ICAgICAgICBHc3RRdWVyeSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICFXRUJLSVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3Rf
ZWxlbWVudF9xdWVyeShlbGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBx
dWVyeS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJB
VE9SX1JFU1lOQykKLSAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9y
LmdldCgpKTsKLSAgICAgICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9S
X1JFU1lOQyk7Ci0gICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJS
T1IpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3Ii
KTsKLSAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwot
ICAgICAgICBHU1RfVFJBQ0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJh
dG9yUmVzdWx0LCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CmluZGV4IGIyYmI1NDFhMzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLjUyMWIyMGQx
MWNjOGRkOTRiZTI4NGQ3NDY5OWNkMjcxN2I0ZTA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3Ry
dWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgog
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2Vu
ZGlmCisKIHR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwog
dHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVj
dCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0
ZWQ6CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVu
dE11dGV4OwogICAgIENvbmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVm
UHRyPGNvbnN0IENETUluc3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0
YW5jZVByb3h5PiBtX2NkbUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsg
Ly8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hT
ZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2Nk
bUluc3RhbmNlOyB9CiAgICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2Uo
KTsKICAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwot
ICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29sKTsKKyAgICBJbml0RGF0YSBwYXJzZUluaXRE
YXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICBib29sIHdhaXRGb3JD
RE1BdHRhY2htZW50KCk7CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1
dHRpbmdEb3duOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODA0MDQ1Mjg3YjM5NmE4NTEyODI3ZmM4Y2JhODQ3YTI0MWE1NDQyYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
UHJveHlDbGVhcktleS5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVPcmRl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBib29s
IHJlYWRVSW50MzIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6
ZV90JiBvZmZzZXQsIHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwg
b2Zmc2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6
ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9obCgq
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDMyX3QqPihidWZmZXIgKyBvZmZzZXQpKTsK
KyAgICBvZmZzZXQgKz0gc2l6ZW9mKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCByZWFkVUludDE2KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZl
clNpemUsIHNpemVfdCYgb2Zmc2V0LCB1aW50MTZfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FS
RyhvZmZzZXQsIG9mZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9m
ZnNldCA8IHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVl
ID0gbnRvaHMoKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQxNl90Kj4oYnVmZmVyICsg
b2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2Uge30KKworQ0RNUHJveHlDbGVhcktleTo6fkNETVByb3h5
Q2xlYXJLZXkoKQoreworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKG1fZ2NyeUhhbmRsZSk7Cit9CisK
K2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IoY29uc3QgY2VuY0Rl
Y3J5cHRDb250ZXh0JiBpbnB1dCkKK3sKKyAgICB1aW50OF90IGN0cltDbGVhcktleTo6QUVTMTI4
Q1RSQmxvY2tTaXplSW5CeXRlc107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0gOCkg
eworICAgICAgICAvLyBJU08vSUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMworCisgICAgICAg
IC8vIFdoZW4gYW4gOC1ieXRlIElWIGlzIGluZGljYXRlZCwgdGhlIGxlYXN0IHNpZ25pZmljYW50
IDgKKyAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIDE2IGJ5dGUgSVYgKGJ5dGVzIDggdG8gMTUpIFNI
QUxMIGJlIHNldCB0bworICAgICAgICAvLyB6ZXJvLgorICAgICAgICBtZW1zZXQoY3RyICsgOCwg
MCwgOCk7CisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCA4KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbWVtY3B5KGN0ciwgaW5wdXQuaXYsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKTsKKwor
ICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9n
Y3J5SGFuZGxlLCBjdHIsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGN0cik6
ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5Ojpj
ZW5jU2V0RGVjcnlwdGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAg
IC8vIEZJWE1FOiBVbm5lY2Vzc2FyeSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGls
bCBleHBvc2luZworICAgIC8vIGEgbm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQg
QVBJPyBUaGVzZSBidWZmZXJzIGFyZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBh
IGh1Z2UgZGVhbCwgSSBndWVzcy4KKyAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CisgICAg
a2V5SURWZWMuYXBwZW5kKGluLmtleUlELCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKKworICAgIGF1
dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZvcktleShrZXlJRFZlYyk7CisgICAgaWYgKCFrZXlEYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KG1fZ2NyeUhhbmRsZSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRh
LT5zaXplKCkpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0g
RVJST1IoZ2NyeV9jaXBoZXJfc2V0a2V5KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRl
eHQmIGluKQoreworICAgIGlmICghaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkg
LSBmdWxsLXNhbXBsZSBkZWNyeXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgaW4uZW5jcnlw
dGVkQnVmZmVyU2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJv
ciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbi5lbmNyeXB0ZWRCdWZmZXIs
IGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzLCAwLCAwKSkgeworICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAl
cyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2Vu
Y0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdW5z
aWduZWQgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgc2l6ZV90IHN1YlNhbXBs
ZUJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIHN1YnNhbXBsZUluZGV4ID0gMDsK
KyAgICB3aGlsZSAoZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCA8IGlucHV0LmVuY3J5cHRlZEJ1
ZmZlclNpemVJbkJ5dGVzKSB7CisgICAgICAgIHVpbnQxNl90IHN1YnNhbXBsZU51bUNsZWFyQnl0
ZXMgPSAwOworICAgICAgICB1aW50MzJfdCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IDA7
CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZUluZGV4IDwgaW5wdXQubnVtU3Vic2FtcGxlcykgewor
ICAgICAgICAgICAgaWYgKCFyZWFkVUludDE2KGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0
LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwg
c3Vic2FtcGxlTnVtQ2xlYXJCeXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBjbGVhciBieXRl
cyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZWFk
VUludDMyKGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXpl
SW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVk
Qnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJL
ZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgZW5jcnlwdGVkIGJ5dGVzIGluIHN1YnNhbXBs
ZSBhdCBpbmRleCAldSIsIHN1YnNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWJzYW1wbGVJbmRleCsrOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7Cisg
ICAgICAgICAgICBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IGlucHV0LmVuY3J5cHRlZEJ1
ZmZlclNpemVJbkJ5dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgaGlnaC1mcmVxdWVuY3kgbWVzc2FnZXMsIG5v
dCBzdXJlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgbG9nZ2luZyBsaWIgaW4gV2ViQ29yZS4KKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIHN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGNsZWFyICgl
bHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1D
bGVhckJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1
ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0g
c3Vic2FtcGxlTnVtQ2xlYXJCeXRlczsKKworICAgICAgICBpZiAoc3Vic2FtcGxlTnVtRW5jcnlw
dGVkQnl0ZXMpIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXgg
JXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vi
c2FtcGxlSW5kZXgsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRC
dWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAg
ICAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCht
X2djcnlIYW5kbGUsIGlucHV0LmVuY3J5cHRlZEJ1ZmZlciArIGVuY3J5cHRlZEJ1ZmZlckJ5dGVP
ZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzLCAwLCAwKSkgeworICAgICAgICAgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJf
ZGVjcnlwdCk6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmNyeXB0ZWRC
dWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6
Y2VuY0RlY3J5cHQoQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkK
K3sKKyAgICBpZiAoIWNlbmNTZXRDb3VudGVyVmVjdG9yKGlucHV0KSB8fCAhY2VuY1NldERlY3J5
cHRpb25LZXkoaW5wdXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5w
dXQuaXNTdWJzYW1wbGVkKCkgPyBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoaW5wdXQpIDogY2VuY0Rl
Y3J5cHRGdWxsU2FtcGxlKGlucHV0KTsKK30KKwordm9pZCBDRE1Qcm94eUNsZWFyS2V5Ojppbml0
aWFsaXplR2NyeXB0KCkKK3sKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBo
ZXJfb3BlbigmbV9nY3J5SGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01P
REVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfb3Blbik6ICVzIiwgZ3BnX3N0cmVy
cm9yKGVycm9yKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJTaG91bGQgbm90
IGdldCB0aGlzIGZhciB3aXRoIGEgZnVuY3Rpb25hbCBHQ3J5cHQhIik7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1Qcm94eUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDI0MGM5Zjhk
NGNlNjdhYWJkMWRmZWQwN2I2NmI1MTA0MTIxOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5
LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRlICJDRE1J
bnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDx3dGYv
Q29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhy
ZWFkcyBzaG91bGQgdXNlIHRvIG1ha2UgdXNlIG9mIGEKKy8vIHBsYXRmb3JtIENETSBtb2R1bGUu
CitjbGFzcyBDRE1Qcm94eUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETVByb3h5LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlDbGVhcktleSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXph
dGlvbjo6RWFnZXI+IHsKK3B1YmxpYzoKKyAgICBDRE1Qcm94eUNsZWFyS2V5KCkKKyAgICB7Cisg
ICAgICAgIGluaXRpYWxpemVHY3J5cHQoKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0RNUHJveHlD
bGVhcktleSgpOworCisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBsYWNrIG9mIGNvbnNpc3RlbmN5
IGJldHdlZW4gU2hhcmVkQnVmZmVycywKKyAgICAvLyBWZWN0b3I8Y2hhcj4ncyBhbmQge3VpbnQ4
X3QqLHNpemVfdH0gaWRpb21zIGZvciByZXByZXNlbnRpbmcgYSBjaHVuayBvZgorICAgIC8vIGJ5
dGVzLiBGaXggdGhhdCBzb21laG93LiBOb3RlIFNoYXJlZEJ1ZmZlcnMgYXJlIGRhbmdlcm91cyBz
aW5jZQorICAgIC8vIHRoZXkncmUgbm90IHRocmVhZC1zYWZlIGFuZCB0aGlzIGNsYXNzIG11c3Qg
bWFpbnRhaW4KKyAgICAvLyB0aHJlYWQtc2FmZXR5LCBidXQgbWF5YmUgU2hhcmVkQnVmZmVyOjpE
YXRhU2VnbWVudCBjb3VsZCBiZQorICAgIC8vIG1hZGUgdG8gd29yaywgaG93ZXZlciB0aGF0IGhh
cyB6ZXJvIGhlbHBlcnMgZm9yIGRyb3BwaW5nIGludG8KKyAgICAvLyBpdGVyYXRvci1hd2FyZSAv
IGNvbXBhcmF0b3ItYXdhcmUgY29udGFpbmVycy4uLgorICAgIHN0cnVjdCBjZW5jRGVjcnlwdENv
bnRleHQgeworICAgICAgICAvLyBGSVhNRTogRW5hY2Fwc3VsYXRlIHRoZXNlIGZpZWxkcyBpbiBu
b24tY29waWVkIHR5cGVzLgorICAgICAgICBjb25zdCB1aW50OF90KiBrZXlJRDsKKyAgICAgICAg
c2l6ZV90IGtleUlEU2l6ZUluQnl0ZXM7CisKKyAgICAgICAgY29uc3QgdWludDhfdCogaXY7Cisg
ICAgICAgIHNpemVfdCBpdlNpemVJbkJ5dGVzOworCisgICAgICAgIHVpbnQ4X3QqIGVuY3J5cHRl
ZEJ1ZmZlcjsKKyAgICAgICAgc2l6ZV90IGVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzOworCisg
ICAgICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMgZGF0YSBsYXlvdXQuCisgICAgICAg
IC8vIElmIHdlIHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUgc3BlY2lmaWMgZGF0YSBsYXlvdXQsIHdl
IGNhbiBwYXJzZSBpdCBiZWZvcmUKKyAgICAgICAgLy8gYXNzaWduaW5nIGl0IGhlcmUgYW5kIG1h
eWJlIGhhdmUgYSBWZWN0b3I8c2l6ZV90PiB0aGF0IGlzIGEgc2VyaWVzIG9mCisgICAgICAgIC8v
IGNsZWFyL2RlY3J5cHRlZC9jbGVhci9kZWNyeXB0ZWQuLi4gT3IgbWF5YmUgZXZlbiBhIFZlY3Rv
cjxzdGQ6OnBhaXI8c2l6ZV90LCBzaXplX3Q+PgorICAgICAgICAvLyByZXByZXNlbnRpbmcgc2Vx
dWVuY2VzIG9mIGNsZWFyL2RlY3J5cHRlZCBzaXplcy4gVGhhdCBzdGQ6OnBhaXIgY291bGQgZXZl
bgorICAgICAgICAvLyBiZWNvbWUgYSBzdHJ1Y3QgQ2xlYXJEZWNyeXB0ZWRDaHVua1NpemVzSW5C
eXRlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNjczMAorICAgICAgICBjb25zdCB1aW50OF90KiBzdWJzYW1wbGVzQnVm
ZmVyOworICAgICAgICBzaXplX3Qgc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzOworICAgICAg
ICBzaXplX3QgbnVtU3Vic2FtcGxlczsKKworICAgICAgICBib29sIGlzU3Vic2FtcGxlZCgpIGNv
bnN0IHsgcmV0dXJuIG51bVN1YnNhbXBsZXM7IH0KKyAgICB9OworCisgICAgLy8gRklYTUU6IFVu
Y29uZGl0aW9uYWwgaW4tcGxhY2UgZGVjcnlwdGlvbi4gV2hhdCBhYm91dCBTVlA/CisgICAgLy8g
RklYTUU6IEdTdHJlYW1lci1zcGVjaWZpYywgaW4gdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBzdWJz
YW1wbGUKKyAgICAvLyBkYXRhIGlzIGRlZmluZWQgYnkgd2hhdGV2ZXIgcXRkZW11eCBkZWNpZGVz
IHRvIGRvIHdpdGggaXQuCisgICAgYm9vbCBjZW5jRGVjcnlwdChjZW5jRGVjcnlwdENvbnRleHQm
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemVHY3J5cHQoKTsKKworICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBBRVMgaW4gQ1RSIG1vZGUsIGluIHRoZSBmdXR1
cmUKKyAgICAvLyB3ZSB3aWxsIHN1cmVseSBoYXZlIHRvIHN1cHBvcnQgbW9yZSBwcm90ZWN0aW9u
IHNjaGVtZXMuIENhbiB3ZQorICAgIC8vIHJldXNlIHNvbWUgQ3J5cHRvIEFQSXMgaW4gV2ViQ29y
ZT8KKyAgICBib29sIGNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4
dCYpOworICAgIGJvb2wgY2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250
ZXh0Jik7CisgICAgYm9vbCBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0
Jik7CisgICAgYm9vbCBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRDb250ZXh0Jik7
CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRoaW5nIGluIFdl
YkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5SGFuZGxlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFh
ZTdjMGU5MzRhOS4uNTgzZjI2MTg2YWRmOGI3ODdiYjkzMzY3OTcxNmIwNDgzZjFkMmZlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdT
dHJlYW1lci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRl
ICJDRE1Qcm94eUNsZWFyS2V5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8Z2NyeXB0Lmg+CkBAIC0z
NywxMiArMzgsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUgewotICAgIFJlZlB0cjxQcm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBn
Y3J5X2NpcGhlcl9oZF90IGhhbmRsZTsKKyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gY2Rt
UHJveHk7CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9v
bCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBSZWZQdHI8UHJveHlDRE0+KTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7
CiBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
LCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5z
aWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVC
VUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19j
YXRlZ29yeSk7CkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVh
cl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJv
dGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
LSAgICBjZW5jQ2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFu
ZGxlS2V5UmVzcG9uc2UpOworICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9E
RUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9
IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBA
IC05Myw2MSArOTMsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdl
YmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0KiBzZWxmKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2Vs
Zi0+cHJpdiA9IHByaXY7CiAgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUoKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3Bl
bigmKHByaXYtPmhhbmRsZSksIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9D
VFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGNyZWF0ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19z
dHJlcnJvcihlcnJvcikpOwotICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsK
LSAgICBnY3J5X2NpcGhlcl9jbG9zZShwcml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09C
SkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxl
S2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVm
UHRyPFByb3h5Q0RNPiBwcm94eUNETSkKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBj
ZG1Qcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7Ci0gICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5
Q0RNQ2xlYXJLZXkqPihwcm94eUNETS5nZXQoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RN
OworICAgIHByaXYtPmNkbVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5
Kj4oY2RtUHJveHkuZ2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKIH0KIAotc3Rh
dGljIGJvb2wgZmluZEFuZFNldEtleShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUq
IHByaXYsIGNvbnN0IFN0cmluZyYmIGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBH
c3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2Ft
cGxlQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5
VmFsdWU7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29s
YXRlZEtleXMoKSkgewotICAgICAgICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAg
ICAgICAgICAga2V5VmFsdWUgPSBrZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBr
ZXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1
ZS5zaXplSW5CeXRlcygpID09IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3Qg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0
ZXJzOCgpLCBrZXlWYWx1ZS5zaXplSW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHByaXYsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihl
cnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2Vs
ZikpOwogCi1zdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIs
IEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzQnVmZmVyKQotewotICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAibm8gSVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAh
a2V5SURCdWZmZXIgfHwgIWJ1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJpbnZhbGlkIGRlY3J5cHQoKSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMTU3LDI3ICsxMjgsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0la
RV07Ci0gICAgaWYgKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1z
ZXQoY3RyICsgOCwgMCwgOCk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5k
YXRhKCksIDgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+
c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1
ZmZlci0+ZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRf
UFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90
IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVB
UktFWV9TSVpFKTsKLSAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiZ2NyeV9jaXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3Io
Y2lwaGVyRXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
YnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBk
ZWNyeXB0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBl
ZEtleUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZm
ZXIsIEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsK
QEAgLTE5MCw3MiArMTQwLDI5IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBw
ZWRLZXlJZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAg
ICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwot
Ci0gICAgaWYgKCFzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNy
eXB0aW9uLgotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNy
eXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBw
ZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhl
cl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24g
ZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwu
Ci0gICAgaWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkVycm9yLCB0aGUgc3ViU2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1
dG8gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3Jl
YXRlKHN1YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJT
YW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0
byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25l
dyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIt
PnNpemUoKSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6
ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChw
b3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVz
Q2xlYXIgPSAwOwotICAgICAgICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAg
ICAgaWYgKHNhbXBsZUluZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICgh
Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIp
Ci0gICAgICAgICAgICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRl
ci5nZXQoKSwgJm5CeXRlc0VuY3J5cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJ1bnN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNF
bmNyeXB0ZWQgPSBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0K
LSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1
IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBl
ZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXND
bGVhcjsKLSAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVk
ICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSAtIHBvc2l0aW9uKTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBo
ZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24s
IG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsK
LSAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4
ICV1IGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lw
aGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdz
dE1hcHBlZEJ1ZmZlcj4gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFy
S2V5OjpjZW5jRGVjcnlwdENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFw
cGVkS2V5SWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBt
YXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZl
ci0+ZGF0YSgpOworICAgIGNvbnRleHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5z
aXplKCk7CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEo
KTsKKyAgICBjb250ZXh0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVy
LT5zaXplKCk7CisgICAgY29udGV4dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7Cisg
ICAgaWYgKCFzdWJzYW1wbGVDb3VudCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVy
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIp
OworICAgICAgICBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVm
ZmVyOjpjcmVhdGUoc3Vic2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYg
KCFtYXBwZWRTdWJzYW1wbGVzQnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIg
PSBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2Ft
cGxlc0J1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwog
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eS0+Y2Vu
Y0RlY3J5cHQoY29udGV4dCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4
M2QwNDc0ODYwZjZlZjgxN2YzMWNkYzE1ZTQ4YWMxODZjMDM0NC4uNDdiNTYwZjczOTIwOWRjMmEx
NjI0NGMwNzk4MDM3NDdjMzA0MTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBA
IC0yNSwzNCArMjUsMzQgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShH
U1RSRUFNRVIpCiAKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0
Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQ
cm94eUNETTsKK3VzaW5nIFdlYkNvcmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rp
b25FdmVudDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVj
ZWl2ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAg
TG9jayBtdXRleDsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94
eT4gY2RtUHJveHk7CisKKyAgICBMb2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRp
b24gY2RtQXR0YWNobWVudENvbmRpdGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25k
cyBNYXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNp
dGlvbik7CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2Fwcyog
dHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBz
KiwgR3N0Q2FwcyopOwogc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RC
YXNlVHJhbnNmb3JtKiwgR3N0QnVmZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFu
ZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVy
eUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsK
LXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCopOwogc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0
Q29udGV4dCopOwogCi0KIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0
ZWdvcnkKIApAQCAtNzYsNyArNzYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9u
X2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJh
c2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFu
c2Zvcm1DYXBzKTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNz
dGhyb3VnaCA9IEZBTFNFOwogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdT
VF9ERUJVR19GVU5DUFRSKHNpbmtFdmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFz
cy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUpKTsKIH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RG
bG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVm
ZmVyKiBidWZmZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11
dGV4KTsKIAotICAgIC8vIFRoZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQu
IFdhaXQgZm9yIGl0LgotICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBp
dCIpOwotICAgICAgICBpZiAoR1NUX1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFU
RV9QQVVTRUQgfHwgKEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9T
VEFURV9WT0lEX1BFTkRJTkcgJiYgR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkg
PCBHU1RfU1RBVEVfUEFVU0VEKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiY2FuJ3QgcHJvY2VzcyBrZXkgcmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIp
OwotICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gU2VuZCAiZHJtLWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhl
IHBsYXllciB0byByZXNlbmQgdGhlIENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3Jt
IHdlIGFyZSB3YWl0aW5nIGZvciBrZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0
cnVlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiks
IGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVf
bmV3X2VtcHR5KCJkcm0td2FpdGluZy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53
YWl0Rm9yKHByaXYtPm11dGV4LCBTZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0
dXJuIHByaXYtPmtleVJlY2VpdmVkOworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8g
YmUgbmVnb3RpYXRlZCBiZWZvcmUgd2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFw
cml2LT5jZG1Qcm94eSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90
IGF2YWlsYWJsZSwgZ29pbmcgdG8gd2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0
YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vj
b25kc1RvV2FpdEZvckNETVByb3h5LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYt
PmNkbVByb3h5OwogICAgICAgICB9KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkg
ewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUi
KTsKKyAgICAgICAgaWYgKCFwcml2LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiQ0RNUHJveHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAg
ICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0g
ICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRf
cG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChH
U1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZl
ZCIpKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxl
IHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBH
c3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFBy
b3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpA
QCAtMjA3LDMyICsxOTcsMzAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFj
ZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRh
IGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgfQorICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9
IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1
ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3Rl
Y3Rpb25NZXRhKSk7CisgICAgfSk7CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFn
c3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZp
dlNpemUpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQg
aXZfc2l6ZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRl
cnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwog
ICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywg
ImVuY3J5cHRlZCIsICZlbmNyeXB0ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQgZW5jcnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9y
ZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25N
ZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAot
ICAgIGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1v
dmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRh
KSk7CisgICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOwotICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24g
bWV0YTogJSIgR1NUX1BUUl9GT1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVu
c2lnbmVkIHN1YlNhbXBsZUNvdW50OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChw
cm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkp
IHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1w
bGVfY291bnQiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3Rh
dGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNl
LCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92
YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2
YWx1ZSkgewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdl
dCBzdWJzYW1wbGVzIik7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1
YlNhbXBsZXNCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlm
ICghc3ViU2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiVGhlcmUgaXMgbm8gc3Vic2FtcGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBs
ZSBjb3VudCIpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHBy
b3RlY3Rpb25NZXRhLT5pbmZvLCAia2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIi
KTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgIH0KICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3Zh
bHVlX2dldF9idWZmZXIodmFsdWUpOwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93
UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVy
KiBidWZmZXIpCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9u
TWV0YS0+aW5mbywgIml2Iik7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0
X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHBy
b3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwog
ICAgIH0KIApAQCAtMjcwLDcxICsyNTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNm
b3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+
ZGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291
bnQsIHN1YlNhbXBsZXNCdWZmZXIpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkRlY3J5cHRpb24gZmFpbGVkIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVm
ZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RN
SW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZikKK3N0YXRpYyBib29sIGlzQ0RNUHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUoc2VsZik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50
TXV0ZXgpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2
LT5tdXRleC5pc0xvY2tlZCgpKTsKLQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAg
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2Fu
J3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRo
ZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2Fn
ZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBv
bmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlz
IGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1
bCBidXQgdGhlIHBsYXllciBzZXRzIHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUg
Q0RNSW5zdGFuY2UgYW5kIGlmIGl0IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9m
IGFza2luZyBmb3Igb25lIGFzIGl0IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBi
eSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRv
IGFuc3dlciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5l
aXRoZXIgcXVlcmllcyBub3IgYnVzCi0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVy
ZS4KLSAgICAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFs
dWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNv
bnRleHQuZ2V0KCkpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNE
TSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50
ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0g
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RN
IHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBw
cml2LT5wcm94eUNETS0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIp
Oworc3RhdGljIENETVByb3h5KiBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5U
KHNlbGYpLCAiZHJtLWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkgPSBudWxscHRy
OworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYg
d2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVl
cnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAgICAvLyBtZXNz
YWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNl
IG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkg
aXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwg
YnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENE
TUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBh
c2tpbmcgZm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9z
c3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dl
ciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIg
cXVlcmllcyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgorICAgIGlm
IChjb250ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJl
X2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2Rt
LXByb3h5Iik7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJveHkgPSByZWlu
dGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAg
ICAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIs
IHByb3h5LCBwcm94eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5
OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2Vs
ZiwgIkNETVByb3h5IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAgICB9Ci0KLSAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZhaWxhYmxlICVzIiwgYm9v
bEZvclByaW50aW5nKHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAgcmV0dXJuIHByaXYtPnBy
b3h5Q0RNOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc2lua0V2
ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQorc3Rh
dGljIHZvaWQgYXR0YWNoQ0RNUHJveHkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgQ0RNUHJveHkqIHByb3h5KQogewotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFRfR0VUX0NMQVNTKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCi0g
ICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzNTUKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJl
IGhhbmRsaW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KLSAgICAgICAgLy8g
YWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIg
YQotICAgICAgICAvLyBwcmVmZXJyZWQgc3lzdGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0
dXJlIHByb3RlY3Rpb24KLSAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkg
dGhlIGRlbXV4ZXIsIHNvIHRoZSBtdXN0IGJlCi0gICAgICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4K
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBpZiAoIWlz
Q0RNSW5zdGFuY2VBdmFpbGFibGUoc2VsZikpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIk5vIENETSBpbnN0YW5jZSBhdmFpbGFibGUiKTsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiQXR0YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHByaXYtPmNkbVBy
b3h5ID0gcHJveHk7CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2Rt
UHJveHkpOworICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICghaXNDRE1Qcm94
eUF2YWlsYWJsZShzZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKwor
ICAgICAgICBDRE1Qcm94eSogcHJveHkgPSBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KHNlbGYp
OworICAgICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgIGF0dGFjaENETVByb3h5KHNlbGYs
IHByb3h5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gcmV0cmlldmUgQ0RN
UHJveHkgZnJvbSBjb250ZXh0Iik7CiAgICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
Ci0gICAgICAgIGlmIChrbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlD
RE0pKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQi
KTsKLSAgICAgICAgICAgIHByaXYtPmtleVJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHBy
aXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICAgICAgfQorICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0
cmFucywgR3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1CisgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRs
aW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KKyAgICAvLyBhZGRpdGlvbiB0
byBvdXQtb2YtYmFuZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCisgICAgLy8g
cHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9u
CisgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRo
ZXkgbXVzdCBiZQorICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KKyAgICBzd2l0Y2ggKEdTVF9FVkVO
VF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09P
QjogeworICAgICAgICBBU1NFUlQoZ3N0X2V2ZW50X2hhc19uYW1lKGV2ZW50LCAiYXR0ZW1wdC10
by1kZWNyeXB0IikpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJIYW5kbGluZyBh
dHRlbXB0LXRvLWRlY3J5cHQiKTsKKyAgICAgICAgcmVzdWx0ID0gaW5zdGFsbENETVByb3h5SWZO
b3RBdmFpbGFibGUoc2VsZik7CiAgICAgICAgIGdzdF9ldmVudF91bnJlZihldmVudCk7Ci0gICAg
ICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpA
QCAtMzQ1LDE2ICszNTQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RC
YXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJh
bnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFF1ZXJ5KiBxdWVyeSkKLXsKLSAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZShxdWVyeSks
ICJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSB7Ci0gICAgICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURSh0cmFucyk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QodHJh
bnMsICJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSBxdWVyeSwgd2FpdGluZ2ZvcmtleSAl
cyIsIGJvb2xGb3JQcmludGluZyhwcml2LT53YWl0aW5nRm9yS2V5KSk7Ci0gICAgICAgIHJldHVy
biBwcml2LT53YWl0aW5nRm9yS2V5OwotICAgIH0KLSAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNG
T1JNX0NMQVNTKHBhcmVudF9jbGFzcyktPnF1ZXJ5KHRyYW5zLCBkaXJlY3Rpb24sIHF1ZXJ5KTsK
LX0KLQogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCiB7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQo
ZWxlbWVudCk7CkBAIC0zNjMsNyArMzYyLDcgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW4KICAg
ICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VE
X1RPX1JFQURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZ
Iik7Ci0gICAgICAgIHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcHJpdi0+
Y2RtQXR0YWNobWVudENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0zODAsMTIgKzM3OSwxNCBAQCBzdGF0aWMgdm9p
ZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKIAot
ICAgIGlmIChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLWlu
c3RhbmNlIikpIHsKLSAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0taW5zdGFu
Y2UiKTsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBw
cml2LT5wcm94eUNETSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFs
dWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPnByb3h5Q0RNLmdl
dCgpKTsKKyAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJt
LWNkbS1wcm94eSIpKSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLXBy
b3h5Iik7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRl
eCk7CisgICAgICAgIHByaXYtPmNkbVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENE
TVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJp
di0+Y2RtUHJveHkuZ2V0KCkpOworICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxm
LCBwcml2LT5jZG1Qcm94eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgKaW5kZXggMDY1MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1
ZC4uODU3NWEwNzEwMmJkMTMzZjkyNWRlMWEwN2FkYzkyMmM3YTA1ODQyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpICYmIFVTRShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2lu
Y2x1ZGUgPENETVByb3h5Lmg+CiAjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5o
PgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw4
ICs1NSw4IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNz
IHsKICAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBj
aGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5
Q0RNPik7Ci0gICAgYm9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RC
dWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNh
bXBsZXNCdWZmZXIpOworICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5Pik7CisgICAg
Ym9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RC
dWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZl
ciwgdW5zaWduZWQgc3Vic2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIp
OwogfTsKIAogR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja0NETUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9y
eS5jcHAKaW5kZXggYjMyYjVhMDE2ODQ1NWRlY2U5OTVkNTZhNmI0MzRlOGRkNGZiZTY4MS4uY2U1
ZDhmN2Q2YmRmMzhiNTkyMjA5MzAyYTZlNmQ3MWIzNjk2NjMyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKQEAgLTIyNiw4ICsyMjYsNiBAQCBPcHRpb25hbDxT
dHJpbmc+IE1vY2tDRE06OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklk
KSBjb25zdAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVByb3h5Q0RNTW9jazo6flBy
b3h5Q0RNTW9jaygpID0gZGVmYXVsdDsKLQogTW9ja0NETUluc3RhbmNlOjpNb2NrQ0RNSW5zdGFu
Y2UoV2Vha1B0cjxNb2NrQ0RNPiBjZG0pCiAgICAgOiBtX2NkbShjZG0pCiB7CkBAIC0yOTYsMTEg
KzI5NCw2IEBAIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IE1vY2tDRE1JbnN0YW5jZTo6Y3Jl
YXRlU2Vzc2lvbigpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0RNSW5zdGFuY2VTZXNz
aW9uKG1ha2VXZWFrUHRyKCp0aGlzKSkpOwogfQogCi1SZWZQdHI8UHJveHlDRE0+IE1vY2tDRE1J
bnN0YW5jZTo6cHJveHlDRE0oKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJv
eHlDRE1Nb2NrKCkpOwotfQotCiBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpNb2NrQ0RNSW5zdGFu
Y2VTZXNzaW9uKFdlYWtQdHI8TW9ja0NETUluc3RhbmNlPiYmIGluc3RhbmNlKQogICAgIDogbV9p
bnN0YW5jZShXVEZNb3ZlKGluc3RhbmNlKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuaAppbmRleCBkN2U2NmU2MDE2ZDEwMTc4MTJlYWZhOGM4MGI0N2Q0NzI4MzUwY2Qx
Li4zOTkwOWI5MzAzYTk0YzkzNjhlYWEwZjYyNWY0YjY3ZTUyNTA1OWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCkBAIC05OSwxMSArOTksNiBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX3Nlc3Npb25z
OwogfTsKIAotY2xhc3MgUHJveHlDRE1Nb2NrIGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5Qcm94eUNETU1vY2soKTsKLX07Ci0KIGNsYXNzIE1vY2tDRE0g
OiBwdWJsaWMgQ0RNUHJpdmF0ZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1vY2tDRE0+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE1MCw3ICsxNDUsNiBAQCBw
cml2YXRlOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAg
ICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotICAg
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbDsKIAogICAgIFdlYWtQdHI8
TW9ja0NETT4gbV9jZG07CiAgICAgYm9vbCBtX2Rpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2Vk
IHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdENvbXBpbGVyRmxhZ3Mu
Y21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0Q29tcGlsZXJGbGFncy5jbWFrZQppbmRleCBjNWZh
NGMzZWE1OGU2YzFmZjEyNWUxNzVhY2JkYjFkMjc3ZDJhZDE5Li5lZDcwYTkzODA2MWFhYTNjOGFj
ZDUwZmU1MGNiYTM5Y2Y5YjliZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0Q29t
cGlsZXJGbGFncy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0Q29tcGlsZXJGbGFncy5j
bWFrZQpAQCAtMTE3LDYgKzExNyw3IEBAIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XbWlzc2luZy1mb3JtYXQt
YXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XcG9p
bnRlci1hcml0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV3Vu
ZGVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1XdW51c2VkLXBh
cmFtZXRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV3dyaXRl
LXN0cmluZ3MpCiAKICAgICAjIFdhcm5pbmdzIHRvIGJlIGRpc2FibGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390405</attachid>
            <date>2020-02-11 12:25:09 -0800</date>
            <delta_ts>2020-02-11 16:40:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200211202507.patch</filename>
            <type>text/plain</type>
            <size>115037</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uZDU3ZjVlODdlZGYyZWZlMTY2ZTM5MmNjYmYxNTdi
Mjc1YTVlNmMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
IGFuZCBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgMi8gRm9yIG1lZGlhIHBsYXllcnMg
dG8gc2FmZWx5IGFzc2VzcyB0aGUgc3RhdGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAgICAgICAgd2hh
dCB0aGVpciBzdGF0dXMgaXMuCisKKyAgICAgICAgQ0RNUHJveHkgZXhpc3RzIHRvIGFsbG93IHRo
cmVhZC1zYWZlIGFjY2VzcyB0byBhIHJlYWwgQ0RNLCBhbG9uZworICAgICAgICB3aXRoIHRoZWly
IHF1aXJrcy4gVGhlIHR3byBtYWluIHByb2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBvZiBhIENETQor
ICAgICAgICBoYXZlIGluIFdlYktpdCBpcyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RNIGFjY2VzcyBm
cm9tIGJhY2tncm91bmQKKyAgICAgICAgbWVkaWEgdGhyZWFkcy4KKworICAgICAgICBLZXkgbWFu
YWdlbWVudCBpcyBob3cgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEgd2F5CisgICAg
ICAgIGNvaGVyZW50IHdpdGggSmF2YVNjcmlwdCwgdGhlIGNyb3NzLXBsYXRmb3JtIEVNRSBpbXBs
ZW1lbnRhdGlvbiwKKyAgICAgICAgdGhlIHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBhbmQgdGhlIGJh
Y2tncm91bmQgbWVkaWEKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlkZXMgYSBkZWZh
dWx0IGtleSBzdG9yZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIHN1Yi1jbGFzc2VzLiBTdWItY2xh
c3NlcyBjYW4sIG9uIHJlY2VpcHQgb2YgbmV3IGluZm9ybWF0aW9uIGZyb20gYQorICAgICAgICBy
ZWFsIENETSwgdGVsbCBDRE1Qcm94eSBhYm91dCB0aGUga2V5cyBhbmQgdGhlaXIKKyAgICAgICAg
c3RhdHVzZXMuIENETVByb3h5IGlzIGludGVuZGVkIHRvIERvIFRoZSBSaWdodCBUaGluZyBmcm9t
IHRoZXJlLAorICAgICAgICBsZXR0aW5nIEphdmFTY3JpcHQgYW5kIFdlYkNvcmUga25vdyBhbGwg
dGhlIGRldGFpbHMgdGhleSBuZWVkIHRvCisgICAgICAgIGFib3V0IHRoZSBuZXcgc3RhdGUsIGFz
IHdlbGwgYXMgdGhlIG1lZGlhIGRlY29kZSB0aHJlYWRzIHdoZW4gdGhleQorICAgICAgICBuZXh0
IGNvbWUgYXNraW5nLgorCisgICAgICAgIEFjY2VzcyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyBp
cyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICB0aHJlYWQtdW5zYWZlIENETUlu
c3RhbmNlLiBXZSB1c2VkIHRvIGdldCBhd2F5IHdpdGggZG9pbmcgZXhhY3RseQorICAgICAgICB0
aGlzLCBidXQgV2ViQ29yZSByZWNlbnRseSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBhYm91dAorICAg
ICAgICB0aHJlYWQtdW5zYWZlIGFjY2VzcyBvZiBtYWluLXRocmVhZC1vbmx5IGRhdGEsIGFuZCB3
ZSBoYWQgdG8gZG8KKyAgICAgICAgc29tZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0cy4gVGhhdCBz
b21ldGhpbmcgd2FzIFByb3h5Q0RNIChhCisgICAgICAgIHRlcnJpYmxlIG5hbWUsIHJlbW92ZWQg
bm93KSwgd2hpY2ggd2FzIGEgaGFjayBhbmQgcGxlYXNlIGZvcmdldAorICAgICAgICBhYm91dCBp
dC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVseSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLCBh
bmQKKyAgICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQtc2FmZSB2aWV3
IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFkcyB0byBpbnRl
cnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFuZCBwZXJmb3JtCisgICAgICAgIENETS1zcGVjaWZpYyBk
ZWNyeXB0aW9uIC8gZGVjb2RlLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBDRE1Q
cm94eSB0byBidWlsZAorICAgICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1v
dmVBbGxLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzdG9wcGVkV2FpdGlu
Z0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZvcktl
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWlsYWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20p
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20p
OgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojpp
ZEFzU2hhcmVkQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6
OmFkZFNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpyZW1vdmVTZXNz
aW9uUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6bnVtU2Vzc2lvblJlZmVyZW5j
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om51bUtleXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpy
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnNldFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OmlzV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6dHJhY2tTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAg
dHJhY2tTZXNzaW9uIG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1F
CisgICAgICAgIHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFj
ayBvZiBnZW5lcmF0ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVz
ZSBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjppc29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94
eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KTog
RGVsZXRlZC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHVubmVjZXNzYXJpbHkKKyAgICAgICAgc29y
dGluZyB0aGUga2V5IHZlY3RvcnMuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG8gaW1wb3Nl
IGFuCisgICAgICAgIG9yZGVyaW5nIG9uIGtleXMsIHNvIEkgcmVtb3ZlZCBpdC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oOiBSZWZhY3Rv
ciB0byB1c2UKKyAgICAgICAgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMuaDoKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIFByb3h5Q0RNIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZSk6CisgICAgICAgIFJl
ZmFjdG9yZWQgb3V0IG9mIHN5bmNNZXNzYWdlLiBUaGUgY29kZSB3YXMgbW92ZWQgaGVyZSBhbmQg
aW50bworICAgICAgICB3YWl0Rm9yQ0RNQXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0dGFjaG1lbnQpOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRpbmctZm9yLWtl
eSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgorICAgICAgICBF
bmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJhc2VkIHBvcnRz
IHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xhc3NlcyBmcm9t
IGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEgaGFuZGxlIHRv
IHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5hZ2VtZW50LCBz
byB3aXJlIHRoYXQgaW4gaGVyZSB0b28uIEFsc28gd2lyZSB0aGUKKyAgICAgICAgR1N0cmVhbWVy
IHNwZWNpZmljIENsZWFyS2V5IHByb3h5IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5IGNvbnN0KTog
S2V5CisgICAgICAgIHN0YXR1cyBub3RpZmljYXRpb25zIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkg
b2YgdGhlIENETVByb3h5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOiBOb3cK
KyAgICAgICAgd2UgdXNlIENETUluc3RhbmNlUHJveHksIG5vdCBDRE1JbnN0YW5jZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
OgorICAgICAgICBBZGRlZC4gRyotc3BlY2lmaWMgQ2xlYXJLZXkgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVhcktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktl
eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxT
YW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRT
dWJzYW1wbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRpYWxpemVHY3J5
cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVmYWN0
b3IgdG8gdXNlIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0
X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6
CisgICAgICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRl
ZC4gVGhpcyB3YXMgYSBiYWRseSBuYW1lZCBtZXRob2QgdGhhdAorICAgICAgICBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGNkbVByb3h5QXR0YWNoZWQuCisgICAgICAgIChmaW5kQW5kU2V0S2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh0cmFu
c2Zvcm1JblBsYWNlKToKKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOgorICAgICAgICAo
Z2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dCk6CisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6Cisg
ICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6CisgICAgICAgIChzaW5rRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLgorICAgICAgICAocXVlcnlIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZTo6cHJveHlDRE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuaDoKKwogMjAyMC0wMi0wNyAg
eW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFuZGF0ZSBVVUlE
IHZlcnNpb24gNCBmb3IgbUROUyBJQ0UgY2FuZGlkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5Mjhl
YzU1ZmVmYTk5NzA3MDhmNjUwNzcxZDBlOTY2YTNmYWIxY2RmLi42MmU1MzVhOWEwMWRlYzgxZGU0
YTQzYjQ1Mzg2MTcwMzQ3YWI2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxNyw2ICsxODE3LDcg
QEAgcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xl
LmNwcAogCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAorcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1
N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5
YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0
QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyog
Q0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RN
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAw
RjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1
RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRB
NUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2
MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RN
UmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVz
dHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXgg
ODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYy
ZGQ4YWVjN2NlYmUzMzRhYTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZQpAQCAtMTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSkKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkK
IAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3Rh
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5j
ZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYz
ZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcg
KzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBj
bGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRv
IGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNl
ZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQ
cm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGlj
OgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1J
bnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7
CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJiODE5NWJjN2Y2NDRmZjk3ODM5Mjk0ZWU5ZTE3N2U0YWI2NzhkNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hl
eFN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBL
ZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVj
dG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJp
bmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICBy
ZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQor
Cit2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0
b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRo
YXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAg
ICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBv
dmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5l
ZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0
b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQo
a2V5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBl
biB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRo
ZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJM
RUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5
IC0ga2V5IHN0b3JlIG5vdyBoYXMgJXUga2V5cyIsIG51bUtleXMoKSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBrZXkgOiBtX2tleXMpCisgICAgICAgIExPRyhFTUUsICJcdEVNRSAtIENETVByb3h5
IC0gS2V5IElEOiAlcyIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbmRp
ZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorfQorCitDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6YWxsS2V5c0FzUmVsZWFzZWQo
KSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yIGtleVN0
YXR1c1ZlY3RvciA9IGNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgZm9yIChhdXRv
JiBrZXlTdGF0dXMgOiBrZXlTdGF0dXNWZWN0b3IpCisgICAgICAgIGtleVN0YXR1cy5zZWNvbmQg
PSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6UmVsZWFzZWQ7CisgICAgcmV0dXJuIGtl
eVN0YXR1c1ZlY3RvcjsKK30KKworYm9vbCBLZXlTdG9yZTo6YWRkS2V5cyhWZWN0b3I8UmVmUHRy
PEtleT4+JiYgbmV3S2V5cykKK3sKKyAgICBib29sIGRpZEtleVN0b3JlQ2hhbmdlID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBrZXkgOiBuZXdLZXlzKSB7CisgICAgICAgIGlmIChhZGQoV1RGTW92
ZShrZXkpKSkKKyAgICAgICAgICAgIGRpZEtleVN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGRpZEtleVN0b3JlQ2hhbmdlOworfQorCitib29sIEtleVN0b3JlOjphZGQoUmVm
UHRyPEtleT4mJiBrZXkpCit7CisgICAgYm9vbCBkaWRTdG9yZUNoYW5nZSA9IGZhbHNlOworICAg
IHNpemVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmRNYXRjaGluZyhb
Jl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsKKyAgICAgICAgcmV0dXJuICprZXkg
PT0gKnN0b3JlZEtleTsKKyAgICB9KTsKKworICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRElu
ZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5V2l0aE1hdGNoaW5nS2V5
SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGtleVdpdGhNYXRjaGluZ0tleUlELT52YWx1ZSgpID09IGtleS0+dmFsdWUoKSwgIkNh
biB0aGlzIHJlYWxseSBoYXBwZW4/Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKEVNRSwg
IkVNRSAtIENsZWFyS2V5IC0gTmV3IGtleSB3aXRoIElEICVzIGdldHRpbmcgYWRkZWQgdG8ga2V5
IHN0b3JlIiwga2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOyAgICAgIAorICAgICAg
ICBtX2tleXMuYXBwZW5kKGtleSk7CisgICAgICAgIGRpZFN0b3JlQ2hhbmdlID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBrZXktPmFkZFNlc3Npb25SZWZlcmVuY2UoKTsKKyAgICByZXR1cm4gZGlkU3Rv
cmVDaGFuZ2U7Cit9CisKK3ZvaWQgS2V5U3RvcmU6OnJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtl
eVN0b3JlJiBvdGhlcikKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG90aGVyKQorICAg
ICAgICByZW1vdmUoa2V5KTsKK30KKworYm9vbCBLZXlTdG9yZTo6cmVtb3ZlKGNvbnN0IFJlZlB0
cjxLZXk+JiBrZXkpCit7CisgICAgYm9vbCBzdG9yZUNoYW5nZWQgPSBmYWxzZTsKKworICAgIHNp
emVfdCBrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4ID0gbV9rZXlzLmZpbmQoa2V5KTsKKyAgICBM
T0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZXF1ZXN0ZWQgdG8gcmVtb3ZlIGtleSB3aXRoIElE
ICVzIGFuZCAldSBzZXNzaW9uIHJlZmVyZW5jZXMiLCBrZXktPmlkQXNTdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwga2V5LT5udW1TZXNzaW9uUmVmZXJlbmNlcygpKTsKKworICAgIGlmIChrZXlXaXRo
TWF0Y2hpbmdLZXlJREluZGV4ICE9IFdURjo6bm90Rm91bmQpIHsKKyAgICAgICAgYXV0byYga2V5
V2l0aE1hdGNoaW5nS2V5SUQgPSBtX2tleXNba2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleF07Cisg
ICAgICAgIGtleVdpdGhNYXRjaGluZ0tleUlELT5yZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCk7Cisg
ICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPm51bVNlc3Npb25SZWZlcmVuY2VzKCkp
IHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHJlbW92ZSBrZXkgd2l0
aCBJRCAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgbV9rZXlzLnJlbW92ZShrZXlXaXRoTWF0Y2hpbmdLZXlJREluZGV4
KTsKKyAgICAgICAgICAgIHN0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gYXR0ZW1wdCB0byByZW1vdmUg
a2V5IHdpdGggSUQgJXMgaWdub3JlZCwgZG9lcyBub3QgZXhpc3QiLCBrZXktPmlkQXNTdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gc3RvcmVDaGFuZ2VkOworfQorCitjb25z
dCBWZWN0b3I8dWludDhfdD4mIEtleVN0b3JlOjprZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleUlEKSBjb25zdAoreworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlzKSB7
CisgICAgICAgIGlmICgqa2V5ID09IGtleUlEKQorICAgICAgICAgICAgcmV0dXJuIGtleS0+dmFs
dWUoKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZmFsc2UgJiYgImtleSBtdXN0
IGV4aXN0IHRvIGNhbGwgdGhpcyBtZXRob2QiKTsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCitD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBLZXlTdG9yZTo6Y29udmVydFRvSlNL
ZXlTdGF0dXNWZWN0b3IoKSBjb25zdAoreworICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1LZXlzKCkpOworICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9r
ZXlzKQorICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxS
ZWY8U2hhcmVkQnVmZmVyPiwgQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM+IHsga2V5LT5p
ZEFzU2hhcmVkQnVmZmVyKCksIGtleS0+c3RhdHVzKCkgfSk7CisgICAgcmV0dXJuIGtleVN0YXR1
c1ZlY3RvcjsKK30KKwordm9pZCBDRE1Qcm94eTo6dXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3Rv
cmUmIG5ld0tleVN0b3JlKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0
ZXgpOworICAgIG1fa2V5U3RvcmUubWVyZ2UobmV3S2V5U3RvcmUpOworICAgIExPRyhFTUUsICJF
TUUgLSBDRE1Qcm94eSAtIHVwZGF0aW5nIGtleSBzdG9yZSBmcm9tIGEgc2Vzc2lvbiB1cGRhdGUi
KTsKKyAgICBtX2tleXNDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgQ0RNUHJveHk6
OnNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqIGluc3RhbmNlKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBtX2luc3RhbmNlID0gaW5zdGFu
Y2U7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBDRE1Qcm94eTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
a2V5c011dGV4KTsKKyAgICBBU1NFUlQobV9rZXlTdG9yZS5jb250YWluc0tleUlEKGtleUlEKSk7
CisgICAgcmV0dXJuIG1fa2V5U3RvcmUua2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETVBy
b3h5OjpzdGFydGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2luc3RhbmNlTXV0ZXgpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IHN0YXJ0ZWQgd2FpdGluZyBmb3IgYSBrZXkiKTsKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7Cisg
ICAgbV9pbnN0YW5jZS0+c3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKK30KKwordm9pZCBDRE1Qcm94
eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBz
dG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworICAg
IG1faW5zdGFuY2UtPnN0b3BwZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK09wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gQ0RNUHJveHk6OnRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3QKK3sKKyAgICBzdGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIC8vIFVu
Y29uZGl0aW9uYWxseSBzYXlpbmcgd2UgaGF2ZSBzdG9wcGVkIHdhaXRpbmcgZm9yIGEga2V5IG1l
YW5zIHRoYXQgZGVjcnlwdG9ycyBvbmx5IGdldAorICAgIC8vIG9uZSBzaG90IGF0IGZldGNoaW5n
IGEga2V5LiBJZiBNYXhLZXlXYWl0VGltZVNlY29uZHMgZXhwaXJlcywgdGhhdCdzIGl0LCBubyBt
b3JlIGNsZWFyIGJ5dGVzCisgICAgLy8gZm9yIHlvdS4KKyAgICBhdXRvIHN0b3BXYWl0aW5nRm9y
S2V5T25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFt0aGlzXSB7CisgICAgICAgIHN0b3BwZWRXYWl0
aW5nRm9yS2V5KCk7CisgICAgfSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gdHJ5
aW5nIHRvIHdhaXQgZm9yIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgYm9vbCB3YXNLZXlSZWNlaXZlZCA9IGZhbHNlOworICAgIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgICAgIHdhc0tl
eVJlY2VpdmVkID0gbV9rZXlzQ29uZGl0aW9uLndhaXRGb3IobV9rZXlzTXV0ZXgsIENETVByb3h5
OjpNYXhLZXlXYWl0VGltZVNlY29uZHMsIFsmLCB0aGlzLCBrZXlJRF0oKSB7CisgICAgICAgICAg
ICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBpZiAod2FzS2V5UmVjZWl2ZWQpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENE
TVByb3h5IC0gc3VjY2Vzc2Z1bGx5IHdhaXRlZCBmb3Iga2V5IElEICVzIiwgdmVjdG9yVG9IZXhT
dHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtleVZhbHVlKGtl
eUlEKTsKKyAgICB9CisgICAgCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0ga2V5IElE
ICVzIG5vdCBhdmFpbGFibGUiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRh
KCkpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2Jvb2wgQ0RNUHJveHk6OmtleUF2
YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChrZXlJRCk7Cit9CisKK2Jvb2wgQ0RN
UHJveHk6OmtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdAor
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgIHJldHVybiBr
ZXlBdmFpbGFibGVVbmxvY2tlZChrZXlJRCk7Cit9CisKK09wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gQ0RNUHJveHk6OmdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlE
KSBjb25zdAoreworICAgIGlmICgha2V5QXZhaWxhYmxlKGtleUlEKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkga2V5IGNhY2hlIGRvZXMgbm90IGNvbnRhaW4ga2V5IElEICVz
IiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIHRyeVdhaXRGb3JLZXkoa2V5SUQpOworICAgIH0KKworICAgIHJldHVybiBrZXlWYWx1ZShr
ZXlJRCk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXko
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYgbV9wbGF5ZXIpOworICAgIGJvb2wg
d2FzV2FpdGluZ0ZvcktleSA9IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkgPiAwOworICAg
IG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXkrKzsKKworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3BsYXllciA9IG1fcGxheWVyLCB3YXNXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgd2FzV2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+d2FpdGluZ0Zvcktl
eUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVByb3h5OjpzdG9wcGVk
V2FpdGluZ0ZvcktleSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSAmJiBtX3BsYXll
ciAmJiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMCk7CisgICAgbV9udW1EZWNyeXB0
b3JzV2FpdGluZ0ZvcktleS0tOworICAgIGJvb2wgaXNOb2JvZHlXYWl0aW5nRm9yS2V5ID0gIW1f
bnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwbGF5
ZXIgPSBtX3BsYXllciwgaXNOb2JvZHlXYWl0aW5nRm9yS2V5XSB7CisgICAgICAgIGlmIChwbGF5
ZXIgJiYgaXNOb2JvZHlXYWl0aW5nRm9yS2V5KQorICAgICAgICAgICAgcGxheWVyLT53YWl0aW5n
Rm9yS2V5Q2hhbmdlZCgpOworICAgIH0pOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6Om1l
cmdlS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0b3JlKQoreworICAgIC8vIEZJWE1FOiBO
b3RpZnkgSlMgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fa2V5U3RvcmUubWVyZ2Uoa2V5U3RvcmUpOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1J
bnN0YW5jZVByb3h5IC0gbWVyZ2luZyBrZXlzIGludG8gcHJveHkgaW5zdGFuY2UgYW5kIG5vdGlm
eWluZyBDRE1Qcm94eSBvZiBjaGFuZ2VzIik7CisgICAgQVNTRVJUKG1fY2RtUHJveHkpOworICAg
IG1fY2RtUHJveHktPnVwZGF0ZUtleVN0b3JlKGtleVN0b3JlKTsKK30KKwordm9pZCBDRE1JbnN0
YW5jZVByb3h5OjpyZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYga2V5U3RvcmUpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLnJlbW92ZUFsbEtl
eXNGcm9tKGtleVN0b3JlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNmFkNzkzNzdkYTlhYjJi
MjI5MTRmZWFkNDIzOWIwZGMyMzVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oCkBAIC0wLDAgKzEsMTg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKworI2luY2x1
ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgS2V5U3RhdHVzID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpL
ZXlTdGF0dXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPEtleT4gY3JlYXRlKEtleVN0YXR1cyBzdGF0
dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4mJiBrZXlWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEtleShzdGF0dXMsIFdURk1vdmUo
a2V5SUQpLCBXVEZNb3ZlKGtleVZhbHVlKSkpOworICAgIH0KKyAgICBSZWY8U2hhcmVkQnVmZmVy
PiBpZEFzU2hhcmVkQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
bV9pZC5kYXRhKCksIG1faWQuc2l6ZSgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIFZlY3Rvcjx1aW50OF90PiYg
dmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgS2V5U3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICBTdHJpbmcgaWRBc1N0cmluZygpIGNvbnN0Owor
ICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICAvLyBUd28ga2V5cyBhcmUg
ZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5kIHN0
YXR1cy4KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpIHsgcmV0dXJuIGsxLm1faWQgPT0gazIubV9pZDsgfQorICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5ICZrLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSB7IHJl
dHVybiBrLm1faWQgPT0ga2V5SUQ7IH0KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQsIGNvbnN0IEtleSAmaykgeyByZXR1cm4gayA9PSBrZXlJ
RDsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYWRkU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcysrOyB9CisgICAgdm9pZCBy
ZW1vdmVTZXNzaW9uUmVmZXJlbmNlKCkgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX251bVNl
c3Npb25SZWZlcmVuY2VzLS07IH0KKyAgICB1bnNpZ25lZCBudW1TZXNzaW9uUmVmZXJlbmNlcygp
IGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtU2Vzc2lvblJlZmVy
ZW5jZXM7IH0KKyAgICBmcmllbmQgY2xhc3MgS2V5U3RvcmU7CisKKyAgICBLZXkoS2V5U3RhdHVz
IHN0YXR1cywgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5SUQsIFZlY3Rvcjx1aW50OF90PiYmIGtleVZh
bHVlKQorICAgICAgICA6IG1fc3RhdHVzKHN0YXR1cyksIG1faWQoV1RGTW92ZShrZXlJRCkpLCBt
X3ZhbHVlKFdURk1vdmUoa2V5VmFsdWUpKSB7IH0KKworICAgIEtleVN0YXR1cyBtX3N0YXR1czsK
KyAgICBWZWN0b3I8dWludDhfdD4gbV9pZDsKKyAgICBWZWN0b3I8dWludDhfdD4gbV92YWx1ZTsK
KyAgICB1bnNpZ25lZCBtX251bVNlc3Npb25SZWZlcmVuY2VzIHsgMCB9OworfTsKKworY2xhc3Mg
S2V5U3RvcmUgeworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1c1ZlY3RvciA9IENETUluc3Rh
bmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yOworCisgICAgYm9vbCBjb250YWluc0tleUlEKGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIHZvaWQgbWVyZ2UoY29uc3Qg
S2V5U3RvcmUmIG90aGVyKTsKKyAgICB2b2lkIHJlbW92ZUFsbEtleXNGcm9tKGNvbnN0IEtleVN0
b3JlJiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzKCkgeyBtX2tleXMuY2xlYXIoKTsg
fQorICAgIGJvb2wgYWRkS2V5cyhWZWN0b3I8UmVmUHRyPEtleT4+JiYpOworICAgIGJvb2wgYWRk
KFJlZlB0cjxLZXk+JiYpOworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFJlZlB0cjxLZXk+Jik7Cisg
ICAgdW5zaWduZWQgbnVtS2V5cygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5zaXplKCk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleVZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5SUQpIGNvbnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBhbGxLZXlzQXNSZWxlYXNlZCgpIGNv
bnN0OworICAgIEtleVN0YXR1c1ZlY3RvciBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpIGNv
bnN0OworCisgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAg
YXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5iZWdpbigpOyB9CisgICAgYXV0byBl
bmQoKSB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5cy5lbmQoKTsgfQorICAgIGF1dG8gcmJlZ2luKCkgeyByZXR1cm4gbV9rZXlzLnJi
ZWdpbigpOyB9CisgICAgYXV0byByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMucmJlZ2lu
KCk7IH0KKyAgICBhdXRvIHJlbmQoKSB7IHJldHVybiBtX2tleXMucmVuZCgpOyB9CisgICAgYXV0
byByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQorCitwcml2YXRlOgorICAg
IFZlY3RvcjxSZWZQdHI8S2V5Pj4gbV9rZXlzOworfTsKKworY2xhc3MgQ0RNSW5zdGFuY2VQcm94
eTsKKworLy8gSGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2Fk
ZS4gVGhpcyBjYW4gYmUgdXNlZAorLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVj
cnlwdG9ycykuCitjbGFzcyBDRE1Qcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxD
RE1Qcm94eT4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBNYXhLZXlX
YWl0VGltZVNlY29uZHMgPSA1X3M7CisKKyAgICB2aXJ0dWFsIH5DRE1Qcm94eSgpID0gZGVmYXVs
dDsKKworICAgIHZvaWQgdXBkYXRlS2V5U3RvcmUoY29uc3QgS2V5U3RvcmUmIG5ld0tleVN0b3Jl
KTsKKyAgICB2b2lkIHNldEluc3RhbmNlKENETUluc3RhbmNlUHJveHkqKTsKKworcHJvdGVjdGVk
OgorICAgIFZlY3Rvcjx1aW50OF90PiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleUlEKSBjb25zdDsKKyAgICBib29sIGtleUF2YWlsYWJsZVVubG9ja2VkKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5SUQpIGNvbnN0OworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4g
dHJ5V2FpdEZvcktleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBP
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldE9yV2FpdEZvcktleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCkgY29u
c3Q7CisgICAgdm9pZCBzdG9wcGVkV2FpdGluZ0ZvcktleSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIG11dGFibGUgTG9jayBtX2luc3RhbmNlTXV0ZXg7CisgICAgQ0RNSW5zdGFuY2VQcm94eSog
bV9pbnN0YW5jZTsKKworICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKKyAgICBtdXRhYmxl
IENvbmRpdGlvbiBtX2tleXNDb25kaXRpb247CisgICAgLy8gRklYTUU6IER1cGxpY2F0ZWQga2V5
IHN0b3JlcyBpbiB0aGUgaW5zdGFuY2UgYW5kIHRoZSBwcm94eSBhcmUgcHJvYmFibHkgbm90IG5l
ZWRlZCwgYnV0IHNpbXBsaWZpZWQKKyAgICAvLyB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBp
biB0ZXJtcyBvZiB0aHJlYWRpbmcgaW52YXJpYW50cy4KKyAgICBLZXlTdG9yZSBtX2tleVN0b3Jl
OworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgY29tbW9uIHNlc3Npb24gbWFuYWdlbWVudCBjb2Rl
IGFuZCBmb3IgY29tbXVuaWNhdGluZyBtZXNzYWdlcworLy8gZnJvbSAicmVhbCBDRE0iIHN0YXRl
IGNoYW5nZXMgdG8gSlMuCitjbGFzcyBDRE1JbnN0YW5jZVByb3h5IDogcHVibGljIENETUluc3Rh
bmNlIHsKK3B1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgfkNETUluc3RhbmNlUHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBNYWluLXRocmVh
ZCBvbmx5LgorICAgIHZvaWQgc2V0UHJveHkoUmVmPENETVByb3h5PiYmIHByb3h5KQorICAgIHsK
KyAgICAgICAgbV9jZG1Qcm94eSA9IFdURk1vdmUocHJveHkpOworICAgICAgICBtX2NkbVByb3h5
LT5zZXRJbnN0YW5jZSh0aGlzKTsKKyAgICB9CisgICAgdm9pZCBtZXJnZUtleXNGcm9tKGNvbnN0
IEtleVN0b3JlJik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYp
OworCisgICAgLy8gTWVkaWEgcGxheWVyIHF1ZXJ5IG1ldGhvZHMgLSBtYWluIHRocmVhZCBvbmx5
LgorICAgIFJlZlB0cjxDRE1Qcm94eT4gcHJveHkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJl
YWQoKSk7IHJldHVybiBtX2NkbVByb3h5OyB9CisgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0Zv
cktleSgpIGNvbnN0IHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgcmV0dXJuIG1fbnVtRGVjcnlw
dG9yc1dhaXRpbmdGb3JLZXkgPiAwOyB9CisgICAgdm9pZCBzZXRQbGF5ZXIoTWVkaWFQbGF5ZXIq
IHBsYXllcikgeyBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyBtX3BsYXllciA9IHBsYXllcjsgfQor
CisgICAgLy8gUHJveHkgbWV0aG9kcyAtIG11c3QgYmUgdGhyZWFkLXNhZmUuCisgICAgdm9pZCBz
dGFydGVkV2FpdGluZ0ZvcktleSgpOworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgdHJhY2tTZXNzaW9uKGNvbnN0IFJlZlB0cjxDRE1JbnN0
YW5jZVNlc3Npb24+IHNlc3Npb24pIHsgbV9zZXNzaW9ucy5hcHBlbmQoc2Vzc2lvbik7IH0KKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8Q0RNUHJveHk+IG1fY2RtUHJveHk7CisgICAgLy8gRklYTUU6
IFdlYWtQdHIgZm9yIHRoZSBtX3BsYXllcj8gVGhpcyBpcyBhY2Nlc3NlZCBmcm9tIGJhY2tncm91
bmQgYW5kIG1haW4gdGhyZWFkcywgaXQncworICAgIC8vIGNvbmNlcm5pbmcgd2UgY291bGQgYmUg
YWNjZXNzaW5nIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBzaHV0ZG93biBvbiB0aGUgbWFpbi10aHJl
YWQsIGVoPworICAgIC8vIEFzIGEgQ0RNUHJveHksIHdlICoqKnNob3VsZCoqKiBiZSB0dXJuZWQg
b2ZmIGJlZm9yZSB0aGlzIHBvaW50ZXIgZXZlciBnb2VzIGJhZC4KKyAgICBNZWRpYVBsYXllciog
bV9wbGF5ZXIgeyBudWxscHRyIH07IC8vIEZJWE1FOiBNYWluVGhyZWFkPFQ+PworCisgICAgc3Rk
OjphdG9taWM8aW50PiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworICAgIFZlY3RvcjxS
ZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPj4gbV9zZXNzaW9uczsKKworICAgIEtleVN0b3JlIG1f
a2V5U3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDY0
ODVkYjc1ZDdlNzMzOWIxNTYxZGM2ZDU4ZWYyOWM5YjMxMjM1ODAuLjM0Mjc0ZTZhZThiZWM2OWU1
NTllMDRmYTIwMjI0ZGU0YjQzNDM1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
QEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNDMsMzQgKzQ1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDbGVhcktl
eSBDRU5DIFN5c3RlbUlELgotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1j
ZW5jLyNjb21tb24tc3lzdGVtCi1jb25zdCB1aW50OF90IGNsZWFyS2V5Q2VuY1N5c3RlbUlkW10g
PSB7IDB4MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMs
IDB4ZTMsIDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKLWNvbnN0IHVuc2ln
bmVkIGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA9IHNpemVvZihjbGVhcktleUNlbmNTeXN0ZW1J
ZCk7Ci1jb25zdCB1bnNpZ25lZCBrZXlJZFNpemUgPSAxNjsKLQotY2xhc3MgQ2xlYXJLZXlTdGF0
ZSB7Ci0gICAgdXNpbmcgS2V5U3RvcmUgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPENETUluc3Rh
bmNlQ2xlYXJLZXk6OktleT4+OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIENsZWFyS2V5U3RhdGUm
IHNpbmdsZXRvbigpOwotCi0gICAgS2V5U3RvcmUmIGtleXMoKSB7IHJldHVybiBtX2tleXM7IH0K
LQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q2xlYXJLZXlTdGF0
ZT47Ci0gICAgQ2xlYXJLZXlTdGF0ZSgpOwotICAgIEtleVN0b3JlIG1fa2V5czsKLX07Ci0KLUNs
ZWFyS2V5U3RhdGUmIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPENsZWFyS2V5U3RhdGU+IHNfc3RhdGU7Ci0gICAgcmV0dXJuIHNfc3RhdGU7
Ci19Ci0KLUNsZWFyS2V5U3RhdGU6OkNsZWFyS2V5U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHN0YXRp
YyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVy
JiBidWZmZXIpCiB7CiAgICAgLy8gRmFpbCBvbiBsYXJnZSBidWZmZXJzIHdob3NlIHNpemUgZG9l
c24ndCBmaXQgaW50byBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLgpAQCAtODgsNyArNjIsNyBA
QCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNv
bnN0IEpTT046Ok9iamVjdCYgcm9vdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtl
eT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogewogICAg
IC8vIElmIHRoZSAna2V5cycga2V5IGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2JqZWN0LCBwYXJz
ZSB0aGUgSlNPTiBmdXJ0aGVyCiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgJ2xp
Y2Vuc2UnIGZvcm1hdC4KQEAgLTEwMSw3ICs3NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046
CiAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IGRl
Y29kZWRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8S2V5Pj4gZGVjb2RlZEtleXM7CiAgICAgYm9v
bCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5
LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7CkBAIC0xMTYsMTEgKzkw
LDExIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Pj4g
cGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046CiAgICAgICAgICAgICBpZiAoIWtleU9iamVj
dC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkgfHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwg
a2V5VmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOworICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGtleUlERGF0YSwga2V5VmFsdWVEYXRhOwogICAgICAgICAgICAgaWYgKCFXVEY6
OmJhc2U2NFVSTERlY29kZShrZXlJRCwgeyBrZXlJRERhdGEgfSkgfHwgIVdURjo6YmFzZTY0VVJM
RGVjb2RlKGtleVZhbHVlLCB7IGtleVZhbHVlRGF0YSB9KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlY29kZWRLZXlzLmFwcGVuZCh7IENETUluc3RhbmNl
U2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUo
a2V5SUREYXRhKSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoa2V5VmFsdWVEYXRhKSkg
fSk7CisgICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoS2V5OjpjcmVhdGUoQ0RNSW5zdGFu
Y2VTZXNzaW9uOjpLZXlTdGF0dXM6OlVzYWJsZSwgV1RGTW92ZShrZXlJRERhdGEpLCBXVEZNb3Zl
KGtleVZhbHVlRGF0YSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KTsK
ICAgICBpZiAoIXZhbGlkRm9ybWF0KQpAQCAtMTgxLDcgKzE1NSw3IEBAIHN0YXRpYyBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXRE
YXRhKGNvbnN0CiAgICAgd2hpbGUgKHRydWUpIHsKIAogICAgICAgICAvLyBDaGVjayB0aGUgb3Zl
cmZsb3cgSW5pdERhdGEuCi0gICAgICAgIGlmIChpbmRleCArIDEyICsgY2xlYXJLZXlDZW5jU3lz
dGVtSWRTaXplID49IGluaXREYXRhU2l6ZSkKKyAgICAgICAgaWYgKGluZGV4ICsgMTIgKyBDbGVh
cktleTo6Y2VuY1N5c3RlbUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgICAgICByZXR1
cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIHBzc2hTaXplID0gZGF0YVtpbmRleCArIDJdICogMjU2
ICsgZGF0YVtpbmRleCArIDNdOwpAQCAtMTkxLDcgKzE2NSw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8
dW5zaWduZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRh
KGNvbnN0CiAgICAgICAgICAgICByZXR1cm4ga2V5SWRzTWFwOwogCiAgICAgICAgIC8vIDEyID0g
Qk1GRiBib3ggaGVhZGVyICsgRnVsbCBib3ggaGVhZGVyLgotICAgICAgICBpZiAoIW1lbWNtcCgm
ZGF0YVtpbmRleCArIDEyXSwgY2xlYXJLZXlDZW5jU3lzdGVtSWQsIGNsZWFyS2V5Q2VuY1N5c3Rl
bUlkU2l6ZSkpIHsKKyAgICAgICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIENsZWFy
S2V5OjpjZW5jU3lzdGVtSWQsIENsZWFyS2V5OjpjZW5jU3lzdGVtSWRTaXplKSkgewogICAgICAg
ICAgICAgZm91bmRQc3NoID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yMDIsNyArMTc2LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4
dHJhY3RLZXlpZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpZiAoIWZvdW5k
UHNzaCkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAotICAgIGluZGV4ICs9ICgxMiArIGNs
ZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJv
eCBoZWFkZXIpICsgU3lzdGVtSUQgc2l6ZS4KKyAgICBpbmRleCArPSAoMTIgKyBDbGVhcktleTo6
Y2VuY1N5c3RlbUlkU2l6ZSk7IC8vIDEyIChCTUZGIGJveCBoZWFkZXIgKyBGdWxsIGJveCBoZWFk
ZXIpICsgU3lzdGVtSUQgc2l6ZS4KIAogICAgIC8vIENoZWNrIHRoZSBvdmVyZmxvdy4KICAgICBp
ZiAoaW5kZXggKyAzID49IGluaXREYXRhU2l6ZSkKQEAgLTIxMiw3ICsxODYsNyBAQCBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShjb25zdAogICAgIGluZGV4ICs9IDQ7IC8vIEtleUlkc0NvdW50IHNpemUuCiAK
ICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cuCi0gICAgaWYgKChpbmRleCArIChrZXlJZHNNYXAu
Zmlyc3QgKiBrZXlJZFNpemUpKSA+PSBpbml0RGF0YVNpemUpCisgICAgaWYgKChpbmRleCArIChr
ZXlJZHNNYXAuZmlyc3QgKiBDbGVhcktleTo6S2V5SURTaXplSW5CeXRlcykpID49IGluaXREYXRh
U2l6ZSkKICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgIGtleUlkc01hcC5zZWNvbmQg
PSBpbmRleDsgLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBLZXlJZCBpbiBpbml0RGF0YS4K
QEAgLTI1MSw5ICsyMjUsOSBAQCBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gZXh0cmFjdEtleWlk
c0Zyb21DZW5jSW5pdERhdGEoY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RAogICAgIC8vICJraWRz
IgogICAgIC8vIEFuIGFycmF5IG9mIGtleSBJRHMuIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkg
aXMgdGhlIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgb2N0ZXQgc2VxdWVuY2UgY29udGFpbmlu
ZyB0aGUga2V5IElEIHZhbHVlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlJZENv
dW50OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUo
JmRhdGFbaW5kZXhdLCBrZXlJZFNpemUpOworICAgICAgICBTdHJpbmcga2V5SWQgPSBXVEY6OmJh
c2U2NFVSTEVuY29kZSgmZGF0YVtpbmRleF0sIENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVzKTsK
ICAgICAgICAga2V5SWRzQXJyYXktPnB1c2hTdHJpbmcoa2V5SWQpOwotICAgICAgICBpbmRleCAr
PSBrZXlJZFNpemU7CisgICAgICAgIGluZGV4ICs9IENsZWFyS2V5OjpLZXlJRFNpemVJbkJ5dGVz
OwogICAgIH0KIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3ZlKGtleUlkc0Fy
cmF5KSk7CkBAIC00NTYsNDQgKzQzMCw2IEBAIE9wdGlvbmFsPFN0cmluZz4gQ0RNUHJpdmF0ZUNs
ZWFyS2V5OjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkKICAgICBy
ZXR1cm4gc2Vzc2lvbklkOwogfQogCi0vLyBUaGlzIGlzIGZvciB0aHJlYWQtc2FmZXR5IGR1cmlu
ZyBhbiBhcmNoaXRlY3R1cmFsIHNpdHVhdGlvbiB0aGF0IGlzCi0vLyBsZXNzIHRoYW4gaWRlYWwu
IFRoZSBHU3RyZWFtZXIgZGVjcnlwdG9ycyBjdXJyZW50bHkgbmVlZCB0byBpdGVyYXRlCi0vLyBh
bGwga25vd24gc2Vzc2lvbiBrZXlzIHRvIGZpbmQgdGhlIGtleSBkYXRhIGZvciBwcmltaW5nCi0v
LyBHQ3J5cHQuIElkZWFsbHksIGFsbCBkZWNyeXB0aW9uIHdvdWxkIGJlIHRoZSByZXNwb25zaWJp
bGl0eSBvZgotLy8gUHJveHlDRE0gb2JqZWN0IGxpa2UgdGhpcyBvbmUuIFdoYXQgdGhlIGJhY2tn
cm91bmQgR1N0cmVhbWVyCi0vLyB0aHJlYWQgd2FzIGRvaW5nIHdhcyBnZXR0aW5nIGNvcGllcyAo
aS5lLiByZWYoKSdzKSBvZiBTaGFyZWRCdWZmZXJzCi0vLyBjcmVhdGVkIG9uIHRoZSBtYWluLXRo
cmVhZC4gV2l0aCB0aGUgbmV3IHNhZmV0eSBhc3NlcnRpb25zIGluCi0vLyBXZWJLaXQsIHdlIGNh
biBubyBsb25nZXIgZG8gdGhpcy4gSW5zdGVhZCwgY29udmVydCB0aGUgcmVmY291bnRlZAotLy8g
U2hhcmVkQnVmZmVycyBpbnRvIFN0cmluZ3Mgd2hpY2ggY2FuIGJlIHNhZmVseSBjb3BpZWQgYWNy
b3NzCi0vLyB0aHJlYWRzLgotc3RhdGljIFByb3h5Q0RNQ2xlYXJLZXk6OktleSBpc29sYXRlZEtl
eShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGtleSkKLXsKLSAgICByZXR1cm4geyBr
ZXkuc3RhdHVzLCBTdHJpbmcoa2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5z
aXplKCkpLCBTdHJpbmcoa2V5LmtleVZhbHVlRGF0YS0+ZGF0YSgpLCBrZXkua2V5VmFsdWVEYXRh
LT5zaXplKCkpIH07Ci19Ci0KLWNvbnN0IFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IFBy
b3h5Q0RNQ2xlYXJLZXk6Omlzb2xhdGVkS2V5cygpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIHRo
ZSBrZXlzIG9mIGFsbCBzZXNzaW9ucywgbWF5IGJlIGNvcGllZCB0byBiYWNrZ3JvdW5kIHRocmVh
ZHMuCi0gICAgVmVjdG9yPFByb3h5Q0RNQ2xlYXJLZXk6OktleT4gYWxsS2V5cyB7IH07Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7Ci0gICAgc2l6ZV90IGluaXRpYWxD
YXBhY2l0eSA9IDA7Ci0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRlOjpz
aW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpCi0gICAgICAgIGluaXRpYWxDYXBhY2l0eSArPSBr
ZXlWZWN0b3Iuc2l6ZSgpOwotICAgIGFsbEtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0
aWFsQ2FwYWNpdHkpOwotCi0gICAgZm9yIChhdXRvJiBrZXlWZWN0b3IgOiBDbGVhcktleVN0YXRl
OjpzaW5nbGV0b24oKS5rZXlzKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlWZWN0b3IpCi0gICAgICAgICAgICBhbGxLZXlzLnVuY2hlY2tlZEFwcGVuZChpc29sYXRl
ZEtleShrZXkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsS2V5czsKLX0KLQotQ0RNSW5zdGFu
Y2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSgpCi0gICAgOiBtX3Byb3h5Q0RNKGFkb3B0
UmVmKCpuZXcgUHJveHlDRE1DbGVhcktleSgpKSkKLXsKLX0KLQogQ0RNSW5zdGFuY2VDbGVhcktl
eTo6fkNETUluc3RhbmNlQ2xlYXJLZXkoKSA9IGRlZmF1bHQ7CiAKIENETUluc3RhbmNlOjpTdWNj
ZXNzVmFsdWUgQ0RNSW5zdGFuY2VDbGVhcktleTo6aW5pdGlhbGl6ZVdpdGhDb25maWd1cmF0aW9u
KGNvbnN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24mKQpAQCAtNTM1LDM2ICs0NzEsOSBAQCBj
b25zdCBTdHJpbmcmIENETUluc3RhbmNlQ2xlYXJLZXk6OmtleVN5c3RlbSgpIGNvbnN0CiAKIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Np
b24oKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXkoKSk7Ci19Ci0KLVN0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5SUREYXRhLT50b0hl
eFN0cmluZygpLCAiXSIpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5Ojpr
ZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtl
eVZhbHVlRGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0IENETUluc3RhbmNlQ2xlYXJL
ZXk6OktleSYgazIpCi17Ci0gICAgQVNTRVJUKGsxLmtleUlERGF0YSk7Ci0gICAgQVNTRVJUKGsy
LmtleUlERGF0YSk7Ci0KLSAgICByZXR1cm4gKmsxLmtleUlERGF0YSA9PSAqazIua2V5SUREYXRh
OwotfQotCi1ib29sIG9wZXJhdG9yPChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsx
LCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5r
ZXlJRERhdGEpOwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgaWYgKGsxLmtleUlE
RGF0YS0+c2l6ZSgpICE9IGsyLmtleUlERGF0YS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4gazEu
a2V5SUREYXRhLT5zaXplKCkgPCBrMi5rZXlJRERhdGEtPnNpemUoKTsKLQotICAgIHJldHVybiBt
ZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsyLmtleUlERGF0YS0+ZGF0YSgpLCBrMS5rZXlJ
RERhdGEtPnNpemUoKSk7CisgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gbmV3U2Vzc2lv
biA9IGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgqdGhpcykpOworICAg
IHRyYWNrU2Vzc2lvbihuZXdTZXNzaW9uKTsKKyAgICByZXR1cm4gbmV3U2Vzc2lvbjsKIH0KIAog
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBp
bml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC01NzIsNiArNDgxLDggQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5
cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBzdGF0aWMgdWludDMyX3Qgc19zZXNzaW9uSWRW
YWx1ZSA9IDA7CiAgICAgKytzX3Nlc3Npb25JZFZhbHVlOwogCisgICAgbV9zZXNzaW9uSUQgPSBT
dHJpbmc6Om51bWJlcihzX3Nlc3Npb25JZFZhbHVlKTsKKwogICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShpbml0RGF0YVR5cGUsICJjZW5jIikpCiAgICAgICAgIGluaXREYXRh
ID0gZXh0cmFjdEtleWlkc0Zyb21DZW5jSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCkBAIC01
NzksMTggKzQ5MCwyMSBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0
TGljZW5zZShMaWNlbnNlVHlwZSwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBpbml0RGF0
YSA9IGV4dHJhY3RLZXlJZEZyb21XZWJNSW5pdERhdGEoaW5pdERhdGEuZ2V0KCkpOwogCiAgICAg
Y2FsbE9uTWFpblRocmVhZCgKLSAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERh
dGEpLCBzZXNzaW9uSWRWYWx1ZSA9IHNfc2Vzc2lvbklkVmFsdWVdKCkgbXV0YWJsZSB7CisgICAg
ICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpcywgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwgU3RyaW5nOjpudW1iZXIoc2Vz
c2lvbklkVmFsdWUpLCBmYWxzZSwgU3VjY2VlZGVkKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoaW5pdERhdGEpLCBtX3Nlc3Npb25JRCwgZmFsc2UsIFN1Y2NlZWRlZCk7CiAgICAgICAg
IH0pOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNl
KGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVy
JiByZXNwb25zZSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8g
VXNlIGEgaGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNo
LCBhdm9pZGluZwotICAgIC8vIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgor
I2lmIExPR19ESVNBQkxFRCB8fCBSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIC8vIFdlIG9ubHkg
dXNlIHRoZSBzZXNpb24gSUQgZm9yIGRlYnVnIGxvZ2dpbmcuIFRoZSB2ZXJib3NlIHByZXByb2Nl
c3NvciBjaGVja3MgYXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgTWFjIHBvcnQgaGFzIC1XZXJyb3Ig
LVd1bnVzZWQtcGFyYW1ldGVyLgorICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlm
CiAgICAgYXV0byBkaXNwYXRjaENhbGxiYWNrID0KICAgICAgICAgW3RoaXMsICZjYWxsYmFja10o
Ym9vbCBzZXNzaW9uV2FzQ2xvc2VkLCBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgY2hhbmdl
ZEtleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZWVkZWQpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoCkBAIC02MDQsNTIgKzUxOCwyMyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFy
S2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBMaWNlbnNlVAogCiAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNwb25zZSk7
CiAgICAgaWYgKCFyb290KSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNl
c3Npb24gJXMgdXBkYXRlIHBheWxvYWQgd2FzIG5vdCB2YWxpZCBKU09OIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyB3aGljaCBjdXJyZW50bHkgY29u
dGFpbnMgJXUga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpLCBtX2tleVN0b3JlLm51bUtl
eXMoKSk7CiAKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgq
cm9vdCkpIHsKLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIHRhcmdldCBWZWN0b3Igb2YgS2V5IG9i
amVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMg
c3RhdGUgbWFuYWdlbWVudCBjb2RlLgotICAgICAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVu
c3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpL
ZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgIGJvb2wga2V5c0NoYW5nZWQg
PSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7
Ci0gICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdp
dGggSUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtl
eVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAgWyZkZWNv
ZGVkS2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5Owot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRjaGluZ0tleUlE
ICE9IGtleVZlY3Rvci5lbmQoKSkgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
bGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlXaXRoTWF0Y2hp
bmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRL
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVw
ZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBhcmUgZGlmZmVyZW50Iik7Ci0gICAgICAgICAgICAg
ICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IFdURk1vdmUoZGVjb2RlZEtleSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVh
cktleSAtIFRoaXMgaXMgYSBuZXcga2V5Iik7Ci0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFw
cGVuZChXVEZNb3ZlKGRlY29kZWRLZXkpKTsKLSAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBrZXlzQ2hhbmdl
ZCA9IG1fa2V5U3RvcmUuYWRkS2V5cyhXVEZNb3ZlKCpkZWNvZGVkS2V5cykpOwogCi0gICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMi
LCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0g
c2Vzc2lvbiAlcyBoYXMgJXUga2V5cyBhZnRlciB1cGRhdGUoKSIsIHNlc3Npb25JZC51dGY4KCku
ZGF0YSgpLCBtX2tleVN0b3JlLm51bUtleXMoKSk7CiAKICAgICAgICAgT3B0aW9uYWw8S2V5U3Rh
dHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAgICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAg
ICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCi0gICAgICAgICAgICBzdGQ6OnNvcnQoa2V5VmVj
dG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7Ci0KLSAgICAgICAgICAgIEtleVN0YXR1c1Zl
Y3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNo
ZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtl
eS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0KLSAgICAgICAgICAgIGNoYW5nZWRLZXlzID0g
V1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpOworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENs
ZWFyS2V5IC0gc2Vzc2lvbiAlcyBoYXMgY2hhbmdlZCBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgbV9wYXJlbnRJbnN0YW5jZS5tZXJnZUtleXNGcm9tKG1fa2V5
U3RvcmUpOworICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBtX2tleVN0b3JlLmNvbnZlcnRUb0pT
S2V5U3RhdHVzVmVjdG9yKCk7CiAgICAgICAgIH0KIAogICAgICAgICBkaXNwYXRjaENhbGxiYWNr
KGZhbHNlLCBXVEZNb3ZlKGNoYW5nZWRLZXlzKSwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwpA
QCAtNjU3LDQ3ICs1NDIsMzEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICB9CiAKICAg
ICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCgqcm9vdCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5mb3JtYXRpb24gYW5kIHVz
ZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uSWQuCi0gICAgICAgIENs
ZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vzc2lvbklkKTsKKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyByZWxlYXNlIGFja25vd2xl
ZGdlZCwgY2xlYXJpbmcgYWxsIGtub3duIGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGFyZW50SW5zdGFuY2UucmVtb3ZlQWxsS2V5c0Zyb20obV9rZXlTdG9yZSk7
CisgICAgICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxsS2V5cygpOwogICAgICAgICBkaXNwYXRjaENh
bGxiYWNrKHRydWUsIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpTdWNjZWVkZWQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQmFpbCBpbiBjYXNlIG5vIGZvcm1hdCB3YXMg
cmVjb2duaXplZC4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVw
ZGF0ZSBwYXlsb2FkIHdhcyBhbiB1bnJlY29nbml6ZWQgZm9ybWF0Iiwgc2Vzc2lvbklkLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgU3Vj
Y2Vzc1ZhbHVlOjpGYWlsZWQpOwogfQogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5
Ojpsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwgY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIGNvbnN0
IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAvLyBVc2Ug
YSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gsIGF2
b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgotICAgIGF1dG8gZGlz
cGF0Y2hDYWxsYmFjayA9Ci0gICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKE9wdGlvbmFsPEtleVN0
YXR1c1ZlY3Rvcj4mJiBleGlzdGluZ0tleXMsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzLCBTZXNzaW9u
TG9hZEZhaWx1cmUgbG9hZEZhaWx1cmUpIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
Ci0gICAgICAgICAgICAgICAgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGlzdGluZ0tleXMgPSBXVEZNb3ZlKGV4aXN0aW5nS2V5
cyksIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXhpc3RpbmdLZXlzKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIHN1Y2Nlc3MsIGxvYWRGYWlsdXJlKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfTsKKyNpZmRlZiBOREVCVUcKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lv
bklkKTsKKyNlbmRpZgogCi0gICAgLy8gQ29uc3RydWN0IHRoZSBLZXlTdGF0dXNWZWN0b3Igb2Jq
ZWN0LCByZXByZXNlbnRpbmcgYWxsIHRoZSBrbm93biBrZXlzIGZvciB0aGlzIHNlc3Npb24uCi0g
ICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICB7Ci0gICAgICAgIGF1dG8m
IGtleXMgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCk7Ci0gICAgICAgIGF1dG8g
aXQgPSBrZXlzLmZpbmQoc2Vzc2lvbklkKTsKLSAgICAgICAgaWYgKGl0ID09IGtleXMuZW5kKCkp
IHsKLSAgICAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGOjpudWxsb3B0LCBGYWlsZWQsIFNl
c3Npb25Mb2FkRmFpbHVyZTo6Tm9TZXNzaW9uRGF0YSk7CisgICAgQVNTRVJUKHNlc3Npb25JZCA9
PSBtX3Nlc3Npb25JRCk7CisgICAgS2V5U3RhdHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvciA9IG1f
a2V5U3RvcmUuY29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IoKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgJmtleVN0YXR1c1ZlY3Rvcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8mIGtl
eVZlY3RvciA9IGl0LT52YWx1ZTsKLSAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChz
dGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwg
a2V5LnN0YXR1cyB9KTsKLSAgICB9CiAKLSAgICBkaXNwYXRjaENhbGxiYWNrKFdURk1vdmUoa2V5
U3RhdHVzVmVjdG9yKSwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBTdWNjZWVkZWQsIFNlc3Npb25Mb2FkRmFpbHVyZTo6Tm9uZSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OmNsb3NlU2Vzc2lvbihjb25z
dCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNzEzLDcgKzU4
MiwxMiBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24oY29u
c3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhYwogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGlj
ZW5zZVR5cGUsIFJlbW92ZVNlc3Npb25EYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBVc2UgYSBoZWxwZXIgZnVuY3RvciB0aGF0IHNjaGVkdWxlcyB0aGUgY2FsbGJhY2sgZGlzcGF0
Y2gsIGF2b2lkaW5nIGR1cGxpY2F0ZWQgY2FsbE9uTWFpblRocmVhZCgpIGNhbGxzLgorI2lmZGVm
IE5ERUJVRworICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uSWQpOworI2VuZGlmCisKKyAgICBBU1NF
UlQoc2Vzc2lvbklkID09IG1fc2Vzc2lvbklEKTsKKwogICAgIGF1dG8gZGlzcGF0Y2hDYWxsYmFj
ayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKEtleVN0YXR1c1ZlY3RvciYmIGtleVN0YXR1
c1ZlY3RvciwgT3B0aW9uYWw8UmVmPFNoYXJlZEJ1ZmZlcj4+JiYgbWVzc2FnZSwgU3VjY2Vzc1Zh
bHVlIHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoCkBAIC03MjcsMzUg
KzYwMSwxNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9u
RGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZQogCiAgICAgLy8gQ29uc3RydWN0IHRo
ZSBLZXlTdGF0dXNWZWN0b3Igb2JqZWN0LCByZXByZXNlbnRpbmcgcmVsZWFzZWQga2V5cywgYW5k
IHRoZSBtZXNzYWdlIGluIHRoZQogICAgIC8vICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1hdC4KLSAg
ICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yOworICAgIEtleVN0YXR1c1ZlY3RvciBr
ZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmFsbEtleXNBc1JlbGVhc2VkKCk7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbWVzc2FnZTsKICAgICB7Ci0gICAgICAgIC8vIFJldHJpZXZlIGlu
Zm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbiBJRCwgYmFpbGluZyBpZiBub25lIGlzIGZv
dW5kLgotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5
cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlm
IChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaENhbGxiYWNrKEtleVN0
YXR1c1ZlY3RvciB7IH0sIFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0cmlldmUgdGhlIEtl
eSB2ZWN0b3IsIGNvbnRhaW5pbmcgYWxsIHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb24sIGFuZAot
ICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUga2V5IG1hcCBlbnRyeSBmb3IgdGhpcyBzZXNzaW9u
LgotICAgICAgICBhdXRvIGtleVZlY3RvciA9IFdURk1vdmUoaXQtPnZhbHVlKTsKLSAgICAgICAg
a2V5cy5yZW1vdmUoaXQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVj
dG9yIG9iamVjdCwgcGFpcmluZyBrZXkgSURzIHdpdGggdGhlICdyZWxlYXNlZCcgc3RhdHVzLgot
ICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlWZWN0b3Iu
c2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0b3IpCi0gICAgICAgICAg
ICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVm
ZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBLZXlTdGF0dXM6OlJlbGVhc2VkIH0p
OwotCiAgICAgICAgIC8vIENvbnN0cnVjdCBKU09OIHRoYXQgcmVwcmVzZW50cyB0aGUgJ2xpY2Vu
c2UgcmVsZWFzZScgZm9ybWF0LCBjcmVhdGluZyBhICdraWRzJyBhcnJheQogICAgICAgICAvLyBv
ZiBiYXNlNjRVUkwtZW5jb2RlZCBrZXkgSURzIGZvciBhbGwga2V5cyB0aGF0IHdlcmUgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4KICAgICAgICAgYXV0byByb290T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBhcnJheSA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVj
dG9yKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGtleS5rZXlJRERhdGEtPnNpemUoKSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwotICAgICAgICAgICAgICAgIGFy
cmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS5rZXlJRERhdGEtPmRhdGEo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5rZXlJRERhdGEtPnNpemUoKSkpKTsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5IDogbV9rZXlTdG9yZSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChrZXktPmlkKCkuc2l6ZSgpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSk7CisgICAgICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoV1RGOjpiYXNl
NjRVUkxFbmNvZGUoa2V5LT5pZCgpLmRhdGEoKSwga2V5LT5pZCgpLnNpemUoKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcm9vdE9iamVjdC0+c2V0QXJyYXkoImtpZHMiLCBXVEZNb3Zl
KGFycmF5KSk7CiAgICAgICAgIH0KQEAgLTc2Niw2ICs2MjIsNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5OjpyZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCwgTGljZQogICAgICAgICBtZXNzYWdlID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWVzc2FnZUNT
dHJpbmcuZGF0YSgpLCBtZXNzYWdlQ1N0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCisgICAgbV9r
ZXlTdG9yZS5yZW1vdmVBbGxLZXlzKCk7CiAgICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtl
eVN0YXR1c1ZlY3RvciksIFJlZjxTaGFyZWRCdWZmZXI+KCptZXNzYWdlKSwgU3VjY2Vzc1ZhbHVl
OjpTdWNjZWVkZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA4NWIzMTli
MWEzOGMxMjE2OTkxOTc1YjgwMTlhZDJiMTZiMzZjMTQ3Li42NzA0YWU3YTk1N2YzMmZlMWY4NDk4
M2VkM2IzZjY1MDJhNTMxNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAgLTMxLDE0
ICszMSwyOCBAQAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAKICNpbmNsdWRlICJDRE1G
YWN0b3J5LmgiCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKICNpbmNsdWRlICJDRE1JbnN0YW5j
ZVNlc3Npb24uaCIKICNpbmNsdWRlICJDRE1Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ0RNUHJveHku
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBDbGVhcktleSB7CisKKy8vIENsZWFy
S2V5IENFTkMgU3lzdGVtSUQuCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRh
LWNlbmMvI2NvbW1vbi1zeXN0ZW0KK2NvbnN0IHVpbnQ4X3QgY2VuY1N5c3RlbUlkW10gPSB7IDB4
MTAsIDB4NzcsIDB4ZWYsIDB4ZWMsIDB4YzAsIDB4YjIsIDB4NGQsIDB4MDIsIDB4YWMsIDB4ZTMs
IDB4M2MsIDB4MWUsIDB4NTIsIDB4ZTIsIDB4ZmIsIDB4NGIgfTsKK2NvbnN0IHVuc2lnbmVkIGNl
bmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2VuY1N5c3RlbUlkKTsKK2VudW0geworICAgIEFFUzEy
OENUUkJsb2NrU2l6ZUluQnl0ZXMgPSAxNiwKKyAgICBLZXlJRFNpemVJbkJ5dGVzID0gMTYsCisg
ICAgSVZTaXplSW5CeXRlcyA9IDE2LAorfTsKKworfSAvLyBuYW1lc3BhY2UgQ2xlYXJLZXkKKwog
Y2xhc3MgQ0RNRmFjdG9yeUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETUZhY3RvcnkgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNzcsMjcgKzkxLDEyIEBAIHB1
YmxpYzoKICAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IGZpbmFsOwogfTsKIAotY2xhc3MgUHJveHlDRE1DbGVhcktleSBmaW5hbCA6IHB1
YmxpYyBQcm94eUNETSB7CitjbGFzcyBDRE1JbnN0YW5jZUNsZWFyS2V5IGZpbmFsIDogcHVibGlj
IENETUluc3RhbmNlUHJveHksIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFy
S2V5PiB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgU3RyaW5nIGtleUlERGF0YTsKLSAgICAg
ICAgU3RyaW5nIGtleVZhbHVlRGF0YTsKLSAgICB9OwotCi0gICAgdmlydHVhbCB+UHJveHlDRE1D
bGVhcktleSgpID0gZGVmYXVsdDsKLSAgICBjb25zdCBWZWN0b3I8S2V5PiBpc29sYXRlZEtleXMo
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBMb2NrIG1fa2V5c011dGV4OwotfTsKLQot
Y2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZSwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPENETUluc3RhbmNlQ2xlYXJLZXk+IHsKLXB1YmxpYzoKLSAgICBD
RE1JbnN0YW5jZUNsZWFyS2V5KCk7CiAgICAgdmlydHVhbCB+Q0RNSW5zdGFuY2VDbGVhcktleSgp
OwogCisgICAgLy8gQ0RNSW5zdGFuY2UKICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbGVtZW50
YXRpb25UeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW1wbGVtZW50YXRpb25UeXBlOjpDbGVh
cktleTsgfQotCiAgICAgU3VjY2Vzc1ZhbHVlIGluaXRpYWxpemVXaXRoQ29uZmlndXJhdGlvbihj
b25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVl
IHNldERpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2VkKGJvb2wpIGZpbmFsOwogICAgIFN1Y2Nl
c3NWYWx1ZSBzZXRQZXJzaXN0ZW50U3RhdGVBbGxvd2VkKGJvb2wpIGZpbmFsOwpAQCAtMTA1LDQ3
ICsxMDQsMjIgQEAgcHVibGljOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29u
c3QgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
IGZpbmFsOwotCi0gICAgc3RydWN0IEtleSB7Ci0gICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6
S2V5U3RhdHVzIHN0YXR1czsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRh
OwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7Ci0KLSAgICAgICAg
U3RyaW5nIGtleUlEQXNTdHJpbmcoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNT
dHJpbmcoKSBjb25zdDsKLQotICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkg
Jm90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKLSAg
ICAgICAgICAgIEFTU0VSVChvdGhlci5rZXlWYWx1ZURhdGEpOwotICAgICAgICAgICAgcmV0dXJu
ICprZXlWYWx1ZURhdGEgPT0gKm90aGVyLmtleVZhbHVlRGF0YTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFR3byBrZXlzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9y
aW5nIGtleSB2YWx1ZSBhbmQgc3RhdHVzLgotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpOwotICAgICAgICAvLyBLZXkncyBhcmUgb3Jk
ZXJlZCBieSB0aGVpciBJRHMsIGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCi0gICAg
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsK
LQotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpIHsgcmV0dXJuICEob3BlcmF0b3I9PShrMSwgazIpKTsgfQotICAgICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9w
ZXJhdG9yPT0oazEsIGsyKSAmJiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAh
b3BlcmF0b3I+KGsxLCBrMik7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0K
LSAgICB9OwotCi0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcHJveHlDRE07IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UHJveHlDRE0+IG1f
cHJveHlDRE07CiB9OwogCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSBmaW5hbCA6
IHB1YmxpYyBDRE1JbnN0YW5jZVNlc3Npb24sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleT4gewogcHVibGljOgorICAgIENETUluc3RhbmNlU2Vzc2lvbkNs
ZWFyS2V5KENETUluc3RhbmNlQ2xlYXJLZXkmIHBhcmVudCkKKyAgICAgICAgOiBtX3BhcmVudElu
c3RhbmNlKHBhcmVudCkgeyB9CiAgICAgdm9pZCByZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwg
Y29uc3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXRE
YXRhLCBMaWNlbnNlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVMaWNlbnNlKGNv
bnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBjb25zdCBTaGFyZWRCdWZmZXImLCBMaWNlbnNlVXBk
YXRlQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBsb2FkU2Vzc2lvbihMaWNlbnNlVHlwZSwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgTG9hZFNlc3Npb25DYWxsYmFjayYmKSBmaW5h
bDsKICAgICB2b2lkIGNsb3NlU2Vzc2lvbihjb25zdCBTdHJpbmcmLCBDbG9zZVNlc3Npb25DYWxs
YmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZVNlc3Npb25EYXRhKGNvbnN0IFN0cmluZyYs
IExpY2Vuc2VUeXBlLCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZv
aWQgc3RvcmVSZWNvcmRPZktleVVzYWdlKGNvbnN0IFN0cmluZyYpIGZpbmFsOworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9zZXNzaW9uSUQ7CisgICAgQ0RNSW5zdGFuY2VDbGVhcktleSYgbV9wYXJl
bnRJbnN0YW5jZTsKKyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKaW5kZXggNDc3MmZjYjMyMzZkMzkwMjk1
MzRjNDZmYjRmMTAyOTk3ODNlNmNiNi4uYjExZjcxYTliNWUzOGJmNjk4YjEzOTQ5ZGRkZTg2ZjNk
ZDk5NGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCkBAIC04MCw3ICs4MCw2IEBAIHB1Ymxp
YzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U2VydmVyQ2VydGlmaWNhdGUoUmVmPFNoYXJlZEJ1ZmZl
cj4mJikgZmluYWw7CiAgICAgU3VjY2Vzc1ZhbHVlIHNldFN0b3JhZ2VEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJikgZmluYWw7CiAgICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vz
c2lvbigpIGZpbmFsOwotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNv
bnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCmluZGV4IGExMmVmNGY2ZGJhNmYwMTVlNzYxNTFmMTQ3Y2M2YzA3OWU2MmRhN2UuLjU0
NWFjYzc1YzAxN2RiOWQyYTc0OGM5OWQ0NGIxYTYzMjBlN2EzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAK
ICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiQ0RNUHJveHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYktpdENvbW1v
bkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCIKQEAgLTE3ODgsNiArMTc4OSw1MCBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCog
cGlwZWxpbmUpCiAgICAgfSwgdGhpcywgbnVsbHB0cik7CiB9CiAKK0luaXREYXRhIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShH
c3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisg
ICAgSW5pdERhdGEgaW5pdERhdGE7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9w
cm90ZWN0aW9uTXV0ZXgpOworICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMobWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxh
YmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgZm9yIChh
dXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAg
R3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9w
cm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIp
OworCisgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9
KTsKKyAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9T
RVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbml0
RGF0YTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRGb3JDRE1B
dHRhY2htZW50KCkKK3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChwaXBlbGluZSgpLCAiY2FuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkIHdhaXRp
bmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworCisgICAgYm9vbCBkaWRDRE1B
dHRhY2ggPSBmYWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9
IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKKyAgICAgICAgZGlkQ0RNQXR0YWNoID0g
bV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRhY2htZW50TXV0ZXgsIDRf
cywgW3RoaXNdKCkgeworICAgICAgICAgICAgcmV0dXJuIGlzQ0RNQXR0YWNoZWQoKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZENETUF0dGFjaDsKK30KKwogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiB7CiAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NB
R0VfU1RSRUFNX0NPTExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CkBAIC0xODIzLDQx
ICsxODY4LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNN
ZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQogICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0
aW9uLXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAg
ICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5
c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5n
IGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2Ui
KTsKLQotICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rp
b25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAg
ICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9y
cyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJv
dGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAg
ICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0
cjsKLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlT
eXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBw
ZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVk
UHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRl
cmVkKFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0KLSAgICAgICAgYm9vbCBkaWRD
RE1BdHRhY2ggPSBmYWxzZTsKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBjZG1BdHRhY2ht
ZW50TG9ja2VyID0gaG9sZExvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwotICAgICAgICAgICAg
ZGlkQ0RNQXR0YWNoID0gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uLndhaXRGb3IobV9jZG1BdHRh
Y2htZW50TXV0ZXgsIDRfcywgW3RoaXNdKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpc0NE
TUF0dGFjaGVkKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
aWRDRE1BdHRhY2ggJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2RtSW5zdGFuY2Ut
PmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgeworICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNv
dW50ZXJlZChwYXJzZUluaXREYXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKG1lc3NhZ2UpKTsKKyAg
ICAgICAgYm9vbCBpc0NETUF0dGFjaGVkID0gd2FpdEZvckNETUF0dGFjaG1lbnQoKTsKKyAgICAg
ICAgaWYgKGlzQ0RNQXR0YWNoZWQgJiYgIWlzUGxheWVyU2h1dHRpbmdEb3duKCkgJiYgIW1fY2Rt
SW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgY2hh
ciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lz
dGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKICAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRp
bnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVt
KCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JD
X05BTUUobWVzc2FnZSkpOwogCkBAIC0xODY1LDEwICsxODc4LDExIEBAIGJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQogICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRl
eHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlkIiwgR19U
WVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7CiAgICAgICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVz
c2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1Rf
V0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgR1NU
X1dBUk5JTkdfT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENETSBmYWlsZWQsIG5v
IENETSBhdmFpbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCkBAIC0yMTk4LDE5ICsyMjEyLDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICAgICAgICAgIHByb2Nlc3NNcGVnVHNTZWN0aW9uKHNlY3Rpb24pOwogICAgICAg
ICAgICAgZ3N0X21wZWd0c19zZWN0aW9uX3VucmVmKHNlY3Rpb24pOwogICAgICAgICB9Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgICAgICBlbHNlIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS13YWl0aW5nLWZvci1rZXkiKSkgewotICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLXdhaXRpbmctZm9yLWtl
eSBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAg
ICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KHRydWUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZSBkZWNyeXB0b3JzIHNob3VsZCBiZSBhYmxlIHRvIGF0dGVtcHQgdG8gZGVjcnlwdCBhZnRlciBi
ZWluZyBjcmVhdGVkIGFuZCBsaW5rZWQgaW4gYSBwaXBlbGluZSBidXQgY3VycmVudGx5IHRoZXkg
YXJlIG5vdCBhbmQgY3VycmVudAotICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlIGRvZXMgbm90
IG1ha2UgdGhpcyB2ZXJ5IGVhc3kuIEZvcnR1bmF0ZWx5LCB0aGUgYXJjaCB3aWxsIGNoYW5nZSBz
b29uIGFuZCBpdCBkb2VzIG5vdCBwYXkgb2ZmIHRvIGZpeCB0aGlzIG5vdyB3aXRoIHNvbWV0aGlu
ZyB0aGF0IGNvdWxkIGJlCi0gICAgICAgICAgICAvLyBtb3JlIGNvbnZvbHV0ZWQuIEluIHRoZSBt
ZWFudGltZSwgZm9yY2UgYXR0ZW1wdCB0byBkZWNyeXB0IHdoZW4gdGhleSBnZXQgYmxvY2tlZC4K
LSAgICAgICAgICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgICAg
ICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZHJtLWtleS1y
ZWNlaXZlZCIpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJk
cm0ta2V5LXJlY2VpdmVkIG1lc3NhZ2UgZnJvbSAlcyIsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIHNldFdhaXRpbmdGb3JLZXkoZmFsc2UpOwotICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJodHRwLWhlYWRlcnMiKSkgewogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiUHJvY2Vzc2luZyBIVFRQIGhlYWRlcnM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJ1
Y3R1cmUpOwpAQCAtMzcyOCwxNCArMzcyOSwxNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOworICAg
IG1fY2RtSW5zdGFuY2UgPSByZWludGVycHJldF9jYXN0PENETUluc3RhbmNlUHJveHkqPigmaW5z
dGFuY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2RtSW5zdGFuY2UpOworICAgIG1fY2RtSW5z
dGFuY2UtPnNldFBsYXllcihtX3BsYXllcik7CisgICAgbV9jZG1JbnN0YW5jZS0+c2V0UHJveHko
YWRvcHRSZWYoKm5ldyBDRE1Qcm94eUNsZWFyS2V5KSk7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
Z3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBHc3RTdHJ1Y3R1
cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29u
dGV4dC5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNk
bS1pbnN0YW5jZSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdl
dCgpLCBudWxscHRyKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAi
Y2RtLXByb3h5IiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCks
IG51bGxwdHIpOwogICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNvbnRl
eHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBh
cyBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHkoKS5nZXQoKSk7CiAKICAgICBMb2NrSG9s
ZGVyIGxvY2sobV9jZG1BdHRhY2htZW50TXV0ZXgpOwogICAgIC8vIFdlIG11c3Qgbm90aWZ5IGFs
bCB3YWl0ZXJzLCBzaW5jZSBzZXZlcmFsIGRlbXV4ZXJzIGNhbiBiZSBzaW11bHRhbmVvdXNseSB3
YWl0aW5nIGZvciBhIENETS4KQEAgLTM3NTcsNyArMzc2MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5j
ZSkKICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcgQ0RN
IGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdldCgp
KTsKICAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKIAotICAgIEdSZWZQdHI8R3N0Q29udGV4
dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2Ui
LCBGQUxTRSkpOworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihn
c3RfY29udGV4dF9uZXcoImRybS1jZG0tcHJveHkiLCBGQUxTRSkpOwogICAgIGdzdF9lbGVtZW50
X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgp
KTsKIH0KIApAQCAtMzc5MCw1MSArMzc5NCwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKICAgICBpbml0
aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0p
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0Zvcktl
eShib29sIGlzV2FpdGluZ0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMg
ZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3Jl
IGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgi
aXNXYWl0aW5nRm9yS2V5ICVzLCBtX2lzV2FpdGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGlu
Zyhpc1dhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdGb3JLZXkpKTsK
LSAgICBpZiAoaXNXYWl0aW5nRm9yS2V5ID09IG1faXNXYWl0aW5nRm9yS2V5IHx8ICghaXNXYWl0
aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faXNXYWl0aW5nRm9yS2V5ID0gaXNXYWl0aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygi
d2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1dhaXRpbmdG
b3JLZXkpKTsKLSAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewot
ICAgIGlmICghbV9waXBlbGluZSkKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgIW1fY2RtSW5zdGFu
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdz
dF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDAp
OwotCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVy
eSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rf
c3RydWN0dXJlX25ld19lbXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwot
ICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdz
dF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAg
R1NUX1RSQUNFKCJxdWVyeSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3Vs
dCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChz
dGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGlu
IHRoZSBwaXBlbGluZSBpcyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxp
bmUgaXMgc2V0IHVwIGFuZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0
IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0
SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSkpKTsKLSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9y
X2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdw
b2ludGVyIGRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBl
bGVtZW50ID0gR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAg
ICAgICAgICBHc3RRdWVyeSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICFXRUJLSVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3Rf
ZWxlbWVudF9xdWVyeShlbGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBx
dWVyeS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJB
VE9SX1JFU1lOQykKLSAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9y
LmdldCgpKTsKLSAgICAgICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9S
X1JFU1lOQyk7Ci0gICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJS
T1IpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3Ii
KTsKLSAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwot
ICAgICAgICBHU1RfVFJBQ0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJh
dG9yUmVzdWx0LCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gbV9jZG1JbnN0YW5jZS0+aXNXYWl0aW5nRm9yS2V5KCk7CiB9
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CmluZGV4IGIyYmI1NDFhMzI2YWU5YmVmYTViMDM3NzljMGQxMTA2MzVkNzllMTQuLjUyMWIyMGQx
MWNjOGRkOTRiZTI4NGQ3NDY5OWNkMjcxN2I0ZTA1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTc2LDYgKzc2LDEwIEBAIHR5cGVkZWYgc3Ry
dWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAjZW5kaWYKICNlbmRpZgog
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgorI2Vu
ZGlmCisKIHR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwog
dHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87CiB0eXBlZGVmIHN0cnVj
dCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKQEAgLTM3MSw3ICszNzUsNyBAQCBwcm90ZWN0
ZWQ6CiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBMb2NrIG1fY2RtQXR0YWNobWVu
dE11dGV4OwogICAgIENvbmRpdGlvbiBtX2NkbUF0dGFjaG1lbnRDb25kaXRpb247Ci0gICAgUmVm
UHRyPGNvbnN0IENETUluc3RhbmNlPiBtX2NkbUluc3RhbmNlOworICAgIFJlZlB0cjxDRE1JbnN0
YW5jZVByb3h5PiBtX2NkbUluc3RhbmNlOwogCiAgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsg
Ly8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgogICAgIEhhc2hT
ZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CkBAIC00NTAsNyArNDU0LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGlzQ0RNQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2Nk
bUluc3RhbmNlOyB9CiAgICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2Uo
KTsKICAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwot
ICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29sKTsKKyAgICBJbml0RGF0YSBwYXJzZUluaXRE
YXRhRnJvbVByb3RlY3Rpb25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICBib29sIHdhaXRGb3JD
RE1BdHRhY2htZW50KCk7CiAjZW5kaWYKIAogICAgIEF0b21pYzxib29sPiBtX2lzUGxheWVyU2h1
dHRpbmdEb3duOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODA0MDQ1Mjg3YjM5NmE4NTEyODI3ZmM4Y2JhODQ3YTI0MWE1NDQyYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
UHJveHlDbGVhcktleS5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNETVByb3h5Q2xlYXJLZXkuaCIKKworI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVPcmRl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBib29s
IHJlYWRVSW50MzIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgc2l6
ZV90JiBvZmZzZXQsIHVpbnQzMl90JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKG9mZnNldCwg
b2Zmc2V0IDw9IGJ1ZmZlclNpemUpOworICAgIGlmIChidWZmZXJTaXplIC0gb2Zmc2V0IDwgc2l6
ZW9mKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBudG9obCgq
cmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDMyX3QqPihidWZmZXIgKyBvZmZzZXQpKTsK
KyAgICBvZmZzZXQgKz0gc2l6ZW9mKHZhbHVlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCByZWFkVUludDE2KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZl
clNpemUsIHNpemVfdCYgb2Zmc2V0LCB1aW50MTZfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FS
RyhvZmZzZXQsIG9mZnNldCA8PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9m
ZnNldCA8IHNpemVvZih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVl
ID0gbnRvaHMoKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQxNl90Kj4oYnVmZmVyICsg
b2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2Uge30KKworQ0RNUHJveHlDbGVhcktleTo6fkNETVByb3h5
Q2xlYXJLZXkoKQoreworICAgIGdjcnlfY2lwaGVyX2Nsb3NlKG1fZ2NyeUhhbmRsZSk7Cit9CisK
K2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldENvdW50ZXJWZWN0b3IoY29uc3QgY2VuY0Rl
Y3J5cHRDb250ZXh0JiBpbnB1dCkKK3sKKyAgICB1aW50OF90IGN0cltDbGVhcktleTo6QUVTMTI4
Q1RSQmxvY2tTaXplSW5CeXRlc107CisgICAgaWYgKGlucHV0Lml2U2l6ZUluQnl0ZXMgPT0gOCkg
eworICAgICAgICAvLyBJU08vSUVDIDIzMDAxLTc6MjAxNiBTZWN0aW9uIDkuMworCisgICAgICAg
IC8vIFdoZW4gYW4gOC1ieXRlIElWIGlzIGluZGljYXRlZCwgdGhlIGxlYXN0IHNpZ25pZmljYW50
IDgKKyAgICAgICAgLy8gYnl0ZXMgb2YgdGhlIDE2IGJ5dGUgSVYgKGJ5dGVzIDggdG8gMTUpIFNI
QUxMIGJlIHNldCB0bworICAgICAgICAvLyB6ZXJvLgorICAgICAgICBtZW1zZXQoY3RyICsgOCwg
MCwgOCk7CisgICAgICAgIG1lbWNweShjdHIsIGlucHV0Lml2LCA4KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbWVtY3B5KGN0ciwgaW5wdXQuaXYsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKTsKKwor
ICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIobV9n
Y3J5SGFuZGxlLCBjdHIsIENsZWFyS2V5OjpJVlNpemVJbkJ5dGVzKSkgeworICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX3NldGN0cik6
ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5Ojpj
ZW5jU2V0RGVjcnlwdGlvbktleShjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmIGluKQoreworICAg
IC8vIEZJWE1FOiBVbm5lY2Vzc2FyeSBjb3B5LCBjYW4gd2UgYXZvaWQgdGhpcyB3aGlsZSBzdGls
bCBleHBvc2luZworICAgIC8vIGEgbm9uLUdTdHJlYW1lci1zcGVjaWZpYyBEZWNyeXB0SW5wdXQg
QVBJPyBUaGVzZSBidWZmZXJzIGFyZQorICAgIC8vIHNtYWxsICgxNiBieXRlcyksIHNvIG5vdCBh
IGh1Z2UgZGVhbCwgSSBndWVzcy4KKyAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWM7CisgICAg
a2V5SURWZWMuYXBwZW5kKGluLmtleUlELCBpbi5rZXlJRFNpemVJbkJ5dGVzKTsKKworICAgIGF1
dG8ga2V5RGF0YSA9IGdldE9yV2FpdEZvcktleShrZXlJRFZlYyk7CisgICAgaWYgKCFrZXlEYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KG1fZ2NyeUhhbmRsZSwga2V5RGF0YS0+ZGF0YSgpLCBrZXlEYXRh
LT5zaXplKCkpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0g
RVJST1IoZ2NyeV9jaXBoZXJfc2V0a2V5KTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0RnVsbFNhbXBsZShjZW5jRGVjcnlwdENvbnRl
eHQmIGluKQoreworICAgIGlmICghaW4uZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJLZXkg
LSBmdWxsLXNhbXBsZSBkZWNyeXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgaW4uZW5jcnlw
dGVkQnVmZmVyU2l6ZUluQnl0ZXMpOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJv
ciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbi5lbmNyeXB0ZWRCdWZmZXIs
IGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzLCAwLCAwKSkgeworICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAl
cyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2Vu
Y0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgdW5z
aWduZWQgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCA9IDA7CisgICAgc2l6ZV90IHN1YlNhbXBs
ZUJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIHN1YnNhbXBsZUluZGV4ID0gMDsK
KyAgICB3aGlsZSAoZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCA8IGlucHV0LmVuY3J5cHRlZEJ1
ZmZlclNpemVJbkJ5dGVzKSB7CisgICAgICAgIHVpbnQxNl90IHN1YnNhbXBsZU51bUNsZWFyQnl0
ZXMgPSAwOworICAgICAgICB1aW50MzJfdCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IDA7
CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZUluZGV4IDwgaW5wdXQubnVtU3Vic2FtcGxlcykgewor
ICAgICAgICAgICAgaWYgKCFyZWFkVUludDE2KGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0
LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwg
c3Vic2FtcGxlTnVtQ2xlYXJCeXRlcykpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIGNvdWxkIG5vdCByZWFkIG51bWJlciBvZiBjbGVhciBieXRl
cyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFyZWFk
VUludDMyKGlucHV0LnN1YnNhbXBsZXNCdWZmZXIsIGlucHV0LnN1YnNhbXBsZXNCdWZmZXJTaXpl
SW5CeXRlcywgc3ViU2FtcGxlQnVmZmVyQnl0ZU9mZnNldCwgc3Vic2FtcGxlTnVtRW5jcnlwdGVk
Qnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJL
ZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgZW5jcnlwdGVkIGJ5dGVzIGluIHN1YnNhbXBs
ZSBhdCBpbmRleCAldSIsIHN1YnNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdWJzYW1wbGVJbmRleCsrOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcyA9IDA7Cisg
ICAgICAgICAgICBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcyA9IGlucHV0LmVuY3J5cHRlZEJ1
ZmZlclNpemVJbkJ5dGVzIC0gZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgaGlnaC1mcmVxdWVuY3kgbWVzc2FnZXMsIG5v
dCBzdXJlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgbG9nZ2luZyBsaWIgaW4gV2ViQ29yZS4KKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIHN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGNsZWFyICgl
bHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJzYW1wbGVOdW1D
bGVhckJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1
ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAgIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgKz0g
c3Vic2FtcGxlTnVtQ2xlYXJCeXRlczsKKworICAgICAgICBpZiAoc3Vic2FtcGxlTnVtRW5jcnlw
dGVkQnl0ZXMpIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXgg
JXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKCVsdSBieXRlcyBsZWZ0IHRvIGRlY3J5cHQpIiwgc3Vi
c2FtcGxlSW5kZXgsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzLCBpbnB1dC5lbmNyeXB0ZWRC
dWZmZXJTaXplSW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQpOworCisgICAgICAg
ICAgICBpZiAoZ2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdCht
X2djcnlIYW5kbGUsIGlucHV0LmVuY3J5cHRlZEJ1ZmZlciArIGVuY3J5cHRlZEJ1ZmZlckJ5dGVP
ZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzLCAwLCAwKSkgeworICAgICAgICAgICAg
ICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJf
ZGVjcnlwdCk6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbmNyeXB0ZWRC
dWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6
Y2VuY0RlY3J5cHQoQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRDb250ZXh0JiBpbnB1dCkK
K3sKKyAgICBpZiAoIWNlbmNTZXRDb3VudGVyVmVjdG9yKGlucHV0KSB8fCAhY2VuY1NldERlY3J5
cHRpb25LZXkoaW5wdXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5w
dXQuaXNTdWJzYW1wbGVkKCkgPyBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoaW5wdXQpIDogY2VuY0Rl
Y3J5cHRGdWxsU2FtcGxlKGlucHV0KTsKK30KKwordm9pZCBDRE1Qcm94eUNsZWFyS2V5Ojppbml0
aWFsaXplR2NyeXB0KCkKK3sKKyAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBo
ZXJfb3BlbigmbV9nY3J5SGFuZGxlLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01P
REVfQ1RSLCBHQ1JZX0NJUEhFUl9TRUNVUkUpKSB7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eUNsZWFyS2V5IC0gRVJST1IoZ2NyeV9jaXBoZXJfb3Blbik6ICVzIiwgZ3BnX3N0cmVy
cm9yKGVycm9yKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJTaG91bGQgbm90
IGdldCB0aGlzIGZhciB3aXRoIGEgZnVuY3Rpb25hbCBHQ3J5cHQhIik7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1Qcm94eUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDI0MGM5Zjhk
NGNlNjdhYWJkMWRmZWQwN2I2NmI1MTA0MTIxOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5
LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQorCisjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRlICJDRE1J
bnN0YW5jZVNlc3Npb24uaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxnY3J5cHQuaD4KKyNpbmNsdWRlIDx3dGYv
Q29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvckhhc2guaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSB0aHJlYWQtc2FmZSBBUEkgdGhhdCBkZWNvZGUgdGhy
ZWFkcyBzaG91bGQgdXNlIHRvIG1ha2UgdXNlIG9mIGEKKy8vIHBsYXRmb3JtIENETSBtb2R1bGUu
CitjbGFzcyBDRE1Qcm94eUNsZWFyS2V5IGZpbmFsIDogcHVibGljIENETVByb3h5LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8Q0RNUHJveHlDbGVhcktleSwgV2Vha1B0ckZhY3RvcnlJbml0aWFsaXph
dGlvbjo6RWFnZXI+IHsKK3B1YmxpYzoKKyAgICBDRE1Qcm94eUNsZWFyS2V5KCkKKyAgICB7Cisg
ICAgICAgIGluaXRpYWxpemVHY3J5cHQoKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0RNUHJveHlD
bGVhcktleSgpOworCisgICAgLy8gRklYTUU6IFRoZXJlJ3MgYSBsYWNrIG9mIGNvbnNpc3RlbmN5
IGJldHdlZW4gU2hhcmVkQnVmZmVycywKKyAgICAvLyBWZWN0b3I8Y2hhcj4ncyBhbmQge3VpbnQ4
X3QqLHNpemVfdH0gaWRpb21zIGZvciByZXByZXNlbnRpbmcgYSBjaHVuayBvZgorICAgIC8vIGJ5
dGVzLiBGaXggdGhhdCBzb21laG93LiBOb3RlIFNoYXJlZEJ1ZmZlcnMgYXJlIGRhbmdlcm91cyBz
aW5jZQorICAgIC8vIHRoZXkncmUgbm90IHRocmVhZC1zYWZlIGFuZCB0aGlzIGNsYXNzIG11c3Qg
bWFpbnRhaW4KKyAgICAvLyB0aHJlYWQtc2FmZXR5LCBidXQgbWF5YmUgU2hhcmVkQnVmZmVyOjpE
YXRhU2VnbWVudCBjb3VsZCBiZQorICAgIC8vIG1hZGUgdG8gd29yaywgaG93ZXZlciB0aGF0IGhh
cyB6ZXJvIGhlbHBlcnMgZm9yIGRyb3BwaW5nIGludG8KKyAgICAvLyBpdGVyYXRvci1hd2FyZSAv
IGNvbXBhcmF0b3ItYXdhcmUgY29udGFpbmVycy4uLgorICAgIHN0cnVjdCBjZW5jRGVjcnlwdENv
bnRleHQgeworICAgICAgICAvLyBGSVhNRTogRW5hY2Fwc3VsYXRlIHRoZXNlIGZpZWxkcyBpbiBu
b24tY29waWVkIHR5cGVzLgorICAgICAgICBjb25zdCB1aW50OF90KiBrZXlJRDsKKyAgICAgICAg
c2l6ZV90IGtleUlEU2l6ZUluQnl0ZXM7CisKKyAgICAgICAgY29uc3QgdWludDhfdCogaXY7Cisg
ICAgICAgIHNpemVfdCBpdlNpemVJbkJ5dGVzOworCisgICAgICAgIHVpbnQ4X3QqIGVuY3J5cHRl
ZEJ1ZmZlcjsKKyAgICAgICAgc2l6ZV90IGVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzOworCisg
ICAgICAgIC8vIEZJWE1FOiBHU3RyZWFtZXItc3BlY2lmaWMgZGF0YSBsYXlvdXQuCisgICAgICAg
IC8vIElmIHdlIHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUgc3BlY2lmaWMgZGF0YSBsYXlvdXQsIHdl
IGNhbiBwYXJzZSBpdCBiZWZvcmUKKyAgICAgICAgLy8gYXNzaWduaW5nIGl0IGhlcmUgYW5kIG1h
eWJlIGhhdmUgYSBWZWN0b3I8c2l6ZV90PiB0aGF0IGlzIGEgc2VyaWVzIG9mCisgICAgICAgIC8v
IGNsZWFyL2RlY3J5cHRlZC9jbGVhci9kZWNyeXB0ZWQuLi4gT3IgbWF5YmUgZXZlbiBhIFZlY3Rv
cjxzdGQ6OnBhaXI8c2l6ZV90LCBzaXplX3Q+PgorICAgICAgICAvLyByZXByZXNlbnRpbmcgc2Vx
dWVuY2VzIG9mIGNsZWFyL2RlY3J5cHRlZCBzaXplcy4gVGhhdCBzdGQ6OnBhaXIgY291bGQgZXZl
bgorICAgICAgICAvLyBiZWNvbWUgYSBzdHJ1Y3QgQ2xlYXJEZWNyeXB0ZWRDaHVua1NpemVzSW5C
eXRlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNjczMAorICAgICAgICBjb25zdCB1aW50OF90KiBzdWJzYW1wbGVzQnVm
ZmVyOworICAgICAgICBzaXplX3Qgc3Vic2FtcGxlc0J1ZmZlclNpemVJbkJ5dGVzOworICAgICAg
ICBzaXplX3QgbnVtU3Vic2FtcGxlczsKKworICAgICAgICBib29sIGlzU3Vic2FtcGxlZCgpIGNv
bnN0IHsgcmV0dXJuIG51bVN1YnNhbXBsZXM7IH0KKyAgICB9OworCisgICAgLy8gRklYTUU6IFVu
Y29uZGl0aW9uYWwgaW4tcGxhY2UgZGVjcnlwdGlvbi4gV2hhdCBhYm91dCBTVlA/CisgICAgLy8g
RklYTUU6IEdTdHJlYW1lci1zcGVjaWZpYywgaW4gdGhhdCB0aGUgZm9ybWF0IG9mIHRoZSBzdWJz
YW1wbGUKKyAgICAvLyBkYXRhIGlzIGRlZmluZWQgYnkgd2hhdGV2ZXIgcXRkZW11eCBkZWNpZGVz
IHRvIGRvIHdpdGggaXQuCisgICAgYm9vbCBjZW5jRGVjcnlwdChjZW5jRGVjcnlwdENvbnRleHQm
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemVHY3J5cHQoKTsKKworICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBBRVMgaW4gQ1RSIG1vZGUsIGluIHRoZSBmdXR1
cmUKKyAgICAvLyB3ZSB3aWxsIHN1cmVseSBoYXZlIHRvIHN1cHBvcnQgbW9yZSBwcm90ZWN0aW9u
IHNjaGVtZXMuIENhbiB3ZQorICAgIC8vIHJldXNlIHNvbWUgQ3J5cHRvIEFQSXMgaW4gV2ViQ29y
ZT8KKyAgICBib29sIGNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4
dCYpOworICAgIGJvb2wgY2VuY1NldERlY3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250
ZXh0Jik7CisgICAgYm9vbCBjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0
Jik7CisgICAgYm9vbCBjZW5jRGVjcnlwdFN1YnNhbXBsZWQoY2VuY0RlY3J5cHRDb250ZXh0Jik7
CisKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byB1c2Ugc29tZXRoaW5nIGluIFdl
YkNvcmUgZm9yIGNyeXB0by4uLgorICAgIGdjcnlfY2lwaGVyX2hkX3QgbV9nY3J5SGFuZGxlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURl
Y3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZDhjMDI1NGZmMTQzMDNjNWUxODk3M2JlNGYyMjFh
ZTdjMGU5MzRhOS4uNTgzZjI2MTg2YWRmOGI3ODdiYjkzMzY3OTcxNmIwNDgzZjFkMmZlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9X
ZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdT
dHJlYW1lci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQ0RNQ2xlYXJLZXkuaCIKKyNpbmNsdWRl
ICJDRE1Qcm94eUNsZWFyS2V5LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8Z2NyeXB0Lmg+CkBAIC0z
NywxMiArMzgsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DS19ERUNSWVBULCBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUpKQogc3RydWN0IF9XZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUgewotICAgIFJlZlB0cjxQcm94eUNETUNsZWFyS2V5PiBwcm94eUNETTsKLSAgICBn
Y3J5X2NpcGhlcl9oZF90IGhhbmRsZTsKKyAgICBSZWZQdHI8Q0RNUHJveHlDbGVhcktleT4gY2Rt
UHJveHk7CiB9OwogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7Ci1zdGF0aWMgYm9v
bCBoYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBSZWZQdHI8UHJveHlDRE0+KTsKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5Pik7
CiBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQq
LCBHc3RCdWZmZXIqIGl2LCBHc3RCdWZmZXIqIGtleWlkLCBHc3RCdWZmZXIqIHNhbXBsZSwgdW5z
aWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNhbXBsZXMpOwogCiBHU1RfREVC
VUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9kZWJ1Z19j
YXRlZ29yeSk7CkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVh
cl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiAKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGNlbmNDbGFzcyA9IFdF
QktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfQ0xBU1Moa2xhc3MpOwogICAgIGNlbmNDbGFzcy0+cHJv
dGVjdGlvblN5c3RlbUlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjpzX0NsZWFyS2V5VVVJRDsK
LSAgICBjZW5jQ2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlID0gR1NUX0RFQlVHX0ZVTkNQVFIoaGFu
ZGxlS2V5UmVzcG9uc2UpOworICAgIGNlbmNDbGFzcy0+Y2RtUHJveHlBdHRhY2hlZCA9IEdTVF9E
RUJVR19GVU5DUFRSKGNkbVByb3h5QXR0YWNoZWQpOwogICAgIGNlbmNDbGFzcy0+ZGVjcnlwdCA9
IEdTVF9ERUJVR19GVU5DUFRSKGRlY3J5cHQpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKSk7CkBA
IC05Myw2MSArOTMsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQKIHN0YXRpYyB2b2lkIHdl
YmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0KiBzZWxmKQogewogICAgIFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotCiAgICAgc2Vs
Zi0+cHJpdiA9IHByaXY7CiAgICAgbmV3IChwcml2KSBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dFByaXZhdGUoKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3Bl
bigmKHByaXYtPmhhbmRsZSksIEdDUllfQ0lQSEVSX0FFUzEyOCwgR0NSWV9DSVBIRVJfTU9ERV9D
VFIsIEdDUllfQ0lQSEVSX1NFQ1VSRSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiRmFpbGVkIHRvIGNyZWF0ZSBBRVMgMTI4IENUUiBjaXBoZXIgaGFuZGxlOiAlcyIsIGdwZ19z
dHJlcnJvcihlcnJvcikpOwotICAgICAgICBBU1NFUlQoIWVycm9yKTsKLSAgICB9CiB9CiAKIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBUKG9iamVjdCk7CiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdjsK
LSAgICBnY3J5X2NpcGhlcl9jbG9zZShwcml2LT5oYW5kbGUpOwogICAgIHByaXYtPn5XZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUoKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09C
SkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxl
S2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVm
UHRyPFByb3h5Q0RNPiBwcm94eUNETSkKK3N0YXRpYyBib29sIGNkbVByb3h5QXR0YWNoZWQoV2Vi
S2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPENETVByb3h5PiBj
ZG1Qcm94eSkKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVD
UllQVChzZWxmKSk7Ci0gICAgcHJpdi0+cHJveHlDRE0gPSByZWludGVycHJldF9jYXN0PFByb3h5
Q0RNQ2xlYXJLZXkqPihwcm94eUNETS5nZXQoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnByb3h5Q0RN
OworICAgIHByaXYtPmNkbVByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eUNsZWFyS2V5
Kj4oY2RtUHJveHkuZ2V0KCkpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKIH0KIAotc3Rh
dGljIGJvb2wgZmluZEFuZFNldEtleShXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUq
IHByaXYsIGNvbnN0IFN0cmluZyYmIGtleUlEKQorc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBH
c3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3Vic2Ft
cGxlQ291bnQsIEdzdEJ1ZmZlciogc3Vic2FtcGxlc0J1ZmZlcikKIHsKLSAgICBTdHJpbmcga2V5
VmFsdWU7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IHByaXYtPnByb3h5Q0RNLT5pc29s
YXRlZEtleXMoKSkgewotICAgICAgICBpZiAoa2V5LmtleUlERGF0YSA9PSBrZXlJRCkgewotICAg
ICAgICAgICAga2V5VmFsdWUgPSBrZXkua2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoa2V5VmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgImZhaWxlZCB0byBmaW5kIGEgZGVjcnlwdGlvbiBr
ZXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlWYWx1
ZS5zaXplSW5CeXRlcygpID09IENMRUFSS0VZX1NJWkUpOwotICAgIGlmIChnY3J5X2Vycm9yX3Qg
ZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBrZXlWYWx1ZS5jaGFyYWN0
ZXJzOCgpLCBrZXlWYWx1ZS5zaXplSW5CeXRlcygpKSkgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHByaXYsICJnY3J5X2NpcGhlcl9zZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihl
cnJvcikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19CisgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2Vs
ZikpOwogCi1zdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZXIsIEdzdEJ1ZmZlcioga2V5SURCdWZmZXIs
IEdzdEJ1ZmZlciogYnVmZmVyLCB1bnNpZ25lZCBzdWJTYW1wbGVDb3VudCwgR3N0QnVmZmVyKiBz
dWJTYW1wbGVzQnVmZmVyKQotewotICAgIGlmICghaXZCdWZmZXIpIHsKLSAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAibm8gSVYgYnVmZmVyIik7CisgICAgaWYgKCFpdkJ1ZmZlciB8fCAh
a2V5SURCdWZmZXIgfHwgIWJ1ZmZlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJpbnZhbGlkIGRlY3J5cHQoKSBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtMTU3LDI3ICsxMjgsNiBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1l
ZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdWludDhfdCBjdHJbQ0xFQVJLRVlfU0la
RV07Ci0gICAgaWYgKG1hcHBlZElWQnVmZmVyLT5zaXplKCkgPT0gOCkgewotICAgICAgICBtZW1z
ZXQoY3RyICsgOCwgMCwgOCk7Ci0gICAgICAgIG1lbWNweShjdHIsIG1hcHBlZElWQnVmZmVyLT5k
YXRhKCksIDgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRJVkJ1ZmZlci0+
c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1
ZmZlci0+ZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRNZWRpYUNs
ZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRf
UFJJVkFURShXRUJLSVRfTUVESUFfQ0tfREVDUllQVChzZWxmKSk7Ci0gICAgZ2NyeV9lcnJvcl90
IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKHByaXYtPmhhbmRsZSwgY3RyLCBDTEVB
UktFWV9TSVpFKTsKLSAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzZWxmLCAiZ2NyeV9jaXBoZXJfc2V0Y3RyIGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3Io
Y2lwaGVyRXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
YnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIk5vIGJ1ZmZlciB0byBk
ZWNyeXB0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBhdXRvIG1hcHBl
ZEtleUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZm
ZXIsIEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsK
QEAgLTE5MCw3MiArMTQwLDI5IEBAIHN0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBmaW5kQW5kU2V0S2V5KHByaXYsIFN0cmluZyhtYXBw
ZWRLZXlJZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpKSk7Ci0KLSAg
ICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwot
Ci0gICAgaWYgKCFzdWJTYW1wbGVDb3VudCkgewotICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNy
eXB0aW9uLgotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNy
eXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwotCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBw
ZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhl
cl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewotICAgICAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24g
ZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBzdWJTYW1wbGVzQnVmZmVyIGlzbid0IG51bGwu
Ci0gICAgaWYgKCFzdWJTYW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkVycm9yLCB0aGUgc3ViU2FtcGxlQnVmZmVyIGlzIG51bGwiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIGF1
dG8gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3Jl
YXRlKHN1YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKCFtYXBwZWRTdWJT
YW1wbGVzQnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0
byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25l
dyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIt
PnNpemUoKSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6
ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgIHdoaWxlIChw
b3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIGd1aW50MTYgbkJ5dGVz
Q2xlYXIgPSAwOwotICAgICAgICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7Ci0KLSAgICAg
ICAgaWYgKHNhbXBsZUluZGV4IDwgc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgICAgIGlmICgh
Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUocmVhZGVyLmdldCgpLCAmbkJ5dGVzQ2xlYXIp
Ci0gICAgICAgICAgICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRl
ci5nZXQoKSwgJm5CeXRlc0VuY3J5cHRlZCkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJ1bnN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBuQnl0ZXNF
bmNyeXB0ZWQgPSBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwotICAgICAgICB9Ci0K
LSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJWh1
IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzQ2xlYXIsIG1hcHBl
ZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXND
bGVhcjsKLSAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAgICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVk
ICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSAtIHBvc2l0aW9uKTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBo
ZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24s
IG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsK
LSAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4
ICV1IGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lw
aGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwb3NpdGlvbiArPSBuQnl0ZXNFbmNyeXB0ZWQ7CisgICAgUmVmUHRyPEdz
dE1hcHBlZEJ1ZmZlcj4gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlcjsKKyAgICBDRE1Qcm94eUNsZWFy
S2V5OjpjZW5jRGVjcnlwdENvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmtleUlEID0gbWFw
cGVkS2V5SWRCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0LmtleUlEU2l6ZUluQnl0ZXMgPSBt
YXBwZWRLZXlJZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRleHQuaXYgPSBtYXBwZWRJVkJ1ZmZl
ci0+ZGF0YSgpOworICAgIGNvbnRleHQuaXZTaXplSW5CeXRlcyA9IG1hcHBlZElWQnVmZmVyLT5z
aXplKCk7CisgICAgY29udGV4dC5lbmNyeXB0ZWRCdWZmZXIgPSBtYXBwZWRCdWZmZXItPmRhdGEo
KTsKKyAgICBjb250ZXh0LmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkQnVmZmVy
LT5zaXplKCk7CisgICAgY29udGV4dC5udW1TdWJzYW1wbGVzID0gc3Vic2FtcGxlQ291bnQ7Cisg
ICAgaWYgKCFzdWJzYW1wbGVDb3VudCkKKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVy
ID0gbnVsbHB0cjsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN1YnNhbXBsZXNCdWZmZXIp
OworICAgICAgICBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVm
ZmVyOjpjcmVhdGUoc3Vic2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgaWYg
KCFtYXBwZWRTdWJzYW1wbGVzQnVmZmVyKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXIg
PSBtYXBwZWRTdWJzYW1wbGVzQnVmZmVyLT5kYXRhKCk7CisgICAgICAgIGNvbnRleHQuc3Vic2Ft
cGxlc0J1ZmZlclNpemVJbkJ5dGVzID0gbWFwcGVkU3Vic2FtcGxlc0J1ZmZlci0+c2l6ZSgpOwog
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eS0+Y2Vu
Y0RlY3J5cHQoY29udGV4dCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggMzY4
M2QwNDc0ODYwZjZlZjgxN2YzMWNkYzE1ZTQ4YWMxODZjMDM0NC4uNDdiNTYwZjczOTIwOWRjMmEx
NjI0NGMwNzk4MDM3NDdjMzA0MTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBA
IC0yNSwzNCArMjUsMzQgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIFVTRShH
U1RSRUFNRVIpCiAKKyNpbmNsdWRlICJDRE1Qcm94eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0
Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogCi11c2luZyBXZWJDb3JlOjpQ
cm94eUNETTsKK3VzaW5nIFdlYkNvcmU6OkNETVByb3h5OwogCiAjZGVmaW5lIFdFQktJVF9NRURJ
QV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9DRU5DX0RFQ1JZUFQsIFdlYktpdE1lZGlhQ29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdFByaXZhdGUgewogICAgIEdSZWZQdHI8R3N0RXZlbnQ+IHByb3RlY3Rp
b25FdmVudDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNOwotICAgIGJvb2wga2V5UmVj
ZWl2ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07Ci0gICAg
TG9jayBtdXRleDsKLSAgICBDb25kaXRpb24gY29uZGl0aW9uOworICAgIFJlZlB0cjxDRE1Qcm94
eT4gY2RtUHJveHk7CisKKyAgICBMb2NrIGNkbUF0dGFjaG1lbnRNdXRleDsKKyAgICBDb25kaXRp
b24gY2RtQXR0YWNobWVudENvbmRpdGlvbjsKIH07CiAKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25k
cyBNYXhTZWNvbmRzVG9XYWl0Rm9yQ0RNUHJveHkgPSA1X3M7CisKIHN0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNp
dGlvbik7CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2JqZWN0Kik7CiBzdGF0aWMgR3N0Q2Fwcyog
dHJhbnNmb3JtQ2FwcyhHc3RCYXNlVHJhbnNmb3JtKiwgR3N0UGFkRGlyZWN0aW9uLCBHc3RDYXBz
KiwgR3N0Q2FwcyopOwogc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RC
YXNlVHJhbnNmb3JtKiwgR3N0QnVmZmVyKik7CiBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFu
ZGxlcihHc3RCYXNlVHJhbnNmb3JtKiwgR3N0RXZlbnQqKTsKLXN0YXRpYyBnYm9vbGVhbiBxdWVy
eUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0UXVlcnkqKTsK
LXN0YXRpYyBib29sIGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCopOwogc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RFbGVtZW50KiwgR3N0
Q29udGV4dCopOwogCi0KIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2Nv
bW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwogI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfZGVidWdfY2F0
ZWdvcnkKIApAQCAtNzYsNyArNzYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY29tbW9u
X2VuY3J5cHRpb25fZGVjcnlwdF9jbGFzc19pbml0KFdlYktpdE1lZGlhQ29tbW9uRQogICAgIGJh
c2VUcmFuc2Zvcm1DbGFzcy0+dHJhbnNmb3JtX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUih0cmFu
c2Zvcm1DYXBzKTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNz
dGhyb3VnaCA9IEZBTFNFOwogICAgIGJhc2VUcmFuc2Zvcm1DbGFzcy0+c2lua19ldmVudCA9IEdT
VF9ERUJVR19GVU5DUFRSKHNpbmtFdmVudEhhbmRsZXIpOwotICAgIGJhc2VUcmFuc2Zvcm1DbGFz
cy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUihxdWVyeUhhbmRsZXIpOwogCiAgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUpKTsKIH0KQEAgLTE3NywyOSArMTc2LDIwIEBAIHN0YXRpYyBHc3RG
bG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVm
ZmVyKiBidWZmZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCog
c2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQoYmFzZSk7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwotICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11
dGV4KTsKIAotICAgIC8vIFRoZSBrZXkgbWlnaHQgbm90IGhhdmUgYmVlbiByZWNlaXZlZCB5ZXQu
IFdhaXQgZm9yIGl0LgotICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUgeWV0LCB3YWl0aW5nIGZvciBp
dCIpOwotICAgICAgICBpZiAoR1NUX1NUQVRFKEdTVF9FTEVNRU5UKHNlbGYpKSA8IEdTVF9TVEFU
RV9QQVVTRUQgfHwgKEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpICE9IEdTVF9T
VEFURV9WT0lEX1BFTkRJTkcgJiYgR1NUX1NUQVRFX1RBUkdFVChHU1RfRUxFTUVOVChzZWxmKSkg
PCBHU1RfU1RBVEVfUEFVU0VEKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiY2FuJ3QgcHJvY2VzcyBrZXkgcmVxdWVzdHMgaW4gbGVzcyB0aGFuIFBBVVNFRCBzdGF0ZSIp
OwotICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gU2VuZCAiZHJtLWNkbS1pbnN0YW5jZS1uZWVkZWQiIG1lc3NhZ2UgdG8gdGhl
IHBsYXllciB0byByZXNlbmQgdGhlIENETUluc3RhbmNlIGlmIGF2YWlsYWJsZSBhbmQgaW5mb3Jt
IHdlIGFyZSB3YWl0aW5nIGZvciBrZXkuCi0gICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSB0
cnVlOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQoc2VsZiks
IGdzdF9tZXNzYWdlX25ld19lbGVtZW50KEdTVF9PQkpFQ1Qoc2VsZiksIGdzdF9zdHJ1Y3R1cmVf
bmV3X2VtcHR5KCJkcm0td2FpdGluZy1mb3Ita2V5IikpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOwogCi0gICAgICAgIHByaXYtPmNvbmRpdGlvbi53
YWl0Rm9yKHByaXYtPm11dGV4LCBTZWNvbmRzKDUpLCBbcHJpdl0gewotICAgICAgICAgICAgcmV0
dXJuIHByaXYtPmtleVJlY2VpdmVkOworICAgIC8vIFRoZSBDRE0gaW5zdGFuY2UgbmVlZHMgdG8g
YmUgbmVnb3RpYXRlZCBiZWZvcmUgd2UgY2FuIGJlZ2luIGRlY3J5cHRpb24uCisgICAgaWYgKCFw
cml2LT5jZG1Qcm94eSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm90
IGF2YWlsYWJsZSwgZ29pbmcgdG8gd2FpdCBmb3IgaXQiKTsKKyAgICAgICAgcHJpdi0+Y2RtQXR0
YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCwgTWF4U2Vj
b25kc1RvV2FpdEZvckNETVByb3h5LCBbcHJpdl0geworICAgICAgICAgICAgcmV0dXJuIHByaXYt
PmNkbVByb3h5OwogICAgICAgICB9KTsKLSAgICAgICAgaWYgKCFwcml2LT5rZXlSZWNlaXZlZCkg
ewotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAia2V5IG5vdCBhdmFpbGFibGUi
KTsKKyAgICAgICAgaWYgKCFwcml2LT5jZG1Qcm94eSkgeworICAgICAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzZWxmLCAiQ0RNUHJveHkgd2FzIG5vdCByZXRyaWV2ZWQgaW4gdGltZSIpOwogICAg
ICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkLCBjb250aW51aW5nIik7Ci0g
ICAgICAgIHByaXYtPndhaXRpbmdGb3JLZXkgPSBmYWxzZTsKLSAgICAgICAgZ3N0X2VsZW1lbnRf
cG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudChH
U1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLWtleS1yZWNlaXZl
ZCIpKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgIkNETSBub3cgYXZhaWxhYmxl
IHdpdGggYWRkcmVzcyAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgpKTsKICAgICB9CiAKICAgICBH
c3RQcm90ZWN0aW9uTWV0YSogcHJvdGVjdGlvbk1ldGEgPSByZWludGVycHJldF9jYXN0PEdzdFBy
b3RlY3Rpb25NZXRhKj4oZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKGJ1ZmZlcikpOwpA
QCAtMjA3LDMyICsxOTcsMzAgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFj
ZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBHc3RQcm90ZWN0aW9uIG1ldGFkYXRh
IGZyb20gYnVmZmVyICVwIiwgYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9T
VVBQT1JURUQ7CiAgICAgfQorICAgIGF1dG8gcmVtb3ZlUHJvdGVjdGlvbk1ldGFPblJldHVybiA9
IG1ha2VTY29wZUV4aXQoW2J1ZmZlciwgcHJvdGVjdGlvbk1ldGFdIHsKKyAgICAgICAgZ3N0X2J1
ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3Rl
Y3Rpb25NZXRhKSk7CisgICAgfSk7CiAKICAgICB1bnNpZ25lZCBpdlNpemU7CiAgICAgaWYgKCFn
c3Rfc3RydWN0dXJlX2dldF91aW50KHByb3RlY3Rpb25NZXRhLT5pbmZvLCAiaXZfc2l6ZSIsICZp
dlNpemUpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQg
aXZfc2l6ZSIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRl
cnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCiAgICAgZ2Jvb2xlYW4gZW5jcnlwdGVkOwog
ICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbihwcm90ZWN0aW9uTWV0YS0+aW5mbywg
ImVuY3J5cHRlZCIsICZlbmNyeXB0ZWQpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQgZW5jcnlwdGVkIGZsYWciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9y
ZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25N
ZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIAot
ICAgIGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1v
dmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRh
KSk7CisgICAgaWYgKCFpdlNpemUgfHwgIWVuY3J5cHRlZCkKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOwotICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1QoYmFzZSwgInByb3RlY3Rpb24g
bWV0YTogJSIgR1NUX1BUUl9GT1JNQVQsIHByb3RlY3Rpb25NZXRhLT5pbmZvKTsKIAogICAgIHVu
c2lnbmVkIHN1YlNhbXBsZUNvdW50OwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludChw
cm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZV9jb3VudCIsICZzdWJTYW1wbGVDb3VudCkp
IHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdldCBzdWJzYW1w
bGVfY291bnQiKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0KIApAQCAtMjQyLDE3ICsyMzAsMTkgQEAgc3Rh
dGljIEdzdEZsb3dSZXR1cm4gdHJhbnNmb3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNl
LCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92
YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5mbywgInN1YnNhbXBsZXMiKTsKICAgICAgICAgaWYgKCF2
YWx1ZSkgewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIGdl
dCBzdWJzYW1wbGVzIik7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZl
ciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIHN1
YlNhbXBsZXNCdWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlcih2YWx1ZSk7CisgICAgICAgIGlm
ICghc3ViU2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxm
LCAiVGhlcmUgaXMgbm8gc3Vic2FtcGxlcyBidWZmZXIsIGJ1dCBhIHBvc2l0aXZlIHN1YnNhbXBs
ZSBjb3VudCIpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHBy
b3RlY3Rpb25NZXRhLT5pbmZvLCAia2lkIik7CiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQga2V5IGlkIGZvciBidWZmZXIi
KTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgIH0KICAgICBHc3RCdWZmZXIqIGtleUlEQnVmZmVyID0gZ3N0X3Zh
bHVlX2dldF9idWZmZXIodmFsdWUpOwpAQCAtMjYwLDcgKzI1MCw2IEBAIHN0YXRpYyBHc3RGbG93
UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVy
KiBidWZmZXIpCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9u
TWV0YS0+aW5mbywgIml2Iik7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IElWIGZvciBzYW1wbGUiKTsKLSAgICAgICAgZ3N0
X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHBy
b3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwog
ICAgIH0KIApAQCAtMjcwLDcxICsyNTksOTEgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gdHJhbnNm
b3JtSW5QbGFjZShHc3RCYXNlVHJhbnNmb3JtKiBiYXNlLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJkZWNyeXB0aW5nIik7CiAgICAgaWYgKCFrbGFzcy0+
ZGVjcnlwdChzZWxmLCBpdkJ1ZmZlciwga2V5SURCdWZmZXIsIGJ1ZmZlciwgc3ViU2FtcGxlQ291
bnQsIHN1YlNhbXBsZXNCdWZmZXIpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkRlY3J5cHRpb24gZmFpbGVkIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVm
ZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBnc3RfYnVmZmVy
X3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlv
bk1ldGEpKTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyBib29sIGlzQ0RN
SW5zdGFuY2VBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2Vs
ZikKK3N0YXRpYyBib29sIGlzQ0RNUHJveHlBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCogc2VsZikKIHsKICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUoc2VsZik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5jZG1BdHRhY2htZW50
TXV0ZXgpOworICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKK30KIAotICAgIEFTU0VSVChwcml2
LT5tdXRleC5pc0xvY2tlZCgpKTsKLQotICAgIGlmICghcHJpdi0+cHJveHlDRE0pIHsKLSAgICAg
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9jb250ZXh0KEdTVF9FTEVNRU5UKHNlbGYpLCAiZHJtLWNkbS1pbnN0YW5jZSIpKTsKLSAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYgd2UgY2Fu
J3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVlcnksIHRo
ZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKLSAgICAgICAgLy8gbWVzc2Fn
ZS4gSW4gdGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBv
bmx5IHRoZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlz
IGdvaW5nIHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKLSAgICAgICAgLy8gY291bGQgYmUgaGVscGZ1
bCBidXQgdGhlIHBsYXllciBzZXRzIHRoZSBjb250ZXh0IGFzIHNvb24gYXMgaXQgZ2V0cyB0aGUg
Q0RNSW5zdGFuY2UgYW5kIGlmIGl0IGRvZXMgbm90IGhhdmUgaXQsIHdlIGhhdmUgbm8gd2F5IG9m
IGFza2luZyBmb3Igb25lIGFzIGl0IGlzCi0gICAgICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBi
eSBjcm9zc3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRv
IGFuc3dlciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5l
aXRoZXIgcXVlcmllcyBub3IgYnVzCi0gICAgICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVy
ZS4KLSAgICAgICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFs
dWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNv
bnRleHQuZ2V0KCkpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgICAgICBwcml2LT5wcm94eUNE
TSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFsdWVfZ2V0X3BvaW50
ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAocHJpdi0+cHJveHlDRE0pCi0g
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RN
IHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIsIHByaXYtPnByb3h5Q0RNLmdldCgpLCBw
cml2LT5wcm94eUNETS0+cmVmQ291bnQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIHdhcyBkZXRhY2hlZCIp
Oworc3RhdGljIENETVByb3h5KiBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCit7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9jb250ZXh0KEdTVF9FTEVNRU5U
KHNlbGYpLCAiZHJtLWNkbS1wcm94eSIpKTsKKyAgICBDRE1Qcm94eSogcHJveHkgPSBudWxscHRy
OworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiwgaWYg
d2UgY2FuJ3QgZmluZCB0aGUgY29udGV4dCwgd2Ugc2hvdWxkIHJ1biBhIGRvd25zdHJlYW0gcXVl
cnksIHRoZW4gYW4gdXBzdHJlYW0gb25lIGFuZCB0aGVuIHNlbmQgYSBidXMKKyAgICAvLyBtZXNz
YWdlLiBJbiB0aGlzIGNhc2UgdGhhdCBkb2VzIG5vdCBtYWtlIGEgbG90IG9mIHNlbnNlIHNpbmNl
IG9ubHkgdGhlIGFwcCAocGxheWVyKSBhbnN3ZXJzIGl0LCBtZWFuaW5nIHRoYXQgbm8gcXVlcnkg
aXMgZ29pbmcgdG8gc29sdmUgaXQuIEEgbWVzc2FnZQorICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwg
YnV0IHRoZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENE
TUluc3RhbmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBh
c2tpbmcgZm9yIG9uZSBhcyBpdCBpcworICAgIC8vIHNvbWV0aGluZyBwcm92aWRlZCBieSBjcm9z
c3BsYXRmb3JtIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFuc3dl
ciB0aGUgYnVzIHJlcXVlc3QgaW4gYW55IHdheSBlaXRoZXIuIFN1bW1pbmcgdXAsIG5laXRoZXIg
cXVlcmllcyBub3IgYnVzCisgICAgLy8gcmVxdWVzdHMgYXJlIHVzZWZ1bCBoZXJlLgorICAgIGlm
IChjb250ZXh0KSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJl
X2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpLCAiY2Rt
LXByb3h5Iik7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgcHJveHkgPSByZWlu
dGVycHJldF9jYXN0PENETVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAg
ICAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAicmVjZWl2ZWQgYSBuZXcgQ0RNIHByb3h5IGluc3RhbmNlICVwLCByZWZjb3VudCAldSIs
IHByb3h5LCBwcm94eS0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5
OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2Vs
ZiwgIkNETVByb3h5IG5vdCBhdmFpbGFibGUgaW4gdGhlIGNvbnRleHQiKTsKICAgICB9Ci0KLSAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE0gaW5zdGFuY2UgYXZhaWxhYmxlICVzIiwgYm9v
bEZvclByaW50aW5nKHByaXYtPnByb3h5Q0RNLmdldCgpKSk7Ci0gICAgcmV0dXJuIHByaXYtPnBy
b3h5Q0RNOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc2lua0V2
ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQorc3Rh
dGljIHZvaWQgYXR0YWNoQ0RNUHJveHkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlw
dCogc2VsZiwgQ0RNUHJveHkqIHByb3h5KQogewotICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKICAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZBVEUoc2VsZik7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBrbGFzcyA9IFdFQktJVF9NRURJQV9DRU5DX0RF
Q1JZUFRfR0VUX0NMQVNTKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCi0g
ICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzNTUKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJl
IGhhbmRsaW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KLSAgICAgICAgLy8g
YWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIg
YQotICAgICAgICAvLyBwcmVmZXJyZWQgc3lzdGVtIElEIGNvbnRleHQgaXMgc2V0LCBhbnkgZnV0
dXJlIHByb3RlY3Rpb24KLSAgICAgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkg
dGhlIGRlbXV4ZXIsIHNvIHRoZSBtdXN0IGJlCi0gICAgICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4K
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBpZiAoIWlz
Q0RNSW5zdGFuY2VBdmFpbGFibGUoc2VsZikpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIk5vIENETSBpbnN0YW5jZSBhdmFpbGFibGUiKTsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiQXR0YWNoaW5nIENETVByb3h5ICVwIiwgcHJveHkpOworICAgIHByaXYtPmNkbVBy
b3h5ID0gcHJveHk7CisgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2Rt
UHJveHkpOworICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiBpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZShXZWJLaXRN
ZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIGlmICghaXNDRE1Qcm94
eUF2YWlsYWJsZShzZWxmKSkgeworICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKwor
ICAgICAgICBDRE1Qcm94eSogcHJveHkgPSBnZXRDRE1Qcm94eUZyb21Hc3RDb250ZXh0KHNlbGYp
OworICAgICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgIGF0dGFjaENETVByb3h5KHNlbGYs
IHByb3h5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gcmV0cmlldmUgQ0RN
UHJveHkgZnJvbSBjb250ZXh0Iik7CiAgICAgICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
Ci0gICAgICAgIGlmIChrbGFzcy0+aGFuZGxlS2V5UmVzcG9uc2Uoc2VsZiwgcHJpdi0+cHJveHlD
RE0pKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJrZXkgcmVjZWl2ZWQi
KTsKLSAgICAgICAgICAgIHByaXYtPmtleVJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHBy
aXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICAgICAgfQorICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RCYXNlVHJhbnNmb3JtKiB0
cmFucywgR3N0RXZlbnQqIGV2ZW50KQoreworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKHRyYW5zKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1CisgICAgLy8gV2Ugc2hvdWxkIGJlIGhhbmRs
aW5nIHByb3RlY3Rpb24gZXZlbnRzIGluIHRoaXMgY2xhc3MgaW4KKyAgICAvLyBhZGRpdGlvbiB0
byBvdXQtb2YtYmFuZCBkYXRhLiBJbiByZWd1bGFyIHBsYXliYWNrLCBhZnRlciBhCisgICAgLy8g
cHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9u
CisgICAgLy8gZXZlbnRzIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlIGRlbXV4ZXIsIHNvIHRo
ZXkgbXVzdCBiZQorICAgIC8vIGhhbmRsZWQgaW4gaGVyZS4KKyAgICBzd2l0Y2ggKEdTVF9FVkVO
VF9UWVBFKGV2ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09P
QjogeworICAgICAgICBBU1NFUlQoZ3N0X2V2ZW50X2hhc19uYW1lKGV2ZW50LCAiYXR0ZW1wdC10
by1kZWNyeXB0IikpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJIYW5kbGluZyBh
dHRlbXB0LXRvLWRlY3J5cHQiKTsKKyAgICAgICAgcmVzdWx0ID0gaW5zdGFsbENETVByb3h5SWZO
b3RBdmFpbGFibGUoc2VsZik7CiAgICAgICAgIGdzdF9ldmVudF91bnJlZihldmVudCk7Ci0gICAg
ICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpA
QCAtMzQ1LDE2ICszNTQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gc2lua0V2ZW50SGFuZGxlcihHc3RC
YXNlVHJhbnNmb3JtKiB0cmFucywgR3N0RXZlbnQqIGV2ZW50KQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBxdWVyeUhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJh
bnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFF1ZXJ5KiBxdWVyeSkKLXsKLSAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZShxdWVyeSks
ICJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSB7Ci0gICAgICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNf
REVDUllQVF9HRVRfUFJJVkFURSh0cmFucyk7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QodHJh
bnMsICJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSBxdWVyeSwgd2FpdGluZ2ZvcmtleSAl
cyIsIGJvb2xGb3JQcmludGluZyhwcml2LT53YWl0aW5nRm9yS2V5KSk7Ci0gICAgICAgIHJldHVy
biBwcml2LT53YWl0aW5nRm9yS2V5OwotICAgIH0KLSAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNG
T1JNX0NMQVNTKHBhcmVudF9jbGFzcyktPnF1ZXJ5KHRyYW5zLCBkaXJlY3Rpb24sIHF1ZXJ5KTsK
LX0KLQogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCiB7CiAgICAgV2ViS2l0TWVkaWFD
b21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFQo
ZWxlbWVudCk7CkBAIC0zNjMsNyArMzYyLDcgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IGNoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW4KICAg
ICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VE
X1RPX1JFQURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJQQVVTRUQtPlJFQURZ
Iik7Ci0gICAgICAgIHByaXYtPmNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcHJpdi0+
Y2RtQXR0YWNobWVudENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0zODAsMTIgKzM3OSwxNCBAQCBzdGF0aWMgdm9p
ZCBzZXRDb250ZXh0KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdENvbnRleHQqIGNvbnRleHQpCiB7
CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiA9IFdFQktJVF9N
RURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCk7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9Q
UklWQVRFKHNlbGYpOworICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFz
cyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhzZWxmKTsKIAot
ICAgIGlmIChnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKGNvbnRleHQsICJkcm0tY2RtLWlu
c3RhbmNlIikpIHsKLSAgICAgICAgY29uc3QgR1ZhbHVlKiB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUoY29udGV4dCksICJjZG0taW5zdGFu
Y2UiKTsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+bXV0ZXgpOwotICAgICAgICBw
cml2LT5wcm94eUNETSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETSo+KGdfdmFs
dWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPnByb3h5Q0RNLmdl
dCgpKTsKKyAgICBpZiAoZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJt
LWNkbS1wcm94eSIpKSB7CisgICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLXBy
b3h5Iik7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPmNkbUF0dGFjaG1lbnRNdXRl
eCk7CisgICAgICAgIHByaXYtPmNkbVByb3h5ID0gdmFsdWUgPyByZWludGVycHJldF9jYXN0PENE
TVByb3h5Kj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpIDogbnVsbHB0cjsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChzZWxmLCAicmVjZWl2ZWQgbmV3IENETUluc3RhbmNlICVwIiwgcHJp
di0+Y2RtUHJveHkuZ2V0KCkpOworICAgICAgICBrbGFzcy0+Y2RtUHJveHlBdHRhY2hlZChzZWxm
LCBwcml2LT5jZG1Qcm94eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29t
bW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9y
R1N0cmVhbWVyLmgKaW5kZXggMDY1MWRmYjljM2JlOTU5NDhkM2E5ZTk4ZGU2ZWQ4ZDRlOGYxZmE1
ZC4uODU3NWEwNzEwMmJkMTMzZjkyNWRlMWEwN2FkYzkyMmM3YTA1ODQyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21t
b25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpICYmIFVTRShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlIDxDRE1JbnN0YW5jZS5oPgorI2lu
Y2x1ZGUgPENETVByb3h5Lmg+CiAjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5o
PgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01NSw4
ICs1NSw4IEBAIHN0cnVjdCBfV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNz
IHsKICAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50Q2xhc3M7CiAKICAgICBjb25zdCBj
aGFyKiBwcm90ZWN0aW9uU3lzdGVtSWQ7Ci0gICAgYm9vbCAoKmhhbmRsZUtleVJlc3BvbnNlKShX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OlByb3h5
Q0RNPik7Ci0gICAgYm9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RC
dWZmZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YlNh
bXBsZXNCdWZmZXIpOworICAgIGJvb2wgKCpjZG1Qcm94eUF0dGFjaGVkKShXZWJLaXRNZWRpYUNv
bW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgUmVmUHRyPFdlYkNvcmU6OkNETVByb3h5Pik7CisgICAg
Ym9vbCAoKmRlY3J5cHQpKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqLCBHc3RC
dWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZl
ciwgdW5zaWduZWQgc3Vic2FtcGxlc0NvdW50LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIp
OwogfTsKIAogR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja0NETUZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9y
eS5jcHAKaW5kZXggYjMyYjVhMDE2ODQ1NWRlY2U5OTVkNTZhNmI0MzRlOGRkNGZiZTY4MS4uY2U1
ZDhmN2Q2YmRmMzhiNTkyMjA5MzAyYTZlNmQ3MWIzNjk2NjMyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5jcHAKQEAgLTIyNiw4ICsyMjYsNiBAQCBPcHRpb25hbDxT
dHJpbmc+IE1vY2tDRE06OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklk
KSBjb25zdAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLVByb3h5Q0RNTW9jazo6flBy
b3h5Q0RNTW9jaygpID0gZGVmYXVsdDsKLQogTW9ja0NETUluc3RhbmNlOjpNb2NrQ0RNSW5zdGFu
Y2UoV2Vha1B0cjxNb2NrQ0RNPiBjZG0pCiAgICAgOiBtX2NkbShjZG0pCiB7CkBAIC0yOTYsMTEg
KzI5NCw2IEBAIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IE1vY2tDRE1JbnN0YW5jZTo6Y3Jl
YXRlU2Vzc2lvbigpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0RNSW5zdGFuY2VTZXNz
aW9uKG1ha2VXZWFrUHRyKCp0aGlzKSkpOwogfQogCi1SZWZQdHI8UHJveHlDRE0+IE1vY2tDRE1J
bnN0YW5jZTo6cHJveHlDRE0oKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJv
eHlDRE1Nb2NrKCkpOwotfQotCiBNb2NrQ0RNSW5zdGFuY2VTZXNzaW9uOjpNb2NrQ0RNSW5zdGFu
Y2VTZXNzaW9uKFdlYWtQdHI8TW9ja0NETUluc3RhbmNlPiYmIGluc3RhbmNlKQogICAgIDogbV9p
bnN0YW5jZShXVEZNb3ZlKGluc3RhbmNlKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuaAppbmRleCBkN2U2NmU2MDE2ZDEwMTc4MTJlYWZhOGM4MGI0N2Q0NzI4MzUwY2Qx
Li4zOTkwOWI5MzAzYTk0YzkzNjhlYWEwZjYyNWY0YjY3ZTUyNTA1OWYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCkBAIC05OSwxMSArOTksNiBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX3Nlc3Npb25z
OwogfTsKIAotY2xhc3MgUHJveHlDRE1Nb2NrIGZpbmFsIDogcHVibGljIFByb3h5Q0RNIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5Qcm94eUNETU1vY2soKTsKLX07Ci0KIGNsYXNzIE1vY2tDRE0g
OiBwdWJsaWMgQ0RNUHJpdmF0ZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1vY2tDRE0+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE1MCw3ICsxNDUsNiBAQCBw
cml2YXRlOgogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOwogICAgIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgZmluYWw7CiAg
ICAgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigpIGZpbmFsOwotICAg
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbDsKIAogICAgIFdlYWtQdHI8
TW9ja0NETT4gbV9jZG07CiAgICAgYm9vbCBtX2Rpc3RpbmN0aXZlSWRlbnRpZmllcnNBbGxvd2Vk
IHsgdHJ1ZSB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390464</attachid>
            <date>2020-02-11 16:40:39 -0800</date>
            <delta_ts>2020-02-12 02:27:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200212004037.patch</filename>
            <type>text/plain</type>
            <size>114963</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uZDU3ZjVlODdlZGYyZWZlMTY2ZTM5MmNjYmYxNTdi
Mjc1YTVlNmMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1JbnN0YW5jZSwg
Q0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1haW4tdGhyZWFk
IG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAgYW4gaW50ZXJm
YWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3aGljaCBieQor
ICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSByZWFsIERSTSBz
eXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBDRE0gSW5zdGFu
Y2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGluZyBoZXJlLCBD
RE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwKKyAgICAgICAg
Q0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAgICAgICAgQ0RN
UHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28gQVBJcywKKyAg
ICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkgaW50ZXJyb2dh
dGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRlY3J5cHRpb24g
dXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5IENETVByb3h5
IGFuZCBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgMi8gRm9yIG1lZGlhIHBsYXllcnMg
dG8gc2FmZWx5IGFzc2VzcyB0aGUgc3RhdGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAgICAgICAgd2hh
dCB0aGVpciBzdGF0dXMgaXMuCisKKyAgICAgICAgQ0RNUHJveHkgZXhpc3RzIHRvIGFsbG93IHRo
cmVhZC1zYWZlIGFjY2VzcyB0byBhIHJlYWwgQ0RNLCBhbG9uZworICAgICAgICB3aXRoIHRoZWly
IHF1aXJrcy4gVGhlIHR3byBtYWluIHByb2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBvZiBhIENETQor
ICAgICAgICBoYXZlIGluIFdlYktpdCBpcyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RNIGFjY2VzcyBm
cm9tIGJhY2tncm91bmQKKyAgICAgICAgbWVkaWEgdGhyZWFkcy4KKworICAgICAgICBLZXkgbWFu
YWdlbWVudCBpcyBob3cgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEgd2F5CisgICAg
ICAgIGNvaGVyZW50IHdpdGggSmF2YVNjcmlwdCwgdGhlIGNyb3NzLXBsYXRmb3JtIEVNRSBpbXBs
ZW1lbnRhdGlvbiwKKyAgICAgICAgdGhlIHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBhbmQgdGhlIGJh
Y2tncm91bmQgbWVkaWEKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlkZXMgYSBkZWZh
dWx0IGtleSBzdG9yZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIHN1Yi1jbGFzc2VzLiBTdWItY2xh
c3NlcyBjYW4sIG9uIHJlY2VpcHQgb2YgbmV3IGluZm9ybWF0aW9uIGZyb20gYQorICAgICAgICBy
ZWFsIENETSwgdGVsbCBDRE1Qcm94eSBhYm91dCB0aGUga2V5cyBhbmQgdGhlaXIKKyAgICAgICAg
c3RhdHVzZXMuIENETVByb3h5IGlzIGludGVuZGVkIHRvIERvIFRoZSBSaWdodCBUaGluZyBmcm9t
IHRoZXJlLAorICAgICAgICBsZXR0aW5nIEphdmFTY3JpcHQgYW5kIFdlYkNvcmUga25vdyBhbGwg
dGhlIGRldGFpbHMgdGhleSBuZWVkIHRvCisgICAgICAgIGFib3V0IHRoZSBuZXcgc3RhdGUsIGFz
IHdlbGwgYXMgdGhlIG1lZGlhIGRlY29kZSB0aHJlYWRzIHdoZW4gdGhleQorICAgICAgICBuZXh0
IGNvbWUgYXNraW5nLgorCisgICAgICAgIEFjY2VzcyBmcm9tIGJhY2tncm91bmQgdGhyZWFkcyBp
cyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICB0aHJlYWQtdW5zYWZlIENETUlu
c3RhbmNlLiBXZSB1c2VkIHRvIGdldCBhd2F5IHdpdGggZG9pbmcgZXhhY3RseQorICAgICAgICB0
aGlzLCBidXQgV2ViQ29yZSByZWNlbnRseSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBhYm91dAorICAg
ICAgICB0aHJlYWQtdW5zYWZlIGFjY2VzcyBvZiBtYWluLXRocmVhZC1vbmx5IGRhdGEsIGFuZCB3
ZSBoYWQgdG8gZG8KKyAgICAgICAgc29tZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0cy4gVGhhdCBz
b21ldGhpbmcgd2FzIFByb3h5Q0RNIChhCisgICAgICAgIHRlcnJpYmxlIG5hbWUsIHJlbW92ZWQg
bm93KSwgd2hpY2ggd2FzIGEgaGFjayBhbmQgcGxlYXNlIGZvcmdldAorICAgICAgICBhYm91dCBp
dC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVseSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0aHJlYWRzLCBh
bmQKKyAgICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQtc2FmZSB2aWV3
IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFkcyB0byBpbnRl
cnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFuZCBwZXJmb3JtCisgICAgICAgIENETS1zcGVjaWZpYyBk
ZWNyeXB0aW9uIC8gZGVjb2RlLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBDRE1Q
cm94eSB0byBidWlsZAorICAgICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisgICAg
ICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAgICAgICBQcm94
eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRvIGF2b2lkIHNv
bWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxpYmVydHkgb2Yg
cmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFzb24gdGhhdCBp
dCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAgICBjb25mdXNp
b24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXNSZWxlYXNlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW1v
dmVBbGxLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5
VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzdG9wcGVkV2FpdGlu
Z0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5V2FpdEZvcktl
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxhYmxlVW5sb2Nr
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWlsYWJsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5nRm9yS2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9y
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6Om1lcmdlS2V5c0Zyb20p
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20p
OgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6S2V5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojpp
ZEFzU2hhcmVkQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojp2YWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXk6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpLZXk6
OmFkZFNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpyZW1vdmVTZXNz
aW9uUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6bnVtU2Vzc2lvblJlZmVyZW5j
ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6
Om51bUtleXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJlZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjplbmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlTdG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpy
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnNldFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUlu
c3RhbmNlUHJveHk6OmlzV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VQcm94eTo6dHJhY2tTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vu
c2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAgICAgICAoV2Vi
Q29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJlZmFjdG9yZWQg
dG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAgIChXZWJDb3Jl
OjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUKKyAgICAgICAg
dHJhY2tTZXNzaW9uIG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBvZiBhbGwgRU1F
CisgICAgICAgIHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAga2VlcCB0cmFj
ayBvZiBnZW5lcmF0ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHVz
ZSBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRhKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjppc29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQcm94
eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleUlEQXNTdHJp
bmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktl
eTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KTog
RGVsZXRlZC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHVubmVjZXNzYXJpbHkKKyAgICAgICAgc29y
dGluZyB0aGUga2V5IHZlY3RvcnMuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG8gaW1wb3Nl
IGFuCisgICAgICAgIG9yZGVyaW5nIG9uIGtleXMsIHNvIEkgcmVtb3ZlZCBpdC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oOiBSZWZhY3Rv
ciB0byB1c2UKKyAgICAgICAgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMuaDoKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIFByb3h5Q0RNIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZSk6CisgICAgICAgIFJl
ZmFjdG9yZWQgb3V0IG9mIHN5bmNNZXNzYWdlLiBUaGUgY29kZSB3YXMgbW92ZWQgaGVyZSBhbmQg
aW50bworICAgICAgICB3YWl0Rm9yQ0RNQXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0dGFjaG1lbnQpOgorICAgICAg
ICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRpbmctZm9yLWtl
eSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgorICAgICAgICBF
bmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJhc2VkIHBvcnRz
IHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xhc3NlcyBmcm9t
IGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEgaGFuZGxlIHRv
IHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5hZ2VtZW50LCBz
byB3aXJlIHRoYXQgaW4gaGVyZSB0b28uIEFsc28gd2lyZSB0aGUKKyAgICAgICAgR1N0cmVhbWVy
IHNwZWNpZmljIENsZWFyS2V5IHByb3h5IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5IGNvbnN0KTog
S2V5CisgICAgICAgIHN0YXR1cyBub3RpZmljYXRpb25zIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkg
b2YgdGhlIENETVByb3h5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oOiBOb3cK
KyAgICAgICAgd2UgdXNlIENETUluc3RhbmNlUHJveHksIG5vdCBDRE1JbnN0YW5jZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
OgorICAgICAgICBBZGRlZC4gRyotc3BlY2lmaWMgQ2xlYXJLZXkgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVhcktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRlclZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVjcnlwdGlvbktl
eSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxT
YW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRT
dWJzYW1wbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRpYWxpemVHY3J5
cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlD
bGVhcktleS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgUmVmYWN0
b3IgdG8gdXNlIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNy
eXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tleV9kZWNyeXB0
X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlBdHRhY2hlZCk6
CisgICAgICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNlKTogRGVsZXRl
ZC4gVGhpcyB3YXMgYSBiYWRseSBuYW1lZCBtZXRob2QgdGhhdAorICAgICAgICBoYXMgYmVlbiBj
aGFuZ2VkIHRvIGNkbVByb3h5QXR0YWNoZWQuCisgICAgICAgIChmaW5kQW5kU2V0S2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENv
bW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2Via2l0X21l
ZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh0cmFu
c2Zvcm1JblBsYWNlKToKKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOgorICAgICAgICAo
Z2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dCk6CisgICAgICAgIChhdHRhY2hDRE1Qcm94eSk6Cisg
ICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6CisgICAgICAgIChzaW5rRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNldENvbnRleHQp
OgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VBdmFpbGFibGUp
OiBEZWxldGVkLgorICAgICAgICAocXVlcnlIYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZTo6cHJveHlDRE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuaDoKKwogMjAyMC0wMi0wNyAg
eW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFuZGF0ZSBVVUlE
IHZlcnNpb24gNCBmb3IgbUROUyBJQ0UgY2FuZGlkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5Mjhl
YzU1ZmVmYTk5NzA3MDhmNjUwNzcxZDBlOTY2YTNmYWIxY2RmLi42MmU1MzVhOWEwMWRlYzgxZGU0
YTQzYjQ1Mzg2MTcwMzQ3YWI2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxNyw2ICsxODE3LDcg
QEAgcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xl
LmNwcAogCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAorcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmE1
N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3MTdjYTZhYWI5
YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBAQAogCQlDRDk0
QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1IC8qIENETUZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFjdG9yeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1RDUgLyog
Q0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0RNUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RN
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMxRjcxQ0I2QzAw
RjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Npb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJCQkJQ0Q5NEE1
RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAogCQkJCUNEOTRB
NUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJCUNEOTRBNUNG
MUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1Q0YxRjcxQ0I2
MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFDQjYxMDBGNTI1
QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1QzUgLyogQ0RN
UmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVz
dHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXgg
ODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3NTY5NTIyNzYy
ZGQ4YWVjN2NlYmUzMzRhYTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJl
YW1lci5jbWFrZQpAQCAtMTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QSkKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNwcAogICAgICkK
IAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3Rh
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1JbnN0YW5j
ZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMwMzcuLjhmOWYz
ZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApAQCAtMzksMTcg
KzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVmZmVyOwotCiBj
bGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8gSGFuZGxlIHRv
IGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBjYW4gYmUgdXNl
ZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycykuCi1jbGFzcyBQ
cm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4gewotcHVibGlj
OgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3RydWN0IENETUtl
eVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUgdG8gYSBDRE1J
bnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRlU2Vzc2lvbigp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCA9IDA7
CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3duLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjgxYjI1MjFkMDMyNDJjZGIyMmEyYzg4MTYzYjkyOTkyMDEwMGIzYzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Q
cm94eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2ZWN0b3JUb0hl
eFN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisKK1N0cmluZyBL
ZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVj
dG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZhbHVlQXNTdHJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9yVG9IZXhTdHJp
bmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgeworICAgICAgICBy
ZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZvdW5kOworfQor
Cit2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgTE9H
KEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRvIGEga2V5IHN0
b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3ZSBjYXJlIHRo
YXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkgSUQKKyAgICAg
ICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNob3VsZCB3ZSBv
dmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRoaW5rIHdlIG5l
ZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZpbmRNYXRjaGlu
ZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICprZXkgPT0gKnN0
b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5cy5hcHBlbmQo
a2V5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBkb2VzIGhhcHBl
biB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3JlIGl0LgorICAg
ICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtleSB3aXRoIHRo
ZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJM
RUQKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgc3RvcmUgbm93IGhhcyAldSBr
ZXlzIiwgbnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5cykKKyAg
ICAgICAgTE9HKEVNRSwgIlx0RU1FIC0gQ0RNUHJveHkgLSBLZXkgSUQ6ICVzIiwga2V5LT5pZEFz
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKK30KKwor
Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFsbEtleXNBc1Jl
bGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3Rv
ciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3RvcigpOworICAgIGZv
ciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAgICAgICBrZXlTdGF0dXMu
c2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2VkOworICAgIHJl
dHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZEtleXMoVmVjdG9y
PFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAgYm9vbCBkaWRLZXlTdG9yZUNoYW5nZSA9
IGZhbHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykgeworICAgICAgICBpZiAoYWRk
KFdURk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRLZXlTdG9yZUNoYW5nZSA9IHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKK30KKworYm9vbCBLZXlTdG9yZTo6
YWRkKFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJvb2wgZGlkU3RvcmVDaGFuZ2UgPSBmYWxz
ZTsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kTWF0
Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAgICAgIHJldHVy
biAqa2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisKKyAgICBpZiAoa2V5V2l0aE1hdGNoaW5n
S2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8mIGtleVdpdGhNYXRj
aGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBrZXktPnZhbHVl
KCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIExP
RyhFTUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAlcyBnZXR0aW5nIGFkZGVk
IHRvIGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsgICAgICAK
KyAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAgICAgICBkaWRTdG9yZUNoYW5nZSA9IHRy
dWU7CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9uUmVmZXJlbmNlKCk7CisgICAgcmV0dXJu
IGRpZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0b3JlOjpyZW1vdmVBbGxLZXlzRnJvbShj
b25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhl
cikKKyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OnJlbW92ZShjb25z
dCBSZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0gZmFsc2U7CisK
KyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5maW5kKGtleSk7
CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVkIHRvIHJlbW92ZSBrZXkg
d2l0aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVuY2VzIiwga2V5LT5pZEFzU3RyaW5nKCku
YXNjaWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJlZmVyZW5jZXMoKSk7CisKKyAgICBpZiAo
a2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1
dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5k
ZXhdOworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVtb3ZlU2Vzc2lvblJlZmVyZW5j
ZSgpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5udW1TZXNzaW9uUmVmZXJl
bmNlcygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSByZW1vdmUg
a2V5IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5yZW1vdmUoa2V5V2l0aE1hdGNoaW5nS2V5
SURJbmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIGF0dGVtcHQgdG8g
cmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRvZXMgbm90IGV4aXN0Iiwga2V5LT5pZEFz
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHN0b3JlQ2hhbmdlZDsKK30K
KworY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1f
a2V5cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJRCkKKyAgICAgICAgICAgIHJldHVybiBr
ZXktPnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGZhbHNlICYmICJr
ZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7CisgICAgVU5SRUFDSEFCTEUoKTsK
K30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmNvbnZl
cnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246
OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAga2V5U3RhdHVzVmVjdG9yLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtl
eSA6IG1fa2V5cykKKyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzPiB7
IGtleS0+aWRBc1NoYXJlZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOworICAgIHJldHVybiBr
ZXlTdGF0dXNWZWN0b3I7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKGNvbnN0
IEtleVN0b3JlJiBuZXdLZXlTdG9yZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
a2V5c011dGV4KTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKG5ld0tleVN0b3JlKTsKKyAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHkgLSB1cGRhdGluZyBrZXkgc3RvcmUgZnJvbSBhIHNlc3Npb24g
dXBkYXRlIik7CisgICAgbV9rZXlzQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQorCit2b2lkIENE
TVByb3h5OjpzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgbV9pbnN0YW5jZSA9
IGluc3RhbmNlOworfQorCitWZWN0b3I8dWludDhfdD4gQ0RNUHJveHk6OmtleVZhbHVlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2tleXNNdXRleCk7CisgICAgQVNTRVJUKG1fa2V5U3RvcmUuY29udGFpbnNLZXlJRChr
ZXlJRCkpOworICAgIHJldHVybiBtX2tleVN0b3JlLmtleVZhbHVlKGtleUlEKTsKK30KKwordm9p
ZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RN
UHJveHkgLSBzdGFydGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJUKG1faW5zdGFu
Y2UpOworICAgIG1faW5zdGFuY2UtPnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCk7Cit9CisKK3ZvaWQg
Q0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVBy
b3h5IC0gc3RvcHBlZCB3YWl0aW5nIGZvciBhIGtleSIpOworICAgIEFTU0VSVChtX2luc3RhbmNl
KTsKKyAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOworfQorCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKKyAg
ICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5nIHdlIGhhdmUgc3RvcHBlZCB3YWl0aW5nIGZvciBh
IGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMgb25seSBnZXQKKyAgICAvLyBvbmUgc2hvdCBhdCBm
ZXRjaGluZyBhIGtleS4gSWYgTWF4S2V5V2FpdFRpbWVTZWNvbmRzIGV4cGlyZXMsIHRoYXQncyBp
dCwgbm8gbW9yZSBjbGVhciBieXRlcworICAgIC8vIGZvciB5b3UuCisgICAgYXV0byBzdG9wV2Fp
dGluZ0ZvcktleU9uUmV0dXJuID0gbWFrZVNjb3BlRXhpdChbdGhpc10geworICAgICAgICBzdG9w
cGVkV2FpdGluZ0ZvcktleSgpOworICAgIH0pOworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94
eSAtIHRyeWluZyB0byB3YWl0IGZvciBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0cmluZyhrZXlJ
RCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGJvb2wgd2FzS2V5UmVjZWl2ZWQgPSBmYWxzZTsKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOworICAgICAg
ICB3YXNLZXlSZWNlaXZlZCA9IG1fa2V5c0NvbmRpdGlvbi53YWl0Rm9yKG1fa2V5c011dGV4LCBD
RE1Qcm94eTo6TWF4S2V5V2FpdFRpbWVTZWNvbmRzLCBbJiwgdGhpcywga2V5SURdKCkgeworICAg
ICAgICAgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CisgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAlcyIsIHZlY3Rv
clRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBrZXlW
YWx1ZShrZXlJRCk7CisgICAgfQorICAgIAorICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eSAt
IGtleSBJRCAlcyBub3QgYXZhaWxhYmxlIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5SUQpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitib29sIENETVByb3h5
OjprZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25z
dAoreworICAgIHJldHVybiBtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQpOworfQorCiti
b29sIENETVByb3h5OjprZXlBdmFpbGFibGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkg
Y29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBy
ZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworfQorCitPcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3QKK3sKKyAgICBpZiAoIWtleUF2YWlsYWJsZShrZXlJRCkpIHsKKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IGtleSBjYWNoZSBkb2VzIG5vdCBjb250YWluIGtl
eSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiB0cnlXYWl0Rm9yS2V5KGtleUlEKTsKKyAgICB9CisKKyAgICByZXR1cm4ga2V5
VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0aW5n
Rm9yS2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpICYmIG1fcGxheWVyKTsKKyAg
ICBib29sIHdhc1dhaXRpbmdGb3JLZXkgPSBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4g
MDsKKyAgICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5Kys7CisKKyAgICBjYWxsT25NYWlu
VGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgd2FzV2FpdGluZ0ZvcktleV0geworICAgICAgICBp
ZiAocGxheWVyICYmIHdhc1dhaXRpbmdGb3JLZXkpCisgICAgICAgICAgICBwbGF5ZXItPndhaXRp
bmdGb3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6
c3RvcHBlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkgJiYg
bV9wbGF5ZXIgJiYgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+IDApOworICAgIG1fbnVt
RGVjcnlwdG9yc1dhaXRpbmdGb3JLZXktLTsKKyAgICBib29sIGlzTm9ib2R5V2FpdGluZ0Zvcktl
eSA9ICFtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbcGxheWVyID0gbV9wbGF5ZXIsIGlzTm9ib2R5V2FpdGluZ0ZvcktleV0geworICAgICAgICBp
ZiAocGxheWVyICYmIGlzTm9ib2R5V2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAgIHBsYXllci0+
d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1JbnN0YW5jZVBy
b3h5OjptZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBrZXlTdG9yZSkKK3sKKyAgICAvLyBG
SVhNRTogTm90aWZ5IEpTIHdoZW4gYXBwcm9wcmlhdGUuCisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKGtleVN0b3JlKTsKKyAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNSW5zdGFuY2VQcm94eSAtIG1lcmdpbmcga2V5cyBpbnRvIHByb3h5IGluc3RhbmNlIGFu
ZCBub3RpZnlpbmcgQ0RNUHJveHkgb2YgY2hhbmdlcyIpOworICAgIEFTU0VSVChtX2NkbVByb3h5
KTsKKyAgICBtX2NkbVByb3h5LT51cGRhdGVLZXlTdG9yZShrZXlTdG9yZSk7Cit9CisKK3ZvaWQg
Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3RvcmUmIGtleVN0
b3JlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9rZXlTdG9yZS5yZW1v
dmVBbGxLZXlzRnJvbShrZXlTdG9yZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjZhZDc5Mzc3
ZGE5YWIyYjIyOTE0ZmVhZDQyMzliMGRjMjM1YzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAtMCwwICsxLDE4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisK
KyNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNlU2Vzc2lvbi5o
IgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9ySGFz
aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEtleT4geworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1cyA9IENETUluc3RhbmNlU2Vz
c2lvbjo6S2V5U3RhdHVzOworCisgICAgc3RhdGljIFJlZlB0cjxLZXk+IGNyZWF0ZShLZXlTdGF0
dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5
VmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXkoc3RhdHVzLCBX
VEZNb3ZlKGtleUlEKSwgV1RGTW92ZShrZXlWYWx1ZSkpKTsKKyAgICB9CisgICAgUmVmPFNoYXJl
ZEJ1ZmZlcj4gaWRBc1NoYXJlZEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKG1faWQuZGF0YSgpLCBtX2lkLnNpemUoKSk7IH0KKworICAgIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBWZWN0b3I8dWlu
dDhfdD4mIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIEtleVN0YXR1cyBzdGF0dXMo
KSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgU3RyaW5nIGlkQXNTdHJpbmcoKSBj
b25zdDsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OworCisgICAgLy8gVHdvIGtl
eXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcga2V5IHZhbHVl
IGFuZCBzdGF0dXMuCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBj
b25zdCBLZXkgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1faWQ7IH0KKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmaywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlELCBjb25zdCBLZXkgJmspIHsgcmV0dXJuIGsg
PT0ga2V5SUQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFNlc3Npb25SZWZlcmVuY2UoKSB7
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMrKzsgfQorICAg
IHZvaWQgcmVtb3ZlU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsg
bV9udW1TZXNzaW9uUmVmZXJlbmNlcy0tOyB9CisgICAgdW5zaWduZWQgbnVtU2Vzc2lvblJlZmVy
ZW5jZXMoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251bVNlc3Np
b25SZWZlcmVuY2VzOyB9CisgICAgZnJpZW5kIGNsYXNzIEtleVN0b3JlOworCisgICAgS2V5KEtl
eVN0YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8dWludDhfdD4m
JiBrZXlWYWx1ZSkKKyAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdURk1vdmUoa2V5
SUQpKSwgbV92YWx1ZShXVEZNb3ZlKGtleVZhbHVlKSkgeyB9CisKKyAgICBLZXlTdGF0dXMgbV9z
dGF0dXM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1faWQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1f
dmFsdWU7CisgICAgdW5zaWduZWQgbV9udW1TZXNzaW9uUmVmZXJlbmNlcyB7IDAgfTsKK307CisK
K2NsYXNzIEtleVN0b3JlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXNWZWN0b3IgPSBD
RE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvcjsKKworICAgIGJvb2wgY29udGFpbnNL
ZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICB2b2lkIG1lcmdl
KGNvbnN0IEtleVN0b3JlJiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlzRnJvbShjb25z
dCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5cygpIHsgbV9rZXlzLmNs
ZWFyKCk7IH0KKyAgICBib29sIGFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmKTsKKyAgICBi
b29sIGFkZChSZWZQdHI8S2V5PiYmKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBSZWZQdHI8S2V5
PiYpOworICAgIHVuc2lnbmVkIG51bUtleXMoKSBjb25zdCB7IHJldHVybiBtX2tleXMuc2l6ZSgp
OyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlWYWx1ZShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgYWxsS2V5c0FzUmVsZWFz
ZWQoKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgY29udmVydFRvSlNLZXlTdGF0dXNWZWN0
b3IoKSBjb25zdDsKKworICAgIGF1dG8gYmVnaW4oKSB7IHJldHVybiBtX2tleXMuYmVnaW4oKTsg
fQorICAgIGF1dG8gYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMuYmVnaW4oKTsgfQorICAg
IGF1dG8gZW5kKCkgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byBlbmQoKSBjb25z
dCB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIHsgcmV0dXJuIG1f
a2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9rZXlz
LnJiZWdpbigpOyB9CisgICAgYXV0byByZW5kKCkgeyByZXR1cm4gbV9rZXlzLnJlbmQoKTsgfQor
ICAgIGF1dG8gcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7IH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8UmVmUHRyPEtleT4+IG1fa2V5czsKK307CisKK2NsYXNzIENETUluc3Rh
bmNlUHJveHk7CisKKy8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0aGUgSmF2YVNjcmlw
dCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKKy8vIGZyb20gYmFja2dyb3VuZCB0aHJlYWRzIChp
LmUuIGRlY3J5cHRvcnMpLgorY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Q0RNUHJveHk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIFNlY29uZHMg
TWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworCisgICAgdmlydHVhbCB+Q0RNUHJveHkoKSA9
IGRlZmF1bHQ7CisKKyAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0b3JlJiBuZXdL
ZXlTdG9yZSk7CisgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5Kik7CisKK3By
b3RlY3RlZDoKKyAgICBWZWN0b3I8dWludDhfdD4ga2V5VmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxvY2tlZChjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxWZWN0b3I8dWlu
dDhfdD4+IHRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7
CisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9pZCBzdGFydGVkV2FpdGluZ0Zvcktl
eSgpIGNvbnN0OworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OworICAgIENETUluc3RhbmNl
UHJveHkqIG1faW5zdGFuY2U7CisKKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0ZXg7CisgICAg
bXV0YWJsZSBDb25kaXRpb24gbV9rZXlzQ29uZGl0aW9uOworICAgIC8vIEZJWE1FOiBEdXBsaWNh
dGVkIGtleSBzdG9yZXMgaW4gdGhlIGluc3RhbmNlIGFuZCB0aGUgcHJveHkgYXJlIHByb2JhYmx5
IG5vdCBuZWVkZWQsIGJ1dCBzaW1wbGlmaWVkCisgICAgLy8gdGhlIGluaXRpYWwgaW1wbGVtZW50
YXRpb24gaW4gdGVybXMgb2YgdGhyZWFkaW5nIGludmFyaWFudHMuCisgICAgS2V5U3RvcmUgbV9r
ZXlTdG9yZTsKK307CisKKy8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9uIG1hbmFnZW1l
bnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKKy8vIGZyb20gInJlYWwgQ0RN
IiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgorY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6IHB1YmxpYyBD
RE1JbnN0YW5jZSB7CitwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VQcm94eSgpID0gZGVmYXVsdDsK
KyAgICB2aXJ0dWFsIH5DRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworCisgICAgLy8gTWFp
bi10aHJlYWQgb25seS4KKyAgICB2b2lkIHNldFByb3h5KFJlZjxDRE1Qcm94eT4mJiBwcm94eSkK
KyAgICB7CisgICAgICAgIG1fY2RtUHJveHkgPSBXVEZNb3ZlKHByb3h5KTsKKyAgICAgICAgbV9j
ZG1Qcm94eS0+c2V0SW5zdGFuY2UodGhpcyk7CisgICAgfQorICAgIHZvaWQgbWVyZ2VLZXlzRnJv
bShjb25zdCBLZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5
U3RvcmUmKTsKKworICAgIC8vIE1lZGlhIHBsYXllciBxdWVyeSBtZXRob2RzIC0gbWFpbiB0aHJl
YWQgb25seS4KKyAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dh
aXRpbmdGb3JLZXkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBtX251
bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxheWVyKE1lZGlh
UGxheWVyKiBwbGF5ZXIpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9wbGF5ZXIgPSBwbGF5
ZXI7IH0KKworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRocmVhZC1zYWZlLgorICAg
IHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIHN0b3BwZWRXYWl0aW5nRm9y
S2V5KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRyYWNrU2Vzc2lvbihjb25zdCBSZWZQdHI8
Q0RNSW5zdGFuY2VTZXNzaW9uPiBzZXNzaW9uKSB7IG1fc2Vzc2lvbnMuYXBwZW5kKHNlc3Npb24p
OyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENETVByb3h5PiBtX2NkbVByb3h5OworICAgIC8v
IEZJWE1FOiBXZWFrUHRyIGZvciB0aGUgbV9wbGF5ZXI/IFRoaXMgaXMgYWNjZXNzZWQgZnJvbSBi
YWNrZ3JvdW5kIGFuZCBtYWluIHRocmVhZHMsIGl0J3MKKyAgICAvLyBjb25jZXJuaW5nIHdlIGNv
dWxkIGJlIGFjY2Vzc2luZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2h1dGRvd24gb24gdGhlIG1h
aW4tdGhyZWFkLCBlaD8KKyAgICAvLyBBcyBhIENETVByb3h5LCB3ZSAqKipzaG91bGQqKiogYmUg
dHVybmVkIG9mZiBiZWZvcmUgdGhpcyBwb2ludGVyIGV2ZXIgZ29lcyBiYWQuCisgICAgTWVkaWFQ
bGF5ZXIqIG1fcGxheWVyIHsgbnVsbHB0ciB9OyAvLyBGSVhNRTogTWFpblRocmVhZDxUPj8KKwor
ICAgIHN0ZDo6YXRvbWljPGludD4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleTsKKyAgICBW
ZWN0b3I8UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4+IG1fc2Vzc2lvbnM7CisKKyAgICBLZXlT
dG9yZSBtX2tleVN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcApp
bmRleCA2NDg1ZGI3NWQ3ZTczMzliMTU2MWRjNmQ1OGVmMjljOWIzMTIzNTgwLi40NTExMWRjNzVi
NTUwODBjZWY0ZTVmYjM4YWUyNjMzYjM5ZWE3MjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5cGUuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KQEAgLTQzLDM0ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
Q2xlYXJLZXkgQ0VOQyBTeXN0ZW1JRC4KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbWUtaW5p
dGRhdGEtY2VuYy8jY29tbW9uLXN5c3RlbQotY29uc3QgdWludDhfdCBjbGVhcktleUNlbmNTeXN0
ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAy
LCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Ci1jb25z
dCB1bnNpZ25lZCBjbGVhcktleUNlbmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2xlYXJLZXlDZW5j
U3lzdGVtSWQpOwotY29uc3QgdW5zaWduZWQga2V5SWRTaXplID0gMTY7Ci0KLWNsYXNzIENsZWFy
S2V5U3RhdGUgewotICAgIHVzaW5nIEtleVN0b3JlID0gSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxD
RE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PjsKLQotcHVibGljOgotICAgIHN0YXRpYyBDbGVhcktl
eVN0YXRlJiBzaW5nbGV0b24oKTsKLQotICAgIEtleVN0b3JlJiBrZXlzKCkgeyByZXR1cm4gbV9r
ZXlzOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPENsZWFy
S2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlTdG9yZSBtX2tleXM7Ci19
OwotCi1DbGVhcktleVN0YXRlJiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBzX3N0YXRlOwotICAgIHJldHVybiBz
X3N0YXRlOwotfQotCi1DbGVhcktleVN0YXRlOjpDbGVhcktleVN0YXRlKCkgPSBkZWZhdWx0Owot
CiBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEZhaWwgb24gbGFyZ2UgYnVmZmVycyB3aG9zZSBz
aXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4KQEAgLTg4LDcg
KzYyLDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVjdChjb25z
dCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1zdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZv
cm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJl
ZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkK
IHsKICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSByb290IG9iamVj
dCwgcGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgc3BlY2lm
aWVkICdsaWNlbnNlJyBmb3JtYXQuCkBAIC0xMDEsNyArNzUsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25z
dCBKU09OOgogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5PiBkZWNvZGVkS2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleT4+IGRlY29kZWRLZXlzOwog
ICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtl
eXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1
ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0OwpAQCAtMTE2
LDExICs5MCwxMSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6
OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgICAgICAgICAgaWYgKCFr
ZXlPYmplY3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmlu
ZygiayIsIGtleVZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKKyAgICAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKICAgICAgICAgICAgIGlm
ICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8ICFXVEY6OmJh
c2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBlbmQoeyBDRE1J
bnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShX
VEZNb3ZlKGtleUlERGF0YSkpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGtleVZhbHVl
RGF0YSkpIH0pOworICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6Y3JlYXRlKENE
TUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5SUREYXRhKSwg
V1RGTW92ZShrZXlWYWx1ZURhdGEpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTE4MSw3ICsxNTUsNyBAQCBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNl
bmNJbml0RGF0YShjb25zdAogICAgIHdoaWxlICh0cnVlKSB7CiAKICAgICAgICAgLy8gQ2hlY2sg
dGhlIG92ZXJmbG93IEluaXREYXRhLgotICAgICAgICBpZiAoaW5kZXggKyAxMiArIGNsZWFyS2V5
Q2VuY1N5c3RlbUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCisgICAgICAgIGlmIChpbmRleCArIDEy
ICsgQ2xlYXJLZXk6OmNlbmNTeXN0ZW1JZFNpemUgPj0gaW5pdERhdGFTaXplKQogICAgICAgICAg
ICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgICAgICBwc3NoU2l6ZSA9IGRhdGFbaW5kZXggKyAy
XSAqIDI1NiArIGRhdGFbaW5kZXggKyAzXTsKQEAgLTE5MSw3ICsxNjUsNyBAQCBzdGF0aWMgc3Rk
OjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJ
bml0RGF0YShjb25zdAogICAgICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgICAgICAv
LyAxMiA9IEJNRkYgYm94IGhlYWRlciArIEZ1bGwgYm94IGhlYWRlci4KLSAgICAgICAgaWYgKCFt
ZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIGNsZWFyS2V5Q2VuY1N5c3RlbUlkLCBjbGVhcktleUNl
bmNTeXN0ZW1JZFNpemUpKSB7CisgICAgICAgIGlmICghbWVtY21wKCZkYXRhW2luZGV4ICsgMTJd
LCBDbGVhcktleTo6Y2VuY1N5c3RlbUlkLCBDbGVhcktleTo6Y2VuY1N5c3RlbUlkU2l6ZSkpIHsK
ICAgICAgICAgICAgIGZvdW5kUHNzaCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMjAyLDcgKzE3Niw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2ln
bmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0CiAgICAgaWYg
KCFmb3VuZFBzc2gpCiAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKLSAgICBpbmRleCArPSAo
MTIgKyBjbGVhcktleUNlbmNTeXN0ZW1JZFNpemUpOyAvLyAxMiAoQk1GRiBib3ggaGVhZGVyICsg
RnVsbCBib3ggaGVhZGVyKSArIFN5c3RlbUlEIHNpemUuCisgICAgaW5kZXggKz0gKDEyICsgQ2xl
YXJLZXk6OmNlbmNTeXN0ZW1JZFNpemUpOyAvLyAxMiAoQk1GRiBib3ggaGVhZGVyICsgRnVsbCBi
b3ggaGVhZGVyKSArIFN5c3RlbUlEIHNpemUuCiAKICAgICAvLyBDaGVjayB0aGUgb3ZlcmZsb3cu
CiAgICAgaWYgKGluZGV4ICsgMyA+PSBpbml0RGF0YVNpemUpCkBAIC0yMTIsNyArMTg2LDcgQEAg
c3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlpZHNMb2NhdGlv
bkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJZHNDb3VudCBz
aXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5kZXggKyAoa2V5
SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0ZXMpKSA+PSBp
bml0RGF0YVNpemUpCiAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKICAgICBrZXlJZHNNYXAu
c2Vjb25kID0gaW5kZXg7IC8vIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgS2V5SWQgaW4gaW5p
dERhdGEuCkBAIC0yNTEsOSArMjI1LDkgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGV4dHJh
Y3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKGNvbnN0IFNoYXJlZEJ1ZmZlciYgaW5pdEQKICAgICAv
LyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1lbnQgb2YgdGhl
IGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNlcXVlbmNlIGNv
bnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
a2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6YmFzZTY0VVJM
RW5jb2RlKCZkYXRhW2luZGV4XSwga2V5SWRTaXplKTsKKyAgICAgICAgU3RyaW5nIGtleUlkID0g
V1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5SURTaXplSW5C
eXRlcyk7CiAgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsKLSAgICAgICAg
aW5kZXggKz0ga2V5SWRTaXplOworICAgICAgICBpbmRleCArPSBDbGVhcktleTo6S2V5SURTaXpl
SW5CeXRlczsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShr
ZXlJZHNBcnJheSkpOwpAQCAtNDU2LDQ0ICs0MzAsNiBAQCBPcHRpb25hbDxTdHJpbmc+IENETVBy
aXZhdGVDbGVhcktleTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQp
CiAgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0KIAotLy8gVGhpcyBpcyBmb3IgdGhyZWFkLXNhZmV0
eSBkdXJpbmcgYW4gYXJjaGl0ZWN0dXJhbCBzaXR1YXRpb24gdGhhdCBpcwotLy8gbGVzcyB0aGFu
IGlkZWFsLiBUaGUgR1N0cmVhbWVyIGRlY3J5cHRvcnMgY3VycmVudGx5IG5lZWQgdG8gaXRlcmF0
ZQotLy8gYWxsIGtub3duIHNlc3Npb24ga2V5cyB0byBmaW5kIHRoZSBrZXkgZGF0YSBmb3IgcHJp
bWluZwotLy8gR0NyeXB0LiBJZGVhbGx5LCBhbGwgZGVjcnlwdGlvbiB3b3VsZCBiZSB0aGUgcmVz
cG9uc2liaWxpdHkgb2YKLS8vIFByb3h5Q0RNIG9iamVjdCBsaWtlIHRoaXMgb25lLiBXaGF0IHRo
ZSBiYWNrZ3JvdW5kIEdTdHJlYW1lcgotLy8gdGhyZWFkIHdhcyBkb2luZyB3YXMgZ2V0dGluZyBj
b3BpZXMgKGkuZS4gcmVmKCkncykgb2YgU2hhcmVkQnVmZmVycwotLy8gY3JlYXRlZCBvbiB0aGUg
bWFpbi10aHJlYWQuIFdpdGggdGhlIG5ldyBzYWZldHkgYXNzZXJ0aW9ucyBpbgotLy8gV2ViS2l0
LCB3ZSBjYW4gbm8gbG9uZ2VyIGRvIHRoaXMuIEluc3RlYWQsIGNvbnZlcnQgdGhlIHJlZmNvdW50
ZWQKLS8vIFNoYXJlZEJ1ZmZlcnMgaW50byBTdHJpbmdzIHdoaWNoIGNhbiBiZSBzYWZlbHkgY29w
aWVkIGFjcm9zcwotLy8gdGhyZWFkcy4KLXN0YXRpYyBQcm94eUNETUNsZWFyS2V5OjpLZXkgaXNv
bGF0ZWRLZXkoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrZXkpCi17Ci0gICAgcmV0
dXJuIHsga2V5LnN0YXR1cywgU3RyaW5nKGtleS5rZXlJRERhdGEtPmRhdGEoKSwga2V5LmtleUlE
RGF0YS0+c2l6ZSgpKSwgU3RyaW5nKGtleS5rZXlWYWx1ZURhdGEtPmRhdGEoKSwga2V5LmtleVZh
bHVlRGF0YS0+c2l6ZSgpKSB9OwotfQotCi1jb25zdCBWZWN0b3I8UHJveHlDRE1DbGVhcktleTo6
S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBjb25zdAotewotICAgIC8vIFJl
dHVybiB0aGUga2V5cyBvZiBhbGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8gYmFja2dyb3Vu
ZCB0aHJlYWRzLgotICAgIFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFsbEtleXMgeyB9
OwotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAgIHNpemVfdCBp
bml0aWFsQ2FwYWNpdHkgPSAwOwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJLZXlT
dGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0aWFsQ2FwYWNp
dHkgKz0ga2V5VmVjdG9yLnNpemUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW5pdGlhbENhcGFjaXR5KTsKLQotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDogQ2xlYXJL
ZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0
byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgYWxsS2V5cy51bmNoZWNrZWRBcHBlbmQo
aXNvbGF0ZWRLZXkoa2V5KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFsbEtleXM7Ci19Ci0KLUNE
TUluc3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkoKQotICAgIDogbV9wcm94eUNE
TShhZG9wdFJlZigqbmV3IFByb3h5Q0RNQ2xlYXJLZXkoKSkpCi17Ci19Ci0KIENETUluc3RhbmNl
Q2xlYXJLZXk6On5DRE1JbnN0YW5jZUNsZWFyS2V5KCkgPSBkZWZhdWx0OwogCiBDRE1JbnN0YW5j
ZTo6U3VjY2Vzc1ZhbHVlIENETUluc3RhbmNlQ2xlYXJLZXk6OmluaXRpYWxpemVXaXRoQ29uZmln
dXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikKQEAgLTUzNSwzNiArNDcx
LDkgQEAgY29uc3QgU3RyaW5nJiBDRE1JbnN0YW5jZUNsZWFyS2V5OjprZXlTeXN0ZW0oKSBjb25z
dAogCiBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZUNsZWFyS2V5OjpjcmVh
dGVTZXNzaW9uKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3RhbmNlU2Vzc2lv
bkNsZWFyS2V5KCkpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlJ
REFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIGtleUlERGF0
YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6
OktleTo6a2V5VmFsdWVBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IlsiLCBrZXlWYWx1ZURhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOwotICAgIEFT
U0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgcmV0dXJuICprMS5rZXlJRERhdGEgPT0gKmsyLmtl
eUlERGF0YTsKLX0KLQotYm9vbCBvcGVyYXRvcjwoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5JiBrMSwgY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsKLSAgICBBU1NF
UlQoazEua2V5SUREYXRhKTsKLSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQotICAgIGlmIChr
MS5rZXlJRERhdGEtPnNpemUoKSAhPSBrMi5rZXlJRERhdGEtPnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIGsxLmtleUlERGF0YS0+c2l6ZSgpIDwgazIua2V5SUREYXRhLT5zaXplKCk7Ci0KLSAgICBy
ZXR1cm4gbWVtY21wKGsxLmtleUlERGF0YS0+ZGF0YSgpLCBrMi5rZXlJRERhdGEtPmRhdGEoKSwg
azEua2V5SUREYXRhLT5zaXplKCkpOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IG5l
d1Nlc3Npb24gPSBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKnRoaXMp
KTsKKyAgICB0cmFja1Nlc3Npb24obmV3U2Vzc2lvbik7CisgICAgcmV0dXJuIG5ld1Nlc3Npb247
CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExp
Y2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZm
ZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAtNTcyLDYgKzQ4
MSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExp
Y2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAgc3RhdGljIHVpbnQzMl90IHNfc2Vz
c2lvbklkVmFsdWUgPSAwOwogICAgICsrc19zZXNzaW9uSWRWYWx1ZTsKIAorICAgIG1fc2Vzc2lv
bklEID0gU3RyaW5nOjpudW1iZXIoc19zZXNzaW9uSWRWYWx1ZSk7CisKICAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAiY2VuYyIpKQogICAgICAgICBp
bml0RGF0YSA9IGV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKGluaXREYXRhLmdldCgpKTsK
IApAQCAtNTc5LDE4ICs0OTAsMjEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICAgICAg
aW5pdERhdGEgPSBleHRyYWN0S2V5SWRGcm9tV2ViTUluaXREYXRhKGluaXREYXRhLmdldCgpKTsK
IAogICAgIGNhbGxPbk1haW5UaHJlYWQoCi0gICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEgPSBXVEZNb3Zl
KGluaXREYXRhKSwgc2Vzc2lvbklkVmFsdWUgPSBzX3Nlc3Npb25JZFZhbHVlXSgpIG11dGFibGUg
eworICAgICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXMsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0gV1RGTW92ZShpbml0RGF0YSldKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIFN0cmluZzo6bnVt
YmVyKHNlc3Npb25JZFZhbHVlKSwgZmFsc2UsIFN1Y2NlZWRlZCk7CisgICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGluaXREYXRhKSwgbV9zZXNzaW9uSUQsIGZhbHNlLCBTdWNjZWVkZWQpOwog
ICAgICAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRl
TGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIGNvbnN0IFNoYXJl
ZEJ1ZmZlciYgcmVzcG9uc2UsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewot
ICAgIC8vIFVzZSBhIGhlbHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBjYWxsYmFjayBk
aXNwYXRjaCwgYXZvaWRpbmcKLSAgICAvLyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBj
YWxscy4KKyNpZiBMT0dfRElTQUJMRUQKKyAgICAvLyBXZSBvbmx5IHVzZSB0aGUgc2VzaW9uIElE
IGZvciBkZWJ1ZyBsb2dnaW5nLiBUaGUgdmVyYm9zZSBwcmVwcm9jZXNzb3IgY2hlY2tzIGFyZSBi
ZWNhdXNlCisgICAgLy8gdGhlIE1hYyBwb3J0IGhhcyAtV2Vycm9yIC1XdW51c2VkLXBhcmFtZXRl
ci4KKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklkKTsKKyNlbmRpZgogICAgIGF1dG8gZGlzcGF0
Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKGJvb2wgc2Vzc2lvbldhc0Ns
b3NlZCwgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiYmIGNoYW5nZWRLZXlzLCBTdWNjZXNzVmFs
dWUgc3VjY2VlZGVkKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNjA0LDUy
ICs1MTgsMjMgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5z
ZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKIAogICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJvb3QgPSBwYXJzZUpTT05PYmplY3QocmVzcG9uc2UpOwogICAgIGlmICghcm9vdCkg
eworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVzIHVwZGF0ZSBw
YXlsb2FkIHdhcyBub3QgdmFsaWQgSlNPTiIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNzVmFsdWU6
OkZhaWxlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSB1cGRhdGluZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIiwgc2Vzc2lvbklkLnV0
ZjgoKS5kYXRhKCkpOworICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxp
Y2Vuc2UgZm9yIHNlc3Npb24gJXMgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5zICV1IGtleXMiLCBz
ZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgaWYg
KGF1dG8gZGVjb2RlZEtleXMgPSBwYXJzZUxpY2Vuc2VGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAg
IC8vIFJldHJpZXZlIHRoZSB0YXJnZXQgVmVjdG9yIG9mIEtleSBvYmplY3RzIGZvciB0aGlzIHNl
c3Npb24uCi0gICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIHN0YXRlIG1hbmFnZW1lbnQg
Y29kZS4KLSAgICAgICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4mIGtleVZlY3Rv
ciA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5lbnN1cmUoc2Vzc2lvbklkLCBb
XSB7IHJldHVybiBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiB7IH07IH0pLml0ZXJh
dG9yLT52YWx1ZTsKLQotICAgICAgICBib29sIGtleXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
IGZvciAoYXV0byYgZGVjb2RlZEtleSA6ICpkZWNvZGVkS2V5cykgewotICAgICAgICAgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRGVjb2RlZCBhIGtleSB3aXRoIElEICVzIGFuZCBrZXkg
ZGF0YSAlcyIsIGRlY29kZWRLZXkua2V5SURBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29k
ZWRLZXkua2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgYXV0
byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwg
a2V5VmVjdG9yLmVuZCgpLAotICAgICAgICAgICAgICAgIFsmZGVjb2RlZEtleV0gKGNvbnN0IENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleSYgY29udGFpbmVkS2V5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250YWluZWRLZXkgPT0gZGVjb2RlZEtleTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRCAhPSBrZXlWZWN0b3IuZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBFeGlzdGlu
ZyBrZXkgZm91bmQgd2l0aCBkYXRhICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQtPmtleVZhbHVl
QXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgIGlmICgha2V5V2l0
aE1hdGNoaW5nS2V5SUQtPmhhc1NhbWVLZXlWYWx1ZShkZWNvZGVkS2V5KSkgewotICAgICAgICAg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGluZyBrZXkgc2luY2Ug
dGhlIGRhdGEgYXJlIGRpZmZlcmVudCIpOwotICAgICAgICAgICAgICAgICAgICAqa2V5V2l0aE1h
dGNoaW5nS2V5SUQgPSBXVEZNb3ZlKGRlY29kZWRLZXkpOwotICAgICAgICAgICAgICAgICAgICBr
ZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBUaGlzIGlzIGEg
bmV3IGtleSIpOwotICAgICAgICAgICAgICAgIGtleVZlY3Rvci5hcHBlbmQoV1RGTW92ZShkZWNv
ZGVkS2V5KSk7Ci0gICAgICAgICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBtX2tleVN0b3JlLmFk
ZEtleXMoV1RGTW92ZSgqZGVjb2RlZEtleXMpKTsKIAotICAgICAgICBMT0coRU1FLCAiRU1FIC0g
Q2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVjdG9yLnNpemUo
KSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgaGFzICV1
IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9y
ZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rvcj4gY2hhbmdl
ZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gU29ydCBi
eSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtleVZlY3Rvci5iZWdpbigpLCBrZXlW
ZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVj
dG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
a2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rv
cikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6
cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXku
c3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IFdURk1vdmUoa2V5U3RhdHVz
VmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24g
JXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsKKyAgICAgICAg
ICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3Rvcigp
OwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGTW92ZShj
aGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKQEAgLTY1Nyw0NyArNTQyLDMx
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3Qg
U3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgfQogCiAgICAgaWYgKHBhcnNlTGljZW5z
ZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUg
dGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAgICAgICBDbGVhcktleVN0YXRlOjpzaW5n
bGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7CisgICAgICAgIExPRyhFTUUsICJFTUUg
LSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNsZWFyaW5nIGFs
bCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BhcmVu
dEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAgICBtX2tleVN0
b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0cnVlLCBXVEY6
Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3JtYXQgd2FzIHJlY29nbml6ZWQuCisgICAg
TE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5bG9hZCB3YXMg
YW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKICAgICBk
aXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVk
KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNlc3Npb24oTGlj
ZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBjb25zdCBTdHJpbmcmLCBMb2FkU2Vz
c2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1bmN0b3Ig
dGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBsaWNhdGVk
IGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQot
ICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+JiYgZXhp
c3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VzcywgU2Vzc2lvbkxvYWRGYWlsdXJlIGxvYWRG
YWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAgICAgICAgICAg
IFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlzdGluZ0tleXMpLCBzdWNjZXNzLCBsb2Fk
RmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07
CisjaWZkZWYgTkRFQlVHCisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb25JZCk7CisjZW5kaWYKIAot
ICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5n
IGFsbCB0aGUga25vd24ga2V5cyBmb3IgdGhpcyBzZXNzaW9uLgotICAgIEtleVN0YXR1c1ZlY3Rv
ciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgewotICAgICAgICBhdXRvJiBrZXlzID0gQ2xlYXJLZXlT
dGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5cy5maW5kKHNl
c3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAgICAgICAgICBk
aXNwYXRjaENhbGxiYWNrKFdURjo6bnVsbG9wdCwgRmFpbGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6
Ok5vU2Vzc2lvbkRhdGEpOworICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNzaW9uSUQpOwor
ICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3JlLmNvbnZlcnRU
b0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksICZrZXlTdGF0
dXNWZWN0b3JdKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvJiBrZXlWZWN0b3IgPSBpdC0+dmFs
dWU7Ci0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZl
Y3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKLSAgICAg
ICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZjxTaGFy
ZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0dXMgfSk7Ci0g
ICAgfQogCi0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1ZlY3RvciksIFN1
Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgU3VjY2Vl
ZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgIH0pOwogfQogCiB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VT
ZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTcxMyw3ICs1ODIsMTIgQEAgdm9pZCBDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmluZyYsIENsb3Nl
U2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3Zl
U2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBlLCBSZW1vdmVT
ZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVyIGZ1
bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBkdXBs
aWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KKyNpZmRlZiBOREVCVUcKKyAgICBVTlVT
RURfUEFSQU0oc2Vzc2lvbklkKTsKKyNlbmRpZgorCisgICAgQVNTRVJUKHNlc3Npb25JZCA9PSBt
X3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQogICAgICAgICBbdGhp
cywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0b3ImJiBrZXlTdGF0dXNWZWN0b3IsIE9wdGlvbmFs
PFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3NhZ2UsIFN1Y2Nlc3NWYWx1ZSBzdWNjZXNzKSB7CiAg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNzI3LDM1ICs2MDEsMTcgQEAgdm9pZCBD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5n
JiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9y
IG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVzc2FnZSBpbiB0
aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3RhdHVzVmVjdG9y
IGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVzVmVjdG9yID0g
bV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNlZCgpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBmb3IgdGhl
IGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcgaWYgbm9uZSBpcyBmb3VuZC4KLSAgICAgICAgYXV0
byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAgICAgICAgYXV0
byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0ga2V5cy5lbmQo
KSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhLZXlTdGF0dXNWZWN0b3IgeyB9LCBX
VEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHJpZXZlIHRoZSBLZXkgdmVjdG9yLCBjb250YWlu
aW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uLCBhbmQKLSAgICAgICAgLy8gdGhlbiBy
ZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAgYXV0byBr
ZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1ZSk7Ci0gICAgICAgIGtleXMucmVtb3ZlKGl0KTsK
LQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmplY3QsIHBhaXJp
bmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFzZWQnIHN0YXR1cy4KLSAgICAgICAga2V5U3RhdHVz
VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAg
IGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9y
LnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4g
eyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKLQogICAgICAgICAvLyBD
b25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNlbnNlIHJlbGVhc2UnIGZvcm1h
dCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8gb2YgYmFzZTY0VVJMLWVuY29k
ZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNl
c3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRhLT5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyhX
VEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5SUREYXRhLT5kYXRhKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXplKCkpKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoa2V5LT5p
ZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAg
ICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5jb2RlKGtleS0+
aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkpOwogICAgICAg
ICB9CkBAIC03NjYsNiArNjIyLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6
cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKICAgICAgICAg
bWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRhdGEoKSwgbWVz
c2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0KIAorICAgIG1fa2V5U3RvcmUucmVtb3ZlQWxs
S2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBS
ZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xl
YXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5kZXggODViMzE5YjFhMzhjMTIxNjk5MTk3NWI4
MDE5YWQyYjE2YjM2YzE0Ny4uNjcwNGFlN2E5NTdmMzJmZTFmODQ5ODNlZDNiM2Y2NTAyYTUzMTVh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xl
YXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC0zMSwxNCArMzEsMjggQEAKICNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5jbHVkZSAiQ0RNRmFjdG9yeS5oIgotI2luY2x1
ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCituYW1lc3BhY2UgQ2xlYXJLZXkgeworCisvLyBDbGVhcktleSBDRU5DIFN5c3RlbUlE
LgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNjb21tb24tc3lz
dGVtCitjb25zdCB1aW50OF90IGNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVmLCAw
eGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAweDUy
LCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjZW5jU3lzdGVtSWRTaXplID0g
c2l6ZW9mKGNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhDVFJCbG9ja1NpemVJbkJ5
dGVzID0gMTYsCisgICAgS2V5SURTaXplSW5CeXRlcyA9IDE2LAorICAgIElWU2l6ZUluQnl0ZXMg
PSAxNiwKK307CisKK30gLy8gbmFtZXNwYWNlIENsZWFyS2V5CisKIGNsYXNzIENETUZhY3RvcnlD
bGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc3LDI3ICs5MSwxMiBAQCBwdWJsaWM6CiAgICAgT3B0aW9u
YWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsK
IH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJveHlDRE0gewor
Y2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0YW5jZVByb3h5
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4gewogcHVibGljOgot
ICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBz
dGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1
ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXkoKSA9IGRlZmF1
bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7Ci1wcml2YXRl
OgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENETUluc3RhbmNl
Q2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7Ci1wdWJsaWM6Ci0gICAgQ0RNSW5zdGFuY2VDbGVhcktl
eSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAgIC8vIENETUlu
c3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0KLQogICAgIFN1
Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RNS2V5U3lzdGVt
Q29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0aW5jdGl2ZUlk
ZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUgc2V0UGVyc2lz
dGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0NyArMTA0LDIyIEBAIHB1Ymxp
YzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBm
aW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJl
ZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLQotICAgIHN0
cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0dXM7
Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsKLSAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAgIFN0cmluZyBrZXlJREFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3Q7Ci0K
LSAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZvdGhlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAgICBBU1NFUlQo
b3RoZXIua2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiAqa2V5VmFsdWVEYXRhID09
ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUd28ga2V5cyBh
cmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUgYW5k
IHN0YXR1cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsxLCBj
b25zdCBLZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURz
LCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAgICAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0KLSAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAh
KG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGsxLCBrMikg
JiYgIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPD0o
Y29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPihrMSwgazIp
OyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgS2V5ICZrMSwgY29uc3Qg
S2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgfTsKLQotICAgIFJl
ZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3h5Q0RN
OyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBtX3Byb3h5Q0RNOwogfTsKIAog
Y2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFu
Y2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShDRE1JbnN0YW5j
ZUNsZWFyS2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShwYXJlbnQpIHsg
fQogICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcm
IGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxi
YWNrJiYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNl
bnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYpIGZp
bmFsOwogICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgdm9pZCBjbG9z
ZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVt
b3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3JlUmVjb3JkT2ZL
ZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc2Vz
c2lvbklEOworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFyZW50SW5zdGFuY2U7CisgICAg
S2V5U3RvcmUgbV9rZXlTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0ZjEwMjk5Nzgz
ZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgU3VjY2Vzc1Zh
bHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogICAg
IFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpIGZpbmFsOwog
ICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAg
ICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0
cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5hbDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBhMTJl
ZjRmNmRiYTZmMDE1ZTc2MTUxZjE0N2NjNmMwNzllNjJkYTdlLi41NDVhY2M3NWMwMTdkYjlkMmE3
NDhjOTlkNDRiMWE2MzIwZTdhM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNjUsNiArNjUsNyBAQAogCiAjaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKICNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNETVByb3h5
Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlw
dG9yR1N0cmVhbWVyLmgiCkBAIC0xNzg4LDYgKzE3ODksNTAgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIH0s
IHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIEluaXREYXRhIGluaXRE
YXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsK
KyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzKG1l
c3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJmb3VuZCAlenUg
cHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWls
YWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBwcm90
ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBl
dmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9
IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5n
ZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAg
aW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAgICAgICAgICBt
X2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2ZW50LmdldCgp
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5pdERhdGE7Cit9CisKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVudCgpCit7Cisg
ICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxp
bmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0aW5nIGZvciBhIENETSBpbnN0
YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBm
b3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFsc2U7Cisg
ICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xkTG9jayhtX2NkbUF0
dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9IG1fY2RtQXR0YWNobWVudENv
bmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3MsIFt0aGlzXSgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogewogICAgIGlm
IChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNU
SU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0MSArMTg2OCw5IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdl
KiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBpZiAoIWdfc3Ry
Y21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQiKSkg
ewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUigi
Y2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250
ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0tcHJlZmVycmVkLWRl
Y3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7Ci0KLSAgICAgICAgSW5p
dERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayht
X3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHBy
b3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAgICBHU1RfVFJBQ0UoImZv
dW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJv
dGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYg
ZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAg
ICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRf
cGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBu
dWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7ZXZlbnRLZXlTeXN0
ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMu
YWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3ZlKGluaXRE
YXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZv
ciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0gZmFsc2U7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tlciA9IGhvbGRM
b2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAgIGRpZENETUF0dGFjaCA9IG1f
Y2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3Ms
IFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNDRE1BdHRhY2hlZCgpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlkQ0RNQXR0YWNoICYmICFp
c1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQocGFyc2VJbml0
RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIGJvb2wgaXNDRE1B
dHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAgICAgIGlmIChpc0NETUF0dGFj
aGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0
ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5
c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUlu
c3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5
c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCks
IHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsK
IApAQCAtMTg2NSwxMCArMTg3OCwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIEdz
dFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVj
dHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRl
eHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZl
cnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5n
ZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0
YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChw
aXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBubyBDRE0gYXZhaWxhYmxlIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMiw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgICAg
ICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgIGdzdF9tcGVndHNf
c2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1rZXkgbWVzc2FnZSBmcm9tICVz
IiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgICAgICAgICAgc2V0V2FpdGlu
Z0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZGVjcnlwdG9ycyBzaG91
bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIgYmVpbmcgY3JlYXRlZCBhbmQg
bGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5IGFyZSBub3QgYW5kIGN1cnJl
bnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYWtlIHRoaXMgdmVyeSBl
YXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ugc29vbiBhbmQgaXQgZG9lcyBu
b3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZQot
ICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUgbWVhbnRpbWUsIGZvcmNlIGF0
dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQuCi0gICAgICAgICAgICBhdHRl
bXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAgICAgfSBlbHNlIGlmIChnc3Rf
c3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktcmVjZWl2ZWQiKSkgewotICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLWtleS1yZWNlaXZlZCBt
ZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAg
ICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiaHR0cC1oZWFkZXJz
IikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlByb2Nlc3Np
bmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKQEAgLTM3Mjgs
MTQgKzM3MjksMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3Rh
bmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKKyAgICBtX2NkbUluc3RhbmNlID0g
cmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3RhbmNlKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3RhbmNlLT5zZXRQbGF5ZXIo
bV9wbGF5ZXIpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFByb3h5KGFkb3B0UmVmKCpuZXcgQ0RN
UHJveHlDbGVhcktleSkpOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAg
R1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygi
ZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0
dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwotICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZ
UEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1wcm94eSIsIEdfVFlQ
RV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgpLCBudWxscHRyKTsKICAgICBn
c3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29u
dGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJD
RE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0YW5j
ZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2Rt
SW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fY2RtQXR0
YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBhbGwgd2FpdGVycywgc2luY2Ug
c2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgd2FpdGluZyBmb3IgYSBDRE0u
CkBAIC0zNzU3LDcgKzM3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAgR1NUX0RFQlVH
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBpbnN0YW5jZSAlcCwgc2V0
dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7CiAgICAgbV9jZG1JbnN0
YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKKyAgICBH
UmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJk
cm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1Rf
RUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiB9CiAKQEAgLTM3OTAs
NTEgKzM3OTQsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVBy
b3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5j
b3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCBpc1dhaXRpbmdG
b3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdlIG9y
IGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJlIHN0
aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoImlzV2FpdGluZ0ZvcktleSAl
cywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcoaXNXYWl0aW5nRm9yS2V5
KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKGlzV2FpdGlu
Z0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2FpdGluZ0ZvcktleSAmJiB0aGlz
LT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzV2FpdGluZ0Zv
cktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBj
aGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAgbV9w
bGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGlwZWxp
bmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3RhbmNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRfc3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKLQotICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0
X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1w
dHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAgICBpZiAoc3RhdGUgPj0g
R1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3RfZWxlbWVudF9xdWVyeSht
X3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRSgicXVlcnkg
cmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPj0gR1NUX1NUQVRF
X1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUgcGlwZWxpbmUgaXMg
ZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCB1cCBhbmQg
cnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQgYXNrIHRoZSBkZWNy
eXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBpdGVyYXRv
cihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0g
ICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0OwotICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xkKGl0ZXJhdG9yLmdl
dCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRlciBkYXRhKSAtPiBn
Ym9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9FTEVN
RU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAgICAgICAgR3N0UXVlcnkq
IHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiAhV0VCS0lU
X0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1lbnRfcXVlcnkoZWxl
bWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnkuZ2V0KCkpOwotICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0gICAg
ICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQoKSk7Ci0gICAgICAg
IH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOwotICAgICAg
ICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQotICAgICAgICAgICAg
R1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7Ci0gICAgICAgIHJlc3Vs
dCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAgICAgICAgR1NUX1RSQUNF
KCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJlc3VsdCwgYm9vbEZv
clByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBiMmJiNTQxYTMy
NmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li41MjFiMjBkMTFjYzhkZDk0YmUyODRkNzQ2
OTljZDI3MTdiNGUwNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2Vj
dGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNlbmRpZgorCiB0eXBlZGVmIHN0
cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5cGVkZWYgc3RydWN0IF9H
c3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBH
c3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1lbnRNdXRleDsKICAgICBDb25k
aXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJlZlB0cjxjb25zdCBDRE1JbnN0
YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VQcm94eT4gbV9jZG1J
bnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nlc3Mg
dG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0PHVpbnQzMl90PiBtX2hh
bmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jZG1JbnN0YW5jZTsgfQogICAg
IHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CiAgICAgdm9pZCBpbml0
aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAgICB2b2lkIHNldFdhaXRp
bmdGb3JLZXkoYm9vbCk7CisgICAgSW5pdERhdGEgcGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9u
TWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgYm9vbCB3YWl0Rm9yQ0RNQXR0YWNobWVudCgpOwog
I2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0aW5nRG93bjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
UHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNDA0NTI4N2IzOTZh
ODUxMjgyN2ZjOGNiYTg0N2EyNDFhNTQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3Bw
CkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
RE1Qcm94eUNsZWFyS2V5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWFkVUludDMyKGNvbnN0
IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCYgb2Zmc2V0LCB1aW50
MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQsIG9mZnNldCA8PSBidWZmZXJT
aXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNpemVvZih2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHNp
emVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZFVJ
bnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBzaXplX3QmIG9m
ZnNldCwgdWludDE2X3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zmc2V0LCBvZmZzZXQg
PD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBzaXplb2YodmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hzKCpyZWludGVy
cHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkpOworICAgIG9m
ZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIHt9CisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5KCkKK3sKKyAg
ICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOworfQorCitib29sIENETVByb3h5Q2xl
YXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYgaW5w
dXQpCit7CisgICAgdWludDhfdCBjdHJbQ2xlYXJLZXk6OkFFUzEyOENUUkJsb2NrU2l6ZUluQnl0
ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09IDgpIHsKKyAgICAgICAgLy8gSVNP
L0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKKworICAgICAgICAvLyBXaGVuIGFuIDgtYnl0
ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAgICAgIC8vIGJ5
dGVzIG9mIHRoZSAxNiBieXRlIElWIChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBzZXQgdG8KKyAg
ICAgICAgLy8gemVyby4KKyAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOworICAgICAgICBt
ZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7CisgICAgfSBlbHNlCisgICAgICAgIG1lbWNweShjdHIs
IGlucHV0Lml2LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcyk7CisKKyAgICBpZiAoZ2NyeV9lcnJv
cl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1fZ2NyeUhhbmRsZSwgY3RyLCBD
bGVhcktleTo6SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVBy
b3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIsIGdwZ19zdHJlcnJv
cihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldERlY3J5cHRpb25L
ZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyBGSVhNRTogVW5uZWNl
c3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3RpbGwgZXhwb3NpbmcKKyAgICAv
LyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0IEFQST8gVGhlc2UgYnVmZmVy
cyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3QgYSBodWdlIGRlYWwsIEkgZ3Vl
c3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAgIGtleUlEVmVjLmFwcGVuZChp
bi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBhdXRvIGtleURhdGEgPSBnZXRP
cldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0YSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtl
eShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+c2l6ZSgpKSkgeworICAg
ICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVy
X3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94eUNsZWFyS2V5
OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICBp
ZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1zYW1wbGUgZGVj
cnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5
dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9k
ZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNyeXB0ZWRCdWZm
ZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5
Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdfc3RyZXJyb3Io
Y2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0U3Vic2FtcGxl
ZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVuY3J5cHRlZEJ1
ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJCeXRlT2Zmc2V0
ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7CisgICAgd2hpbGUgKGVuY3J5
cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcykg
eworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsKKyAgICAgICAg
dWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAgICAgIGlmIChz
dWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsKKyAgICAgICAgICAgIGlmICgh
cmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVy
U2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUNsZWFy
Qnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5Q2xlYXJL
ZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vic2FtcGxlIGF0
IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQzMihpbnB1dC5zdWJz
YW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBs
ZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkgeworICAgICAg
ICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gY291bGQgbm90IHJl
YWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5kZXggJXUiLCBz
dWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAgICAgICAgc3Vic2Ft
cGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyAt
IGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhN
RTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBub3Qgc3VyZSBpZiB0aGVyZSdz
IGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAgICAgIExPRyhFTUUsICJFTUUg
LSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAoJWx1IGJ5dGVzIGxlZnQgdG8g
ZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtQ2xlYXJCeXRlcywgaW5wdXQu
ZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsK
KworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBsZU51bUNsZWFy
Qnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSB7CisgICAg
ICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5j
cnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUluZGV4LCBzdWJz
YW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMg
LSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICAgICAgaWYgKGdjcnlfZXJy
b3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5SGFuZGxlLCBpbnB1
dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0LCBzdWJzYW1wbGVO
dW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1F
IC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQpOiAlcyIsIGdw
Z19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVkQnVmZmVyQnl0ZU9mZnNldCAr
PSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0KENETVBy
b3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAgaWYgKCFjZW5j
U2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNyeXB0aW9uS2V5KGlucHV0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0LmlzU3Vic2FtcGxlZCgp
ID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNEZWNyeXB0RnVsbFNhbXBsZShp
bnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdjcnlwdCgpCit7
CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJm1fZ2NyeUhh
bmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgR0NSWV9DSVBI
RVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAt
IEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5vdCBnZXQgdGhpcyBmYXIgd2l0
aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVh
cktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9D
RE1Qcm94eUNsZWFyS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyNDBjOWY4ZDRjZTY3YWFiZDFkZmVkMDdi
NjZiNTEwNDEyMThiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5oCkBAIC0wLDAgKzEsMTA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKwor
I2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9uLmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhp
cyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hvdWxkIHVzZSB0
byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3MgQ0RNUHJveHlD
bGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VXZWFrUHRyPENE
TVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7Citw
dWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleSgpCisgICAgeworICAgICAgICBpbml0aWFsaXpl
R2NyeXB0KCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXkoKTsKKworICAg
IC8vIEZJWE1FOiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFNoYXJlZEJ1
ZmZlcnMsCisgICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXplX3R9IGlkaW9t
cyBmb3IgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4IHRoYXQgc29t
ZWhvdy4gTm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAgICAvLyB0aGV5
J3JlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWluCisgICAgLy8g
dGhyZWFkLXNhZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQgY291bGQg
YmUKKyAgICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBoZWxwZXJzIGZv
ciBkcm9wcGluZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJhdG9yLWF3YXJl
IGNvbnRhaW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsKKyAgICAgICAg
Ly8gRklYTUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGllZCB0eXBlcy4K
KyAgICAgICAgY29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBrZXlJRFNpemVJ
bkJ5dGVzOworCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBzaXplX3QgaXZT
aXplSW5CeXRlczsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7CisgICAgICAg
IHNpemVfdCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAvLyBGSVhNRTog
R1N0cmVhbWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3ZSB3YW50IHRv
IGdldCByaWQgb2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFyc2UgaXQgYmVm
b3JlCisgICAgICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZlIGEgVmVjdG9y
PHNpemVfdD4gdGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9kZWNyeXB0ZWQv
Y2xlYXIvZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpwYWlyPHNpemVf
dCwgc2l6ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBvZiBjbGVhci9k
ZWNyeXB0ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAgICAgLy8gYmVj
b21lIGEgc3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9yIGV4YW1wbGUu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3
MzAKKyAgICAgICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAgICAgICAgc2l6
ZV90IHN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90IG51bVN1YnNh
bXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJldHVybiBudW1T
dWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlvbmFsIGluLXBs
YWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBHU3RyZWFtZXIt
c3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisgICAgLy8gZGF0
YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3aXRoIGl0Lgor
ICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBv
bmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAgLy8gd2Ugd2ls
bCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVzLiBDYW4gd2UK
KyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAgYm9vbCBjZW5j
U2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAgICBib29sIGNl
bmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wg
Y2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAgIGJvb2wgY2Vu
Y0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBXZWJDb3JlIGZvciBjcnlwdG8u
Li4KKyAgICBnY3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0YTkuLjU4M2Yy
NjE4NmFkZjhiNzg3YmI5MzM2Nzk3MTZiMDQ4M2YxZDJmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0y
NSw2ICsyNSw3IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1F
UikKIAogI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNUHJveHlDbGVhcktl
eS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckVN
RVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGdjcnlwdC5oPgpAQCAtMzcsMTIgKzM4LDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9DS19ERUNSWVBU
X0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlIHsKLSAgICBS
ZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0gICAgZ2NyeV9jaXBoZXJfaGRfdCBo
YW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+IGNkbVByb3h5OwogfTsKIAogc3Rh
dGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGljIGJvb2wgaGFuZGxlS2V5UmVzcG9u
c2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVmUHRyPFByb3h5
Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4pOwogc3RhdGljIGJvb2wgZGVj
cnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdiwg
R3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1YlNhbXBsZXND
b3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJ
Qyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkpOwpAQCAtODQs
NyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfY2xh
c3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25TeXN0ZW1JZCA9
IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVVSUQ7Ci0gICAgY2VuY0NsYXNzLT5o
YW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhhbmRsZUtleVJlc3BvbnNlKTsK
KyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVOQ1BUUihjZG1Q
cm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVCVUdfRlVOQ1BU
UihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpAQCAtOTMsNjEgKzkzLDMyIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFzc19pbml0KFdl
YktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJf
a2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2VsZikKIHsKICAg
ICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFf
Q0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAgIHNlbGYtPnByaXYgPSBwcml2Owog
ICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKCk7Ci0gICAg
aWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2LT5oYW5kbGUp
LCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZX0NJUEhFUl9T
RUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBjcmVh
dGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsK
LSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQogCiBzdGF0aWMgdm9pZCBmaW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHQqIHNl
bGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOwogICAgIFdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgZ2NyeV9jaXBoZXJf
Y2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFs
aXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3BvbnNlKFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94eUNETT4gcHJv
eHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHkpCiB7CiAgICAg
V2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NL
X0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAg
IHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETUNsZWFyS2V5Kj4ocHJv
eHlDRE0uZ2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBwcml2LT5jZG1Q
cm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KGNkbVByb3h5LmdldCgp
KTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0YXRpYyBib29sIGZpbmRBbmRT
ZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBTdHJp
bmcmJiBrZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1
ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50LCBHc3RCdWZm
ZXIqIHN1YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtleVZhbHVlOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+aXNvbGF0ZWRLZXlzKCkpIHsKLSAg
ICAgICAgaWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAgICAgICAgICAgIGtleVZhbHVl
ID0ga2V5LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHByaXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRpb24ga2V5Iik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSA9
PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBo
ZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hhcmFjdGVyczgoKSwga2V5VmFsdWUu
c2l6ZUluQnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiZ2NyeV9j
aXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQorICAgIFdlYktpdE1l
ZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DS19ERUNSWVBU
X0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKIAotc3RhdGljIGJv
b2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RC
dWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZmZXIqIGJ1ZmZl
ciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxlc0J1ZmZlcikK
LXsKLSAgICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
Im5vIElWIGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVmZmVyIHx8ICFi
dWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxpZCBkZWNyeXB0
KCkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1Nywy
NyArMTI4LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRp
b25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOwotICAgIGlmIChtYXBw
ZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgp
OwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSBDTEVBUktF
WV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xF
QVJLRVlfU0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01F
RElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdj
cnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xFQVJLRVlfU0laRSk7Ci0gICAg
aWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImdjcnlf
Y2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIgdG8gZGVjcnlwdCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBtYXBwZWRLZXlJZEJ1ZmZlciA9IFdl
YkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JFQUQp
OwogICAgIGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7CkBAIC0xOTAsNzIgKzE0MCwy
OSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmcobWFwcGVkS2V5SWRCdWZmZXItPmRh
dGEoKSwgbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwotCi0gICAgdW5zaWduZWQgcG9zaXRp
b24gPSAwOwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKLQotICAgIGlmICghc3ViU2Ft
cGxlQ291bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjogJXp1IGVuY3J5
cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBDaGVjayBp
ZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVyLT5zaXplKCkp
IHsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5o
YW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUoKSwgMCwgMCk7
Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBncGdf
c3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gQ2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBudWxsLgotICAgIGlmICghc3ViU2Ft
cGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJFcnJvciwgdGhl
IHN1YlNhbXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICBhdXRvIG1hcHBlZFN1YlNhbXBs
ZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1wbGVzQnVm
ZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZlcikgewot
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNhbXBsZSBi
dWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdVbmlxdWVQdHI8
R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3ViU2FtcGxl
c0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCkpKTsKLSAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIsIHBvc2l0aW9u
LCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRC
dWZmZXItPnNpemUoKSkgewotICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKLSAgICAg
ICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAgICAgIGlmIChzYW1wbGVJbmRl
eCA8IHN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9n
ZXRfdWludDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0NsZWFyKQotICAgICAgICAgICAgICAg
IHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIuZ2V0KCksICZuQnl0ZXNF
bmNyeXB0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAidW5z
dXBwb3J0ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwcGVk
QnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAodG9k
bz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXItPnNpemUoKSAt
IHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7Ci0gICAgICAgIGlm
IChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwg
InN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwgc2Ft
cGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlv
bik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+
aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQs
IDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNyeXB0aW9uIGZh
aWxlZDogJXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9z
aXRpb24gKz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IG1h
cHBlZFN1YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlDbGVhcktleTo6Y2VuY0RlY3J5cHRD
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9IG1hcHBlZEtleUlkQnVmZmVyLT5k
YXRhKCk7CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVzID0gbWFwcGVkS2V5SWRCdWZmZXIt
PnNpemUoKTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEoKTsKKyAgICBj
b250ZXh0Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpOworICAgIGNvbnRl
eHQuZW5jcnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5l
bmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpOworICAgIGNv
bnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGlmICghc3Vic2FtcGxl
Q291bnQpCisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IG51bGxwdHI7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVmZmVyKTsKKyAgICAgICAgbWFwcGVk
U3Vic2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YnNh
bXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGlmICghbWFwcGVkU3Vic2FtcGxl
c0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbWFwcGVkU3Vic2FtcGxl
c0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZmZXJTaXplSW5C
eXRlcyA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNlbmNEZWNyeXB0KGNvbnRleHQp
OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2ODNkMDQ3NDg2MGY2ZWY4MTdm
MzFjZGMxNWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJhMTYyNDRjMDc5ODAzNzQ3YzMw
NDEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRD
b21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMjUsMzQgKzI1LDM0IEBA
CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5j
bHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRl
ICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6UHJveHlDRE07Cit1c2luZyBX
ZWJDb3JlOjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dF
VF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lU
X1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQ
cml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7Ci0gICAgUmVm
UHRyPFByb3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtleVJlY2VpdmVkIHsgZmFsc2UgfTsK
LSAgICBib29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotICAgIExvY2sgbXV0ZXg7Ci0gICAg
Q29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJveHk+IGNkbVByb3h5OworCisg
ICAgTG9jayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29uZGl0aW9uIGNkbUF0dGFjaG1lbnRD
b25kaXRpb247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4U2Vjb25kc1RvV2Fp
dEZvckNETVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gY2hhbmdl
U3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwogc3RhdGljIHZv
aWQgZmluYWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENhcHMqIHRyYW5zZm9ybUNhcHMoR3N0
QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENhcHMqKTsKIHN0
YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSosIEdz
dEJ1ZmZlciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5z
Zm9ybSosIEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VU
cmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7Ci1zdGF0aWMgYm9vbCBpc0NE
TUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqKTsK
IHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQqKTsKIAotCiBH
U1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9k
ZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9t
ZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CiAKQEAgLTc2LDcg
Kzc2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5
cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3Mt
PnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJhbnNmb3JtQ2Fwcyk7CiAgICAg
YmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBGQUxTRTsK
ICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUihz
aW5rRXZlbnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnF1ZXJ5ID0gR1NUX0RF
QlVHX0ZVTkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
KSk7CiB9CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zv
cm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogewog
ICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVE
SUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFU
RShzZWxmKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CiAKLSAgICAvLyBU
aGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZvciBpdC4KLSAg
ICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2Vs
ZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKLSAgICAgICAgaWYg
KEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VEIHx8IChHU1Rf
U1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5H
ICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NUQVRFX1BBVVNF
RCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0IHByb2Nlc3Mg
a2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgICAgIHJl
dHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNlbmQg
ImRybS1jZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRoZSBwbGF5ZXIgdG8gcmVzZW5k
IHRoZSBDRE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGluZm9ybSB3ZSBhcmUgd2FpdGluZyBm
b3Iga2V5LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gdHJ1ZTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVzc2FnZV9uZXdf
ZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiZHJtLXdh
aXRpbmctZm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+Y2RtQXR0YWNo
bWVudE11dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihwcml2LT5tdXRl
eCwgU2Vjb25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAgIHJldHVybiBwcml2LT5rZXlSZWNl
aXZlZDsKKyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290aWF0ZWQgYmVm
b3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdCBhdmFpbGFibGUsIGdvaW5n
IHRvIHdhaXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25kaXRpb24u
d2FpdEZvcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1heFNlY29uZHNUb1dhaXRGb3JDRE1Q
cm94eSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBwcml2LT5jZG1Qcm94eTsKICAgICAg
ICAgfSk7Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIGlmICgh
cHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkNE
TVByb3h5IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsKICAgICAgICAgICAgIHJldHVybiBH
U1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIpOwotICAgICAgICBwcml2LT53YWl0
aW5nRm9yS2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1Rf
RUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVDVChzZWxmKSwg
Z3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVjZWl2ZWQiKSkpOworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFkZHJlc3MgJXAi
LCBwcml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAgICAgR3N0UHJvdGVjdGlvbk1ldGEq
IHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9uTWV0YSo+KGdz
dF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsKQEAgLTIwNywzMiArMTk3LDMw
IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9y
bSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciAlcCIs
IGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgIH0K
KyAgICBhdXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2NvcGVFeGl0KFti
dWZmZXIsIHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEo
YnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAg
IH0pOwogCiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRf
dWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUiLCAmaXZTaXplKSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUiKTsKLSAgICAg
ICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0
YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9S
VEVEOwogICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRlZDsKICAgICBpZiAoIWdzdF9zdHJ1
Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJlbmNyeXB0ZWQiLCAmZW5j
cnlwdGVkKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0
IGVuY3J5cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVy
LCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBpZiAoIWl2U2l6ZSB8
fCAhZW5jcnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCBy
ZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAgIGlmICghaXZT
aXplIHx8ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9CiAK
ICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0aW9uIG1ldGE6ICUiIEdTVF9QVFJf
Rk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1bnNpZ25lZCBzdWJTYW1wbGVD
b3VudDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CiAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50Iik7Ci0gICAg
ICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1l
dGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBP
UlRFRDsKICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJu
IHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZm
ZXIpCiAgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1l
dGEtPmluZm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlcyIpOwot
ICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBzdWJTYW1wbGVzQnVmZmVyID0g
Z3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAgICBpZiAoIXN1YlNhbXBsZXNCdWZm
ZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIlRoZXJlIGlzIG5vIHN1
YnNhbXBsZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1wbGUgY291bnQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9CiAgICAgfQog
CiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9uTWV0YS0+aW5m
bywgImtpZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNlbGYsICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVyIik7Ci0gICAgICAgIGdzdF9i
dWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90
ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAg
ICB9CiAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyKHZh
bHVlKTsKQEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0cmFuc2Zvcm1J
blBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgIHZh
bHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmluZm8sICJpdiIp
OwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFp
bGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21l
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwog
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI3MCw3
MSArMjU5LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFz
ZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgR1NUX1RSQUNFX09CSkVD
VChzZWxmLCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xhc3MtPmRlY3J5cHQoc2VsZiwgaXZC
dWZmZXIsIGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJTYW1wbGVzQnVm
ZmVyKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0aW9uIGZhaWxl
ZCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVpbnRlcnByZXRf
Y2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZm
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgcmV0
dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxl
KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCitzdGF0aWMgYm9vbCBp
c0NETVByb3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNl
bGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsKKyAgICByZXR1
cm4gcHJpdi0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQocHJpdi0+bXV0ZXguaXNMb2NrZWQo
KSk7Ci0KLSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxF
TUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0gICAgICAgIC8vIEFjY29yZGluZyB0
byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRl
eHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3RyZWFtIG9u
ZSBhbmQgdGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1lc3NhZ2UuIEluIHRoaXMgY2FzZSB0
aGF0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ugb25seSB0aGUgYXBwIChwbGF5
ZXIpIGFuc3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVyeSBpcyBnb2luZyB0byBzb2x2ZSBp
dC4gQSBtZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRoZSBwbGF5ZXIg
c2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3RhbmNlIGFuZCBp
ZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcgZm9yIG9uZSBh
cyBpdCBpcwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBj
b2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyBy
ZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9y
IGJ1cwotICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhlcmUuCi0gICAgICAgIGlmIChj
b250ZXh0KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNk
bS1pbnN0YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1ZSA/IHJlaW50
ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSkgOiBudWxs
cHRyOwotICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RNKQotICAgICAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAl
cCwgcmVmY291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQoKSwgcHJpdi0+cHJveHlDRE0tPnJl
ZkNvdW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdTVF9UUkFDRV9P
QkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQiKTsKK3N0YXRpYyBDRE1Qcm94
eSogZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0t
cHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQgdGhl
IGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVwc3Ry
ZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4gdGhpcyBjYXNl
IHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRoZSBhcHAgKHBs
YXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5nIHRvIHNvbHZl
IGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUgcGxheWVyIHNl
dHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5jZSBhbmQgaWYg
aXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZvciBvbmUgYXMg
aXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9ybSBjb2RlLiBU
aGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1cyByZXF1ZXN0
IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMgbm9yIGJ1cwor
ICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4dCkgeworICAg
ICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2Nv
bnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIpOworICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRfY2FzdDxDRE1Q
cm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChwcm94
eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEg
bmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwgcHJveHktPnJl
ZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Qcm94eSBub3Qg
YXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RSQUNFX09CSkVD
VChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmludGluZyhwcml2
LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFz
ZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lkIGF0dGFjaENE
TVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIENETVByb3h5
KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxm
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNS
WVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9DTEFTUyhz
ZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRjaCAoR1NUX0VW
RU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1f
T09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0
aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9uIHRvIG91dC1v
Zi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAgICAgLy8gcHJl
ZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90ZWN0aW9uCi0g
ICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0
aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3RhbmNlQXZhaWxh
YmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBDRE0g
aW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwcml2LT5j
ZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkF0dGFjaGlu
ZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHByb3h5OworICAg
IGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsKKyAgICBwcml2
LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFibGUoc2VsZikp
IHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgQ0RNUHJveHkq
IHByb3h5ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAgICAgaWYgKHBy
b3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7CisgICAgICAg
ICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZyb20gY29udGV4
dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBpZiAoa2xh
c3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnByb3h5Q0RNKSkgewotICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkIik7Ci0gICAgICAgICAgICBw
cml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5jb25kaXRpb24ubm90
aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29s
ZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBl
dmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmID0g
V0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
RkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90ZWN0aW9uIGV2
ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9mLWJhbmQgZGF0
YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAgIC8vIHByZWZlcnJlZCBzeXN0ZW0g
SUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgorICAgIC8vIGV2ZW50cyB3
aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGV5IG11c3QgYmUKKyAgICAv
LyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsK
KyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAgICAgICAgQVNT
RVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVtcHQtdG8tZGVjcnlwdCIpKTsKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgYXR0ZW1wdC10by1kZWNyeXB0
Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxhYmxlKHNlbGYp
OwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1bHQgPSBUUlVF
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwxNiArMzU0LDYg
QEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJh
bnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jv
b2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQYWREaXJlY3Rp
b24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRlY3J5cHRvci13
YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25E
ZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRfR0VUX1BSSVZB
VEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55LWRlY3J5cHRv
ci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29sRm9yUHJpbnRp
bmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+d2FpdGluZ0Zv
cktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhwYXJlbnRf
Y2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0
ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpOwpAQCAtMzYz
LDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNoICh0cmFuc2l0
aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICBwcml2
LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRDb25k
aXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29udGV4dChHc3RF
bGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBU
KGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKKyAg
ICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNzID0gV0VCS0lU
X01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKLSAgICBpZiAoZ3N0X2NvbnRl
eHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIpKSB7Ci0gICAg
ICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShnc3RfY29u
dGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0gICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2
YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZh
bHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJyZWNlaXZl
ZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7CisgICAgaWYgKGdz
dF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0tcHJveHkiKSkgewor
ICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0
X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1wcm94eSIpOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgICAgICBwcml2
LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVf
Z2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVByb3h5LmdldCgp
KTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+Y2RtUHJveHkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNy
eXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCmluZGV4
IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjg1NzVhMDcxMDJiZDEz
M2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCkBA
IC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NU
UkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxDRE1Qcm94eS5o
PgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNsdWRlIDxnc3Qv
Z3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsOCArNTUsOCBAQCBzdHJ1Y3Qg
X1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAgR3N0QmFzZVRy
YW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJvdGVjdGlvblN5
c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVkaWFDb21tb25F
bmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOwotICAgIGJvb2wg
KCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVy
KiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVu
c2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVmZmVyKTsKKyAg
ICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVj
cnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOworICAgIGJvb2wgKCpkZWNyeXB0KShX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwg
R3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNh
bXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CiAKIEdfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmluZGV4IGIzMmI1
YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJkZjM4YjU5MjIw
OTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZh
Y3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBNb2NrQ0RNOjpz
YW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1vY2soKSA9IGRl
ZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQdHI8TW9ja0NE
TT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBAQCBSZWZQdHI8
Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Npb24oKQogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtlV2Vha1B0cigq
dGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6OnByb3h5Q0RN
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9jaygpKTsKLX0K
LQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lvbihXZWFrUHRy
PE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2UoV1RGTW92ZShp
bnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1G
YWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5LmgKaW5kZXgg
ZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDliOTMwM2E5NGM5
MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NE
TUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAKLWNsYXNzIFBy
b3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGljIENETVByaXZh
dGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToKICAgICBTdWNj
ZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5hbDsKICAgICBj
b25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0
YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+
IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+IG1fY2RtOwog
ICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390502</attachid>
            <date>2020-02-12 02:27:21 -0800</date>
            <delta_ts>2020-02-12 03:11:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206730-20200212102719.patch</filename>
            <type>text/plain</type>
            <size>114972</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjNiMTE2Mjk3ZTg2
NTUwOTcwMTgwNTdkYzQ4N2JjZDEyNzY2NC4uODNkYjUwYTZjYWFlMDU5NTcyYTUwMWE0MzZhY2Ji
OWNiYTA4NTY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNCBAQAorMjAyMC0wMi0xMSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VNRV1bR1N0cmVh
bWVyXSBJbnRyb2R1Y2UgQ0RNUHJveHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNjczMAorCisgICAgICAgIFJldmlld2VkIGJ5IFhhYmllciBSb2Ry
aWd1ZXotQ2FsdmFyLgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBzdWJjbGFzcyBvZiBDRE1J
bnN0YW5jZSwgQ0RNUHJveHlJbnN0YW5jZS4KKworICAgICAgICBDRE1JbnN0YW5jZSBpcyBhIG1h
aW4tdGhyZWFkIG9ubHkgY2xhc3MsIGl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUKKyAgICAgICAg
YW4gaW50ZXJmYWNlIHRoYXQgd2lsbCBzYXRpc2Z5IHRoZSBKYXZhU2NyaXB0IEVNRSBBUElzLCB3
aGljaCBieQorICAgICAgICBkZXNpZ24sIGRvbid0IGFjdHVhbGx5IGludGVyYWN0IHdpdGggYSBy
ZWFsIERSTSBzeXN0ZW0sIHdoYXQgbWlnaHQKKyAgICAgICAgYWxzbyBiZSBjYWxsZWQgIlRoZSBD
RE0gSW5zdGFuY2UiLiBUaGF0J3Mgd2h5IHRoZSBuYW1pbmcgaXMKKyAgICAgICAgbWlzbGVhZGlu
ZyBoZXJlLCBDRE1JbnN0YW5jZSBpc24ndCBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHJlYWwK
KyAgICAgICAgQ0RNLCByYXRoZXIgaXQgaXMgYSBmYWNhZGUgZm9yIEphdmFTY3JpcHQuCisKKyAg
ICAgICAgQ0RNUHJveHlJbnN0YW5jZSBpcyBhIHN1Yi1jbGFzcyB3aGljaCBwcm92aWRlcyB0d28g
QVBJcywKKyAgICAgICAgMS8gRm9yIGJhY2tncm91bmQgbWVkaWEgdGhyZWFkcyB0byBzYWZlbHkg
aW50ZXJyb2dhdGUgdGhlIHN0YXR1cworICAgICAgICBvZiBrZXlzIGFuZCB0byBwZXJmb3JtIGRl
Y3J5cHRpb24gdXNpbmcgc2FpZCBrZXlzLiBUaGlzIEFQSSBpcworICAgICAgICBleHBvc2VkIGJ5
IENETVByb3h5IGFuZCBpcyBwbGF0Zm9ybSBzcGVjaWZpYy4KKyAgICAgICAgMi8gRm9yIG1lZGlh
IHBsYXllcnMgdG8gc2FmZWx5IGFzc2VzcyB0aGUgc3RhdGUgb2YgZGVjcnlwdG9ycyBhbmQKKyAg
ICAgICAgd2hhdCB0aGVpciBzdGF0dXMgaXMuCisKKyAgICAgICAgQ0RNUHJveHkgZXhpc3RzIHRv
IGFsbG93IHRocmVhZC1zYWZlIGFjY2VzcyB0byBhIHJlYWwgQ0RNLCBhbG9uZworICAgICAgICB3
aXRoIHRoZWlyIHF1aXJrcy4gVGhlIHR3byBtYWluIHByb2JsZW1zIEdUSyBpbnRlZ3JhdG9ycyBv
ZiBhIENETQorICAgICAgICBoYXZlIGluIFdlYktpdCBpcyBrZXkgbWFuYWdlbWVudCBhbmQgQ0RN
IGFjY2VzcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgbWVkaWEgdGhyZWFkcy4KKworICAgICAg
ICBLZXkgbWFuYWdlbWVudCBpcyBob3cgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiBrZXlzIGluIGEg
d2F5CisgICAgICAgIGNvaGVyZW50IHdpdGggSmF2YVNjcmlwdCwgdGhlIGNyb3NzLXBsYXRmb3Jt
IEVNRSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgdGhlIHJlYWwgQ0RNcyB0aGVtc2VsdmVzLCBh
bmQgdGhlIGJhY2tncm91bmQgbWVkaWEKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkgcHJvdmlk
ZXMgYSBkZWZhdWx0IGtleSBzdG9yZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIHN1Yi1jbGFzc2Vz
LiBTdWItY2xhc3NlcyBjYW4sIG9uIHJlY2VpcHQgb2YgbmV3IGluZm9ybWF0aW9uIGZyb20gYQor
ICAgICAgICByZWFsIENETSwgdGVsbCBDRE1Qcm94eSBhYm91dCB0aGUga2V5cyBhbmQgdGhlaXIK
KyAgICAgICAgc3RhdHVzZXMuIENETVByb3h5IGlzIGludGVuZGVkIHRvIERvIFRoZSBSaWdodCBU
aGluZyBmcm9tIHRoZXJlLAorICAgICAgICBsZXR0aW5nIEphdmFTY3JpcHQgYW5kIFdlYkNvcmUg
a25vdyBhbGwgdGhlIGRldGFpbHMgdGhleSBuZWVkIHRvCisgICAgICAgIGFib3V0IHRoZSBuZXcg
c3RhdGUsIGFzIHdlbGwgYXMgdGhlIG1lZGlhIGRlY29kZSB0aHJlYWRzIHdoZW4gdGhleQorICAg
ICAgICBuZXh0IGNvbWUgYXNraW5nLgorCisgICAgICAgIEFjY2VzcyBmcm9tIGJhY2tncm91bmQg
dGhyZWFkcyBpcyBpbGwtYWR2aXNlZCB3aGVuIHVzaW5nIHRoZQorICAgICAgICB0aHJlYWQtdW5z
YWZlIENETUluc3RhbmNlLiBXZSB1c2VkIHRvIGdldCBhd2F5IHdpdGggZG9pbmcgZXhhY3RseQor
ICAgICAgICB0aGlzLCBidXQgV2ViQ29yZSByZWNlbnRseSBiZWNhbWUgbW9yZSBkaWxpZ2VudCBh
Ym91dAorICAgICAgICB0aHJlYWQtdW5zYWZlIGFjY2VzcyBvZiBtYWluLXRocmVhZC1vbmx5IGRh
dGEsIGFuZCB3ZSBoYWQgdG8gZG8KKyAgICAgICAgc29tZXRoaW5nIHRvIGZpeCB0aGUgYXNzZXJ0
cy4gVGhhdCBzb21ldGhpbmcgd2FzIFByb3h5Q0RNIChhCisgICAgICAgIHRlcnJpYmxlIG5hbWUs
IHJlbW92ZWQgbm93KSwgd2hpY2ggd2FzIGEgaGFjayBhbmQgcGxlYXNlIGZvcmdldAorICAgICAg
ICBhYm91dCBpdC4gQ0RNUHJveHkgY2FuIGJlIHNhZmVseSBwYXNzZWQgdG8gYmFja2dyb3VuZCB0
aHJlYWRzLCBhbmQKKyAgICAgICAgaXQgd2lsbCBieSBkZWZhdWx0IHByb3ZpZGUgYSB0aHJlYWQt
c2FmZSB2aWV3IG9mIHRoZSBrZXkgc3RvcmUgZm9yCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFk
cyB0byBpbnRlcnJvZ2F0ZSB0aGUga2V5IHN0b3JlIGFuZCBwZXJmb3JtCisgICAgICAgIENETS1z
cGVjaWZpYyBkZWNyeXB0aW9uIC8gZGVjb2RlLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IEFkZCBDRE1Qcm94eSB0byBidWlsZAorICAgICAgICBkZWZpbml0aW9uLgorICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZTogQWRkIENETVByb3h5IGluY2x1ZGUgZGlyZWN0b3JpZXMg
YW5kCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG9sZAorICAg
ICAgICBQcm94eUNETSBzaGltLiBUaGlzIGFwcHJvYWNoIHdhcyBhIHRlbXBvcmFyeSBoYWNrIHRv
IGF2b2lkIHNvbWUKKyAgICAgICAgdGhyZWFkLXNhZmV0eSBhc3NlcnRzLiBJIHRvb2sgdGhlIGxp
YmVydHkgb2YgcmVuYW1pbmcgdG8gQ0RNUHJveHksCisgICAgICAgIGZvciBubyBvdGhlciByZWFz
b24gdGhhdCBpdCBmZWx0IGxpa2UgYSBiZXR0ZXIgbmFtZSwgc29ycnkgZm9yIHRoZQorICAgICAg
ICBjb25mdXNpb24uCisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHku
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleTo6aWRBc1N0cmluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXk6OnZhbHVlQXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5U3RvcmU6OmNvbnRhaW5zS2V5SUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjphbGxLZXlzQXNS
ZWxlYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkS2V5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0
b3JlOjpyZW1vdmVBbGxLZXlzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6cmVt
b3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjprZXlWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlTdG9yZTo6Y29udmVydFRvSlNLZXlTdGF0dXNWZWN0b3IgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnVwZGF0ZUtleVN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNETVByb3h5OjpzZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Q
cm94eTo6a2V5VmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OnN0YXJ0
ZWRXYWl0aW5nRm9yS2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5OjpzdG9w
cGVkV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6dHJ5
V2FpdEZvcktleSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6a2V5QXZhaWxh
YmxlVW5sb2NrZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHk6OmtleUF2YWls
YWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eTo6Z2V0T3JXYWl0Rm9yS2V5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0YXJ0ZWRXYWl0
aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnN0b3BwZWRX
YWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6Om1lcmdl
S2V5c0Zyb20pOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxs
S2V5c0Zyb20pOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5OjppZEFzU2hhcmVkQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6
aWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojp2YWx1ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXk6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6c3RhdHVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpLZXk6OmFkZFNlc3Npb25SZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ojpy
ZW1vdmVTZXNzaW9uUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OktleTo6bnVtU2Vzc2lv
blJlZmVyZW5jZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5OjpLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJlbW92ZUFsbEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5U3RvcmU6Om51bUtleXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OmJl
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpiZWdpbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpl
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5U3RvcmU6OnJiZWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpLZXlTdG9yZTo6cmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eVN0b3JlOjpyZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OktleVN0b3JlOjpyZW5kIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnNldFByb3h5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNETUluc3RhbmNlUHJveHk6OnByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlUHJveHk6OmlzV2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVByb3h5OjpzZXRQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNSW5zdGFuY2VQcm94eTo6dHJhY2tTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZUxpY2Vuc2VGb3JtYXQpOiBSZWZhY3RvcmVkIHRvIHVzZSBuZXcgS2V5IGNsYXNzLgorICAg
ICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleWlkc0xvY2F0aW9uRnJvbUNlbmNJbml0RGF0YSk6IFJl
ZmFjdG9yZWQgdG8KKyAgICAgICAgdXNlIGJldHRlciBuYW1lZCBjb25zdGFudHMuCisgICAgICAg
IChXZWJDb3JlOjpleHRyYWN0S2V5aWRzRnJvbUNlbmNJbml0RGF0YSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbik6IFVzZSB0aGUK
KyAgICAgICAgdHJhY2tTZXNzaW9uIG1ldGhvZCB0byBhbGxvdyBlYXNpZXIgbW9uaXRvcmluZyBv
ZiBhbGwgRU1FCisgICAgICAgIHNlc3Npb25zLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKTogUmVmYWN0b3IgdG8KKyAgICAgICAg
a2VlcCB0cmFjayBvZiBnZW5lcmF0ZWQgc2Vzc2lvbiBJRHMuCisgICAgICAgIChXZWJDb3JlOjpD
RE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisg
ICAgICAgIHVzZSBuZXcga2V5IG1hbmFnZW1lbnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5Ojpsb2FkU2Vzc2lvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlbW92ZVNlc3Npb25EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGVhcktleVN0YXRlOjprZXlzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjppc29sYXRlZEtleSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6Q0RNSW5zdGFuY2VDbGVhcktleSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6Omtl
eUlEQXNTdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8KTogRGVsZXRlZC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIHVubmVjZXNzYXJpbHkKKyAg
ICAgICAgc29ydGluZyB0aGUga2V5IHZlY3RvcnMuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2Ug
dG8gaW1wb3NlIGFuCisgICAgICAgIG9yZGVyaW5nIG9uIGtleXMsIHNvIEkgcmVtb3ZlZCBpdC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5o
OiBSZWZhY3RvciB0byB1c2UKKyAgICAgICAgbmV3IGtleSBtYW5hZ2VtZW50IGNsYXNzZXMuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaDoKKyAgICAgICAgUmVtb3ZlIG9ic29sZXRlIFByb3h5
Q0RNIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZSk6Cisg
ICAgICAgIFJlZmFjdG9yZWQgb3V0IG9mIHN5bmNNZXNzYWdlLiBUaGUgY29kZSB3YXMgbW92ZWQg
aGVyZSBhbmQgaW50bworICAgICAgICB3YWl0Rm9yQ0RNQXR0YWNobWVudC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvckNETUF0dGFjaG1lbnQp
OgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKTogUmVtb3ZlCisgICAgICAgIHdhaXRp
bmctZm9yLWtleSBjb2RlLCBpdCB3YXMgYWxsIGJyb2tlbiBhbnl3YXkuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQpOgor
ICAgICAgICBFbmZvcmNlIHVzZSBvZiBDRE1JbnN0YW5jZVByb3h5LCBhbGwgR1N0cmVhbWVyLWJh
c2VkIHBvcnRzIHdpbGwgYmUKKyAgICAgICAgdXNpbmcgdGhlIENETVByb3h5IGRlcml2ZWQgY2xh
c3NlcyBmcm9tIGJhY2tncm91bmQKKyAgICAgICAgdGhyZWFkcy4gQ0RNUHJveHkncyBuZWVkIGEg
aGFuZGxlIHRvIHRoZSBNZWRpYVBsYXllciBmb3IKKyAgICAgICAgd2FpdGluZ0ZvcktleSBtYW5h
Z2VtZW50LCBzbyB3aXJlIHRoYXQgaW4gaGVyZSB0b28uIEFsc28gd2lyZSB0aGUKKyAgICAgICAg
R1N0cmVhbWVyIHNwZWNpZmljIENsZWFyS2V5IHByb3h5IGhlcmUuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5
IGNvbnN0KTogS2V5CisgICAgICAgIHN0YXR1cyBub3RpZmljYXRpb25zIGFyZSB0aGUgcmVzcG9u
c2liaWxpdHkgb2YgdGhlIENETVByb3h5IG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oOiBOb3cKKyAgICAgICAgd2UgdXNlIENETUluc3RhbmNlUHJveHksIG5vdCBDRE1JbnN0YW5j
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xl
YXJLZXkuY3BwOgorICAgICAgICBBZGRlZC4gRyotc3BlY2lmaWMgQ2xlYXJLZXkgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5Ojp+Q0RNUHJveHlDbGVh
cktleSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0Q291bnRl
clZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jU2V0RGVj
cnlwdGlvbktleSk6CisgICAgICAgIChXZWJDb3JlOjpDRE1Qcm94eUNsZWFyS2V5OjpjZW5jRGVj
cnlwdEZ1bGxTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlDbGVhcktleTo6Y2Vu
Y0RlY3J5cHRTdWJzYW1wbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6
OmNlbmNEZWNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNETVByb3h5Q2xlYXJLZXk6OmluaXRp
YWxpemVHY3J5cHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
Q0RNUHJveHlDbGVhcktleS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgUmVmYWN0b3IgdG8gdXNlIENETVByb3h5LgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFy
X2tleV9kZWNyeXB0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX2NsZWFyX2tl
eV9kZWNyeXB0X2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoY2RtUHJveHlB
dHRhY2hlZCk6CisgICAgICAgIChkZWNyeXB0KToKKyAgICAgICAgKGhhbmRsZUtleVJlc3BvbnNl
KTogRGVsZXRlZC4gVGhpcyB3YXMgYSBiYWRseSBuYW1lZCBtZXRob2QgdGhhdAorICAgICAgICBo
YXMgYmVlbiBjaGFuZ2VkIHRvIGNkbVByb3h5QXR0YWNoZWQuCisgICAgICAgIChmaW5kQW5kU2V0
S2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1l
L1dlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
d2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0aW9uX2RlY3J5cHRfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh0cmFuc2Zvcm1JblBsYWNlKToKKyAgICAgICAgKGlzQ0RNUHJveHlBdmFpbGFibGUpOgor
ICAgICAgICAoZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dCk6CisgICAgICAgIChhdHRhY2hDRE1Q
cm94eSk6CisgICAgICAgIChpbnN0YWxsQ0RNUHJveHlJZk5vdEF2YWlsYWJsZSk6CisgICAgICAg
IChzaW5rRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKGNoYW5nZVN0YXRlKToKKyAgICAgICAgKHNl
dENvbnRleHQpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzQ0RNSW5zdGFuY2VB
dmFpbGFibGUpOiBEZWxldGVkLgorICAgICAgICAocXVlcnlIYW5kbGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE1GYWN0
b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDRE1JbnN0YW5jZTo6cHJveHlDRE0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETUZhY3RvcnkuaDoKKwogMjAy
MC0wMi0wNyAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFu
ZGF0ZSBVVUlEIHZlcnNpb24gNCBmb3IgbUROUyBJQ0UgY2FuZGlkYXRlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA5MjhlYzU1ZmVmYTk5NzA3MDhmNjUwNzcxZDBlOTY2YTNmYWIxY2RmLi42MmU1MzVhOWEw
MWRlYzgxZGU0YTQzYjQ1Mzg2MTcwMzQ3YWI2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTgxNyw2
ICsxODE3LDcgQEAgcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlv
L1plcm9Qb2xlLmNwcAogCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAor
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMmE1N2M0YzFkOTZlZDY0ZGQxODBkZmViYTk2YTdmMjkyYWQyNzFkNC4uNDRjYWFkNTg3
MTdjYTZhYWI5YjJhMzRlMDhlOTg1ZWFjZDljM2IzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM4OTUsNiArMTM4OTUsOCBA
QAogCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNUmVzdHJpY3Rpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVJlc3RyaWN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDk0QTVEMTFGNzFDQjZCMDBGNTI1QzUgLyogQ0RNRmFjdG9y
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDRE1GYWN0b3J5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDIxRjcxQ0I2QjAwRjUyNUM1
IC8qIENETUZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0RNRmFj
dG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFGNzFDQjYxMDBG
NTI1RDUgLyogQ0RNUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ0RNUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDk0QTVDRjFG
NzFDQjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ0RNUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDMx
RjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDRE1NZWRpYUNhcGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q5NEE1RDQxRjcxQ0I2QzAwRjUyNUM1IC8qIENETUtleVN0YXR1cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDRE1LZXlTdGF0dXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8qIENETVNlc3Np
b25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENETVNlc3Npb25UeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjI3MCw2ICsyNjI3Miw4IEBACiAJ
CQkJQ0Q5NEE1RDMxRjcxQ0I2QzAwRjUyNUM1IC8qIENETU1lZGlhQ2FwYWJpbGl0eS5oICovLAog
CQkJCUNEOTRBNUQ2MUY3MUNCNkQwMEY1MjVDNSAvKiBDRE1NZXNzYWdlVHlwZS5oICovLAogCQkJ
CUNEOTRBNUNGMUY3MUNCNkEwMEY1MjVDNSAvKiBDRE1Qcml2YXRlLmggKi8sCisJCQkJQ0Q5NEE1
Q0YxRjcxQ0I2MTAwRjUyNUQ1IC8qIENETVByb3h5LmNwcCAqLywKKwkJCQlDRDk0QTVDRjFGNzFD
QjYxMDBGNTI1QzUgLyogQ0RNUHJveHkuaCAqLywKIAkJCQlDRDk0QTVDQzFGNzFDQjY5MDBGNTI1
QzUgLyogQ0RNUmVxdWlyZW1lbnQuaCAqLywKIAkJCQlDRDk0QTVEMDFGNzFDQjZCMDBGNTI1QzUg
LyogQ0RNUmVzdHJpY3Rpb25zLmggKi8sCiAJCQkJQ0Q5NEE1RDUxRjcxQ0I2RDAwRjUyNUM1IC8q
IENETVNlc3Npb25UeXBlLmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggODc0ZDQ5YWYxZTQxOWFjYzg0YTQ2NmQyOGNhMDIzYzZiYzlhZjlmOS4uZWZhNWU3
NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRhYTgxOTc4NWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTY0LDkgKzE2NCwxMCBAQCBpZiAoRU5BQkxFX0VOQ1JZ
UFRFRF9NRURJQSkKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAg
ICAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAotCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNRmFjdG9yeUdTdHJlYW1lci5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmNw
cAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNU
T1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETUluc3RhbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9D
RE1JbnN0YW5jZS5oCmluZGV4IGE4ZDdjYzE1NTI1ODQ2NzM5ZWZkZWU2YTAzNTRkNDhlY2FjMTMw
MzcuLjhmOWYzZWI4NzQ1YzM1MjAyODMxNGM2MDZkMjg5ZDRlM2Y3MWEwNDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApA
QCAtMzksMTcgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkQnVm
ZmVyOwotCiBjbGFzcyBDRE1JbnN0YW5jZVNlc3Npb247Ci1jbGFzcyBQcm94eUNETTsKLQotLy8g
SGFuZGxlIHRvIGEgInJlYWwiIENETSwgbm90IHRoZSBKYXZhU2NyaXB0IGZhY2FkZS4gVGhpcyBj
YW4gYmUgdXNlZAotLy8gZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMgKGkuZS4gZGVjcnlwdG9ycyku
Ci1jbGFzcyBQcm94eUNETSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQcm94eUNETT4g
ewotcHVibGljOgotICAgIHZpcnR1YWwgflByb3h5Q0RNKCkgPSBkZWZhdWx0OwotfTsKLQogc3Ry
dWN0IENETUtleVN5c3RlbUNvbmZpZ3VyYXRpb247CiAKIC8vIEphdmFTY3JpcHQncyBoYW5kbGUg
dG8gYSBDRE1JbnN0YW5jZSwgbXVzdCBiZSB1c2VkIGZyb20gdGhlCkBAIC03Nyw3ICs2Nyw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYpID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4gY3JlYXRl
U2Vzc2lvbigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBj
b25zdCA9IDA7CiAKICAgICBlbnVtIGNsYXNzIEhEQ1BTdGF0dXMgewogICAgICAgICBVbmtub3du
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RN
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJv
eHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgxYjI1MjFkMDMyNDJjZGIyMmEyYzg4MTYzYjkyOTkyMDEwMGIz
YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Qcm94eS5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNp
bmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFN0cmluZyB2
ZWN0b3JUb0hleFN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHZlYykKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvIGJ5dGUgOiB2ZWMpCisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChieXRlKSkpOworICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIHt9CisK
K1N0cmluZyBLZXk6OmlkQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJbIiwgdmVjdG9yVG9IZXhTdHJpbmcobV9pZCksICJdIik7Cit9CisKK1N0cmluZyBLZXk6OnZh
bHVlQXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwgdmVjdG9y
VG9IZXhTdHJpbmcobV92YWx1ZSksICJdIik7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmNvbnRhaW5z
S2V5SUQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9rZXlzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgUmVmUHRyPEtleT4mIHN0b3JlZEtleSkgewor
ICAgICAgICByZXR1cm4gKnN0b3JlZEtleSA9PSBrZXlJRDsKKyAgICB9KSAhPSBXVEY6Om5vdEZv
dW5kOworfQorCit2b2lkIEtleVN0b3JlOjptZXJnZShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7
CisgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gbWVyZ2luZyAldSBuZXcga2V5cyBpbnRv
IGEga2V5IHN0b3JlIG9mICV1IGtleXMiLCBvdGhlci5udW1LZXlzKCksIG51bUtleXMoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBvdGhlcikgeworICAgICAgICAvLyBOT1RFOiBEbyB3
ZSBjYXJlIHRoYXQgd2Ugd2lsbCBub3QgYXBwZW5kIGEga2V5IGlmIGl0IG1hdGNoZXMgYSBrZXkg
SUQKKyAgICAgICAgLy8gaW4gdGhlIGtleXN0b3JlIGFuZCBoYXMgZGlmZmVyZW50IGRhdGEuIFNo
b3VsZCB3ZSBvdmVyd3JpdGU/IFdoaWNoIGlzICJuZXdlciI/CisgICAgICAgIC8vIERvbid0IHRo
aW5rIHdlIG5lZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICBpZiAobV9rZXlzLmZp
bmRNYXRjaGluZyhbJl0gKGNvbnN0IFJlZlB0cjxLZXk+JiBzdG9yZWRLZXkpIHsgcmV0dXJuICpr
ZXkgPT0gKnN0b3JlZEtleTsgfSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIG1fa2V5
cy5hcHBlbmQoa2V5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gTk9URTogVGhpcyBk
b2VzIGhhcHBlbiB3aXRoIERBU0ggcGxheWVycywgaXQgc2VlbXMgaGFybWxlc3MgdG8gaWdub3Jl
IGl0LgorICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IC0gaWdub3JlZCBhIGtl
eSB3aXRoIHRoZSBzYW1lIElEIGFuZCBkaWZmZXJlbnQgZGF0YSIpOworICAgIH0KKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSBrZXkgc3RvcmUgbm93
IGhhcyAldSBrZXlzIiwgbnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleSA6IG1f
a2V5cykKKyAgICAgICAgTE9HKEVNRSwgIlx0RU1FIC0gQ0RNUHJveHkgLSBLZXkgSUQ6ICVzIiwg
a2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2VuZGlmIC8vICFMT0dfRElTQUJM
RUQKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3RvcmU6OmFs
bEtleXNBc1JlbGVhc2VkKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBjb252ZXJ0VG9KU0tleVN0YXR1c1ZlY3Rvcigp
OworICAgIGZvciAoYXV0byYga2V5U3RhdHVzIDoga2V5U3RhdHVzVmVjdG9yKQorICAgICAgICBr
ZXlTdGF0dXMuc2Vjb25kID0gQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXM6OlJlbGVhc2Vk
OworICAgIHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OmFkZEtl
eXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYmIG5ld0tleXMpCit7CisgICAgYm9vbCBkaWRLZXlTdG9y
ZUNoYW5nZSA9IGZhbHNlOworICAgIGZvciAoYXV0byYga2V5IDogbmV3S2V5cykgeworICAgICAg
ICBpZiAoYWRkKFdURk1vdmUoa2V5KSkpCisgICAgICAgICAgICBkaWRLZXlTdG9yZUNoYW5nZSA9
IHRydWU7CisgICAgfQorICAgIHJldHVybiBkaWRLZXlTdG9yZUNoYW5nZTsKK30KKworYm9vbCBL
ZXlTdG9yZTo6YWRkKFJlZlB0cjxLZXk+JiYga2V5KQoreworICAgIGJvb2wgZGlkU3RvcmVDaGFu
Z2UgPSBmYWxzZTsKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5
cy5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBSZWZQdHI8S2V5PiYgc3RvcmVkS2V5KSB7CisgICAg
ICAgIHJldHVybiAqa2V5ID09ICpzdG9yZWRLZXk7CisgICAgfSk7CisKKyAgICBpZiAoa2V5V2l0
aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8mIGtl
eVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGluZ0tleUlESW5kZXhdOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+dmFsdWUoKSA9PSBr
ZXktPnZhbHVlKCksICJDYW4gdGhpcyByZWFsbHkgaGFwcGVuPyIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIE5ldyBrZXkgd2l0aCBJRCAlcyBnZXR0
aW5nIGFkZGVkIHRvIGtleSBzdG9yZSIsIGtleS0+aWRBc1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsgICAgICAKKyAgICAgICAgbV9rZXlzLmFwcGVuZChrZXkpOworICAgICAgICBkaWRTdG9yZUNo
YW5nZSA9IHRydWU7CisgICAgfQorCisgICAga2V5LT5hZGRTZXNzaW9uUmVmZXJlbmNlKCk7Cisg
ICAgcmV0dXJuIGRpZFN0b3JlQ2hhbmdlOworfQorCit2b2lkIEtleVN0b3JlOjpyZW1vdmVBbGxL
ZXlzRnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBr
ZXkgOiBvdGhlcikKKyAgICAgICAgcmVtb3ZlKGtleSk7Cit9CisKK2Jvb2wgS2V5U3RvcmU6OnJl
bW92ZShjb25zdCBSZWZQdHI8S2V5PiYga2V5KQoreworICAgIGJvb2wgc3RvcmVDaGFuZ2VkID0g
ZmFsc2U7CisKKyAgICBzaXplX3Qga2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCA9IG1fa2V5cy5m
aW5kKGtleSk7CisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gcmVxdWVzdGVkIHRvIHJl
bW92ZSBrZXkgd2l0aCBJRCAlcyBhbmQgJXUgc2Vzc2lvbiByZWZlcmVuY2VzIiwga2V5LT5pZEFz
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIGtleS0+bnVtU2Vzc2lvblJlZmVyZW5jZXMoKSk7CisK
KyAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SURJbmRleCAhPSBXVEY6Om5vdEZvdW5kKSB7Cisg
ICAgICAgIGF1dG8mIGtleVdpdGhNYXRjaGluZ0tleUlEID0gbV9rZXlzW2tleVdpdGhNYXRjaGlu
Z0tleUlESW5kZXhdOworICAgICAgICBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+cmVtb3ZlU2Vzc2lv
blJlZmVyZW5jZSgpOworICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5udW1TZXNz
aW9uUmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkg
LSByZW1vdmUga2V5IHdpdGggSUQgJXMiLCBrZXlXaXRoTWF0Y2hpbmdLZXlJRC0+aWRBc1N0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fa2V5cy5yZW1vdmUoa2V5V2l0aE1h
dGNoaW5nS2V5SURJbmRleCk7CisgICAgICAgICAgICBzdG9yZUNoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIGF0
dGVtcHQgdG8gcmVtb3ZlIGtleSB3aXRoIElEICVzIGlnbm9yZWQsIGRvZXMgbm90IGV4aXN0Iiwg
a2V5LT5pZEFzU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHN0b3JlQ2hh
bmdlZDsKK30KKworY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBLZXlTdG9yZTo6a2V5VmFsdWUoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGtleSA6IG1fa2V5cykgeworICAgICAgICBpZiAoKmtleSA9PSBrZXlJRCkKKyAgICAgICAgICAg
IHJldHVybiBrZXktPnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGZh
bHNlICYmICJrZXkgbXVzdCBleGlzdCB0byBjYWxsIHRoaXMgbWV0aG9kIik7CisgICAgVU5SRUFD
SEFCTEUoKTsKK30KKworQ0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNWZWN0b3IgS2V5U3Rv
cmU6OmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCkgY29uc3QKK3sKKyAgICBDRE1JbnN0YW5j
ZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7CisgICAga2V5U3RhdHVz
VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtS2V5cygpKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleSA6IG1fa2V5cykKKyAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFw
cGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5
U3RhdHVzPiB7IGtleS0+aWRBc1NoYXJlZEJ1ZmZlcigpLCBrZXktPnN0YXR1cygpIH0pOworICAg
IHJldHVybiBrZXlTdGF0dXNWZWN0b3I7Cit9CisKK3ZvaWQgQ0RNUHJveHk6OnVwZGF0ZUtleVN0
b3JlKGNvbnN0IEtleVN0b3JlJiBuZXdLZXlTdG9yZSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fa2V5c011dGV4KTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKG5ld0tleVN0b3JlKTsK
KyAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHkgLSB1cGRhdGluZyBrZXkgc3RvcmUgZnJvbSBh
IHNlc3Npb24gdXBkYXRlIik7CisgICAgbV9rZXlzQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworfQor
Cit2b2lkIENETVByb3h5OjpzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5KiBpbnN0YW5jZSkK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgbV9p
bnN0YW5jZSA9IGluc3RhbmNlOworfQorCitWZWN0b3I8dWludDhfdD4gQ0RNUHJveHk6OmtleVZh
bHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2tleXNNdXRleCk7CisgICAgQVNTRVJUKG1fa2V5U3RvcmUuY29udGFp
bnNLZXlJRChrZXlJRCkpOworICAgIHJldHVybiBtX2tleVN0b3JlLmtleVZhbHVlKGtleUlEKTsK
K30KKwordm9pZCBDRE1Qcm94eTo6c3RhcnRlZFdhaXRpbmdGb3JLZXkoKSBjb25zdAoreworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbnN0YW5jZU11dGV4KTsKKyAgICBMT0coRU1FLCAi
RU1FIC0gQ0RNUHJveHkgLSBzdGFydGVkIHdhaXRpbmcgZm9yIGEga2V5Iik7CisgICAgQVNTRVJU
KG1faW5zdGFuY2UpOworICAgIG1faW5zdGFuY2UtPnN0YXJ0ZWRXYWl0aW5nRm9yS2V5KCk7Cit9
CisKK3ZvaWQgQ0RNUHJveHk6OnN0b3BwZWRXYWl0aW5nRm9yS2V5KCkgY29uc3QKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5zdGFuY2VNdXRleCk7CisgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5IC0gc3RvcHBlZCB3YWl0aW5nIGZvciBhIGtleSIpOworICAgIEFTU0VSVCht
X2luc3RhbmNlKTsKKyAgICBtX2luc3RhbmNlLT5zdG9wcGVkV2FpdGluZ0ZvcktleSgpOworfQor
CitPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5Ojp0cnlXYWl0Rm9yS2V5KGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYga2V5SUQpIGNvbnN0Cit7CisgICAgc3RhcnRlZFdhaXRpbmdGb3JL
ZXkoKTsKKyAgICAvLyBVbmNvbmRpdGlvbmFsbHkgc2F5aW5nIHdlIGhhdmUgc3RvcHBlZCB3YWl0
aW5nIGZvciBhIGtleSBtZWFucyB0aGF0IGRlY3J5cHRvcnMgb25seSBnZXQKKyAgICAvLyBvbmUg
c2hvdCBhdCBmZXRjaGluZyBhIGtleS4gSWYgTWF4S2V5V2FpdFRpbWVTZWNvbmRzIGV4cGlyZXMs
IHRoYXQncyBpdCwgbm8gbW9yZSBjbGVhciBieXRlcworICAgIC8vIGZvciB5b3UuCisgICAgYXV0
byBzdG9wV2FpdGluZ0ZvcktleU9uUmV0dXJuID0gbWFrZVNjb3BlRXhpdChbdGhpc10geworICAg
ICAgICBzdG9wcGVkV2FpdGluZ0ZvcktleSgpOworICAgIH0pOworICAgIExPRyhFTUUsICJFTUUg
LSBDRE1Qcm94eSAtIHRyeWluZyB0byB3YWl0IGZvciBrZXkgSUQgJXMiLCB2ZWN0b3JUb0hleFN0
cmluZyhrZXlJRCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGJvb2wgd2FzS2V5UmVjZWl2ZWQgPSBm
YWxzZTsKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgp
OworICAgICAgICB3YXNLZXlSZWNlaXZlZCA9IG1fa2V5c0NvbmRpdGlvbi53YWl0Rm9yKG1fa2V5
c011dGV4LCBDRE1Qcm94eTo6TWF4S2V5V2FpdFRpbWVTZWNvbmRzLCBbJiwgdGhpcywga2V5SURd
KCkgeworICAgICAgICAgICAgcmV0dXJuIGtleUF2YWlsYWJsZVVubG9ja2VkKGtleUlEKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKHdhc0tleVJlY2VpdmVkKSB7CisgICAgICAgIExP
RyhFTUUsICJFTUUgLSBDRE1Qcm94eSAtIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGtleSBJRCAl
cyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBrZXlWYWx1ZShrZXlJRCk7CisgICAgfQorICAgIAorICAgIExPRyhFTUUsICJFTUUgLSBD
RE1Qcm94eSAtIGtleSBJRCAlcyBub3QgYXZhaWxhYmxlIiwgdmVjdG9yVG9IZXhTdHJpbmcoa2V5
SUQpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitib29s
IENETVByb3h5OjprZXlBdmFpbGFibGVVbmxvY2tlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eUlEKSBjb25zdAoreworICAgIHJldHVybiBtX2tleVN0b3JlLmNvbnRhaW5zS2V5SUQoa2V5SUQp
OworfQorCitib29sIENETVByb3h5OjprZXlBdmFpbGFibGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXlJRCkgY29uc3QKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fa2V5c011dGV4
KTsKKyAgICByZXR1cm4ga2V5QXZhaWxhYmxlVW5sb2NrZWQoa2V5SUQpOworfQorCitPcHRpb25h
bDxWZWN0b3I8dWludDhfdD4+IENETVByb3h5OjpnZXRPcldhaXRGb3JLZXkoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3QKK3sKKyAgICBpZiAoIWtleUF2YWlsYWJsZShrZXlJRCkp
IHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVByb3h5IGtleSBjYWNoZSBkb2VzIG5vdCBj
b250YWluIGtleSBJRCAlcyIsIHZlY3RvclRvSGV4U3RyaW5nKGtleUlEKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiB0cnlXYWl0Rm9yS2V5KGtleUlEKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4ga2V5VmFsdWUoa2V5SUQpOworfQorCit2b2lkIENETUluc3RhbmNlUHJveHk6OnN0YXJ0
ZWRXYWl0aW5nRm9yS2V5KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpICYmIG1fcGxh
eWVyKTsKKyAgICBib29sIHdhc1dhaXRpbmdGb3JLZXkgPSBtX251bURlY3J5cHRvcnNXYWl0aW5n
Rm9yS2V5ID4gMDsKKyAgICBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5Kys7CisKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwbGF5ZXIgPSBtX3BsYXllciwgd2FzV2FpdGluZ0ZvcktleV0gewor
ICAgICAgICBpZiAocGxheWVyICYmIHdhc1dhaXRpbmdGb3JLZXkpCisgICAgICAgICAgICBwbGF5
ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ0RNSW5zdGFu
Y2VQcm94eTo6c3RvcHBlZFdhaXRpbmdGb3JLZXkoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkgJiYgbV9wbGF5ZXIgJiYgbV9udW1EZWNyeXB0b3JzV2FpdGluZ0ZvcktleSA+IDApOwor
ICAgIG1fbnVtRGVjcnlwdG9yc1dhaXRpbmdGb3JLZXktLTsKKyAgICBib29sIGlzTm9ib2R5V2Fp
dGluZ0ZvcktleSA9ICFtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5OworCisgICAgY2FsbE9u
TWFpblRocmVhZChbcGxheWVyID0gbV9wbGF5ZXIsIGlzTm9ib2R5V2FpdGluZ0ZvcktleV0gewor
ICAgICAgICBpZiAocGxheWVyICYmIGlzTm9ib2R5V2FpdGluZ0ZvcktleSkKKyAgICAgICAgICAg
IHBsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBDRE1J
bnN0YW5jZVByb3h5OjptZXJnZUtleXNGcm9tKGNvbnN0IEtleVN0b3JlJiBrZXlTdG9yZSkKK3sK
KyAgICAvLyBGSVhNRTogTm90aWZ5IEpTIHdoZW4gYXBwcm9wcmlhdGUuCisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBtX2tleVN0b3JlLm1lcmdlKGtleVN0b3JlKTsKKyAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNSW5zdGFuY2VQcm94eSAtIG1lcmdpbmcga2V5cyBpbnRvIHByb3h5IGlu
c3RhbmNlIGFuZCBub3RpZnlpbmcgQ0RNUHJveHkgb2YgY2hhbmdlcyIpOworICAgIEFTU0VSVCht
X2NkbVByb3h5KTsKKyAgICBtX2NkbVByb3h5LT51cGRhdGVLZXlTdG9yZShrZXlTdG9yZSk7Cit9
CisKK3ZvaWQgQ0RNSW5zdGFuY2VQcm94eTo6cmVtb3ZlQWxsS2V5c0Zyb20oY29uc3QgS2V5U3Rv
cmUmIGtleVN0b3JlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9rZXlT
dG9yZS5yZW1vdmVBbGxLZXlzRnJvbShrZXlTdG9yZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcm94eS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YjZhZDc5Mzc3ZGE5YWIyYjIyOTE0ZmVhZDQyMzliMGRjMjM1YzBhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJveHkuaApAQCAt
MCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCisKKyNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUgIkNETUluc3RhbmNl
U2Vzc2lvbi5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9ySGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEtleT4geworcHVibGljOgorICAgIHVzaW5nIEtleVN0YXR1cyA9IENETUlu
c3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOworCisgICAgc3RhdGljIFJlZlB0cjxLZXk+IGNyZWF0
ZShLZXlTdGF0dXMgc3RhdHVzLCBWZWN0b3I8dWludDhfdD4mJiBrZXlJRCwgVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5VmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXko
c3RhdHVzLCBXVEZNb3ZlKGtleUlEKSwgV1RGTW92ZShrZXlWYWx1ZSkpKTsKKyAgICB9CisgICAg
UmVmPFNoYXJlZEJ1ZmZlcj4gaWRBc1NoYXJlZEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKG1faWQuZGF0YSgpLCBtX2lkLnNpemUoKSk7IH0KKworICAgIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBW
ZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIEtleVN0YXR1
cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgU3RyaW5nIGlkQXNT
dHJpbmcoKSBjb25zdDsKKyAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OworCisgICAg
Ly8gVHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJRCwgaWdub3Jpbmcg
a2V5IHZhbHVlIGFuZCBzdGF0dXMuCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBL
ZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiBrMS5tX2lkID09IGsyLm1faWQ7IH0KKyAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmaywgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXlJRCkgeyByZXR1cm4gay5tX2lkID09IGtleUlEOyB9CisgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlELCBjb25zdCBLZXkgJmspIHsg
cmV0dXJuIGsgPT0ga2V5SUQ7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFNlc3Npb25SZWZl
cmVuY2UoKSB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IG1fbnVtU2Vzc2lvblJlZmVyZW5jZXMr
KzsgfQorICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblJlZmVyZW5jZSgpIHsgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgbV9udW1TZXNzaW9uUmVmZXJlbmNlcy0tOyB9CisgICAgdW5zaWduZWQgbnVtU2Vz
c2lvblJlZmVyZW5jZXMoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJldHVybiBt
X251bVNlc3Npb25SZWZlcmVuY2VzOyB9CisgICAgZnJpZW5kIGNsYXNzIEtleVN0b3JlOworCisg
ICAgS2V5KEtleVN0YXR1cyBzdGF0dXMsIFZlY3Rvcjx1aW50OF90PiYmIGtleUlELCBWZWN0b3I8
dWludDhfdD4mJiBrZXlWYWx1ZSkKKyAgICAgICAgOiBtX3N0YXR1cyhzdGF0dXMpLCBtX2lkKFdU
Rk1vdmUoa2V5SUQpKSwgbV92YWx1ZShXVEZNb3ZlKGtleVZhbHVlKSkgeyB9CisKKyAgICBLZXlT
dGF0dXMgbV9zdGF0dXM7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1faWQ7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fdmFsdWU7CisgICAgdW5zaWduZWQgbV9udW1TZXNzaW9uUmVmZXJlbmNlcyB7IDAg
fTsKK307CisKK2NsYXNzIEtleVN0b3JlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBLZXlTdGF0dXNW
ZWN0b3IgPSBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvcjsKKworICAgIGJvb2wg
Y29udGFpbnNLZXlJRChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICB2
b2lkIG1lcmdlKGNvbnN0IEtleVN0b3JlJiBvdGhlcik7CisgICAgdm9pZCByZW1vdmVBbGxLZXlz
RnJvbShjb25zdCBLZXlTdG9yZSYgb3RoZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5cygpIHsg
bV9rZXlzLmNsZWFyKCk7IH0KKyAgICBib29sIGFkZEtleXMoVmVjdG9yPFJlZlB0cjxLZXk+PiYm
KTsKKyAgICBib29sIGFkZChSZWZQdHI8S2V5PiYmKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBS
ZWZQdHI8S2V5PiYpOworICAgIHVuc2lnbmVkIG51bUtleXMoKSBjb25zdCB7IHJldHVybiBtX2tl
eXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlWYWx1ZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgYWxsS2V5
c0FzUmVsZWFzZWQoKSBjb25zdDsKKyAgICBLZXlTdGF0dXNWZWN0b3IgY29udmVydFRvSlNLZXlT
dGF0dXNWZWN0b3IoKSBjb25zdDsKKworICAgIGF1dG8gYmVnaW4oKSB7IHJldHVybiBtX2tleXMu
YmVnaW4oKTsgfQorICAgIGF1dG8gYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2tleXMuYmVnaW4o
KTsgfQorICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9rZXlzLmVuZCgpOyB9CisgICAgYXV0byBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2tleXMuZW5kKCk7IH0KKyAgICBhdXRvIHJiZWdpbigpIHsg
cmV0dXJuIG1fa2V5cy5yYmVnaW4oKTsgfQorICAgIGF1dG8gcmJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9rZXlzLnJiZWdpbigpOyB9CisgICAgYXV0byByZW5kKCkgeyByZXR1cm4gbV9rZXlzLnJl
bmQoKTsgfQorICAgIGF1dG8gcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cy5yZW5kKCk7IH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPEtleT4+IG1fa2V5czsKK307CisKK2NsYXNz
IENETUluc3RhbmNlUHJveHk7CisKKy8vIEhhbmRsZSB0byBhICJyZWFsIiBDRE0sIG5vdCB0aGUg
SmF2YVNjcmlwdCBmYWNhZGUuIFRoaXMgY2FuIGJlIHVzZWQKKy8vIGZyb20gYmFja2dyb3VuZCB0
aHJlYWRzIChpLmUuIGRlY3J5cHRvcnMpLgorY2xhc3MgQ0RNUHJveHkgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q0RNUHJveHk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IFNlY29uZHMgTWF4S2V5V2FpdFRpbWVTZWNvbmRzID0gNV9zOworCisgICAgdmlydHVhbCB+Q0RN
UHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHVwZGF0ZUtleVN0b3JlKGNvbnN0IEtleVN0
b3JlJiBuZXdLZXlTdG9yZSk7CisgICAgdm9pZCBzZXRJbnN0YW5jZShDRE1JbnN0YW5jZVByb3h5
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8dWludDhfdD4ga2V5VmFsdWUoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGUoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgYm9vbCBrZXlBdmFpbGFibGVVbmxv
Y2tlZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleUlEKSBjb25zdDsKKyAgICBPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IHRyeVdhaXRGb3JLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJ
RCkgY29uc3Q7CisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRPcldhaXRGb3JLZXko
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXlJRCkgY29uc3Q7CisgICAgdm9pZCBzdGFydGVkV2Fp
dGluZ0ZvcktleSgpIGNvbnN0OworICAgIHZvaWQgc3RvcHBlZFdhaXRpbmdGb3JLZXkoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIExvY2sgbV9pbnN0YW5jZU11dGV4OworICAgIENE
TUluc3RhbmNlUHJveHkqIG1faW5zdGFuY2U7CisKKyAgICBtdXRhYmxlIExvY2sgbV9rZXlzTXV0
ZXg7CisgICAgbXV0YWJsZSBDb25kaXRpb24gbV9rZXlzQ29uZGl0aW9uOworICAgIC8vIEZJWE1F
OiBEdXBsaWNhdGVkIGtleSBzdG9yZXMgaW4gdGhlIGluc3RhbmNlIGFuZCB0aGUgcHJveHkgYXJl
IHByb2JhYmx5IG5vdCBuZWVkZWQsIGJ1dCBzaW1wbGlmaWVkCisgICAgLy8gdGhlIGluaXRpYWwg
aW1wbGVtZW50YXRpb24gaW4gdGVybXMgb2YgdGhyZWFkaW5nIGludmFyaWFudHMuCisgICAgS2V5
U3RvcmUgbV9rZXlTdG9yZTsKK307CisKKy8vIEJhc2UgY2xhc3MgZm9yIGNvbW1vbiBzZXNzaW9u
IG1hbmFnZW1lbnQgY29kZSBhbmQgZm9yIGNvbW11bmljYXRpbmcgbWVzc2FnZXMKKy8vIGZyb20g
InJlYWwgQ0RNIiBzdGF0ZSBjaGFuZ2VzIHRvIEpTLgorY2xhc3MgQ0RNSW5zdGFuY2VQcm94eSA6
IHB1YmxpYyBDRE1JbnN0YW5jZSB7CitwdWJsaWM6CisgICAgQ0RNSW5zdGFuY2VQcm94eSgpID0g
ZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5DRE1JbnN0YW5jZVByb3h5KCkgPSBkZWZhdWx0OworCisg
ICAgLy8gTWFpbi10aHJlYWQgb25seS4KKyAgICB2b2lkIHNldFByb3h5KFJlZjxDRE1Qcm94eT4m
JiBwcm94eSkKKyAgICB7CisgICAgICAgIG1fY2RtUHJveHkgPSBXVEZNb3ZlKHByb3h5KTsKKyAg
ICAgICAgbV9jZG1Qcm94eS0+c2V0SW5zdGFuY2UodGhpcyk7CisgICAgfQorICAgIHZvaWQgbWVy
Z2VLZXlzRnJvbShjb25zdCBLZXlTdG9yZSYpOworICAgIHZvaWQgcmVtb3ZlQWxsS2V5c0Zyb20o
Y29uc3QgS2V5U3RvcmUmKTsKKworICAgIC8vIE1lZGlhIHBsYXllciBxdWVyeSBtZXRob2RzIC0g
bWFpbiB0aHJlYWQgb25seS4KKyAgICBSZWZQdHI8Q0RNUHJveHk+IHByb3h5KCkgY29uc3QgeyBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9jZG1Qcm94eTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1dhaXRpbmdGb3JLZXkoKSBjb25zdCB7IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IHJl
dHVybiBtX251bURlY3J5cHRvcnNXYWl0aW5nRm9yS2V5ID4gMDsgfQorICAgIHZvaWQgc2V0UGxh
eWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgbV9wbGF5
ZXIgPSBwbGF5ZXI7IH0KKworICAgIC8vIFByb3h5IG1ldGhvZHMgLSBtdXN0IGJlIHRocmVhZC1z
YWZlLgorICAgIHZvaWQgc3RhcnRlZFdhaXRpbmdGb3JLZXkoKTsKKyAgICB2b2lkIHN0b3BwZWRX
YWl0aW5nRm9yS2V5KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHRyYWNrU2Vzc2lvbihjb25z
dCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBzZXNzaW9uKSB7IG1fc2Vzc2lvbnMuYXBwZW5k
KHNlc3Npb24pOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENETVByb3h5PiBtX2NkbVByb3h5
OworICAgIC8vIEZJWE1FOiBXZWFrUHRyIGZvciB0aGUgbV9wbGF5ZXI/IFRoaXMgaXMgYWNjZXNz
ZWQgZnJvbSBiYWNrZ3JvdW5kIGFuZCBtYWluIHRocmVhZHMsIGl0J3MKKyAgICAvLyBjb25jZXJu
aW5nIHdlIGNvdWxkIGJlIGFjY2Vzc2luZyBpdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2h1dGRvd24g
b24gdGhlIG1haW4tdGhyZWFkLCBlaD8KKyAgICAvLyBBcyBhIENETVByb3h5LCB3ZSAqKipzaG91
bGQqKiogYmUgdHVybmVkIG9mZiBiZWZvcmUgdGhpcyBwb2ludGVyIGV2ZXIgZ29lcyBiYWQuCisg
ICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyIHsgbnVsbHB0ciB9OyAvLyBGSVhNRTogTWFpblRocmVh
ZDxUPj8KKworICAgIHN0ZDo6YXRvbWljPGludD4gbV9udW1EZWNyeXB0b3JzV2FpdGluZ0Zvcktl
eTsKKyAgICBWZWN0b3I8UmVmUHRyPENETUluc3RhbmNlU2Vzc2lvbj4+IG1fc2Vzc2lvbnM7CisK
KyAgICBLZXlTdG9yZSBtX2tleVN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcAppbmRleCA2NDg1ZGI3NWQ3ZTczMzliMTU2MWRjNmQ1OGVmMjljOWIzMTIzNTgwLi40
NTExMWRjNzViNTUwODBjZWY0ZTVmYjM4YWUyNjMzYjM5ZWE3MjMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSAiQ0RNU2Vzc2lvblR5
cGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQzLDM0ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gQ2xlYXJLZXkgQ0VOQyBTeXN0ZW1JRC4KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9lbWUtaW5pdGRhdGEtY2VuYy8jY29tbW9uLXN5c3RlbQotY29uc3QgdWludDhfdCBjbGVhcktl
eUNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAw
eDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAweDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRi
IH07Ci1jb25zdCB1bnNpZ25lZCBjbGVhcktleUNlbmNTeXN0ZW1JZFNpemUgPSBzaXplb2YoY2xl
YXJLZXlDZW5jU3lzdGVtSWQpOwotY29uc3QgdW5zaWduZWQga2V5SWRTaXplID0gMTY7Ci0KLWNs
YXNzIENsZWFyS2V5U3RhdGUgewotICAgIHVzaW5nIEtleVN0b3JlID0gSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+PjsKLQotcHVibGljOgotICAgIHN0YXRp
YyBDbGVhcktleVN0YXRlJiBzaW5nbGV0b24oKTsKLQotICAgIEtleVN0b3JlJiBrZXlzKCkgeyBy
ZXR1cm4gbV9rZXlzOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPENsZWFyS2V5U3RhdGU+OwotICAgIENsZWFyS2V5U3RhdGUoKTsKLSAgICBLZXlTdG9yZSBt
X2tleXM7Ci19OwotCi1DbGVhcktleVN0YXRlJiBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDbGVhcktleVN0YXRlPiBzX3N0YXRlOwotICAg
IHJldHVybiBzX3N0YXRlOwotfQotCi1DbGVhcktleVN0YXRlOjpDbGVhcktleVN0YXRlKCkgPSBk
ZWZhdWx0OwotCiBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNv
bnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEZhaWwgb24gbGFyZ2UgYnVmZmVy
cyB3aG9zZSBzaXplIGRvZXNuJ3QgZml0IGludG8gYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4K
QEAgLTg4LDcgKzYyLDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9i
amVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICByZXR1cm4gb2JqZWN0OwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNl
TGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJvb3QpCitzdGF0aWMgT3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxLZXk+Pj4gcGFyc2VMaWNlbnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVj
dCYgcm9vdCkKIHsKICAgICAvLyBJZiB0aGUgJ2tleXMnIGtleSBpcyBwcmVzZW50IGluIHRoZSBy
b290IG9iamVjdCwgcGFyc2UgdGhlIEpTT04gZnVydGhlcgogICAgIC8vIGFjY29yZGluZyB0byB0
aGUgc3BlY2lmaWVkICdsaWNlbnNlJyBmb3JtYXQuCkBAIC0xMDEsNyArNzUsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZv
cm1hdChjb25zdCBKU09OOgogICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Q0RNSW5zdGFuY2VD
bGVhcktleTo6S2V5PiBkZWNvZGVkS2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPEtleT4+IGRlY29k
ZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJl
Z2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBh
dXRvJiB2YWx1ZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0
OwpAQCAtMTE2LDExICs5MCwxMSBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPENETUluc3RhbmNl
Q2xlYXJLZXk6OktleT4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOgogICAgICAgICAg
ICAgaWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3Qt
PmdldFN0cmluZygiayIsIGtleVZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKKyAg
ICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRERhdGEsIGtleVZhbHVlRGF0YTsKICAgICAg
ICAgICAgIGlmICghV1RGOjpiYXNlNjRVUkxEZWNvZGUoa2V5SUQsIHsga2V5SUREYXRhIH0pIHx8
ICFXVEY6OmJhc2U2NFVSTERlY29kZShrZXlWYWx1ZSwgeyBrZXlWYWx1ZURhdGEgfSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBkZWNvZGVkS2V5cy5hcHBl
bmQoeyBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1czo6VXNhYmxlLCBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShXVEZNb3ZlKGtleUlERGF0YSkpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGtleVZhbHVlRGF0YSkpIH0pOworICAgICAgICAgICAgZGVjb2RlZEtleXMuYXBwZW5kKEtleTo6
Y3JlYXRlKENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzOjpVc2FibGUsIFdURk1vdmUoa2V5
SUREYXRhKSwgV1RGTW92ZShrZXlWYWx1ZURhdGEpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfSk7CiAgICAgaWYgKCF2YWxpZEZvcm1hdCkKQEAgLTE4MSw3ICsxNTUsNyBA
QCBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0
aW9uRnJvbUNlbmNJbml0RGF0YShjb25zdAogICAgIHdoaWxlICh0cnVlKSB7CiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhlIG92ZXJmbG93IEluaXREYXRhLgotICAgICAgICBpZiAoaW5kZXggKyAxMiAr
IGNsZWFyS2V5Q2VuY1N5c3RlbUlkU2l6ZSA+PSBpbml0RGF0YVNpemUpCisgICAgICAgIGlmIChp
bmRleCArIDEyICsgQ2xlYXJLZXk6OmNlbmNTeXN0ZW1JZFNpemUgPj0gaW5pdERhdGFTaXplKQog
ICAgICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAogICAgICAgICBwc3NoU2l6ZSA9IGRhdGFb
aW5kZXggKyAyXSAqIDI1NiArIGRhdGFbaW5kZXggKyAzXTsKQEAgLTE5MSw3ICsxNjUsNyBAQCBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gZXh0cmFjdEtleWlkc0xvY2F0aW9u
RnJvbUNlbmNJbml0RGF0YShjb25zdAogICAgICAgICAgICAgcmV0dXJuIGtleUlkc01hcDsKIAog
ICAgICAgICAvLyAxMiA9IEJNRkYgYm94IGhlYWRlciArIEZ1bGwgYm94IGhlYWRlci4KLSAgICAg
ICAgaWYgKCFtZW1jbXAoJmRhdGFbaW5kZXggKyAxMl0sIGNsZWFyS2V5Q2VuY1N5c3RlbUlkLCBj
bGVhcktleUNlbmNTeXN0ZW1JZFNpemUpKSB7CisgICAgICAgIGlmICghbWVtY21wKCZkYXRhW2lu
ZGV4ICsgMTJdLCBDbGVhcktleTo6Y2VuY1N5c3RlbUlkLCBDbGVhcktleTo6Y2VuY1N5c3RlbUlk
U2l6ZSkpIHsKICAgICAgICAgICAgIGZvdW5kUHNzaCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMjAyLDcgKzE3Niw3IEBAIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBleHRyYWN0S2V5aWRzTG9jYXRpb25Gcm9tQ2VuY0luaXREYXRhKGNvbnN0
CiAgICAgaWYgKCFmb3VuZFBzc2gpCiAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKLSAgICBp
bmRleCArPSAoMTIgKyBjbGVhcktleUNlbmNTeXN0ZW1JZFNpemUpOyAvLyAxMiAoQk1GRiBib3gg
aGVhZGVyICsgRnVsbCBib3ggaGVhZGVyKSArIFN5c3RlbUlEIHNpemUuCisgICAgaW5kZXggKz0g
KDEyICsgQ2xlYXJLZXk6OmNlbmNTeXN0ZW1JZFNpemUpOyAvLyAxMiAoQk1GRiBib3ggaGVhZGVy
ICsgRnVsbCBib3ggaGVhZGVyKSArIFN5c3RlbUlEIHNpemUuCiAKICAgICAvLyBDaGVjayB0aGUg
b3ZlcmZsb3cuCiAgICAgaWYgKGluZGV4ICsgMyA+PSBpbml0RGF0YVNpemUpCkBAIC0yMTIsNyAr
MTg2LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGV4dHJhY3RLZXlp
ZHNMb2NhdGlvbkZyb21DZW5jSW5pdERhdGEoY29uc3QKICAgICBpbmRleCArPSA0OyAvLyBLZXlJ
ZHNDb3VudCBzaXplLgogCiAgICAgLy8gQ2hlY2sgdGhlIG92ZXJmbG93LgotICAgIGlmICgoaW5k
ZXggKyAoa2V5SWRzTWFwLmZpcnN0ICoga2V5SWRTaXplKSkgPj0gaW5pdERhdGFTaXplKQorICAg
IGlmICgoaW5kZXggKyAoa2V5SWRzTWFwLmZpcnN0ICogQ2xlYXJLZXk6OktleUlEU2l6ZUluQnl0
ZXMpKSA+PSBpbml0RGF0YVNpemUpCiAgICAgICAgIHJldHVybiBrZXlJZHNNYXA7CiAKICAgICBr
ZXlJZHNNYXAuc2Vjb25kID0gaW5kZXg7IC8vIFRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgS2V5
SWQgaW4gaW5pdERhdGEuCkBAIC0yNTEsOSArMjI1LDkgQEAgc3RhdGljIFJlZjxTaGFyZWRCdWZm
ZXI+IGV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKGNvbnN0IFNoYXJlZEJ1ZmZlciYgaW5p
dEQKICAgICAvLyAia2lkcyIKICAgICAvLyBBbiBhcnJheSBvZiBrZXkgSURzLiBFYWNoIGVsZW1l
bnQgb2YgdGhlIGFycmF5IGlzIHRoZSBiYXNlNjR1cmwgZW5jb2Rpbmcgb2YgdGhlIG9jdGV0IHNl
cXVlbmNlIGNvbnRhaW5pbmcgdGhlIGtleSBJRCB2YWx1ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwga2V5SWRDb3VudDsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyBrZXlJZCA9IFdURjo6
YmFzZTY0VVJMRW5jb2RlKCZkYXRhW2luZGV4XSwga2V5SWRTaXplKTsKKyAgICAgICAgU3RyaW5n
IGtleUlkID0gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRhdGFbaW5kZXhdLCBDbGVhcktleTo6S2V5
SURTaXplSW5CeXRlcyk7CiAgICAgICAgIGtleUlkc0FycmF5LT5wdXNoU3RyaW5nKGtleUlkKTsK
LSAgICAgICAgaW5kZXggKz0ga2V5SWRTaXplOworICAgICAgICBpbmRleCArPSBDbGVhcktleTo6
S2V5SURTaXplSW5CeXRlczsKICAgICB9CiAKICAgICBvYmplY3QtPnNldEFycmF5KCJraWRzIiwg
V1RGTW92ZShrZXlJZHNBcnJheSkpOwpAQCAtNDU2LDQ0ICs0MzAsNiBAQCBPcHRpb25hbDxTdHJp
bmc+IENETVByaXZhdGVDbGVhcktleTo6c2FuaXRpemVTZXNzaW9uSWQoY29uc3QgU3RyaW5nJiBz
ZXNzaW9uSWQpCiAgICAgcmV0dXJuIHNlc3Npb25JZDsKIH0KIAotLy8gVGhpcyBpcyBmb3IgdGhy
ZWFkLXNhZmV0eSBkdXJpbmcgYW4gYXJjaGl0ZWN0dXJhbCBzaXR1YXRpb24gdGhhdCBpcwotLy8g
bGVzcyB0aGFuIGlkZWFsLiBUaGUgR1N0cmVhbWVyIGRlY3J5cHRvcnMgY3VycmVudGx5IG5lZWQg
dG8gaXRlcmF0ZQotLy8gYWxsIGtub3duIHNlc3Npb24ga2V5cyB0byBmaW5kIHRoZSBrZXkgZGF0
YSBmb3IgcHJpbWluZwotLy8gR0NyeXB0LiBJZGVhbGx5LCBhbGwgZGVjcnlwdGlvbiB3b3VsZCBi
ZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YKLS8vIFByb3h5Q0RNIG9iamVjdCBsaWtlIHRoaXMgb25l
LiBXaGF0IHRoZSBiYWNrZ3JvdW5kIEdTdHJlYW1lcgotLy8gdGhyZWFkIHdhcyBkb2luZyB3YXMg
Z2V0dGluZyBjb3BpZXMgKGkuZS4gcmVmKCkncykgb2YgU2hhcmVkQnVmZmVycwotLy8gY3JlYXRl
ZCBvbiB0aGUgbWFpbi10aHJlYWQuIFdpdGggdGhlIG5ldyBzYWZldHkgYXNzZXJ0aW9ucyBpbgot
Ly8gV2ViS2l0LCB3ZSBjYW4gbm8gbG9uZ2VyIGRvIHRoaXMuIEluc3RlYWQsIGNvbnZlcnQgdGhl
IHJlZmNvdW50ZWQKLS8vIFNoYXJlZEJ1ZmZlcnMgaW50byBTdHJpbmdzIHdoaWNoIGNhbiBiZSBz
YWZlbHkgY29waWVkIGFjcm9zcwotLy8gdGhyZWFkcy4KLXN0YXRpYyBQcm94eUNETUNsZWFyS2V5
OjpLZXkgaXNvbGF0ZWRLZXkoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrZXkpCi17
Ci0gICAgcmV0dXJuIHsga2V5LnN0YXR1cywgU3RyaW5nKGtleS5rZXlJRERhdGEtPmRhdGEoKSwg
a2V5LmtleUlERGF0YS0+c2l6ZSgpKSwgU3RyaW5nKGtleS5rZXlWYWx1ZURhdGEtPmRhdGEoKSwg
a2V5LmtleVZhbHVlRGF0YS0+c2l6ZSgpKSB9OwotfQotCi1jb25zdCBWZWN0b3I8UHJveHlDRE1D
bGVhcktleTo6S2V5PiBQcm94eUNETUNsZWFyS2V5Ojppc29sYXRlZEtleXMoKSBjb25zdAotewot
ICAgIC8vIFJldHVybiB0aGUga2V5cyBvZiBhbGwgc2Vzc2lvbnMsIG1heSBiZSBjb3BpZWQgdG8g
YmFja2dyb3VuZCB0aHJlYWRzLgotICAgIFZlY3RvcjxQcm94eUNETUNsZWFyS2V5OjpLZXk+IGFs
bEtleXMgeyB9OwotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9rZXlzTXV0ZXgpOwotICAg
IHNpemVfdCBpbml0aWFsQ2FwYWNpdHkgPSAwOwotICAgIGZvciAoYXV0byYga2V5VmVjdG9yIDog
Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLnZhbHVlcygpKQotICAgICAgICBpbml0
aWFsQ2FwYWNpdHkgKz0ga2V5VmVjdG9yLnNpemUoKTsKLSAgICBhbGxLZXlzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KTsKLQotICAgIGZvciAoYXV0byYga2V5VmVjdG9y
IDogQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLnZhbHVlcygpKSB7Ci0gICAgICAg
IGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgYWxsS2V5cy51bmNoZWNr
ZWRBcHBlbmQoaXNvbGF0ZWRLZXkoa2V5KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFsbEtleXM7
Ci19Ci0KLUNETUluc3RhbmNlQ2xlYXJLZXk6OkNETUluc3RhbmNlQ2xlYXJLZXkoKQotICAgIDog
bV9wcm94eUNETShhZG9wdFJlZigqbmV3IFByb3h5Q0RNQ2xlYXJLZXkoKSkpCi17Ci19Ci0KIENE
TUluc3RhbmNlQ2xlYXJLZXk6On5DRE1JbnN0YW5jZUNsZWFyS2V5KCkgPSBkZWZhdWx0OwogCiBD
RE1JbnN0YW5jZTo6U3VjY2Vzc1ZhbHVlIENETUluc3RhbmNlQ2xlYXJLZXk6OmluaXRpYWxpemVX
aXRoQ29uZmlndXJhdGlvbihjb25zdCBDRE1LZXlTeXN0ZW1Db25maWd1cmF0aW9uJikKQEAgLTUz
NSwzNiArNDcxLDkgQEAgY29uc3QgU3RyaW5nJiBDRE1JbnN0YW5jZUNsZWFyS2V5OjprZXlTeXN0
ZW0oKSBjb25zdAogCiBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBDRE1JbnN0YW5jZUNsZWFy
S2V5OjpjcmVhdGVTZXNzaW9uKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENETUluc3Rh
bmNlU2Vzc2lvbkNsZWFyS2V5KCkpOwotfQotCi1TdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5OjprZXlJREFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiWyIs
IGtleUlERGF0YS0+dG9IZXhTdHJpbmcoKSwgIl0iKTsKLX0KLQotU3RyaW5nIENETUluc3RhbmNl
Q2xlYXJLZXk6OktleTo6a2V5VmFsdWVBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1h
a2VTdHJpbmcoIlsiLCBrZXlWYWx1ZURhdGEtPnRvSGV4U3RyaW5nKCksICJdIik7Ci19Ci0KLWJv
b2wgb3BlcmF0b3I9PShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsxLCBjb25zdCBD
RE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQotewotICAgIEFTU0VSVChrMS5rZXlJRERhdGEp
OwotICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOwotCi0gICAgcmV0dXJuICprMS5rZXlJRERhdGEg
PT0gKmsyLmtleUlERGF0YTsKLX0KLQotYm9vbCBvcGVyYXRvcjwoY29uc3QgQ0RNSW5zdGFuY2VD
bGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMikKLXsK
LSAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKLSAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKLQot
ICAgIGlmIChrMS5rZXlJRERhdGEtPnNpemUoKSAhPSBrMi5rZXlJRERhdGEtPnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIGsxLmtleUlERGF0YS0+c2l6ZSgpIDwgazIua2V5SUREYXRhLT5zaXplKCk7
Ci0KLSAgICByZXR1cm4gbWVtY21wKGsxLmtleUlERGF0YS0+ZGF0YSgpLCBrMi5rZXlJRERhdGEt
PmRhdGEoKSwgazEua2V5SUREYXRhLT5zaXplKCkpOworICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNl
c3Npb24+IG5ld1Nlc3Npb24gPSBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJL
ZXkoKnRoaXMpKTsKKyAgICB0cmFja1Nlc3Npb24obmV3U2Vzc2lvbik7CisgICAgcmV0dXJuIG5l
d1Nlc3Npb247CiB9CiAKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RM
aWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExpY2Vuc2VDYWxsYmFjayYmIGNhbGxiYWNrKQpAQCAt
NTcyLDYgKzQ4MSw4IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RM
aWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAgc3RhdGljIHVpbnQz
Ml90IHNfc2Vzc2lvbklkVmFsdWUgPSAwOwogICAgICsrc19zZXNzaW9uSWRWYWx1ZTsKIAorICAg
IG1fc2Vzc2lvbklEID0gU3RyaW5nOjpudW1iZXIoc19zZXNzaW9uSWRWYWx1ZSk7CisKICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaW5pdERhdGFUeXBlLCAiY2VuYyIpKQog
ICAgICAgICBpbml0RGF0YSA9IGV4dHJhY3RLZXlpZHNGcm9tQ2VuY0luaXREYXRhKGluaXREYXRh
LmdldCgpKTsKIApAQCAtNTc5LDE4ICs0OTAsMjEgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGkK
ICAgICAgICAgaW5pdERhdGEgPSBleHRyYWN0S2V5SWRGcm9tV2ViTUluaXREYXRhKGluaXREYXRh
LmdldCgpKTsKIAogICAgIGNhbGxPbk1haW5UaHJlYWQoCi0gICAgICAgIFt3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgaW5pdERhdGEg
PSBXVEZNb3ZlKGluaXREYXRhKSwgc2Vzc2lvbklkVmFsdWUgPSBzX3Nlc3Npb25JZFZhbHVlXSgp
IG11dGFibGUgeworICAgICAgICBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXMs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGluaXREYXRhID0gV1RGTW92ZShpbml0RGF0
YSldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShpbml0RGF0YSksIFN0
cmluZzo6bnVtYmVyKHNlc3Npb25JZFZhbHVlKSwgZmFsc2UsIFN1Y2NlZWRlZCk7CisgICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGluaXREYXRhKSwgbV9zZXNzaW9uSUQsIGZhbHNlLCBTdWNj
ZWVkZWQpOwogICAgICAgICB9KTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVR5cGUsIGNv
bnN0IFNoYXJlZEJ1ZmZlciYgcmVzcG9uc2UsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmIGNhbGxi
YWNrKQogewotICAgIC8vIFVzZSBhIGhlbHBlciBmdW5jdG9yIHRoYXQgc2NoZWR1bGVzIHRoZSBj
YWxsYmFjayBkaXNwYXRjaCwgYXZvaWRpbmcKLSAgICAvLyBkdXBsaWNhdGVkIGNhbGxPbk1haW5U
aHJlYWQoKSBjYWxscy4KKyNpZiBMT0dfRElTQUJMRUQKKyAgICAvLyBXZSBvbmx5IHVzZSB0aGUg
c2VzaW9uIElEIGZvciBkZWJ1ZyBsb2dnaW5nLiBUaGUgdmVyYm9zZSBwcmVwcm9jZXNzb3IgY2hl
Y2tzIGFyZSBiZWNhdXNlCisgICAgLy8gdGhlIE1hYyBwb3J0IGhhcyAtV2Vycm9yIC1XdW51c2Vk
LXBhcmFtZXRlci4KKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklkKTsKKyNlbmRpZgogICAgIGF1
dG8gZGlzcGF0Y2hDYWxsYmFjayA9CiAgICAgICAgIFt0aGlzLCAmY2FsbGJhY2tdKGJvb2wgc2Vz
c2lvbldhc0Nsb3NlZCwgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiYmIGNoYW5nZWRLZXlzLCBT
dWNjZXNzVmFsdWUgc3VjY2VlZGVkKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApA
QCAtNjA0LDUyICs1MTgsMjMgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKIAogICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJvb3QgPSBwYXJzZUpTT05PYmplY3QocmVzcG9uc2UpOwogICAgIGlm
ICghcm9vdCkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBzZXNzaW9uICVz
IHVwZGF0ZSBwYXlsb2FkIHdhcyBub3QgdmFsaWQgSlNPTiIsIHNlc3Npb25JZC51dGY4KCkuZGF0
YSgpKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNj
ZXNzVmFsdWU6OkZhaWxlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBMT0coRU1F
LCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGluZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIiwgc2Vz
c2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVw
ZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24gJXMgd2hpY2ggY3VycmVudGx5IGNvbnRhaW5zICV1
IGtleXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwgbV9rZXlTdG9yZS5udW1LZXlzKCkpOwog
CiAgICAgaWYgKGF1dG8gZGVjb2RlZEtleXMgPSBwYXJzZUxpY2Vuc2VGb3JtYXQoKnJvb3QpKSB7
Ci0gICAgICAgIC8vIFJldHJpZXZlIHRoZSB0YXJnZXQgVmVjdG9yIG9mIEtleSBvYmplY3RzIGZv
ciB0aGlzIHNlc3Npb24uCi0gICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIHN0YXRlIG1h
bmFnZW1lbnQgY29kZS4KLSAgICAgICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4m
IGtleVZlY3RvciA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5lbnN1cmUoc2Vz
c2lvbklkLCBbXSB7IHJldHVybiBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiB7IH07
IH0pLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICBib29sIGtleXNDaGFuZ2VkID0gZmFsc2U7
Ci0gICAgICAgIGZvciAoYXV0byYgZGVjb2RlZEtleSA6ICpkZWNvZGVkS2V5cykgewotICAgICAg
ICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRGVjb2RlZCBhIGtleSB3aXRoIElEICVz
IGFuZCBrZXkgZGF0YSAlcyIsIGRlY29kZWRLZXkua2V5SURBc1N0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGRlY29kZWRLZXkua2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICAgICAgYXV0byBrZXlXaXRoTWF0Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3Iu
YmVnaW4oKSwga2V5VmVjdG9yLmVuZCgpLAotICAgICAgICAgICAgICAgIFsmZGVjb2RlZEtleV0g
KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgY29udGFpbmVkS2V5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb250YWluZWRLZXkgPT0gZGVjb2RlZEtleTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChrZXlXaXRoTWF0Y2hpbmdLZXlJRCAhPSBrZXlW
ZWN0b3IuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkg
LSBFeGlzdGluZyBrZXkgZm91bmQgd2l0aCBkYXRhICVzIiwga2V5V2l0aE1hdGNoaW5nS2V5SUQt
PmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICAgICAgICAgIGlm
ICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPmhhc1NhbWVLZXlWYWx1ZShkZWNvZGVkS2V5KSkgewot
ICAgICAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGluZyBr
ZXkgc2luY2UgdGhlIGRhdGEgYXJlIGRpZmZlcmVudCIpOwotICAgICAgICAgICAgICAgICAgICAq
a2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBXVEZNb3ZlKGRlY29kZWRLZXkpOwotICAgICAgICAgICAg
ICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBU
aGlzIGlzIGEgbmV3IGtleSIpOwotICAgICAgICAgICAgICAgIGtleVZlY3Rvci5hcHBlbmQoV1RG
TW92ZShkZWNvZGVkS2V5KSk7Ci0gICAgICAgICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBtX2tl
eVN0b3JlLmFkZEtleXMoV1RGTW92ZSgqZGVjb2RlZEtleXMpKTsKIAotICAgICAgICBMT0coRU1F
LCAiRU1FIC0gQ2xlYXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVj
dG9yLnNpemUoKSk7CisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24g
JXMgaGFzICV1IGtleXMgYWZ0ZXIgdXBkYXRlKCkiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSwg
bV9rZXlTdG9yZS5udW1LZXlzKCkpOwogCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rv
cj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAg
Ly8gU29ydCBieSBrZXkgSURzLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtleVZlY3Rvci5iZWdp
bigpLCBrZXlWZWN0b3IuZW5kKCkpOwotCi0gICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Iga2V5
U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleVZlY3RvcikKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IudW5jaGVja2VkQXBw
ZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7ICprZXkua2V5SURE
YXRhLCBrZXkuc3RhdHVzIH0pOwotCi0gICAgICAgICAgICBjaGFuZ2VkS2V5cyA9IFdURk1vdmUo
a2V5U3RhdHVzVmVjdG9yKTsKKyAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAt
IHNlc3Npb24gJXMgaGFzIGNoYW5nZWQga2V5cyIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIG1fcGFyZW50SW5zdGFuY2UubWVyZ2VLZXlzRnJvbShtX2tleVN0b3JlKTsK
KyAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gbV9rZXlTdG9yZS5jb252ZXJ0VG9KU0tleVN0YXR1
c1ZlY3RvcigpOwogICAgICAgICB9CiAKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwg
V1RGTW92ZShjaGFuZ2VkS2V5cyksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKQEAgLTY1Nyw0
NyArNTQyLDMxIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vu
c2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgfQogCiAgICAgaWYgKHBh
cnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoKnJvb3QpKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5IElEIGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8g
dmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMgc2Vzc2lvbklkLgotICAgICAgICBDbGVhcktleVN0
YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVtb3ZlKHNlc3Npb25JZCk7CisgICAgICAgIExPRyhF
TUUsICJFTUUgLSBDbGVhcktleSAtIHNlc3Npb24gJXMgcmVsZWFzZSBhY2tub3dsZWRnZWQsIGNs
ZWFyaW5nIGFsbCBrbm93biBrZXlzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBtX3BhcmVudEluc3RhbmNlLnJlbW92ZUFsbEtleXNGcm9tKG1fa2V5U3RvcmUpOworICAgICAg
ICBtX2tleVN0b3JlLnJlbW92ZUFsbEtleXMoKTsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayh0
cnVlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6U3VjY2VlZGVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIEJhaWwgaW4gY2FzZSBubyBmb3JtYXQgd2FzIHJlY29nbml6
ZWQuCisgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gc2Vzc2lvbiAlcyB1cGRhdGUgcGF5
bG9hZCB3YXMgYW4gdW5yZWNvZ25pemVkIGZvcm1hdCIsIHNlc3Npb25JZC51dGY4KCkuZGF0YSgp
KTsKICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1
ZTo6RmFpbGVkKTsKIH0KIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6bG9hZFNl
c3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBjb25zdCBTdHJpbmcm
LCBMb2FkU2Vzc2lvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEgaGVscGVy
IGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9pZGluZyBk
dXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KLSAgICBhdXRvIGRpc3BhdGNoQ2Fs
bGJhY2sgPQotICAgICAgICBbdGhpcywgJmNhbGxiYWNrXShPcHRpb25hbDxLZXlTdGF0dXNWZWN0
b3I+JiYgZXhpc3RpbmdLZXlzLCBTdWNjZXNzVmFsdWUgc3VjY2VzcywgU2Vzc2lvbkxvYWRGYWls
dXJlIGxvYWRGYWlsdXJlKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKAotICAgICAg
ICAgICAgICAgIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhpc3RpbmdLZXlzID0gV1RGTW92ZShleGlzdGluZ0tleXMpLCBzdWNj
ZXNzLCBsb2FkRmFpbHVyZV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGV4aXN0aW5nS2V5cyksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBzdWNjZXNzLCBsb2FkRmFpbHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH07CisjaWZkZWYgTkRFQlVHCisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb25JZCk7Cisj
ZW5kaWYKIAotICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCwgcmVw
cmVzZW50aW5nIGFsbCB0aGUga25vd24ga2V5cyBmb3IgdGhpcyBzZXNzaW9uLgotICAgIEtleVN0
YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgewotICAgICAgICBhdXRvJiBrZXlzID0g
Q2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpOwotICAgICAgICBhdXRvIGl0ID0ga2V5
cy5maW5kKHNlc3Npb25JZCk7Ci0gICAgICAgIGlmIChpdCA9PSBrZXlzLmVuZCgpKSB7Ci0gICAg
ICAgICAgICBkaXNwYXRjaENhbGxiYWNrKFdURjo6bnVsbG9wdCwgRmFpbGVkLCBTZXNzaW9uTG9h
ZEZhaWx1cmU6Ok5vU2Vzc2lvbkRhdGEpOworICAgIEFTU0VSVChzZXNzaW9uSWQgPT0gbV9zZXNz
aW9uSUQpOworICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3IgPSBtX2tleVN0b3Jl
LmNvbnZlcnRUb0pTS2V5U3RhdHVzVmVjdG9yKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
ICZrZXlTdGF0dXNWZWN0b3JdKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvJiBrZXlWZWN0b3Ig
PSBpdC0+dmFsdWU7Ci0gICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGtleVZlY3Rvci5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rv
cikKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWly
PFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEsIGtleS5zdGF0
dXMgfSk7Ci0gICAgfQogCi0gICAgZGlzcGF0Y2hDYWxsYmFjayhXVEZNb3ZlKGtleVN0YXR1c1Zl
Y3RvciksIFN1Y2NlZWRlZCwgU2Vzc2lvbkxvYWRGYWlsdXJlOjpOb25lKTsKKyAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShrZXlTdGF0dXNWZWN0b3IpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCwgU3VjY2VlZGVkLCBTZXNzaW9uTG9hZEZhaWx1cmU6Ok5vbmUpOworICAgIH0pOwogfQogCiB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5n
JiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTcxMyw3ICs1ODIsMTIgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6Y2xvc2VTZXNzaW9uKGNvbnN0IFN0cmlu
ZyYsIENsb3NlU2Vzc2lvbkNhbGxiYWMKIAogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktl
eTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUeXBl
LCBSZW1vdmVTZXNzaW9uRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gVXNlIGEg
aGVscGVyIGZ1bmN0b3IgdGhhdCBzY2hlZHVsZXMgdGhlIGNhbGxiYWNrIGRpc3BhdGNoLCBhdm9p
ZGluZyBkdXBsaWNhdGVkIGNhbGxPbk1haW5UaHJlYWQoKSBjYWxscy4KKyNpZmRlZiBOREVCVUcK
KyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklkKTsKKyNlbmRpZgorCisgICAgQVNTRVJUKHNlc3Np
b25JZCA9PSBtX3Nlc3Npb25JRCk7CisKICAgICBhdXRvIGRpc3BhdGNoQ2FsbGJhY2sgPQogICAg
ICAgICBbdGhpcywgJmNhbGxiYWNrXShLZXlTdGF0dXNWZWN0b3ImJiBrZXlTdGF0dXNWZWN0b3Is
IE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiYmIG1lc3NhZ2UsIFN1Y2Nlc3NWYWx1ZSBzdWNj
ZXNzKSB7CiAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKApAQCAtNzI3LDM1ICs2MDEsMTcg
QEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29u
c3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UKIAogICAgIC8vIENvbnN0cnVjdCB0aGUgS2V5U3Rh
dHVzVmVjdG9yIG9iamVjdCwgcmVwcmVzZW50aW5nIHJlbGVhc2VkIGtleXMsIGFuZCB0aGUgbWVz
c2FnZSBpbiB0aGUKICAgICAvLyAnbGljZW5zZSByZWxlYXNlJyBmb3JtYXQuCi0gICAgS2V5U3Rh
dHVzVmVjdG9yIGtleVN0YXR1c1ZlY3RvcjsKKyAgICBLZXlTdGF0dXNWZWN0b3Iga2V5U3RhdHVz
VmVjdG9yID0gbV9rZXlTdG9yZS5hbGxLZXlzQXNSZWxlYXNlZCgpOwogICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1lc3NhZ2U7CiAgICAgewotICAgICAgICAvLyBSZXRyaWV2ZSBpbmZvcm1hdGlv
biBmb3IgdGhlIGdpdmVuIHNlc3Npb24gSUQsIGJhaWxpbmcgaWYgbm9uZSBpcyBmb3VuZC4KLSAg
ICAgICAgYXV0byYga2V5cyA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKTsKLSAg
ICAgICAgYXV0byBpdCA9IGtleXMuZmluZChzZXNzaW9uSWQpOwotICAgICAgICBpZiAoaXQgPT0g
a2V5cy5lbmQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhLZXlTdGF0dXNWZWN0
b3IgeyB9LCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1ZTo6RmFpbGVkKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHJpZXZlIHRoZSBLZXkgdmVjdG9y
LCBjb250YWluaW5nIGFsbCB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9uLCBhbmQKLSAgICAgICAg
Ly8gdGhlbiByZW1vdmUgdGhlIGtleSBtYXAgZW50cnkgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAg
ICAgYXV0byBrZXlWZWN0b3IgPSBXVEZNb3ZlKGl0LT52YWx1ZSk7Ci0gICAgICAgIGtleXMucmVt
b3ZlKGl0KTsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIEtleVN0YXR1c1ZlY3RvciBvYmpl
Y3QsIHBhaXJpbmcga2V5IElEcyB3aXRoIHRoZSAncmVsZWFzZWQnIHN0YXR1cy4KLSAgICAgICAg
a2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7
Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5VmVjdG9yKQotICAgICAgICAgICAga2V5U3Rh
dHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtl
eVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwgS2V5U3RhdHVzOjpSZWxlYXNlZCB9KTsKLQogICAg
ICAgICAvLyBDb25zdHJ1Y3QgSlNPTiB0aGF0IHJlcHJlc2VudHMgdGhlICdsaWNlbnNlIHJlbGVh
c2UnIGZvcm1hdCwgY3JlYXRpbmcgYSAna2lkcycgYXJyYXkKICAgICAgICAgLy8gb2YgYmFzZTY0
VVJMLWVuY29kZWQga2V5IElEcyBmb3IgYWxsIGtleXMgdGhhdCB3ZXJlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHNlc3Npb24uCiAgICAgICAgIGF1dG8gcm9vdE9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3Rvcikgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChrZXkua2V5SUREYXRhLT5zaXplKCkgPD0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBhcnJheS0+cHVz
aFN0cmluZyhXVEY6OmJhc2U2NFVSTEVuY29kZShrZXkua2V5SUREYXRhLT5kYXRhKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihrZXkua2V5SUREYXRhLT5zaXplKCkpKSk7CisgICAgICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleSA6IG1fa2V5U3RvcmUpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoa2V5LT5pZCgpLnNpemUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkpOworICAgICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKFdURjo6YmFzZTY0VVJMRW5j
b2RlKGtleS0+aWQoKS5kYXRhKCksIGtleS0+aWQoKS5zaXplKCkpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldEFycmF5KCJraWRzIiwgV1RGTW92ZShhcnJheSkp
OwogICAgICAgICB9CkBAIC03NjYsNiArNjIyLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25D
bGVhcktleTo6cmVtb3ZlU2Vzc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2UK
ICAgICAgICAgbWVzc2FnZSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1lc3NhZ2VDU3RyaW5nLmRh
dGEoKSwgbWVzc2FnZUNTdHJpbmcubGVuZ3RoKCkpOwogICAgIH0KIAorICAgIG1fa2V5U3RvcmUu
cmVtb3ZlQWxsS2V5cygpOwogICAgIGRpc3BhdGNoQ2FsbGJhY2soV1RGTW92ZShrZXlTdGF0dXNW
ZWN0b3IpLCBSZWY8U2hhcmVkQnVmZmVyPigqbWVzc2FnZSksIFN1Y2Nlc3NWYWx1ZTo6U3VjY2Vl
ZGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKaW5kZXggODViMzE5YjFhMzhjMTIx
Njk5MTk3NWI4MDE5YWQyYjE2YjM2YzE0Ny4uNjcwNGFlN2E5NTdmMzJmZTFmODQ5ODNlZDNiM2Y2
NTAyYTUzMTVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCkBAIC0zMSwxNCArMzEsMjgg
QEAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCiAjaW5jbHVkZSAiQ0RNRmFjdG9yeS5o
IgotI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiQ0RNSW5zdGFuY2VTZXNzaW9u
LmgiCiAjaW5jbHVkZSAiQ0RNUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNETVByb3h5LmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgQ2xlYXJLZXkgeworCisvLyBDbGVhcktleSBDRU5D
IFN5c3RlbUlELgorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2VtZS1pbml0ZGF0YS1jZW5jLyNj
b21tb24tc3lzdGVtCitjb25zdCB1aW50OF90IGNlbmNTeXN0ZW1JZFtdID0geyAweDEwLCAweDc3
LCAweGVmLCAweGVjLCAweGMwLCAweGIyLCAweDRkLCAweDAyLCAweGFjLCAweGUzLCAweDNjLCAw
eDFlLCAweDUyLCAweGUyLCAweGZiLCAweDRiIH07Citjb25zdCB1bnNpZ25lZCBjZW5jU3lzdGVt
SWRTaXplID0gc2l6ZW9mKGNlbmNTeXN0ZW1JZCk7CitlbnVtIHsKKyAgICBBRVMxMjhDVFJCbG9j
a1NpemVJbkJ5dGVzID0gMTYsCisgICAgS2V5SURTaXplSW5CeXRlcyA9IDE2LAorICAgIElWU2l6
ZUluQnl0ZXMgPSAxNiwKK307CisKK30gLy8gbmFtZXNwYWNlIENsZWFyS2V5CisKIGNsYXNzIENE
TUZhY3RvcnlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1GYWN0b3J5IHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc3LDI3ICs5MSwxMiBAQCBwdWJsaWM6CiAg
ICAgT3B0aW9uYWw8U3RyaW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25z
dCBmaW5hbDsKIH07CiAKLWNsYXNzIFByb3h5Q0RNQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgUHJv
eHlDRE0geworY2xhc3MgQ0RNSW5zdGFuY2VDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1JbnN0
YW5jZVByb3h5LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VDbGVhcktleT4gewog
cHVibGljOgotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246Oktl
eVN0YXR1cyBzdGF0dXM7Ci0gICAgICAgIFN0cmluZyBrZXlJRERhdGE7Ci0gICAgICAgIFN0cmlu
ZyBrZXlWYWx1ZURhdGE7Ci0gICAgfTsKLQotICAgIHZpcnR1YWwgflByb3h5Q0RNQ2xlYXJLZXko
KSA9IGRlZmF1bHQ7Ci0gICAgY29uc3QgVmVjdG9yPEtleT4gaXNvbGF0ZWRLZXlzKCkgY29uc3Q7
Ci1wcml2YXRlOgotICAgIG11dGFibGUgTG9jayBtX2tleXNNdXRleDsKLX07Ci0KLWNsYXNzIENE
TUluc3RhbmNlQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMgQ0RNSW5zdGFuY2UsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxDRE1JbnN0YW5jZUNsZWFyS2V5PiB7Ci1wdWJsaWM6Ci0gICAgQ0RNSW5zdGFu
Y2VDbGVhcktleSgpOwogICAgIHZpcnR1YWwgfkNETUluc3RhbmNlQ2xlYXJLZXkoKTsKIAorICAg
IC8vIENETUluc3RhbmNlCiAgICAgSW1wbGVtZW50YXRpb25UeXBlIGltcGxlbWVudGF0aW9uVHlw
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEltcGxlbWVudGF0aW9uVHlwZTo6Q2xlYXJLZXk7IH0K
LQogICAgIFN1Y2Nlc3NWYWx1ZSBpbml0aWFsaXplV2l0aENvbmZpZ3VyYXRpb24oY29uc3QgQ0RN
S2V5U3lzdGVtQ29uZmlndXJhdGlvbiYpIGZpbmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXREaXN0
aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZChib29sKSBmaW5hbDsKICAgICBTdWNjZXNzVmFsdWUg
c2V0UGVyc2lzdGVudFN0YXRlQWxsb3dlZChib29sKSBmaW5hbDsKQEAgLTEwNSw0NyArMTA0LDIy
IEBAIHB1YmxpYzoKICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBT
dHJpbmcmKSBmaW5hbDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFs
OwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsK
LQotICAgIHN0cnVjdCBLZXkgewotICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1
cyBzdGF0dXM7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsKLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOwotCi0gICAgICAgIFN0cmluZyBr
ZXlJREFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkg
Y29uc3Q7Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZvdGhlcikK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7Ci0gICAgICAgICAg
ICBBU1NFUlQob3RoZXIua2V5VmFsdWVEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiAqa2V5VmFs
dWVEYXRhID09ICpvdGhlci5rZXlWYWx1ZURhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBU
d28ga2V5cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkg
dmFsdWUgYW5kIHN0YXR1cy4KLSAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBL
ZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKLSAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVyZWQgYnkg
dGhlaXIgSURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgotICAgICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7Ci0KLSAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7
IHJldHVybiAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KLSAgICAgICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj09
KGsxLCBrMikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9y
PihrMSwgazIpOyB9Ci0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgS2V5ICZr
MSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9Ci0gICAgfTsK
LQotICAgIFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3Byb3h5Q0RNOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBtX3Byb3h5Q0RN
OwogfTsKIAogY2xhc3MgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkgZmluYWwgOiBwdWJsaWMg
Q0RNSW5zdGFuY2VTZXNzaW9uLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk+IHsKIHB1YmxpYzoKKyAgICBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleShD
RE1JbnN0YW5jZUNsZWFyS2V5JiBwYXJlbnQpCisgICAgICAgIDogbV9wYXJlbnRJbnN0YW5jZShw
YXJlbnQpIHsgfQogICAgIHZvaWQgcmVxdWVzdExpY2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0
b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGlj
ZW5zZUNhbGxiYWNrJiYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTGljZW5zZShjb25zdCBTdHJp
bmcmLCBMaWNlbnNlVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiwgTGljZW5zZVVwZGF0ZUNhbGxi
YWNrJiYpIGZpbmFsOwogICAgIHZvaWQgbG9hZFNlc3Npb24oTGljZW5zZVR5cGUsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIExvYWRTZXNzaW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
dm9pZCBjbG9zZVNlc3Npb24oY29uc3QgU3RyaW5nJiwgQ2xvc2VTZXNzaW9uQ2FsbGJhY2smJikg
ZmluYWw7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uRGF0YShjb25zdCBTdHJpbmcmLCBMaWNlbnNl
VHlwZSwgUmVtb3ZlU2Vzc2lvbkRhdGFDYWxsYmFjayYmKSBmaW5hbDsKICAgICB2b2lkIHN0b3Jl
UmVjb3JkT2ZLZXlVc2FnZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1fc2Vzc2lvbklEOworICAgIENETUluc3RhbmNlQ2xlYXJLZXkmIG1fcGFyZW50SW5zdGFu
Y2U7CisgICAgS2V5U3RvcmUgbV9rZXlTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5oCmluZGV4IDQ3NzJmY2IzMjM2ZDM5MDI5NTM0YzQ2ZmI0
ZjEwMjk5NzgzZTZjYjYuLmIxMWY3MWE5YjVlMzhiZjY5OGIxMzk0OWRkZGU4NmYzZGQ5OTRjYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMuaApAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAg
U3VjY2Vzc1ZhbHVlIHNldFNlcnZlckNlcnRpZmljYXRlKFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZp
bmFsOwogICAgIFN1Y2Nlc3NWYWx1ZSBzZXRTdG9yYWdlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYp
IGZpbmFsOwogICAgIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBm
aW5hbDsKLSAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbnVsbHB0cjsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0oKSBjb25zdCBmaW5h
bDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApp
bmRleCBhMTJlZjRmNmRiYTZmMDE1ZTc2MTUxZjE0N2NjNmMwNzllNjJkYTdlLi41NDVhY2M3NWMw
MTdkYjlkMmE3NDhjOTlkNDRiMWE2MzIwZTdhM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNjUsNiArNjUsNyBAQAogCiAjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKICNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUg
IkNETVByb3h5Q2xlYXJLZXkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCkBAIC0xNzg4LDYgKzE3ODksNTAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5l
KQogICAgIH0sIHRoaXMsIG51bGxwdHIpOwogfQogCitJbml0RGF0YSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBhcnNlSW5pdERhdGFGcm9tUHJvdGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIEluaXRE
YXRhIGluaXREYXRhOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlv
bk11dGV4KTsKKyAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVt
RXZlbnRzKG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJm
b3VuZCAlenUgcHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHBy
b3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgZXZl
bnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgIEdzdEJ1ZmZl
ciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlv
bihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRyKTsKKworICAg
ICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAg
ICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2
ZW50LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5pdERhdGE7Cit9
CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yQ0RNQXR0YWNobWVu
dCgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1QocGlwZWxpbmUoKSwgImNhbid0IGJsb2NrIHRoZSBtYWluIHRocmVhZCB3YWl0aW5nIGZvciBh
IENETSBpbnN0YW5jZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
d2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKKworICAgIGJvb2wgZGlkQ0RNQXR0YWNoID0g
ZmFsc2U7CisgICAgeworICAgICAgICBhdXRvIGNkbUF0dGFjaG1lbnRMb2NrZXIgPSBob2xkTG9j
ayhtX2NkbUF0dGFjaG1lbnRNdXRleCk7CisgICAgICAgIGRpZENETUF0dGFjaCA9IG1fY2RtQXR0
YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11dGV4LCA0X3MsIFt0aGlz
XSgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0NETUF0dGFjaGVkKCk7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIHJldHVybiBkaWRDRE1BdHRhY2g7Cit9CisKIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQog
ewogICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVB
TV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJpbikgewpAQCAtMTgyMyw0MSArMTg2OCw5
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShH
c3RNZXNzYWdlKiBtZXNzYWdlKQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBp
ZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0
ZW0taWQiKSkgewotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEdT
VF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQg
bmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0tcHJl
ZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7Ci0KLSAg
ICAgICAgSW5pdERhdGEgaW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3lzdGVt
RXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAgICBHU1Rf
VFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxh
YmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZv
ciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBn
c3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQs
ICZkYXRhLCBudWxscHRyKTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7ZXZl
bnRLZXlTeXN0ZW1JZCwgZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rp
b25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZN
b3ZlKGluaXREYXRhKSk7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3
YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOwotCi0gICAgICAgIGJvb2wgZGlkQ0RNQXR0YWNo
ID0gZmFsc2U7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gY2RtQXR0YWNobWVudExvY2tl
ciA9IGhvbGRMb2NrKG1fY2RtQXR0YWNobWVudE11dGV4KTsKLSAgICAgICAgICAgIGRpZENETUF0
dGFjaCA9IG1fY2RtQXR0YWNobWVudENvbmRpdGlvbi53YWl0Rm9yKG1fY2RtQXR0YWNobWVudE11
dGV4LCA0X3MsIFt0aGlzXSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNDRE1BdHRhY2hl
ZCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGlkQ0RNQXR0
YWNoICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0
ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQo
cGFyc2VJbml0RGF0YUZyb21Qcm90ZWN0aW9uTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIGJv
b2wgaXNDRE1BdHRhY2hlZCA9IHdhaXRGb3JDRE1BdHRhY2htZW50KCk7CisgICAgICAgIGlmIChp
c0NETUF0dGFjaGVkICYmICFpc1BsYXllclNodXR0aW5nRG93bigpICYmICFtX2NkbUluc3RhbmNl
LT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZl
cnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3RlbVRvVXVp
ZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7CiAgICAgICAgICAgICBHU1RfSU5GT19PQkpF
Q1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51aW5nIHdp
dGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLnV0Zjgo
KS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1l
c3NhZ2UpKTsKIApAQCAtMTg2NSwxMCArMTg3OCwxMSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAg
ICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRh
YmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJ
TkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwogICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwg
Y29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkco
IkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gZmFpbGVkLCBubyBDRE0gYXZh
aWxhYmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKIApAQCAtMjE5OCwxOSArMjIxMiw2IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAg
ICAgICAgICAgICBwcm9jZXNzTXBlZ1RzU2VjdGlvbihzZWN0aW9uKTsKICAgICAgICAgICAgIGdz
dF9tcGVndHNfc2VjdGlvbl91bnJlZihzZWN0aW9uKTsKICAgICAgICAgfQotI2VuZGlmCi0jaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9o
YXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0td2FpdGluZy1mb3Ita2V5IikpIHsKLSAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImRybS13YWl0aW5nLWZvci1rZXkgbWVzc2Fn
ZSBmcm9tICVzIiwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgICAgICAgICAg
c2V0V2FpdGluZ0ZvcktleSh0cnVlKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZGVjcnlw
dG9ycyBzaG91bGQgYmUgYWJsZSB0byBhdHRlbXB0IHRvIGRlY3J5cHQgYWZ0ZXIgYmVpbmcgY3Jl
YXRlZCBhbmQgbGlua2VkIGluIGEgcGlwZWxpbmUgYnV0IGN1cnJlbnRseSB0aGV5IGFyZSBub3Qg
YW5kIGN1cnJlbnQKLSAgICAgICAgICAgIC8vIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYWtlIHRo
aXMgdmVyeSBlYXN5LiBGb3J0dW5hdGVseSwgdGhlIGFyY2ggd2lsbCBjaGFuZ2Ugc29vbiBhbmQg
aXQgZG9lcyBub3QgcGF5IG9mZiB0byBmaXggdGhpcyBub3cgd2l0aCBzb21ldGhpbmcgdGhhdCBj
b3VsZCBiZQotICAgICAgICAgICAgLy8gbW9yZSBjb252b2x1dGVkLiBJbiB0aGUgbWVhbnRpbWUs
IGZvcmNlIGF0dGVtcHQgdG8gZGVjcnlwdCB3aGVuIHRoZXkgZ2V0IGJsb2NrZWQuCi0gICAgICAg
ICAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktcmVjZWl2ZWQi
KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZHJtLWtleS1y
ZWNlaXZlZCBtZXNzYWdlIGZyb20gJXMiLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7
Ci0gICAgICAgICAgICBzZXRXYWl0aW5nRm9yS2V5KGZhbHNlKTsKLSAgICAgICAgfQogI2VuZGlm
CiAgICAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiaHR0
cC1oZWFkZXJzIikpIHsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IlByb2Nlc3NpbmcgSFRUUCBoZWFkZXJzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsK
QEAgLTM3MjgsMTQgKzM3MjksMTcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0YW5jZTsKKyAgICBtX2NkbUlu
c3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxDRE1JbnN0YW5jZVByb3h5Kj4oJmluc3RhbmNlKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2NkbUluc3RhbmNlKTsKKyAgICBtX2NkbUluc3RhbmNlLT5z
ZXRQbGF5ZXIobV9wbGF5ZXIpOworICAgIG1fY2RtSW5zdGFuY2UtPnNldFByb3h5KGFkb3B0UmVm
KCpuZXcgQ0RNUHJveHlDbGVhcktleSkpOwogCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNF
KSk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250
ZXh0X25ldygiZHJtLWNkbS1wcm94eSIsIEZBTFNFKSk7CiAgICAgR3N0U3RydWN0dXJlKiBjb250
ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0
KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFu
Y2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwgbnVs
bHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1wcm94
eSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eSgpLmdldCgpLCBudWxscHRy
KTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdl
dCgpKSwgY29udGV4dC5nZXQoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9j
ZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4
dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5KCkuZ2V0KCkpOwogCiAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fY2RtQXR0YWNobWVudE11dGV4KTsKICAgICAvLyBXZSBtdXN0IG5vdGlmeSBhbGwgd2FpdGVy
cywgc2luY2Ugc2V2ZXJhbCBkZW11eGVycyBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgd2FpdGluZyBm
b3IgYSBDRE0uCkBAIC0zNzU3LDcgKzM3NjEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiAgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBpbnN0YW5j
ZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7CiAgICAg
bV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CiAKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0Up
KTsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRl
eHRfbmV3KCJkcm0tY2RtLXByb3h5IiwgRkFMU0UpKTsKICAgICBnc3RfZWxlbWVudF9zZXRfY29u
dGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiB9CiAK
QEAgLTM3OTAsNTEgKzM3OTQsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCiAgICAgaW5pdGlhbGl6YXRp
b25EYXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCBp
c1dhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3Qg
Y2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhl
cmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoImlzV2FpdGlu
Z0ZvcktleSAlcywgbV9pc1dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcoaXNXYWl0
aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYg
KGlzV2FpdGluZ0ZvcktleSA9PSBtX2lzV2FpdGluZ0ZvcktleSB8fCAoIWlzV2FpdGluZ0Zvcktl
eSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lz
V2FpdGluZ0ZvcktleSA9IGlzV2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndhaXRpbmcg
Zm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yS2V5KSk7
Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fcGlwZWxpbmUpCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8ICFtX2NkbUluc3RhbmNlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVu
dF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKLQotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9w
dEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVjdHVy
ZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAgICBpZiAo
c3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3RfZWxlbWVu
dF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFD
RSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPj0g
R1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUgcGlw
ZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNl
dCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQgYXNr
IHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9y
PiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0
KCkpKSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0OwotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xkKGl0
ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRlciBk
YXRhKSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9
IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAgICAgICAg
R3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVy
biAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1lbnRf
cXVlcnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnkuZ2V0
KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZ
TkMpCi0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMp
OwotICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQotICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7Ci0gICAg
ICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAgICAgICAg
R1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJlc3Vs
dCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIG1fY2RtSW5zdGFuY2UtPmlzV2FpdGluZ0ZvcktleSgpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBi
MmJiNTQxYTMyNmFlOWJlZmE1YjAzNzc5YzBkMTEwNjM1ZDc5ZTE0Li41MjFiMjBkMTFjYzhkZDk0
YmUyODRkNzQ2OTljZDI3MTdiNGUwNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCkBAIC03Niw2ICs3NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0
TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEVO
QUJMRShFTkNSWVBURURfTUVESUEpCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKKyNlbmRpZgorCiB0
eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5cGVkZWYg
c3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEdM
Q29udGV4dCBHc3RHTENvbnRleHQ7CkBAIC0zNzEsNyArMzc1LDcgQEAgcHJvdGVjdGVkOgogI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgTG9jayBtX2NkbUF0dGFjaG1lbnRNdXRleDsK
ICAgICBDb25kaXRpb24gbV9jZG1BdHRhY2htZW50Q29uZGl0aW9uOwotICAgIFJlZlB0cjxjb25z
dCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKKyAgICBSZWZQdHI8Q0RNSW5zdGFuY2VQcm94
eT4gbV9jZG1JbnN0YW5jZTsKIAogICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJk
cyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KICAgICBIYXNoU2V0PHVpbnQz
Ml90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzOwpAQCAtNDUwLDcgKzQ1NCw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0NETUF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9jZG1JbnN0YW5j
ZTsgfQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CiAgICAg
dm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsKLSAgICB2b2lk
IHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgSW5pdERhdGEgcGFyc2VJbml0RGF0YUZyb21Q
cm90ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgYm9vbCB3YWl0Rm9yQ0RNQXR0YWNo
bWVudCgpOwogI2VuZGlmCiAKICAgICBBdG9taWM8Ym9vbD4gbV9pc1BsYXllclNodXR0aW5nRG93
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvQ0RNUHJveHlDbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xlYXJLZXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNDA0
NTI4N2IzOTZhODUxMjgyN2ZjOGNiYTg0N2EyNDFhNTQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5Q2xl
YXJLZXkuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDRE1Qcm94eUNsZWFyS2V5LmgiCisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgYm9vbCByZWFkVUlu
dDMyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCYgb2Zm
c2V0LCB1aW50MzJfdCYgdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyhvZmZzZXQsIG9mZnNldCA8
PSBidWZmZXJTaXplKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSAtIG9mZnNldCA8IHNpemVvZih2YWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gbnRvaGwoKnJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oYnVmZmVyICsgb2Zmc2V0KSk7CisgICAgb2Zm
c2V0ICs9IHNpemVvZih2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv
b2wgcmVhZFVJbnQxNihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBz
aXplX3QmIG9mZnNldCwgdWludDE2X3QmIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcob2Zmc2V0
LCBvZmZzZXQgPD0gYnVmZmVyU2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUgLSBvZmZzZXQgPCBz
aXplb2YodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IG50b2hz
KCpyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MTZfdCo+KGJ1ZmZlciArIG9mZnNldCkp
OworICAgIG9mZnNldCArPSBzaXplb2YodmFsdWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIHt9CisKK0NETVByb3h5Q2xlYXJLZXk6On5DRE1Qcm94eUNsZWFyS2V5
KCkKK3sKKyAgICBnY3J5X2NpcGhlcl9jbG9zZShtX2djcnlIYW5kbGUpOworfQorCitib29sIENE
TVByb3h5Q2xlYXJLZXk6OmNlbmNTZXRDb3VudGVyVmVjdG9yKGNvbnN0IGNlbmNEZWNyeXB0Q29u
dGV4dCYgaW5wdXQpCit7CisgICAgdWludDhfdCBjdHJbQ2xlYXJLZXk6OkFFUzEyOENUUkJsb2Nr
U2l6ZUluQnl0ZXNdOworICAgIGlmIChpbnB1dC5pdlNpemVJbkJ5dGVzID09IDgpIHsKKyAgICAg
ICAgLy8gSVNPL0lFQyAyMzAwMS03OjIwMTYgU2VjdGlvbiA5LjMKKworICAgICAgICAvLyBXaGVu
IGFuIDgtYnl0ZSBJViBpcyBpbmRpY2F0ZWQsIHRoZSBsZWFzdCBzaWduaWZpY2FudCA4CisgICAg
ICAgIC8vIGJ5dGVzIG9mIHRoZSAxNiBieXRlIElWIChieXRlcyA4IHRvIDE1KSBTSEFMTCBiZSBz
ZXQgdG8KKyAgICAgICAgLy8gemVyby4KKyAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgpOwor
ICAgICAgICBtZW1jcHkoY3RyLCBpbnB1dC5pdiwgOCk7CisgICAgfSBlbHNlCisgICAgICAgIG1l
bWNweShjdHIsIGlucHV0Lml2LCBDbGVhcktleTo6SVZTaXplSW5CeXRlcyk7CisKKyAgICBpZiAo
Z2NyeV9lcnJvcl90IGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKG1fZ2NyeUhhbmRs
ZSwgY3RyLCBDbGVhcktleTo6SVZTaXplSW5CeXRlcykpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVN
RSAtIENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9zZXRjdHIpOiAlcyIsIGdw
Z19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0RNUHJveHlDbGVhcktleTo6Y2VuY1NldERl
Y3J5cHRpb25LZXkoY29uc3QgY2VuY0RlY3J5cHRDb250ZXh0JiBpbikKK3sKKyAgICAvLyBGSVhN
RTogVW5uZWNlc3NhcnkgY29weSwgY2FuIHdlIGF2b2lkIHRoaXMgd2hpbGUgc3RpbGwgZXhwb3Np
bmcKKyAgICAvLyBhIG5vbi1HU3RyZWFtZXItc3BlY2lmaWMgRGVjcnlwdElucHV0IEFQST8gVGhl
c2UgYnVmZmVycyBhcmUKKyAgICAvLyBzbWFsbCAoMTYgYnl0ZXMpLCBzbyBub3QgYSBodWdlIGRl
YWwsIEkgZ3Vlc3MuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjOworICAgIGtleUlEVmVj
LmFwcGVuZChpbi5rZXlJRCwgaW4ua2V5SURTaXplSW5CeXRlcyk7CisKKyAgICBhdXRvIGtleURh
dGEgPSBnZXRPcldhaXRGb3JLZXkoa2V5SURWZWMpOworICAgIGlmICgha2V5RGF0YSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lw
aGVyX3NldGtleShtX2djcnlIYW5kbGUsIGtleURhdGEtPmRhdGEoKSwga2V5RGF0YS0+c2l6ZSgp
KSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdj
cnlfY2lwaGVyX3NldGtleSk6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDRE1Qcm94
eUNsZWFyS2V5OjpjZW5jRGVjcnlwdEZ1bGxTYW1wbGUoY2VuY0RlY3J5cHRDb250ZXh0JiBpbikK
K3sKKyAgICBpZiAoIWluLmVuY3J5cHRlZEJ1ZmZlclNpemVJbkJ5dGVzKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gZnVsbC1z
YW1wbGUgZGVjcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIGluLmVuY3J5cHRlZEJ1ZmZl
clNpemVJbkJ5dGVzKTsKKworICAgIGlmIChnY3J5X2Vycm9yX3QgY2lwaGVyRXJyb3IgPSBnY3J5
X2NpcGhlcl9kZWNyeXB0KG1fZ2NyeUhhbmRsZSwgaW4uZW5jcnlwdGVkQnVmZmVyLCBpbi5lbmNy
eXB0ZWRCdWZmZXJTaXplSW5CeXRlcywgMCwgMCkpIHsKKyAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IENETVByb3h5Q2xlYXJLZXkgLSBFUlJPUihnY3J5X2NpcGhlcl9kZWNyeXB0KTogJXMiLCBncGdf
c3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0
U3Vic2FtcGxlZChjZW5jRGVjcnlwdENvbnRleHQmIGlucHV0KQoreworICAgIHVuc2lnbmVkIGVu
Y3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPSAwOworICAgIHNpemVfdCBzdWJTYW1wbGVCdWZmZXJC
eXRlT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBzdWJzYW1wbGVJbmRleCA9IDA7CisgICAgd2hp
bGUgKGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQgPCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXpl
SW5CeXRlcykgeworICAgICAgICB1aW50MTZfdCBzdWJzYW1wbGVOdW1DbGVhckJ5dGVzID0gMDsK
KyAgICAgICAgdWludDMyX3Qgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSAwOworCisgICAg
ICAgIGlmIChzdWJzYW1wbGVJbmRleCA8IGlucHV0Lm51bVN1YnNhbXBsZXMpIHsKKyAgICAgICAg
ICAgIGlmICghcmVhZFVJbnQxNihpbnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1w
bGVzQnVmZmVyU2l6ZUluQnl0ZXMsIHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBs
ZU51bUNsZWFyQnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENETVBy
b3h5Q2xlYXJLZXkgLSBjb3VsZCBub3QgcmVhZCBudW1iZXIgb2YgY2xlYXIgYnl0ZXMgaW4gc3Vi
c2FtcGxlIGF0IGluZGV4ICV1Iiwgc3Vic2FtcGxlSW5kZXgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVhZFVJbnQzMihp
bnB1dC5zdWJzYW1wbGVzQnVmZmVyLCBpbnB1dC5zdWJzYW1wbGVzQnVmZmVyU2l6ZUluQnl0ZXMs
IHN1YlNhbXBsZUJ1ZmZlckJ5dGVPZmZzZXQsIHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVzKSkg
eworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDRE1Qcm94eUNsZWFyS2V5IC0gY291
bGQgbm90IHJlYWQgbnVtYmVyIG9mIGVuY3J5cHRlZCBieXRlcyBpbiBzdWJzYW1wbGUgYXQgaW5k
ZXggJXUiLCBzdWJzYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Vic2FtcGxlSW5kZXgrKzsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHN1YnNhbXBsZU51bUNsZWFyQnl0ZXMgPSAwOworICAgICAgICAg
ICAgc3Vic2FtcGxlTnVtRW5jcnlwdGVkQnl0ZXMgPSBpbnB1dC5lbmNyeXB0ZWRCdWZmZXJTaXpl
SW5CeXRlcyAtIGVuY3J5cHRlZEJ1ZmZlckJ5dGVPZmZzZXQ7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogVGhlc2UgYXJlIGhpZ2gtZnJlcXVlbmN5IG1lc3NhZ2VzLCBub3Qgc3VyZSBp
ZiB0aGVyZSdzIGEgYmV0dGVyIGxvZ2dpbmcgbGliIGluIFdlYkNvcmUuCisgICAgICAgIExPRyhF
TUUsICJFTUUgLSBzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBjbGVhciAoJWx1IGJ5dGVz
IGxlZnQgdG8gZGVjcnlwdCkiLCBzdWJzYW1wbGVJbmRleCwgc3Vic2FtcGxlTnVtQ2xlYXJCeXRl
cywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRl
T2Zmc2V0KTsKKworICAgICAgICBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0ICs9IHN1YnNhbXBs
ZU51bUNsZWFyQnl0ZXM7CisKKyAgICAgICAgaWYgKHN1YnNhbXBsZU51bUVuY3J5cHRlZEJ5dGVz
KSB7CisgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gc3Vic2FtcGxlIGluZGV4ICV1IC0gJXUg
Ynl0ZXMgZW5jcnlwdGVkICglbHUgYnl0ZXMgbGVmdCB0byBkZWNyeXB0KSIsIHN1YnNhbXBsZUlu
ZGV4LCBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgaW5wdXQuZW5jcnlwdGVkQnVmZmVyU2l6
ZUluQnl0ZXMgLSBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0KTsKKworICAgICAgICAgICAgaWYg
KGdjcnlfZXJyb3JfdCBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQobV9nY3J5SGFu
ZGxlLCBpbnB1dC5lbmNyeXB0ZWRCdWZmZXIgKyBlbmNyeXB0ZWRCdWZmZXJCeXRlT2Zmc2V0LCBz
dWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlcywgMCwgMCkpIHsKKyAgICAgICAgICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ0RNUHJveHlDbGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX2RlY3J5cHQp
OiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlwdGVkQnVmZmVyQnl0
ZU9mZnNldCArPSBzdWJzYW1wbGVOdW1FbmNyeXB0ZWRCeXRlczsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNy
eXB0KENETVByb3h5Q2xlYXJLZXk6OmNlbmNEZWNyeXB0Q29udGV4dCYgaW5wdXQpCit7CisgICAg
aWYgKCFjZW5jU2V0Q291bnRlclZlY3RvcihpbnB1dCkgfHwgIWNlbmNTZXREZWNyeXB0aW9uS2V5
KGlucHV0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0LmlzU3Vi
c2FtcGxlZCgpID8gY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGlucHV0KSA6IGNlbmNEZWNyeXB0RnVs
bFNhbXBsZShpbnB1dCk7Cit9CisKK3ZvaWQgQ0RNUHJveHlDbGVhcktleTo6aW5pdGlhbGl6ZUdj
cnlwdCgpCit7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4o
Jm1fZ2NyeUhhbmRsZSwgR0NSWV9DSVBIRVJfQUVTMTI4LCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwg
R0NSWV9DSVBIRVJfU0VDVVJFKSkgeworICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ0RNUHJveHlD
bGVhcktleSAtIEVSUk9SKGdjcnlfY2lwaGVyX29wZW4pOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJv
cikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChmYWxzZSAmJiAiU2hvdWxkIG5vdCBnZXQgdGhp
cyBmYXIgd2l0aCBhIGZ1bmN0aW9uYWwgR0NyeXB0ISIpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RN
UHJveHlDbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZS9DRE1Qcm94eUNsZWFyS2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyNDBjOWY4ZDRjZTY3YWFi
ZDFkZmVkMDdiNjZiNTEwNDEyMThiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvQ0RNUHJveHlDbGVhcktleS5oCkBAIC0w
LDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKKworI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNSW5zdGFuY2VT
ZXNzaW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z2NyeXB0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3JIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVGhpcyBpcyB0aGUgdGhyZWFkLXNhZmUgQVBJIHRoYXQgZGVjb2RlIHRocmVhZHMgc2hv
dWxkIHVzZSB0byBtYWtlIHVzZSBvZiBhCisvLyBwbGF0Zm9ybSBDRE0gbW9kdWxlLgorY2xhc3Mg
Q0RNUHJveHlDbGVhcktleSBmaW5hbCA6IHB1YmxpYyBDRE1Qcm94eSwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPENETVByb3h5Q2xlYXJLZXksIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVh
Z2VyPiB7CitwdWJsaWM6CisgICAgQ0RNUHJveHlDbGVhcktleSgpCisgICAgeworICAgICAgICBp
bml0aWFsaXplR2NyeXB0KCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNETVByb3h5Q2xlYXJLZXko
KTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSdzIGEgbGFjayBvZiBjb25zaXN0ZW5jeSBiZXR3ZWVu
IFNoYXJlZEJ1ZmZlcnMsCisgICAgLy8gVmVjdG9yPGNoYXI+J3MgYW5kIHt1aW50OF90KixzaXpl
X3R9IGlkaW9tcyBmb3IgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YKKyAgICAvLyBieXRlcy4gRml4
IHRoYXQgc29tZWhvdy4gTm90ZSBTaGFyZWRCdWZmZXJzIGFyZSBkYW5nZXJvdXMgc2luY2UKKyAg
ICAvLyB0aGV5J3JlIG5vdCB0aHJlYWQtc2FmZSBhbmQgdGhpcyBjbGFzcyBtdXN0IG1haW50YWlu
CisgICAgLy8gdGhyZWFkLXNhZmV0eSwgYnV0IG1heWJlIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnQgY291bGQgYmUKKyAgICAvLyBtYWRlIHRvIHdvcmssIGhvd2V2ZXIgdGhhdCBoYXMgemVybyBo
ZWxwZXJzIGZvciBkcm9wcGluZyBpbnRvCisgICAgLy8gaXRlcmF0b3ItYXdhcmUgLyBjb21wYXJh
dG9yLWF3YXJlIGNvbnRhaW5lcnMuLi4KKyAgICBzdHJ1Y3QgY2VuY0RlY3J5cHRDb250ZXh0IHsK
KyAgICAgICAgLy8gRklYTUU6IEVuYWNhcHN1bGF0ZSB0aGVzZSBmaWVsZHMgaW4gbm9uLWNvcGll
ZCB0eXBlcy4KKyAgICAgICAgY29uc3QgdWludDhfdCoga2V5SUQ7CisgICAgICAgIHNpemVfdCBr
ZXlJRFNpemVJbkJ5dGVzOworCisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2OworICAgICAgICBz
aXplX3QgaXZTaXplSW5CeXRlczsKKworICAgICAgICB1aW50OF90KiBlbmNyeXB0ZWRCdWZmZXI7
CisgICAgICAgIHNpemVfdCBlbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlczsKKworICAgICAgICAv
LyBGSVhNRTogR1N0cmVhbWVyLXNwZWNpZmljIGRhdGEgbGF5b3V0LgorICAgICAgICAvLyBJZiB3
ZSB3YW50IHRvIGdldCByaWQgb2YgdGhlIHNwZWNpZmljIGRhdGEgbGF5b3V0LCB3ZSBjYW4gcGFy
c2UgaXQgYmVmb3JlCisgICAgICAgIC8vIGFzc2lnbmluZyBpdCBoZXJlIGFuZCBtYXliZSBoYXZl
IGEgVmVjdG9yPHNpemVfdD4gdGhhdCBpcyBhIHNlcmllcyBvZgorICAgICAgICAvLyBjbGVhci9k
ZWNyeXB0ZWQvY2xlYXIvZGVjcnlwdGVkLi4uIE9yIG1heWJlIGV2ZW4gYSBWZWN0b3I8c3RkOjpw
YWlyPHNpemVfdCwgc2l6ZV90Pj4KKyAgICAgICAgLy8gcmVwcmVzZW50aW5nIHNlcXVlbmNlcyBv
ZiBjbGVhci9kZWNyeXB0ZWQgc2l6ZXMuIFRoYXQgc3RkOjpwYWlyIGNvdWxkIGV2ZW4KKyAgICAg
ICAgLy8gYmVjb21lIGEgc3RydWN0IENsZWFyRGVjcnlwdGVkQ2h1bmtTaXplc0luQnl0ZXMgZm9y
IGV4YW1wbGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDY3MzAKKyAgICAgICAgY29uc3QgdWludDhfdCogc3Vic2FtcGxlc0J1ZmZlcjsKKyAg
ICAgICAgc2l6ZV90IHN1YnNhbXBsZXNCdWZmZXJTaXplSW5CeXRlczsKKyAgICAgICAgc2l6ZV90
IG51bVN1YnNhbXBsZXM7CisKKyAgICAgICAgYm9vbCBpc1N1YnNhbXBsZWQoKSBjb25zdCB7IHJl
dHVybiBudW1TdWJzYW1wbGVzOyB9CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBVbmNvbmRpdGlv
bmFsIGluLXBsYWNlIGRlY3J5cHRpb24uIFdoYXQgYWJvdXQgU1ZQPworICAgIC8vIEZJWE1FOiBH
U3RyZWFtZXItc3BlY2lmaWMsIGluIHRoYXQgdGhlIGZvcm1hdCBvZiB0aGUgc3Vic2FtcGxlCisg
ICAgLy8gZGF0YSBpcyBkZWZpbmVkIGJ5IHdoYXRldmVyIHF0ZGVtdXggZGVjaWRlcyB0byBkbyB3
aXRoIGl0LgorICAgIGJvb2wgY2VuY0RlY3J5cHQoY2VuY0RlY3J5cHRDb250ZXh0Jik7CisKK3By
aXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplR2NyeXB0KCk7CisKKyAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBvbmx5IHN1cHBvcnQgQUVTIGluIENUUiBtb2RlLCBpbiB0aGUgZnV0dXJlCisgICAg
Ly8gd2Ugd2lsbCBzdXJlbHkgaGF2ZSB0byBzdXBwb3J0IG1vcmUgcHJvdGVjdGlvbiBzY2hlbWVz
LiBDYW4gd2UKKyAgICAvLyByZXVzZSBzb21lIENyeXB0byBBUElzIGluIFdlYkNvcmU/CisgICAg
Ym9vbCBjZW5jU2V0Q291bnRlclZlY3Rvcihjb25zdCBjZW5jRGVjcnlwdENvbnRleHQmKTsKKyAg
ICBib29sIGNlbmNTZXREZWNyeXB0aW9uS2V5KGNvbnN0IGNlbmNEZWNyeXB0Q29udGV4dCYpOwor
ICAgIGJvb2wgY2VuY0RlY3J5cHRGdWxsU2FtcGxlKGNlbmNEZWNyeXB0Q29udGV4dCYpOworICAg
IGJvb2wgY2VuY0RlY3J5cHRTdWJzYW1wbGVkKGNlbmNEZWNyeXB0Q29udGV4dCYpOworCisgICAg
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHNvbWV0aGluZyBpbiBXZWJDb3JlIGZv
ciBjcnlwdG8uLi4KKyAgICBnY3J5X2NpcGhlcl9oZF90IG1fZ2NyeUhhbmRsZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
ZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCmluZGV4IGQ4YzAyNTRmZjE0MzAzYzVlMTg5NzNiZTRmMjIxYWU3YzBlOTM0
YTkuLjU4M2YyNjE4NmFkZjhiNzg3YmI5MzM2Nzk3MTZiMDQ4M2YxZDJmZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xl
YXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNF
KEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkNETUNsZWFyS2V5LmgiCisjaW5jbHVkZSAiQ0RNUHJv
eHlDbGVhcktleS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIkdT
dHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGdjcnlwdC5oPgpAQCAtMzcsMTIgKzM4
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZGVmaW5lIFdFQktJVF9NRURJQV9D
S19ERUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgo
b2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfQ0tfREVDUllQVCwgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKSkKIHN0cnVjdCBfV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
IHsKLSAgICBSZWZQdHI8UHJveHlDRE1DbGVhcktleT4gcHJveHlDRE07Ci0gICAgZ2NyeV9jaXBo
ZXJfaGRfdCBoYW5kbGU7CisgICAgUmVmUHRyPENETVByb3h5Q2xlYXJLZXk+IGNkbVByb3h5Owog
fTsKIAogc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwotc3RhdGljIGJvb2wgaGFuZGxl
S2V5UmVzcG9uc2UoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgUmVm
UHRyPFByb3h5Q0RNPik7CitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4pOwogc3RhdGlj
IGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVm
ZmVyKiBpdiwgR3N0QnVmZmVyKiBrZXlpZCwgR3N0QnVmZmVyKiBzYW1wbGUsIHVuc2lnbmVkIHN1
YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzKTsKIAogR1NUX0RFQlVHX0NBVEVH
T1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2RlY3J5cHRfZGVidWdfY2F0ZWdvcnkp
OwpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfY2xlYXJfa2V5X2Rl
Y3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdAogCiAgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdENsYXNzKiBjZW5jQ2xhc3MgPSBXRUJLSVRfTUVE
SUFfQ0VOQ19ERUNSWVBUX0NMQVNTKGtsYXNzKTsKICAgICBjZW5jQ2xhc3MtPnByb3RlY3Rpb25T
eXN0ZW1JZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6c19DbGVhcktleVVVSUQ7Ci0gICAgY2Vu
Y0NsYXNzLT5oYW5kbGVLZXlSZXNwb25zZSA9IEdTVF9ERUJVR19GVU5DUFRSKGhhbmRsZUtleVJl
c3BvbnNlKTsKKyAgICBjZW5jQ2xhc3MtPmNkbVByb3h5QXR0YWNoZWQgPSBHU1RfREVCVUdfRlVO
Q1BUUihjZG1Qcm94eUF0dGFjaGVkKTsKICAgICBjZW5jQ2xhc3MtPmRlY3J5cHQgPSBHU1RfREVC
VUdfRlVOQ1BUUihkZWNyeXB0KTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFz
cywgc2l6ZW9mKFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSkpOwpAQCAtOTMsNjEg
KzkzLDMyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9jbGVhcl9rZXlfZGVjcnlwdF9jbGFz
c19pbml0KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0CiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVk
aWFfY2xlYXJfa2V5X2RlY3J5cHRfaW5pdChXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdCogc2Vs
ZikKIHsKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShzZWxmKTsKLQogICAgIHNlbGYtPnByaXYg
PSBwcml2OwogICAgIG5ldyAocHJpdikgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRl
KCk7Ci0gICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJihwcml2
LT5oYW5kbGUpLCBHQ1JZX0NJUEhFUl9BRVMxMjgsIEdDUllfQ0lQSEVSX01PREVfQ1RSLCBHQ1JZ
X0NJUEhFUl9TRUNVUkUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxl
ZCB0byBjcmVhdGUgQUVTIDEyOCBDVFIgY2lwaGVyIGhhbmRsZTogJXMiLCBncGdfc3RyZXJyb3Io
ZXJyb3IpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvcik7Ci0gICAgfQogfQogCiBzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVChvYmplY3QpOwogICAgIFdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXY7Ci0gICAgZ2Ny
eV9jaXBoZXJfY2xvc2UocHJpdi0+aGFuZGxlKTsKICAgICBwcml2LT5+V2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRQcml2YXRlKCk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xB
U1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZUtleVJlc3Bv
bnNlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxQcm94
eUNETT4gcHJveHlDRE0pCitzdGF0aWMgYm9vbCBjZG1Qcm94eUF0dGFjaGVkKFdlYktpdE1lZGlh
Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYsIFJlZlB0cjxDRE1Qcm94eT4gY2RtUHJveHkp
CiB7CiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2Vs
ZikpOwotICAgIHByaXYtPnByb3h5Q0RNID0gcmVpbnRlcnByZXRfY2FzdDxQcm94eUNETUNsZWFy
S2V5Kj4ocHJveHlDRE0uZ2V0KCkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsKKyAgICBw
cml2LT5jZG1Qcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0RNUHJveHlDbGVhcktleSo+KGNkbVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7CiB9CiAKLXN0YXRpYyBib29s
IGZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2LCBj
b25zdCBTdHJpbmcmJiBrZXlJRCkKK3N0YXRpYyBib29sIGRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZiwgR3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVy
KiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2lnbmVkIHN1YnNhbXBsZUNvdW50
LCBHc3RCdWZmZXIqIHN1YnNhbXBsZXNCdWZmZXIpCiB7Ci0gICAgU3RyaW5nIGtleVZhbHVlOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBwcml2LT5wcm94eUNETS0+aXNvbGF0ZWRLZXlz
KCkpIHsKLSAgICAgICAgaWYgKGtleS5rZXlJRERhdGEgPT0ga2V5SUQpIHsKLSAgICAgICAgICAg
IGtleVZhbHVlID0ga2V5LmtleVZhbHVlRGF0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGtleVZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKHByaXYsICJmYWlsZWQgdG8gZmluZCBhIGRlY3J5cHRpb24ga2V5Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2V5VmFsdWUuc2l6ZUlu
Qnl0ZXMoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0g
Z2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwga2V5VmFsdWUuY2hhcmFjdGVyczgoKSwg
a2V5VmFsdWUuc2l6ZUluQnl0ZXMoKSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2
LCAiZ2NyeV9jaXBoZXJfc2V0a2V5IGZhaWxlZDogJXMiLCBncGdfc3RyZXJyb3IoZXJyb3IpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQorICAg
IFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9D
S19ERUNSWVBUX0dFVF9QUklWQVRFKFdFQktJVF9NRURJQV9DS19ERUNSWVBUKHNlbGYpKTsKIAot
c3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiBz
ZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmVyLCBHc3RCdWZmZXIqIGtleUlEQnVmZmVyLCBHc3RCdWZm
ZXIqIGJ1ZmZlciwgdW5zaWduZWQgc3ViU2FtcGxlQ291bnQsIEdzdEJ1ZmZlciogc3ViU2FtcGxl
c0J1ZmZlcikKLXsKLSAgICBpZiAoIWl2QnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc2VsZiwgIm5vIElWIGJ1ZmZlciIpOworICAgIGlmICghaXZCdWZmZXIgfHwgIWtleUlEQnVm
ZmVyIHx8ICFidWZmZXIpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiaW52YWxp
ZCBkZWNyeXB0KCkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTE1NywyNyArMTI4LDYgQEAgc3RhdGljIGJvb2wgZGVjcnlwdChXZWJLaXRNZWRpYUNvbW1v
bkVuY3J5cHRpb25EZWNyeXB0KiBzZWxmLCBHc3RCdWZmZXIqIGl2QnVmZmUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJWkVdOwotICAg
IGlmIChtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKLSAgICAgICAgbWVtc2V0KGN0ciAr
IDgsIDAsIDgpOwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9
PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRh
dGEoKSwgQ0xFQVJLRVlfU0laRSk7Ci0gICAgfQotCi0gICAgV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUo
V0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwotICAgIGdjcnlfZXJyb3JfdCBjaXBoZXJF
cnJvciA9IGdjcnlfY2lwaGVyX3NldGN0cihwcml2LT5oYW5kbGUsIGN0ciwgQ0xFQVJLRVlfU0la
RSk7Ci0gICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2Vs
ZiwgImdjcnlfY2lwaGVyX3NldGN0ciBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVy
cm9yKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJ1ZmZlcikg
ewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJObyBidWZmZXIgdG8gZGVjcnlwdCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgYXV0byBtYXBwZWRLZXlJZEJ1
ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1Rf
TUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkS2V5SWRCdWZmZXIpIHsKICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIG1hcCBrZXkgaWQgYnVmZmVyIik7CkBAIC0xOTAs
NzIgKzE0MCwyOSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlw
dGlvbkRlY3J5cHQqIHNlbGYsIEdzdEJ1ZmZlciogaXZCdWZmZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgZmluZEFuZFNldEtleShwcml2LCBTdHJpbmcobWFwcGVkS2V5SWRC
dWZmZXItPmRhdGEoKSwgbWFwcGVkS2V5SWRCdWZmZXItPnNpemUoKSkpOwotCi0gICAgdW5zaWdu
ZWQgcG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNhbXBsZUluZGV4ID0gMDsKLQotICAgIGlm
ICghc3ViU2FtcGxlQ291bnQpIHsKLSAgICAgICAgLy8gRnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4K
LSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjog
JXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKLQotICAgICAgICAv
LyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVy
LT5zaXplKCkpIHsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlw
dChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUo
KSwgMCwgMCk7Ci0gICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKLSAgICAgICAgICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDog
JXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gQ2hlY2sgc3ViU2FtcGxlc0J1ZmZlciBpc24ndCBudWxsLgotICAgIGlm
ICghc3ViU2FtcGxlc0J1ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJF
cnJvciwgdGhlIHN1YlNhbXBsZUJ1ZmZlciBpcyBudWxsIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICBhdXRvIG1hcHBl
ZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJT
YW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1
ZmZlcikgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1
YnNhbXBsZSBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdV
bmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVk
U3ViU2FtcGxlc0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXplKCkp
KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIs
IHBvc2l0aW9uLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24g
PCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewotICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0g
MDsKLSAgICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0ZWQgPSAwOwotCi0gICAgICAgIGlmIChz
YW1wbGVJbmRleCA8IHN1YlNhbXBsZUNvdW50KSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9ieXRl
X3JlYWRlcl9nZXRfdWludDE2X2JlKHJlYWRlci5nZXQoKSwgJm5CeXRlc0NsZWFyKQotICAgICAg
ICAgICAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZShyZWFkZXIuZ2V0KCks
ICZuQnl0ZXNFbmNyeXB0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
ZWxmLCAidW5zdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBzYW1wbGVJbmRleCsrOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVk
ID0gbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBj
bGVhciAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSAtIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7Ci0g
ICAgICAgIGlmIChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0l
enUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkg
LSBwb3NpdGlvbik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5
cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNF
bmNyeXB0ZWQsIDAsIDApOwotICAgICAgICAgICAgaWYgKGNpcGhlckVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNy
eXB0aW9uIGZhaWxlZDogJXMiLCBzYW1wbGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9y
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzRW5jcnlwdGVkOworICAgIFJlZlB0cjxHc3RNYXBwZWRC
dWZmZXI+IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXI7CisgICAgQ0RNUHJveHlDbGVhcktleTo6Y2Vu
Y0RlY3J5cHRDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5rZXlJRCA9IG1hcHBlZEtleUlk
QnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dC5rZXlJRFNpemVJbkJ5dGVzID0gbWFwcGVkS2V5
SWRCdWZmZXItPnNpemUoKTsKKyAgICBjb250ZXh0Lml2ID0gbWFwcGVkSVZCdWZmZXItPmRhdGEo
KTsKKyAgICBjb250ZXh0Lml2U2l6ZUluQnl0ZXMgPSBtYXBwZWRJVkJ1ZmZlci0+c2l6ZSgpOwor
ICAgIGNvbnRleHQuZW5jcnlwdGVkQnVmZmVyID0gbWFwcGVkQnVmZmVyLT5kYXRhKCk7CisgICAg
Y29udGV4dC5lbmNyeXB0ZWRCdWZmZXJTaXplSW5CeXRlcyA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgp
OworICAgIGNvbnRleHQubnVtU3Vic2FtcGxlcyA9IHN1YnNhbXBsZUNvdW50OworICAgIGlmICgh
c3Vic2FtcGxlQ291bnQpCisgICAgICAgIGNvbnRleHQuc3Vic2FtcGxlc0J1ZmZlciA9IG51bGxw
dHI7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdWJzYW1wbGVzQnVmZmVyKTsKKyAgICAg
ICAgbWFwcGVkU3Vic2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3Jl
YXRlKHN1YnNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGlmICghbWFwcGVk
U3Vic2FtcGxlc0J1ZmZlcikgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
RmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5zdWJzYW1wbGVzQnVmZmVyID0gbWFwcGVk
U3Vic2FtcGxlc0J1ZmZlci0+ZGF0YSgpOworICAgICAgICBjb250ZXh0LnN1YnNhbXBsZXNCdWZm
ZXJTaXplSW5CeXRlcyA9IG1hcHBlZFN1YnNhbXBsZXNCdWZmZXItPnNpemUoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHktPmNlbmNEZWNyeXB0
KGNvbnRleHQpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktp
dENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IDM2ODNkMDQ3NDg2
MGY2ZWY4MTdmMzFjZGMxNWU0OGFjMTg2YzAzNDQuLjQ3YjU2MGY3MzkyMDlkYzJhMTYyNDRjMDc5
ODAzNzQ3YzMwNDEyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmNwcApAQCAtMjUsMzQg
KzI1LDM0IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBVU0UoR1NUUkVBTUVS
KQogCisjaW5jbHVkZSAiQ0RNUHJveHkuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIK
ICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6UHJveHlDRE07
Cit1c2luZyBXZWJDb3JlOjpDRE1Qcm94eTsKIAogI2RlZmluZSBXRUJLSVRfTUVESUFfQ0VOQ19E
RUNSWVBUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2Jq
KSwgV0VCS0lUX1RZUEVfTUVESUFfQ0VOQ19ERUNSWVBULCBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25EZWNyeXB0UHJpdmF0ZSkpCiBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkRlY3J5cHRQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEV2ZW50PiBwcm90ZWN0aW9uRXZlbnQ7
Ci0gICAgUmVmUHRyPFByb3h5Q0RNPiBwcm94eUNETTsKLSAgICBib29sIGtleVJlY2VpdmVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotICAgIExvY2sgbXV0
ZXg7Ci0gICAgQ29uZGl0aW9uIGNvbmRpdGlvbjsKKyAgICBSZWZQdHI8Q0RNUHJveHk+IGNkbVBy
b3h5OworCisgICAgTG9jayBjZG1BdHRhY2htZW50TXV0ZXg7CisgICAgQ29uZGl0aW9uIGNkbUF0
dGFjaG1lbnRDb25kaXRpb247CiB9OwogCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgTWF4U2Vj
b25kc1RvV2FpdEZvckNETVByb3h5ID0gNV9zOworCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1
cm4gY2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwog
c3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCopOwogc3RhdGljIEdzdENhcHMqIHRyYW5zZm9y
bUNhcHMoR3N0QmFzZVRyYW5zZm9ybSosIEdzdFBhZERpcmVjdGlvbiwgR3N0Q2FwcyosIEdzdENh
cHMqKTsKIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5z
Zm9ybSosIEdzdEJ1ZmZlciopOwogc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0
QmFzZVRyYW5zZm9ybSosIEdzdEV2ZW50Kik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVy
KEdzdEJhc2VUcmFuc2Zvcm0qLCBHc3RQYWREaXJlY3Rpb24sIEdzdFF1ZXJ5Kik7Ci1zdGF0aWMg
Ym9vbCBpc0NETUluc3RhbmNlQXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqKTsKIHN0YXRpYyB2b2lkIHNldENvbnRleHQoR3N0RWxlbWVudCosIEdzdENvbnRleHQq
KTsKIAotCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9jb21tb25fZW5j
cnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9jb21tb25fZW5jcnlwdGlvbl9kZWNyeXB0X2RlYnVnX2NhdGVnb3J5CiAK
QEAgLTc2LDcgKzc2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX2NvbW1vbl9lbmNyeXB0
aW9uX2RlY3J5cHRfY2xhc3NfaW5pdChXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBiYXNlVHJhbnNm
b3JtQ2xhc3MtPnRyYW5zZm9ybV9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIodHJhbnNmb3JtQ2Fw
cyk7CiAgICAgYmFzZVRyYW5zZm9ybUNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2gg
PSBGQUxTRTsKICAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdf
RlVOQ1BUUihzaW5rRXZlbnRIYW5kbGVyKTsKLSAgICBiYXNlVHJhbnNmb3JtQ2xhc3MtPnF1ZXJ5
ID0gR1NUX0RFQlVHX0ZVTkNQVFIocXVlcnlIYW5kbGVyKTsKIAogICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKSk7CiB9CkBAIC0xNzcsMjkgKzE3NiwyMCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVy
biB0cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVm
ZmVyKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBX
RUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGJhc2UpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9H
RVRfUFJJVkFURShzZWxmKTsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5tdXRleCk7CiAK
LSAgICAvLyBUaGUga2V5IG1pZ2h0IG5vdCBoYXZlIGJlZW4gcmVjZWl2ZWQgeWV0LiBXYWl0IGZv
ciBpdC4KLSAgICBpZiAoIXByaXYtPmtleVJlY2VpdmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIHlldCwgd2FpdGluZyBmb3IgaXQiKTsKLSAg
ICAgICAgaWYgKEdTVF9TVEFURShHU1RfRUxFTUVOVChzZWxmKSkgPCBHU1RfU1RBVEVfUEFVU0VE
IHx8IChHU1RfU1RBVEVfVEFSR0VUKEdTVF9FTEVNRU5UKHNlbGYpKSAhPSBHU1RfU1RBVEVfVk9J
RF9QRU5ESU5HICYmIEdTVF9TVEFURV9UQVJHRVQoR1NUX0VMRU1FTlQoc2VsZikpIDwgR1NUX1NU
QVRFX1BBVVNFRCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImNhbid0
IHByb2Nlc3Mga2V5IHJlcXVlc3RzIGluIGxlc3MgdGhhbiBQQVVTRUQgc3RhdGUiKTsKLSAgICAg
ICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFNlbmQgImRybS1jZG0taW5zdGFuY2UtbmVlZGVkIiBtZXNzYWdlIHRvIHRoZSBwbGF5ZXIg
dG8gcmVzZW5kIHRoZSBDRE1JbnN0YW5jZSBpZiBhdmFpbGFibGUgYW5kIGluZm9ybSB3ZSBhcmUg
d2FpdGluZyBmb3Iga2V5LgotICAgICAgICBwcml2LT53YWl0aW5nRm9yS2V5ID0gdHJ1ZTsKLSAg
ICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNlbGYpLCBnc3RfbWVz
c2FnZV9uZXdfZWxlbWVudChHU1RfT0JKRUNUKHNlbGYpLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0
eSgiZHJtLXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIocHJpdi0+
Y2RtQXR0YWNobWVudE11dGV4KTsKIAotICAgICAgICBwcml2LT5jb25kaXRpb24ud2FpdEZvcihw
cml2LT5tdXRleCwgU2Vjb25kcyg1KSwgW3ByaXZdIHsKLSAgICAgICAgICAgIHJldHVybiBwcml2
LT5rZXlSZWNlaXZlZDsKKyAgICAvLyBUaGUgQ0RNIGluc3RhbmNlIG5lZWRzIHRvIGJlIG5lZ290
aWF0ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBkZWNyeXB0aW9uLgorICAgIGlmICghcHJpdi0+Y2Rt
UHJveHkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiQ0RNIG5vdCBhdmFpbGFi
bGUsIGdvaW5nIHRvIHdhaXQgZm9yIGl0Iik7CisgICAgICAgIHByaXYtPmNkbUF0dGFjaG1lbnRD
b25kaXRpb24ud2FpdEZvcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgsIE1heFNlY29uZHNUb1dh
aXRGb3JDRE1Qcm94eSwgW3ByaXZdIHsKKyAgICAgICAgICAgIHJldHVybiBwcml2LT5jZG1Qcm94
eTsKICAgICAgICAgfSk7Ci0gICAgICAgIGlmICghcHJpdi0+a2V5UmVjZWl2ZWQpIHsKLSAgICAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgImtleSBub3QgYXZhaWxhYmxlIik7CisgICAg
ICAgIGlmICghcHJpdi0+Y2RtUHJveHkpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgIkNETVByb3h5IHdhcyBub3QgcmV0cmlldmVkIGluIHRpbWUiKTsKICAgICAgICAgICAg
IHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwogICAgICAgICB9Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2VsZiwgImtleSByZWNlaXZlZCwgY29udGludWluZyIpOwotICAgICAgICBw
cml2LT53YWl0aW5nRm9yS2V5ID0gZmFsc2U7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVz
c2FnZShHU1RfRUxFTUVOVChzZWxmKSwgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQoR1NUX09CSkVD
VChzZWxmKSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImRybS1rZXktcmVjZWl2ZWQiKSkpOwor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJDRE0gbm93IGF2YWlsYWJsZSB3aXRoIGFk
ZHJlc3MgJXAiLCBwcml2LT5jZG1Qcm94eS5nZXQoKSk7CiAgICAgfQogCiAgICAgR3N0UHJvdGVj
dGlvbk1ldGEqIHByb3RlY3Rpb25NZXRhID0gcmVpbnRlcnByZXRfY2FzdDxHc3RQcm90ZWN0aW9u
TWV0YSo+KGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShidWZmZXIpKTsKQEAgLTIwNywz
MiArMTk3LDMwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFz
ZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgR3N0UHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1
ZmZlciAlcCIsIGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVE
OwogICAgIH0KKyAgICBhdXRvIHJlbW92ZVByb3RlY3Rpb25NZXRhT25SZXR1cm4gPSBtYWtlU2Nv
cGVFeGl0KFtidWZmZXIsIHByb3RlY3Rpb25NZXRhXSB7CisgICAgICAgIGdzdF9idWZmZXJfcmVt
b3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0
YSkpOworICAgIH0pOwogCiAgICAgdW5zaWduZWQgaXZTaXplOwogICAgIGlmICghZ3N0X3N0cnVj
dHVyZV9nZXRfdWludChwcm90ZWN0aW9uTWV0YS0+aW5mbywgIml2X3NpemUiLCAmaXZTaXplKSkg
ewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGl2X3NpemUi
KTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19O
T1RfU1VQUE9SVEVEOwogICAgIH0KIAogICAgIGdib29sZWFuIGVuY3J5cHRlZDsKICAgICBpZiAo
IWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4ocHJvdGVjdGlvbk1ldGEtPmluZm8sICJlbmNyeXB0
ZWQiLCAmZW5jcnlwdGVkKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWls
ZWQgdG8gZ2V0IGVuY3J5cHRlZCBmbGFnIik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21l
dGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwog
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAKLSAgICBpZiAo
IWl2U2l6ZSB8fCAhZW5jcnlwdGVkKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEo
YnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOworICAg
IGlmICghaXZTaXplIHx8ICFlbmNyeXB0ZWQpCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsK
LSAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKGJhc2UsICJwcm90ZWN0aW9uIG1ldGE6ICUi
IEdTVF9QVFJfRk9STUFULCBwcm90ZWN0aW9uTWV0YS0+aW5mbyk7CiAKICAgICB1bnNpZ25lZCBz
dWJTYW1wbGVDb3VudDsKICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocHJvdGVjdGlv
bk1ldGEtPmluZm8sICJzdWJzYW1wbGVfY291bnQiLCAmc3ViU2FtcGxlQ291bnQpKSB7CiAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2FtcGxlX2NvdW50
Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9j
YXN0PEdzdE1ldGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1df
Tk9UX1NVUFBPUlRFRDsKICAgICB9CiAKQEAgLTI0MiwxNyArMjMwLDE5IEBAIHN0YXRpYyBHc3RG
bG93UmV0dXJuIHRyYW5zZm9ybUluUGxhY2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVm
ZmVyKiBidWZmZXIpCiAgICAgICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJv
dGVjdGlvbk1ldGEtPmluZm8sICJzdWJzYW1wbGVzIik7CiAgICAgICAgIGlmICghdmFsdWUpIHsK
ICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBnZXQgc3Vic2Ft
cGxlcyIpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YShidWZmZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7CiAgICAgICAgICAgICByZXR1
cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBzdWJTYW1wbGVz
QnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIodmFsdWUpOworICAgICAgICBpZiAoIXN1YlNh
bXBsZXNCdWZmZXIpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIlRoZXJl
IGlzIG5vIHN1YnNhbXBsZXMgYnVmZmVyLCBidXQgYSBwb3NpdGl2ZSBzdWJzYW1wbGUgY291bnQi
KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOworICAgICAgICB9
CiAgICAgfQogCiAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShwcm90ZWN0aW9u
TWV0YS0+aW5mbywgImtpZCIpOwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gZ2V0IGtleSBpZCBmb3IgYnVmZmVyIik7Ci0gICAg
ICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1l
dGEqPihwcm90ZWN0aW9uTWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBP
UlRFRDsKICAgICB9CiAgICAgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRf
YnVmZmVyKHZhbHVlKTsKQEAgLTI2MCw3ICsyNTAsNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB0
cmFuc2Zvcm1JblBsYWNlKEdzdEJhc2VUcmFuc2Zvcm0qIGJhc2UsIEdzdEJ1ZmZlciogYnVmZmVy
KQogICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocHJvdGVjdGlvbk1ldGEtPmlu
Zm8sICJpdiIpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlIik7Ci0gICAgICAgIGdzdF9idWZmZXJf
cmVtb3ZlX21ldGEoYnVmZmVyLCByZWludGVycHJldF9jYXN0PEdzdE1ldGEqPihwcm90ZWN0aW9u
TWV0YSkpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKICAgICB9CiAK
QEAgLTI3MCw3MSArMjU5LDkxIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHRyYW5zZm9ybUluUGxh
Y2UoR3N0QmFzZVRyYW5zZm9ybSogYmFzZSwgR3N0QnVmZmVyKiBidWZmZXIpCiAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAiZGVjcnlwdGluZyIpOwogICAgIGlmICgha2xhc3MtPmRlY3J5cHQo
c2VsZiwgaXZCdWZmZXIsIGtleUlEQnVmZmVyLCBidWZmZXIsIHN1YlNhbXBsZUNvdW50LCBzdWJT
YW1wbGVzQnVmZmVyKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJEZWNyeXB0
aW9uIGZhaWxlZCIpOwotICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhKGJ1ZmZlciwgcmVp
bnRlcnByZXRfY2FzdDxHc3RNZXRhKj4ocHJvdGVjdGlvbk1ldGEpKTsKICAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7CiAgICAgfQogCi0gICAgZ3N0X2J1ZmZlcl9yZW1vdmVf
bWV0YShidWZmZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWV0YSo+KHByb3RlY3Rpb25NZXRhKSk7
CiAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwogfQogCi1zdGF0aWMgYm9vbCBpc0NETUluc3RhbmNl
QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYpCitzdGF0
aWMgYm9vbCBpc0NETVByb3h5QXZhaWxhYmxlKFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRl
Y3J5cHQqIHNlbGYpCiB7CiAgICAgV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYp
OworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2socHJpdi0+Y2RtQXR0YWNobWVudE11dGV4KTsK
KyAgICByZXR1cm4gcHJpdi0+Y2RtUHJveHk7Cit9CiAKLSAgICBBU1NFUlQocHJpdi0+bXV0ZXgu
aXNMb2NrZWQoKSk7Ci0KLSAgICBpZiAoIXByaXYtPnByb3h5Q0RNKSB7Ci0gICAgICAgIEdSZWZQ
dHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4
dChHU1RfRUxFTUVOVChzZWxmKSwgImRybS1jZG0taW5zdGFuY2UiKSk7Ci0gICAgICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0IGZpbmQg
dGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVuIGFuIHVw
c3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCi0gICAgICAgIC8vIG1lc3NhZ2UuIEluIHRo
aXMgY2FzZSB0aGF0IGRvZXMgbm90IG1ha2UgYSBsb3Qgb2Ygc2Vuc2Ugc2luY2Ugb25seSB0aGUg
YXBwIChwbGF5ZXIpIGFuc3dlcnMgaXQsIG1lYW5pbmcgdGhhdCBubyBxdWVyeSBpcyBnb2luZyB0
byBzb2x2ZSBpdC4gQSBtZXNzYWdlCi0gICAgICAgIC8vIGNvdWxkIGJlIGhlbHBmdWwgYnV0IHRo
ZSBwbGF5ZXIgc2V0cyB0aGUgY29udGV4dCBhcyBzb29uIGFzIGl0IGdldHMgdGhlIENETUluc3Rh
bmNlIGFuZCBpZiBpdCBkb2VzIG5vdCBoYXZlIGl0LCB3ZSBoYXZlIG5vIHdheSBvZiBhc2tpbmcg
Zm9yIG9uZSBhcyBpdCBpcwotICAgICAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3Nw
bGF0Zm9ybSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIg
dGhlIGJ1cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1
ZXJpZXMgbm9yIGJ1cwotICAgICAgICAvLyByZXF1ZXN0cyBhcmUgdXNlZnVsIGhlcmUuCi0gICAg
ICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0
X3N0cnVjdHVyZV9nZXRfdmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0Lmdl
dCgpKSwgImNkbS1pbnN0YW5jZSIpOwotICAgICAgICAgICAgcHJpdi0+cHJveHlDRE0gPSB2YWx1
ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVl
KSkgOiBudWxscHRyOwotICAgICAgICAgICAgaWYgKHByaXYtPnByb3h5Q0RNKQotICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIGEgbmV3IENETSBwcm94eSBp
bnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcml2LT5wcm94eUNETS5nZXQoKSwgcHJpdi0+cHJv
eHlDRE0tPnJlZkNvdW50KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdT
VF9UUkFDRV9PQkpFQ1Qoc2VsZiwgIkNETSBpbnN0YW5jZSB3YXMgZGV0YWNoZWQiKTsKK3N0YXRp
YyBDRE1Qcm94eSogZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0KiBzZWxmKQoreworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4
dCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfY29udGV4dChHU1RfRUxFTUVOVChzZWxmKSwg
ImRybS1jZG0tcHJveHkiKSk7CisgICAgQ0RNUHJveHkqIHByb3h5ID0gbnVsbHB0cjsKKworICAg
IC8vIEFjY29yZGluZyB0byB0aGUgR1N0cmVhbWVyIGRvY3VtZW50YXRpb24sIGlmIHdlIGNhbid0
IGZpbmQgdGhlIGNvbnRleHQsIHdlIHNob3VsZCBydW4gYSBkb3duc3RyZWFtIHF1ZXJ5LCB0aGVu
IGFuIHVwc3RyZWFtIG9uZSBhbmQgdGhlbiBzZW5kIGEgYnVzCisgICAgLy8gbWVzc2FnZS4gSW4g
dGhpcyBjYXNlIHRoYXQgZG9lcyBub3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBzaW5jZSBvbmx5IHRo
ZSBhcHAgKHBsYXllcikgYW5zd2VycyBpdCwgbWVhbmluZyB0aGF0IG5vIHF1ZXJ5IGlzIGdvaW5n
IHRvIHNvbHZlIGl0LiBBIG1lc3NhZ2UKKyAgICAvLyBjb3VsZCBiZSBoZWxwZnVsIGJ1dCB0aGUg
cGxheWVyIHNldHMgdGhlIGNvbnRleHQgYXMgc29vbiBhcyBpdCBnZXRzIHRoZSBDRE1JbnN0YW5j
ZSBhbmQgaWYgaXQgZG9lcyBub3QgaGF2ZSBpdCwgd2UgaGF2ZSBubyB3YXkgb2YgYXNraW5nIGZv
ciBvbmUgYXMgaXQgaXMKKyAgICAvLyBzb21ldGhpbmcgcHJvdmlkZWQgYnkgY3Jvc3NwbGF0Zm9y
bSBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgYWJsZSB0byBhbnN3ZXIgdGhlIGJ1
cyByZXF1ZXN0IGluIGFueSB3YXkgZWl0aGVyLiBTdW1taW5nIHVwLCBuZWl0aGVyIHF1ZXJpZXMg
bm9yIGJ1cworICAgIC8vIHJlcXVlc3RzIGFyZSB1c2VmdWwgaGVyZS4KKyAgICBpZiAoY29udGV4
dCkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFs
dWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0LmdldCgpKSwgImNkbS1wcm94eSIp
OworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIHByb3h5ID0gcmVpbnRlcnByZXRf
Y2FzdDxDRE1Qcm94eSo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAg
IGlmIChwcm94eSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInJl
Y2VpdmVkIGEgbmV3IENETSBwcm94eSBpbnN0YW5jZSAlcCwgcmVmY291bnQgJXUiLCBwcm94eSwg
cHJveHktPnJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwcm94eTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJDRE1Q
cm94eSBub3QgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0Iik7CiAgICAgfQotCi0gICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAiQ0RNIGluc3RhbmNlIGF2YWlsYWJsZSAlcyIsIGJvb2xGb3JQcmlu
dGluZyhwcml2LT5wcm94eUNETS5nZXQoKSkpOwotICAgIHJldHVybiBwcml2LT5wcm94eUNETTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRs
ZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKK3N0YXRpYyB2b2lk
IGF0dGFjaENETVByb3h5KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYs
IENETVByb3h5KiBwcm94eSkKIHsKLSAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNy
eXB0KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CiAgICAgV2ViS2l0
TWVkaWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfTUVESUFf
Q0VOQ19ERUNSWVBUX0dFVF9QUklWQVRFKHNlbGYpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHRDbGFzcyoga2xhc3MgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUX0dF
VF9DTEFTUyhzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAotICAgIHN3aXRj
aCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RP
V05TVFJFQU1fT09COiB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzU1Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGlu
ZyBwcm90ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCi0gICAgICAgIC8vIGFkZGl0aW9u
IHRvIG91dC1vZi1iYW5kIGRhdGEuIEluIHJlZ3VsYXIgcGxheWJhY2ssIGFmdGVyIGEKLSAgICAg
ICAgLy8gcHJlZmVycmVkIHN5c3RlbSBJRCBjb250ZXh0IGlzIHNldCwgYW55IGZ1dHVyZSBwcm90
ZWN0aW9uCi0gICAgICAgIC8vIGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11
eGVyLCBzbyB0aGUgbXVzdCBiZQotICAgICAgICAvLyBoYW5kbGVkIGluIGhlcmUuCi0gICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgaWYgKCFpc0NETUluc3Rh
bmNlQXZhaWxhYmxlKHNlbGYpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYs
ICJObyBDRE0gaW5zdGFuY2UgYXZhaWxhYmxlIik7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
IkF0dGFjaGluZyBDRE1Qcm94eSAlcCIsIHByb3h5KTsKKyAgICBwcml2LT5jZG1Qcm94eSA9IHBy
b3h5OworICAgIGtsYXNzLT5jZG1Qcm94eUF0dGFjaGVkKHNlbGYsIHByaXYtPmNkbVByb3h5KTsK
KyAgICBwcml2LT5jZG1BdHRhY2htZW50Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gaW5zdGFsbENETVByb3h5SWZOb3RBdmFpbGFibGUoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRGVjcnlwdCogc2VsZikKK3sKKyAgICBpZiAoIWlzQ0RNUHJveHlBdmFpbGFi
bGUoc2VsZikpIHsKKyAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAg
Q0RNUHJveHkqIHByb3h5ID0gZ2V0Q0RNUHJveHlGcm9tR3N0Q29udGV4dChzZWxmKTsKKyAgICAg
ICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBhdHRhY2hDRE1Qcm94eShzZWxmLCBwcm94eSk7
CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRvIHJldHJpZXZlIENETVByb3h5IGZy
b20gY29udGV4dCIpOwogICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAg
ICBpZiAoa2xhc3MtPmhhbmRsZUtleVJlc3BvbnNlKHNlbGYsIHByaXYtPnByb3h5Q0RNKSkgewot
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAia2V5IHJlY2VpdmVkIik7Ci0gICAg
ICAgICAgICBwcml2LT5rZXlSZWNlaXZlZCA9IHRydWU7Ci0gICAgICAgICAgICBwcml2LT5jb25k
aXRpb24ubm90aWZ5T25lKCk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3Rh
dGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5zZm9ybSogdHJhbnMsIEdz
dEV2ZW50KiBldmVudCkKK3sKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0
KiBzZWxmID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVCh0cmFucyk7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gRkFMU0U7CiAKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5MTM1NQorICAgIC8vIFdlIHNob3VsZCBiZSBoYW5kbGluZyBwcm90
ZWN0aW9uIGV2ZW50cyBpbiB0aGlzIGNsYXNzIGluCisgICAgLy8gYWRkaXRpb24gdG8gb3V0LW9m
LWJhbmQgZGF0YS4gSW4gcmVndWxhciBwbGF5YmFjaywgYWZ0ZXIgYQorICAgIC8vIHByZWZlcnJl
ZCBzeXN0ZW0gSUQgY29udGV4dCBpcyBzZXQsIGFueSBmdXR1cmUgcHJvdGVjdGlvbgorICAgIC8v
IGV2ZW50cyB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBkZW11eGVyLCBzbyB0aGV5IG11c3Qg
YmUKKyAgICAvLyBoYW5kbGVkIGluIGhlcmUuCisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShl
dmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0I6IHsKKyAg
ICAgICAgQVNTRVJUKGdzdF9ldmVudF9oYXNfbmFtZShldmVudCwgImF0dGVtcHQtdG8tZGVjcnlw
dCIpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiSGFuZGxpbmcgYXR0ZW1wdC10
by1kZWNyeXB0Iik7CisgICAgICAgIHJlc3VsdCA9IGluc3RhbGxDRE1Qcm94eUlmTm90QXZhaWxh
YmxlKHNlbGYpOwogICAgICAgICBnc3RfZXZlbnRfdW5yZWYoZXZlbnQpOwotICAgICAgICByZXN1
bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTM0NSwx
NiArMzU0LDYgQEAgc3RhdGljIGdib29sZWFuIHNpbmtFdmVudEhhbmRsZXIoR3N0QmFzZVRyYW5z
Zm9ybSogdHJhbnMsIEdzdEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgZ2Jvb2xlYW4gcXVlcnlIYW5kbGVyKEdzdEJhc2VUcmFuc2Zvcm0qIHRyYW5zLCBHc3RQ
YWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSogcXVlcnkpCi17Ci0gICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfaGFzX25hbWUoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUocXVlcnkpLCAiYW55LWRl
Y3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkgewotICAgICAgICBXZWJLaXRNZWRpYUNvbW1vbkVu
Y3J5cHRpb25EZWNyeXB0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9NRURJQV9DRU5DX0RFQ1JZUFRf
R0VUX1BSSVZBVEUodHJhbnMpOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHRyYW5zLCAiYW55
LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkgcXVlcnksIHdhaXRpbmdmb3JrZXkgJXMiLCBib29s
Rm9yUHJpbnRpbmcocHJpdi0+d2FpdGluZ0ZvcktleSkpOwotICAgICAgICByZXR1cm4gcHJpdi0+
d2FpdGluZ0ZvcktleTsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFT
UyhwYXJlbnRfY2xhc3MpLT5xdWVyeSh0cmFucywgZGlyZWN0aW9uLCBxdWVyeSk7Ci19Ci0KIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQogewogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5j
cnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQp
OwpAQCAtMzYzLDcgKzM2Miw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBjaGFuZ2VT
dGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuCiAgICAgc3dpdGNo
ICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFE
WToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiUEFVU0VELT5SRUFEWSIpOwotICAg
ICAgICBwcml2LT5jb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHByaXYtPmNkbUF0dGFj
aG1lbnRDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtMzgwLDEyICszNzksMTQgQEAgc3RhdGljIHZvaWQgc2V0Q29u
dGV4dChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHQqIHNlbGYgPSBXRUJLSVRfTUVESUFfQ0VO
Q19ERUNSWVBUKGVsZW1lbnQpOwogICAgIFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5
cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfUFJJVkFURShz
ZWxmKTsKKyAgICBXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Q2xhc3MqIGtsYXNz
ID0gV0VCS0lUX01FRElBX0NFTkNfREVDUllQVF9HRVRfQ0xBU1Moc2VsZik7CiAKLSAgICBpZiAo
Z3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZShjb250ZXh0LCAiZHJtLWNkbS1pbnN0YW5jZSIp
KSB7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1
ZShnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlKGNvbnRleHQpLCAiY2RtLWluc3RhbmNlIik7Ci0g
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHByaXYtPm11dGV4KTsKLSAgICAgICAgcHJpdi0+cHJv
eHlDRE0gPSB2YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UHJveHlDRE0qPihnX3ZhbHVlX2dldF9w
b2ludGVyKHZhbHVlKSkgOiBudWxscHRyOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYs
ICJyZWNlaXZlZCBuZXcgQ0RNSW5zdGFuY2UgJXAiLCBwcml2LT5wcm94eUNETS5nZXQoKSk7Cisg
ICAgaWYgKGdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUoY29udGV4dCwgImRybS1jZG0tcHJv
eHkiKSkgeworICAgICAgICBjb25zdCBHVmFsdWUqIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRf
dmFsdWUoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZShjb250ZXh0KSwgImNkbS1wcm94eSIpOwor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihwcml2LT5jZG1BdHRhY2htZW50TXV0ZXgpOworICAg
ICAgICBwcml2LT5jZG1Qcm94eSA9IHZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxDRE1Qcm94eSo+
KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKSA6IG51bGxwdHI7CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgInJlY2VpdmVkIG5ldyBDRE1JbnN0YW5jZSAlcCIsIHByaXYtPmNkbVBy
b3h5LmdldCgpKTsKKyAgICAgICAga2xhc3MtPmNkbVByb3h5QXR0YWNoZWQoc2VsZiwgcHJpdi0+
Y2RtUHJveHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENvbW1vbkVuY3J5
cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5oCmluZGV4IDA2NTFkZmI5YzNiZTk1OTQ4ZDNhOWU5OGRlNmVkOGQ0ZThmMWZhNWQuLjg1NzVh
MDcxMDJiZDEzM2Y5MjVkZTFhMDdhZGM5MjJjN2EwNTg0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlw
dGlvbkRlY3J5cHRvckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJl
YW1lci5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAm
JiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSA8Q0RNSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxD
RE1Qcm94eS5oPgogI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KICNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTUsOCArNTUsOCBA
QCBzdHJ1Y3QgX1dlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkRlY3J5cHRDbGFzcyB7CiAgICAg
R3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudENsYXNzOwogCiAgICAgY29uc3QgY2hhciogcHJv
dGVjdGlvblN5c3RlbUlkOwotICAgIGJvb2wgKCpoYW5kbGVLZXlSZXNwb25zZSkoV2ViS2l0TWVk
aWFDb21tb25FbmNyeXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpQcm94eUNETT4pOwot
ICAgIGJvb2wgKCpkZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0Kiwg
R3N0QnVmZmVyKiBpdkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBi
dWZmZXIsIHVuc2lnbmVkIHN1YlNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJTYW1wbGVzQnVm
ZmVyKTsKKyAgICBib29sICgqY2RtUHJveHlBdHRhY2hlZCkoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRGVjcnlwdCosIFJlZlB0cjxXZWJDb3JlOjpDRE1Qcm94eT4pOworICAgIGJvb2wgKCpk
ZWNyeXB0KShXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25EZWNyeXB0KiwgR3N0QnVmZmVyKiBp
dkJ1ZmZlciwgR3N0QnVmZmVyKiBrZXlJREJ1ZmZlciwgR3N0QnVmZmVyKiBidWZmZXIsIHVuc2ln
bmVkIHN1YnNhbXBsZXNDb3VudCwgR3N0QnVmZmVyKiBzdWJzYW1wbGVzQnVmZmVyKTsKIH07CiAK
IEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1G
YWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCmlu
ZGV4IGIzMmI1YTAxNjg0NTVkZWNlOTk1ZDU2YTZiNDM0ZThkZDRmYmU2ODEuLmNlNWQ4ZjdkNmJk
ZjM4YjU5MjIwOTMwMmE2ZTZkNzFiMzY5NjYzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvTW9ja0NETUZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja0NETUZhY3RvcnkuY3BwCkBAIC0yMjYsOCArMjI2LDYgQEAgT3B0aW9uYWw8U3RyaW5nPiBN
b2NrQ0RNOjpzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmIHNlc3Npb25JZCkgY29uc3QK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Qcm94eUNETU1vY2s6On5Qcm94eUNETU1v
Y2soKSA9IGRlZmF1bHQ7Ci0KIE1vY2tDRE1JbnN0YW5jZTo6TW9ja0NETUluc3RhbmNlKFdlYWtQ
dHI8TW9ja0NETT4gY2RtKQogICAgIDogbV9jZG0oY2RtKQogewpAQCAtMjk2LDExICsyOTQsNiBA
QCBSZWZQdHI8Q0RNSW5zdGFuY2VTZXNzaW9uPiBNb2NrQ0RNSW5zdGFuY2U6OmNyZWF0ZVNlc3Np
b24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NETUluc3RhbmNlU2Vzc2lvbihtYWtl
V2Vha1B0cigqdGhpcykpKTsKIH0KIAotUmVmUHRyPFByb3h5Q0RNPiBNb2NrQ0RNSW5zdGFuY2U6
OnByb3h5Q0RNKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb3h5Q0RNTW9j
aygpKTsKLX0KLQogTW9ja0NETUluc3RhbmNlU2Vzc2lvbjo6TW9ja0NETUluc3RhbmNlU2Vzc2lv
bihXZWFrUHRyPE1vY2tDRE1JbnN0YW5jZT4mJiBpbnN0YW5jZSkKICAgICA6IG1faW5zdGFuY2Uo
V1RGTW92ZShpbnN0YW5jZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tDRE1GYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE1GYWN0b3J5
LmgKaW5kZXggZDdlNjZlNjAxNmQxMDE3ODEyZWFmYThjODBiNDdkNDcyODM1MGNkMS4uMzk5MDli
OTMwM2E5NGM5MzY4ZWFhMGY2MjVmNGI2N2U1MjUwNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrQ0RNRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja0NETUZhY3RvcnkuaApAQCAtOTksMTEgKzk5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNo
TWFwPFN0cmluZywgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9zZXNzaW9uczsKIH07CiAK
LWNsYXNzIFByb3h5Q0RNTW9jayBmaW5hbCA6IHB1YmxpYyBQcm94eUNETSB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+UHJveHlDRE1Nb2NrKCk7Ci19OwotCiBjbGFzcyBNb2NrQ0RNIDogcHVibGlj
IENETVByaXZhdGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNb2NrQ0RNPiB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xNTAsNyArMTQ1LDYgQEAgcHJpdmF0ZToK
ICAgICBTdWNjZXNzVmFsdWUgc2V0U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKSBmaW5h
bDsKICAgICBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSgpIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0
cjxDRE1JbnN0YW5jZVNlc3Npb24+IGNyZWF0ZVNlc3Npb24oKSBmaW5hbDsKLSAgICBSZWZQdHI8
UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3QgZmluYWw7CiAKICAgICBXZWFrUHRyPE1vY2tDRE0+
IG1fY2RtOwogICAgIGJvb2wgbV9kaXN0aW5jdGl2ZUlkZW50aWZpZXJzQWxsb3dlZCB7IHRydWUg
fTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>