<?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>153787</bug_id>
          
          <creation_ts>2016-02-02 06:54:18 -0800</creation_ts>
          <short_desc>[Fetch API] Add support for iterating over Headers</short_desc>
          <delta_ts>2016-02-04 09:43:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>151937</blocked>
    
    <blocked>153859</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1161261</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-02 06:54:18 -0800</bug_when>
    <thetext>As per https://fetch.spec.whatwg.org/#headers-class, Headers are iterable, entries being sorted by name lexicographically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161268</commentid>
    <comment_count>1</comment_count>
      <attachid>270488</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-02 08:09:54 -0800</bug_when>
    <thetext>Created attachment 270488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161269</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-02 08:12:22 -0800</bug_when>
    <thetext>Attachment 270488 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSKeyValueIterator.h:56:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161281</commentid>
    <comment_count>3</comment_count>
      <attachid>270488</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-02 08:49:58 -0800</bug_when>
    <thetext>Comment on attachment 270488
Patch

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

&gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:190
&gt; +    do {
&gt; +        if (m_currentIndex &gt;= m_keys.size())
&gt; +            return false;
&gt; +        key = m_keys[m_currentIndex++];
&gt; +        value = m_headers-&gt;m_headers.get(key);
&gt; +    } while (value.isNull());
&gt; +    return true;

I would reverse the logic here and use a normal while:

    while (m_currentIndex &lt; m_keys.size()) {
        key = m_keys[m_currentIndex++];
        value = m_headers-&gt;m_headers.get(key);
        if (!value.isNull())
            return true;
    }
    return false;

Might also want to not touch the out arguments at all if the return value is false:

        auto&amp; nextKey = m_keys[m_currentIndex++];
        String nextValue = m_headers-&gt;m_headers.get(key);
        if (!nextValue.isNull()) {
            key = nextKey;
            value = nextValue;
            return true;
        }

&gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:201
&gt; +    , m_currentIndex(0)

Should initialize this in the class definition rather than the constructor.

&gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:203
&gt; +    m_keys.reserveCapacity(headers.m_headers.size());

reserveInitialCapacity

&gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:205
&gt; +        m_keys.append(header.key.convertToASCIILowercase());

uncheckedAppend

&gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:207
&gt; +    std::sort(m_keys.begin(), m_keys.end(), WTF::codePointCompareLessThan);

Strange that you need the WTF prefix here. Normally you should not.

&gt; Source/WebCore/Modules/fetch/FetchHeaders.h:67
&gt; +        Iterator(FetchHeaders&amp;);

Should mark this explicit.

&gt; Source/WebCore/Modules/fetch/FetchHeaders.h:71
&gt; +        // FIXME: Binding generator should be able to generate iterator key and value types.
&gt; +        using Key = String;
&gt; +        using Value = String;

This seems peculiar. Unclear what it’s for.

&gt; Source/WebCore/Modules/fetch/FetchHeaders.h:77
&gt; +        RefPtr&lt;FetchHeaders&gt; m_headers;

How valuable is it to null this pointer out in the finish function? I’d prefer that this use a Ref rather than a RefPtr.

&gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:1
&gt; +#include &quot;config.h&quot;

File needs a copyright header.

&gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:8
&gt; +// FIXME: Move that code to JSFetchHeaders.

&quot;this code&quot;, not &quot;that code&quot;

&gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:13
&gt; +const JSC::ClassInfo FetchHeadersIterator::s_info = { &quot;Headers Iterator&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(FetchHeadersIterator) };

Is the string &quot;Headers Iterator&quot; really correct here? That does not seem like a class name. Where does this string appear?

&gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:31
&gt; +#include &lt;runtime/JSObject.h&gt;

Pretty sure this include is not needed, since JSDestructibleObject.h includes it.

&gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:67
&gt; +public:
&gt; +
&gt; +    typedef JSC::JSDestructibleObject Base;

Please omit this blank line.

&gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:90
&gt; +    void finish() { m_iterator.finish(); }

Why is this needed? If we changed this to a no-op, would it break one of the tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161924</commentid>
    <comment_count>4</comment_count>
      <attachid>270639</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-04 01:08:17 -0800</bug_when>
    <thetext>Created attachment 270639
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161926</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 01:09:44 -0800</bug_when>
    <thetext>Attachment 270639 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSKeyValueIterator.h:55:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161937</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-04 01:51:32 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #3)
&gt; Comment on attachment 270488 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270488&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:190
&gt; &gt; +    do {
&gt; &gt; +        if (m_currentIndex &gt;= m_keys.size())
&gt; &gt; +            return false;
&gt; &gt; +        key = m_keys[m_currentIndex++];
&gt; &gt; +        value = m_headers-&gt;m_headers.get(key);
&gt; &gt; +    } while (value.isNull());
&gt; &gt; +    return true;
&gt; 
&gt; I would reverse the logic here and use a normal while:
&gt; 
&gt;     while (m_currentIndex &lt; m_keys.size()) {
&gt;         key = m_keys[m_currentIndex++];
&gt;         value = m_headers-&gt;m_headers.get(key);
&gt;         if (!value.isNull())
&gt;             return true;
&gt;     }
&gt;     return false;
&gt; Might also want to not touch the out arguments at all if the return value is
&gt; false:
&gt; 
&gt;         auto&amp; nextKey = m_keys[m_currentIndex++];
&gt;         String nextValue = m_headers-&gt;m_headers.get(key);
&gt;         if (!nextValue.isNull()) {
&gt;             key = nextKey;
&gt;             value = nextValue;
&gt;             return true;
&gt;         }


Done.
Since it is a next() function mapping to JS next(), it returns a isDone which is false when there is a value.
I updated in this method and the caller accordingly.

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:201
&gt; &gt; +    , m_currentIndex(0)
&gt; 
&gt; Should initialize this in the class definition rather than the constructor.

OK

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:203
&gt; &gt; +    m_keys.reserveCapacity(headers.m_headers.size());
&gt; 
&gt; reserveInitialCapacity

OK

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:205
&gt; &gt; +        m_keys.append(header.key.convertToASCIILowercase());
&gt; 
&gt; uncheckedAppend

OK

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.cpp:207
&gt; &gt; +    std::sort(m_keys.begin(), m_keys.end(), WTF::codePointCompareLessThan);
&gt; 
&gt; Strange that you need the WTF prefix here. Normally you should not.

This does not compile without.

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.h:67
&gt; &gt; +        Iterator(FetchHeaders&amp;);
&gt; 
&gt; Should mark this explicit.

OK

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.h:71
&gt; &gt; +        // FIXME: Binding generator should be able to generate iterator key and value types.
&gt; &gt; +        using Key = String;
&gt; &gt; +        using Value = String;
&gt; 
&gt; This seems peculiar. Unclear what it’s for.

It is used in JSKeyValueIterator::next() to know which types the DOM iterator is expecting.
The binding generator can add these definitions in JSFetchHeaders based on FetchHeaders.idl.
type_traits might also probably help there.

&gt; &gt; Source/WebCore/Modules/fetch/FetchHeaders.h:77
&gt; &gt; +        RefPtr&lt;FetchHeaders&gt; m_headers;
&gt; 
&gt; How valuable is it to null this pointer out in the finish function? I’d
&gt; prefer that this use a Ref rather than a RefPtr.

I removed it.
m_keys is still cleaned when iterator goes to the end.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:1
&gt; &gt; +#include &quot;config.h&quot;
&gt; 
&gt; File needs a copyright header.

OK

&gt; &gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:8
&gt; &gt; +// FIXME: Move that code to JSFetchHeaders.
&gt; 
&gt; &quot;this code&quot;, not &quot;that code&quot;

I forgot this one... but I will fix that in a later patch.

&gt; &gt; Source/WebCore/bindings/js/JSFetchHeadersCustom.cpp:13
&gt; &gt; +const JSC::ClassInfo FetchHeadersIterator::s_info = { &quot;Headers Iterator&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(FetchHeadersIterator) };
&gt; 
&gt; Is the string &quot;Headers Iterator&quot; really correct here? That does not seem
&gt; like a class name. Where does this string appear?

It follows naming of other JavaScriptCore iterators.
I think (to be confirmed) it may be used when printing an object in JS for instance.

It does not seem very consistent with WebCore naming like &quot;HeadersConstructor&quot; though.

&gt; &gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:31
&gt; &gt; +#include &lt;runtime/JSObject.h&gt;
&gt; 
&gt; Pretty sure this include is not needed, since JSDestructibleObject.h
&gt; includes it.

OK

&gt; &gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:67
&gt; &gt; +public:
&gt; &gt; +
&gt; &gt; +    typedef JSC::JSDestructibleObject Base;
&gt; 
&gt; Please omit this blank line.

OK

&gt; &gt; Source/WebCore/bindings/js/JSKeyValueIterator.h:90
&gt; &gt; +    void finish() { m_iterator.finish(); }
&gt; 
&gt; Why is this needed? If we changed this to a no-op, would it break one of the
&gt; tests?

Purpose was to do some clean-up but it is not necessary.
I removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161945</commentid>
    <comment_count>7</comment_count>
      <attachid>270639</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 02:39:41 -0800</bug_when>
    <thetext>Comment on attachment 270639
Patch for landing

Clearing flags on attachment: 270639

Committed r196115: &lt;http://trac.webkit.org/changeset/196115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161946</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 02:39:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161974</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-04 05:31:34 -0800</bug_when>
    <thetext>Failed on win bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161986</commentid>
    <comment_count>10</comment_count>
      <attachid>270657</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-02-04 08:07:14 -0800</bug_when>
    <thetext>Created attachment 270657
Trying to fix win build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161987</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 08:09:09 -0800</bug_when>
    <thetext>Attachment 270657 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSKeyValueIterator.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162010</commentid>
    <comment_count>12</comment_count>
      <attachid>270657</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 09:43:09 -0800</bug_when>
    <thetext>Comment on attachment 270657
Trying to fix win build

Clearing flags on attachment: 270657

Committed r196128: &lt;http://trac.webkit.org/changeset/196128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162011</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 09:43:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270488</attachid>
            <date>2016-02-02 08:09:54 -0800</date>
            <delta_ts>2016-02-04 01:08:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153787-20160202170929.patch</filename>
            <type>text/plain</type>
            <size>29046</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q1MDcwMDA0ZjE5NzM2
