<?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>156367</bug_id>
          
          <creation_ts>2016-04-07 14:33:37 -0700</creation_ts>
          <short_desc>Modern IDB (Blob support): Support retrieving Blobs from IDB</short_desc>
          <delta_ts>2016-04-13 17:54:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Safari 9</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>149117</blocked>
    
    <blocked>143193</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181888</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 14:33:37 -0700</bug_when>
    <thetext>Modern IDB (Blob support): Support retrieving Blobs from IDB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183534</commentid>
    <comment_count>1</comment_count>
      <attachid>276353</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-13 14:16:30 -0700</bug_when>
    <thetext>Created attachment 276353
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183579</commentid>
    <comment_count>2</comment_count>
      <attachid>276353</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-13 16:25:14 -0700</bug_when>
    <thetext>Comment on attachment 276353
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/server/MemoryIndexCursor.cpp:78
&gt; +        Vector&lt;String&gt; dummyBlobURLs, dummyBlobFiles;

Can&apos;t you just use { } instead of these?

&gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:192
&gt; +    Vector&lt;String&gt; dummyBlobURLs, dummyBlobFiles;

Ditto

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1053
&gt; +        ThreadSafeDataBuffer valueBuffer = value ? value-&gt;data() : ThreadSafeDataBuffer();

More { }

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1810
&gt; +            getResult = { cursor-&gt;currentValue() ? *cursor-&gt;currentValue() : IDBValue(), cursor-&gt;currentPrimaryKey() };

{}

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:106
&gt; +    result = { m_currentKey, m_currentPrimaryKey, m_currentValue ? *m_currentValue : IDBValue() };

{}

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:457
&gt; +        return Deprecated::ScriptValue();

{}

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1788
&gt;              return 0;