NTEyOTljMDM5NTEwZWNiYTljMjQzMWM1MS4uN2VjOTQ4MTM3NjBkYWU4NTdjNmYyOTM4Y2EyNGVj
MjRmZWFmMmI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAyLTAyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW0ZldGNo
IEFQSV0gQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIEhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzc4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgdXBkYXRlZCB0
ZXN0cy4KKyAgICAgICAgSW50cm9kdWNpbmcgdGVtcGxhdGUgY2xhc3MgKEpTS2V5VmFsdWVJdGVy
YXRvcikgdG8gc3VwcG9ydCBrZXktdmFsdWUgaXRlcmF0b3JzIGluIERPTSBjbGFzc2VzLgorICAg
ICAgICBVc2luZyBKU0tleVZhbHVlSXRlcmF0b3IgdG8gaW1wbGVtZW50IEhlYWRlcnMgZW50cmll
cygpLCBrZXlzKCkgYW5kIHZhbHVlcygpIGFzIGN1c3RvbSBtZXRob2RzLgorICAgICAgICBCaW5k
aW5nIGdlbmVyYXRvciBzaG91bGQgYmUgdXBkYXRlZCB0byBnZW5lcmF0ZSBkaXJlY3RseSB0aGVz
ZSBjdXN0b20gbWV0aG9kcyBhbmQgaGFuZGxlIGl0ZXJhdG9yIFN5bWJvbC4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoSGVhZGVyczo6SXRlcmF0b3I6Om5leHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6ZmluaXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoSGVhZGVyczo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKiBN
b2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hIZWFk
ZXJzOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRl
cnMuaWRsOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6Ompz
UGFpcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRmV0Y2hIZWFkZXJzOjplbnRyaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRmV0Y2hIZWFkZXJzOjprZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RmV0Y2hIZWFkZXJzOjp2YWx1ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTS2V5VmFsdWVJ
dGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTS2V5VmFsdWVJdGVyYXRvclBy
b3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTS2V5VmFsdWVJdGVyYXRvclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTS2V5VmFsdWVJ
dGVyYXRvclByb3RvdHlwZTo6SlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKwogMjAxNi0w
Mi0wMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEhpZ2ggTGV2ZWwgTWVtb3J5IE92ZXJ2aWV3IEluc3RydW1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggODZmYTBhZGU5ZjIyMWJkZWY2MTEyMDM5MjJhOTIyYmU2NTUzZGVi
ZC4uM2ExNjA5MDAyNTE4ZTIwMjJlNjNjZmRiOTIyMjdkYjMxZmY2MGFjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTExNjQsNiArMTE2NCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCisgICAg
YmluZGluZ3MvanMvSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNG
aWxlUmVhZGVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCAzMDUxNjM0
MTkxZjQ5Mzk3ZmVjNWRlYjNiMDRjNDQ4ZDQzMzZlMjk3Li5mZjdlOTI0NTAwNDE2ZDk2ZTU4YmRm
ZmYwYTVkYmMyNzNkYTZlZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoSGVhZGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaEhlYWRlcnMuY3BwCkBAIC0xNzksNiArMTc5LDM0IEBAIHZvaWQgRmV0Y2hIZWFkZXJzOjpm
aWxsKGNvbnN0IEZldGNoSGVhZGVycyogaGVhZGVycykKICAgICB9CiB9CiAKK2Jvb2wgRmV0Y2hI
ZWFkZXJzOjpJdGVyYXRvcjo6bmV4dChTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBkbyB7CisgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2tleXMuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBrZXkgPSBtX2tleXNbbV9jdXJyZW50SW5k
ZXgrK107CisgICAgICAgIHZhbHVlID0gbV9oZWFkZXJzLT5tX2hlYWRlcnMuZ2V0KGtleSk7Cisg
ICAgfSB3aGlsZSAodmFsdWUuaXNOdWxsKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEZldGNoSGVhZGVyczo6SXRlcmF0b3I6OmZpbmlzaCgpCit7CisgICAgbV9oZWFkZXJzID0gbnVs
bHB0cjsKKyAgICBtX2tleXMuY2xlYXIoKTsKK30KKworRmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6
SXRlcmF0b3IoRmV0Y2hIZWFkZXJzJiBoZWFkZXJzKQorICAgIDogbV9oZWFkZXJzKCZoZWFkZXJz
KQorICAgICwgbV9jdXJyZW50SW5kZXgoMCkKK3sKKyAgICBtX2tleXMucmVzZXJ2ZUNhcGFjaXR5
KGhlYWRlcnMubV9oZWFkZXJzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFk
ZXJzLm1faGVhZGVycykKKyAgICAgICAgbV9rZXlzLmFwcGVuZChoZWFkZXIua2V5LmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCkpOworCisgICAgc3RkOjpzb3J0KG1fa2V5cy5iZWdpbigpLCBtX2tl
eXMuZW5kKCksIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEZFVENIX0FQSSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCmluZGV4IDUzNjg2Mjg4MzI2ZGQ3NjEz
YTllYmYzOGJjYjA4ZDRiNGJlOWRjY2EuLmQ4NDZjZmYxODI0ZmFjM2Q5NzFmZDhiYzQ4ZjZlN2Ez
YmRiYTNjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hI
ZWFkZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMu
aApAQCAtNjIsNiArNjIsMjQgQEAgcHVibGljOgogICAgIFN0cmluZyBmYXN0R2V0KEhUVFBIZWFk
ZXJOYW1lIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVycy5nZXQobmFtZSk7IH0KICAgICB2
b2lkIGZhc3RTZXQoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBt
X2hlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTsgfQogCisgICAgY2xhc3MgSXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoRmV0Y2hIZWFkZXJzJik7CisKKyAgICAgICAgLy8g
RklYTUU6IEJpbmRpbmcgZ2VuZXJhdG9yIHNob3VsZCBiZSBhYmxlIHRvIGdlbmVyYXRlIGl0ZXJh
dG9yIGtleSBhbmQgdmFsdWUgdHlwZXMuCisgICAgICAgIHVzaW5nIEtleSA9IFN0cmluZzsKKyAg
ICAgICAgdXNpbmcgVmFsdWUgPSBTdHJpbmc7CisKKyAgICAgICAgYm9vbCBuZXh0KFN0cmluZyYg
a2V5LCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxGZXRjaEhlYWRlcnM+IG1faGVhZGVyczsKKyAgICAgICAgc2l6
ZV90IG1fY3VycmVudEluZGV4OworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX2tleXM7CisgICAg
fTsKKyAgICBJdGVyYXRvciBjcmVhdGVJdGVyYXRvcigpIHsgcmV0dXJuIEl0ZXJhdG9yKCp0aGlz
KTsgfQorCiBwcml2YXRlOgogICAgIEZldGNoSGVhZGVycyhHdWFyZCBndWFyZCkgOiBtX2d1YXJk
KGd1YXJkKSB7IH0KICAgICBGZXRjaEhlYWRlcnMoR3VhcmQgZ3VhcmQsIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMpIDogbV9ndWFyZChndWFyZCksIG1faGVhZGVycyhoZWFkZXJzKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmlkbAppbmRleCA3
ZDlmNWZiODU0MmJjZjQ1OWRjNzk3MDVkNTYzMjhlY2ZmZjg2NTZiLi5mNjMzMzk3NTk4ZTEwZGE5
ZmI4ZjNkZGM2ZmZmYTcwNzlhMjBlZmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaEhlYWRlcnMuaWRsCkBAIC00MCw4ICs0MCwxMSBAQCBpbnRlcmZhY2UgRmV0Y2hI
ZWFkZXJzIHsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGhhcyhET01TdHJpbmcgbmFt
ZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXQoRE9NU3RyaW5nIG5hbWUsIERPTVN0
cmluZyB2YWx1ZSk7CiAKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBpdGVyYWJsZS4KKyAgICAvLyBG
SVhNRTogU3VwcG9ydCBpdGVyYWJsZSB3aXRoaW4gYmluZGluZyBnZW5lcmF0b3IuCiAgICAgLy9p
dGVyYWJsZTxET01TdHJpbmcsIERPTVN0cmluZz47CisgICAgW0N1c3RvbV0gYW55IGVudHJpZXMo
KTsKKyAgICBbQ3VzdG9tXSBhbnkga2V5cygpOworICAgIFtDdXN0b21dIGFueSB2YWx1ZXMoKTsK
IAogICAgIFtQcml2YXRlLCBSYWlzZXNFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9YXBwZW5kXSB2
b2lkIGFwcGVuZEZyb21KUyhET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKICAgICBb
UHJpdmF0ZSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGluaXRpYWxpemVXaXRoKEZldGNoSGVhZGVy
cyBoZWFkZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2NTdjNTY1N2JmOTc5ZjZjOWZjZGM5NTU4ZmY5YzMwZTc1MDk3NTU0
Li4xMDVlOWI5ZjYwMDViODhlYWJiNmI0Yzg3ZDhiZGJiMzdhMWQ2ZGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTQxLDYg
KzE1NDEsNyBAQAogCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1Qzkw
RjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDAwRkY1
OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNBMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5jcHAgKi87IH07CiAJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFFMUIxQ0IwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggKi87IH07CisJ
CTQxRTkxMEE3MUM2MEZENkMwMDdBNDUzRiAvKiBKU0ZldGNoSGVhZGVyc0N1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5MTBBNjFDNjBG
RDZDMDA3QTQ1M0YgLyogSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwICovOyB9OwogCQk0MUYwNjIx
NDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTIwRjVGMTkyNjAw
QTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNDFGMDYyMTUw
RjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYyMTMwRjVGMTkyNjAw
QTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICovOyB9OwogCQk0MUYwNjZF
NDBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0R2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMg
LyogU2NyaXB0R2xvYmFsT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg5NjMsNiArODk2NCw3IEBACiAJCTQxRTFCMUNBMEZGNTk4Njkw
MDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBYnN0cmFjdFdvcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdFdvcmtlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MUUxQjFDQzBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3Jr
ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFic3RyYWN0V29ya2VyLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFFOTEwQTYxQzYwRkQ2QzAwN0E0NTNGIC8qIEpTRmV0
Y2hIZWFkZXJzQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFGMDYyMTIwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjIxMzBGNUYxOTI2MDBBMDdF
QUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMDY2RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdEds
b2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRHbG9i
YWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMjkwLDYgKzIyMjky
LDcgQEAKIAkJCQlCQzJFRDU1NDBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNw
cCAqLywKIAkJCQlBREVDNzhGNzE4RUU1MzA4MDAxMzE1QzIgLyogSlNFbGVtZW50Q3VzdG9tLmgg
Ki8sCiAJCQkJQkNFRkFGNEQwQzMxN0U2OTAwRkE4MUY2IC8qIEpTRXZlbnRDdXN0b20uY3BwICov
LAorCQkJCTQxRTkxMEE2MUM2MEZENkMwMDdBNDUzRiAvKiBKU0ZldGNoSGVhZGVyc0N1c3RvbS5j
cHAgKi8sCiAJCQkJMkU3NTgyRUQxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1c3Rv
bS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25D
dXN0b20uY3BwICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3RvcnlD
dXN0b20uY3BwICovLApAQCAtMjkzNjgsNiArMjkzNzEsNyBAQAogCQkJCTk3QjM4RTI4MTUxQzQy
NzMwMDQ2MjJFOSAvKiBET01XaW5kb3dOb3RpZmljYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3RDJBRDAzMTRCODIzQTYwMDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBQTJBNUFENzE2QTQ4NjFBMDA5NzVBMjUgLyogRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxRTkxMEE3MUM2MEZENkMwMDdB
NDUzRiAvKiBKU0ZldGNoSGVhZGVyc0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEND
QkI0ODE1MUY4MzE2MDBBQjdDRTkgLyogRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM1M0RBNDgxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEMTM4MTBBNTMyNTUyMDA2NEJGNUYgLyogRE9NWFBh
dGgubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgKaW5kZXggM2E5NmI0MmM5OWY1MDVkOWM0ZGUyZDM5OGY0Y2IzZWEzOGFlYjliMC4uOWQ2
MGI0NjNkMDQ1NmVmMTMxMDMxZjdlOWI3YzRmOWViNmI3YzUxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKQEAgLTUxNCw2ICs1MTQsMTQgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpz
QXJyYXkoSlNDOjpFeGUKICAgICByZXR1cm4ganNBcnJheShleGVjLCBnbG9iYWxPYmplY3QsICp2
ZWN0b3IpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZTEsIHR5cGVuYW1lIFZhbHVlMj4g
aW5saW5lIEpTQzo6SlNWYWx1ZSBqc1BhaXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWYWx1ZTEmIHZhbHVlMSwgY29uc3QgVmFs
dWUyJiB2YWx1ZTIpCit7CisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAg
IGFyZ3MuYXBwZW5kKHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlMSkpOworICAgIGFy
Z3MuYXBwZW5kKHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlMikpOworICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIDAsIGdsb2JhbE9iamVjdCwgYXJncyk7Cit9CisKIFdF
QkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKIAogaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvQXJyYXlCdWZmZXJWaWV3KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hI
ZWFkZXJzQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hIZWFk
ZXJzQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTFiODdhNTE0OWNmNWMxMDkzM2E0YzZkODgwN2Nm
ZGJkZjM0ZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwCkBAIC0wLDAgKzEsMzMgQEAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0ZldGNoSGVhZGVycy5oIgorCisjaW5jbHVkZSAiSlNLZXlWYWx1
ZUl0ZXJhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IE1vdmUgdGhh
dCBjb2RlIHRvIEpTRmV0Y2hIZWFkZXJzLgordXNpbmcgRmV0Y2hIZWFkZXJzSXRlcmF0b3IgPSBK
U0tleVZhbHVlSXRlcmF0b3I8SlNGZXRjaEhlYWRlcnMsIEZldGNoSGVhZGVycz47Cit1c2luZyBG
ZXRjaEhlYWRlcnNJdGVyYXRvclByb3RvdHlwZSA9IEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlw
ZTxKU0ZldGNoSGVhZGVycywgRmV0Y2hIZWFkZXJzPjsKKwordGVtcGxhdGU8PgorY29uc3QgSlND
OjpDbGFzc0luZm8gRmV0Y2hIZWFkZXJzSXRlcmF0b3I6OnNfaW5mbyA9IHsgIkhlYWRlcnMgSXRl
cmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZldGNoSGVhZGVy
c0l0ZXJhdG9yKSB9OworCit0ZW1wbGF0ZTw+Citjb25zdCBKU0M6OkNsYXNzSW5mbyBGZXRjaEhl
YWRlcnNJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiSGVhZGVycyBJdGVyYXRvciIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRmV0Y2hIZWFkZXJzSXRlcmF0b3JQ
cm90b3R5cGUpIH07CisKK0pTQzo6SlNWYWx1ZSBKU0ZldGNoSGVhZGVyczo6ZW50cmllcyhKU0M6
OkV4ZWNTdGF0ZSYpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yPEpTRmV0Y2hIZWFkZXJz
LCBGZXRjaEhlYWRlcnM+KCpnbG9iYWxPYmplY3QoKSwgKnRoaXMsIEl0ZXJhdGlvbktpbmQ6Oktl
eVZhbHVlKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTRmV0Y2hIZWFkZXJzOjprZXlzKEpTQzo6RXhl
Y1N0YXRlJikKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3I8SlNGZXRjaEhlYWRlcnMsIEZl
dGNoSGVhZGVycz4oKmdsb2JhbE9iamVjdCgpLCAqdGhpcywgSXRlcmF0aW9uS2luZDo6S2V5KTsK
K30KKworSlNDOjpKU1ZhbHVlIEpTRmV0Y2hIZWFkZXJzOjp2YWx1ZXMoSlNDOjpFeGVjU3RhdGUm
KQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvcjxKU0ZldGNoSGVhZGVycywgRmV0Y2hIZWFk
ZXJzPigqZ2xvYmFsT2JqZWN0KCksICp0aGlzLCBJdGVyYXRpb25LaW5kOjpWYWx1ZSk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTS2V5VmFsdWVJdGVy
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzVjMzBjMjJmMDFjZmU2MzkyZDRlZGI2MWQ3NGNmNjVmODNiMTE0YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTS2V5VmFsdWVJdGVy
YXRvci5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENhbm9u
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQ0FOT04gSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSlNLZXlWYWx1ZUl0ZXJhdG9yX2gKKyNkZWZpbmUgSlNL
ZXlWYWx1ZUl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2Jq
ZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFVwZGF0ZSBiaW5kaW5n
IGdlbmVyYXRvciB0byBhbGxvdyBnZXR0aW5nIERPTVdyYXBwZWQgZnJvbSBKU1dyYXBwZXIuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5cGVuYW1lIERPTVdyYXBwZWQ+CitjbGFzcyBK
U0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworCisg
ICAgc3RhdGljIEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGUqIHByb3Rv
dHlwZSA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNLZXlWYWx1ZUl0ZXJhdG9y
UHJvdG90eXBlPih2bS5oZWFwKSkgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlKHZtLCBzdHJ1
Y3R1cmUpOworICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICByZXR1cm4gcHJvdG90eXBlOworICAgIH0KKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTS2V5VmFs
dWVJdGVyYXRvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpIHsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworfTsKKworZW51bSBjbGFzcyBJdGVyYXRp
b25LaW5kIHsgS2V5LCBWYWx1ZSwgS2V5VmFsdWUgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNX
cmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorY2xhc3MgSlNLZXlWYWx1ZUl0ZXJhdG9yOiBw
dWJsaWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitwdWJsaWM6CisKKyAgICB0eXBlZGVm
IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKworICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0tleVZhbHVl
SXRlcmF0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNXcmFwcGVyJiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgSlNLZXlWYWx1ZUl0ZXJhdG9yKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNLZXlWYWx1ZUl0ZXJhdG9yPih2bS5oZWFwKSkgSlNLZXlWYWx1ZUl0ZXJh
dG9yKHZtLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBraW5kKTsKKyAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtLCBpdGVyYXRlZE9iamVjdCk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBl
PEpTV3JhcHBlciwgRE9NV3JhcHBlZD4qIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
S2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZTxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlw
ZTxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIH0KKworICAgIGJvb2wg
bmV4dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSYpOworICAgIHZvaWQgZmluaXNoKCkg
eyBtX2l0ZXJhdG9yLmZpbmlzaCgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNLZXlWYWx1ZUl0ZXJh
dG9yKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dyYXBwZXImIGl0
ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQorICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3Qud3JhcHBlZCgpLmNy
ZWF0ZUl0ZXJhdG9yKCkpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mLCBKU1dyYXBwZXImKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlNDOjpXcml0ZUJh
cnJpZXI8SlNXcmFwcGVyPiBtX29iamVjdDsKKyAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJdGVy
YXRvciBtX2l0ZXJhdG9yOworICAgIEl0ZXJhdGlvbktpbmQgbV9raW5kOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorSlNLZXlWYWx1ZUl0
ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD4qIGNyZWF0ZUl0ZXJhdG9yKEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTV3JhcHBlciYgd3JhcHBlciwgSXRlcmF0aW9uS2luZCBr
aW5kKQoreworICAgIHJldHVybiBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFw
cGVkPjo6Y3JlYXRlKGdsb2JhbE9iamVjdC52bSgpLCBnZXRET01TdHJ1Y3R1cmU8SlNLZXlWYWx1
ZUl0ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD4+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9i
YWxPYmplY3QpLCB3cmFwcGVyLCBraW5kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFw
cGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgordm9pZCBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFw
cGVyLCBET01XcmFwcGVkPjo6ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYgdm0sIEpTV3JhcHBlciYg
aXRlcmF0ZWRPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1f
b2JqZWN0LnNldCh2bSwgdGhpcywgJml0ZXJhdGVkT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgordm9pZCBKU0tleVZhbHVlSXRl
cmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNLZXlWYWx1ZUl0ZXJhdG9yPEpT
V3JhcHBlciwgRE9NV3JhcHBlZD4qIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0tleVZhbHVl
SXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX29iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUg
RE9NV3JhcHBlZD4KK3ZvaWQgSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBl
ZD46OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dy
YXBwZXIsIERPTVdyYXBwZWQ+KiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNLZXlWYWx1ZUl0
ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD4qPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6fkpTS2V5VmFsdWVJdGVy
YXRvcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5cGVuYW1lIERPTVdy
YXBwZWQ+Citib29sIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+Ojpu
ZXh0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICB0
eXBlbmFtZSBET01XcmFwcGVkOjpJdGVyYXRvcjo6S2V5IG5leHRLZXk7CisgICAgdHlwZW5hbWUg
RE9NV3JhcHBlZDo6SXRlcmF0b3I6OlZhbHVlIG5leHRWYWx1ZTsKKyAgICBpZiAoIW1faXRlcmF0
b3IubmV4dChuZXh0S2V5LCBuZXh0VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fa2luZCA9PSBJdGVyYXRpb25LaW5kOjpWYWx1ZSkKKyAgICAgICAgdmFsdWUgPSB0b0pT
KCZzdGF0ZSwgbV9vYmplY3QtPmdsb2JhbE9iamVjdCgpLCBuZXh0VmFsdWUpOworICAgIGVsc2Ug
aWYgKG1fa2luZCA9PSBJdGVyYXRpb25LaW5kOjpLZXkpCisgICAgICAgIHZhbHVlID0gdG9KUygm
c3RhdGUsIG1fb2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgbmV4dEtleSk7CisgICAgZWxzZQorICAg
ICAgICB2YWx1ZSA9IGpzUGFpcihzdGF0ZSwgbV9vYmplY3QtPmdsb2JhbE9iamVjdCgpLCBuZXh0
S2V5LCBuZXh0VmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU1dyYXBwZXIsIHR5cGVuYW1lIERPTVdyYXBwZWQ+CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlRnVuY3Rpb25OZXh0KEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0OworICAgIEpTS2V5
VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+KiBpdGVyYXRvciA9IEpTQzo6anNE
eW5hbWljQ2FzdDxKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPio+KHN0
YXRlLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgcmV0dXJuIEpT
Qzo6SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIkNh
bm5vdCBjYWxsIG5leHQoKSBvbiBhIG5vbi1JdGVyYXRvciBvYmplY3QiKSkpOworCisgICAgaWYg
KGl0ZXJhdG9yLT5uZXh0KCpzdGF0ZSwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNW
YWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KHN0YXRlLCByZXN1bHQsIGZh
bHNlKSk7CisgICAgaXRlcmF0b3ItPmZpbmlzaCgpOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChzdGF0ZSwgSlNDOjpqc1VuZGVmaW5l
ZCgpLCB0cnVlKSk7Cit9CisKK3R5cGVkZWYgSlNDOjpFbmNvZGVkSlNWYWx1ZSAoKk5leHRGdW5j
dGlvbikoSlNDOjpDYWxsRnJhbWUqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlw
ZW5hbWUgRE9NV3JhcHBlZD4KK3ZvaWQgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlPEpTV3Jh
cHBlciwgRE9NV3JhcHBlZD46OmZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKworICAgIE5leHRGdW5jdGlvbiBuZXh0
RnVuY3Rpb24gPSBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGVGdW5jdGlvbk5leHQ8SlNXcmFw
cGVyLCBET01XcmFwcGVkPjsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgbmV4dEZ1bmN0aW9uLCBKU0M6
OkRvbnRFbnVtLCAwLCBKU0M6Ok5vSW50cmluc2ljKTsKK30KKworfQorCisjZW5kaWYgLy8gIWRl
ZmluZWQoSlNLZXlWYWx1ZUl0ZXJhdG9yX2gpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCA5MWM3N2Q2MTZmOTYzYWFjNzZiMjZhODAwOTE3NzQ5NWUyMjExMWM1Li5jOTdhZGYxOGNj
NDEzZTI3MWI0N2UzNmFhZWYzZmQ3YjE0NGU5MDQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0wMi0wMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIFtGZXRjaCBBUEldIEFkZCBzdXBwb3J0
IGZvciBpdGVyYXRpbmcgb3ZlciBIZWFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM3ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVy
cy9oZWFkZXJzLWJhc2ljLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy5odG1sOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLXN0cnVjdHVyZS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3Jl
cXVlc3QtY2xvbmUuc3ViLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1pbml0LTAwMy5zdWItZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL3V0aWxzLmpz
OiBmaXhlZCB0eXBvIGluIHRlc3QuCisKIDIwMTYtMDItMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBOYXRpdmUgQmluZGluZ3MgRGVzY3JpcHRvcnMgYXJlIElu
Y29tcGxldGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFk
ZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQudHh0CmluZGV4IGJlMmJjNzRiOTc3M2JkNmE3ZGI3
MDEzMDE0MDQzZjMzNjhkMjhlY2MuLjZkYjY5Y2U4NjA1NWI1MDQ4OWZlNDcyMDBmNTQxMGM2YWEy
YjE4MzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVh
ZGVycy9oZWFkZXJzLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMTIsNCArMTIsNyBAQCBQQVNTIENo
ZWNrIHNldCBtZXRob2QKIFBBU1MgQ2hlY2sgaGFzIG1ldGhvZCAKIFBBU1MgQ2hlY2sgZGVsZXRl
IG1ldGhvZCAKIFBBU1MgQ2hlY2sgZ2V0IG1ldGhvZCAKK1BBU1MgQ2hlY2sga2V5cyBtZXRob2Qg
CitQQVNTIENoZWNrIHZhbHVlcyBtZXRob2QgCitQQVNTIENoZWNrIGVudHJpZXMgbWV0aG9kIAog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNp
Yy5odG1sCmluZGV4IGMzOTU0NWQ1NDMxNDYxYWRhNDY5MmNlZGM4OWQ3ZDI4NmQ0NjVmZGYuLjUx
NmUxOWMyYmJlZWEzOTRkMTA4ZGRlYzNhNTM4ODM2YWQ3YjVmYzYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMv
aGVhZGVycy1iYXNpYy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy5odG1sCkBAIC0xMTEs
NiArMTExLDU1IEBACiAKICAgICAgICAgYXNzZXJ0X2VxdWFscyhoZWFkZXJzLmdldCgibmFtZU5v
dEluSGVhZGVycyIpLCBudWxsLCAiaGVhZGVyOiBuYW1lTm90SW5IZWFkZXJzIGhhcyBubyB2YWx1
ZSIpOwogICAgICAgfSwgIkNoZWNrIGdldCBtZXRob2QiKTsKLSAgICA8L3NjcmlwdD4KKworICAg
ICAgdmFyIGhlYWRlckVudHJpZXNEaWN0ID0geyJuYW1lMSI6ICJ2YWx1ZTEiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJOYW1lMiI6ICJ2YWx1ZTIiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJuYW1lIjogInZhbHVlMyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImNvbnRlbnQtVHlwZSI6ICJ2YWx1ZTQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDb250ZW50LVR5cCI6ICJ2YWx1ZTUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDb250ZW50LVR5cGVzIjogInZhbHVlNiIKKyAgICAgIH07CisgICAgICB2YXIg
c29ydGVkSGVhZGVyRGljdCA9IHt9OworICAgICAgdmFyIHNvcnRlZEhlYWRlcktleXMgPSBPYmpl
Y3Qua2V5cyhoZWFkZXJFbnRyaWVzRGljdCkubWFwKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAg
IHNvcnRlZEhlYWRlckRpY3RbdmFsdWUudG9Mb3dlckNhc2UoKV0gPSBoZWFkZXJFbnRyaWVzRGlj
dFt2YWx1ZV07CisgICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpOworICAgICAgfSku
c29ydCgpOworCisgICAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaGVhZGVycyA9
IG5ldyBIZWFkZXJzKGhlYWRlckVudHJpZXNEaWN0KTsKKyAgICAgICAgdmFyIGFjdHVhbCA9IGhl
YWRlcnMua2V5cygpOworICAgICAgICBzb3J0ZWRIZWFkZXJLZXlzLmZvckVhY2goZnVuY3Rpb24o
a2V5KSB7CisgICAgICAgICAgICBlbnRyeSA9IGFjdHVhbC5uZXh0KCk7CisgICAgICAgICAgICBh
c3NlcnRfZmFsc2UoZW50cnkuZG9uZSk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVudHJ5
LnZhbHVlLCBrZXkpOworICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoYWN0dWFsLm5l
eHQoKS5kb25lKTsKKyAgICAgIH0sICJDaGVjayBrZXlzIG1ldGhvZCIpOworCisgICAgICB0ZXN0
KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlckVu
dHJpZXNEaWN0KTsKKyAgICAgICAgdmFyIGFjdHVhbCA9IGhlYWRlcnMudmFsdWVzKCk7CisKKyAg
ICAgICAgc29ydGVkSGVhZGVyS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAg
ICAgZW50cnkgPSBhY3R1YWwubmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0X2ZhbHNlKGVudHJ5
LmRvbmUpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlbnRyeS52YWx1ZSwgc29ydGVkSGVh
ZGVyRGljdFtrZXldKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF90cnVlKGFjdHVhbC5u
ZXh0KCkuZG9uZSk7CisgICAgICB9LCAiQ2hlY2sgdmFsdWVzIG1ldGhvZCIpOworCisgICAgICB0
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRl
ckVudHJpZXNEaWN0KTsKKyAgICAgICAgdmFyIGFjdHVhbCA9IGhlYWRlcnMuZW50cmllcygpOwor
CisgICAgICAgIHNvcnRlZEhlYWRlcktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAg
ICAgICAgIGVudHJ5ID0gYWN0dWFsLm5leHQoKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZShl
bnRyeS5kb25lKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW50cnkudmFsdWVbMF0sIGtl
eSk7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGVudHJ5LnZhbHVlWzFdLCBzb3J0ZWRIZWFk
ZXJEaWN0W2tleV0pOworICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoYWN0dWFsLm5l
eHQoKS5kb25lKTsKKyAgICAgIH0sICJDaGVjayBlbnRyaWVzIG1ldGhvZCIpOworICAgPC9zY3Jp
cHQ+CiAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1zdHJ1Y3R1
cmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLXN0cnVjdHVyZS1leHBlY3RlZC50eHQKaW5k
ZXggODU2NzMyZjM4NGY3OWY1ODBiZjAwOGYxNzlhMWJjYThlZjliMDBkNi4uMGVmNmQxYmNjNmEw
YTJhMWFmNTBjZTE1NDFjNmRkYWE1MjkzZmE5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLXN0
cnVjdHVyZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLXN0cnVjdHVyZS1leHBlY3Rl
ZC50eHQKQEAgLTQsNyArNCw3IEBAIFBBU1MgSGVhZGVycyBoYXMgZGVsZXRlIG1ldGhvZAogUEFT
UyBIZWFkZXJzIGhhcyBnZXQgbWV0aG9kIAogUEFTUyBIZWFkZXJzIGhhcyBoYXMgbWV0aG9kIAog
UEFTUyBIZWFkZXJzIGhhcyBzZXQgbWV0aG9kIAotRkFJTCBIZWFkZXJzIGhhcyBlbnRyaWVzIG1l
dGhvZCBhc3NlcnRfdHJ1ZTogaGVhZGVycyBoYXMgZW50cmllcyBtZXRob2QgZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UKLUZBSUwgSGVhZGVycyBoYXMga2V5cyBtZXRob2QgYXNzZXJ0X3RydWU6IGhl
YWRlcnMgaGFzIGtleXMgbWV0aG9kIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIEhlYWRl
cnMgaGFzIHZhbHVlcyBtZXRob2QgYXNzZXJ0X3RydWU6IGhlYWRlcnMgaGFzIHZhbHVlcyBtZXRo
b2QgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK1BBU1MgSGVhZGVycyBoYXMgZW50cmllcyBtZXRo
b2QgCitQQVNTIEhlYWRlcnMgaGFzIGtleXMgbWV0aG9kIAorUEFTUyBIZWFkZXJzIGhhcyB2YWx1
ZXMgbWV0aG9kIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtY2xvbmUuc3ViLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gv
YXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5zdWItZXhwZWN0ZWQudHh0CmluZGV4IDZjYmQwNzc0
Nzk4NDRjZWE1Yzc5NjE5YWExNzcwYTU0ZGYyZWYzMDMuLmVlYWNmOGE2M2NmMWNhYTdjMmEyM2Y3
MTA1NzgxMjMyMTlhYmRiMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5zdWItZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5zdWItZXhwZWN0ZWQudHh0CkBAIC0x
LDQgKzEsNCBAQAogCi1GQUlMIENoZWNrIGNsb25pbmcgYSByZXF1ZXN0IEV4cGVjdGVkVmFsdWVz
RGljdFsiaGVhZGVycyJdLmtleXMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnRXhwZWN0ZWRWYWx1
ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cygpJywgJ0V4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJd
LmtleXMnIGlzIHVuZGVmaW5lZCkKK1BBU1MgQ2hlY2sgY2xvbmluZyBhIHJlcXVlc3QgCiBQQVNT
IENoZWNrIGNsb25pbmcgYSByZXF1ZXN0IGNvcGllcyB0aGUgaGVhZGVycyAKIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkv
cmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1Yi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3Qt
aW5pdC0wMDMuc3ViLWV4cGVjdGVkLnR4dAppbmRleCAyYWJlNzU2MGUyOGU5ODhlNDc2YzI4Y2Nk
MmYyZTI5ZjAyYjg1YjdjLi5mY2NlMjljMDY0MzMyOTM4NGFlNDE1NmIwZmZhY2M0YWY5ZDZhNDJi
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtaW5pdC0wMDMuc3ViLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9y
ZXF1ZXN0L3JlcXVlc3QtaW5pdC0wMDMuc3ViLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAK
IAotRkFJTCBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVxdWVz
dCBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzIGlzIG5vdCBhIGZ1bmN0aW9uLiAo
SW4gJ0V4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMoKScsICdFeHBlY3RlZFZhbHVl
c0RpY3RbImhlYWRlcnMiXS5rZXlzJyBpcyB1bmRlZmluZWQpCi1GQUlMIENoZWNrIHJlcXVlc3Qg
dmFsdWVzIHdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBSZXF1ZXN0IGFuZCBpbml0IHZhbHVlcyBFeHBl
Y3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ0V4
cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMoKScsICdFeHBlY3RlZFZhbHVlc0RpY3Rb
ImhlYWRlcnMiXS5rZXlzJyBpcyB1bmRlZmluZWQpCitQQVNTIENoZWNrIHJlcXVlc3QgdmFsdWVz
IHdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBSZXF1ZXN0IAorUEFTUyBDaGVjayByZXF1ZXN0IHZhbHVl
cyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVxdWVzdCBhbmQgaW5pdCB2YWx1ZXMgCiBGQUlMIENo
ZWNrIHJlcXVlc3QgdmFsdWVzIHdoZW4gaW5pdGlhbGl6ZWQgZnJvbSB1cmwgc3RyaW5nIGFzc2Vy
dF9lcXVhbHM6IENoZWNrIHVybCBhdHRyaWJ1dGUgZXhwZWN0ZWQgImh0dHA6Ly91cmwudGVzdDox
MjM0L3BhdGgvc3VicGF0aD9xdWVyeT10cnVlIiBidXQgZ290ICJodHRwOi8vdXJsLnRlc3Q6MTIz
NC9wYXRoL3N1YnBhdGg/cXVlcnk9dHJ1ZSNmcmFnbWVudCIKLUZBSUwgQ2hlY2sgcmVxdWVzdCB2
YWx1ZXMgd2hlbiBpbml0aWFsaXplZCBmcm9tIHVybCBhbmQgaW5pdCB2YWx1ZXMgRXhwZWN0ZWRW
YWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdFeHBlY3Rl
ZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzKCknLCAnRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFk
ZXJzIl0ua2V5cycgaXMgdW5kZWZpbmVkKQorRkFJTCBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVu
IGluaXRpYWxpemVkIGZyb20gdXJsIGFuZCBpbml0IHZhbHVlcyBhc3NlcnRfZXF1YWxzOiBDaGVj
ayB1cmwgYXR0cmlidXRlIGV4cGVjdGVkICJodHRwOi8vdXJsLnRlc3Q6MTIzNC9wYXRoL3N1YnBh
dGg/cXVlcnk9dHJ1ZSIgYnV0IGdvdCAiaHR0cDovL3VybC50ZXN0OjEyMzQvcGF0aC9zdWJwYXRo
P3F1ZXJ5PXRydWUjZnJhZ21lbnQiCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy91dGlscy5qcyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3Jlc291
cmNlcy91dGlscy5qcwppbmRleCA0NDkyOTM1NjI0ZDkyMjg2YjRhZTc5MTk3ZThkNjBiNGM2NDk1
ZDA4Li42ZjhjZGZhYmI2NmZkZTc4YWNjZGNmZGM2NjBjMDAwNTE4MWFjZWQ4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9y
ZXNvdXJjZXMvdXRpbHMuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL3V0aWxzLmpzCkBAIC0xNSw3ICsxNSw3IEBA
IGZ1bmN0aW9uIGNoZWNrUmVxdWVzdChyZXF1ZXN0LCBFeHBlY3RlZFZhbHVlc0RpY3QpIHsKICAg
Zm9yICh2YXIgYXR0cmlidXRlIGluIEV4cGVjdGVkVmFsdWVzRGljdCkgewogICAgIHN3aXRjaChh
dHRyaWJ1dGUpIHsKICAgICAgIGNhc2UgImhlYWRlcnMiOgotICAgICAgICAgIGZvciAodmFyIGtl
eSBvZiBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzKCkpCisgICAgICAgICAgZm9y
ICh2YXIga2V5IGluIEV4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMoKSkKICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMocmVxdWVzdFsiaGVhZGVycyJdLmdldChrZXkpLCBFeHBlY3Rl
ZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5nZXQoa2V5KSwKICAgICAgICAgICAgICAgIkNoZWNrIGhl
YWRlcnMgYXR0cmlidXRlIGhhcyAiICsga2V5ICsgIjoiICsgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJo
ZWFkZXJzIl0uZ2V0KGtleSkpOwogICAgICAgICBicmVhazsKQEAgLTYzLDQgKzYzLDQgQEAgZnVu
Y3Rpb24gcmVhZFRleHRTdHJlYW0ocmVhZGVyLCBhc3luY1Rlc3QsIGV4cGVjdGVkVmFsdWUsIHJl
dHJpZXZlZFRleHQpIHsKICAgICAgIGFzeW5jVGVzdC5kb25lKCk7CiAgICAgfSk7CiAgIH0pOwot
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270639</attachid>
            <date>2016-02-04 01:08:17 -0800</date>
            <delta_ts>2016-02-04 08:07:07 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-153787-20160204100752.patch</filename>
            <type>text/plain</type>
            <size>30319</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjIyNGNmMmM2NDM4ODVl
OTQ2MzNlNjJkOThkNTQ0OTAyZGRmYjgzOC4uNWYzY2RhYmE2MGI3ODZhYzlmYmVkNzdlMWViNDY0
NTZkZDg1ZjEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAyLTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW0ZldGNo
IEFQSV0gQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIEhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzc4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIENvdmVyZWQgYnkgdXBkYXRlZCB0ZXN0
cy4KKyAgICAgICAgSW50cm9kdWNpbmcgdGVtcGxhdGUgY2xhc3MgKEpTS2V5VmFsdWVJdGVyYXRv
cikgdG8gc3VwcG9ydCBrZXktdmFsdWUgaXRlcmF0b3JzIGluIERPTSBjbGFzc2VzLgorICAgICAg
ICBVc2luZyBKU0tleVZhbHVlSXRlcmF0b3IgdG8gaW1wbGVtZW50IEhlYWRlcnMgZW50cmllcygp
LCBrZXlzKCkgYW5kIHZhbHVlcygpIGFzIGN1c3RvbSBtZXRob2RzLgorICAgICAgICBCaW5kaW5n
IGdlbmVyYXRvciBzaG91bGQgYmUgdXBkYXRlZCB0byBnZW5lcmF0ZSBkaXJlY3RseSB0aGVzZSBj
dXN0b20gbWV0aG9kcyBhbmQgaGFuZGxlIGl0ZXJhdG9yIFN5bWJvbC4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZldGNoSGVhZGVyczo6SXRlcmF0b3I6Om5leHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6SXRlcmF0b3IpOgorICAgICAgICAq
IE1vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEhl
YWRlcnM6OmNyZWF0ZUl0ZXJhdG9yKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoSGVh
ZGVycy5pZGw6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6
anNQYWlyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpKU0ZldGNoSGVhZGVyczo6ZW50cmllcyk6CisgICAgICAgIChXZWJD
b3JlOjpKU0ZldGNoSGVhZGVyczo6a2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0ZldGNoSGVh
ZGVyczo6dmFsdWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0tleVZhbHVlSXRlcmF0b3Iu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0tleVZhbHVlSXRlcmF0b3JQ
cm90b3R5cGU6OkpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisKIDIwMTYtMDItMDMgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFRocm93IGF3
YXkgbGlua2VkIGNvZGUgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDI4ZmY1YmMyYzViNzM4MmZhNjRhYTcyMDkyNTgyN2IyNjIzZDBiODkuLjFi
YzUwNjEzM2UzZTJmMTFhNzYxMDA3ZWE4OGQwMDg1OTRkZmFiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0xMTY0LDYgKzExNjQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcAorICAgIGJpbmRp
bmdzL2pzL0pTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRmlsZVJl
YWRlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKaW5kZXggMzA1MTYzNDE5MWY0
OTM5N2ZlYzVkZWIzYjA0YzQ0OGQ0MzM2ZTI5Ny4uODEyM2U4NmI5MjI3MDM5ZDBjYTIwY2Q5M2Nj
OTNhNGMwMzI3NWY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaEhlYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hI
ZWFkZXJzLmNwcApAQCAtMTc5LDYgKzE3OSwzMSBAQCB2b2lkIEZldGNoSGVhZGVyczo6ZmlsbChj
b25zdCBGZXRjaEhlYWRlcnMqIGhlYWRlcnMpCiAgICAgfQogfQogCitib29sIEZldGNoSGVhZGVy
czo6SXRlcmF0b3I6Om5leHQoU3RyaW5nJiBuZXh0S2V5LCBTdHJpbmcmIG5leHRWYWx1ZSkKK3sK
KyAgICB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBtX2tleXMuc2l6ZSgpKSB7CisgICAgICAgIGF1
dG8mIGtleSA9IG1fa2V5c1ttX2N1cnJlbnRJbmRleCsrXTsKKyAgICAgICAgU3RyaW5nIHZhbHVl
ID0gbV9oZWFkZXJzLT5tX2hlYWRlcnMuZ2V0KGtleSk7CisgICAgICAgIGlmICghdmFsdWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIG5leHRLZXkgPSBrZXk7CisgICAgICAgICAgICBuZXh0VmFs
dWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBtX2tleXMuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRmV0
Y2hIZWFkZXJzOjpJdGVyYXRvcjo6SXRlcmF0b3IoRmV0Y2hIZWFkZXJzJiBoZWFkZXJzKQorICAg
IDogbV9oZWFkZXJzKGhlYWRlcnMpCit7CisgICAgbV9rZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaGVhZGVycy5tX2hlYWRlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGhl
YWRlcnMubV9oZWFkZXJzKQorICAgICAgICBtX2tleXMudW5jaGVja2VkQXBwZW5kKGhlYWRlci5r
ZXkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisKKyAgICBzdGQ6OnNvcnQobV9rZXlzLmJl
Z2luKCksIG1fa2V5cy5lbmQoKSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4pOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggNTM2ODYy
ODgzMjZkZDc2MTNhOWViZjM4YmNiMDhkNGI0YmU5ZGNjYS4uZjM1ODFkMzI0YmU4Njk1NTViNDU2
OTkyNWY0MDc4NGJkMmZlYjc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaEhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoSGVhZGVycy5oCkBAIC02Miw2ICs2MiwyMyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGZhc3RH
ZXQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJzLmdldChuYW1l
KTsgfQogICAgIHZvaWQgZmFzdFNldChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKSB7IG1faGVhZGVycy5zZXQobmFtZSwgdmFsdWUpOyB9CiAKKyAgICBjbGFzcyBJdGVy
YXRvciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihGZXRjaEhlYWRl
cnMmKTsKKworICAgICAgICAvLyBGSVhNRTogQmluZGluZyBnZW5lcmF0b3Igc2hvdWxkIGJlIGFi
bGUgdG8gZ2VuZXJhdGUgaXRlcmF0b3Iga2V5IGFuZCB2YWx1ZSB0eXBlcy4KKyAgICAgICAgdXNp
bmcgS2V5ID0gU3RyaW5nOworICAgICAgICB1c2luZyBWYWx1ZSA9IFN0cmluZzsKKworICAgICAg
ICBib29sIG5leHQoU3RyaW5nJiBuZXh0S2V5LCBTdHJpbmcmIG5leHRWYWx1ZSk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBSZWY8RmV0Y2hIZWFkZXJzPiBtX2hlYWRlcnM7CisgICAgICAgIHNp
emVfdCBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fa2V5czsK
KyAgICB9OworICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKCkgeyByZXR1cm4gSXRlcmF0b3Io
KnRoaXMpOyB9CisKIHByaXZhdGU6CiAgICAgRmV0Y2hIZWFkZXJzKEd1YXJkIGd1YXJkKSA6IG1f
Z3VhcmQoZ3VhcmQpIHsgfQogICAgIEZldGNoSGVhZGVycyhHdWFyZCBndWFyZCwgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVycykgOiBtX2d1YXJkKGd1YXJkKSwgbV9oZWFkZXJzKGhlYWRlcnMp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRl
cnMuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaWRsCmlu
ZGV4IDdkOWY1ZmI4NTQyYmNmNDU5ZGM3OTcwNWQ1NjMyOGVjZmZmODY1NmIuLmY2MzMzOTc1OThl
MTBkYTlmYjhmM2RkYzZmZmZhNzA3OWEyMGVmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5pZGwKQEAgLTQwLDggKzQwLDExIEBAIGludGVyZmFjZSBG
ZXRjaEhlYWRlcnMgewogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaGFzKERPTVN0cmlu
ZyBuYW1lKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldChET01TdHJpbmcgbmFtZSwg
RE9NU3RyaW5nIHZhbHVlKTsKIAotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGl0ZXJhYmxlLgorICAg
IC8vIEZJWE1FOiBTdXBwb3J0IGl0ZXJhYmxlIHdpdGhpbiBiaW5kaW5nIGdlbmVyYXRvci4KICAg
ICAvL2l0ZXJhYmxlPERPTVN0cmluZywgRE9NU3RyaW5nPjsKKyAgICBbQ3VzdG9tXSBhbnkgZW50
cmllcygpOworICAgIFtDdXN0b21dIGFueSBrZXlzKCk7CisgICAgW0N1c3RvbV0gYW55IHZhbHVl
cygpOwogCiAgICAgW1ByaXZhdGUsIFJhaXNlc0V4Y2VwdGlvbiwgSW1wbGVtZW50ZWRBcz1hcHBl
bmRdIHZvaWQgYXBwZW5kRnJvbUpTKERPTVN0cmluZyBuYW1lLCBET01TdHJpbmcgdmFsdWUpOwog
ICAgIFtQcml2YXRlLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgaW5pdGlhbGl6ZVdpdGgoRmV0Y2hI
ZWFkZXJzIGhlYWRlcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGI0YzBkZmI3OWE5NTI4MDYwY2M2Y2M2OTRjNDdlMGEzMGZk
NzMwZmQuLjhiYWY0ZDE4N2UzODY3NzQzNDEyOGM2NTRiYWE2YmEwYWJmMWFmZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1
NDEsNiArMTU0MSw3IEBACiAJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQw
MTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovOyB9OwogCQk0MUUxQjFE
MDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0EwRkY1OTg2OTAwNTc2QjNCIC8q
IEFic3RyYWN0V29ya2VyLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8q
IEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MUUxQjFDQjBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCAqLzsg
fTsKKwkJNDFFOTEwQTcxQzYwRkQ2QzAwN0E0NTNGIC8qIEpTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTkxMEE2
MUM2MEZENkMwMDdBNDUzRiAvKiBKU0ZldGNoSGVhZGVyc0N1c3RvbS5jcHAgKi87IH07CiAJCTQx
RjA2MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjIxMjBGNUYx
OTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovOyB9OwogCQk0MUYw
NjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjIxMzBGNUYx
OTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgKi87IH07CiAJCTQx
RjA2NkU0MEY2NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2NkUyMEY2NEJDRjYwMEEw
N0VBQyAvKiBTY3JpcHRHbG9iYWxPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODk2Nyw2ICs4OTY4LDcgQEAKIAkJNDFFMUIxQ0EwRkY1
OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0V29ya2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFFMUIxQ0IwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFic3RyYWN0V29ya2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTFCMUNDMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFj
dFdvcmtlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQWJzdHJhY3RXb3JrZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUU5MTBBNjFDNjBGRDZDMDA3QTQ1M0YgLyog
SlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MjEzMEY1RjE5MjYw
MEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0R2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlw
dEdsb2JhbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzMDAsNiAr
MjIzMDIsNyBAQAogCQkJCUJDMkVENTU0MEM2QjlCRDMwMDkyMEJGRiAvKiBKU0VsZW1lbnRDdXN0
b20uY3BwICovLAogCQkJCUFERUM3OEY3MThFRTUzMDgwMDEzMTVDMiAvKiBKU0VsZW1lbnRDdXN0
b20uaCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5j
cHAgKi8sCisJCQkJNDFFOTEwQTYxQzYwRkQ2QzAwN0E0NTNGIC8qIEpTRmV0Y2hIZWFkZXJzQ3Vz
dG9tLmNwcCAqLywKIAkJCQkyRTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcCAqLywKIAkJCQlGRTgwRDdBNjBFOUMxRUQyMDAwRDZGNzUgLyogSlNHZW9sb2Nh
dGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIwRDRFODY5NjAwNzVBNTM5IC8qIEpTSGlz
dG9yeUN1c3RvbS5jcHAgKi8sCkBAIC0yOTM4Myw2ICsyOTM4Niw3IEBACiAJCQkJOTdCMzhFMjgx
NTFDNDI3MzAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlmaWNhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTdEMkFEMDMxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQ3MTZBNDg2MUEwMDk3NUEyNSAvKiBET01XaW5k
b3dTcGVlY2hTeW50aGVzaXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDFFOTEwQTcxQzYwRkQ2
QzAwN0E0NTNGIC8qIEpTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4Q0NCQjQ4MTUxRjgzMTYwMEFCN0NFOSAvKiBET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzUzREE0ODExNDMxMzREMDAwRDgxN0UgLyogRE9NV3JhcHBlcldv
cmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgxMEE1MzI1NTIwMDY0QkY1RiAvKiBE
T01YUGF0aC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKaW5kZXggZGQ0NzkwMWNkNTk3YjAzNWQ5ZjZiNTFk
NWM4YjAyMzY0ZTVkYjJlNS4uMjZjYzQ2OGViY2UyNzcxN2ZkODQ1YzJmNGE0ZDIxMTJkNTAzZGIw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbElu
T25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5P
bmUuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmNwcCIK
ICNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0V4Y2VwdGlv
bkJhc2UuY3BwIgorI2luY2x1ZGUgIkpTRmV0Y2hIZWFkZXJDdXN0b20uY3BwIgogI2luY2x1ZGUg
IkpTRmlsZVJlYWRlckN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNHZW9sb2NhdGlvbkN1c3RvbS5j
cHAiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCmluZGV4IDNhOTZiNDJjOTlmNTA1ZDljNGRl
MmQzOThmNGNiM2VhMzhhZWI5YjAuLjlkNjBiNDYzZDA0NTZlZjEzMTAzMWY3ZTliN2M0ZjllYjZi
N2M1MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCkBAIC01
MTQsNiArNTE0LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gaW5saW5lIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlCiAgICAgcmV0dXJuIGpzQXJy
YXkoZXhlYywgZ2xvYmFsT2JqZWN0LCAqdmVjdG9yKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWUxLCB0eXBlbmFtZSBWYWx1ZTI+IGlubGluZSBKU0M6OkpTVmFsdWUganNQYWlyKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmFsdWUxJiB2YWx1ZTEsIGNvbnN0IFZhbHVlMiYgdmFsdWUyKQoreworICAgIEpTQzo6TWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZTEpKTsKKyAgICBhcmdzLmFwcGVuZCh0b0pTKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZTIpKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCBnbG9i
YWxPYmplY3QsIGFyZ3MpOworfQorCiBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUganNBcnJh
eShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0Pik7CiAKIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b0Fy
cmF5QnVmZmVyVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZldGNoSGVhZGVyc0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ZldGNoSGVhZGVyc0N1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFkNzc4
YTVlZGUyZGMxZjA3ZmZmNWFkYWEzNWUzYWNkNTFkNzVkMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcApAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENhbm9uIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSByZXF1aXJlZCB0byBiZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5v
biBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRmV0Y2hIZWFkZXJzLmgiCisKKyNpbmNsdWRl
ICJKU0tleVZhbHVlSXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhN
RTogTW92ZSB0aGF0IGNvZGUgdG8gSlNGZXRjaEhlYWRlcnMuCit1c2luZyBGZXRjaEhlYWRlcnNJ
dGVyYXRvciA9IEpTS2V5VmFsdWVJdGVyYXRvcjxKU0ZldGNoSGVhZGVycywgRmV0Y2hIZWFkZXJz
PjsKK3VzaW5nIEZldGNoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlID0gSlNLZXlWYWx1ZUl0ZXJh
dG9yUHJvdG90eXBlPEpTRmV0Y2hIZWFkZXJzLCBGZXRjaEhlYWRlcnM+OworCit0ZW1wbGF0ZTw+
Citjb25zdCBKU0M6OkNsYXNzSW5mbyBGZXRjaEhlYWRlcnNJdGVyYXRvcjo6c19pbmZvID0geyAi
SGVhZGVycyBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
RmV0Y2hIZWFkZXJzSXRlcmF0b3IpIH07CisKK3RlbXBsYXRlPD4KK2NvbnN0IEpTQzo6Q2xhc3NJ
bmZvIEZldGNoSGVhZGVyc0l0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJIZWFkZXJzIEl0
ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGZXRjaEhlYWRl
cnNJdGVyYXRvclByb3RvdHlwZSkgfTsKKworSlNDOjpKU1ZhbHVlIEpTRmV0Y2hIZWFkZXJzOjpl
bnRyaWVzKEpTQzo6RXhlY1N0YXRlJikKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3I8SlNG
ZXRjaEhlYWRlcnMsIEZldGNoSGVhZGVycz4oKmdsb2JhbE9iamVjdCgpLCAqdGhpcywgSXRlcmF0
aW9uS2luZDo6S2V5VmFsdWUpOworfQorCitKU0M6OkpTVmFsdWUgSlNGZXRjaEhlYWRlcnM6Omtl
eXMoSlNDOjpFeGVjU3RhdGUmKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvcjxKU0ZldGNo
SGVhZGVycywgRmV0Y2hIZWFkZXJzPigqZ2xvYmFsT2JqZWN0KCksICp0aGlzLCBJdGVyYXRpb25L
aW5kOjpLZXkpOworfQorCitKU0M6OkpTVmFsdWUgSlNGZXRjaEhlYWRlcnM6OnZhbHVlcyhKU0M6
OkV4ZWNTdGF0ZSYpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yPEpTRmV0Y2hIZWFkZXJz
LCBGZXRjaEhlYWRlcnM+KCpnbG9iYWxPYmplY3QoKSwgKnRoaXMsIEl0ZXJhdGlvbktpbmQ6OlZh
bHVlKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNL
ZXlWYWx1ZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0tleVZhbHVl
SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOGUwMzhkNGI2YTI4MTE1MzBjMmFmMDU3YWE5NjI1Y2Uz
YmFiOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNL
ZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQ2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0tleVZhbHVlSXRlcmF0b3JfaAor
I2RlZmluZSBKU0tleVZhbHVlSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSA8cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIEZJWE1FOiBVcGRhdGUgYmluZGluZyBnZW5lcmF0b3IgdG8gYWxsb3cg
Z2V0dGluZyBET01XcmFwcGVkIGZyb20gSlNXcmFwcGVyLgordGVtcGxhdGU8dHlwZW5hbWUgSlNX
cmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorY2xhc3MgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBKU0tleVZhbHVl
SXRlcmF0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZT4odm0uaGVhcCkp
IEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgcHJv
dG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IHByb3RvdHlwZTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogQmFzZSh2bSwgc3RydWN0
dXJlKSB7IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKK307CisKK2VudW0gY2xhc3MgSXRlcmF0aW9uS2luZCB7IEtleSwgVmFsdWUs
IEtleVZhbHVlIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgRE9N
V3JhcHBlZD4KK2NsYXNzIEpTS2V5VmFsdWVJdGVyYXRvcjogcHVibGljIEpTRE9NT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7CisKKyAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNL
ZXlWYWx1ZUl0ZXJhdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTV3JhcHBlciYgaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAg
ICB7CisgICAgICAgIEpTS2V5VmFsdWVJdGVyYXRvciogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTS2V5VmFsdWVJdGVyYXRvcj4odm0uaGVhcCkpIEpTS2V5VmFs
dWVJdGVyYXRvcihzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBraW5kKTsKKyAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAg
IH0KKworICAgIHN0YXRpYyBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU8SlNXcmFwcGVyLCBE
T01XcmFwcGVkPiogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNLZXlWYWx1ZUl0ZXJh
dG9yUHJvdG90eXBlPEpTV3JhcHBlciwgRE9NV3JhcHBlZD46OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LAorICAgICAgICAgICAgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlPEpTV3JhcHBlciwg
RE9NV3JhcHBlZD46OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgfQorCisgICAgYm9vbCBuZXh0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlJik7CisKK3ByaXZhdGU6CisgICAgSlNLZXlWYWx1ZUl0ZXJh
dG9yKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV3JhcHBlciYgaXRlcmF0ZWRPYmplY3Qs
IEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICAgICAgOiBCYXNlKHN0cnVjdHVyZSwgKml0ZXJhdGVk
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKQorICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmpl
Y3Qud3JhcHBlZCgpLmNyZWF0ZUl0ZXJhdG9yKCkpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisg
ICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKwor
ICAgIHR5cGVuYW1lIERPTVdyYXBwZWQ6Okl0ZXJhdG9yIG1faXRlcmF0b3I7CisgICAgSXRlcmF0
aW9uS2luZCBtX2tpbmQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5cGVu
YW1lIERPTVdyYXBwZWQ+CitKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVk
PiogY3JlYXRlSXRlcmF0b3IoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNXcmFw
cGVyJiB3cmFwcGVyLCBJdGVyYXRpb25LaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIEpTS2V5VmFs
dWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LnZt
KCksIGdldERPTVN0cnVjdHVyZTxKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFw
cGVkPj4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksIHdyYXBwZXIsIGtpbmQpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5cGVuYW1lIERPTVdyYXBwZWQ+Cit2
b2lkIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFw
cGVkPiogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBw
ZXIsIERPTVdyYXBwZWQ+Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNLZXlWYWx1ZUl0ZXJh
dG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD46On5KU0tleVZhbHVlSXRlcmF0b3IoKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorYm9vbCBK
U0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6bmV4dChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSYgdmFsdWUpCit7CisgICAgdHlwZW5hbWUgRE9NV3Jh
cHBlZDo6SXRlcmF0b3I6OktleSBuZXh0S2V5OworICAgIHR5cGVuYW1lIERPTVdyYXBwZWQ6Okl0
ZXJhdG9yOjpWYWx1ZSBuZXh0VmFsdWU7CisgICAgaWYgKG1faXRlcmF0b3IubmV4dChuZXh0S2V5
LCBuZXh0VmFsdWUpKSB7CisgICAgICAgIHZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRpb25LaW5k
OjpWYWx1ZSkKKyAgICAgICAgdmFsdWUgPSB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIG5l
eHRWYWx1ZSk7CisgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGlvbktpbmQ6OktleSkKKyAg
ICAgICAgdmFsdWUgPSB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIG5leHRLZXkpOworICAg
IGVsc2UKKyAgICAgICAgdmFsdWUgPSBqc1BhaXIoc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBuZXh0
S2V5LCBuZXh0VmFsdWUpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZUZ1bmN0aW9uTmV4dChKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdDsKKyAgICBKU0tl
eVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPiogaXRlcmF0b3IgPSBKU0M6Ompz
RHluYW1pY0Nhc3Q8SlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD4qPihz
dGF0ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJD
YW5ub3QgY2FsbCBuZXh0KCkgb24gYSBub24tSXRlcmF0b3Igb2JqZWN0IikpKTsKKworICAgIGJv
b2wgaXNEb25lID0gaXRlcmF0b3ItPm5leHQoKnN0YXRlLCByZXN1bHQpOworICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChzdGF0ZSwgcmVz
dWx0LCBpc0RvbmUpKTsKK30KKwordXNpbmcgTmV4dEZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICgqKShKU0M6OkNhbGxGcmFtZSopOwordGVtcGxhdGU8dHlwZW5h
bWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgordm9pZCBKU0tleVZhbHVlSXRlcmF0
b3JQcm90b3R5cGU8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6ZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworCisgICAg
TmV4dEZ1bmN0aW9uIG5leHRGdW5jdGlvbiA9IEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZUZ1
bmN0aW9uTmV4dDxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OworICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBu
ZXh0RnVuY3Rpb24sIEpTQzo6RG9udEVudW0sIDAsIEpTQzo6Tm9JbnRyaW5zaWMpOworfQorCit9
CisKKyNlbmRpZiAvLyAhZGVmaW5lZChKU0tleVZhbHVlSXRlcmF0b3JfaCkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCmluZGV4IGI5YWZlNzFiYzYyMjU4ZDc2NzM1MjgwMWY2MzU3Njk1ZThi
YWZjYTUuLjczZGFjNDBlYmI4YmI2MjRjMmI3NmQ2Yzg2M2MzMjQxNzJkY2QzNmMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTAyLTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW0ZldGNo
IEFQSV0gQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIEhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzc4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Zl
dGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLmh0bWw6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtc3Ry
dWN0dXJlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gv
YXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5zdWItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1Yi1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXNv
dXJjZXMvdXRpbHMuanM6IGZpeGVkIHR5cG8gaW4gdGVzdC4KKwogMjAxNi0wMi0wMyAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlLXN5bmMgVzNDIEhUTUwgd2Vi
LXBsYXRmb3JtLXRlc3RzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9h
cGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLWV4cGVjdGVkLnR4dAppbmRleCBiZTJiYzc0Yjk3NzNi
ZDZhN2RiNzAxMzAxNDA0M2YzMzY4ZDI4ZWNjLi42ZGI2OWNlODYwNTViNTA0ODlmZTQ3MjAwZjU0
MTBjNmFhMmIxODM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gv
YXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTEyLDQgKzEyLDcgQEAg
UEFTUyBDaGVjayBzZXQgbWV0aG9kCiBQQVNTIENoZWNrIGhhcyBtZXRob2QgCiBQQVNTIENoZWNr
IGRlbGV0ZSBtZXRob2QgCiBQQVNTIENoZWNrIGdldCBtZXRob2QgCitQQVNTIENoZWNrIGtleXMg
bWV0aG9kIAorUEFTUyBDaGVjayB2YWx1ZXMgbWV0aG9kIAorUEFTUyBDaGVjayBlbnRyaWVzIG1l
dGhvZCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRl
cnMtYmFzaWMuaHRtbAppbmRleCBjMzk1NDVkNTQzMTQ2MWFkYTQ2OTJjZWRjODlkN2QyODZkNDY1
ZmRmLi41MWFjODljN2IzY2IwMmZmMDMwYjNhMjEwMzE1MDcyMTg4ZWRmZGU3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9o
ZWFkZXJzL2hlYWRlcnMtYmFzaWMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMuaHRtbApA
QCAtMTExLDYgKzExMSw1OCBAQAogCiAgICAgICAgIGFzc2VydF9lcXVhbHMoaGVhZGVycy5nZXQo
Im5hbWVOb3RJbkhlYWRlcnMiKSwgbnVsbCwgImhlYWRlcjogbmFtZU5vdEluSGVhZGVycyBoYXMg
bm8gdmFsdWUiKTsKICAgICAgIH0sICJDaGVjayBnZXQgbWV0aG9kIik7Ci0gICAgPC9zY3JpcHQ+
CisKKyAgICAgIHZhciBoZWFkZXJFbnRyaWVzRGljdCA9IHsibmFtZTEiOiAidmFsdWUxIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZTIiOiAidmFsdWUyIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ2YWx1ZTMiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb250ZW50LVR5cGUiOiAidmFsdWU0IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXAiOiAidmFsdWU1IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlcyI6ICJ2YWx1ZTYiCisgICAgICB9OworICAg
ICAgdmFyIHNvcnRlZEhlYWRlckRpY3QgPSB7fTsKKyAgICAgIHZhciBzb3J0ZWRIZWFkZXJLZXlz
ID0gT2JqZWN0LmtleXMoaGVhZGVyRW50cmllc0RpY3QpLm1hcChmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICBzb3J0ZWRIZWFkZXJEaWN0W3ZhbHVlLnRvTG93ZXJDYXNlKCldID0gaGVhZGVyRW50
cmllc0RpY3RbdmFsdWVdOworICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTsKKyAg
ICAgIH0pLnNvcnQoKTsKKworICAgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGhl
YWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJFbnRyaWVzRGljdCk7CisgICAgICAgIHZhciBhY3R1
YWwgPSBoZWFkZXJzLmtleXMoKTsKKyAgICAgICAgc29ydGVkSGVhZGVyS2V5cy5mb3JFYWNoKGZ1
bmN0aW9uKGtleSkgeworICAgICAgICAgICAgZW50cnkgPSBhY3R1YWwubmV4dCgpOworICAgICAg
ICAgICAgYXNzZXJ0X2ZhbHNlKGVudHJ5LmRvbmUpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhlbnRyeS52YWx1ZSwga2V5KTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF90cnVlKGFj
dHVhbC5uZXh0KCkuZG9uZSk7CisgICAgICAgIGFzc2VydF90cnVlKGFjdHVhbC5uZXh0KCkuZG9u
ZSk7CisgICAgICB9LCAiQ2hlY2sga2V5cyBtZXRob2QiKTsKKworICAgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJFbnRyaWVzRGlj
dCk7CisgICAgICAgIHZhciBhY3R1YWwgPSBoZWFkZXJzLnZhbHVlcygpOworCisgICAgICAgIHNv
cnRlZEhlYWRlcktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGVudHJ5
ID0gYWN0dWFsLm5leHQoKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZShlbnRyeS5kb25lKTsK
KyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW50cnkudmFsdWUsIHNvcnRlZEhlYWRlckRpY3Rb
a2V5XSk7CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRfdHJ1ZShhY3R1YWwubmV4dCgpLmRv
bmUpOworICAgICAgICBhc3NlcnRfdHJ1ZShhY3R1YWwubmV4dCgpLmRvbmUpOworICAgICAgfSwg
IkNoZWNrIHZhbHVlcyBtZXRob2QiKTsKKworICAgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJFbnRyaWVzRGljdCk7CisgICAgICAg
IHZhciBhY3R1YWwgPSBoZWFkZXJzLmVudHJpZXMoKTsKKworICAgICAgICBzb3J0ZWRIZWFkZXJL
ZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICBlbnRyeSA9IGFjdHVhbC5u
ZXh0KCk7CisgICAgICAgICAgICBhc3NlcnRfZmFsc2UoZW50cnkuZG9uZSk7CisgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGVudHJ5LnZhbHVlWzBdLCBrZXkpOworICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhlbnRyeS52YWx1ZVsxXSwgc29ydGVkSGVhZGVyRGljdFtrZXldKTsKKyAgICAgICAg
fSk7CisgICAgICAgIGFzc2VydF90cnVlKGFjdHVhbC5uZXh0KCkuZG9uZSk7CisgICAgICAgIGFz
c2VydF90cnVlKGFjdHVhbC5uZXh0KCkuZG9uZSk7CisgICAgICB9LCAiQ2hlY2sgZW50cmllcyBt
ZXRob2QiKTsKKyAgIDwvc2NyaXB0PgogICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFk
ZXJzL2hlYWRlcnMtc3RydWN0dXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1zdHJ1Y3R1
cmUtZXhwZWN0ZWQudHh0CmluZGV4IDg1NjczMmYzODRmNzlmNTgwYmYwMDhmMTc5YTFiY2E4ZWY5
YjAwZDYuLjBlZjZkMWJjYzZhMGEyYTFhZjUwY2UxNTQxYzZkZGFhNTI5M2ZhOWYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBp
L2hlYWRlcnMvaGVhZGVycy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVy
cy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0CkBAIC00LDcgKzQsNyBAQCBQQVNTIEhlYWRlcnMgaGFz
IGRlbGV0ZSBtZXRob2QKIFBBU1MgSGVhZGVycyBoYXMgZ2V0IG1ldGhvZCAKIFBBU1MgSGVhZGVy
cyBoYXMgaGFzIG1ldGhvZCAKIFBBU1MgSGVhZGVycyBoYXMgc2V0IG1ldGhvZCAKLUZBSUwgSGVh
ZGVycyBoYXMgZW50cmllcyBtZXRob2QgYXNzZXJ0X3RydWU6IGhlYWRlcnMgaGFzIGVudHJpZXMg
bWV0aG9kIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIEhlYWRlcnMgaGFzIGtleXMgbWV0
aG9kIGFzc2VydF90cnVlOiBoZWFkZXJzIGhhcyBrZXlzIG1ldGhvZCBleHBlY3RlZCB0cnVlIGdv
dCBmYWxzZQotRkFJTCBIZWFkZXJzIGhhcyB2YWx1ZXMgbWV0aG9kIGFzc2VydF90cnVlOiBoZWFk
ZXJzIGhhcyB2YWx1ZXMgbWV0aG9kIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCitQQVNTIEhlYWRl
cnMgaGFzIGVudHJpZXMgbWV0aG9kIAorUEFTUyBIZWFkZXJzIGhhcyBrZXlzIG1ldGhvZCAKK1BB
U1MgSGVhZGVycyBoYXMgdmFsdWVzIG1ldGhvZCAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVxdWVzdC9yZXF1ZXN0
LWNsb25lLnN1Yi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtY2xvbmUuc3ViLWV4cGVjdGVk
LnR4dAppbmRleCA2Y2JkMDc3NDc5ODQ0Y2VhNWM3OTYxOWFhMTc3MGE1NGRmMmVmMzAzLi5lZWFj
ZjhhNjNjZjFjYWE3YzJhMjNmNzEwNTc4MTIzMjE5YWJkYjIwIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3Jl
cXVlc3QtY2xvbmUuc3ViLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtY2xvbmUuc3Vi
LWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIAotRkFJTCBDaGVjayBjbG9uaW5nIGEgcmVx
dWVzdCBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzIGlzIG5vdCBhIGZ1bmN0aW9u
LiAoSW4gJ0V4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMoKScsICdFeHBlY3RlZFZh
bHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzJyBpcyB1bmRlZmluZWQpCitQQVNTIENoZWNrIGNsb25p
bmcgYSByZXF1ZXN0IAogUEFTUyBDaGVjayBjbG9uaW5nIGEgcmVxdWVzdCBjb3BpZXMgdGhlIGhl
YWRlcnMgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1pbml0LTAwMy5zdWItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9h
cGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1Yi1leHBlY3RlZC50eHQKaW5kZXggMmFiZTc1
NjBlMjhlOTg4ZTQ3NmMyOGNjZDJmMmUyOWYwMmI4NWI3Yy4uZmNjZTI5YzA2NDMzMjkzODRhZTQx
NTZiMGZmYWNjNGFmOWQ2YTQyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1
Yi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9mZXRjaC9hcGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1Yi1leHBlY3RlZC50
eHQKQEAgLTEsNiArMSw2IEBACiAKLUZBSUwgQ2hlY2sgcmVxdWVzdCB2YWx1ZXMgd2hlbiBpbml0
aWFsaXplZCBmcm9tIFJlcXVlc3QgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cyBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICdFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlz
KCknLCAnRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cycgaXMgdW5kZWZpbmVkKQot
RkFJTCBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVxdWVzdCBh
bmQgaW5pdCB2YWx1ZXMgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cyBpcyBub3Qg
YSBmdW5jdGlvbi4gKEluICdFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzKCknLCAn
RXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cycgaXMgdW5kZWZpbmVkKQorUEFTUyBD
aGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVxdWVzdCAKK1BBU1Mg
Q2hlY2sgcmVxdWVzdCB2YWx1ZXMgd2hlbiBpbml0aWFsaXplZCBmcm9tIFJlcXVlc3QgYW5kIGlu
aXQgdmFsdWVzIAogRkFJTCBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZy
b20gdXJsIHN0cmluZyBhc3NlcnRfZXF1YWxzOiBDaGVjayB1cmwgYXR0cmlidXRlIGV4cGVjdGVk
ICJodHRwOi8vdXJsLnRlc3Q6MTIzNC9wYXRoL3N1YnBhdGg/cXVlcnk9dHJ1ZSIgYnV0IGdvdCAi
aHR0cDovL3VybC50ZXN0OjEyMzQvcGF0aC9zdWJwYXRoP3F1ZXJ5PXRydWUjZnJhZ21lbnQiCi1G
QUlMIENoZWNrIHJlcXVlc3QgdmFsdWVzIHdoZW4gaW5pdGlhbGl6ZWQgZnJvbSB1cmwgYW5kIGlu
aXQgdmFsdWVzIEV4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cygpJywgJ0V4cGVj
dGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMnIGlzIHVuZGVmaW5lZCkKK0ZBSUwgQ2hlY2sg
cmVxdWVzdCB2YWx1ZXMgd2hlbiBpbml0aWFsaXplZCBmcm9tIHVybCBhbmQgaW5pdCB2YWx1ZXMg
YXNzZXJ0X2VxdWFsczogQ2hlY2sgdXJsIGF0dHJpYnV0ZSBleHBlY3RlZCAiaHR0cDovL3VybC50
ZXN0OjEyMzQvcGF0aC9zdWJwYXRoP3F1ZXJ5PXRydWUiIGJ1dCBnb3QgImh0dHA6Ly91cmwudGVz
dDoxMjM0L3BhdGgvc3VicGF0aD9xdWVyeT10cnVlI2ZyYWdtZW50IgogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXNv
dXJjZXMvdXRpbHMuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvdXRpbHMuanMKaW5kZXggNDQ5MjkzNTYyNGQ5MjI4NmI0
YWU3OTE5N2U4ZDYwYjRjNjQ5NWQwOC4uNmY4Y2RmYWJiNjZmZGU3OGFjY2RjZmRjNjYwYzAwMDUx
ODFhY2VkOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL3V0aWxzLmpzCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy91dGlscy5q
cwpAQCAtMTUsNyArMTUsNyBAQCBmdW5jdGlvbiBjaGVja1JlcXVlc3QocmVxdWVzdCwgRXhwZWN0
ZWRWYWx1ZXNEaWN0KSB7CiAgIGZvciAodmFyIGF0dHJpYnV0ZSBpbiBFeHBlY3RlZFZhbHVlc0Rp
Y3QpIHsKICAgICBzd2l0Y2goYXR0cmlidXRlKSB7CiAgICAgICBjYXNlICJoZWFkZXJzIjoKLSAg
ICAgICAgICBmb3IgKHZhciBrZXkgb2YgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5
cygpKQorICAgICAgICAgIGZvciAodmFyIGtleSBpbiBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRl
cnMiXS5rZXlzKCkpCiAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHJlcXVlc3RbImhlYWRlcnMi
XS5nZXQoa2V5KSwgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0uZ2V0KGtleSksCiAgICAg
ICAgICAgICAgICJDaGVjayBoZWFkZXJzIGF0dHJpYnV0ZSBoYXMgIiArIGtleSArICI6IiArIEV4
cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmdldChrZXkpKTsKICAgICAgICAgYnJlYWs7CkBA
IC02Myw0ICs2Myw0IEBAIGZ1bmN0aW9uIHJlYWRUZXh0U3RyZWFtKHJlYWRlciwgYXN5bmNUZXN0
LCBleHBlY3RlZFZhbHVlLCByZXRyaWV2ZWRUZXh0KSB7CiAgICAgICBhc3luY1Rlc3QuZG9uZSgp
OwogICAgIH0pOwogICB9KTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270657</attachid>
            <date>2016-02-04 08:07:14 -0800</date>
            <delta_ts>2016-02-04 09:43:09 -0800</delta_ts>
            <desc>Trying to fix win build</desc>
            <filename>bug-153787-20160204170649.patch</filename>
            <type>text/plain</type>
            <size>30729</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU1NWY3ODgwNjFhMGI1