These should be false

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2433
&gt; +        for (; i &lt; m_blobURLs.size(); ++i) {

Could this be a map, so we don&apos;t need to iterate?

&gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:108
&gt; +        queue = new MessageQueue&lt;CrossThreadTask&gt;;

Would NeverDestroyed work here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183583</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-13 16:47:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 276353 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276353&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryIndexCursor.cpp:78
&gt; &gt; +        Vector&lt;String&gt; dummyBlobURLs, dummyBlobFiles;
&gt; 
&gt; Can&apos;t you just use { } instead of these?
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:192
&gt; &gt; +    Vector&lt;String&gt; dummyBlobURLs, dummyBlobFiles;
&gt; 
&gt; Ditto

Yup.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1053
&gt; &gt; +        ThreadSafeDataBuffer valueBuffer = value ? value-&gt;data() : ThreadSafeDataBuffer();
&gt; 
&gt; More { }
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1810
&gt; &gt; +            getResult = { cursor-&gt;currentValue() ? *cursor-&gt;currentValue() : IDBValue(), cursor-&gt;currentPrimaryKey() };
&gt; 
&gt; {}
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBCursor.cpp:106
&gt; &gt; +    result = { m_currentKey, m_currentPrimaryKey, m_currentValue ? *m_currentValue : IDBValue() };
&gt; 
&gt; {}

Nope. Can&apos;t use initializer lists in the ternary operator.

&quot;Initializer list cannot be used on the right hand side of operator &apos;?&apos;&quot;

&gt; &gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:457
&gt; &gt; +        return Deprecated::ScriptValue();
&gt; 
&gt; {}

Yup.

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1788
&gt; &gt;              return 0;
&gt; 
&gt; These should be false

There&apos;s lots of &quot;integer-as-bool&quot; in this file. Should probably be cleaned up at once.

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2433
&gt; &gt; +        for (; i &lt; m_blobURLs.size(); ++i) {
&gt; 
&gt; Could this be a map, so we don&apos;t need to iterate?
&gt; 
&gt; &gt; Source/WebCore/fileapi/ThreadableBlobRegistry.cpp:108
&gt; &gt; +        queue = new MessageQueue&lt;CrossThreadTask&gt;;
&gt; 
&gt; Would NeverDestroyed work here?

A cursory glance at all of our call_once initializers suggests we do &quot;new&quot;, &quot;malloc&quot;, &quot;CFCreate...&quot;, &quot;...alloc] init...&quot; inside without bothering with neverdestroyed.

There&apos;s definitely no static initializer problem here, so I&apos;m not sure what the point is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183584</commentid>
    <comment_count>4</comment_count>
      <attachid>276365</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-13 16:48:08 -0700</bug_when>
    <thetext>Created attachment 276365
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183599</commentid>
    <comment_count>5</comment_count>
      <attachid>276365</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-13 17:54:03 -0700</bug_when>
    <thetext>Comment on attachment 276365
Patch v2

Clearing flags on attachment: 276365

Committed r199524: &lt;http://trac.webkit.org/changeset/199524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183600</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-13 17:54:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276353</attachid>
            <date>2016-04-13 14:16:30 -0700</date>
            <delta_ts>2016-04-13 16:48:08 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>58140</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYmE1ZDk2Li5lYTY0MzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTAy
IEBACiAyMDE2LTA0LTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAg
ICAgICBNb2Rlcm4gSURCIChCbG9iIHN1cHBvcnQpOiBTdXBwb3J0IHJldHJpZXZpbmcgQmxvYnMg
ZnJvbSBJREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTYzNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQsIGN1cnJl
bnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dpbmc6
CisgICAgICAgIC0gUHVsbHMgQmxvYlVSTHMgYW5kIHN0b3JlZCBmaWxlbmFtZXMgb3V0IG9mIElE
QiB3aGVuZXZlciBhbiBJREIgcmVjb3JkIGlzIGZldGNoZWQuCisgICAgICAgIC0gQWRkcyB0aG9z
ZSBVUkxzIGFuZCBmaWxlbmFtZXMgdG8gSURCVmFsdWUuCisgICAgICAgIC0gVXNlcyBJREJWYWx1
ZSBpbiBtb3JlIHBsYWNlcyBpbnN0ZWFkIG9mIFNoYXJlZEJ1ZmZlci9UaHJlYWRTYWZlQnVmZmVy
LgorICAgICAgICAtIFRlYWNoZXMgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBCbG9iLCBhbmQgRmls
ZSBob3cgdG8gcmVhZCB0aGUgVVJMcyBhbmQgZmlsZW5hbWVzIHdoZW4gdGhleSBleGlzdC4KKyAg
ICAgICAgLSBUZWFjaGVzIHRoZSBCbG9iIHJlZ2lzdHJ5IHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUg
b2YgQmxvYiB0aGF0IGlzIG5vdCBhICJGaWxlIiBidXQgaXMgYmFja2VkIGJ5IG9uZS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0UmVzdWx0
OjpJREJHZXRSZXN1bHQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRv
U3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
Lmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNl
cnZlcik6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZhbHVlOjpJREJWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCVmFsdWUuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SW5kZXhDdXJzb3I6OmN1cnJlbnREYXRhKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlQ3Vyc29y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmVDdXJz
b3I6OmN1cnJlbnREYXRhKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9y
T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3VycmVudERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmludGVybmFs
QWR2YW5jZU9uY2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpjdXJyZW50VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJD
dXJzb3I6OmN1cnJlbnRWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6YmFja2luZ1N0b3Jl
KToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQpOgorICAgICAgICAKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFs
dWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKyAgICAg
ICAgCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OmJsb2JGaWxlUGF0aEZvckJsb2JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisKKyAgICAgICAgKiBmaWxlYXBpL0Js
b2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogZmlsZWFw
aS9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpkZXNlcmlhbGl6ZSk6CisKKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisK
KyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dGhyZWFkYWJsZVF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKToKKyAgICAg
ICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKworICAgICAgICAqIHBsYXRm
b3JtL0Nyb3NzVGhyZWFkVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKToKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5Lmg6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxl
QmFja2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaDoK
KworMjAxNi0wNC0xMyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKICAgICAg
ICAgTW9kZXJuIElEQiAoQmxvYiBzdXBwb3J0KTogU3VwcG9ydCBkZWxldGluZyBzdG9yZWQgYmxv
YiBmaWxlcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjUyMwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcAppbmRleCA5OTgwODI4Li41YWIwZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIElEQkN1
cnNvcjo6c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQkdldFJlc3Vs
dCYgZ2V0UmVzdWx0KQogICAgIGlmIChpc0tleUN1cnNvcigpKQogICAgICAgICBtX2RlcHJlY2F0
ZWRDdXJyZW50VmFsdWUgPSB7IH07CiAgICAgZWxzZQotICAgICAgICBtX2RlcHJlY2F0ZWRDdXJy
ZW50VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29udGV4dCwgZ2V0UmVzdWx0LnZh
bHVlKCkuZGF0YSgpKTsKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJp
YWxpemVJREJWYWx1ZSgqY29udGV4dCwgZ2V0UmVzdWx0LnZhbHVlKCkpOwogCiAgICAgbV9nb3RW
YWx1ZSA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJHZXRSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkdldFJlc3VsdC5oCmluZGV4IGQ1Yjg2ODAuLjY1ZjU0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oCkBAIC00MywxMCArNDMsMTAgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBJREJHZXRSZXN1bHQoUmVmPFNoYXJlZEJ1ZmZl
cj4mJiBidWZmZXIsIGNvbnN0IElEQktleURhdGEmIGN1cnJlbnRQcmltYXJ5S2V5KQotICAgICAg
ICA6IG1fcHJpbWFyeUtleURhdGEoY3VycmVudFByaW1hcnlLZXkpCisgICAgSURCR2V0UmVzdWx0
KGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5RGF0YSYgY3VycmVudFByaW1hcnlL
ZXkpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3ByaW1hcnlLZXlEYXRh
KGN1cnJlbnRQcmltYXJ5S2V5KQogICAgIHsKLSAgICAgICAgZGF0YUZyb21CdWZmZXIoYnVmZmVy
LmdldCgpKTsKICAgICB9CiAKICAgICBJREJHZXRSZXN1bHQoY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIGJ1ZmZlcikKQEAgLTU0LDYgKzU0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
CisgICAgSURCR2V0UmVzdWx0KElEQlZhbHVlJiYgYnVmZmVyKQorICAgICAgICA6IG1fdmFsdWUo
V1RGTW92ZShidWZmZXIpKQorICAgIHsKKyAgICB9CisKICAgICBJREJHZXRSZXN1bHQoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSkKICAgICAgICAgOiBtX2tleURhdGEoa2V5LmdldCgpKQogICAgIHsK
QEAgLTc4LDggKzgzLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgSURCR2V0UmVz
dWx0KGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQktleURhdGEmIHByaW1hcnlL
ZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVCdWZmZXIpCi0gICAgICAg
IDogbV92YWx1ZSh2YWx1ZUJ1ZmZlcikKKyAgICBJREJHZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleURhdGEsIElEQlZhbHVlJiYg
dmFsdWUpCisgICAgICAgIDogbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICAgICAgLCBtX2tl
eURhdGEoa2V5RGF0YSkKKyAgICAgICAgLCBtX3ByaW1hcnlLZXlEYXRhKHByaW1hcnlLZXlEYXRh
KQorICAgIHsKKyAgICB9CisKKyAgICBJREJHZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2
YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fa2V5RGF0YShrZXlE
YXRhKQogICAgICAgICAsIG1fcHJpbWFyeUtleURhdGEocHJpbWFyeUtleURhdGEpCiAgICAgewpA
QCAtOTcsNyArMTA5LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgSURCR2V0UmVzdWx0Jik7CiAKIHByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkYXRhRnJvbUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKKyAg
ICB2b2lkIGRhdGFGcm9tQnVmZmVyKFNoYXJlZEJ1ZmZlciYpOwogCiAgICAgSURCVmFsdWUgbV92
YWx1ZTsKICAgICBJREJLZXlEYXRhIG1fa2V5RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggZmU2OTUwYi4uYzRkZjkwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAg
LTM0MSw3ICszNDEsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1i
ZXIpCiAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1ZShudW1iZXIpKSk7
CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3Qg
VGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVz
dWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSIpOwogCkBA
IC0zNDksOCArMzQ5LDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXQKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVl
ID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7Ci0gICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlKCpjb250ZXh0LCB2
YWx1ZSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHNjcmlwdFZhbHVl
KSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGUxOTAyM2Iu
LmQwYzA1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgSURCSW5kZXg7CiBjbGFzcyBJREJLZXlEYXRh
OwogY2xhc3MgSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBJREJSZXN1bHREYXRhOworY2xhc3MgSURC
VmFsdWU7CiBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAogbmFtZXNwYWNlIElEQkNsaWVu
dCB7CkBAIC05OCw3ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVzdWx0KGNvbnN0
IElEQktleURhdGEqKTsKICAgICB2b2lkIHNldFJlc3VsdCh1aW50NjRfdCk7Ci0gICAgdm9pZCBz
ZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwor
ICAgIHZvaWQgc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmKTsKICAg
ICB2b2lkIHNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CiAKICAgICBJREJBbnkqIG1vZGVyblJlc3Vs
dCgpIHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNTYxNTYzYjIuLjQ5Yjg1
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRH
ZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYQog
ICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLnZhbHVlKCkuZGF0YSgpLmRhdGEo
KSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0
RGF0YS5nZXRSZXN1bHQoKS52YWx1ZSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXF1ZXN0LnNl
dFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkudmFsdWUoKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQo
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5j
cHAKaW5kZXggNTFjYThlYTkuLjlmYTYyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAKQEAgLTU0LDYgKzU0LDEzIEBAIElEQlZhbHVlOjpJREJW
YWx1ZShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBWZWN0
b3I8U3RyaW5nCiB7CiB9CiAKK0lEQlZhbHVlOjpJREJWYWx1ZShjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWUsIFZlY3RvcjxTdHJpbmc+JiYgYmxvYlVSTHMsIFZlY3RvcjxTdHJpbmc+
JiYgYmxvYkZpbGVQYXRocykKKyAgICA6IG1fZGF0YSh2YWx1ZSkKKyAgICAsIG1fYmxvYlVSTHMo
V1RGTW92ZShibG9iVVJMcykpCisgICAgLCBtX2Jsb2JGaWxlUGF0aHMoV1RGTW92ZShibG9iRmls
ZVBhdGhzKSkKK3sKK30KKwogSURCVmFsdWU6OklEQlZhbHVlKGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKICAgICA6IG1fZGF0YSh2YWx1ZSkKICAgICAsIG1f
YmxvYlVSTHMoYmxvYlVSTHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmFsdWUuaAppbmRleCAxOThjNDQzLi40M2VjNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmgKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIElE
QlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpOwogICAgIElEQlZhbHVlKGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CiAgICAgSURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYmxvYkZpbGVQYXRocyk7CisgICAgSURCVmFsdWUoY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImLCBWZWN0b3I8U3RyaW5nPiYmIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5nPiYmIGJs
b2JGaWxlUGF0aHMpOwogICAgIElEQlZhbHVlKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxv
YkZpbGVQYXRocyk7CiAKICAgICBJREJWYWx1ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRl
eEN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SW5kZXhDdXJzb3IuY3BwCmluZGV4IGZlYzgxMDYuLmQ2Y2VkZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleEN1cnNvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlu
ZGV4Q3Vyc29yLmNwcApAQCAtNzQsOCArNzQsMTEgQEAgdm9pZCBNZW1vcnlJbmRleEN1cnNvcjo6
Y3VycmVudERhdGEoSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCiAKICAgICBpZiAobV9pbmZvLmN1
cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpCiAgICAgICAgIGdl
dFJlc3VsdCA9IHsgbV9jdXJyZW50S2V5LCBtX2N1cnJlbnRQcmltYXJ5S2V5IH07Ci0gICAgZWxz
ZQotICAgICAgICBnZXRSZXN1bHQgPSB7IG1fY3VycmVudEtleSwgbV9jdXJyZW50UHJpbWFyeUtl
eSwgbV9pbmRleC5vYmplY3RTdG9yZSgpLnZhbHVlRm9yS2V5KG1fY3VycmVudFByaW1hcnlLZXkp
IH07CisgICAgZWxzZSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15QmxvYlVSTHMsIGR1
bW15QmxvYkZpbGVzOworICAgICAgICBJREJWYWx1ZSB2YWx1ZSA9IHsgbV9pbmRleC5vYmplY3RT
dG9yZSgpLnZhbHVlRm9yS2V5KG1fY3VycmVudFByaW1hcnlLZXkpLCBXVEZNb3ZlKGR1bW15Qmxv
YlVSTHMpLCBXVEZNb3ZlKGR1bW15QmxvYkZpbGVzKSB9OworICAgICAgICBnZXRSZXN1bHQgPSB7
IG1fY3VycmVudEtleSwgbV9jdXJyZW50UHJpbWFyeUtleSwgV1RGTW92ZSh2YWx1ZSkgfTsKKyAg
ICB9CiB9CiAKIHZvaWQgTWVtb3J5SW5kZXhDdXJzb3I6Oml0ZXJhdGUoY29uc3QgSURCS2V5RGF0
YSYga2V5LCB1aW50MzJfdCBjb3VudCwgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0
U3RvcmVDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeU9iamVjdFN0b3JlQ3Vyc29yLmNwcAppbmRleCA2N2NjNjhmLi43OWZkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmVDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZUN1cnNvci5jcHAKQEAgLTE4OSw3ICsxODksOSBAQCB2
b2lkIE1lbW9yeU9iamVjdFN0b3JlQ3Vyc29yOjpjdXJyZW50RGF0YShJREJHZXRSZXN1bHQmIGRh
dGEpCiAgICAgfQogCiAgICAgbV9jdXJyZW50UG9zaXRpb25LZXkgPSAqKm1faXRlcmF0b3I7Ci0g
ICAgZGF0YSA9IHsgbV9jdXJyZW50UG9zaXRpb25LZXksIG1fY3VycmVudFBvc2l0aW9uS2V5LCBt
X29iamVjdFN0b3JlLnZhbHVlRm9yS2V5UmFuZ2UobV9jdXJyZW50UG9zaXRpb25LZXkpIH07Cisg
ICAgVmVjdG9yPFN0cmluZz4gZHVtbXlCbG9iVVJMcywgZHVtbXlCbG9iRmlsZXM7CisgICAgSURC
VmFsdWUgdmFsdWUgPSB7IG1fb2JqZWN0U3RvcmUudmFsdWVGb3JLZXlSYW5nZShtX2N1cnJlbnRQ
b3NpdGlvbktleSksIFdURk1vdmUoZHVtbXlCbG9iVVJMcyksIFdURk1vdmUoZHVtbXlCbG9iRmls
ZXMpIH07CisgICAgZGF0YSA9IHsgbV9jdXJyZW50UG9zaXRpb25LZXksIG1fY3VycmVudFBvc2l0
aW9uS2V5LCBXVEZNb3ZlKHZhbHVlKSB9OwogfQogCiB2b2lkIE1lbW9yeU9iamVjdFN0b3JlQ3Vy
c29yOjppbmNyZW1lbnRGb3J3YXJkSXRlcmF0b3Ioc3RkOjpzZXQ8SURCS2V5RGF0YT4mIHNldCwg
Y29uc3QgSURCS2V5RGF0YSYga2V5LCB1aW50MzJfdCBjb3VudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJh
Y2tpbmdTdG9yZS5jcHAKaW5kZXggZTc4ZWIwNS4uMjgyYTIxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHAKQEAgLTEwNDksNyArMTA0OSw4IEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjCiAKICAgICB3aGlsZSAoIWN1cnNvci0+Y3VycmVudEtleSgpLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGF1dG8mIGtleSA9IGN1cnNvci0+Y3VycmVudEtleSgpOwotICAgICAgICBhdXRvIHZh
bHVlQnVmZmVyID0gVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3IoY3Vyc29yLT5jdXJy
ZW50VmFsdWVCdWZmZXIoKSk7CisgICAgICAgIGF1dG8qIHZhbHVlID0gY3Vyc29yLT5jdXJyZW50
VmFsdWUoKTsKKyAgICAgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVCdWZmZXIgPSB2YWx1
ZSA/IHZhbHVlLT5kYXRhKCkgOiBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOwogCiAgICAgICAgIElE
QkVycm9yIGVycm9yID0gdXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQoaW5mbywga2V5LCB2YWx1
ZUJ1ZmZlcik7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKQEAgLTE2MjcsNiArMTYy
OCw2MCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIHJldHVybiBlcnJvcjsKIH0KIAor
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRCbG9iUmVjb3Jkc0Zvck9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVSZWNvcmQsIFZlY3RvcjxTdHJpbmc+JiBibG9i
VVJMcywgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMpCit7CisgICAgQVNTRVJUKG9iamVj
dFN0b3JlUmVjb3JkKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBibG9iVVJMU2V0OworICAgIHsK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJT
RUxFQ1QgYmxvYlVSTCBGUk9NIEJsb2JSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlUm93ID0gPyIp
KTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlUmVjb3JkKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNo
IGJsb2IgVVJMcyBmb3Igb2JqZWN0IHN0b3JlIHJlY29yZCAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
cmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gbG9vayB1cCBibG9iVVJMIHJlY29yZHMgaW4gb2JqZWN0IHN0b3JlIGJ5IGtl
eSByYW5nZSIpIH07CisgICAgICAgIH0KKworICAgICAgICBpbnQgc3FsUmVzdWx0ID0gc3FsLnN0
ZXAoKTsKKyAgICAgICAgaWYgKHNxbFJlc3VsdCA9PSBTUUxJVEVfT0sgfHwgc3FsUmVzdWx0ID09
IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmxvYlVSTHMgaW4g
dGhlIGRhdGFiYXNlIGZvciB0aGlzIG9iamVjdCBzdG9yZSByZWNvcmQuCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKHNxbFJlc3VsdCA9PSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICBibG9iVVJMU2V0LmFkZChzcWwuZ2V0Q29sdW1uVGV4dCgw
KSk7CisgICAgICAgICAgICBzcWxSZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNxbFJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgZmV0Y2ggYmxvYiBVUkxzIGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkICgl
aSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBsb29rIHVwIGJsb2JVUkwgcmVjb3JkcyBp
biBvYmplY3Qgc3RvcmUgYnkga2V5IHJhbmdlIikgfTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVCghYmxvYlVSTFNldC5pc0VtcHR5KCkpOworICAgIFN0cmluZyBkYXRhYmFzZURpcmVj
dG9yeSA9IGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpOworICAgIGZvciAoYXV0byYgYmxvYlVSTCA6
IGJsb2JVUkxTZXQpIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwg
QVNDSUlMaXRlcmFsKCJTRUxFQ1QgZmlsZU5hbWUgRlJPTSBCbG9iRmlsZXMgV0hFUkUgYmxvYlVS
TCA9ID8iKSk7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIGJsb2JVUkwpICE9IFNRTElURV9PSykgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggYmxv
YiBmaWxlbmFtZSBmb3Igb2JqZWN0IHN0b3JlIHJlY29yZCAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
cmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gbG9vayB1cCBibG9iVVJMIHJlY29yZHMgaW4gb2JqZWN0IHN0b3JlIGJ5IGtl
eSByYW5nZSIpIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVudHJ5IGZvciBibG9iIGZpbGVuYW1l
IGZvciBibG9iIHVybCAlcyBkb2VzIG5vdCBleGlzdCAoJWkpIC0gJXMiLCBibG9iVVJMLnV0Zjgo
KS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBsb29rIHVwIGJsb2JVUkwgcmVjb3JkcyBp
biBvYmplY3Qgc3RvcmUgYnkga2V5IHJhbmdlIikgfTsKKyAgICAgICAgfQorCisgICAgICAgIGJs
b2JVUkxzLmFwcGVuZChibG9iVVJMKTsKKworICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzcWwu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgYmxvYkZpbGVQYXRocy5hcHBlbmQocGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCBmaWxlTmFtZSkpOworICAgIH0KKwor
ICAgIHJldHVybiB7IH07Cit9CisKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0
UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdl
LCBJREJHZXRSZXN1bHQmIHJlc3VsdFZhbHVlKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCAtIGtleSByYW5nZSAlcywgb2JqZWN0IHN0b3Jl
ICUiIFBSSXU2NCwga2V5UmFuZ2UubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9iamVj
dFN0b3JlSUQpOwpAQCAtMTY1OCwxMSArMTcxMywxMyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBB
U0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJpYWxpemUgdXBwZXIgSURCS2V5IGluIGxvb2t1cCBy
YW5nZSIpIH07CiAgICAgfQogCisgICAgaW50NjRfdCByZWNvcmRJRCA9IDA7CisgICAgVGhyZWFk
U2FmZURhdGFCdWZmZXIgcmVzdWx0QnVmZmVyOwogICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJPcGVuVXBwZXJPcGVuKCJTRUxFQ1Qg
dmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPiBDQVNU
KD8gQVMgVEVYVCkgQU5EIGtleSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Iik7Ci0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVyYWw+IGxvd2VyT3Bl
blVwcGVyQ2xvc2VkKCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3Jl
SUQgPSA/IEFORCBrZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVY
VCkgT1JERVIgQlkga2V5OyIpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QVNDSUlMaXRlcmFsPiBsb3dlckNsb3NlZFVwcGVyT3BlbigiU0VMRUNUIHZhbHVlIEZST00gUmVj
b3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBB
TkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJDbG9zZWRVcHBlckNsb3Nl
ZCgiU0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
a2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7Iik7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVy
YWw+IGxvd2VyT3BlblVwcGVyT3BlbigiU0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5
IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJPcGVuVXBwZXJDbG9zZWQoIlNFTEVD
VCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBr
ZXkgPiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkg
a2V5OyIpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQVNDSUlMaXRlcmFs
PiBsb3dlckNsb3NlZFVwcGVyT3BlbigiU0VMRUNUIHZhbHVlLCBST1dJRCBGUk9NIFJlY29yZHMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtl
eSA8IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Iik7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVyYWw+IGxvd2VyQ2xvc2VkVXBwZXJDbG9zZWQoIlNF
TEVDVCB2YWx1ZSwgUk9XSUQgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFO
RCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVS
IEJZIGtleTsiKTsKIAogICAgICAgICBjb25zdCBBU0NJSUxpdGVyYWwqIHF1ZXJ5ID0gbnVsbHB0
cjsKIApAQCAtMTcwMyw5ICsxNzYwLDIwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKICAgICAgICAgc3FsLmdldENvbHVtbkJsb2JB
c1ZlY3RvcigwLCBidWZmZXIpOwotICAgICAgICByZXN1bHRWYWx1ZSA9IFRocmVhZFNhZmVEYXRh
QnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOworICAgICAgICByZXN1bHRCdWZmZXIgPSBUaHJl
YWRTYWZlRGF0YUJ1ZmZlcjo6YWRvcHRWZWN0b3IoYnVmZmVyKTsKKworICAgICAgICByZWNvcmRJ
RCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgxKTsKICAgICB9CiAKKyAgICBBU1NFUlQocmVjb3JkSUQp
OworICAgIFZlY3RvcjxTdHJpbmc+IGJsb2JVUkxzLCBibG9iRmlsZVBhdGhzOworICAgIGF1dG8g
ZXJyb3IgPSBnZXRCbG9iUmVjb3Jkc0Zvck9iamVjdFN0b3JlUmVjb3JkKHJlY29yZElELCBibG9i
VVJMcywgYmxvYkZpbGVQYXRocyk7CisgICAgQVNTRVJUKGJsb2JVUkxzLnNpemUoKSA9PSBibG9i
RmlsZVBhdGhzLnNpemUoKSk7CisKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZXJyb3I7CisKKyAgICByZXN1bHRWYWx1ZSA9IHsgeyByZXN1bHRCdWZmZXIsIFdURk1v
dmUoYmxvYlVSTHMpLCBXVEZNb3ZlKGJsb2JGaWxlUGF0aHMpIH0gfTsKICAgICByZXR1cm4geyB9
OwogfQogCkBAIC0xNzM5LDcgKzE4MDcsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbgogICAg
ICAgICBpZiAodHlwZSA9PSBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6S2V5KQogICAgICAg
ICAgICAgZ2V0UmVzdWx0ID0geyBjdXJzb3ItPmN1cnJlbnRQcmltYXJ5S2V5KCkgfTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZ2V0UmVzdWx0ID0geyBTaGFyZWRCdWZmZXI6OmNyZWF0ZShj
dXJzb3ItPmN1cnJlbnRWYWx1ZUJ1ZmZlcigpLmRhdGEoKSwgY3Vyc29yLT5jdXJyZW50VmFsdWVC
dWZmZXIoKS5zaXplKCkpLCBjdXJzb3ItPmN1cnJlbnRQcmltYXJ5S2V5KCkgfTsKKyAgICAgICAg
ICAgIGdldFJlc3VsdCA9IHsgY3Vyc29yLT5jdXJyZW50VmFsdWUoKSA/ICpjdXJzb3ItPmN1cnJl
bnRWYWx1ZSgpIDogSURCVmFsdWUoKSwgY3Vyc29yLT5jdXJyZW50UHJpbWFyeUtleSgpIH07CiAg
ICAgfQogCiAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRl
eCBkZTI1YThiLi4zNWQ0OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC04
NSw2ICs4NSw4IEBAIHB1YmxpYzoKIAogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyJiB0ZW1wb3JhcnlGaWxlSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcG9yYXJ5
RmlsZUhhbmRsZXI7IH0KIAorICAgIElEQkVycm9yIGdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JV
UkxzLCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocyk7CisKIHByaXZhdGU6CiAgICAgU3Ry
aW5nIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRh
YmFzZVBhdGgoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKaW5kZXggNjQxZTQ0ZC4uOGRl
N2NjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJJREJHZXRSZXN1bHQuaCIKICNpbmNsdWRlICJJREJTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1
ZGUgIlNRTGl0ZUlEQlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lk
IFNRTGl0ZUlEQkN1cnNvcjo6Y3VycmVudERhdGEoSURCR2V0UmVzdWx0JiByZXN1bHQpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSB7IG1fY3VycmVudEtleSwgbV9jdXJy
ZW50UHJpbWFyeUtleSwgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3IobV9jdXJyZW50
VmFsdWVCdWZmZXIpIH07CisgICAgcmVzdWx0ID0geyBtX2N1cnJlbnRLZXksIG1fY3VycmVudFBy
aW1hcnlLZXksIG1fY3VycmVudFZhbHVlID8gKm1fY3VycmVudFZhbHVlIDogSURCVmFsdWUoKSB9
OwogfQogCiBzdGF0aWMgU3RyaW5nIGJ1aWxkSW5kZXhTdGF0ZW1lbnQoY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0
aW9uKQpAQCAtMzM3LDYgKzMzOCw4IEBAIFNRTGl0ZUlEQkN1cnNvcjo6QWR2YW5jZVJlc3VsdCBT
UUxpdGVJREJDdXJzb3I6OmludGVybmFsQWR2YW5jZU9uY2UoKQogICAgIEFTU0VSVChtX3N0YXRl
bWVudCk7CiAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7CiAKKyAgICBtX2N1cnJlbnRWYWx1ZSA9
IG51bGxwdHI7CisKICAgICBpbnQgcmVzdWx0ID0gbV9zdGF0ZW1lbnQtPnN0ZXAoKTsKICAgICBp
ZiAocmVzdWx0ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsK
QEAgLTM0NCw3ICszNDcsNyBAQCBTUUxpdGVJREJDdXJzb3I6OkFkdmFuY2VSZXN1bHQgU1FMaXRl
SURCQ3Vyc29yOjppbnRlcm5hbEFkdmFuY2VPbmNlKCkKICAgICAgICAgLy8gV2hlbiBhIGN1cnNv
ciByZWFjaGVzIGl0cyBlbmQsIHRoYXQgaXMgaW5kaWNhdGVkIGJ5IGhhdmluZyB1bmRlZmluZWQg
a2V5cy92YWx1ZXMKICAgICAgICAgbV9jdXJyZW50S2V5ID0gSURCS2V5RGF0YSgpOwogICAgICAg
ICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gSURCS2V5RGF0YSgpOwotICAgICAgICBtX2N1cnJlbnRW
YWx1ZUJ1ZmZlci5jbGVhcigpOworICAgICAgICBtX2N1cnJlbnRWYWx1ZSA9IG51bGxwdHI7CiAK
ICAgICAgICAgcmV0dXJuIEFkdmFuY2VSZXN1bHQ6OlN1Y2Nlc3M7CiAgICAgfQpAQCAtMzY3LDEy
ICszNzAsMjUgQEAgU1FMaXRlSURCQ3Vyc29yOjpBZHZhbmNlUmVzdWx0IFNRTGl0ZUlEQkN1cnNv
cjo6aW50ZXJuYWxBZHZhbmNlT25jZSgpCiAgICAgfQogCiAgICAgbV9zdGF0ZW1lbnQtPmdldENv
bHVtbkJsb2JBc1ZlY3RvcigyLCBrZXlEYXRhKTsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9
IGtleURhdGE7CisKKyAgICBpbnQ2NF90IHJlY29yZElEID0gbV9zdGF0ZW1lbnQtPmdldENvbHVt
bkludDY0KDApOworICAgIEFTU0VSVChyZWNvcmRJRCk7CiAKICAgICAvLyBUaGUgcHJpbWFyeUtl
eSBvZiBhbiBPYmplY3RTdG9yZSBjdXJzb3IgaXMgdGhlIHNhbWUgYXMgaXRzIGtleS4KLSAgICBp
ZiAobV9pbmRleElEID09IElEQkluZGV4SW5mbzo6SW52YWxpZElkKQorICAgIGlmIChtX2luZGV4
SUQgPT0gSURCSW5kZXhJbmZvOjpJbnZhbGlkSWQpIHsKICAgICAgICAgbV9jdXJyZW50UHJpbWFy
eUtleSA9IG1fY3VycmVudEtleTsKLSAgICBlbHNlIHsKKworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBibG9iVVJMcywgYmxvYkZpbGVQYXRoczsKKyAgICAgICAgYXV0byBlcnJvciA9IG1fdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZSgpLmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQo
cmVjb3JkSUQsIGJsb2JVUkxzLCBibG9iRmlsZVBhdGhzKTsKKyAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZmV0Y2ggYmxvYiBy
ZWNvcmRzIGZyb20gZGF0YWJhc2Ugd2hpbGUgYWR2YW5jaW5nIGN1cnNvciIpOworICAgICAgICAg
ICAgbV9jb21wbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgbV9lcnJvcmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBBZHZhbmNlUmVzdWx0OjpGYWlsdXJlOworICAgICAgICB9CisKKyAg
ICAgICAgbV9jdXJyZW50VmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQlZhbHVlPihUaHJlYWRT
YWZlRGF0YUJ1ZmZlcjo6YWRvcHRWZWN0b3Ioa2V5RGF0YSksIGJsb2JVUkxzLCBibG9iRmlsZVBh
dGhzKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5RGF0YShr
ZXlEYXRhLmRhdGEoKSwga2V5RGF0YS5zaXplKCksIG1fY3VycmVudFByaW1hcnlLZXkpKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSB2YWx1ZSBkYXRhIGZy
b20gZGF0YWJhc2Ugd2hpbGUgYWR2YW5jaW5nIGluZGV4IGN1cnNvciIpOwogICAgICAgICAgICAg
bV9jb21wbGV0ZWQgPSB0cnVlOwpAQCAtMzgzLDcgKzM5OSw3IEBAIFNRTGl0ZUlEQkN1cnNvcjo6
QWR2YW5jZVJlc3VsdCBTUUxpdGVJREJDdXJzb3I6OmludGVybmFsQWR2YW5jZU9uY2UoKQogICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0U3RvcmVTdGF0ZW1lbnQobV9zdGF0ZW1lbnQtPmRh
dGFiYXNlKCksICJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIGtleSA9IENBU1QoPyBB
UyBURVhUKSBhbmQgb2JqZWN0U3RvcmVJRCA9ID87Iik7CiAKICAgICAgICAgaWYgKG9iamVjdFN0
b3JlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IG9iamVj
dFN0b3JlU3RhdGVtZW50LmJpbmRCbG9iKDEsIG1fY3VycmVudFZhbHVlQnVmZmVyLmRhdGEoKSwg
bV9jdXJyZW50VmFsdWVCdWZmZXIuc2l6ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8
IG9iamVjdFN0b3JlU3RhdGVtZW50LmJpbmRCbG9iKDEsIGtleURhdGEuZGF0YSgpLCBrZXlEYXRh
LnNpemUoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBvYmplY3RTdG9yZVN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgbV9vYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBpbmRleCBjdXJzb3Igc3RhdGVtZW50IGlu
dG8gb2JqZWN0IHN0b3JlIHJlY29yZHMgKCVpKSAnJXMnIiwgbV9zdGF0ZW1lbnQtPmRhdGFiYXNl
KCkubGFzdEVycm9yKCksIG1fc3RhdGVtZW50LT5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgICAgIG1fY29tcGxldGVkID0gdHJ1ZTsKQEAgLTM5Myw5ICs0MDksMTAgQEAgU1FM
aXRlSURCQ3Vyc29yOjpBZHZhbmNlUmVzdWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50ZXJuYWxBZHZh
bmNlT25jZSgpCiAKICAgICAgICAgaW50IHJlc3VsdCA9IG9iamVjdFN0b3JlU3RhdGVtZW50LnN0
ZXAoKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IFNRTElURV9ST1cpCi0gICAgICAgICAgICBv
YmplY3RTdG9yZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMCwgbV9jdXJyZW50VmFs
dWVCdWZmZXIpOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBvYmplY3RTdG9y
ZVN0YXRlbWVudC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMCwga2V5RGF0YSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRWYWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCVmFsdWU+KFRocmVhZFNhZmVE
YXRhQnVmZmVyOjphZG9wdFZlY3RvcihrZXlEYXRhKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0ID09IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGluZGljYXRlcyB0aGF0
IHRoZSByZWNvcmQgd2UncmUgdHJ5aW5nIHRvIHJldHJpZXZlIGhhcyBiZWVuIHJlbW92ZWQgZnJv
bSB0aGUgb2JqZWN0IHN0b3JlLgogICAgICAgICAgICAgLy8gU2tpcCBvdmVyIGl0LgogICAgICAg
ICAgICAgcmV0dXJuIEFkdmFuY2VSZXN1bHQ6OlNob3VsZEFkdmFuY2VBZ2FpbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuaAppbmRleCBhODQxOTI0Li43MGE5NTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5oCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgogI2luY2x1ZGUgIklEQktleVJh
bmdlRGF0YS5oIgogI2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IklEQlZhbHVlLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
SURCS2V5RGF0YSYgY3VycmVudEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQog
ICAgIGNvbnN0IElEQktleURhdGEmIGN1cnJlbnRQcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50UHJpbWFyeUtleTsgfQotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY3VycmVu
dFZhbHVlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWVCdWZmZXI7IH0KKyAg
ICBJREJWYWx1ZSogY3VycmVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWUu
Z2V0KCk7IH0KIAogICAgIGJvb2wgYWR2YW5jZSh1aW50NjRfdCBjb3VudCk7CiAgICAgYm9vbCBp
dGVyYXRlKGNvbnN0IElEQktleURhdGEmIHRhcmdldEtleSk7CkBAIC0xMDIsNyArMTAzLDcgQEAg
cHJpdmF0ZToKIAogICAgIElEQktleURhdGEgbV9jdXJyZW50S2V5OwogICAgIElEQktleURhdGEg
bV9jdXJyZW50UHJpbWFyeUtleTsKLSAgICBWZWN0b3I8dWludDhfdD4gbV9jdXJyZW50VmFsdWVC
dWZmZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQlZhbHVlPiBtX2N1cnJlbnRWYWx1ZTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RhdGVtZW50OwogICAgIGJv
b2wgbV9zdGF0ZW1lbnROZWVkc1Jlc2V0IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0
aW9uLmgKaW5kZXggZmJmZmI4OC4uMTAyN2Q2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9u
LmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5Qcm9ncmVzcygpIGNvbnN0
OwogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24qIHNxbGl0ZVRyYW5zYWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlvbi5nZXQoKTsgfQorICAgIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmU7IH0KIAogICAgIHZv
aWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBjb25zdCBTdHJpbmcm
IHN0b3JlZEZpbGVuYW1lKTsKICAgICB2b2lkIGFkZFJlbW92ZWRCbG9iRmlsZShjb25zdCBTdHJp
bmcmIHJlbW92ZWRGaWxlbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsLmNwcAppbmRleCAyOWYxZDQ2Li44YTNiYzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
QnJpZGdlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVu
dCgpKTsKICAgICAgICAgQVNTRVJUKHBlZXIpOwogCi0gICAgICAgIHBlZXItPnNlbmQoQmxvYjo6
ZGVzZXJpYWxpemUoY2FwdHVyZWRVUkwudXJsKCksIGNhcHR1cmVkVHlwZS5zdHJpbmcoKSwgc2l6
ZSkpOworICAgICAgICBwZWVyLT5zZW5kKEJsb2I6OmRlc2VyaWFsaXplKGNhcHR1cmVkVVJMLnVy
bCgpLCBjYXB0dXJlZFR5cGUuc3RyaW5nKCksIHNpemUsIHsgfSkpOwogICAgIH0pOwogCiAgICAg
UmVmPEJyaWRnZT4gcHJvdGVjdCgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDY3MTdiMWUuLjFhMDY0MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURC
S2V5RGF0YS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKKyNpbmNsdWRlICJJREJWYWx1ZS5o
IgogI2luY2x1ZGUgIkluZGV4S2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgpAQCAtNDI4LDE4ICs0MjksNyBAQCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQ
YXNzUgogICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCByZXN1
bHQpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0
YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciYgdmFsdWVEYXRhKQotewotICAgIERPTVJlcXVlc3RTdGF0ZSBzdGF0ZSgmY29udGV4dCk7
Ci0gICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhlYygpOwotCi0gICAgaWYgKCFleGVjU3Rh
dGUpCi0gICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSgpOwotCi0gICAgcmV0
dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWNTdGF0ZS0+dm0oKSwgZGVzZXJpYWxpemVJ
REJWYWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwgdmFsdWVEYXRhKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYg
ZXhlYywgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3N0YXRpYyBKU0M6
OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+IGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzKQog
ewogICAgIGlmICghdmFsdWVEYXRhLmRhdGEoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC00NTAsNyArNDQwLDcgQEAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVE
YXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBUaHJlYWQKICAgICAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKFZlY3Rvcjx1aW50OF90PihkYXRhKSk7
CiAKICAgICAgICAgZXhlYy52bSgpLmFwaUxvY2soKS5sb2NrKCk7Ci0gICAgICAgIHJlc3VsdCA9
IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9i
amVjdCgpLCAwLCBOb25UaHJvd2luZyk7CisgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1
ZS0+ZGVzZXJpYWxpemUoJmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBOb25U
aHJvd2luZywgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMpOwogICAgICAgICBleGVjLnZtKCkuYXBp
TG9jaygpLnVubG9jaygpOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBqc051bGwoKTsK
QEAgLTQ1OCw2ICs0NDgsMzQgQEAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRh
VG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBUaHJlYWQKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
RGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWVEYXRhKQoreworICAgIERPTVJlcXVlc3RTdGF0ZSBzdGF0ZSgmY29udGV4
dCk7CisgICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhlYygpOworCisgICAgaWYgKCFleGVj
U3RhdGUpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSgpOworCisgICAg
cmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWNTdGF0ZS0+dm0oKSwgZGVzZXJpYWxp
emVJREJWYWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwgdmFsdWVEYXRhKSk7Cit9CisKK0Rl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQoreworICAgIERPTVJlcXVl
c3RTdGF0ZSBzdGF0ZSgmY29udGV4dCk7CisgICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhl
YygpOworCisgICAgaWYgKCFleGVjU3RhdGUpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSgpOworCisgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWNT
dGF0ZS0+dm0oKSwgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwg
dmFsdWUuZGF0YSgpLCB2YWx1ZS5ibG9iVVJMcygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpKTsK
K30KKworSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15VVJMcywgZHVtbXlGaWxlUGF0aHM7CisgICAgcmV0
dXJuIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgZHVt
bXlVUkxzLCBkdW1teUZpbGVQYXRocyk7Cit9CisKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRl
c2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIsIGJvb2wga2V5SXNEZWZpbmVkKQogewog
ICAgIGlmIChwcnBCdWZmZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBjMTcwZDE2Li4xMTUwYmNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0zOSw2ICsz
OSw3IEBAIGNsYXNzIElEQkluZGV4SW5mbzsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleURh
dGE7CiBjbGFzcyBJREJLZXlQYXRoOworY2xhc3MgSURCVmFsdWU7CiBjbGFzcyBJbmRleEtleTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwpAQCAtNTcs
NiArNTgsNyBAQCBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0CiAKIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+KTsKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXpl
SURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWVEYXRhKTsKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXpl
SURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQlZhbHVlJik7CiBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKERPTVJlcXVlc3RT
dGF0ZSosIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBrZXlJc0RlZmluZWQpOwogV0VC
Q09SRV9FWFBPUlQgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1
ZmZlcihKU0M6OkV4ZWNTdGF0ZSosIFZlY3Rvcjx1aW50OF90PiYmLCBib29sIGtleUlzRGVmaW5l
ZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IDVlODM2ZDAuLjg3MDAyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTQ4Miwx
MyArMTQ4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogCi0gICAg
c3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFycmF5
QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBidWZmZXIpCisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1lc3NhZ2VQb3J0
QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMp
CiAgICAgewogICAgICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoanNOdWxsKCksIFVuc3BlY2lmaWVkRXJyb3IpOwotICAgICAgICBDbG9u
ZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9y
dHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyKTsKKyAgICAgICAgQ2xvbmVEZXNl
cmlhbGl6ZXIgZGVzZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBh
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMp
OwogICAgICAgICBpZiAoIWRlc2VyaWFsaXplci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBWYWxpZGF0aW9uRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCk7CkBAIC0xNTMzLDkgKzE1MzEsNyBAQCBw
cml2YXRlOgogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICB9OwogCi0gICAgQ2xvbmVEZXNl
cmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAK
LSAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywKLSAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICBDbG9uZURlc2Vy
aWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE1l
c3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBh
cnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICAg
ICAgOiBDbG9uZUJhc2UoZXhlYykKICAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QpCiAgICAgICAgICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmluaGVyaXRz
KEpTRE9NR2xvYmFsT2JqZWN0OjppbmZvKCkpKQpAQCAtMTU1MCw2ICsxNTQ2LDIzIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOwogICAgIH0KIAorICAgIENs
b25lRGVzZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVy
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJs
b2JGaWxlUGF0aHMpCisgICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCisgICAgICAgICwgbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQorICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0LT5pbmhlcml0cyhKU0RPTUdsb2JhbE9iamVjdDo6aW5mbygpKSkKKyAgICAgICAg
LCBtX3B0cihidWZmZXIuZGF0YSgpKQorICAgICAgICAsIG1fZW5kKGJ1ZmZlci5kYXRhKCkgKyBi
dWZmZXIuc2l6ZSgpKQorICAgICAgICAsIG1fdmVyc2lvbigweEZGRkZGRkZGKQorICAgICAgICAs
IG1fbWVzc2FnZVBvcnRzKG1lc3NhZ2VQb3J0cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29u
dGVudHMoYXJyYXlCdWZmZXJDb250ZW50cykKKyAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJh
eUJ1ZmZlckNvbnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKKyAgICAg
ICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQorICAgICAgICAsIG1fYmxvYkZpbGVQYXRocyhibG9i
RmlsZVBhdGhzKQorICAgIHsKKyAgICAgICAgaWYgKCFyZWFkKG1fdmVyc2lvbikpCisgICAgICAg
ICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOworICAgIH0KKwogICAgIERlc2VyaWFsaXphdGlv
blJlc3VsdCBkZXNlcmlhbGl6ZSgpOwogCiAgICAgdm9pZCB0aHJvd1ZhbGlkYXRpb25FcnJvcigp
CkBAIC0xNzczLDggKzE3ODYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FjaGVkU3RyaW5nUmVm
IG5hbWU7CiAgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEobmFtZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICAvLyBJZiB0aGUgYmxvYiBVUkwgZm9yIHRoaXMgZmlsZSBoYXMg
YW4gYXNzb2NpYXRlZCBibG9iIGZpbGUgcGF0aCwgcHJlZmVyIHRoYXQgb25lIG92ZXIgdGhlICJi
dWlsdC1pbiIgcGF0aC4KKyAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gYmxvYkZpbGVQYXRoRm9y
QmxvYlVSTCh1cmwtPnN0cmluZygpKTsKKyAgICAgICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC0+c3RyaW5nKCk7CisKICAgICAgICAgaWYgKG1f
aXNET01HbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBmaWxlID0gRmlsZTo6ZGVzZXJpYWxpemUo
cGF0aC0+c3RyaW5nKCksIFVSTChVUkwoKSwgdXJsLT5zdHJpbmcoKSksIHR5cGUtPnN0cmluZygp
LCBuYW1lLT5zdHJpbmcoKSk7CisgICAgICAgICAgICBmaWxlID0gRmlsZTo6ZGVzZXJpYWxpemUo
ZmlsZVBhdGgsIFVSTChVUkwoKSwgdXJsLT5zdHJpbmcoKSksIHR5cGUtPnN0cmluZygpLCBuYW1l
LT5zdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjI3Myw3ICsy
MjkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVy
biBqc051bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKEJsb2I6OmRlc2VyaWFs
aXplKFVSTChVUkwoKSwgdXJsLT5zdHJpbmcoKSksIHR5cGUtPnN0cmluZygpLCBzaXplKS5nZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShCbG9iOjpkZXNlcmlhbGl6ZShVUkwo
VVJMKCksIHVybC0+c3RyaW5nKCkpLCB0eXBlLT5zdHJpbmcoKSwgc2l6ZSwgYmxvYkZpbGVQYXRo
Rm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKSkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgU3RyaW5nVGFnOiB7CiAgICAgICAgICAgICBDYWNoZWRTdHJpbmdSZWYgY2FjaGVkU3RyaW5n
OwpAQCAtMjQwNSw2ICsyNDI0LDE5IEBAIHByaXZhdGU6CiAgICAgTWVzc2FnZVBvcnRBcnJheSog
bV9tZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX2FycmF5QnVm
ZmVyQ29udGVudHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBtX2FycmF5QnVmZmVyczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYkZpbGVQ
YXRoczsKKworICAgIFN0cmluZyBibG9iRmlsZVBhdGhGb3JCbG9iVVJMKGNvbnN0IFN0cmluZyYg
YmxvYlVSTCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkg
PCBtX2Jsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9ibG9iVVJMc1tp
XSA9PSBibG9iVVJMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGkgPCBtX2Jsb2JVUkxzLnNpemUoKSA/IG1fYmxvYkZpbGVQYXRoc1tpXSA6IFN0
cmluZygpOworICAgIH0KIH07CiAKIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFs
aXplcjo6ZGVzZXJpYWxpemUoKQpAQCAtMjY4MywxMSArMjcxNSwxNSBAQCBTdHJpbmcgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjp0b1N0cmluZygpCiAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVy
OjpkZXNlcmlhbGl6ZVN0cmluZyhtX2RhdGEpOwogfQogCi1KU1ZhbHVlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l
c3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlvbkVycm9yTW9kZSB0aHJv
d0V4Y2VwdGlvbnMpCitKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNZXNzYWdlUG9y
dEFycmF5KiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRp
b25zKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15QmxvYnMsIGR1bW15UGF0aHM7CisgICAg
cmV0dXJuIGRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCB0aHJv
d0V4Y2VwdGlvbnMsIGR1bW15QmxvYnMsIGR1bW15UGF0aHMpOworfQorCitKU1ZhbHVlIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIFNlcmlh
bGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzKQogewotICAgIERl
c2VyaWFsaXphdGlvblJlc3VsdCByZXN1bHQgPSBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxp
emUoZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FycmF5QnVm
ZmVyQ29udGVudHNBcnJheS5nZXQoKSwgbV9kYXRhKTsKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9i
amVjdCwgbWVzc2FnZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSwgbV9k
YXRhLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocyk7CiAgICAgaWYgKHRocm93RXhjZXB0aW9ucyA9
PSBUaHJvd2luZykKICAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlvbklmU2VyaWFsaXphdGlvbkZh
aWxlZChleGVjLCByZXN1bHQuc2Vjb25kKTsKICAgICByZXR1cm4gcmVzdWx0LmZpcnN0ID8gcmVz
dWx0LmZpcnN0IDoganNOdWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDE1Y2JmOGEuLmJjZDJkNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBA
IC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbnVsbFZhbHVlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0M6OkpTVmFsdWUgZGVz
ZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTWVzc2FnZVBv
cnRBcnJheSosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7CisgICAgSlNDOjpK
U1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzKTsK
IAogICAgIHN0YXRpYyB1aW50MzJfdCB3aXJlRm9ybWF0VmVyc2lvbigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iLmNwcAppbmRleCBiMmYyMjgyLi5kOWNiYjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5j
cHAKQEAgLTk1LDEyICs5NSwxNSBAQCBCbG9iOjpCbG9iKFZlY3RvcjxCbG9iUGFydD4gYmxvYlBh
cnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBXVEZNb3ZlKGJsb2JQYXJ0cyksIGNv
bnRlbnRUeXBlKTsKIH0KIAotQmxvYjo6QmxvYihEZXNlcmlhbGl6YXRpb25Db250cnVjdG9yLCBj
b25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkKK0Js
b2I6OkJsb2IoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY29uc3QgVVJMJiBzcmNVUkwsIGNv
bnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tl
ZFBhdGgpCiAgICAgOiBtX3R5cGUobm9ybWFsaXplZENvbnRlbnRUeXBlKHR5cGUpKQogICAgICwg
bV9zaXplKHNpemUpCiB7CiAgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVy
bmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG51
bGxwdHIsIG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgaWYgKGZpbGVCYWNrZWRQYXRoLmlz
RW1wdHkoKSkKKyAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KG51bGxwdHIsIG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgZWxzZQorICAgICAgICBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZCht
X2ludGVybmFsVVJMLCBzcmNVUkwsIGZpbGVCYWNrZWRQYXRoKTsKIH0KIAogQmxvYjo6QmxvYihj
b25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgZW5kLCBjb25zdCBT
dHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCmluZGV4IDkzMzMzZGMuLjQ5YjZkMDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYi5oCkBAIC01OCwxMCArNTgsMTAgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iKFdURk1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPEJsb2I+IGRlc2VyaWFsaXplKGNvbnN0IFVSTCYg
c3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIHN0YXRpYyBS
ZWY8QmxvYj4gZGVzZXJpYWxpemUoY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpCiAgICAgewog
ICAgICAgICBBU1NFUlQoQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUodHlwZSkpOwotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iKGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3Is
IHNyY1VSTCwgdHlwZSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9i
KGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIHNyY1VSTCwgdHlwZSwgc2l6ZSwgZmlsZUJhY2tl
ZFBhdGgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5CbG9iKCk7CkBAIC05OCw3ICs5OCw3IEBA
IHByb3RlY3RlZDoKICAgICBCbG9iKFVuaW5pdGlhbGl6ZWRDb250cnVjdG9yKTsKIAogICAgIGVu
dW0gRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciB7IGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3Ig
fTsKLSAgICBCbG9iKERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYgc3JjVVJM
LCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKTsKKyAgICBCbG9iKERlc2VyaWFs
aXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKTsKIAogICAgIC8v
IEZvciBzbGljaW5nLgogICAgIEJsb2IoY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlLmNwcAppbmRleCA5NGIyMjg4Li44YmJhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAKQEAgLTU4LDcgKzU4LDcgQEAgRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgbmFtZU92ZXJyaWRlKQogfQogCiBGaWxlOjpGaWxlKERlc2VyaWFsaXphdGlvbkNv
bnRydWN0b3IsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogQmxvYihkZXNlcmlhbGl6YXRpb25D
b250cnVjdG9yLCB1cmwsIHR5cGUsIC0xKQorICAgIDogQmxvYihkZXNlcmlhbGl6YXRpb25Db250
cnVjdG9yLCB1cmwsIHR5cGUsIC0xLCBwYXRoKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBt
X25hbWUobmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuY3BwCmluZGV4IDcxODgwY2EuLmE1NDUxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcApAQCAtMzUsMTAgKzM1
LDEyIEBACiAjaW5jbHVkZSAiQmxvYlBhcnQuaCIKICNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL01l
c3NhZ2VRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC05OCw2
ICsxMDAsMTcgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJsb2JVcmxPcmlnaW5NYXA+JiBvcmln
aW5NYXAoKQogICAgIHJldHVybiAqbWFwOwogfQogCitzdGF0aWMgTWVzc2FnZVF1ZXVlPENyb3Nz
VGhyZWFkVGFzaz4mIHRocmVhZGFibGVRdWV1ZSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBNZXNzYWdlUXVldWU8Q3Jvc3NUaHJlYWRUYXNrPiog
cXVldWU7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgcXVldWUg
PSBuZXcgTWVzc2FnZVF1ZXVlPENyb3NzVGhyZWFkVGFzaz47CisgICAgfSk7CisKKyAgICByZXR1
cm4gKnF1ZXVlOworfQorCiB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmls
ZUJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCkBAIC0xNDQsNiArMTU3
LDIxIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFVSTCYKICAgICB9CiB9CiAKK3ZvaWQgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQoY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRo
KQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVn
aXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQodXJsLCBzcmNVUkwsIGZpbGVCYWNrZWRQ
YXRoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGhyZWFkYWJsZVF1ZXVlKCkuYXBwZW5kKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzayhUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkxP
cHRpb25hbGx5RmlsZUJhY2tlZCwgdXJsLCBzcmNVUkwsIGZpbGVCYWNrZWRQYXRoKSk7CisKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbXSB7CisgICAgICAgICAgICBhdXRvIHRhc2sgPSB0aHJl
YWRhYmxlUXVldWUoKS50cnlHZXRNZXNzYWdlKCk7CisgICAgICAgICAgICBBU1NFUlQodGFzayk7
CisgICAgICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAgICAgICB9KTsKKyAgICB9Cit9
CisKIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Uo
Y29uc3QgVVJMJiBuZXdVUkwsIGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBlbmQpCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAppbmRleCA4ZWM5NzY0Li45NzA5
OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVn
aXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0
cnkuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJG
aWxlQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwm
LCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7
CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
VVJMJiwgY29uc3QgVVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVS
TE9wdGlvbmFsbHlGaWxlQmFja2VkKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25z
dCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKTsKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JV
UkxGb3JTbGljZShjb25zdCBVUkwmIG5ld1VSTCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGVuZCk7CiAgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JV
UkwoY29uc3QgVVJMJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ny
b3NzVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRUYXNr
LmgKaW5kZXggZjhkZWM0NC4uYjgyM2JjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRUYXNrLmgKQEAgLTYyLDYgKzYyLDE3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrU3Rh
dGljSW1wbCBmaW5hbCA6IHB1YmxpYyBDcm9zc1RocmVhZFRhc2sgeworcHVibGljOgorICAgIENy
b3NzVGhyZWFkVGFza1N0YXRpY0ltcGwodm9pZCAoKm1ldGhvZCkoQXJndW1lbnRzLi4uKSwgQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV90YXNrRnVuY3Rpb24gPSBb
bWV0aG9kLCBhcmd1bWVudHMuLi5dIHsKKyAgICAgICAgICAgIG1ldGhvZChhcmd1bWVudHMuLi4p
OworICAgICAgICB9OworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdGQ6OnVu
aXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiBjcmVhdGVDcm9zc1RocmVhZFRhc2soCiAgICAgVCYg
Y2FsbGVlLApAQCAtMTEzLDYgKzEyNCwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRU
YXNrPiBjcmVhdGVDcm9zc1RocmVhZFRhc2soCiAgICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFk
Q29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDM+CitzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiBjcmVhdGVDcm9z
c1RocmVhZFRhc2soCisgICAgdm9pZCAoKm1ldGhvZCkoTVAxLCBNUDIsIE1QMyksCisgICAgY29u
c3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3Qg
UDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJl
YWRUYXNrU3RhdGljSW1wbDxNUDEsIE1QMiwgTVAzPj4oCisgICAgICAgIG1ldGhvZCwKKyAgICAg
ICAgV2ViQ29yZTo6Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAg
ICAgICBXZWJDb3JlOjpDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisg
ICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVu
YW1lIFA0LCB0eXBlbmFtZSBNUDQ+CiBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiBj
cmVhdGVDcm9zc1RocmVhZFRhc2soCiAgICAgVCYgY2FsbGVlLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKaW5kZXggODQyZTgyYi4uNDFhODA4NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCkBA
IC01Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBSZWdpc3RlcnMgYSBuZXcgYmxvYiBVUkwg
cmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVkIHNy
Y1VSTC4KICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIGNvbnN0
IFVSTCYgc3JjVVJMKSA9IDA7CiAKKyAgICAvLyBSZWdpc3RlcnMgYSBuZXcgYmxvYiBVUkwgcmVm
ZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBieSB0aGUgc3BlY2lmaWVkIHNyY1VS
TCBvciwgaWYgbm9uZSBmb3VuZCwgcmVmZXJyaW5nIHRvIHRoZSBmaWxlIGZvdW5kIGF0IHRoZSBn
aXZlbiBwYXRoLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5Rmls
ZUJhY2tlZChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiBmaWxl
QmFja2VkUGF0aCkgPSAwOworCiAgICAgLy8gTmVnYXRpdmUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMg
c2VsZWN0IGZyb20gdGhlIGVuZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9y
U2xpY2UoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGVuZCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCBkY2I3OGJjLi4zMzhkMWIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5j
cHAKQEAgLTE2MCwxMyArMTYwLDI2IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0CiAKIHZvaWQg
QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBV
UkwmIHNyY1VSTCkKIHsKKyAgICByZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZCh1
cmwsIHNyY1VSTCwgeyB9KTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJs
b2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNV
UkwsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpCit7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAogICAgIEJsb2JEYXRhKiBzcmMgPSBnZXRCbG9iRGF0YUZyb21VUkwoc3JjVVJM
KTsKLSAgICBpZiAoIXNyYykKKyAgICBpZiAoc3JjKSB7CisgICAgICAgIG1fYmxvYnMuc2V0KHVy
bC5zdHJpbmcoKSwgc3JjKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChmaWxl
QmFja2VkUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxCbG9i
RGF0YT4gYmFja2luZ0ZpbGUgPSBCbG9iRGF0YTo6Y3JlYXRlKHsgfSk7CisgICAgYmFja2luZ0Zp
bGUtPmFwcGVuZEZpbGUoQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpjcmVhdGUoZmlsZUJhY2tlZFBh
dGgpKTsKIAotICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgc3JjKTsKKyAgICBtX2Jsb2Jz
LnNldCh1cmwuc3RyaW5nKCksIGJhY2tpbmdGaWxlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgQmxv
YlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCmluZGV4
IGM2MDA2ZGIuLjUwMDZhNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC02MSw2ICs2MSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFVSTCYsIFJlZlB0cjxCbG9iRGF0YUZpbGVS
ZWZlcmVuY2U+JiYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIFZlY3RvcjxCbG9iUGFydD4sIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNv
bnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlZ2lzdGVy
QmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJM
LCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlZ2lz
dGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwogICAgIHZvaWQgdW5yZWdpc3RlckJs
b2JVUkwoY29uc3QgVVJMJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Jsb2JSZWdpc3RyeUltcGwo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzFlODNhMC4u
MTU2YzcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTA0LTEzICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4gSURCIChCbG9iIHN1
cHBvcnQpOiBTdXBwb3J0IHJldHJpZXZpbmcgQmxvYnMgZnJvbSBJREIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYzNjcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0ZpbGVB
UEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaDoKKyAgICAgICAg
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVn
aXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAg
IAorICAgICAgICAqIFdlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkxPcHRpb25h
bGx5RmlsZUJhY2tlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3Ry
eVByb3h5Lmg6CisKIDIwMTYtMDQtMTIgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxOTg5MzMpOiBVbmFibGUgdG8gbG9naW4gdG8gR29v
Z2xlIGFjY291bnQgZnJvbSBJbnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JS
ZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuY3BwCmluZGV4IDgyZGNkOWYuLjI2ZGU4MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxv
YlJlZ2lzdHJ5LmNwcApAQCAtODMsNiArODMsMTcgQEAgdm9pZCBOZXR3b3JrQmxvYlJlZ2lzdHJ5
OjpyZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3QK
ICAgICBtYXBJdGVyYXRvci0+dmFsdWUuYWRkKHVybCk7CiB9CiAKK3ZvaWQgTmV0d29ya0Jsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQoTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwm
IHNyY1VSTCwgY29uc3QgU3RyaW5nJiBmaWxlQmFja2VkUGF0aCkKK3sKKyAgICBibG9iUmVnaXN0
cnkoKS5yZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZCh1cmwsIHNyY1VSTCwgZmls
ZUJhY2tlZFBhdGgpOworCisgICAgQVNTRVJUKCFtX2Jsb2JzRm9yQ29ubmVjdGlvbi5nZXQoY29u
bmVjdGlvbikuY29udGFpbnModXJsKSk7CisgICAgQmxvYkZvckNvbm5lY3Rpb25NYXA6Oml0ZXJh
dG9yIG1hcEl0ZXJhdG9yID0gbV9ibG9ic0ZvckNvbm5lY3Rpb24uZmluZChjb25uZWN0aW9uKTsK
KyAgICBpZiAobWFwSXRlcmF0b3IgPT0gbV9ibG9ic0ZvckNvbm5lY3Rpb24uZW5kKCkpCisgICAg
ICAgIG1hcEl0ZXJhdG9yID0gbV9ibG9ic0ZvckNvbm5lY3Rpb24uYWRkKGNvbm5lY3Rpb24sIEhh
c2hTZXQ8VVJMPigpKS5pdGVyYXRvcjsKKyAgICBtYXBJdGVyYXRvci0+dmFsdWUuYWRkKHVybCk7
Cit9CisKIHZvaWQgTmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Uo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6
OlVSTCYgdXJsLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50
NjRfdCBlbmQpCiB7CiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gbWF5IG5vdCBiZSByZWdpc3RlcmVk
IGlmIE5ldHdvcmtQcm9jZXNzIHByZXZvdXNseSBjcmFzaGVkIGZvciBhbnkgcmVhc29uLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxv
YlJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuaAppbmRleCA5ZjY4NDA3Li45YmZiMmU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVn
aXN0cnkuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckZpbGVC
bG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJM
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29y
ZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lz
dGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6
OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMKTsKKyAgICB2b2lkIHJlZ2lzdGVyQmxv
YlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgZmlsZUJhY2tlZFBhdGgpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Uo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50NjRfdCBlbmQpOwogICAg
IHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBj
b25zdCBXZWJDb3JlOjpVUkwmKTsKICAgICB1aW50NjRfdCBibG9iU2l6ZShOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCmluZGV4IGMwMDE1NzAuLmM4MTdiYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKQEAgLTI3MSw2ICsyNzEsMTEgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMRnJvbVVSTChjb25zdCBVUkwmIHVybCwgY29uc3QK
ICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JVUkwodGhp
cywgdXJsLCBzcmNVUkwpOwogfQogCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZChjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpCit7CisgICAgTmV0
d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZp
bGVCYWNrZWQodGhpcywgdXJsLCBzcmNVUkwsIGZpbGVCYWNrZWRQYXRoKTsKK30KKwogdm9pZCBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVu
ZCkKIHsKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JV
UkxGb3JTbGljZSh0aGlzLCB1cmwsIHNyY1VSTCwgc3RhcnQsIGVuZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaAppbmRleCAxZDExYmE2Li5jZTM5ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyRmlsZUJs
b2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6
QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lzdGVy
QmxvYlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBz
cmNVUkwpOworICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQoY29u
c3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGNvbnN0IFN0cmlu
ZyYgZmlsZUJhY2tlZFBhdGgpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29u
c3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3Rh
cnQsIGludDY0X3QgZW5kKTsKICAgICB2b2lkIGJsb2JTaXplKGNvbnN0IFdlYkNvcmU6OlVSTCYs
IHVpbnQ2NF90JiByZXN1bHRTaXplKTsKICAgICB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgppbmRleCAxOWU0MmY5Li5jNzA1ZjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNDMsNiArNDMsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgUmVnaXN0ZXJGaWxl
QmxvYlVSTChXZWJDb3JlOjpVUkwgdXJsLCBTdHJpbmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFuZGxlLCBTdHJpbmcgY29udGVudFR5cGUpCiAgICAg
UmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1cmwsIFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFy
dD4gYmxvYlBhcnRzLCBTdHJpbmcgY29udGVudFR5cGUpCiAgICAgUmVnaXN0ZXJCbG9iVVJMRnJv
bVVSTChXZWJDb3JlOjpVUkwgdXJsLCBXZWJDb3JlOjpVUkwgc3JjVVJMKQorICAgIFJlZ2lzdGVy
QmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKFdlYkNvcmU6OlVSTCB1cmwsIFdlYkNvcmU6OlVS
TCBzcmNVUkwsIFN0cmluZyBmaWxlQmFja2VkUGF0aCkKICAgICBSZWdpc3RlckJsb2JVUkxGb3JT
bGljZShXZWJDb3JlOjpVUkwgdXJsLCBXZWJDb3JlOjpVUkwgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0
LCBpbnQ2NF90IGVuZCkKICAgICBVbnJlZ2lzdGVyQmxvYlVSTChXZWJDb3JlOjpVUkwgdXJsKQog
ICAgIEJsb2JTaXplKFdlYkNvcmU6OlVSTCB1cmwpIC0+ICh1aW50NjRfdCByZXN1bHRTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3Ry
eVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0
cnlQcm94eS5jcHAKaW5kZXggODI2OTA5NS4uYzk3ZDQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCkBAIC01
Nyw2ICs1NywxMSBAQCB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMKQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZyb21VUkwodXJsLCBz
cmNVUkwpLCAwKTsKIH0KIAordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJM
T3B0aW9uYWxseUZpbGVCYWNrZWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBj
b25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxl
QmFja2VkKHVybCwgc3JjVVJMLCBmaWxlQmFja2VkUGF0aCksIDApOworfQorCiB2b2lkIEJsb2JS
ZWdpc3RyeVByb3h5Ojp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpVbnJlZ2lzdGVy
QmxvYlVSTCh1cmwpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgKaW5kZXggYzdiMzM3Ny4uZjM5ZDZiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVBy
b3h5LmgKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxv
YlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVm
ZXJlbmNlPiYmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6Qmxv
YlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNy
Y1VSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJh
Y2tlZChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgY29u
c3QgU3RyaW5nJiBmaWxlQmFja2VkUGF0aCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1bnJlZ2lzdGVy
QmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlZ2lzdGVy
QmxvYlVSTEZvclNsaWNlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYg
c3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwogICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBibG9iU2l6ZShjb25zdCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276365</attachid>
            <date>2016-04-13 16:48:08 -0700</date>
            <delta_ts>2016-04-13 17:54:03 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>57882</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NmE4NDE2Li44MjU3ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDE2LTA0LTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb2Rlcm4gSURCIChCbG9iIHN1cHBvcnQpOiBTdXBwb3J0IHJldHJpZXZpbmcgQmxvYnMg
ZnJvbSBJREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTYzNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQsIGN1cnJl
bnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dpbmc6
CisgICAgICAgIC0gUHVsbHMgQmxvYlVSTHMgYW5kIHN0b3JlZCBmaWxlbmFtZXMgb3V0IG9mIElE
QiB3aGVuZXZlciBhbiBJREIgcmVjb3JkIGlzIGZldGNoZWQuCisgICAgICAgIC0gQWRkcyB0aG9z
ZSBVUkxzIGFuZCBmaWxlbmFtZXMgdG8gSURCVmFsdWUuCisgICAgICAgIC0gVXNlcyBJREJWYWx1
ZSBpbiBtb3JlIHBsYWNlcyBpbnN0ZWFkIG9mIFNoYXJlZEJ1ZmZlci9UaHJlYWRTYWZlQnVmZmVy
LgorICAgICAgICAtIFRlYWNoZXMgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBCbG9iLCBhbmQgRmls
ZSBob3cgdG8gcmVhZCB0aGUgVVJMcyBhbmQgZmlsZW5hbWVzIHdoZW4gdGhleSBleGlzdC4KKyAg
ICAgICAgLSBUZWFjaGVzIHRoZSBCbG9iIHJlZ2lzdHJ5IHRvIHJlZ2lzdGVyIGEgbmV3IHR5cGUg
b2YgQmxvYiB0aGF0IGlzIG5vdCBhICJGaWxlIiBidXQgaXMgYmFja2VkIGJ5IG9uZS4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0UmVzdWx0
OjpJREJHZXRSZXN1bHQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdFRv
U3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
Lmg6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNl
cnZlcik6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZhbHVlOjpJREJWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCVmFsdWUuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUluZGV4Q3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SW5kZXhDdXJzb3I6OmN1cnJlbnREYXRhKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlQ3Vyc29y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmVDdXJz
b3I6OmN1cnJlbnREYXRhKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9y
T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6Y3VycmVudERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJDdXJzb3I6OmludGVybmFs
QWR2YW5jZU9uY2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29y
OjpjdXJyZW50VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJD
dXJzb3I6OmN1cnJlbnRWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6YmFja2luZ1N0b3Jl
KToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQpOgorICAgICAgICAKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFs
dWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKyAgICAg
ICAgCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OmJsb2JGaWxlUGF0aEZvckJsb2JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisKKyAgICAgICAgKiBmaWxlYXBpL0Js
b2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogZmlsZWFw
aS9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpkZXNlcmlhbGl6ZSk6CisKKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisK
KyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dGhyZWFkYWJsZVF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKToKKyAgICAg
ICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKworICAgICAgICAqIHBsYXRm
b3JtL0Nyb3NzVGhyZWFkVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKToKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5Lmg6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxl
QmFja2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaDoK
KwogMjAxNi0wNC0xMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFRleHQgb24gY29tcG9zaXRpbmcgbGF5ZXIgd2l0aCBuZWdhdGl2ZSBsZXR0ZXItc3BhY2luZyBp
cyB0cnVuY2F0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcAppbmRleCA5OTgwODI4Li41YWIwZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIElE
QkN1cnNvcjo6c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQkdldFJl
c3VsdCYgZ2V0UmVzdWx0KQogICAgIGlmIChpc0tleUN1cnNvcigpKQogICAgICAgICBtX2RlcHJl
Y2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07CiAgICAgZWxzZQotICAgICAgICBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29udGV4dCwgZ2V0UmVzdWx0
LnZhbHVlKCkuZGF0YSgpKTsKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0gZGVz
ZXJpYWxpemVJREJWYWx1ZSgqY29udGV4dCwgZ2V0UmVzdWx0LnZhbHVlKCkpOwogCiAgICAgbV9n
b3RWYWx1ZSA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJHZXRSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkdldFJlc3VsdC5oCmluZGV4IGQ1Yjg2ODAuLjY1ZjU0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldFJlc3VsdC5oCkBAIC00MywxMCArNDMsMTAg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBJREJHZXRSZXN1bHQoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBidWZmZXIsIGNvbnN0IElEQktleURhdGEmIGN1cnJlbnRQcmltYXJ5S2V5KQotICAg
ICAgICA6IG1fcHJpbWFyeUtleURhdGEoY3VycmVudFByaW1hcnlLZXkpCisgICAgSURCR2V0UmVz
dWx0KGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5RGF0YSYgY3VycmVudFByaW1h
cnlLZXkpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3ByaW1hcnlLZXlE
YXRhKGN1cnJlbnRQcmltYXJ5S2V5KQogICAgIHsKLSAgICAgICAgZGF0YUZyb21CdWZmZXIoYnVm
ZmVyLmdldCgpKTsKICAgICB9CiAKICAgICBJREJHZXRSZXN1bHQoY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIGJ1ZmZlcikKQEAgLTU0LDYgKzU0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgSURCR2V0UmVzdWx0KElEQlZhbHVlJiYgYnVmZmVyKQorICAgICAgICA6IG1fdmFs
dWUoV1RGTW92ZShidWZmZXIpKQorICAgIHsKKyAgICB9CisKICAgICBJREJHZXRSZXN1bHQoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSkKICAgICAgICAgOiBtX2tleURhdGEoa2V5LmdldCgpKQogICAg
IHsKQEAgLTc4LDggKzgzLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgSURCR2V0
UmVzdWx0KGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQktleURhdGEmIHByaW1h
cnlLZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVCdWZmZXIpCi0gICAg
ICAgIDogbV92YWx1ZSh2YWx1ZUJ1ZmZlcikKKyAgICBJREJHZXRSZXN1bHQoY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleURhdGEsIElEQlZhbHVl
JiYgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICAgICAgLCBt
X2tleURhdGEoa2V5RGF0YSkKKyAgICAgICAgLCBtX3ByaW1hcnlLZXlEYXRhKHByaW1hcnlLZXlE
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBJREJHZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSYg
a2V5RGF0YSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleURhdGEsIGNvbnN0IElEQlZhbHVl
JiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fa2V5RGF0YShr
ZXlEYXRhKQogICAgICAgICAsIG1fcHJpbWFyeUtleURhdGEocHJpbWFyeUtleURhdGEpCiAgICAg
ewpAQCAtOTcsNyArMTA5LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgSURCR2V0UmVzdWx0Jik7CiAKIHByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkYXRhRnJvbUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsK
KyAgICB2b2lkIGRhdGFGcm9tQnVmZmVyKFNoYXJlZEJ1ZmZlciYpOwogCiAgICAgSURCVmFsdWUg
bV92YWx1ZTsKICAgICBJREJLZXlEYXRhIG1fa2V5RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggZmU2OTUwYi4uYzRkZjkwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAK
QEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBu
dW1iZXIpCiAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1ZShudW1iZXIp
KSk7CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3ZvaWQgSURCUmVxdWVzdDo6c2V0
UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQogewogICAgIExP
RyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSIpOwog
CkBAIC0zNDksOCArMzQ5LDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVy
ZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXQKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZh
bHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7Ci0gICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVlKSk7CisgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlKCpjb250ZXh0
LCB2YWx1ZSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHNjcmlwdFZh
bHVlKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGUxOTAy
M2IuLmQwYzA1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY2xhc3MgSURCSW5kZXg7CiBjbGFzcyBJREJLZXlE
YXRhOwogY2xhc3MgSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBJREJSZXN1bHREYXRhOworY2xhc3Mg
SURCVmFsdWU7CiBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAogbmFtZXNwYWNlIElEQkNs
aWVudCB7CkBAIC05OCw3ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UmVzdWx0KGNv
bnN0IElEQktleURhdGEqKTsKICAgICB2b2lkIHNldFJlc3VsdCh1aW50NjRfdCk7Ci0gICAgdm9p
ZCBzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYp
OworICAgIHZvaWQgc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURCVmFsdWUmKTsK
ICAgICB2b2lkIHNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CiAKICAgICBJREJBbnkqIG1vZGVyblJl
c3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNTYxNTYzYjIuLjQ5
Yjg1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHRE
YQogICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLnZhbHVlKCkuZGF0YSgpLmRh
dGEoKSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVz
dWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXF1ZXN0
LnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkudmFsdWUo
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmlu
ZWQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1
ZS5jcHAKaW5kZXggNTFjYThlYTkuLjlmYTYyNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAKQEAgLTU0LDYgKzU0LDEzIEBAIElEQlZhbHVlOjpJ
REJWYWx1ZShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nCiB7CiB9CiAKK0lEQlZhbHVlOjpJREJWYWx1ZShjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgdmFsdWUsIFZlY3RvcjxTdHJpbmc+JiYgYmxvYlVSTHMsIFZlY3RvcjxTdHJp
bmc+JiYgYmxvYkZpbGVQYXRocykKKyAgICA6IG1fZGF0YSh2YWx1ZSkKKyAgICAsIG1fYmxvYlVS
THMoV1RGTW92ZShibG9iVVJMcykpCisgICAgLCBtX2Jsb2JGaWxlUGF0aHMoV1RGTW92ZShibG9i
RmlsZVBhdGhzKSkKK3sKK30KKwogSURCVmFsdWU6OklEQlZhbHVlKGNvbnN0IFRocmVhZFNhZmVE
YXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKICAgICA6IG1fZGF0YSh2YWx1ZSkKICAgICAs
IG1fYmxvYlVSTHMoYmxvYlVSTHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmFsdWUuaAppbmRleCAxOThjNDQzLi40M2VjNGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmgKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAg
IElEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpOwogICAgIElEQlZhbHVlKGNv
bnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CiAgICAgSURCVmFsdWUoY29uc3QgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocyk7CisgICAgSURCVmFsdWUoY29uc3QgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImLCBWZWN0b3I8U3RyaW5nPiYmIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5nPiYm
IGJsb2JGaWxlUGF0aHMpOwogICAgIElEQlZhbHVlKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YmxvYkZpbGVQYXRocyk7CiAKICAgICBJREJWYWx1ZSBpc29sYXRlZENvcHkoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
bmRleEN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SW5kZXhDdXJzb3IuY3BwCmluZGV4IGZlYzgxMDYuLjJjNzM4OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJbmRleEN1cnNv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUluZGV4Q3Vyc29yLmNwcApAQCAtNzQsOCArNzQsMTAgQEAgdm9pZCBNZW1vcnlJbmRleEN1cnNv
cjo6Y3VycmVudERhdGEoSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCiAKICAgICBpZiAobV9pbmZv
LmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpCiAgICAgICAg
IGdldFJlc3VsdCA9IHsgbV9jdXJyZW50S2V5LCBtX2N1cnJlbnRQcmltYXJ5S2V5IH07Ci0gICAg
ZWxzZQotICAgICAgICBnZXRSZXN1bHQgPSB7IG1fY3VycmVudEtleSwgbV9jdXJyZW50UHJpbWFy
eUtleSwgbV9pbmRleC5vYmplY3RTdG9yZSgpLnZhbHVlRm9yS2V5KG1fY3VycmVudFByaW1hcnlL
ZXkpIH07CisgICAgZWxzZSB7CisgICAgICAgIElEQlZhbHVlIHZhbHVlID0geyBtX2luZGV4Lm9i
amVjdFN0b3JlKCkudmFsdWVGb3JLZXkobV9jdXJyZW50UHJpbWFyeUtleSksIHsgfSwgeyB9IH07
CisgICAgICAgIGdldFJlc3VsdCA9IHsgbV9jdXJyZW50S2V5LCBtX2N1cnJlbnRQcmltYXJ5S2V5
LCBXVEZNb3ZlKHZhbHVlKSB9OworICAgIH0KIH0KIAogdm9pZCBNZW1vcnlJbmRleEN1cnNvcjo6
aXRlcmF0ZShjb25zdCBJREJLZXlEYXRhJiBrZXksIHVpbnQzMl90IGNvdW50LCBJREJHZXRSZXN1
bHQmIGdldFJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZUN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmVDdXJzb3IuY3BwCmluZGV4
IDY3Y2M2OGYuLjdkNTA3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZUN1cnNvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlQ3Vyc29yLmNw
cApAQCAtMTg5LDcgKzE4OSw4IEBAIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmVDdXJzb3I6OmN1cnJl
bnREYXRhKElEQkdldFJlc3VsdCYgZGF0YSkKICAgICB9CiAKICAgICBtX2N1cnJlbnRQb3NpdGlv
bktleSA9ICoqbV9pdGVyYXRvcjsKLSAgICBkYXRhID0geyBtX2N1cnJlbnRQb3NpdGlvbktleSwg
bV9jdXJyZW50UG9zaXRpb25LZXksIG1fb2JqZWN0U3RvcmUudmFsdWVGb3JLZXlSYW5nZShtX2N1
cnJlbnRQb3NpdGlvbktleSkgfTsKKyAgICBJREJWYWx1ZSB2YWx1ZSA9IHsgbV9vYmplY3RTdG9y
ZS52YWx1ZUZvcktleVJhbmdlKG1fY3VycmVudFBvc2l0aW9uS2V5KSwgeyB9LCB7IH0gfTsKKyAg
ICBkYXRhID0geyBtX2N1cnJlbnRQb3NpdGlvbktleSwgbV9jdXJyZW50UG9zaXRpb25LZXksIFdU
Rk1vdmUodmFsdWUpIH07CiB9CiAKIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmVDdXJzb3I6OmluY3Jl
bWVudEZvcndhcmRJdGVyYXRvcihzdGQ6OnNldDxJREJLZXlEYXRhPiYgc2V0LCBjb25zdCBJREJL
ZXlEYXRhJiBrZXksIHVpbnQzMl90IGNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmNwcAppbmRleCBlNzhlYjA1Li4yODJhMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcApAQCAtMTA0OSw3ICsxMDQ5LDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKIAog
ICAgIHdoaWxlICghY3Vyc29yLT5jdXJyZW50S2V5KCkuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0
byYga2V5ID0gY3Vyc29yLT5jdXJyZW50S2V5KCk7Ci0gICAgICAgIGF1dG8gdmFsdWVCdWZmZXIg
PSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3RvcihjdXJzb3ItPmN1cnJlbnRWYWx1ZUJ1
ZmZlcigpKTsKKyAgICAgICAgYXV0byogdmFsdWUgPSBjdXJzb3ItPmN1cnJlbnRWYWx1ZSgpOwor
ICAgICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUJ1ZmZlciA9IHZhbHVlID8gdmFsdWUt
PmRhdGEoKSA6IFRocmVhZFNhZmVEYXRhQnVmZmVyKCk7CiAKICAgICAgICAgSURCRXJyb3IgZXJy
b3IgPSB1cGRhdGVPbmVJbmRleEZvckFkZFJlY29yZChpbmZvLCBrZXksIHZhbHVlQnVmZmVyKTsK
ICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewpAQCAtMTYyNyw2ICsxNjI4LDYwIEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgcmV0dXJuIGVycm9yOwogfQogCitJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQo
aW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0
b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKK3sKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVSZWNv
cmQpOworCisgICAgSGFzaFNldDxTdHJpbmc+IGJsb2JVUkxTZXQ7CisgICAgeworICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBibG9i
VVJMIEZST00gQmxvYlJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVSb3cgPSA/IikpOworICAgICAg
ICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5k
SW50NjQoMSwgb2JqZWN0U3RvcmVSZWNvcmQpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggYmxvYiBVUkxz
IGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBsb29rIHVwIGJsb2JVUkwgcmVjb3JkcyBpbiBvYmplY3Qgc3RvcmUgYnkga2V5IHJhbmdlIikg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxSZXN1bHQgPSBzcWwuc3RlcCgpOworICAg
ICAgICBpZiAoc3FsUmVzdWx0ID09IFNRTElURV9PSyB8fCBzcWxSZXN1bHQgPT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBubyBibG9iVVJMcyBpbiB0aGUgZGF0YWJh
c2UgZm9yIHRoaXMgb2JqZWN0IHN0b3JlIHJlY29yZC4KKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoc3FsUmVzdWx0ID09IFNRTElURV9ST1cpIHsK
KyAgICAgICAgICAgIGJsb2JVUkxTZXQuYWRkKHNxbC5nZXRDb2x1bW5UZXh0KDApKTsKKyAgICAg
ICAgICAgIHNxbFJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3FsUmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBmZXRjaCBibG9iIFVSTHMgZm9yIG9iamVjdCBzdG9yZSByZWNvcmQgKCVpKSAtICVzIiwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGxvb2sgdXAgYmxvYlVSTCByZWNvcmRzIGluIG9iamVjdCBz
dG9yZSBieSBrZXkgcmFuZ2UiKSB9OworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKCFi
bG9iVVJMU2V0LmlzRW1wdHkoKSk7CisgICAgU3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5ID0gZnVs
bERhdGFiYXNlRGlyZWN0b3J5KCk7CisgICAgZm9yIChhdXRvJiBibG9iVVJMIDogYmxvYlVSTFNl
dCkgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVy
YWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBibG9iVVJMID0gPyIpKTsK
KyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
cWwuYmluZFRleHQoMSwgYmxvYlVSTCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBibG9iIGZpbGVuYW1l
IGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBsb29rIHVwIGJsb2JVUkwgcmVjb3JkcyBpbiBvYmplY3Qgc3RvcmUgYnkga2V5IHJhbmdlIikg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWwuc3RlcCgpICE9IFNRTElURV9ST1cpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRW50cnkgZm9yIGJsb2IgZmlsZW5hbWUgZm9yIGJsb2Ig
dXJsICVzIGRvZXMgbm90IGV4aXN0ICglaSkgLSAlcyIsIGJsb2JVUkwudXRmOCgpLmRhdGEoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGxvb2sgdXAgYmxvYlVSTCByZWNvcmRzIGluIG9iamVjdCBz
dG9yZSBieSBrZXkgcmFuZ2UiKSB9OworICAgICAgICB9CisKKyAgICAgICAgYmxvYlVSTHMuYXBw
ZW5kKGJsb2JVUkwpOworCisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHNxbC5nZXRDb2x1bW5U
ZXh0KDApOworICAgICAgICBibG9iRmlsZVBhdGhzLmFwcGVuZChwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGZpbGVOYW1lKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHsgfTsKK30KKwogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIElEQkdldFJl
c3VsdCYgcmVzdWx0VmFsdWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Z2V0UmVjb3JkIC0ga2V5IHJhbmdlICVzLCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0
LCBrZXlSYW5nZS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJRCk7
CkBAIC0xNjU4LDExICsxNzEzLDEzIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAg
IHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiVW5hYmxlIHRvIHNlcmlhbGl6ZSB1cHBlciBJREJLZXkgaW4gbG9va3VwIHJhbmdlIikgfTsK
ICAgICB9CiAKKyAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKKyAgICBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciByZXN1bHRCdWZmZXI7CiAgICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQVNDSUlMaXRlcmFsPiBsb3dlck9wZW5VcHBlck9wZW4oIlNFTEVDVCB2YWx1ZSBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1QoPyBBUyBURVhU
KSBBTkQga2V5IDwgQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJPcGVuVXBwZXJDbG9z
ZWQoIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5E
IGtleSA+IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXk7Iik7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVy
YWw+IGxvd2VyQ2xvc2VkVXBwZXJPcGVuKCJTRUxFQ1QgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBD
QVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyIpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQVNDSUlMaXRlcmFsPiBsb3dlckNsb3NlZFVwcGVyQ2xvc2VkKCJTRUxFQ1Qg
dmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPj0gQ0FT
VCg/IEFTIFRFWFQpIEFORCBrZXkgPD0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJP
cGVuVXBwZXJPcGVuKCJTRUxFQ1QgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmpl
Y3RTdG9yZUlEID0gPyBBTkQga2V5ID4gQ0FTVCg/IEFTIFRFWFQpIEFORCBrZXkgPCBDQVNUKD8g
QVMgVEVYVCkgT1JERVIgQlkga2V5OyIpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQVNDSUlMaXRlcmFsPiBsb3dlck9wZW5VcHBlckNsb3NlZCgiU0VMRUNUIHZhbHVlLCBS
T1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+IENBU1Qo
PyBBUyBURVhUKSBBTkQga2V5IDw9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBrZXk7Iik7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBU0NJSUxpdGVyYWw+IGxvd2VyQ2xv
c2VkVXBwZXJPcGVuKCJTRUxFQ1QgdmFsdWUsIFJPV0lEIEZST00gUmVjb3JkcyBXSEVSRSBvYmpl
Y3RTdG9yZUlEID0gPyBBTkQga2V5ID49IENBU1QoPyBBUyBURVhUKSBBTkQga2V5IDwgQ0FTVCg/
IEFTIFRFWFQpIE9SREVSIEJZIGtleTsiKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEFTQ0lJTGl0ZXJhbD4gbG93ZXJDbG9zZWRVcHBlckNsb3NlZCgiU0VMRUNUIHZhbHVl
LCBST1dJRCBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBD
QVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyIp
OwogCiAgICAgICAgIGNvbnN0IEFTQ0lJTGl0ZXJhbCogcXVlcnkgPSBudWxscHRyOwogCkBAIC0x
NzAzLDkgKzE3NjAsMjAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRSZWNv
cmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICBWZWN0
b3I8dWludDhfdD4gYnVmZmVyOwogICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDAs
IGJ1ZmZlcik7Ci0gICAgICAgIHJlc3VsdFZhbHVlID0gVGhyZWFkU2FmZURhdGFCdWZmZXI6OmFk
b3B0VmVjdG9yKGJ1ZmZlcik7CisgICAgICAgIHJlc3VsdEJ1ZmZlciA9IFRocmVhZFNhZmVEYXRh
QnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOworCisgICAgICAgIHJlY29yZElEID0gc3FsLmdl
dENvbHVtbkludDY0KDEpOwogICAgIH0KIAorICAgIEFTU0VSVChyZWNvcmRJRCk7CisgICAgVmVj
dG9yPFN0cmluZz4gYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHM7CisgICAgYXV0byBlcnJvciA9IGdl
dEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQocmVjb3JkSUQsIGJsb2JVUkxzLCBibG9i
RmlsZVBhdGhzKTsKKyAgICBBU1NFUlQoYmxvYlVSTHMuc2l6ZSgpID09IGJsb2JGaWxlUGF0aHMu
c2l6ZSgpKTsKKworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBlcnJv
cjsKKworICAgIHJlc3VsdFZhbHVlID0geyB7IHJlc3VsdEJ1ZmZlciwgV1RGTW92ZShibG9iVVJM
cyksIFdURk1vdmUoYmxvYkZpbGVQYXRocykgfSB9OwogICAgIHJldHVybiB7IH07CiB9CiAKQEAg
LTE3MzksNyArMTgwNyw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5k
ZXhSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuCiAgICAgICAgIGlmICh0
eXBlID09IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXkpCiAgICAgICAgICAgICBnZXRS
ZXN1bHQgPSB7IGN1cnNvci0+Y3VycmVudFByaW1hcnlLZXkoKSB9OwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBnZXRSZXN1bHQgPSB7IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGN1cnNvci0+Y3Vy
cmVudFZhbHVlQnVmZmVyKCkuZGF0YSgpLCBjdXJzb3ItPmN1cnJlbnRWYWx1ZUJ1ZmZlcigpLnNp
emUoKSksIGN1cnNvci0+Y3VycmVudFByaW1hcnlLZXkoKSB9OworICAgICAgICAgICAgZ2V0UmVz
dWx0ID0geyBjdXJzb3ItPmN1cnJlbnRWYWx1ZSgpID8gKmN1cnNvci0+Y3VycmVudFZhbHVlKCkg
OiBJREJWYWx1ZSgpLCBjdXJzb3ItPmN1cnJlbnRQcmltYXJ5S2V5KCkgfTsKICAgICB9CiAKICAg
ICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGRlMjVhOGIu
LjM1ZDQ5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAgLTg1LDYgKzg1LDgg
QEAgcHVibGljOgogCiAgICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIHRl
bXBvcmFyeUZpbGVIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZW1wb3JhcnlGaWxlSGFuZGxl
cjsgfQogCisgICAgSURCRXJyb3IgZ2V0QmxvYlJlY29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IG9iamVjdFN0b3JlUmVjb3JkLCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3Rv
cjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzKTsKKwogcHJpdmF0ZToKICAgICBTdHJpbmcgZmlsZW5h
bWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRleCA2NDFlNDRkLi44ZGU3Y2MxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
Q3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQ3Vyc29yLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklEQkdldFJl
c3VsdC5oIgogI2luY2x1ZGUgIklEQlNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiU1FMaXRlSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU1FMaXRl
SURCVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRl
ICJTUUxpdGVUcmFuc2FjdGlvbi5oIgpAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgU1FMaXRlSURC
Q3Vyc29yOjpjdXJyZW50RGF0YShJREJHZXRSZXN1bHQmIHJlc3VsdCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IHsgbV9jdXJyZW50S2V5LCBtX2N1cnJlbnRQcmltYXJ5
S2V5LCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3RvcihtX2N1cnJlbnRWYWx1ZUJ1ZmZl
cikgfTsKKyAgICByZXN1bHQgPSB7IG1fY3VycmVudEtleSwgbV9jdXJyZW50UHJpbWFyeUtleSwg
bV9jdXJyZW50VmFsdWUgPyAqbV9jdXJyZW50VmFsdWUgOiBJREJWYWx1ZSgpIH07CiB9CiAKIHN0
YXRpYyBTdHJpbmcgYnVpbGRJbmRleFN0YXRlbWVudChjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJlY3Rpb24pCkBAIC0z
MzcsNiArMzM4LDggQEAgU1FMaXRlSURCQ3Vyc29yOjpBZHZhbmNlUmVzdWx0IFNRTGl0ZUlEQkN1
cnNvcjo6aW50ZXJuYWxBZHZhbmNlT25jZSgpCiAgICAgQVNTRVJUKG1fc3RhdGVtZW50KTsKICAg
ICBBU1NFUlQoIW1fY29tcGxldGVkKTsKIAorICAgIG1fY3VycmVudFZhbHVlID0gbnVsbHB0cjsK
KwogICAgIGludCByZXN1bHQgPSBtX3N0YXRlbWVudC0+c3RlcCgpOwogICAgIGlmIChyZXN1bHQg
PT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpAQCAtMzQ0LDcg
KzM0Nyw3IEBAIFNRTGl0ZUlEQkN1cnNvcjo6QWR2YW5jZVJlc3VsdCBTUUxpdGVJREJDdXJzb3I6
OmludGVybmFsQWR2YW5jZU9uY2UoKQogICAgICAgICAvLyBXaGVuIGEgY3Vyc29yIHJlYWNoZXMg
aXRzIGVuZCwgdGhhdCBpcyBpbmRpY2F0ZWQgYnkgaGF2aW5nIHVuZGVmaW5lZCBrZXlzL3ZhbHVl
cwogICAgICAgICBtX2N1cnJlbnRLZXkgPSBJREJLZXlEYXRhKCk7CiAgICAgICAgIG1fY3VycmVu
dFByaW1hcnlLZXkgPSBJREJLZXlEYXRhKCk7Ci0gICAgICAgIG1fY3VycmVudFZhbHVlQnVmZmVy
LmNsZWFyKCk7CisgICAgICAgIG1fY3VycmVudFZhbHVlID0gbnVsbHB0cjsKIAogICAgICAgICBy
ZXR1cm4gQWR2YW5jZVJlc3VsdDo6U3VjY2VzczsKICAgICB9CkBAIC0zNjcsMTIgKzM3MCwyNSBA
QCBTUUxpdGVJREJDdXJzb3I6OkFkdmFuY2VSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRlcm5h
bEFkdmFuY2VPbmNlKCkKICAgICB9CiAKICAgICBtX3N0YXRlbWVudC0+Z2V0Q29sdW1uQmxvYkFz
VmVjdG9yKDIsIGtleURhdGEpOwotICAgIG1fY3VycmVudFZhbHVlQnVmZmVyID0ga2V5RGF0YTsK
KworICAgIGludDY0X3QgcmVjb3JkSUQgPSBtX3N0YXRlbWVudC0+Z2V0Q29sdW1uSW50NjQoMCk7
CisgICAgQVNTRVJUKHJlY29yZElEKTsKIAogICAgIC8vIFRoZSBwcmltYXJ5S2V5IG9mIGFuIE9i
amVjdFN0b3JlIGN1cnNvciBpcyB0aGUgc2FtZSBhcyBpdHMga2V5LgotICAgIGlmIChtX2luZGV4
SUQgPT0gSURCSW5kZXhJbmZvOjpJbnZhbGlkSWQpCisgICAgaWYgKG1faW5kZXhJRCA9PSBJREJJ
bmRleEluZm86OkludmFsaWRJZCkgewogICAgICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbV9j
dXJyZW50S2V5OwotICAgIGVsc2UgeworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGJsb2JVUkxz
LCBibG9iRmlsZVBhdGhzOworICAgICAgICBhdXRvIGVycm9yID0gbV90cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlKCkuZ2V0QmxvYlJlY29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChyZWNvcmRJRCwg
YmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMpOworICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7
CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBmZXRjaCBibG9iIHJlY29yZHMgZnJv
bSBkYXRhYmFzZSB3aGlsZSBhZHZhbmNpbmcgY3Vyc29yIik7CisgICAgICAgICAgICBtX2NvbXBs
ZXRlZCA9IHRydWU7CisgICAgICAgICAgICBtX2Vycm9yZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIEFkdmFuY2VSZXN1bHQ6OkZhaWx1cmU7CisgICAgICAgIH0KKworICAgICAgICBtX2N1
cnJlbnRWYWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCVmFsdWU+KFRocmVhZFNhZmVEYXRhQnVm
ZmVyOjphZG9wdFZlY3RvcihrZXlEYXRhKSwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlEYXRhKGtleURhdGEuZGF0
YSgpLCBrZXlEYXRhLnNpemUoKSwgbV9jdXJyZW50UHJpbWFyeUtleSkpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGRlc2VyaWFsaXplIHZhbHVlIGRhdGEgZnJvbSBkYXRhYmFz
ZSB3aGlsZSBhZHZhbmNpbmcgaW5kZXggY3Vyc29yIik7CiAgICAgICAgICAgICBtX2NvbXBsZXRl
ZCA9IHRydWU7CkBAIC0zODMsNyArMzk5LDcgQEAgU1FMaXRlSURCQ3Vyc29yOjpBZHZhbmNlUmVz
dWx0IFNRTGl0ZUlEQkN1cnNvcjo6aW50ZXJuYWxBZHZhbmNlT25jZSgpCiAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBvYmplY3RTdG9yZVN0YXRlbWVudChtX3N0YXRlbWVudC0+ZGF0YWJhc2UoKSwg
IlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQpIGFu
ZCBvYmplY3RTdG9yZUlEID0gPzsiKTsKIAogICAgICAgICBpZiAob2JqZWN0U3RvcmVTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgb2JqZWN0U3RvcmVTdGF0
ZW1lbnQuYmluZEJsb2IoMSwgbV9jdXJyZW50VmFsdWVCdWZmZXIuZGF0YSgpLCBtX2N1cnJlbnRW
YWx1ZUJ1ZmZlci5zaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgb2JqZWN0U3Rv
cmVTdGF0ZW1lbnQuYmluZEJsb2IoMSwga2V5RGF0YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpKSAh
PSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IG9iamVjdFN0b3JlU3RhdGVtZW50LmJpbmRJbnQ2
NCgyLCBtX29iamVjdFN0b3JlSUQpICE9IFNRTElURV9PSykgewogICAgICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgY3JlYXRlIGluZGV4IGN1cnNvciBzdGF0ZW1lbnQgaW50byBvYmplY3Qg
c3RvcmUgcmVjb3JkcyAoJWkpICclcyciLCBtX3N0YXRlbWVudC0+ZGF0YWJhc2UoKS5sYXN0RXJy
b3IoKSwgbV9zdGF0ZW1lbnQtPmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwogICAgICAgICAg
ICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpAQCAtMzkzLDkgKzQwOSwxMCBAQCBTUUxpdGVJREJDdXJz
b3I6OkFkdmFuY2VSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEFkdmFuY2VPbmNlKCkK
IAogICAgICAgICBpbnQgcmVzdWx0ID0gb2JqZWN0U3RvcmVTdGF0ZW1lbnQuc3RlcCgpOwogCi0g
ICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgIG9iamVjdFN0b3Jl
U3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigwLCBtX2N1cnJlbnRWYWx1ZUJ1ZmZlcik7
Ci0gICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBpZiAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlU3RhdGVtZW50
LmdldENvbHVtbkJsb2JBc1ZlY3RvcigwLCBrZXlEYXRhKTsKKyAgICAgICAgICAgIG1fY3VycmVu
dFZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxJREJWYWx1ZT4oVGhyZWFkU2FmZURhdGFCdWZmZXI6
OmFkb3B0VmVjdG9yKGtleURhdGEpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHJlY29y
ZCB3ZSdyZSB0cnlpbmcgdG8gcmV0cmlldmUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBvYmpl
Y3Qgc3RvcmUuCiAgICAgICAgICAgICAvLyBTa2lwIG92ZXIgaXQuCiAgICAgICAgICAgICByZXR1
cm4gQWR2YW5jZVJlc3VsdDo6U2hvdWxkQWR2YW5jZUFnYWluOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5oCmlu
ZGV4IGE4NDE5MjQuLjcwYTk1MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmgKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURCVmFsdWUu
aCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJREJLZXlEYXRh
JiBjdXJyZW50S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CiAgICAgY29uc3Qg
SURCS2V5RGF0YSYgY3VycmVudFByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQ
cmltYXJ5S2V5OyB9Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjdXJyZW50VmFsdWVCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZUJ1ZmZlcjsgfQorICAgIElEQlZhbHVl
KiBjdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZS5nZXQoKTsgfQog
CiAgICAgYm9vbCBhZHZhbmNlKHVpbnQ2NF90IGNvdW50KTsKICAgICBib29sIGl0ZXJhdGUoY29u
c3QgSURCS2V5RGF0YSYgdGFyZ2V0S2V5KTsKQEAgLTEwMiw3ICsxMDMsNyBAQCBwcml2YXRlOgog
CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRLZXk7CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQ
cmltYXJ5S2V5OwotICAgIFZlY3Rvcjx1aW50OF90PiBtX2N1cnJlbnRWYWx1ZUJ1ZmZlcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SURCVmFsdWU+IG1fY3VycmVudFZhbHVlOwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9zdGF0ZW1lbnQ7CiAgICAgYm9vbCBtX3N0YXRl
bWVudE5lZWRzUmVzZXQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAppbmRl
eCBmYmZmYjg4Li4xMDI3ZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaApAQCAtNzAs
NiArNzAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpblByb2dyZXNzKCkgY29uc3Q7CiAKICAgICBT
UUxpdGVUcmFuc2FjdGlvbiogc3FsaXRlVHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Nx
bGl0ZVRyYW5zYWN0aW9uLmdldCgpOyB9CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlJiBiYWNr
aW5nU3RvcmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZTsgfQogCiAgICAgdm9pZCBhZGRCbG9i
RmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmVkRmls
ZW5hbWUpOwogICAgIHZvaWQgYWRkUmVtb3ZlZEJsb2JGaWxlKGNvbnN0IFN0cmluZyYgcmVtb3Zl
ZEZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmlu
ZGV4IDI5ZjFkNDYuLjhhM2JjNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpTZW5kUmVzdWx0IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogICAg
ICAgICBBU1NFUlQocGVlcik7CiAKLSAgICAgICAgcGVlci0+c2VuZChCbG9iOjpkZXNlcmlhbGl6
ZShjYXB0dXJlZFVSTC51cmwoKSwgY2FwdHVyZWRUeXBlLnN0cmluZygpLCBzaXplKSk7CisgICAg
ICAgIHBlZXItPnNlbmQoQmxvYjo6ZGVzZXJpYWxpemUoY2FwdHVyZWRVUkwudXJsKCksIGNhcHR1
cmVkVHlwZS5zdHJpbmcoKSwgc2l6ZSwgeyB9KSk7CiAgICAgfSk7CiAKICAgICBSZWY8QnJpZGdl
PiBwcm90ZWN0KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggNjcxN2IxZS4uYmNmZmQ4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlEYXRhLmgi
CiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQlZhbHVlLmgiCiAjaW5jbHVk
ZSAiSW5kZXhLZXkuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCkBAIC00MjgsMTggKzQyOSw3IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSCiAgICAg
cmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CiB9CiAK
LURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEpCi17Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKCZjb250ZXh0KTsKLSAgICBhdXRv
KiBleGVjU3RhdGUgPSBzdGF0ZS5leGVjKCk7Ci0KLSAgICBpZiAoIWV4ZWNTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7Ci0KLSAgICByZXR1cm4gRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUoZXhlY1N0YXRlLT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0
YVRvSlNWYWx1ZSgqZXhlY1N0YXRlLCB2YWx1ZURhdGEpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIGRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQorc3RhdGljIEpTQzo6SlNWYWx1ZSBk
ZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgY29uc3QgVmVjdG9yPFN0cmluZz4g
YmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMpCiB7CiAgICAgaWYg
KCF2YWx1ZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTQ1
MCw3ICs0NDAsNyBAQCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFRocmVhZAogICAgICAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+KGRhdGEpKTsKIAogICAgICAg
ICBleGVjLnZtKCkuYXBpTG9jaygpLmxvY2soKTsKLSAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXpl
ZFZhbHVlLT5kZXNlcmlhbGl6ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAs
IE5vblRocm93aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlh
bGl6ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIE5vblRocm93aW5nLCBi
bG9iVVJMcywgYmxvYkZpbGVQYXRocyk7CiAgICAgICAgIGV4ZWMudm0oKS5hcGlMb2NrKCkudW5s
b2NrKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwpAQCAtNDU4LDYg
KzQ0OCwzNCBAQCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFRocmVhZAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2
YWx1ZURhdGEpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKCZjb250ZXh0KTsKKyAgICBh
dXRvKiBleGVjU3RhdGUgPSBzdGF0ZS5leGVjKCk7CisKKyAgICBpZiAoIWV4ZWNTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IGV4ZWNTdGF0ZS0+dm0oKSwgZGVzZXJp
YWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwgdmFsdWVEYXRhKSB9OworfQor
CitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKK3sKKyAgICBET01S
ZXF1ZXN0U3RhdGUgc3RhdGUoJmNvbnRleHQpOworICAgIGF1dG8qIGV4ZWNTdGF0ZSA9IHN0YXRl
LmV4ZWMoKTsKKworICAgIGlmICghZXhlY1N0YXRlKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIHsgZXhlY1N0YXRlLT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNW
YWx1ZSgqZXhlY1N0YXRlLCB2YWx1ZS5kYXRhKCksIHZhbHVlLmJsb2JVUkxzKCksIHZhbHVlLmJs
b2JGaWxlUGF0aHMoKSkgfTsKK30KKworSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVE
YXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciYgdmFsdWVEYXRhKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15VVJMcywgZHVtbXlG
aWxlUGF0aHM7CisgICAgcmV0dXJuIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGV4
ZWMsIHZhbHVlRGF0YSwgZHVtbXlVUkxzLCBkdW1teUZpbGVQYXRocyk7Cit9CisKIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRl
KiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIsIGJvb2wg
a2V5SXNEZWZpbmVkKQogewogICAgIGlmIChwcnBCdWZmZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBjMTcwZDE2Li4xMTUw
YmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIElEQkluZGV4SW5mbzsKIGNsYXNzIElEQktl
eTsKIGNsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJLZXlQYXRoOworY2xhc3MgSURCVmFsdWU7
CiBjbGFzcyBJbmRleEtleTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFRocmVhZFNhZmVE
YXRhQnVmZmVyOwpAQCAtNTcsNiArNTgsNyBAQCBib29sIGNhbkluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0CiAKIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRl
KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKK0RlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IElEQlZhbHVlJik7CiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
QnVmZmVyKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBr
ZXlJc0RlZmluZWQpOwogV0VCQ09SRV9FWFBPUlQgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSosIFZlY3Rvcjx1aW50OF90PiYm
LCBib29sIGtleUlzRGVmaW5lZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDVlODM2ZDAuLjg3MDAyZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtMTQ4MiwxMyArMTQ4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBz
dHI7CiAgICAgfQogCi0gICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBt
ZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50
c0FycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJl
c3VsdCBkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50
c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
YnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+IGJsb2JGaWxlUGF0aHMpCiAgICAgewogICAgICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoanNOdWxsKCksIFVuc3BlY2lmaWVkRXJy
b3IpOwotICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIoZXhlYywgZ2xvYmFs
T2JqZWN0LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyKTsK
KyAgICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVS
THMsIGJsb2JGaWxlUGF0aHMpOwogICAgICAgICBpZiAoIWRlc2VyaWFsaXplci5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBWYWxpZGF0aW9u
RXJyb3IpOwogICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCk7CkBAIC0x
NTMzLDkgKzE1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICB9
OwogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5
KiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250
ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZl
cikKKyAgICBDbG9uZURlc2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGJ1ZmZlcikKICAgICAgICAgOiBDbG9uZUJhc2UoZXhlYykKICAgICAgICAgLCBtX2dsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3QpCiAgICAgICAgICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3QtPmluaGVyaXRzKEpTRE9NR2xvYmFsT2JqZWN0OjppbmZvKCkpKQpAQCAtMTU1MCw2
ICsxNTQ2LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZG
OwogICAgIH0KIAorICAgIENsb25lRGVzZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMpCisgICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMp
CisgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQorICAgICAgICAsIG1faXNE
T01HbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT5pbmhlcml0cyhKU0RPTUdsb2JhbE9iamVjdDo6
aW5mbygpKSkKKyAgICAgICAgLCBtX3B0cihidWZmZXIuZGF0YSgpKQorICAgICAgICAsIG1fZW5k
KGJ1ZmZlci5kYXRhKCkgKyBidWZmZXIuc2l6ZSgpKQorICAgICAgICAsIG1fdmVyc2lvbigweEZG
RkZGRkZGKQorICAgICAgICAsIG1fbWVzc2FnZVBvcnRzKG1lc3NhZ2VQb3J0cykKKyAgICAgICAg
LCBtX2FycmF5QnVmZmVyQ29udGVudHMoYXJyYXlCdWZmZXJDb250ZW50cykKKyAgICAgICAgLCBt
X2FycmF5QnVmZmVycyhhcnJheUJ1ZmZlckNvbnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+
c2l6ZSgpIDogMCkKKyAgICAgICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQorICAgICAgICAsIG1f
YmxvYkZpbGVQYXRocyhibG9iRmlsZVBhdGhzKQorICAgIHsKKyAgICAgICAgaWYgKCFyZWFkKG1f
dmVyc2lvbikpCisgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOworICAgIH0KKwog
ICAgIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZSgpOwogCiAgICAgdm9pZCB0aHJv
d1ZhbGlkYXRpb25FcnJvcigpCkBAIC0xNzczLDggKzE3ODYsMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgQ2FjaGVkU3RyaW5nUmVmIG5hbWU7CiAgICAgICAgIGlmICghcmVhZFN0cmluZ0RhdGEobmFt
ZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBJZiB0aGUgYmxvYiBVUkwg
Zm9yIHRoaXMgZmlsZSBoYXMgYW4gYXNzb2NpYXRlZCBibG9iIGZpbGUgcGF0aCwgcHJlZmVyIHRo
YXQgb25lIG92ZXIgdGhlICJidWlsdC1pbiIgcGF0aC4KKyAgICAgICAgU3RyaW5nIGZpbGVQYXRo
ID0gYmxvYkZpbGVQYXRoRm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKTsKKyAgICAgICAgaWYgKGZp
bGVQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZpbGVQYXRoID0gcGF0aC0+c3RyaW5nKCk7
CisKICAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBmaWxlID0g
RmlsZTo6ZGVzZXJpYWxpemUocGF0aC0+c3RyaW5nKCksIFVSTChVUkwoKSwgdXJsLT5zdHJpbmco
KSksIHR5cGUtPnN0cmluZygpLCBuYW1lLT5zdHJpbmcoKSk7CisgICAgICAgICAgICBmaWxlID0g
RmlsZTo6ZGVzZXJpYWxpemUoZmlsZVBhdGgsIFVSTChVUkwoKSwgdXJsLT5zdHJpbmcoKSksIHR5
cGUtPnN0cmluZygpLCBuYW1lLT5zdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMjI3Myw3ICsyMjkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRKU1Zh
bHVlKEJsb2I6OmRlc2VyaWFsaXplKFVSTChVUkwoKSwgdXJsLT5zdHJpbmcoKSksIHR5cGUtPnN0
cmluZygpLCBzaXplKS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShCbG9i
OjpkZXNlcmlhbGl6ZShVUkwoVVJMKCksIHVybC0+c3RyaW5nKCkpLCB0eXBlLT5zdHJpbmcoKSwg
c2l6ZSwgYmxvYkZpbGVQYXRoRm9yQmxvYlVSTCh1cmwtPnN0cmluZygpKSkuZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nVGFnOiB7CiAgICAgICAgICAgICBDYWNoZWRTdHJp
bmdSZWYgY2FjaGVkU3RyaW5nOwpAQCAtMjQwNSw2ICsyNDI0LDE5IEBAIHByaXZhdGU6CiAgICAg
TWVzc2FnZVBvcnRBcnJheSogbV9tZXNzYWdlUG9ydHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50
c0FycmF5KiBtX2FycmF5QnVmZmVyQ29udGVudHM7CiAgICAgQXJyYXlCdWZmZXJBcnJheSBtX2Fy
cmF5QnVmZmVyczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOworICAgIFZlY3RvcjxT
dHJpbmc+IG1fYmxvYkZpbGVQYXRoczsKKworICAgIFN0cmluZyBibG9iRmlsZVBhdGhGb3JCbG9i
VVJMKGNvbnN0IFN0cmluZyYgYmxvYlVSTCkKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gMDsK
KyAgICAgICAgZm9yICg7IGkgPCBtX2Jsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAobV9ibG9iVVJMc1tpXSA9PSBibG9iVVJMKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGkgPCBtX2Jsb2JVUkxzLnNpemUoKSA/IG1fYmxv
YkZpbGVQYXRoc1tpXSA6IFN0cmluZygpOworICAgIH0KIH07CiAKIERlc2VyaWFsaXphdGlvblJl
c3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQpAQCAtMjY4MywxMSArMjcxNSwx
NSBAQCBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1N0cmluZygpCiAgICAgcmV0dXJu
IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyhtX2RhdGEpOwogfQogCi1KU1Zh
bHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXph
dGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCitKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJv
ck1vZGUgdGhyb3dFeGNlcHRpb25zKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15QmxvYnMs
IGR1bW15UGF0aHM7CisgICAgcmV0dXJuIGRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bWVzc2FnZVBvcnRzLCB0aHJvd0V4Y2VwdGlvbnMsIGR1bW15QmxvYnMsIGR1bW15UGF0aHMpOwor
fQorCitKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNZXNzYWdlUG9ydEFycmF5KiBt
ZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmls
ZVBhdGhzKQogewotICAgIERlc2VyaWFsaXphdGlvblJlc3VsdCByZXN1bHQgPSBDbG9uZURlc2Vy
aWFsaXplcjo6ZGVzZXJpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSwgbV9kYXRhKTsKKyAgICBE
ZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFs
aXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVu
dHNBcnJheS5nZXQoKSwgbV9kYXRhLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocyk7CiAgICAgaWYg
KHRocm93RXhjZXB0aW9ucyA9PSBUaHJvd2luZykKICAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlv
bklmU2VyaWFsaXphdGlvbkZhaWxlZChleGVjLCByZXN1bHQuc2Vjb25kKTsKICAgICByZXR1cm4g
cmVzdWx0LmZpcnN0ID8gcmVzdWx0LmZpcnN0IDoganNOdWxsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDE1Y2JmOGEu
LmJjZDJkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbnVsbFZhbHVlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgTWVzc2FnZVBvcnRBcnJheSosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJv
d2luZyk7CisgICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBibG9iRmlsZVBhdGhzKTsKIAogICAgIHN0YXRpYyB1aW50MzJfdCB3aXJlRm9ybWF0VmVyc2lv
bigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAppbmRleCBiMmYyMjgyLi5kOWNiYjdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQmxvYi5jcHAKQEAgLTk1LDEyICs5NSwxNSBAQCBCbG9iOjpCbG9iKFZlY3Rv
cjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogICAgIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBXVEZN
b3ZlKGJsb2JQYXJ0cyksIGNvbnRlbnRUeXBlKTsKIH0KIAotQmxvYjo6QmxvYihEZXNlcmlhbGl6
YXRpb25Db250cnVjdG9yLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBs
b25nIGxvbmcgc2l6ZSkKK0Jsb2I6OkJsb2IoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciwgY29u
c3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0
IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpCiAgICAgOiBtX3R5cGUobm9ybWFsaXplZENvbnRlbnRU
eXBlKHR5cGUpKQogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgbV9pbnRlcm5hbFVSTCA9IEJs
b2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKG51bGxwdHIsIG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAgaWYg
KGZpbGVCYWNrZWRQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKG51bGxwdHIsIG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CisgICAg
ZWxzZQorICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkxPcHRp
b25hbGx5RmlsZUJhY2tlZChtX2ludGVybmFsVVJMLCBzcmNVUkwsIGZpbGVCYWNrZWRQYXRoKTsK
IH0KIAogQmxvYjo6QmxvYihjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgZW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0Jsb2IuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCmluZGV4IDkz
MzMzZGMuLjQ5YjZkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCkBAIC01OCwxMCArNTgsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iKFdURk1vdmUoYmxvYlBh
cnRzKSwgY29udGVudFR5cGUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmPEJsb2I+IGRlc2Vy
aWFsaXplKGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBz
aXplKQorICAgIHN0YXRpYyBSZWY8QmxvYj4gZGVzZXJpYWxpemUoY29uc3QgVVJMJiBzcmNVUkws
IGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUJh
Y2tlZFBhdGgpCiAgICAgewogICAgICAgICBBU1NFUlQoQmxvYjo6aXNOb3JtYWxpemVkQ29udGVu
dFR5cGUodHlwZSkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCbG9iKGRlc2VyaWFs
aXphdGlvbkNvbnRydWN0b3IsIHNyY1VSTCwgdHlwZSwgc2l6ZSkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCbG9iKGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIHNyY1VSTCwgdHlw
ZSwgc2l6ZSwgZmlsZUJhY2tlZFBhdGgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5CbG9iKCk7
CkBAIC05OCw3ICs5OCw3IEBAIHByb3RlY3RlZDoKICAgICBCbG9iKFVuaW5pdGlhbGl6ZWRDb250
cnVjdG9yKTsKIAogICAgIGVudW0gRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciB7IGRlc2VyaWFs
aXphdGlvbkNvbnRydWN0b3IgfTsKLSAgICBCbG9iKERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3Is
IGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKTsK
KyAgICBCbG9iKERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYgc3JjVVJMLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNr
ZWRQYXRoKTsKIAogICAgIC8vIEZvciBzbGljaW5nLgogICAgIEJsb2IoY29uc3QgVVJMJiBzcmNV
UkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAppbmRleCA5NGIyMjg4Li44YmJhODdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgRmlsZTo6RmlsZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZU92ZXJyaWRlKQogfQogCiBGaWxlOjpGaWxl
KERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogQmxv
YihkZXNlcmlhbGl6YXRpb25Db250cnVjdG9yLCB1cmwsIHR5cGUsIC0xKQorICAgIDogQmxvYihk
ZXNlcmlhbGl6YXRpb25Db250cnVjdG9yLCB1cmwsIHR5cGUsIC0xLCBwYXRoKQogICAgICwgbV9w
YXRoKHBhdGgpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCmluZGV4IDcxODgwY2EuLmE1NDUxYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcApAQCAtMzUsMTAgKzM1LDEyIEBACiAjaW5jbHVkZSAiQmxvYlBhcnQuaCIKICNpbmNsdWRl
ICJCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDxtdXRl
eD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CkBAIC05OCw2ICsxMDAsMTcgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJsb2JV
cmxPcmlnaW5NYXA+JiBvcmlnaW5NYXAoKQogICAgIHJldHVybiAqbWFwOwogfQogCitzdGF0aWMg
TWVzc2FnZVF1ZXVlPENyb3NzVGhyZWFkVGFzaz4mIHRocmVhZGFibGVRdWV1ZSgpCit7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBNZXNzYWdlUXVldWU8
Q3Jvc3NUaHJlYWRUYXNrPiogcXVldWU7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKKyAgICAgICAgcXVldWUgPSBuZXcgTWVzc2FnZVF1ZXVlPENyb3NzVGhyZWFkVGFzaz47Cisg
ICAgfSk7CisKKyAgICByZXR1cm4gKnF1ZXVlOworfQorCiB2b2lkIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCkBAIC0xNDQsNiArMTU3LDIxIEBAIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVn
aXN0ZXJCbG9iVVJMKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFVSTCYKICAgICB9CiB9
CiAKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxs
eUZpbGVCYWNrZWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJp
bmcmIGZpbGVCYWNrZWRQYXRoKQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAg
YmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQodXJsLCBz
cmNVUkwsIGZpbGVCYWNrZWRQYXRoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGhyZWFkYWJsZVF1
ZXVlKCkuYXBwZW5kKGNyZWF0ZUNyb3NzVGhyZWFkVGFzayhUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
OjpyZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZCwgdXJsLCBzcmNVUkwsIGZpbGVC
YWNrZWRQYXRoKSk7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbXSB7CisgICAgICAgICAg
ICBhdXRvIHRhc2sgPSB0aHJlYWRhYmxlUXVldWUoKS50cnlHZXRNZXNzYWdlKCk7CisgICAgICAg
ICAgICBBU1NFUlQodGFzayk7CisgICAgICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAg
ICAgICB9KTsKKyAgICB9Cit9CisKIHZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiBuZXdVUkwsIGNvbnN0IFVSTCYgc3JjVVJMLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaApp
bmRleCA4ZWM5NzY0Li45NzA5OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1Ro
cmVhZGFibGVCbG9iUmVnaXN0cnkuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKGNvbnN0IFVSTCYsIGNvbnN0
IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKTsKICAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIG5ld1VSTCwgY29uc3QgVVJM
JiBzcmNVUkwsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCk7CiAgICAgc3RhdGljIHZv
aWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ3Jvc3NUaHJlYWRUYXNrLmgKaW5kZXggZjhkZWM0NC4uYjgyM2JjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRUYXNrLmgKQEAgLTYyLDYgKzYyLDE3IEBAIHB1Ymxp
YzoKICAgICB9CiB9OwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorY2xhc3Mg
Q3Jvc3NUaHJlYWRUYXNrU3RhdGljSW1wbCBmaW5hbCA6IHB1YmxpYyBDcm9zc1RocmVhZFRhc2sg
eworcHVibGljOgorICAgIENyb3NzVGhyZWFkVGFza1N0YXRpY0ltcGwodm9pZCAoKm1ldGhvZCko
QXJndW1lbnRzLi4uKSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
bV90YXNrRnVuY3Rpb24gPSBbbWV0aG9kLCBhcmd1bWVudHMuLi5dIHsKKyAgICAgICAgICAgIG1l
dGhvZChhcmd1bWVudHMuLi4pOworICAgICAgICB9OworICAgIH0KK307CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiBjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soCiAgICAgVCYgY2FsbGVlLApAQCAtMTEzLDYgKzEyNCwyMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiBjcmVhdGVDcm9zc1RocmVhZFRhc2soCiAgICAgICAgIFdl
YkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBN
UDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+CitzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJl
YWRUYXNrPiBjcmVhdGVDcm9zc1RocmVhZFRhc2soCisgICAgdm9pZCAoKm1ldGhvZCkoTVAxLCBN
UDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFt
ZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNrU3RhdGljSW1wbDxNUDEsIE1QMiwgTVAzPj4oCisgICAg
ICAgIG1ldGhvZCwKKyAgICAgICAgV2ViQ29yZTo6Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5
KHBhcmFtZXRlcjEpLAorICAgICAgICBXZWJDb3JlOjpDcm9zc1RocmVhZENvcGllcjxQMj46OmNv
cHkocGFyYW1ldGVyMiksCisgICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAzPjo6
Y29weShwYXJhbWV0ZXIzKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CiBzdGQ6OnVuaXF1ZV9wdHI8
Q3Jvc3NUaHJlYWRUYXNrPiBjcmVhdGVDcm9zc1RocmVhZFRhc2soCiAgICAgVCYgY2FsbGVlLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgKaW5kZXgg
ODQyZTgyYi4uNDFhODA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeS5oCkBAIC01Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBSZWdpc3Rl
cnMgYSBuZXcgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBi
eSB0aGUgc3BlY2lmaWVkIHNyY1VSTC4KICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSA9IDA7CiAKKyAgICAvLyBSZWdpc3RlcnMg
YSBuZXcgYmxvYiBVUkwgcmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgaWRlbnRpZmllZCBieSB0
aGUgc3BlY2lmaWVkIHNyY1VSTCBvciwgaWYgbm9uZSBmb3VuZCwgcmVmZXJyaW5nIHRvIHRoZSBm
aWxlIGZvdW5kIGF0IHRoZSBnaXZlbiBwYXRoLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJs
b2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZChjb25zdCBVUkwmLCBjb25zdCBVUkwmIHNyY1VSTCwg
Y29uc3QgU3RyaW5nJiBmaWxlQmFja2VkUGF0aCkgPSAwOworCiAgICAgLy8gTmVnYXRpdmUgc3Rh
cnQgYW5kIGVuZCB2YWx1ZXMgc2VsZWN0IGZyb20gdGhlIGVuZC4KICAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCBkY2I3OGJj
Li4zMzhkMWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTE2MCwxMyArMTYwLDI2IEBAIHZvaWQgQmxvYlJlZ2lz
dHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+
IGJsb2JQYXJ0CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKIHsKKyAgICByZWdpc3RlckJsb2JVUkxPcHRp
b25hbGx5RmlsZUJhY2tlZCh1cmwsIHNyY1VSTCwgeyB9KTsKK30KKwordm9pZCBCbG9iUmVnaXN0
cnlJbXBsOjpyZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZChjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpCit7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEJsb2JEYXRhKiBzcmMgPSBnZXRCbG9i
RGF0YUZyb21VUkwoc3JjVVJMKTsKLSAgICBpZiAoIXNyYykKKyAgICBpZiAoc3JjKSB7CisgICAg
ICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwgc3JjKTsKICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChmaWxlQmFja2VkUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlZlB0cjxCbG9iRGF0YT4gYmFja2luZ0ZpbGUgPSBCbG9iRGF0YTo6Y3JlYXRlKHsg
fSk7CisgICAgYmFja2luZ0ZpbGUtPmFwcGVuZEZpbGUoQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpj
cmVhdGUoZmlsZUJhY2tlZFBhdGgpKTsKIAotICAgIG1fYmxvYnMuc2V0KHVybC5zdHJpbmcoKSwg
c3JjKTsKKyAgICBtX2Jsb2JzLnNldCh1cmwuc3RyaW5nKCksIGJhY2tpbmdGaWxlLnJlbGVhc2Uo
KSk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2Uo
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5oCmluZGV4IGM2MDA2ZGIuLjUwMDZhNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC02MSw2ICs2MSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFVSTCYsIFJl
ZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVuY2U+JiYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIFZlY3RvcjxC
bG9iUGFydD4sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYgc3JjVVJMKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKGNvbnN0IFVSTCYs
IGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYsIGNvbnN0IFVS
TCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpIG92ZXJyaWRlOwogICAg
IHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBp
c0Jsb2JSZWdpc3RyeUltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNTY5MGE4ZC4uYzA1YTNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAy
MDE2LTA0LTEzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBN
b2Rlcm4gSURCIChCbG9iIHN1cHBvcnQpOiBTdXBwb3J0IHJldHJpZXZpbmcgQmxvYnMgZnJvbSBJ
REIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYz
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxl
QmFja2VkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVn
aXN0cnkuaDoKKyAgICAgICAgCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVz
c2FnZXMuaW46CisgICAgICAgIAorICAgICAgICAqIFdlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVn
aXN0cnlQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkJsb2JSZWdpc3RyeVByb3h5OjpyZWdp
c3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9G
aWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5Lmg6CisKKzIwMTYtMDQtMTMgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIE1vZGVybiBJREI6IE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkQ2xvc2UgbmVlZHMgdG8gaGF2ZSBhIHNlbGYgcmVmLgogICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjU3MDA4NjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NTU5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCmluZGV4IDgyZGNk
OWYuLjI2ZGU4MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Zp
bGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcApAQCAtODMsNiArODMsMTcg
QEAgdm9pZCBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3QKICAgICBtYXBJdGVyYXRvci0+dmFsdWUuYWRkKHVy
bCk7CiB9CiAKK3ZvaWQgTmV0d29ya0Jsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9u
YWxseUZpbGVCYWNrZWQoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24s
IGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiBmaWxlQmFj
a2VkUGF0aCkKK3sKKyAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5
RmlsZUJhY2tlZCh1cmwsIHNyY1VSTCwgZmlsZUJhY2tlZFBhdGgpOworCisgICAgQVNTRVJUKCFt
X2Jsb2JzRm9yQ29ubmVjdGlvbi5nZXQoY29ubmVjdGlvbikuY29udGFpbnModXJsKSk7CisgICAg
QmxvYkZvckNvbm5lY3Rpb25NYXA6Oml0ZXJhdG9yIG1hcEl0ZXJhdG9yID0gbV9ibG9ic0ZvckNv
bm5lY3Rpb24uZmluZChjb25uZWN0aW9uKTsKKyAgICBpZiAobWFwSXRlcmF0b3IgPT0gbV9ibG9i
c0ZvckNvbm5lY3Rpb24uZW5kKCkpCisgICAgICAgIG1hcEl0ZXJhdG9yID0gbV9ibG9ic0ZvckNv
bm5lY3Rpb24uYWRkKGNvbm5lY3Rpb24sIEhhc2hTZXQ8VVJMPigpKS5pdGVyYXRvcjsKKyAgICBt
YXBJdGVyYXRvci0+dmFsdWUuYWRkKHVybCk7Cit9CisKIHZvaWQgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mq
IGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBjb25zdCBXZWJDb3JlOjpVUkwm
IHNyY1VSTCwgaW50NjRfdCBzdGFydCwgaW50NjRfdCBlbmQpCiB7CiAgICAgLy8gVGhlIGNvbm5l
Y3Rpb24gbWF5IG5vdCBiZSByZWdpc3RlcmVkIGlmIE5ldHdvcmtQcm9jZXNzIHByZXZvdXNseSBj
cmFzaGVkIGZvciBhbnkgcmVhc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAppbmRleCA5ZjY4NDA3
Li45YmZiMmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxl
QVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZWdpc3RlckZpbGVCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4mJiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9p
ZCByZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBX
ZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3Jj
VVJMKTsKKyAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2Vi
Q29yZTo6VVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpOwogICAgIHZv
aWQgcmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mq
LCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgaW50NjRf
dCBzdGFydCwgaW50NjRfdCBlbmQpOwogICAgIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmKTsKICAgICB1aW50
NjRfdCBibG9iU2l6ZShOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNv
cmU6OlVSTCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGMwMDE1NzAuLmM4
MTdiYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTI3MSw2ICsyNzEsMTEg
QEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMRnJv
bVVSTChjb25zdCBVUkwmIHVybCwgY29uc3QKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBzcmNVUkwpOwogfQogCit2b2lkIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxPcHRpb25hbGx5Rmls
ZUJhY2tlZChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYg
ZmlsZUJhY2tlZFBhdGgpCit7CisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCku
cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQodGhpcywgdXJsLCBzcmNVUkwsIGZp
bGVCYWNrZWRQYXRoKTsKK30KKwogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJM
LCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkKIHsKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JVUkxGb3JTbGljZSh0aGlzLCB1cmwsIHNyY1VSTCwg
c3RhcnQsIGVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCAxZDExYmE2Li5jZTM5
ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJD
b3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZyb21VUkwoY29uc3QgV2ViQ29yZTo6
VVJMJiwgY29uc3QgV2ViQ29yZTo6VVJMJiBzcmNVUkwpOworICAgIHZvaWQgcmVnaXN0ZXJCbG9i
VVJMT3B0aW9uYWxseUZpbGVCYWNrZWQoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgZmlsZUJhY2tlZFBhdGgpOwogICAgIHZvaWQg
cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgV2ViQ29y
ZTo6VVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQsIGludDY0X3QgZW5kKTsKICAgICB2b2lkIGJs
b2JTaXplKGNvbnN0IFdlYkNvcmU6OlVSTCYsIHVpbnQ2NF90JiByZXN1bHRTaXplKTsKICAgICB2
b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAxOWU0MmY5Li5jNzA1ZjNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNDMsNiAr
NDMsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgUmVnaXN0ZXJGaWxlQmxvYlVSTChXZWJDb3JlOjpVUkwgdXJsLCBTdHJp
bmcgcGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5zaW9uSGFuZGxl
LCBTdHJpbmcgY29udGVudFR5cGUpCiAgICAgUmVnaXN0ZXJCbG9iVVJMKFdlYkNvcmU6OlVSTCB1
cmwsIFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFydD4gYmxvYlBhcnRzLCBTdHJpbmcgY29udGVudFR5
cGUpCiAgICAgUmVnaXN0ZXJCbG9iVVJMRnJvbVVSTChXZWJDb3JlOjpVUkwgdXJsLCBXZWJDb3Jl
OjpVUkwgc3JjVVJMKQorICAgIFJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKFdl
YkNvcmU6OlVSTCB1cmwsIFdlYkNvcmU6OlVSTCBzcmNVUkwsIFN0cmluZyBmaWxlQmFja2VkUGF0
aCkKICAgICBSZWdpc3RlckJsb2JVUkxGb3JTbGljZShXZWJDb3JlOjpVUkwgdXJsLCBXZWJDb3Jl
OjpVUkwgc3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkKICAgICBVbnJlZ2lzdGVy
QmxvYlVSTChXZWJDb3JlOjpVUkwgdXJsKQogICAgIEJsb2JTaXplKFdlYkNvcmU6OlVSTCB1cmwp
IC0+ICh1aW50NjRfdCByZXN1bHRTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKaW5kZXggODI2OTA5NS4uYzk3
ZDQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkv
QmxvYlJlZ2lzdHJ5UHJveHkuY3BwCkBAIC01Nyw2ICs1NywxMSBAQCB2b2lkIEJsb2JSZWdpc3Ry
eVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJM
KQogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJl
Z2lzdGVyQmxvYlVSTEZyb21VUkwodXJsLCBzcmNVUkwpLCAwKTsKIH0KIAordm9pZCBCbG9iUmVn
aXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMT3B0aW9uYWxseUZpbGVCYWNrZWQoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoKQor
eworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJl
Z2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKHVybCwgc3JjVVJMLCBmaWxlQmFja2Vk
UGF0aCksIDApOworfQorCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBVUkwmIHVybCkKIHsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpVbnJlZ2lzdGVyQmxvYlVSTCh1cmwpLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgKaW5k
ZXggYzdiMzM3Ny4uZjM5ZDZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmgKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmLCBSZWZQ
dHI8V2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlPiYmLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKSBvdmVycmlkZTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3Jl
OjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBhcnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKSBvdmVycmlkZTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpV
UkwmLCBjb25zdCBXZWJDb3JlOjpVUkwmIHNyY1VSTCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWdp
c3RlckJsb2JVUkxPcHRpb25hbGx5RmlsZUJhY2tlZChjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25z
dCBXZWJDb3JlOjpVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiBmaWxlQmFja2VkUGF0aCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmKSBv
dmVycmlkZTsKICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFdlYkNvcmU6
OlVSTCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBlbmQpIG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9iU2l6ZShjb25z
dCBXZWJDb3JlOjpVUkwmKSBvdmVycmlkZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>