NzBlY2FjNzk1Njc0NTc0ZTZiNzg0MjVhZC4uOGI2YTVmMDg5NTc1ZTYyNDlmMTMyY2JiNTMxNWZh
NjY1NjhjMzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDE2LTAyLTA0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgW0ZldGNo
IEFQSV0gQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIEhlYWRlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzc4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlbGFuZGluZywgdXBkYXRpbmcgYmlu
ZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmggZm9yIFdpbmRvd3MgYm90cy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IHVwZGF0ZWQgdGVzdHMuCisgICAgICAgIEludHJvZHVjaW5nIHRlbXBsYXRl
IGNsYXNzIChKU0tleVZhbHVlSXRlcmF0b3IpIHRvIHN1cHBvcnQga2V5LXZhbHVlIGl0ZXJhdG9y
cyBpbiBET00gY2xhc3Nlcy4KKyAgICAgICAgVXNpbmcgSlNLZXlWYWx1ZUl0ZXJhdG9yIHRvIGlt
cGxlbWVudCBIZWFkZXJzIGVudHJpZXMoKSwga2V5cygpIGFuZCB2YWx1ZXMoKSBhcyBjdXN0b20g
bWV0aG9kcy4KKyAgICAgICAgQmluZGluZyBnZW5lcmF0b3Igc2hvdWxkIGJlIHVwZGF0ZWQgdG8g
Z2VuZXJhdGUgZGlyZWN0bHkgdGhlc2UgY3VzdG9tIG1ldGhvZHMgYW5kIGhhbmRsZSBpdGVyYXRv
ciBTeW1ib2wuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEhlYWRlcnM6
Okl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoSGVhZGVyczo6SXRlcmF0
b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oOgor
ICAgICAgICAoV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpjcmVhdGVJdGVyYXRvcik6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaWRsOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdz
QWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6anNQYWlyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZldGNoSGVh
ZGVyc0N1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNGZXRjaEhlYWRlcnM6
OmVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNGZXRjaEhlYWRlcnM6OmtleXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNGZXRjaEhlYWRlcnM6OnZhbHVlcyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNL
ZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNL
ZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlOjpKU0tleVZhbHVlSXRlcmF0b3JQcm90
b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSXRlcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV3JhcHBlZD46OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBl
ZD46Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlZD46OmZpbmlzaENyZWF0aW9u
KToKKworMjAxNi0wMi0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9u
LmZyPgorCiAgICAgICAgIFVucmV2aWV3ZWQuCiAgICAgICAgIFJldmVydGluZyByMTk2MTE1IGFu
ZCByMTkxMTYsIHJlbGF0ZWQgdG9odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUzNzg3LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDI4ZmY1YmMyYzViNzM4MmZhNjRh
YTcyMDkyNTgyN2IyNjIzZDBiODkuLjFiYzUwNjEzM2UzZTJmMTFhNzYxMDA3ZWE4OGQwMDg1OTRk
ZmFiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTY0LDYgKzExNjQsNyBAQCBzZXQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFeGNl
cHRpb25CYXNlLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9K
U0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoSGVhZGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVy
cy5jcHAKaW5kZXggMzA1MTYzNDE5MWY0OTM5N2ZlYzVkZWIzYjA0YzQ0OGQ0MzM2ZTI5Ny4uODEy
M2U4NmI5MjI3MDM5ZDBjYTIwY2Q5M2NjOTNhNGMwMzI3NWY3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcApAQCAtMTc5LDYgKzE3OSwzMSBAQCB2
b2lkIEZldGNoSGVhZGVyczo6ZmlsbChjb25zdCBGZXRjaEhlYWRlcnMqIGhlYWRlcnMpCiAgICAg
fQogfQogCitib29sIEZldGNoSGVhZGVyczo6SXRlcmF0b3I6Om5leHQoU3RyaW5nJiBuZXh0S2V5
LCBTdHJpbmcmIG5leHRWYWx1ZSkKK3sKKyAgICB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBtX2tl
eXMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8mIGtleSA9IG1fa2V5c1ttX2N1cnJlbnRJbmRleCsr
XTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gbV9oZWFkZXJzLT5tX2hlYWRlcnMuZ2V0KGtleSk7
CisgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG5leHRLZXkgPSBr
ZXk7CisgICAgICAgICAgICBuZXh0VmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2tleXMuY2xlYXIoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworRmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6SXRlcmF0b3IoRmV0
Y2hIZWFkZXJzJiBoZWFkZXJzKQorICAgIDogbV9oZWFkZXJzKGhlYWRlcnMpCit7CisgICAgbV9r
ZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaGVhZGVycy5tX2hlYWRlcnMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIGhlYWRlciA6IGhlYWRlcnMubV9oZWFkZXJzKQorICAgICAgICBtX2tleXMu
dW5jaGVja2VkQXBwZW5kKGhlYWRlci5rZXkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisK
KyAgICBzdGQ6OnNvcnQobV9rZXlzLmJlZ2luKCksIG1fa2V5cy5lbmQoKSwgV1RGOjpjb2RlUG9p
bnRDb21wYXJlTGVzc1RoYW4pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoRkVUQ0hfQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hIZWFkZXJzLmgKaW5kZXggNTM2ODYyODgzMjZkZDc2MTNhOWViZjM4YmNiMDhkNGI0YmU5ZGNj
YS4uZjM1ODFkMzI0YmU4Njk1NTViNDU2OTkyNWY0MDc4NGJkMmZlYjc2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCkBAIC02Miw2ICs2MiwyMyBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGZhc3RHZXQoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFkZXJzLmdldChuYW1lKTsgfQogICAgIHZvaWQgZmFzdFNldChIVFRQSGVhZGVy
TmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1faGVhZGVycy5zZXQobmFtZSwgdmFs
dWUpOyB9CiAKKyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBleHBs
aWNpdCBJdGVyYXRvcihGZXRjaEhlYWRlcnMmKTsKKworICAgICAgICAvLyBGSVhNRTogQmluZGlu
ZyBnZW5lcmF0b3Igc2hvdWxkIGJlIGFibGUgdG8gZ2VuZXJhdGUgaXRlcmF0b3Iga2V5IGFuZCB2
YWx1ZSB0eXBlcy4KKyAgICAgICAgdXNpbmcgS2V5ID0gU3RyaW5nOworICAgICAgICB1c2luZyBW
YWx1ZSA9IFN0cmluZzsKKworICAgICAgICBib29sIG5leHQoU3RyaW5nJiBuZXh0S2V5LCBTdHJp
bmcmIG5leHRWYWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWY8RmV0Y2hIZWFkZXJz
PiBtX2hlYWRlcnM7CisgICAgICAgIHNpemVfdCBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1fa2V5czsKKyAgICB9OworICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJh
dG9yKCkgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMpOyB9CisKIHByaXZhdGU6CiAgICAgRmV0Y2hI
ZWFkZXJzKEd1YXJkIGd1YXJkKSA6IG1fZ3VhcmQoZ3VhcmQpIHsgfQogICAgIEZldGNoSGVhZGVy
cyhHdWFyZCBndWFyZCwgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykgOiBtX2d1YXJkKGd1
YXJkKSwgbV9oZWFkZXJzKGhlYWRlcnMpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaEhlYWRlcnMuaWRsCmluZGV4IDdkOWY1ZmI4NTQyYmNmNDU5ZGM3OTcwNWQ1NjMy
OGVjZmZmODY1NmIuLmY2MzMzOTc1OThlMTBkYTlmYjhmM2RkYzZmZmZhNzA3OWEyMGVmYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5pZGwKQEAgLTQw
LDggKzQwLDExIEBAIGludGVyZmFjZSBGZXRjaEhlYWRlcnMgewogICAgIFtSYWlzZXNFeGNlcHRp
b25dIGJvb2xlYW4gaGFzKERPTVN0cmluZyBuYW1lKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHNldChET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKIAotICAgIC8vIEZJWE1F
OiBTdXBwb3J0IGl0ZXJhYmxlLgorICAgIC8vIEZJWE1FOiBTdXBwb3J0IGl0ZXJhYmxlIHdpdGhp
biBiaW5kaW5nIGdlbmVyYXRvci4KICAgICAvL2l0ZXJhYmxlPERPTVN0cmluZywgRE9NU3RyaW5n
PjsKKyAgICBbQ3VzdG9tXSBhbnkgZW50cmllcygpOworICAgIFtDdXN0b21dIGFueSBrZXlzKCk7
CisgICAgW0N1c3RvbV0gYW55IHZhbHVlcygpOwogCiAgICAgW1ByaXZhdGUsIFJhaXNlc0V4Y2Vw
dGlvbiwgSW1wbGVtZW50ZWRBcz1hcHBlbmRdIHZvaWQgYXBwZW5kRnJvbUpTKERPTVN0cmluZyBu
YW1lLCBET01TdHJpbmcgdmFsdWUpOwogICAgIFtQcml2YXRlLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgaW5pdGlhbGl6ZVdpdGgoRmV0Y2hIZWFkZXJzIGhlYWRlcnMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI0YzBkZmI3OWE5
NTI4MDYwY2M2Y2M2OTRjNDdlMGEzMGZkNzMwZmQuLjhiYWY0ZDE4N2UzODY3NzQzNDEyOGM2NTRi
YWE2YmEwYWJmMWFmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE1NDEsNiArMTU0MSw3IEBACiAJCTQxRDAxNUNCMEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQwMTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5
cGUuY3BwICovOyB9OwogCQk0MUUxQjFEMDBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3Jr
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFF
MUIxQ0EwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmNwcCAqLzsgfTsKIAkJNDFF
MUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDQjBGRjU5ODY5MDA1NzZCM0Ig
LyogQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKKwkJNDFFOTEwQTcxQzYwRkQ2QzAwN0E0NTNGIC8q
IEpTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxRTkxMEE2MUM2MEZENkMwMDdBNDUzRiAvKiBKU0ZldGNoSGVhZGVy
c0N1c3RvbS5jcHAgKi87IH07CiAJCTQxRjA2MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5oICovOyB9OwogCQk0MUYwNjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUYwNjIxMzBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAgKi87IH07CiAJCTQxRjA2NkU0MEY2NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRH
bG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxRjA2NkUyMEY2NEJDRjYwMEEwN0VBQyAvKiBTY3JpcHRHbG9iYWxPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODk2Nyw2ICs4
OTY4LDcgQEAKIAkJNDFFMUIxQ0EwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFic3RyYWN0V29ya2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFFMUIxQ0IwRkY1OTg2OTAwNTc2QjNC
IC8qIEFic3RyYWN0V29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFi
c3RyYWN0V29ya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRTFCMUNDMEZG
NTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gQWJzdHJhY3RXb3JrZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUU5
MTBBNjFDNjBGRDZDMDA3QTQ1M0YgLyogSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaEhlYWRlcnNDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyog
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjZF
MjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0R2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEdsb2JhbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjIzMDAsNiArMjIzMDIsNyBAQAogCQkJCUJDMkVENTU0MEM2QjlCRDMw
MDkyMEJGRiAvKiBKU0VsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUFERUM3OEY3MThFRTUzMDgw
MDEzMTVDMiAvKiBKU0VsZW1lbnRDdXN0b20uaCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBG
QTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAgKi8sCisJCQkJNDFFOTEwQTYxQzYwRkQ2QzAwN0E0
NTNGIC8qIEpTRmV0Y2hIZWFkZXJzQ3VzdG9tLmNwcCAqLywKIAkJCQkyRTc1ODJFRDEyNzY0RjI2
MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLywKIAkJCQlGRTgwRDdBNjBFOUMx
RUQyMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIw
RDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgKi8sCkBAIC0yOTM4Myw2ICsy
OTM4Niw3IEBACiAJCQkJOTdCMzhFMjgxNTFDNDI3MzAwNDYyMkU5IC8qIERPTVdpbmRvd05vdGlm
aWNhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdEMkFEMDMxNEI4MjNBNjAwOTNERjMy
IC8qIERPTVdpbmRvd1Byb3BlcnR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQ3MTZB
NDg2MUEwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDFFOTEwQTcxQzYwRkQ2QzAwN0E0NTNGIC8qIEpTRmV0Y2hIZWFkZXJzQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0NCQjQ4MTUxRjgzMTYwMEFCN0NFOSAvKiBET01X
aW5kb3dXZWJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzUzREE0ODExNDMxMzRE
MDAwRDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQx
MzgxMEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKaW5kZXgg
ZGQ0NzkwMWNkNTk3YjAzNWQ5ZjZiNTFkNWM4YjAyMzY0ZTVkYjJlNS4uN2UyM2YwNThiNGIwNDI3
N2Y5MWRmMTMzM2I2MWUxMzU1ZGNlMDkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmNwcCIKICNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0Q3VzdG9tLmNw
cCIKICNpbmNsdWRlICJKU0V4Y2VwdGlvbkJhc2UuY3BwIgorI2luY2x1ZGUgIkpTRmV0Y2hIZWFk
ZXJzQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIgogI2luY2x1
ZGUgIkpTR2VvbG9jYXRpb25DdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTSFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApp
bmRleCAzYTk2YjQyYzk5ZjUwNWQ5YzRkZTJkMzk4ZjRjYjNlYTM4YWViOWIwLi45ZDYwYjQ2M2Qw
NDU2ZWYxMzEwMzFmN2U5YjdjNGY5ZWI2YjdjNTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaApAQCAtNTE0LDYgKzUxNCwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSBKU0M6OkpTVmFsdWUganNBcnJheShK
U0M6OkV4ZQogICAgIHJldHVybiBqc0FycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgKnZlY3Rvcik7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlMSwgdHlwZW5hbWUgVmFsdWUyPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzUGFpcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZhbHVlMSYgdmFsdWUxLCBjb25zdCBWYWx1ZTImIHZh
bHVlMikKK3sKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5h
cHBlbmQodG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUxKSk7CisgICAgYXJncy5hcHBl
bmQodG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUyKSk7CisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KCZzdGF0ZSwgMCwgZ2xvYmFsT2JqZWN0LCBhcmdzKTsKK30KKwogV0VCQ09SRV9F
WFBPUlQgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogCiBpbmxpbmUgUGFzc1JlZlB0cjxK
U0M6OkFycmF5QnVmZmVyVmlldz4gdG9BcnJheUJ1ZmZlclZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEhlYWRlcnND
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGZXRjaEhlYWRlcnNDdXN0
b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNjNjQxNzhiZjAzZTEzZjUwZmI5M2VkZWUzNDA2OTE2ZWI5MjZk
MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZldGNo
SGVhZGVyc0N1c3RvbS5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBDYW5vbiBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
cmVxdWlyZWQgdG8gYmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Zl
dGNoSGVhZGVycy5oIgorCisjaWYgRU5BQkxFKEZFVENIX0FQSSkKKworI2luY2x1ZGUgIkpTS2V5
VmFsdWVJdGVyYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBNb3Zl
IHRoaXMgY29kZSB0byBKU0ZldGNoSGVhZGVycy4KK3VzaW5nIEZldGNoSGVhZGVyc0l0ZXJhdG9y
ID0gSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTRmV0Y2hIZWFkZXJzLCBGZXRjaEhlYWRlcnM+OwordXNp
bmcgRmV0Y2hIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGUgPSBKU0tleVZhbHVlSXRlcmF0b3JQcm90
b3R5cGU8SlNGZXRjaEhlYWRlcnMsIEZldGNoSGVhZGVycz47CisKK3RlbXBsYXRlPD4KK2NvbnN0
IEpTQzo6Q2xhc3NJbmZvIEZldGNoSGVhZGVyc0l0ZXJhdG9yOjpzX2luZm8gPSB7ICJIZWFkZXJz
IEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGZXRjaEhl
YWRlcnNJdGVyYXRvcikgfTsKKwordGVtcGxhdGU8PgorY29uc3QgSlNDOjpDbGFzc0luZm8gRmV0
Y2hIZWFkZXJzSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkhlYWRlcnMgSXRlcmF0b3Ii
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZldGNoSGVhZGVyc0l0ZXJh
dG9yUHJvdG90eXBlKSB9OworCitKU0M6OkpTVmFsdWUgSlNGZXRjaEhlYWRlcnM6OmVudHJpZXMo
SlNDOjpFeGVjU3RhdGUmKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvcjxKU0ZldGNoSGVh
ZGVycywgRmV0Y2hIZWFkZXJzPigqZ2xvYmFsT2JqZWN0KCksICp0aGlzLCBJdGVyYXRpb25LaW5k
OjpLZXlWYWx1ZSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU0ZldGNoSGVhZGVyczo6a2V5cyhKU0M6
OkV4ZWNTdGF0ZSYpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yPEpTRmV0Y2hIZWFkZXJz
LCBGZXRjaEhlYWRlcnM+KCpnbG9iYWxPYmplY3QoKSwgKnRoaXMsIEl0ZXJhdGlvbktpbmQ6Oktl
eSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU0ZldGNoSGVhZGVyczo6dmFsdWVzKEpTQzo6RXhlY1N0
YXRlJikKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3I8SlNGZXRjaEhlYWRlcnMsIEZldGNo
SGVhZGVycz4oKmdsb2JhbE9iamVjdCgpLCAqdGhpcywgSXRlcmF0aW9uS2luZDo6VmFsdWUpOwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNLZXlWYWx1ZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0tleVZh
bHVlSXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGU4MWUwYTE0NmY4ZWM4ZmQwMjkzMGQ5Y2VmNTVl
YjM3MmY2NmM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQ2Fub24sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0tleVZhbHVlSXRlcmF0b3Jf
aAorI2RlZmluZSBKU0tleVZhbHVlSXRlcmF0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBVcGRhdGUgYmluZGluZyBnZW5lcmF0b3IgdG8gYWxs
b3cgZ2V0dGluZyBET01XcmFwcGVkIGZyb20gSlNXcmFwcGVyLgordGVtcGxhdGU8dHlwZW5hbWUg
SlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorY2xhc3MgSlNLZXlWYWx1ZUl0ZXJhdG9y
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRpYyBKU0tleVZh
bHVlSXRlcmF0b3JQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZT4odm0uaGVh
cCkpIEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIHByb3RvdHlwZTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbmV4dChKU0M6OkV4ZWNTdGF0ZSopOworCitwcml2YXRlOgorICAgIEpTS2V5VmFsdWVJ
dGVyYXRvclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpIHsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworfTsKKworZW51bSBjbGFzcyBJdGVyYXRpb25L
aW5kIHsgS2V5LCBWYWx1ZSwgS2V5VmFsdWUgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFw
cGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorY2xhc3MgSlNLZXlWYWx1ZUl0ZXJhdG9yOiBwdWJs
aWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmplY3QgQmFzZTsK
KworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAg
c3RhdGljIEpTS2V5VmFsdWVJdGVyYXRvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1dyYXBwZXImIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5k
IGtpbmQpCisgICAgeworICAgICAgICBKU0tleVZhbHVlSXRlcmF0b3IqIGluc3RhbmNlID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0tleVZhbHVlSXRlcmF0b3I+KHZtLmhlYXAp
KSBKU0tleVZhbHVlSXRlcmF0b3Ioc3RydWN0dXJlLCBpdGVyYXRlZE9iamVjdCwga2luZCk7Cisg
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNLZXlWYWx1ZUl0ZXJhdG9yUHJvdG90eXBlPEpT
V3JhcHBlciwgRE9NV3JhcHBlZD4qIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTS2V5
VmFsdWVJdGVyYXRvclByb3RvdHlwZTxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIEpTS2V5VmFsdWVJdGVyYXRvclByb3RvdHlwZTxK
U1dyYXBwZXIsIERPTVdyYXBwZWQ+OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIH0KKworICAgIGJvb2wgbmV4
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSYpOworCitwcml2YXRlOgorICAgIEpTS2V5
VmFsdWVJdGVyYXRvcihKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dyYXBwZXImIGl0ZXJh
dGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgICAgIDogQmFzZShzdHJ1Y3R1cmUs
ICppdGVyYXRlZE9iamVjdC5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgLCBtX2l0ZXJhdG9yKGl0
ZXJhdGVkT2JqZWN0LndyYXBwZWQoKS5jcmVhdGVJdGVyYXRvcigpKQorICAgICAgICAsIG1fa2lu
ZChraW5kKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CisKKyAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJdGVyYXRvciBtX2l0ZXJhdG9yOwor
ICAgIEl0ZXJhdGlvbktpbmQgbV9raW5kOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFw
cGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgorSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBlciwg
RE9NV3JhcHBlZD4qIGNyZWF0ZUl0ZXJhdG9yKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTV3JhcHBlciYgd3JhcHBlciwgSXRlcmF0aW9uS2luZCBraW5kKQoreworICAgIHJldHVy
biBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6Y3JlYXRlKGdsb2Jh
bE9iamVjdC52bSgpLCBnZXRET01TdHJ1Y3R1cmU8SlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBl
ciwgRE9NV3JhcHBlZD4+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCB3cmFwcGVy
LCBraW5kKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01X
cmFwcGVkPgordm9pZCBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBl
ciwgRE9NV3JhcHBlZD4qIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0tleVZhbHVlSXRlcmF0
b3I8SlNXcmFwcGVyLCBET01XcmFwcGVkPio+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTS2V5
VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+Ojp+SlNLZXlWYWx1ZUl0ZXJhdG9y
KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgRE9NV3JhcHBl
ZD4KK2Jvb2wgSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD46Om5leHQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUmIHZhbHVlKQoreworICAgIHR5cGVu
YW1lIERPTVdyYXBwZWQ6Okl0ZXJhdG9yOjpLZXkgbmV4dEtleTsKKyAgICB0eXBlbmFtZSBET01X
cmFwcGVkOjpJdGVyYXRvcjo6VmFsdWUgbmV4dFZhbHVlOworICAgIGlmIChtX2l0ZXJhdG9yLm5l
eHQobmV4dEtleSwgbmV4dFZhbHVlKSkgeworICAgICAgICB2YWx1ZSA9IEpTQzo6anNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChtX2tpbmQgPT0gSXRl
cmF0aW9uS2luZDo6VmFsdWUpCisgICAgICAgIHZhbHVlID0gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBuZXh0VmFsdWUpOworICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJdGVyYXRpb25LaW5k
OjpLZXkpCisgICAgICAgIHZhbHVlID0gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBuZXh0
S2V5KTsKKyAgICBlbHNlCisgICAgICAgIHZhbHVlID0ganNQYWlyKHN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgbmV4dEtleSwgbmV4dFZhbHVlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgRE9NV3JhcHBlZD4KK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU8SlNXcmFw
cGVyLCBET01XcmFwcGVkPjo6bmV4dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNL
ZXlWYWx1ZUl0ZXJhdG9yPEpTV3JhcHBlciwgRE9NV3JhcHBlZD4qIGl0ZXJhdG9yID0gSlNDOjpq
c0R5bmFtaWNDYXN0PEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXIsIERPTVdyYXBwZWQ+Kj4o
c3RhdGUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgi
Q2Fubm90IGNhbGwgbmV4dCgpIG9uIGEgbm9uLUl0ZXJhdG9yIG9iamVjdCIpKSk7CisKKyAgICBK
U0M6OkpTVmFsdWUgcmVzdWx0OworICAgIGJvb2wgaXNEb25lID0gaXRlcmF0b3ItPm5leHQoKnN0
YXRlLCByZXN1bHQpOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdChzdGF0ZSwgcmVzdWx0LCBpc0RvbmUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBET01XcmFwcGVkPgordm9pZCBKU0tleVZhbHVl
SXRlcmF0b3JQcm90b3R5cGU8SlNXcmFwcGVyLCBET01XcmFwcGVkPjo6ZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwor
CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPm5leHQsIG5leHQsIEpTQzo6RG9udEVudW0sIDAsIEpTQzo6Tm9JbnRy
aW5zaWMpOworfQorCit9CisKKyNlbmRpZiAvLyAhZGVmaW5lZChKU0tleVZhbHVlSXRlcmF0b3Jf
aCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDdkY2MzYWIwYzE3MDhkMDY5OGJj
YTBiMzNjMmUyZDk5OGNhZThjMjcuLjhlMDQyNjEyNmNhZTE0MzI1NGM2MWJhNWQ3NDEyMzMyNThh
NzA2MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDI0IEBACiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCiAKKyAgICAgICAgUmVsYW5kaW5nLgor
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMt
YmFzaWMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9h
cGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRl
c3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtc3RydWN0dXJlLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9u
ZS5zdWItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9h
cGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1Yi1leHBlY3RlZC50eHQ6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvdXRpbHMuanM6CisgICAgICAg
IChjaGVja1JlcXVlc3QpOgorICAgICAgICAocmVhZFRleHRTdHJlYW0pOgorCisyMDE2LTAyLTA0
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAg
W0ZldGNoIEFQSV0gQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIEhlYWRlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mzc4NworCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCiAgICAgICAgICogd2ViLXBsYXRmb3JtLXRl
c3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQudHh0OgogICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLmh0
bWw6CiAgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRl
cnMtc3RydWN0dXJlLWV4cGVjdGVkLnR4dDoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNp
Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMtZXhwZWN0ZWQudHh0CmluZGV4IGJl
MmJjNzRiOTc3M2JkNmE3ZGI3MDEzMDE0MDQzZjMzNjhkMjhlY2MuLjZkYjY5Y2U4NjA1NWI1MDQ4
OWZlNDcyMDBmNTQxMGM2YWEyYjE4MzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLWJhc2ljLWV4cGVjdGVkLnR4dApAQCAtMTIs
NCArMTIsNyBAQCBQQVNTIENoZWNrIHNldCBtZXRob2QKIFBBU1MgQ2hlY2sgaGFzIG1ldGhvZCAK
IFBBU1MgQ2hlY2sgZGVsZXRlIG1ldGhvZCAKIFBBU1MgQ2hlY2sgZ2V0IG1ldGhvZCAKK1BBU1Mg
Q2hlY2sga2V5cyBtZXRob2QgCitQQVNTIENoZWNrIHZhbHVlcyBtZXRob2QgCitQQVNTIENoZWNr
IGVudHJpZXMgbWV0aG9kIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9oZWFkZXJzL2hlYWRlcnMtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hl
YWRlcnMvaGVhZGVycy1iYXNpYy5odG1sCmluZGV4IGMzOTU0NWQ1NDMxNDYxYWRhNDY5MmNlZGM4
OWQ3ZDI4NmQ0NjVmZGYuLjUxYWM4OWM3YjNjYjAyZmYwMzBiM2EyMTAzMTUwNzIxODhlZGZkZTcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
ZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1iYXNpYy5odG1sCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1i
YXNpYy5odG1sCkBAIC0xMTEsNiArMTExLDU4IEBACiAKICAgICAgICAgYXNzZXJ0X2VxdWFscyho
ZWFkZXJzLmdldCgibmFtZU5vdEluSGVhZGVycyIpLCBudWxsLCAiaGVhZGVyOiBuYW1lTm90SW5I
ZWFkZXJzIGhhcyBubyB2YWx1ZSIpOwogICAgICAgfSwgIkNoZWNrIGdldCBtZXRob2QiKTsKLSAg
ICA8L3NjcmlwdD4KKworICAgICAgdmFyIGhlYWRlckVudHJpZXNEaWN0ID0geyJuYW1lMSI6ICJ2
YWx1ZTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lMiI6ICJ2YWx1ZTIi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogInZhbHVlMyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQtVHlwZSI6ICJ2YWx1ZTQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cCI6ICJ2YWx1ZTUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGVzIjogInZhbHVlNiIKKyAg
ICAgIH07CisgICAgICB2YXIgc29ydGVkSGVhZGVyRGljdCA9IHt9OworICAgICAgdmFyIHNvcnRl
ZEhlYWRlcktleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJFbnRyaWVzRGljdCkubWFwKGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgICAgIHNvcnRlZEhlYWRlckRpY3RbdmFsdWUudG9Mb3dlckNhc2UoKV0g
PSBoZWFkZXJFbnRyaWVzRGljdFt2YWx1ZV07CisgICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2Vy
Q2FzZSgpOworICAgICAgfSkuc29ydCgpOworCisgICAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlckVudHJpZXNEaWN0KTsKKyAgICAg
ICAgdmFyIGFjdHVhbCA9IGhlYWRlcnMua2V5cygpOworICAgICAgICBzb3J0ZWRIZWFkZXJLZXlz
LmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICBlbnRyeSA9IGFjdHVhbC5uZXh0
KCk7CisgICAgICAgICAgICBhc3NlcnRfZmFsc2UoZW50cnkuZG9uZSk7CisgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKGVudHJ5LnZhbHVlLCBrZXkpOworICAgICAgICB9KTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUoYWN0dWFsLm5leHQoKS5kb25lKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoYWN0dWFs
Lm5leHQoKS5kb25lKTsKKyAgICAgIH0sICJDaGVjayBrZXlzIG1ldGhvZCIpOworCisgICAgICB0
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRl
ckVudHJpZXNEaWN0KTsKKyAgICAgICAgdmFyIGFjdHVhbCA9IGhlYWRlcnMudmFsdWVzKCk7CisK
KyAgICAgICAgc29ydGVkSGVhZGVyS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAg
ICAgICAgZW50cnkgPSBhY3R1YWwubmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0X2ZhbHNlKGVu
dHJ5LmRvbmUpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhlbnRyeS52YWx1ZSwgc29ydGVk
SGVhZGVyRGljdFtrZXldKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF90cnVlKGFjdHVh
bC5uZXh0KCkuZG9uZSk7CisgICAgICAgIGFzc2VydF90cnVlKGFjdHVhbC5uZXh0KCkuZG9uZSk7
CisgICAgICB9LCAiQ2hlY2sgdmFsdWVzIG1ldGhvZCIpOworCisgICAgICB0ZXN0KGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlckVudHJpZXNEaWN0
KTsKKyAgICAgICAgdmFyIGFjdHVhbCA9IGhlYWRlcnMuZW50cmllcygpOworCisgICAgICAgIHNv
cnRlZEhlYWRlcktleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAgIGVudHJ5
ID0gYWN0dWFsLm5leHQoKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZShlbnRyeS5kb25lKTsK
KyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoZW50cnkudmFsdWVbMF0sIGtleSk7CisgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKGVudHJ5LnZhbHVlWzFdLCBzb3J0ZWRIZWFkZXJEaWN0W2tleV0p
OworICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoYWN0dWFsLm5leHQoKS5kb25lKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUoYWN0dWFsLm5leHQoKS5kb25lKTsKKyAgICAgIH0sICJDaGVj
ayBlbnRyaWVzIG1ldGhvZCIpOworICAgPC9zY3JpcHQ+CiAgIDwvYm9keT4KIDwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0
Y2gvYXBpL2hlYWRlcnMvaGVhZGVycy1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFk
ZXJzLXN0cnVjdHVyZS1leHBlY3RlZC50eHQKaW5kZXggODU2NzMyZjM4NGY3OWY1ODBiZjAwOGYx
NzlhMWJjYThlZjliMDBkNi4uMGVmNmQxYmNjNmEwYTJhMWFmNTBjZTE1NDFjNmRkYWE1MjkzZmE5
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9mZXRjaC9hcGkvaGVhZGVycy9oZWFkZXJzLXN0cnVjdHVyZS1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvaGVh
ZGVycy9oZWFkZXJzLXN0cnVjdHVyZS1leHBlY3RlZC50eHQKQEAgLTQsNyArNCw3IEBAIFBBU1Mg
SGVhZGVycyBoYXMgZGVsZXRlIG1ldGhvZAogUEFTUyBIZWFkZXJzIGhhcyBnZXQgbWV0aG9kIAog
UEFTUyBIZWFkZXJzIGhhcyBoYXMgbWV0aG9kIAogUEFTUyBIZWFkZXJzIGhhcyBzZXQgbWV0aG9k
IAotRkFJTCBIZWFkZXJzIGhhcyBlbnRyaWVzIG1ldGhvZCBhc3NlcnRfdHJ1ZTogaGVhZGVycyBo
YXMgZW50cmllcyBtZXRob2QgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLUZBSUwgSGVhZGVycyBo
YXMga2V5cyBtZXRob2QgYXNzZXJ0X3RydWU6IGhlYWRlcnMgaGFzIGtleXMgbWV0aG9kIGV4cGVj
dGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIEhlYWRlcnMgaGFzIHZhbHVlcyBtZXRob2QgYXNzZXJ0
X3RydWU6IGhlYWRlcnMgaGFzIHZhbHVlcyBtZXRob2QgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UK
K1BBU1MgSGVhZGVycyBoYXMgZW50cmllcyBtZXRob2QgCitQQVNTIEhlYWRlcnMgaGFzIGtleXMg
bWV0aG9kIAorUEFTUyBIZWFkZXJzIGhhcyB2YWx1ZXMgbWV0aG9kIAogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1
ZXN0L3JlcXVlc3QtY2xvbmUuc3ViLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5z
dWItZXhwZWN0ZWQudHh0CmluZGV4IDZjYmQwNzc0Nzk4NDRjZWE1Yzc5NjE5YWExNzcwYTU0ZGYy
ZWYzMDMuLmVlYWNmOGE2M2NmMWNhYTdjMmEyM2Y3MTA1NzgxMjMyMTlhYmRiMjAgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBp
L3JlcXVlc3QvcmVxdWVzdC1jbG9uZS5zdWItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVz
dC1jbG9uZS5zdWItZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogCi1GQUlMIENoZWNrIGNs
b25pbmcgYSByZXF1ZXN0IEV4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMgaXMgbm90
IGEgZnVuY3Rpb24uIChJbiAnRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cygpJywg
J0V4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJdLmtleXMnIGlzIHVuZGVmaW5lZCkKK1BBU1Mg
Q2hlY2sgY2xvbmluZyBhIHJlcXVlc3QgCiBQQVNTIENoZWNrIGNsb25pbmcgYSByZXF1ZXN0IGNv
cGllcyB0aGUgaGVhZGVycyAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVxdWVzdC9yZXF1ZXN0LWluaXQtMDAzLnN1
Yi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtaW5pdC0wMDMuc3ViLWV4cGVjdGVkLnR4dApp
bmRleCAyYWJlNzU2MGUyOGU5ODhlNDc2YzI4Y2NkMmYyZTI5ZjAyYjg1YjdjLi5mY2NlMjljMDY0
MzMyOTM4NGFlNDE1NmIwZmZhY2M0YWY5ZDZhNDJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3Qt
aW5pdC0wMDMuc3ViLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtaW5pdC0wMDMuc3Vi
LWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIAotRkFJTCBDaGVjayByZXF1ZXN0IHZhbHVl
cyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVxdWVzdCBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRl
cnMiXS5rZXlzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ0V4cGVjdGVkVmFsdWVzRGljdFsiaGVh
ZGVycyJdLmtleXMoKScsICdFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzJyBpcyB1
bmRlZmluZWQpCi1GQUlMIENoZWNrIHJlcXVlc3QgdmFsdWVzIHdoZW4gaW5pdGlhbGl6ZWQgZnJv
bSBSZXF1ZXN0IGFuZCBpbml0IHZhbHVlcyBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5r
ZXlzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ0V4cGVjdGVkVmFsdWVzRGljdFsiaGVhZGVycyJd
LmtleXMoKScsICdFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlzJyBpcyB1bmRlZmlu
ZWQpCitQQVNTIENoZWNrIHJlcXVlc3QgdmFsdWVzIHdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBSZXF1
ZXN0IAorUEFTUyBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZyb20gUmVx
dWVzdCBhbmQgaW5pdCB2YWx1ZXMgCiBGQUlMIENoZWNrIHJlcXVlc3QgdmFsdWVzIHdoZW4gaW5p
dGlhbGl6ZWQgZnJvbSB1cmwgc3RyaW5nIGFzc2VydF9lcXVhbHM6IENoZWNrIHVybCBhdHRyaWJ1
dGUgZXhwZWN0ZWQgImh0dHA6Ly91cmwudGVzdDoxMjM0L3BhdGgvc3VicGF0aD9xdWVyeT10cnVl
IiBidXQgZ290ICJodHRwOi8vdXJsLnRlc3Q6MTIzNC9wYXRoL3N1YnBhdGg/cXVlcnk9dHJ1ZSNm
cmFnbWVudCIKLUZBSUwgQ2hlY2sgcmVxdWVzdCB2YWx1ZXMgd2hlbiBpbml0aWFsaXplZCBmcm9t
IHVybCBhbmQgaW5pdCB2YWx1ZXMgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cyBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICdFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5rZXlz
KCknLCAnRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0ua2V5cycgaXMgdW5kZWZpbmVkKQor
RkFJTCBDaGVjayByZXF1ZXN0IHZhbHVlcyB3aGVuIGluaXRpYWxpemVkIGZyb20gdXJsIGFuZCBp
bml0IHZhbHVlcyBhc3NlcnRfZXF1YWxzOiBDaGVjayB1cmwgYXR0cmlidXRlIGV4cGVjdGVkICJo
dHRwOi8vdXJsLnRlc3Q6MTIzNC9wYXRoL3N1YnBhdGg/cXVlcnk9dHJ1ZSIgYnV0IGdvdCAiaHR0
cDovL3VybC50ZXN0OjEyMzQvcGF0aC9zdWJwYXRoP3F1ZXJ5PXRydWUjZnJhZ21lbnQiCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0
Y2gvYXBpL3Jlc291cmNlcy91dGlscy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy91dGlscy5qcwppbmRleCA0NDkyOTM1
NjI0ZDkyMjg2YjRhZTc5MTk3ZThkNjBiNGM2NDk1ZDA4Li42ZjhjZGZhYmI2NmZkZTc4YWNjZGNm
ZGM2NjBjMDAwNTE4MWFjZWQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvdXRpbHMuanMKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9hcGkvcmVzb3Vy
Y2VzL3V0aWxzLmpzCkBAIC0xNSw3ICsxNSw3IEBAIGZ1bmN0aW9uIGNoZWNrUmVxdWVzdChyZXF1
ZXN0LCBFeHBlY3RlZFZhbHVlc0RpY3QpIHsKICAgZm9yICh2YXIgYXR0cmlidXRlIGluIEV4cGVj
dGVkVmFsdWVzRGljdCkgewogICAgIHN3aXRjaChhdHRyaWJ1dGUpIHsKICAgICAgIGNhc2UgImhl
YWRlcnMiOgotICAgICAgICAgIGZvciAodmFyIGtleSBvZiBFeHBlY3RlZFZhbHVlc0RpY3RbImhl
YWRlcnMiXS5rZXlzKCkpCisgICAgICAgICAgZm9yICh2YXIga2V5IGluIEV4cGVjdGVkVmFsdWVz
RGljdFsiaGVhZGVycyJdLmtleXMoKSkKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocmVxdWVz
dFsiaGVhZGVycyJdLmdldChrZXkpLCBFeHBlY3RlZFZhbHVlc0RpY3RbImhlYWRlcnMiXS5nZXQo
a2V5KSwKICAgICAgICAgICAgICAgIkNoZWNrIGhlYWRlcnMgYXR0cmlidXRlIGhhcyAiICsga2V5
ICsgIjoiICsgRXhwZWN0ZWRWYWx1ZXNEaWN0WyJoZWFkZXJzIl0uZ2V0KGtleSkpOwogICAgICAg
ICBicmVhazsKQEAgLTYzLDQgKzYzLDQgQEAgZnVuY3Rpb24gcmVhZFRleHRTdHJlYW0ocmVhZGVy
LCBhc3luY1Rlc3QsIGV4cGVjdGVkVmFsdWUsIHJldHJpZXZlZFRleHQpIHsKICAgICAgIGFzeW5j
VGVzdC5kb25lKCk7CiAgICAgfSk7CiAgIH0pOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>