<?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>124236</bug_id>
          
          <creation_ts>2013-11-12 15:00:11 -0800</creation_ts>
          <short_desc>Implement key generation and JWK import for RSASSA-PKCS1-v1_5</short_desc>
          <delta_ts>2013-11-13 09:45:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>124253</dependson>
    
    <dependson>124280</dependson>
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949889</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-12 15:00:11 -0800</bug_when>
    <thetext>Implement key generation and JWK import for RSASSA-PKCS1-v1_5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949911</commentid>
    <comment_count>1</comment_count>
      <attachid>216736</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-12 15:55:01 -0800</bug_when>
    <thetext>Created attachment 216736
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949913</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-12 15:56:25 -0800</bug_when>
    <thetext>Attachment 216736 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/crypto/subtle/resources/common.js&apos;, u&apos;LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html&apos;, u&apos;LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmBuilder.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmBuilder.h&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.h&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmDescriptionBuilder.h&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoKey.h&apos;, u&apos;Source/WebCore/crypto/CryptoKeyData.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyAES.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyDataOctetSequence.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyDataRSAComponents.cpp&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyDataRSAComponents.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyHMAC.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyRSA.h&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmHmacKeyParams.h&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h&apos;, u&apos;Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaParams.h&apos;]&quot; exit_code: 1
Source/WebCore/crypto/keys/CryptoKeyRSA.h:50:  The parameter name &quot;identifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/keys/CryptoKeyRSA.h:50:  The parameter name &quot;keyData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/keys/CryptoKeyRSA.h:50:  The parameter name &quot;usage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:45:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:39:  Missing spaces around /  [whitespace/operators] [3]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:46:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:47:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:170:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:176:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:185:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp:118:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:39:  CryptoAlgorithmRSASSA_PKCS1_v1_5::s_name is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:49:  CryptoAlgorithmRSASSA_PKCS1_v1_5::create is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:54:  CryptoAlgorithmRSASSA_PKCS1_v1_5::identifier is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:59:  CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:76:  CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:35:  CryptoAlgorithmRSASSA_PKCS1_v1_5::sign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:40:  CryptoAlgorithmRSASSA_PKCS1_v1_5::verify is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoKey.h:44:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/crypto/CryptoKey.h:45:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 21 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949920</commentid>
    <comment_count>3</comment_count>
      <attachid>216736</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-12 16:12:39 -0800</bug_when>
    <thetext>Comment on attachment 216736
proposed patch

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

&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:231
&gt; +    RefPtr&lt;Uint8Array&gt; publicExponentArray = toUint8Array(publicExponentValue);

Do you need to type check this?

&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:241
&gt; +    auto result = std::make_unique&lt;CryptoAlgorithmRsaSsaKeyParams&gt;();
&gt; +    return std::move(result);

One line?

&gt; Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp:331
&gt; +        return CryptoKeyDataRSAComponents::createPrivate(modulus, exponent, privateExponent);

This part isn&apos;t right, as you told me.

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:66
&gt; +    RELEASE_ASSERT(isCryptoKeyAES(key));

This should use ASSERT_WITH_SECURITY_IMPLICATION

&gt; Source/WebCore/crypto/keys/CryptoKeyAES.h:72
&gt; +    RELEASE_ASSERT(isCryptoKeyAES(key));

As should this.

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:79
&gt; +    RELEASE_ASSERT(isCryptoKeyRSA(key));

ASSERT_WITH_SECURITY_IMPLICATION

&gt; Source/WebCore/crypto/keys/CryptoKeyRSA.h:85
&gt; +    RELEASE_ASSERT(isCryptoKeyRSA(key));

ASSERT_WITH_SECURITY_IMPLICATION</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949924</commentid>
    <comment_count>4</comment_count>
      <attachid>216736</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-12 16:25:47 -0800</bug_when>
    <thetext>Comment on attachment 216736
proposed patch

Attachment 216736 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/22749645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949930</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-12 16:30:50 -0800</bug_when>
    <thetext>&gt; This part isn&apos;t right, as you told me.

Upon further inspection, it turned out that this is correct - having all or none additional parameters is a requirement for JWK producers, not for JWK consumers. 

Committed &lt;http://trac.webkit.org/r159160&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949939</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-12 16:38:59 -0800</bug_when>
    <thetext>Release build fix in &lt;http://trac.webkit.org/r159161&gt;.

Looking into the other failure now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949961</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-12 17:12:12 -0800</bug_when>
    <thetext>Another build fix in &lt;http://trac.webkit.org/r159164&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949973</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-12 17:29:05 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 124253</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950066</commentid>
    <comment_count>9</comment_count>
      <attachid>216778</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-13 00:49:29 -0800</bug_when>
    <thetext>Created attachment 216778
combined fixed patch for re-landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950067</commentid>
    <comment_count>10</comment_count>
      <attachid>216778</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 00:50:25 -0800</bug_when>
    <thetext>Comment on attachment 216778
combined fixed patch for re-landing

Rejecting attachment 216778 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 216778, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
it_code: 29 cwd: /Volumes/Data/EWS/WebKit

Parsed 36 diffs from patch file(s).
cp: Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: No such file or directory
Failed to copy Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp. at /Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply line 436.

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 29 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.appspot.com/results/22719840</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950070</commentid>
    <comment_count>11</comment_count>
      <attachid>216780</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-13 00:59:21 -0800</bug_when>
    <thetext>Created attachment 216780
patch for landing

Fixed format for svn-apply to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950077</commentid>
    <comment_count>12</comment_count>
      <attachid>216780</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 01:29:42 -0800</bug_when>
    <thetext>Comment on attachment 216780
patch for landing

Clearing flags on attachment: 216780

Committed r159180: &lt;http://trac.webkit.org/changeset/159180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950078</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 01:29:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950093</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-13 03:08:32 -0800</bug_when>
    <thetext>Not sure the tests are working: http://build.webkit.org/results/Apple%20Mavericks%20Release%20WK2%20(Tests)/r159181%20(658)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950149</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 07:19:56 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 124280</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950213</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-13 09:44:06 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/159180&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950214</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-13 09:44:48 -0800</bug_when>
    <thetext>Oops, I thought that I forgot to close the bug yesterday, but it&apos;s opened again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950219</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-13 09:45:47 -0800</bug_when>
    <thetext>OK, so this wasn&apos;t rolled out, just a test was skipped. Marking resolved/fixed again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216736</attachid>
            <date>2013-11-12 15:55:01 -0800</date>
            <delta_ts>2013-11-13 00:49:29 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>RsaSsa.txt</filename>
            <type>text/plain</type>
            <size>113143</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0xMS0xMiAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQga2V5IGdl
bmVyYXRpb24gYW5kIEpXSyBpbXBvcnQgZm9yIFJTQVNTQS1QS0NTMS12MV81CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQyMzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogY3J5cHRvL3N1YnRs
ZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXkuaHRtbAorICAgICAgICAgICAgICAgY3J5
cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1pbXBvcnQtandrLmh0bWwKKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgbmV3IGZpbGVzLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaDoKKyAgICAgICAgKiBjcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmg6CisgICAgICAgIEFkZGVkIGEgd2F5
IHRvIGFkZCBhbiBVaW50OEFycmF5LCBhcyBuZWVkZWQgZm9yIFJTQSBrZXkuYWxnb3JpdGhtLnB1
YmxpY0V4cG9uZW50LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFlc0NiY1BhcmFtcyk6IFJl
bW92ZWQgdW5uZWVkZWQgSlNDIHByZWZpeGVzLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVz
S2V5R2VuUGFyYW1zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIbWFjUGFyYW1z
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIbWFjS2V5UGFyYW1zKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSc2FLZXlHZW5QYXJhbXMpOiBBZGRlZC4gCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSc2FTc2FLZXlQYXJhbXMpOiBBZGRlZC4gV2ViQ3J5cHRvIGN1
cnJlbnRseSBkb2Vzbid0IHNwZWNpZnkgYW55CisgICAgICAgIHBhcmFtZXRlcnMgZm9yIGltcG9y
dEtleSwgc28gdGhlIHN0cnVjdHVyZSByZW1haW5zIGJsYW5rICh1bmxpa2Ugd2l0aCBKV0spLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhU3NhUGFyYW1zKTogQWRkZWQgKGN1cnJlbnRseSB1
bnVzZWQsIHdpbGwgYmUgc3VlZCBmb3Igc2lnbi92ZXJpZnkgc29vbikuCisgICAgICAgIChXZWJD
b3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNy
eXB0KTogUmVtb3ZlZCB1bm5lZWRlZCBKU0MgcHJlZml4ZXMuCisgICAgICAgIChXZWJDb3JlOjpK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNy
ZWF0ZVBhcmFtZXRlcnNGb3JTaWduKTogQWRkZWQgc3VwcG9ydCBmb3IgUlNBRVNfUEtDUzFfdjFf
NS4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvclZlcmlmeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGlnZXN0KTogUmVtb3ZlZCB1
bm5lZWRlZCBKU0MgcHJlZml4ZXMuCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yRGVyaXZlS2V5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZXJpdmVCaXRzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFt
ZXRlcnNGb3JJbXBvcnRLZXkpOiBBZGRlZCBzdXBwb3J0IGZvciBSU0FFU19QS0NTMV92MV81Lgor
ICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yRXhwb3J0S2V5KTogUmVtb3ZlZCB1bm5lZWRlZCBKU0MgcHJlZml4ZXMuCisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JXcmFwS2V5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JVbndyYXBLZXkpOiBEaXR0by4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRKU0FycmF5RnJvbUpTT04pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyk6IENyZWF0ZSBwYXJhbWV0ZXJzIGZvciBrZXkgaW1w
b3J0LiBUaGUga2V5CisgICAgICAgIHdpbGwgcmVtZW1iZXIgd2hpY2ggYWxnb3JpdGhtIGl0J3Mg
YWxsb3dlZCB0byBiZSB1c2VkIHdpdGguCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNl
cmlhbGl6YXRpb25KV0s6OnJlY29uY2lsZUFsZ29yaXRobSk6IEFkZGVkIHN1cHBvcnQgZm9yCisg
ICAgICAgIFJTMjU2Li4uUlM1MTIgKHRoYSBpcywgUlNBRVNfUEtDUzFfdjFfNSB3aXRoIFNIQS0y
NTYuLi5TSEEtNTEyKS4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlv
bkpXSzo6a2V5RGF0YU9jdGV0U2VxdWVuY2UpOiBTcGxpdCBvdXQgb2Yga2V5RGF0YSgpLgorICAg
ICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjprZXlEYXRhUlNBQ29t
cG9uZW50cyk6IEFkZGVkIGNvZGUgdG8gcmVhZAorICAgICAgICBSU0Ega2V5IGNvbXBvbmVudHMg
ZnJvbSBKV0suCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6
OmtleURhdGEpOiBDYWxsIG9uZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zLgorCisgICAgICAgICog
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbik6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6dmVy
aWZ5KToKKyAgICAgICAgUGxhY2Vob2xkZXJzLgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tl
eS5oOiAoV2ViQ29yZTo6Q3J5cHRvS2V5Q2xhc3MpOiBBZGRlZCBSU0Ega2V5IGNsYXNzIGZvciBw
b29yIG1hbidzIFJUVEkuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5RGF0YS5oOiAoV2Vi
Q29yZTo6Q3J5cHRvS2V5RGF0YTo6Rm9ybWF0UlNBQ29tcG9uZW50cyk6IEFkZGVkIFJTQUNvbXBv
bmVudHMKKyAgICAgICAgZm9yIHBvb3IgbWFuJ3MgUlRUSS4KKworICAgICAgICAqIGNyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwOiAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KTogCisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtSE1BQy5jcHA6IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjpp
bXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDcnlwdG9LZXlBRVMpOgorICAgICAgICAoV2ViQ29yZTo6dG9DcnlwdG9L
ZXlBRVMpOgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNl
Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlKToKKyAg
ICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAgIChXZWJDb3JlOjpp
c0NyeXB0b0tleUhNQUMpOgorICAgICAgICAoV2ViQ29yZTo6dG9DcnlwdG9LZXlITUFDKToKKyAg
ICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtSE1BQzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1ITUFDOjp2ZXJpZnkpOgorICAgICAgICBTd2l0Y2hlZCBmcm9tICJhcyIgZnVuY3Rpb25zIHRv
ICJpcyIgYW5kICJ0byIgb25lcywgYXMgdGhhdCdzIG1vcmUgaWRpb21hdGljLgorCisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNS5oOiBBZGRlZC4KKyAgICAgICAgR2x1ZSBjb2RlIGZvciBpbXBvcnRLZXkv
Z2VuZXJhdGVLZXkgZm9yIG5vdy4KKworICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleURh
dGFSU0FDb21wb25lbnRzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6On5DcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cyk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzKToKKyAgICAgICAgQWRkZWQgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBSU0Ega2V5IGNvbXBvbmVu
dHMsIGV4dHJhY3RlZCBmcm9tIEpXSyBvciBhbm90aGVyIGZvcm1hdC4KKworICAgICAgICAqIGNy
eXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vbWFjL0Ny
eXB0b0tleVJTQU1hYy5jcHA6IEFkZGVkLgorCisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1SZWdpc3RyeU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29yaXRobXMpOgorICAgICAgICBSZWdpc3Rl
ciBSU0FTU0FfUEtDUzFfdjFfNS4KKworICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0
b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaDogQWRkZWQgYSBjb25zdHJ1Y3RvciB0byBtYWtlCisg
ICAgICAgIHN1cmUgdGhhdCBoYXNMZW5ndGggaXMgbmV2ZXIgbGVmdCB1bmluaXRpYWxpemVkLCBl
dmVuIHdoZW4gcmVhZGluZyBmb3JtYXRzIHRoYXQKKyAgICAgICAgZG9uJ3QgY29udGFpbiBhIGxl
bmd0aC4KKworICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtl
eUdlblBhcmFtcy5oOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9B
bGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3BhcmFt
ZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmg6IEFkZGVkLgorICAgICAgICBBZGRl
ZCBwYXJhbWV0ZXIgc3RydWN0dXJlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIFJTQVNTQV9QS0NTMV92
MV81LgorCiAyMDEzLTExLTExICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIFJlbmRlckJsb2NrUmFyZURhdGEgYmUgaW4gYSBoYXNodGFibGUgaW5zdGVhZCBv
ZiBiZWluZyBhIG1lbWJlciB2YXJpYWJsZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1OTE1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTU5Myw2ICs1NTkzLDggQEAKIAkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8q
IEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTE1N0E4RUYxODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxn
b3JpdGhtQnVpbGRlci5oICovOyB9OwogCQlFMTVBMzZENzExMDQ1NzIwMDBCN0I2MzkgLyogWE1M
TlNOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuaCAqLzsgfTsKIAkJRTE1QTM2
RDkxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1QTM2RDgxMTA0NTcyNzAwQjdCNjM5IC8qIFhN
TE5TTmFtZXMuY3BwICovOyB9OworCQlFMTY0RkFBMzE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRv
S2V5UlNBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggKi87IH07CisJCUUxNjRG
QUE1MTgzMTVFMUEwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2NEZBQTQxODMxNUUxQTAwREI0RTYx
IC8qIENyeXB0b0tleVJTQU1hYy5jcHAgKi87IH07CiAJCUUxNjk4MDNEMTEzMzU0MkQwMDg5NDEx
NSAvKiBDUnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTE2OTgwM0MxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0Lmgg
Ki87IH07CiAJCUUxNjk4MDQ5MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODA0ODEx
MzM2NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovOyB9OwogCQlFMTY5ODI1NTEx
MzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MjU0MTEzNDYyOUQwMDg5NDExNSAvKiBP
YmpDUnVudGltZU9iamVjdC5oICovOyB9OwpAQCAtNTY2Nyw4ICs1NjY5LDE2IEBACiAJCUUxQkE2
NzE4MTc0MkJFRTYwMEMyMDI1MSAvKiBDYXJib24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMjg2OTQwMjg0NkRDRDAxODYzNUNB
IC8qIENhcmJvbi5mcmFtZXdvcmsgKi87IH07CiAJCUUxQkE2NzFBMTc0MkJFRjQwMEMyMDI1MSAv
KiBXZWJDb3JlVGVzdFNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkE2NzE5MTc0MkJFRjQwMEMyMDI1MSAvKiBXZWJDb3JlVGVz
dFNoaW1MaWJyYXJ5LmNwcCAqLzsgfTsKIAkJRTFCQjg0QUQxODIyQ0E3NDAwNTI1MDQzIC8qIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkI4NEFDMTgyMkNBNzQwMDUyNTA0MyAvKiBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeU1hYy5jcHAgKi87IH07CisJCUUxQkQzMzE5MTgyRDhEREQwMEMwNUQ5RiAv
KiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJEMzMxNzE4MkQ4REREMDBDMDVEOUYgLyog
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwICovOyB9OworCQlFMUJEMzMxQTE4
MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkQzMzE4MTgyRDhE
REQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oICovOyB9Owor
CQlFMUJEMzMxQzE4MkQ4RUU5MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJEMzMx
QjE4MkQ4RUU5MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmggKi87IH07
CisJCUUxQkQzMzFFMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5Q
YXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
QkQzMzFEMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMu
aCAqLzsgfTsKIAkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEy
QjBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLzsgfTsKIAkJRTFCRTUx
MkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oICovOyB9OworCQlFMUMyNjZEODE4MzE3QUI0MDAzRjhCMzMgLyog
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMjY2RDYxODMxN0FCNDAwM0Y4QjMzIC8q
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCAqLzsgfTsKKwkJRTFDMjY2
REIxODMxOTkzNTAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMjY2REExODMx
OTkzNTAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oICovOyB9Owor
CQlFMUMyNjZERTE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMjY2
REMxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCAqLzsg
fTsKKwkJRTFDMjY2REYxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMy
NjZERDE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCAqLzsg
fTsKIAkJRTFDMkYyNEExNTMzQTIxMjAwODNGOTc0IC8qIFNldHRpbmdzTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMkYyNDgxNTMzQTIxMjAw
ODNGOTc0IC8qIFNldHRpbmdzTWFjLm1tICovOyB9OwogCQlFMUMzNjJFRjBFQUYyQUE5MDA3NDEw
QkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDMzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRp
b24uaCAqLzsgfTsKIAkJRTFDMzYyRjAwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
MzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwICovOyB9OwpAQCAt
MTI2NzMsNiArMTI2ODMsOCBAQAogCQlFMTU3QThFRjE4MTg1NDI1MDA5RjgyMUQgLyogSlNDcnlw
dG9BbGdvcml0aG1CdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
Q3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTVBMzZENjExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxOU05hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxNUEzNkQ4MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTE5TTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNB
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENyeXB0b0tleVJTQS5oOyBwYXRo
ID0ga2V5cy9DcnlwdG9LZXlSU0EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE2
NEZBQTQxODMxNUUxQTAwREI0RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9LZXlSU0FNYWMuY3BwOyBwYXRoID0gbWFj
L0NyeXB0b0tleVJTQU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4
MDNDMTEzMzU0MkQwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDUnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTY5ODA0ODExMzM2NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1J1bnRpbWVPYmplY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTY5ODI1NDExMzQ2MjlEMDA4OTQxMTUgLyog
T2JqQ1J1bnRpbWVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2Jq
Q1J1bnRpbWVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzU2LDgg
KzEyNzY4LDE2IEBACiAJCUUxQkE2NzE2MTc0MkJERTAwMEMyMDI1MSAvKiBsaWJXZWJDb3JlVGVz
dFNoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBs
aWJXZWJDb3JlVGVzdFNoaW0uZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCUUxQkE2NzE5MTc0MkJFRjQwMEMyMDI1MSAvKiBXZWJDb3JlVGVzdFNoaW1MaWJyYXJ5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUZXN0U2hp
bUxpYnJhcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJCODRBQzE4MjJD
QTc0MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3Bw
OyBwYXRoID0gbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTFCRDMzMTcxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29y
aXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTFCRDMzMTgxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29y
aXRobVJTQVNTQV9QS0NTMV92MV81LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxQkQzMzFCMTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FT
c2FQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtUnNhU3NhUGFyYW1zLmg7IHBhdGggPSBwYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNz
YVBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUJEMzMxRDE4MkQ4RjQy
MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oOyBw
YXRoID0gcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRV
bmljb2RlU29ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xU
VW5pY29kZVNvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQzBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFhTTFRVbmljb2RlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMUMyNjZENjE4MzE3QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BL
Q1MxX3YxXzVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNh
U3NhS2V5UGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENyeXB0b0Fs
Z29yaXRobVJzYVNzYUtleVBhcmFtcy5oOyBwYXRoID0gcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1Sc2FTc2FLZXlQYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMjY2
REMxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzLmNwcDsgcGF0aCA9IGtleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMyNjZERDE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5
cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaDsgcGF0aCA9IGtleXMvQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMkYyNDgx
NTMzQTIxMjAwODNGOTc0IC8qIFNldHRpbmdzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2V0dGluZ3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxQzM2MkVEMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29y
a2VyTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
b3JrZXJMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDMyMiwx
MSArMjAzNDIsMTMgQEAKIAkJCQlFMTI1RjgzNzE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxn
b3JpdGhtSE1BQ01hYy5jcHAgKi8sCiAJCQkJRTFCQjg0QUMxODIyQ0E3NDAwNTI1MDQzIC8qIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcCAqLywKIAkJCQlFMTI1RjgyRDE4MjJDRkZGMDBE
ODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMU1hYy5jcHAgKi8sCisJCQkJRTFDMjY2RDYxODMx
N0FCNDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCAq
LywKIAkJCQlFMTlBQzNERTE4MjREQzY5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjI0
TWFjLmNwcCAqLywKIAkJCQlFMTlBQzNERjE4MjREQzY5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3Jp
dGhtU0hBMjU2TWFjLmNwcCAqLywKIAkJCQlFMTlBQzNFMDE4MjREQzY5MDAzNDk0MjYgLyogQ3J5
cHRvQWxnb3JpdGhtU0hBMzg0TWFjLmNwcCAqLywKIAkJCQlFMTlBQzNFMTE4MjREQzY5MDAzNDk0
MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBNTEyTWFjLmNwcCAqLywKIAkJCQlFMTlBQzNGODE4MjU2
NkY3MDAzNDk0MjYgLyogQ3J5cHRvS2V5TWFjLmNwcCAqLywKKwkJCQlFMTY0RkFBNDE4MzE1RTFB
MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gbWFj
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIwMzM4LDYgKzIwMzYwLDggQEAKIAkJ
CQlFMTI1Rjg0MDE4MjQyNTNBMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oICov
LAogCQkJCUUxMjVGODJGMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmNw
cCAqLywKIAkJCQlFMTI1RjgzMDE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5oICovLAorCQkJCUUxQkQzMzE3MTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNS5jcHAgKi8sCisJCQkJRTFCRDMzMTgxODJEOERERDAwQzA1RDlGIC8q
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmggKi8sCiAJCQkJRTEyNUY4MjkxODIy
Q0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuY3BwICovLAogCQkJCUUxMjVGODJB
MTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggKi8sCiAJCQkJRTE5QUMz
RTYxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTIyNC5jcHAgKi8sCkBAIC0y
MDM1OSw4ICsyMDM4MywxMSBAQAogCQkJCUUxMjVGODRDMTgyNDI4OUQwMEQ4NENEOSAvKiBDcnlw
dG9LZXlBRVMuaCAqLywKIAkJCQlFMTI1Rjg2MTE4MkMzMDNBMDBEODRDRDkgLyogQ3J5cHRvS2V5
RGF0YU9jdGV0U2VxdWVuY2UuY3BwICovLAogCQkJCUUxMjVGODYyMTgyQzMwM0EwMEQ4NENEOSAv
KiBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oICovLAorCQkJCUUxQzI2NkRDMTgzMTlGMzEw
MDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAgKi8sCisJCQkJRTFDMjY2
REQxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmggKi8sCiAJ
CQkJRTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwICovLAogCQkJ
CUUxMjVGODM0MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmggKi8sCisJCQkJRTE2
NEZBQTIxODMxNUJGNDAwREI0RTYxIC8qIENyeXB0b0tleVJTQS5oICovLAogCQkJCUUxMjVGODU3
MTgyQzFBQTYwMEQ4NENEOSAvKiBDcnlwdG9LZXlTZXJpYWxpemF0aW9uUmF3LmNwcCAqLywKIAkJ
CQlFMTI1Rjg1ODE4MkMxQUE2MDBEODRDRDkgLyogQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJhdy5o
ICovLAogCQkJKTsKQEAgLTIwMzc0LDYgKzIwNDAxLDkgQEAKIAkJCQlFMTlBQzNGNjE4MjRFNUQx
MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zLmggKi8sCiAJCQkJRTE5
REEyOUIxODE4OUFERDAwMDg4QkM4IC8qIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaCAq
LywKIAkJCQlFMUM2NTcxRTE4MTZFNTAzMDAyNTZDREQgLyogQ3J5cHRvQWxnb3JpdGhtSG1hY1Bh
cmFtcy5oICovLAorCQkJCUUxQkQzMzFEMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0
aG1Sc2FLZXlHZW5QYXJhbXMuaCAqLywKKwkJCQlFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMgLyog
Q3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmggKi8sCisJCQkJRTFCRDMzMUIxODJEOEVF
OTAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBwYXJhbWV0ZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyMTAy
LDYgKzIyMTMyLDcgQEAKIAkJCQlGRDMxNjAwMjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbFNw
bGl0dGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTAwOTlERjAyNzAwOTBENzgx
IC8qIENoYXJhY3RlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QjhGRkQxMTZBRTdGOTYw
MDM4Mzg4RCAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMTY0RkFBMzE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREEyQTBEMDA2QzFEMDBFRjZGMjYgLyogQ2hhcnNldERhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUY1NUIzREIyMTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElu
cHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGOTI1NDMwRjdFRjVCODAwN0UzN0M5IC8q
IENoZWNrZWRSYWRpb0J1dHRvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzMDMsNiArMjIzMzQs
NyBAQAogCQkJCUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3Jt
YXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDU4NTAzMTdGQTEwRDAwMDVGMkJDQiAvKiBKU0Fs
bFZpZGVvQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUJEMzMxQTE4MkQ4RERE
MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NUIzREI4MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkExMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1l
TG9jYWxJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1RkVBNUQwMTU2RERFOEMwMDY1
NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLywKQEAgLTIyODYyLDYgKzIyODk0LDcgQEAK
IAkJCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlENzJGNkQ3QTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQkQzMzFFMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlw
dG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OTkzQkU2
MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA2MjI4Nzg0MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjZEOUQyMzUxNEVBQkQyNjAwOTBENzVFIC8qIEZvY3VzRXZlbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjM0MzcsNiArMjM0NzAsNyBAQAogCQkJCUE4MEU3QjBDMEExOUQ2MDYwMDdG
QjhDNSAvKiBKU0hUTUxUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDc1NkQ0
MTQyMzlBNEYwMDQxNDE2MSAvKiBKU0hUTUxUcmFja0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBODVCMjExMEExQjI1ODcwMEQ4Qzg3QyAvKiBKU0hUTUxVTGlzdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUxQzI2NkRGMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0QUJDRDUxMzhFQTBCNzAwNzFE
MjkxIC8qIEpTSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFMDky
NzE3RDE0RDFDMDA0MjBBQTEgLyogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0NDYxNDE3MENENjgyNjkwMEZBREE3NSAvKiBKU0hUTUxWaWRlb0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM2NjUsNiArMjM2OTksNyBAQAogCQkJCUIyRkEz
REREMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdNb3ZldG9BYnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyRkEzRERGMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdNb3ZldG9S
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDU4NTIxMTdGREMxNDAwMDVGMkJDQiAvKiBNZWRp
YVRyYWNrQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMjY2REIxODMxOTkzNTAw
M0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0Q4QjVBNDYxODBERkY0RTAwOEI4RTY1IC8qIFZpZGVvVHJhY2tNZWRpYVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERTEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0
dGVybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDJBNzk1MEFFNUM5NDEwMERGNThE
RiAvKiBKU1NWR1BvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzOTc3LDYgKzI0MDEyLDcgQEAK
IAkJCQkwNzhFMDkxQjE3RDE0RDFDMDA0MjBBQTEgLyogTmF2aWdhdG9yVXNlck1lZGlhRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUREMEU4MUI4REQwMEIyNTk2NSAvKiBPdXRsaW5l
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEQ1NzM3MEE1Qzc3RkUwMDdFREQ0QyAvKiBP
dmVyZmxvd0V2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUJEMzMxQzE4MkQ4RUU5MDBDMDVE
OUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
Nzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk2NUEyMTQ2ODA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOUI1MEIxREUxN0NENEMwRjAwODdGNjNDIC8qIEZvcm1OYW1lZEl0ZW0u
aCBpbiBIZWFkZXJzICovLApAQCAtMjU3NDYsNiArMjU3ODIsNyBAQAogCQkJCTUwRDQwNjExMTQ3
RDQ5REUwMEQzMEJCNSAvKiBDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTA5ODdDMjYxNTdENjc2RDAwQkRBODM1IC8qIEN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBENDA1RjkxNDdEMzFGMzAwRDMwQkI1
IC8qIEN1c3RvbUZpbHRlck1lc2guY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDMjY2REUxODMx
OUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdFMTJFOTEwMTVGQTVEM0EwMDVFNDEyNiAvKiBDdXN0b21GaWx0ZXJNZXNoR2Vu
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwQ0MwQTM5MTRDNkY1QjEwMDE3QUI1MSAv
KiBDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTA5MzMzNEYx
NjNCMEU0MzAwMDk5QTYwIC8qIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNjM0Nyw2ICsyNjM4NCw3IEBACiAJCQkJRTEyNUY4MzgxODIyRjFFQjAwRDg0
Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkND
RDc0RTUwQTRDOERERjAwNUZEQTZEIC8qIEhUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc3QjM4NzkxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxWaWV3U291cmNl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQzI2NkQ4MTgzMTdBQjQwMDNGOEIzMyAv
KiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwQjhDNTZENDBGMjg2MjdGMDAwNTAyRTEgLyogSFRUUEhlYWRlck1hcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTRDNzY3MjBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUFBhcnNlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzcxQTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0
aW9uQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjc2Miw2ICsyNjgwMCw3IEBACiAJCQkJQzZG
NDIwQTIxNkI3MTY0RTAwNTJBOUYyIC8qIEpTTXV0YXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NURGMzFGQjA5RDFDQzYwMDAwQkUzMjUgLyogSlNNdXRhdGlvbkV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA5MDJDMTQzMjdENEYwMDY4NTg0OSAvKiBKU011dGF0
aW9uT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTE2NEZBQTUxODMxNUUxQTAwREI0
RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNkYwOTE3RjE0
M0EyQkI5MDA2ODU4NDkgLyogSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM2RjA4RkM5MTQzMTAwMEQwMDY4NTg0OSAvKiBKU011dGF0aW9uUmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3OEUwOTAxMTdEMTRDRUUwMDQyMEFBMSAvKiBNZWRpYVN0
cmVhbVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcwNTIsNiArMjcwOTEsNyBAQAog
CQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9n
cmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQkQzMzE5MTgyRDhE
REQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNEYxMDUxOTcxQTAwMDk5RkFC
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5cy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02NCw2ICs2NSwx
NCBAQCB2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0CiAgICAgbV9kaWN0
aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIGpzU3RyaW5nKG1fZXhlYywgdmFsdWUp
KTsKIH0KIAordm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBr
ZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQoreworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJnZtLCBrZXkpOworICAgIFJlZlB0
cjxVaW50OEFycmF5PiBhcnJheVZpZXcgPSBVaW50OEFycmF5OjpjcmVhdGUoYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50
aWZpZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmR5bmFtaWNHbG9iYWxPYmplY3QpKTsK
K30KKwogdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikK
IHsKICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAkocmV2aXNpb24g
MTU5MTU1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1C
dWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0Fs
Z29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYpIE9WRVJSSURFOwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFt
cy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCIKICNpbmNsdWRlICJD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYUtl
eUdlblBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5o
IgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTExNiw3ICsxMTksNyBAQCBzdGF0aWMgYm9vbCBnZXRI
YXNoQWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgcmV0dXJuIEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihleGVjLCBoYXNoLCByZXN1bHQpOwogfQog
Ci1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0
ZUFlc0NiY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVB
ZXNDYmNQYXJhbXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE0
NSw3ICsxNDgsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAg
ICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0tleUdlblBhcmFtcyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE2Myw3ICsxNjYsNyBAQCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAgcmV0dXJuIHN0ZDo6bW92
ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+IGNyZWF0ZUhtYWNQYXJhbXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4gY3JlYXRlSG1hY1BhcmFtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMpOwpAQCAtMTgxLDcgKzE4NCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY0tleVBhcmFt
cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjS2V5UGFyYW1z
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC0yMDMsNyArMjA2LDYw
IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGEKICAgICByZXR1cm4g
c3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JFbmNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRo
bVJzYUtleUdlblBhcmFtcz4oKTsKKworICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0g
Z2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJtb2R1bHVzTGVuZ3RoIik7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93d3cu
dzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzc3OT4uCisgICAgcmVzdWx0LT5t
b2R1bHVzTGVuZ3RoID0gdG9VSW50MzIoZXhlYywgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVy
dHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQ
dHI8VWludDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJheShwdWJsaWNF
eHBvbmVudFZhbHVlKTsKKyAgICByZXN1bHQtPnB1YmxpY0V4cG9uZW50LmFwcGVuZChwdWJsaWNF
eHBvbmVudEFycmF5LT5kYXRhKCksIHB1YmxpY0V4cG9uZW50QXJyYXktPmJ5dGVMZW5ndGgoKSk7
CisKKyAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUnNhU3NhS2V5UGFyYW1zKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpCit7CisgICAgLy8gV2ViQ3J5cHRvIFJTQVNTQS1QS0NTMS12MV81
IGFsZ29yaXRobSBjdXJyZW50bHkgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycyB0byBpbXBv
cnRLZXkuCisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRo
bVJzYVNzYUtleVBhcmFtcz4oKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7Cit9CisK
K3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRl
UnNhU3NhUGFyYW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25h
cnkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXM+KCk7CisKKyAgICBpZiAoIWdldEhh
c2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gpKSB7CisgICAgICAgIEFTU0VS
VChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBzdGQ6Om1vdmUocmVzdWx0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3Jl
YXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29y
aXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFf
djFfNToKQEAgLTIzNSw3ICsyOTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFt
ZXRlcnNGb3JEZWNyeXB0KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBhbGdvcml0aG0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsK
ICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBA
IC0yNjcsMTEgKzMyMywxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yU2lnbihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JT
aWduKEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3Yx
XzU6CisgICAgICAgIHJldHVybiBjcmVhdGVSc2FTc2FQYXJhbXMoZXhlYywgdmFsdWUpOwogICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX1BTUzoKICAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQV9PQUVQOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6RUNEU0E6CkBAIC0yOTksMTEgKzM1OCwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yVmVyaWZ5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAo
YWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19Q
S0NTMV92MV81OgorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9F
UlIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81OgorICAgICAgICByZXR1cm4gY3JlYXRlUnNhU3Nh
UGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlJTQV9QU1M6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfT0FFUDoK
ICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgpAQCAtMzMxLDcgKzM5
Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFs
dWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGlnZXN0KEV4ZWNTdGF0ZSog
ZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTVmFsdWUpCiB7CiAg
ICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC0zNjMsMTMgKzQyNSwxNCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpj
cmVhdGVQYXJhbWV0ZXJzRm9yR2VuZXJhdGVLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yR2VuZXJhdGVLZXkoRXhlY1N0YXRlKiBleGVj
LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6UlNBRVNfUEtDUzFfdjFfNToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OlJTQVNTQV9QS0NTMV92MV81OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6UlNBX1BTUzoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQV9PQUVQ
OgorICAgICAgICByZXR1cm4gY3JlYXRlUnNhS2V5R2VuUGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDoKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IE5PVF9TVVBQT1JURURfRVJSKTsKQEAgLTM5Niw3ICs0NTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yRGVyaXZlS2V5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvckRlcml2ZUtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3Jp
dGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92
MV81OgpAQCAtNDI1LDcgKzQ4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
ZXJpdmVCaXRzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckRlcml2ZUJpdHMoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGFsZ29yaXRobSwgSlNWYWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKQEAgLTQ1NCwx
MSArNTE3LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAg
ICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1w
b3J0S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0
aG0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNToKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZVJzYVNzYUtleVBhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBX09BRVA6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpFQ0RTQToKQEAgLTQ4Niw3ICs1NTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yRXhwb3J0S2V5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvckV4cG9ydEtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAg
ICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAt
NTE2LDcgKzU4MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIK
ICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JXcmFwS2V5KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwg
SlNDOjpKU1ZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvcldyYXBLZXko
RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNW
YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKQEAgLTU0NSw3ICs2MTAsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyCiAgICAgfQogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yVW53cmFwS2V5KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlKQorc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclVud3JhcEtleShFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlKQogewogICAgIHN3
aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpS
U0FFU19QS0NTMV92MV81OgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCShyZXZpc2lvbiAxNTkx
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oIgog
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2Vx
dWVuY2UuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
IDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KQEAgLTQyLDYgKzQ0LDI2IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wgZ2V0SlNBcnJheUZy
b21KU09OKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGpzb24sIGNvbnN0IGNoYXIqIGtleSwg
SlNBcnJheSomIHJlc3VsdCkKK3sKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoZXhlYywga2V5
KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChqc29uKTsKKworICAgIGlmICghanNvbi0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsK
KyAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBpZiAoaXNKU0FycmF5KHZh
bHVlKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpbmc6OmZvcm1hdCgiRXhw
ZWN0ZWQgYW4gYXJyYXkgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlc3VsdCA9IGFzQXJyYXkodmFsdWUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIGdldFN0cmluZ0Zyb21KU09OKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGpzb24sIGNvbnN0IGNoYXIqIGtleSwgU3RyaW5nJiByZXN1bHQp
CiB7CiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIGtleSk7CkBAIC04Miw2ICsxMDQs
MjUgQEAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgIHJldHVy
biB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04oRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCoganNvbiwgY29uc3QgY2hhcioga2V5LCBWZWN0b3I8Y2hh
cj4mIHJlc3VsdCkKK3sKKyAgICBTdHJpbmcgYmFzZTY0dXJsRW5jb2RlZE51bWJlcjsKKyAgICBp
ZiAoIWdldFN0cmluZ0Zyb21KU09OKGV4ZWMsIGpzb24sIGtleSwgYmFzZTY0dXJsRW5jb2RlZE51
bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghYmFzZTY0VVJMRGVjb2Rl
KGJhc2U2NHVybEVuY29kZWROdW1iZXIsIHJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgIkNhbm5vdCBkZWNvZGUgYmFzZTY0dXJsIGtleSBkYXRhIGluIEpXSyIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlc3VsdFswXSA9PSAwKSB7Cisg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJKV0sgQmlnSW50ZWdlciBtdXN0IHV0aWxpemUg
dGhlIG1pbmltdW0gbnVtYmVyIG9mIG9jdGV0cyB0byByZXByZXNlbnQgdGhlIHZhbHVlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogSlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0soRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIGpzb25TdHJpbmcpCiAgICAgOiBtX2V4ZWMoZXhl
YykKIHsKQEAgLTEwOCw2ICsxNDksMTUgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYQogICAgIHJldHVybiBzdGQ6Om1vdmUoaG1hY1BhcmFtZXRlcnMpOwogfQogCitz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJT
QVNTQUtleVBhcmFtZXRlcnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoRnVuY3Rpb24p
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcz4g
cnNhU1NBUGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUnNhU3Nh
S2V5UGFyYW1zPigpOworICAgIHJzYVNTQVBhcmFtZXRlcnMtPmhhc0hhc2ggPSB0cnVlOworICAg
IHJzYVNTQVBhcmFtZXRlcnMtPmhhc2ggPSBoYXNoRnVuY3Rpb247CisgICAgcmV0dXJuIHN0ZDo6
bW92ZShyc2FTU0FQYXJhbWV0ZXJzKTsKK30KKworCiBib29sIEpTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSzo6cmVjb25jaWxlQWxnb3JpdGhtKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG0+JiBzdWdnZXN0ZWRBbGdvcml0aG0sIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYgc3VnZ2VzdGVkUGFyYW1ldGVycykgY29uc3QKIHsKICAgICBpZiAoIWdldFN0
cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiYWxnIiwgbV9qd2tBbGdvcml0aG1O
YW1lKSkgewpAQCAtMTI2LDYgKzE3NiwxNSBAQCBib29sIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlv
bkpXSzo6cmVjb25jCiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkhTNTEy
IikgewogICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVk
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMpOwogICAgICAgICBwYXJh
bWV0ZXJzID0gY3JlYXRlSE1BQ1BhcmFtZXRlcnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
U0hBXzUxMik7CisgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTMjU2Iikg
eworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCku
Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKKyAg
ICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQVNTQUtleVBhcmFtZXRlcnMoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6U0hBXzI1Nik7CisgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5h
bWUgPT0gIlJTMzg0IikgeworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9Q
S0NTMV92MV81KTsKKyAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQVNTQUtleVBhcmFtZXRl
cnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NCk7CisgICAgfSBlbHNlIGlmICht
X2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTNTEyIikgeworICAgICAgICBhbGdvcml0aG0gPSBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKKyAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJT
QVNTQUtleVBhcmFtZXRlcnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMik7CiAg
ICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkExMjhDQkMiKSB7CiAgICAgICAg
IGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBz
dGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CkBAIC0xNTIsMTEg
KzIxMSwyMCBAQCBib29sIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAg
aWYgKGFsZ29yaXRobS0+aWRlbnRpZmllcigpICE9IHN1Z2dlc3RlZEFsZ29yaXRobS0+aWRlbnRp
ZmllcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBITUFDIGlzIHRoZSBvbmx5
IGFsZ29yaXRobSB0aGF0IGhhcyBwYXJhbWV0ZXJzIGluIGltcG9ydEtleS4KLSAgICBpZiAoYWxn
b3JpdGhtLT5pZGVudGlmaWVyKCkgIT0gQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQykK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGFsZ29yaXRobS0+aWRlbnRpZmllcigpID09
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4oKnBhcmFtZXRlcnMpLmhhc2ggPT0gc3Rh
dGljX2Nhc3Q8Q3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyY+KCpzdWdnZXN0ZWRQYXJhbWV0ZXJz
KS5oYXNoOworICAgIGlmIChhbGdvcml0aG0tPmlkZW50aWZpZXIoKSA9PSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSkgeworICAgICAgICBDcnlwdG9BbGdvcml0
aG1Sc2FTc2FLZXlQYXJhbXMmIHJzYVNTQVBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxDcnlwdG9B
bGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMmPigqcGFyYW1ldGVycyk7CisgICAgICAgIENyeXB0b0Fs
Z29yaXRobVJzYVNzYUtleVBhcmFtcyYgc3VnZ2VzdGVkUlNBU1NBUGFyYW1ldGVycyA9IHN0YXRp
Y19jYXN0PENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyY+KCpzdWdnZXN0ZWRQYXJhbWV0
ZXJzKTsKKyAgICAgICAgQVNTRVJUKHJzYVNTQVBhcmFtZXRlcnMuaGFzSGFzaCk7CisgICAgICAg
IGlmIChzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc0hhc2gpCisgICAgICAgICAgICByZXR1
cm4gc3VnZ2VzdGVkUlNBU1NBUGFyYW1ldGVycy5oYXNoID09IHJzYVNTQVBhcmFtZXRlcnMuaGFz
aDsKKyAgICAgICAgc3VnZ2VzdGVkUlNBU1NBUGFyYW1ldGVycy5oYXNIYXNoID0gdHJ1ZTsKKyAg
ICAgICAgc3VnZ2VzdGVkUlNBU1NBUGFyYW1ldGVycy5oYXNoID0gcnNhU1NBUGFyYW1ldGVycy5o
YXNoOworICAgIH0KIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDcnlwdG9BbGdvcml0aG1IbWFj
UGFyYW1zJj4oKnBhcmFtZXRlcnMpLmhhc2ggPT0gc3RhdGljX2Nhc3Q8Q3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyY+KCpzdWdnZXN0ZWRQYXJhbWV0ZXJzKS5oYXNoOworICAgIC8vIE90aGVyIGFs
Z29yaXRobXMgZG9uJ3QgaGF2ZSBwYXJhbWV0ZXJzLgorICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jaWxlVXNhZ2VzKENyeXB0b0tl
eVVzYWdlJiBzdWdnZXN0ZWRVc2FnZSkgY29uc3QKQEAgLTIwNywyMCArMjc1LDggQEAgYm9vbCBK
U0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleVNpegogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLOjprZXlEYXRhKCkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0Ny
eXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGFPY3RldFNlcXVlbmNlKCkgY29uc3QKIHsK
LSAgICBTdHJpbmcgandrS2V5VHlwZTsKLSAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAi
UmVxdWlyZWQgSldLIFwia3R5XCIgbWVtYmVyIGlzIG1pc3NpbmciKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGp3a0tleVR5cGUgIT0gIm9jdCIpIHsKLSAgICAg
ICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiVW5zdXBwb3J0ZWQgSldLIGtleSB0eXBlICIgKyBq
d2tLZXlUeXBlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCiAgICAgU3RyaW5n
IGtleUJhc2U2NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29u
LmdldCgpLCAiayIsIGtleUJhc2U2NFVSTCkpIHsKICAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKQpAQCAtMjQyLDYgKzI5OCwxMTkgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tl
eURhdGE+IEpTQ3J5cHRvSwogICAgIHJldHVybiBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZTo6
Y3JlYXRlKG9jdGV0U2VxdWVuY2UpOwogfQogCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0
YT4gSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjprZXlEYXRhUlNBQ29tcG9uZW50cygpIGNv
bnN0Cit7CisgICAgVmVjdG9yPGNoYXI+IG1vZHVsdXM7CisgICAgVmVjdG9yPGNoYXI+IGV4cG9u
ZW50OworICAgIFZlY3RvcjxjaGFyPiBwcml2YXRlRXhwb25lbnQ7CisKKyAgICBpZiAoIWdldEJp
Z0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVz
KSkgeworICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJSZXF1aXJlZCBKV0sgXCJuXCIgbWVtYmVyIGlzIG1pc3Np
bmciKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFnZXRCaWdJ
bnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJlIiwgZXhwb25lbnQp
KSB7CisgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlzc2lu
ZyIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImQiLCBtb2R1bHVzKSkg
eworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNy
ZWF0ZVB1YmxpYyhtb2R1bHVzLCBleHBvbmVudCk7CisgICAgfQorCisgICAgQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBmaXJzdFByaW1lSW5mbzsKKyAgICBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKKyAgICBWZWN0b3I8
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmltZUluZm9zOwor
ICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgp
LCAicCIsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgeworICAgICAgICBpZiAobV9leGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywg
ZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkcCIsIGZpcnN0UHJpbWVJ
bmZvLmZhY3RvckNSVEV4cG9uZW50KSkgeworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ3J5cHRv
S2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHBy
aXZhdGVFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJv
bUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFj
dG9yKSkgeworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7Cisg
ICAgfQorCisgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pz
b24uZ2V0KCksICJkcSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKKyAg
ICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOworICAgIH0KKworICAg
IGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
cWkiLCBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKSB7CisgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZSht
b2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKKyAgICB9CisKKyAgICBKU0FycmF5
KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CisgICAgaWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9l
eGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhlclByaW1lSW5mb0pTQXJyYXkpKSB7CisgICAg
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJp
dmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50
LCBmaXJzdFByaW1lSW5mbywgc2Vjb25kUHJpbWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0FycmF5LT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmlt
ZUluZm8gaW5mbzsKKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUluZm9KU0Fy
cmF5LT5nZXRJbmRleChtX2V4ZWMsIGkpOworICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoIWVsZW1lbnQu
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiSldLIFwi
b3RoXCIgYXJyYXkgbWVtYmVyIGlzIG5vdCBhbiBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZy
b21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5wcmltZUZhY3Rvcikp
IHsKKyAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJDYW5ub3QgZ2V0IHByaW1lIGZhY3RvciBmb3Ig
YSBwcmltZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09O
KG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJkIiwgaW5mby5mYWN0b3JDUlRFeHBvbmVudCkp
IHsKKyAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJDYW5ub3QgZ2V0IGZhY3RvciBDUlQgZXhwb25l
bnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JG
cm9tSlNPTihtX2V4ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAidCIsIGluZm8uZmFjdG9yQ1JUQ29l
ZmZpY2llbnQpKSB7CisgICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiQ2Fubm90IGdldCBmYWN0b3Ig
Q1JUIGNvZWZmaWNpZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgb3RoZXJQcmltZUlu
Zm9zLmFwcGVuZChpbmZvKTsKKyAgICB9CisKKyAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHM6OmNyZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEobW9kdWx1cywgZXhwb25l
bnQsIHByaXZhdGVFeHBvbmVudCwgZmlyc3RQcmltZUluZm8sIHNlY29uZFByaW1lSW5mbywgb3Ro
ZXJQcmltZUluZm9zKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5
cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5RGF0YSgpIGNvbnN0Cit7CisgICAgU3RyaW5nIGp3
a0tleVR5cGU7CisgICAgaWYgKCFnZXRTdHJpbmdGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQo
KSwgImt0eSIsIGp3a0tleVR5cGUpKSB7CisgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgIlJlcXVpcmVkIEpXSyBc
Imt0eVwiIG1lbWJlciBpcyBtaXNzaW5nIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChqd2tLZXlUeXBlID09ICJvY3QiKQorICAgICAgICByZXR1cm4ga2V5RGF0
YU9jdGV0U2VxdWVuY2UoKTsKKworICAgIGlmIChqd2tLZXlUeXBlID09ICJSU0EiKQorICAgICAg
ICByZXR1cm4ga2V5RGF0YVJTQUNvbXBvbmVudHMoKTsKKworICAgIHRocm93VHlwZUVycm9yKG1f
ZXhlYywgIlVuc3VwcG9ydGVkIEpXSyBrZXkgdHlwZSAiICsgandrS2V5VHlwZSk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmgJKHJldmlzaW9uIDE1OTE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlv
bkpXSy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIHByaXZhdGU6CiAgICAgSlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7
CiAKICAgICBib29sIGtleVNpemVJc1ZhbGlkKHNpemVfdCBzaXplSW5CaXRzKSBjb25zdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4ga2V5RGF0YU9jdGV0U2VxdWVuY2UoKSBj
b25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4ga2V5RGF0YVJTQUNvbXBv
bmVudHMoKSBjb25zdDsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBtX2V4ZWM7CiAgICAgSlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4gbV9qc29uOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaAkocmV2
aXNpb24gMTU5MTU1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobURl
c2NyaXB0aW9uQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCkBAIC00
Myw2ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhcios
IHVuc2lnbmVkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3Qg
U3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBj
b25zdCBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSA9IDA7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVN
YWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCIKKworI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6
OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYs
IGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnZlcmlm
eShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgLypzaWduYXR1cmUqLywgY29uc3QgVmVjdG9yPENyeXB0
b09wZXJhdGlvbkRhdGE+JiAvKmRhdGEqLywgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVy
PiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDE1OTE1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsOCBAQCBjbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI7CiAKIEVO
VU1fQ0xBU1MoQ3J5cHRvS2V5Q2xhc3MpIHsKICAgICBITUFDLAotICAgIEFFUworICAgIEFFUywK
KyAgICBSU0EKIH07CiAKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3VudGVkPENyeXB0
b0tleT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0YS5oCShyZXZpc2lv
biAxNTkxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIGNsYXNzIENyeXB0b0tleURhdGEgewogV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ3J5cHRvS2V5RGF0YSk7CiBwdWJsaWM6CiAgICAgRU5VTV9DTEFTUyhG
b3JtYXQpIHsKLSAgICAgICAgT2N0ZXRTZXF1ZW5jZQorICAgICAgICBPY3RldFNlcXVlbmNlLAor
ICAgICAgICBSU0FDb21wb25lbnRzCiAgICAgfTsKIAogICAgIENyeXB0b0tleURhdGEoRm9ybWF0
IGZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCShyZXZpc2lvbiAxNTkxNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OmltcG9ydEtleShjCiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29uc3QgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVu
Y2UmIGtleURhdGFPY3RldFNlcXVlbmNlID0gYXNDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShr
ZXlEYXRhKTsKKyAgICBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSYga2V5RGF0YU9j
dGV0U2VxdWVuY2UgPSB0b0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlKGtleURhdGEpOwogICAg
IFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdCA9IENyeXB0b0tleUFFUzo6Y3JlYXRlKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMsIGtleURhdGFPY3RldFNlcXVlbmNlLm9jdGV0
U2VxdWVuY2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKICAgICBwcm9taXNlLT5mdWxmaWxsKHJl
c3VsdC5yZWxlYXNlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAJKHJldmlzaW9uIDE1OTE1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhN
QUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtSE1BQzo6aW1wb3J0S2V5KGNvbnMKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1
ZW5jZSYga2V5RGF0YU9jdGV0U2VxdWVuY2UgPSBhc0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNl
KGtleURhdGEpOworICAgIGNvbnN0IENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlJiBrZXlEYXRh
T2N0ZXRTZXF1ZW5jZSA9IHRvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uoa2V5RGF0YSk7CiAK
ICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0
YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bVJTQVNTQV9QS0NTMV92MV81LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCisjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnNfbmFtZSA9ICJyc2Fzc2EtcGtjczEtdjFf
NSI7CisKK0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNSgpCit7Cit9CisKK0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81Ojp+Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUoKQoreworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bT4obmV3IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81KTsKK30KKworQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aWRlbnRp
ZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKK30KKwordm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleURhdGEmIGtleURhdGEs
IGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIGNvbnN0IENy
eXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyYgcnNhU1NBUGFyYW1ldGVycyA9IHN0YXRpY19j
YXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyY+KHBhcmFtZXRlcnMpOwor
ICAgIGNvbnN0IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiByc2FDb21wb25lbnRzID0gdG9D
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhrZXlEYXRhKTsKKworICAgIFJlZlB0cjxDcnlwdG9L
ZXlSU0E+IHJlc3VsdCA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81LCByc2FDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNh
Z2UpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChyc2FTU0FQYXJhbWV0ZXJzLmhh
c0hhc2gpCisgICAgICAgIHJlc3VsdC0+cmVzdHJpY3RUb0hhc2gocnNhU1NBUGFyYW1ldGVycy5o
YXNoKTsKKworICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0LnJlbGVhc2UoKSk7Cit9CisKK3Zv
aWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmdlbmVyYXRlS2V5KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENy
eXB0b0tleVVzYWdlIHVzYWdlcywgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9t
aXNlLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FLZXlH
ZW5QYXJhbXMmIHJzYVBhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0
aG1Sc2FLZXlHZW5QYXJhbXMmPihwYXJhbWV0ZXJzKTsKKworICAgIENyeXB0b0tleVJTQTo6Z2Vu
ZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81LCBy
c2FQYXJhbWV0ZXJzLm1vZHVsdXNMZW5ndGgsIHJzYVBhcmFtZXRlcnMucHVibGljRXhwb25lbnQs
IGV4dHJhY3RhYmxlLCB1c2FnZXMsIHN0ZDo6bW92ZShwcm9taXNlKSk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVfaAorI2RlZmluZSBDcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNV9oCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIKKworI2lmIEVOQUJM
RShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81IEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfbmFtZTsKKyAgICBzdGF0
aWMgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBzX2lkZW50aWZpZXIgPSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNTsKKworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29u
c3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jiwgc3RkOjp1
bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCB2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNv
bnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVyZSwgY29u
c3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJv
bWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwg
RXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRLZXkoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29s
IGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFw
cGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81KCk7CisgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzUoKTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQorI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81X2gKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHJldmlz
aW9uIDE1OTE1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NiwxOCArNTYsMjEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
Y2hhcj4gbV9rZXk7CiB9OwogCi1pbmxpbmUgY29uc3QgQ3J5cHRvS2V5QUVTKiBhc0NyeXB0b0tl
eUFFUyhjb25zdCBDcnlwdG9LZXkmIGtleSkKK2lubGluZSBib29sIGlzQ3J5cHRvS2V5QUVTKGNv
bnN0IENyeXB0b0tleSYga2V5KQogewotICAgIGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9L
ZXlDbGFzczo6QUVTKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5QUVTKj4oJmtleSk7CisgICAgcmV0dXJuIGtleS5rZXlDbGFz
cygpID09IENyeXB0b0tleUNsYXNzOjpBRVM7CiB9CiAKLWlubGluZSBDcnlwdG9LZXlBRVMqIGFz
Q3J5cHRvS2V5QUVTKENyeXB0b0tleSYga2V5KQoraW5saW5lIGNvbnN0IENyeXB0b0tleUFFUyYg
dG9DcnlwdG9LZXlBRVMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlD
bGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpBRVMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlBRVMqPigma2V5KTsKKyAgICBSRUxFQVNF
X0FTU0VSVChpc0NyeXB0b0tleUFFUyhrZXkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgQ3J5cHRvS2V5QUVTJj4oa2V5KTsKK30KKworaW5saW5lIENyeXB0b0tleUFFUyYgdG9Dcnlw
dG9LZXlBRVMoQ3J5cHRvS2V5JiBrZXkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDcnlwdG9L
ZXlBRVMoa2V5KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleUFFUyY+KGtleSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaAkocmV2aXNp
b24gMTU5MTU1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9j
dGV0U2VxdWVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxjaGFyPiBtX2tleURhdGE7CiB9OwogCi1pbmxpbmUgY29uc3QgQ3J5cHRvS2V5
RGF0YU9jdGV0U2VxdWVuY2UmIGFzQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UoY29uc3QgQ3J5
cHRvS2V5RGF0YSYgZGF0YSkKK2lubGluZSBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5j
ZSYgdG9DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShjb25zdCBDcnlwdG9LZXlEYXRhJiBkYXRh
KQogewogICAgIEFTU0VSVChkYXRhLmZvcm1hdCgpID09IENyeXB0b0tleURhdGE6OkZvcm1hdDo6
T2N0ZXRTZXF1ZW5jZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleURh
dGFPY3RldFNlcXVlbmNlJj4oZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMu
aCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhj
b25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQp
CisgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6OkZvcm1hdDo6UlNBQ29tcG9uZW50
cykKKyAgICAsIG1fdHlwZShUeXBlOjpQdWJsaWMpCisgICAgLCBtX21vZHVsdXMobW9kdWx1cykK
KyAgICAsIG1fZXhwb25lbnQoZXhwb25lbnQpCit7Cit9CisKK0NyeXB0b0tleURhdGFSU0FDb21w
b25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhjb25zdCBWZWN0b3I8Y2hhcj4mIG1v
ZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
cHJpdmF0ZUV4cG9uZW50KQorICAgIDogQ3J5cHRvS2V5RGF0YShDcnlwdG9LZXlEYXRhOjpGb3Jt
YXQ6OlJTQUNvbXBvbmVudHMpCisgICAgLCBtX3R5cGUoVHlwZTo6UHJpdmF0ZSkKKyAgICAsIG1f
bW9kdWx1cyhtb2R1bHVzKQorICAgICwgbV9leHBvbmVudChleHBvbmVudCkKKyAgICAsIG1fcHJp
dmF0ZUV4cG9uZW50KHByaXZhdGVFeHBvbmVudCkKKyAgICAsIG1faGFzQWRkaXRpb25hbFByaXZh
dGVLZXlQYXJhbWV0ZXJzKGZhbHNlKQoreworfQorCitDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVz
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZh
dGVFeHBvbmVudCwgY29uc3QgUHJpbWVJbmZvJiBmaXJzdFByaW1lSW5mbywgY29uc3QgUHJpbWVJ
bmZvJiBzZWNvbmRQcmltZUluZm8sIGNvbnN0IFZlY3RvcjxQcmltZUluZm8+JiBvdGhlclByaW1l
SW5mb3MpCisgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6OkZvcm1hdDo6UlNBQ29t
cG9uZW50cykKKyAgICAsIG1fdHlwZShUeXBlOjpQcml2YXRlKQorICAgICwgbV9tb2R1bHVzKG1v
ZHVsdXMpCisgICAgLCBtX2V4cG9uZW50KGV4cG9uZW50KQorICAgICwgbV9wcml2YXRlRXhwb25l
bnQocHJpdmF0ZUV4cG9uZW50KQorICAgICwgbV9oYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFt
ZXRlcnModHJ1ZSkKKyAgICAsIG1fZmlyc3RQcmltZUluZm8oZmlyc3RQcmltZUluZm8pCisgICAg
LCBtX3NlY29uZFByaW1lSW5mbyhzZWNvbmRQcmltZUluZm8pCisgICAgLCBtX290aGVyUHJpbWVJ
bmZvcyhvdGhlclByaW1lSW5mb3MpCit7Cit9CisKK0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
Ojp+Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50c19oCisjZGVmaW5lIENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzX2gKKworI2luY2x1ZGUgIkNyeXB0b0tleURhdGEuaCIKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyBGSU5B
TCA6IHB1YmxpYyBDcnlwdG9LZXlEYXRhIHsKK3B1YmxpYzoKKyAgICBFTlVNX0NMQVNTKFR5cGUp
IHsKKyAgICAgICAgUHVibGljLAorICAgICAgICBQcml2YXRlCisgICAgfTsKKworICAgIHN0cnVj
dCBQcmltZUluZm8geworICAgICAgICBWZWN0b3I8Y2hhcj4gcHJpbWVGYWN0b3I7CisgICAgICAg
IFZlY3RvcjxjaGFyPiBmYWN0b3JDUlRFeHBvbmVudDsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGZh
Y3RvckNSVENvZWZmaWNpZW50OworICAgIH07CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBjcmVhdGVQdWJsaWMoY29uc3QgVmVjdG9yPGNo
YXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4obmV3
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKG1vZHVsdXMsIGV4cG9uZW50KSk7CisgICAgfQor
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4g
Y3JlYXRlUHJpdmF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKG1vZHVsdXMsIGV4cG9uZW50LCBw
cml2YXRlRXhwb25lbnQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRh
KGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVu
dCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwcml2YXRlRXhwb25lbnQsIGNvbnN0IFByaW1lSW5mbyYg
Zmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1lSW5mbyYgc2Vjb25kUHJpbWVJbmZvLCBjb25zdCBW
ZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9zKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4obmV3IENyeXB0b0tl
eURhdGFSU0FDb21wb25lbnRzKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZp
cnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcykpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKCk7CisKKyAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8vIFByaXZhdGUgYW5kIHB1
YmxpYyBrZXlzLgorICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cygpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWx1czsgfQorICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQoKSBjb25z
dCB7IHJldHVybiBtX2V4cG9uZW50OyB9CisKKyAgICAvLyBPbmx5IHByaXZhdGUga2V5cy4KKyAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJpdmF0ZUV4cG9uZW50OyB9CisgICAgYm9vbCBoYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFt
ZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVy
czsgfQorICAgIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8oKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0UHJpbWVJbmZvOyB9CisgICAgY29uc3QgUHJpbWVJbmZvJiBzZWNvbmRQcmltZUlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX3NlY29uZFByaW1lSW5mbzsgfQorICAgIGNvbnN0IFZlY3Rv
cjxQcmltZUluZm8+JiBvdGhlclByaW1lSW5mb3MoKSBjb25zdCB7IHJldHVybiBtX290aGVyUHJp
bWVJbmZvczsgfQorCitwcml2YXRlOgorICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNv
bnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCk7
CisgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1
bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHBy
aXZhdGVFeHBvbmVudCk7CisgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVj
dG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBvbmVudCwgY29uc3QgUHJpbWVJbmZvJiBmaXJzdFByaW1l
SW5mbywgY29uc3QgUHJpbWVJbmZvJiBzZWNvbmRQcmltZUluZm8sIGNvbnN0IFZlY3RvcjxQcmlt
ZUluZm8+JiBvdGhlclByaW1lSW5mb3MpOworCisgICAgVHlwZSBtX3R5cGU7CisKKyAgICAvLyBQ
cml2YXRlIGFuZCBwdWJsaWMga2V5cy4KKyAgICBWZWN0b3I8Y2hhcj4gbV9tb2R1bHVzOworICAg
IFZlY3RvcjxjaGFyPiBtX2V4cG9uZW50OworCisgICAgLy8gT25seSBwcml2YXRlIGtleXMuCisg
ICAgVmVjdG9yPGNoYXI+IG1fcHJpdmF0ZUV4cG9uZW50OworICAgIGJvb2wgbV9oYXNBZGRpdGlv
bmFsUHJpdmF0ZUtleVBhcmFtZXRlcnM7CisgICAgUHJpbWVJbmZvIG1fZmlyc3RQcmltZUluZm87
CisgICAgUHJpbWVJbmZvIG1fc2Vjb25kUHJpbWVJbmZvOworICAgIFZlY3RvcjxQcmltZUluZm8+
IG1fb3RoZXJQcmltZUluZm9zOyAvLyBXaGVuIHRocmVlIG9yIG1vcmUgcHJpbWVzIGhhdmUgYmVl
biB1c2VkLCB0aGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIGlzIGJlIHRoZSBudW1iZXIgb2Yg
cHJpbWVzIHVzZWQgbWludXMgdHdvLgorfTsKKworaW5saW5lIGNvbnN0IENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzJiB0b0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IENyeXB0b0tl
eURhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEuZm9ybWF0KCkgPT0gQ3J5cHRvS2V5RGF0
YTo6Rm9ybWF0OjpSU0FDb21wb25lbnRzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmPihkYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5
cHRvS2V5RGF0YVJTQUNvbXBvbmVudHNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5SE1BQy5oCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlITUFDLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE4ICs1NywyMSBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxjaGFyPiBtX2tleTsKIH07CiAKLWlubGluZSBjb25zdCBDcnlw
dG9LZXlITUFDKiBhc0NyeXB0b0tleUhNQUMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCitpbmxpbmUg
Ym9vbCBpc0NyeXB0b0tleUhNQUMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtl
eS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpITUFDKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyo+KCZrZXkp
OworICAgIHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBDcnlwdG9LZXlDbGFzczo6SE1BQzsKIH0K
IAotaW5saW5lIENyeXB0b0tleUhNQUMqIGFzQ3J5cHRvS2V5SE1BQyhDcnlwdG9LZXkmIGtleSkK
K2lubGluZSBjb25zdCBDcnlwdG9LZXlITUFDJiB0b0NyeXB0b0tleUhNQUMoY29uc3QgQ3J5cHRv
S2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpI
TUFDKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5
cHRvS2V5SE1BQyo+KCZrZXkpOworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ3J5cHRvS2V5SE1BQyhr
ZXkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyY+KGtleSk7
Cit9CisKK2lubGluZSBDcnlwdG9LZXlITUFDJiB0b0NyeXB0b0tleUhNQUMoQ3J5cHRvS2V5JiBr
ZXkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNDcnlwdG9LZXlITUFDKGtleSkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlITUFDJj4oa2V5KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlS
U0EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDcnlwdG9LZXlSU0FfaAorI2RlZmluZSBDcnlwdG9LZXlSU0FfaAorCisjaW5jbHVkZSAiQ3J5
cHRvS2V5LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TKQordHlwZWRlZiBzdHJ1Y3QgX0NDUlNBQ3J5cHRvciAqQ0NSU0FD
cnlwdG9yUmVmOwordHlwZWRlZiBDQ1JTQUNyeXB0b3JSZWYgUGxhdGZvcm1SU0FLZXk7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czsKK2NsYXNzIENyeXB0b0tleVBhaXI7CitjbGFzcyBQcm9taXNlV3JhcHBlcjsKKworY2xh
c3MgQ3J5cHRvS2V5UlNBIEZJTkFMIDogcHVibGljIENyeXB0b0tleSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBs
YXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIHR5
cGUsIHBsYXRmb3JtS2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpKTsKKyAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyYga2V5RGF0YSwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpOworICAgIHZpcnR1YWwgfkNy
eXB0b0tleVJTQSgpOworCisgICAgdm9pZCByZXN0cmljdFRvSGFzaChDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyKTsKKworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyLCB1bnNpZ25lZCBtb2R1bHVzTGVuZ3RoLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IHB1YmxpY0V4cG9uZW50LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1
bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPik7CisKKyAgICB2aXJ0dWFsIENyeXB0b0tleUNsYXNz
IGtleUNsYXNzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsg
fQorCisgICAgUGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXkoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtS2V5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlv
bihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImKSBjb25zdCBPVkVSUklERTsKKwor
cHJpdmF0ZToKKyAgICBDcnlwdG9LZXlSU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgQ3J5
cHRvS2V5VHlwZSwgUGxhdGZvcm1SU0FLZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlKTsKKworICAgIFBsYXRmb3JtUlNBS2V5IG1fcGxhdGZvcm1LZXk7CisKKyAgICBib29sIG1f
cmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoOworICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIg
bV9oYXNoOworfTsKKworaW5saW5lIGJvb2wgaXNDcnlwdG9LZXlSU0EoY29uc3QgQ3J5cHRvS2V5
JiBrZXkpCit7CisgICAgcmV0dXJuIGtleS5rZXlDbGFzcygpID09IENyeXB0b0tleUNsYXNzOjpS
U0E7Cit9CisKK2lubGluZSBjb25zdCBDcnlwdG9LZXlSU0EmIHRvQ3J5cHRvS2V5UlNBKGNvbnN0
IENyeXB0b0tleSYga2V5KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzQ3J5cHRvS2V5UlNBKGtl
eSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlSU0EmPihrZXkpOwor
fQorCitpbmxpbmUgQ3J5cHRvS2V5UlNBJiBhc0NyeXB0b0tleVJTQShDcnlwdG9LZXkmIGtleSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0NyeXB0b0tleVJTQShrZXkpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3J5cHRvS2V5UlNBJj4oa2V5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRv
S2V5UlNBX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JD
TWFjLmNwcAkocmV2aXNpb24gMTU5MTU1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjcgKzky
LDI3IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRpb24KIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPENyeXB0
b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHBy
b21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUFl
c0NiY1BhcmFtcyYgYWVzQ0JDUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0Fs
Z29yaXRobUFlc0NiY1BhcmFtcyY+KHBhcmFtZXRlcnMpOwotICAgIGNvbnN0IENyeXB0b0tleUFF
UyogYWVzS2V5ID0gYXNDcnlwdG9LZXlBRVMoa2V5KTsKIAotICAgIGlmICghYWVzS2V5KSB7Cisg
ICAgaWYgKCFpc0NyeXB0b0tleUFFUyhrZXkpKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY29uc3QgQ3J5cHRvS2V5QUVTJiBh
ZXNLZXkgPSB0b0NyeXB0b0tleUFFUyhrZXkpOwogCi0gICAgdHJhbnNmb3JtQUVTX0NCQyhrQ0NF
bmNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCAqYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlz
ZSkpOworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzQ0JDUGFyYW1ldGVycywg
YWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkpOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19DQkM6OmRlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRp
b25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJh
bXMmIGFlc0NCQ1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKLSAgICBjb25zdCBDcnlwdG9LZXlBRVMqIGFlc0tl
eSA9IGFzQ3J5cHRvS2V5QUVTKGtleSk7CiAKLSAgICBpZiAoIWFlc0tleSkgeworICAgIGlmICgh
aXNDcnlwdG9LZXlBRVMoa2V5KSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNvbnN0IENyeXB0b0tleUFFUyYgYWVzS2V5ID0g
dG9DcnlwdG9LZXlBRVMoa2V5KTsKIAotICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRGVjcnlwdCwg
YWVzQ0JDUGFyYW1ldGVycywgKmFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKKyAg
ICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMsIGFlc0tleSwg
ZGF0YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUhNQUNNYWMuY3BwCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwyMCAr
OTUsMjAgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBjYWxjdWxhdGVTaQogdm9pZCBD
cnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlz
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1Bh
cmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1BQyogaG1hY0tl
eSA9IGFzQ3J5cHRvS2V5SE1BQyhrZXkpOwogCi0gICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRo
bTsKLSAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNo
LCBhbGdvcml0aG0pKSB7CisgICAgaWYgKCFpc0NyeXB0b0tleUhNQUMoa2V5KSkgewogICAgICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNv
bnN0IENyeXB0b0tleUhNQUMmIGhtYWNLZXkgPSB0b0NyeXB0b0tleUhNQUMoa2V5KTsKIAotICAg
IGlmICghaG1hY0tleSkgeworICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07CisgICAgaWYg
KCFnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGht
KSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNp
Z25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXktPmtleSgpLCBkYXRhKTsKKyAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1h
Y0tleS5rZXkoKSwgZGF0YSk7CiAKICAgICBwcm9taXNlLT5mdWxmaWxsKHNpZ25hdHVyZSk7CiB9
CkBAIC0xMTYsMjAgKzExNiwyMCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29u
c3QgQ3J5CiB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnZlcmlmeShjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYgZXhwZWN0ZWRTaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxDcnlw
dG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBw
cm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29y
aXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKLSAgICBjb25zdCBDcnlwdG9LZXlITUFDKiBo
bWFjS2V5ID0gYXNDcnlwdG9LZXlITUFDKGtleSk7CiAKLSAgICBDQ0htYWNBbGdvcml0aG0gYWxn
b3JpdGhtOwotICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvQWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJz
Lmhhc2gsIGFsZ29yaXRobSkpIHsKKyAgICBpZiAoIWlzQ3J5cHRvS2V5SE1BQyhrZXkpKSB7CiAg
ICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYgaG1hY0tleSA9IHRvQ3J5cHRvS2V5SE1BQyhrZXkpOwog
Ci0gICAgaWYgKCFobWFjS2V5KSB7CisgICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsKKyAg
ICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBhbGdv
cml0aG0pKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3Vs
YXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS0+a2V5KCksIGRhdGEpOworICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGht
LCBobWFjS2V5LmtleSgpLCBkYXRhKTsKIAogICAgIGJvb2wgcmVzdWx0ID0gc2lnbmF0dXJlLnNp
emUoKSA9PSBleHBlY3RlZFNpZ25hdHVyZS5zZWNvbmQgJiYgIW1lbWNtcChzaWduYXR1cmUuZGF0
YSgpLCBleHBlY3RlZFNpZ25hdHVyZS5maXJzdCwgc2lnbmF0dXJlLnNpemUoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnlNYWMuY3BwCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oIgogI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhNQUMuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNS5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTEuaCIKICNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1TSEEyMjQuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG1TSEEyNTYuaCIKQEAgLTQyLDYgKzQzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6cGxhdGZvcm1SZQogewogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobUFF
U19DQkM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6c19pZGVudGlmaWVyLCBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjpjcmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0
b0FsZ29yaXRobUhNQUM6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19pZGVudGlmaWVy
LCBDcnlwdG9BbGdvcml0aG1ITUFDOjpjcmVhdGUpOworICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzX25hbWUsIENyeXB0b0FsZ29yaXRobVJT
QVNTQV9QS0NTMV92MV81OjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjpjcmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRobVNI
QTE6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdv
cml0aG1TSEExOjpjcmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0b0FsZ29yaXRo
bVNIQTIyNDo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEEyMjQ6OnNfaWRlbnRpZmllciwgQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0OjpjcmVhdGUpOwogICAgIHJlZ2lzdGVyQWxnb3JpdGhtKENyeXB0
b0FsZ29yaXRobVNIQTI1Njo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEEyNTY6OnNfaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBMjU2OjpjcmVhdGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJKU0RPTVBy
b21pc2UuaCIKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvci5oPgorCisjaWYg
ZGVmaW5lZChfX2hhc19pbmNsdWRlKQorI2lmIF9faGFzX2luY2x1ZGUoPENvbW1vbkNyeXB0by9D
b21tb25SU0FDcnlwdG9yLmg+KQorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25SU0FDcnlw
dG9yLmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9DQ19SU0FDUllQVE9SX0hfCitlbnVt
IHsKKyAgICBjY1JTQUtleVB1YmxpYyAgICAgICAgICA9IDAsCisgICAgY2NSU0FLZXlQcml2YXRl
ICAgICAgICAgPSAxCit9OwordHlwZWRlZiB1aW50MzJfdCBDQ1JTQUtleVR5cGU7CisjZW5kaWYK
KworZXh0ZXJuICJDIiBDQ0NyeXB0b3JTdGF0dXMgQ0NSU0FDcnlwdG9yQ3JlYXRlRnJvbURhdGEo
Q0NSU0FLZXlUeXBlIGtleVR5cGUsIHVpbnQ4X3QgKm1vZHVsdXMsIHNpemVfdCBtb2R1bHVzTGVu
Z3RoLCB1aW50OF90ICpleHBvbmVudCwgc2l6ZV90IGV4cG9uZW50TGVuZ3RoLCB1aW50OF90ICpw
LCBzaXplX3QgcExlbmd0aCwgdWludDhfdCAqcSwgc2l6ZV90IHFMZW5ndGgsIENDUlNBQ3J5cHRv
clJlZiAqcmVmKTsKK2V4dGVybiAiQyIgQ0NDcnlwdG9yU3RhdHVzIENDUlNBQ3J5cHRvckdlbmVy
YXRlUGFpcihzaXplX3Qga2V5c2l6ZSwgdWludDMyX3QgZSwgQ0NSU0FDcnlwdG9yUmVmICpwdWJs
aWNLZXksIENDUlNBQ3J5cHRvclJlZiAqcHJpdmF0ZUtleSk7CitleHRlcm4gIkMiIENDUlNBQ3J5
cHRvclJlZiBDQ1JTQUNyeXB0b3JHZXRQdWJsaWNLZXlGcm9tUHJpdmF0ZUtleShDQ1JTQUNyeXB0
b3JSZWYgcHJpdmtleSk7CitleHRlcm4gIkMiIHZvaWQgQ0NSU0FDcnlwdG9yUmVsZWFzZShDQ1JT
QUNyeXB0b3JSZWYga2V5KTsKK2V4dGVybiAiQyIgQ0NDcnlwdG9yU3RhdHVzIENDUlNBR2V0S2V5
Q29tcG9uZW50cyhDQ1JTQUNyeXB0b3JSZWYgcnNhS2V5LCB1aW50OF90ICptb2R1bHVzLCBzaXpl
X3QgKm1vZHVsdXNMZW5ndGgsIHVpbnQ4X3QgKmV4cG9uZW50LCBzaXplX3QgKmV4cG9uZW50TGVu
Z3RoLCB1aW50OF90ICpwLCBzaXplX3QgKnBMZW5ndGgsIHVpbnQ4X3QgKnEsIHNpemVfdCAqcUxl
bmd0aCk7CitleHRlcm4gIkMiIENDUlNBS2V5VHlwZSBDQ1JTQUdldEtleVR5cGUoQ0NSU0FDcnlw
dG9yUmVmIGtleSk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3J5cHRvS2V5UlNBOjpDcnlw
dG9LZXlSU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9LZXlU
eXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICA6IENyeXB0b0tleShpZGVudGlmaWVyLCB0eXBlLCBl
eHRyYWN0YWJsZSwgdXNhZ2UpCisgICAgLCBtX3BsYXRmb3JtS2V5KHBsYXRmb3JtS2V5KQorICAg
ICwgbV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2goZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8
Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIsIGNvbnN0IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiBrZXlEYXRh
LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKK3sKKyAgICBpZiAoa2V5
RGF0YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlR5cGU6OlByaXZhdGUg
JiYgIWtleURhdGEuaGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpIHsKKyAgICAg
ICAgV1RGTG9nQWx3YXlzKCJQcml2YXRlIGtleXMgd2l0aG91dCBhZGRpdGlvbmFsIGRhdGEgYXJl
IG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlm
IChrZXlEYXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSkgeworICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vMTU0NDQwNzQ+IHRyYWNrcyBhZGRpbmcgc3VwcG9ydC4KKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJLZXlzIHdpdGggbW9yZSB0aGFuIHR3byBwcmltZXMgYXJlIG5vdCBzdXBwb3J0ZWQi
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIENDUlNBQ3J5cHRvclJlZiBj
cnlwdG9yOworICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBDQ1JTQUNyeXB0b3JDcmVhdGVG
cm9tRGF0YSgKKyAgICAgICAga2V5RGF0YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHM6OlR5cGU6OlB1YmxpYyA/IGNjUlNBS2V5UHVibGljIDogY2NSU0FLZXlQcml2YXRlLAor
ICAgICAgICAodWludDhfdCopa2V5RGF0YS5tb2R1bHVzKCkuZGF0YSgpLCBrZXlEYXRhLm1vZHVs
dXMoKS5zaXplKCksCisgICAgICAgICh1aW50OF90KilrZXlEYXRhLmV4cG9uZW50KCkuZGF0YSgp
LCBrZXlEYXRhLmV4cG9uZW50KCkuc2l6ZSgpLAorICAgICAgICAodWludDhfdCopa2V5RGF0YS5m
aXJzdFByaW1lSW5mbygpLnByaW1lRmFjdG9yLmRhdGEoKSwga2V5RGF0YS5maXJzdFByaW1lSW5m
bygpLnByaW1lRmFjdG9yLnNpemUoKSwKKyAgICAgICAgKHVpbnQ4X3QqKWtleURhdGEuc2Vjb25k
UHJpbWVJbmZvKCkucHJpbWVGYWN0b3IuZGF0YSgpLCBrZXlEYXRhLnNlY29uZFByaW1lSW5mbygp
LnByaW1lRmFjdG9yLnNpemUoKSwKKyAgICAgICAgJmNyeXB0b3IpOworCisgICAgaWYgKHN0YXR1
cykgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGNyZWF0ZSBSU0Ega2V5IGZyb20gZGF0
YSwgZXJyb3IgJWQiLCBzdGF0dXMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBrZXlEYXRh
LnR5cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljID8gQ3J5
cHRvS2V5VHlwZTo6UHVibGljIDogQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwgY3J5cHRvciwgZXh0
cmFjdGFibGUsIHVzYWdlKSk7Cit9CisKK0NyeXB0b0tleVJTQTo6fkNyeXB0b0tleVJTQSgpCit7
CisgICAgQ0NSU0FDcnlwdG9yUmVsZWFzZShtX3BsYXRmb3JtS2V5KTsKK30KKwordm9pZCBDcnlw
dG9LZXlSU0E6OnJlc3RyaWN0VG9IYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKK3sKKyAgICBtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCA9IHRydWU7CisgICAgbV9o
YXNoID0gaWRlbnRpZmllcjsKK30KKwordm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGht
RGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBj
b25zdAoreworICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVy
KTsKKworICAgIEFTU0VSVChDQ1JTQUdldEtleVR5cGUobV9wbGF0Zm9ybUtleSkgPT0gY2NSU0FL
ZXlQdWJsaWMgfHwgQ0NSU0FHZXRLZXlUeXBlKG1fcGxhdGZvcm1LZXkpID09IGNjUlNBS2V5UHJp
dmF0ZSk7CisgICAgYm9vbCBwbGF0Zm9ybUtleUlzUHVibGljID0gQ0NSU0FHZXRLZXlUeXBlKG1f
cGxhdGZvcm1LZXkpID09IGNjUlNBS2V5UHVibGljOworICAgIENDUlNBQ3J5cHRvclJlZiBwdWJs
aWNLZXkgPSBwbGF0Zm9ybUtleUlzUHVibGljID8gbV9wbGF0Zm9ybUtleSA6IENDUlNBQ3J5cHRv
ckdldFB1YmxpY0tleUZyb21Qcml2YXRlS2V5KG1fcGxhdGZvcm1LZXkpOworCisgICAgc2l6ZV90
IG1vZHVsdXNMZW5ndGg7CisgICAgc2l6ZV90IGV4cG9uZW50TGVuZ3RoOworICAgIHVpbnQ4X3Qg
cHVibGljRXhwb25lbnRbMTYzODRdOworICAgIHNpemVfdCBkdW1teTsKKyAgICB1aW50OF90IGJ1
ZlsxNjM4NF07CisgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDUlNBR2V0S2V5Q29tcG9u
ZW50cyhwdWJsaWNLZXksIGJ1ZiwgJm1vZHVsdXNMZW5ndGgsIHB1YmxpY0V4cG9uZW50LCAmZXhw
b25lbnRMZW5ndGgsIGJ1ZiwgJmR1bW15LCBidWYsICZkdW1teSk7CisgICAgaWYgKCFwbGF0Zm9y
bUtleUlzUHVibGljKSB7CisgICAgICAgIC8vIENDUlNBQ3J5cHRvckdldFB1YmxpY0tleUZyb21Q
cml2YXRlS2V5IGhhcyAiR2V0IiBpbiB0aGUgbmFtZSwgYnV0IGl0cyByZXN1bHQgbmVlZHMgdG8g
YmUgcmVsZWFzZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0vMTU0NDk2OTc+KS4KKyAgICAgICAgQ0NS
U0FDcnlwdG9yUmVsZWFzZShwdWJsaWNLZXkpOworICAgIH0KKyAgICBpZiAoc3RhdHVzKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkgY29tcG9uZW50cywgc3Rh
dHVzICVkIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1aWxkZXIu
YWRkKCJtb2R1bHVzTGVuZ3RoIiwgbW9kdWx1c0xlbmd0aCAqIDgpOworCisgICAgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+IHB1YmxpY0V4cG9uZW50VmVjdG9yOworICAgIHB1YmxpY0V4cG9uZW50VmVj
dG9yLmFwcGVuZChwdWJsaWNFeHBvbmVudCwgZXhwb25lbnRMZW5ndGgpOworICAgIGJ1aWxkZXIu
YWRkKCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50VmVjdG9yKTsKKworICAgIGlmICht
X3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgeworICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlv
bkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKKyAgICAgICAgaGFzaERlc2Ny
aXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJl
ZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFz
aCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGJp
Z0ludGVnZXJUb1VJbnQzMihjb25zdCBWZWN0b3I8Y2hhcj4mIGJpZ0ludGVnZXIsIHVpbnQzMl90
JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAr
IDQgPCBiaWdJbnRlZ2VyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiaWdJbnRlZ2VyW2ld
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gYmlnIHRvIGZpdCBpbiAzMiBiaXRz
LgorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBiaWdJbnRlZ2VyLnNpemUoKSA+IDQgPyBi
aWdJbnRlZ2VyLnNpemUoKSAtIDQgOiAwOyBpIDwgYmlnSW50ZWdlci5zaXplKCk7ICsraSkgewor
ICAgICAgICByZXN1bHQgPDw9IDg7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihiaWdJbnRlZ2VyW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBhbGdvcml0aG0sIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGgsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
cHVibGljRXhwb25lbnQsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UpCit7CisgICAgdWludDMyX3Qg
ZTsKKyAgICBpZiAoIWJpZ0ludGVnZXJUb1VJbnQzMihwdWJsaWNFeHBvbmVudCwgZSkpIHsKKyAg
ICAgICAgLy8gQWRkaW5nIHN1cHBvcnQgaXMgdHJhY2tlZCBhcyA8cmRhcjovL3Byb2JsZW0vMTU0
NDQwMzQ+LgorICAgICAgICBXVEZMb2dBbHdheXMoIlB1YmxpYyBleHBvbmVudCBpcyB0b28gYmln
LCBub3Qgc3VwcG9ydGVkIGJ5IENvbW1vbkNyeXB0byIpOworICAgICAgICBwcm9taXNlLT5yZWpl
Y3QobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQcm9taXNlV3JhcHBl
ciogbG9jYWxQcm9taXNlID0gcHJvbWlzZS5yZWxlYXNlKCk7CisKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFV
TFQsIDApLCBeeworICAgICAgICBDQ1JTQUNyeXB0b3JSZWYgY2NQdWJsaWNLZXk7CisgICAgICAg
IENDUlNBQ3J5cHRvclJlZiBjY1ByaXZhdGVLZXk7CisgICAgICAgIENDQ3J5cHRvclN0YXR1cyBz
dGF0dXMgPSBDQ1JTQUNyeXB0b3JHZW5lcmF0ZVBhaXIobW9kdWx1c0xlbmd0aCwgZSwgJmNjUHVi
bGljS2V5LCAmY2NQcml2YXRlS2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZ2VuZXJhdGUgYSBrZXkgcGFpciwgc3RhdHVzICVk
Iiwgc3RhdHVzKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF57CisgICAgICAgICAgICAgICAgbG9jYWxQcm9taXNlLT5yZWplY3QobnVsbHB0
cik7CisgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsUHJvbWlzZTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZlB0cjxDcnlwdG9L
ZXlSU0E+IHB1YmxpY0tleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgQ3J5cHRv
S2V5VHlwZTo6UHVibGljLCBjY1B1YmxpY0tleSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKKyAgICAg
ICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcHJpdmF0ZUtleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRl
KGFsZ29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwgY2NQcml2YXRlS2V5LCBleHRyYWN0
YWJsZSwgdXNhZ2UpOworICAgICAgICBDcnlwdG9LZXlQYWlyKiByZXN1bHQgPSBDcnlwdG9LZXlQ
YWlyOjpjcmVhdGUocHVibGljS2V5LnJlbGVhc2UoKSwgcHJpdmF0ZUtleS5yZWxlYXNlKCkpLmxl
YWtSZWYoKTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgXnsKKyAgICAgICAgICAgIGxvY2FsUHJvbWlzZS0+ZnVsZmlsbChhZG9wdFJlZihyZXN1bHQp
KTsKKyAgICAgICAgICAgIGRlbGV0ZSBsb2NhbFByb21pc2U7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExF
X0NSWVBUTykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5UlNBTWFjLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0w
LDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFy
YW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5
cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oCShyZXZpc2lvbiAxNTkxNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKKyAgICBDcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zKCkKKyAgICAgICAgOiBoYXNMZW5ndGgoZmFsc2UpCisgICAgeworICAgIH0KKwogICAg
IC8vIFRoZSBpbm5lciBoYXNoIGZ1bmN0aW9uIHRvIHVzZS4KICAgICBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2g7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRv
QWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zX2gK
KyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zX2gKKworI2luY2x1ZGUgIkNy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBh
cmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKK3B1YmxpYzoK
KyAgICAvLyBUaGUgbGVuZ3RoLCBpbiBiaXRzLCBvZiB0aGUgUlNBIG1vZHVsdXMuCisgICAgdW5z
aWduZWQgbW9kdWx1c0xlbmd0aDsKKyAgICAvLyBUaGUgUlNBIHB1YmxpYyBleHBvbmVudCwgZW5j
b2RlZCBhcyBCaWdJbnRlZ2VyLgorICAgIFZlY3RvcjxjaGFyPiBwdWJsaWNFeHBvbmVudDsKK307
CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorI2VuZGlmIC8vIENyeXB0
b0FsZ29yaXRobVJzYUtleUdlblBhcmFtc19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FT
c2FLZXlQYXJhbXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29yaXRobVJzYVNz
YUtleVBhcmFtc19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleQorCisjaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFRoaXMgcGFyYW1ldGVycyBjbGFzcyBpcyBjdXJyZW50bHkgbm90IHNw
ZWNpZmllZCBpbiBXZWJDcnlwdG8uCisvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBpbXBv
cnQgZnJvbSBKV0ssIHdoaWNoIHRyZWF0cyBoYXNoIGZ1bmN0aW9uIGFzIHBhcnQgb2YgYWxnb3Jp
dGhtCisvLyBpZGVudGlmaWVyLCBzbyB3ZSBuZWVkIHRvIHJlbWVtYmVyIGl0IHRvIGNvbXBhcmUg
d2l0aCBvbmUgcGFzc2VkIHRvIHNpZ24gb3IgdmVyaWZ5IGZ1bmN0aW9ucy4KK2NsYXNzIENyeXB0
b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzIHsKK3B1YmxpYzoKKyAgICBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMo
KQorICAgICAgICA6IGhhc0hhc2goZmFsc2UpCisgICAgeworICAgIH0KKworICAgIC8vIFRoZSBo
YXNoIGFsZ29yaXRobSB0byB1c2UuCisgICAgYm9vbCBoYXNIYXNoOworICAgIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQorI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc19oCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1Sc2FTc2FLZXlQYXJhbXMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMj
IC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FTc2FQ
YXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9D
cnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0Fs
Z29yaXRobVJzYVNzYVBhcmFtc19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFt
c19oCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFy
YW1zIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgeworcHVibGljOgor
ICAgIC8vIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuCisgICAgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBoYXNoOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8p
CisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zX2gKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJz
YVNzYVBhcmFtcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAj
IworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE1OTE1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIxIEBACisyMDEzLTExLTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCBrZXkgZ2VuZXJhdGlvbiBhbmQgSldLIGltcG9ydCBm
b3IgUlNBU1NBLVBLQ1MxLXYxXzUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNDIzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzOgorICAgICAg
ICAoaGV4VG9BcnJheUJ1ZmZlcik6IEZpeGVkIGEgdHlwbworICAgICAgICAoQmFzZTY0VVJMLnN0
cmluZ2lmeSk6CisgICAgICAgIChCYXNlNjRVUkwucGFyc2UpOgorICAgICAgICBBZGRlZCBoZWxw
ZXJzIHRvIGRlYWwgd2l0aCBCYXNlNjRVUkwsIGFzIG5lZWRlZCBmb3IgSldLLgorCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdl
bmVyYXRlLWtleS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vc3VidGxlL3JzYXNzYS1w
a2NzMS12MV81LWltcG9ydC1qd2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjcnlw
dG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWltcG9ydC1qd2suaHRtbDogQWRkZWQuCisKIDIw
MTMtMTEtMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGZhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1jcm9wLWJveC5odG1sIHRvIHRoZSBwaWxl
IG9mIHRpbnktY29sb3ItbWlzbWF0Y2ggdGVzdHMuCkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8v
c3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5l
cmF0ZS1rZXktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRv
L3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXktZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKK1Rlc3QgZ2VuZXJhdGluZyBhbiBSU0Ega2V5IHBh
aXIgZm9yIFJTQVNTQS1QS0NTMS12MV81LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworR2VuZXJhdGluZyBhIGtleSBwYWlyLi4uCitQQVNTIGtleVBhaXIudG9TdHJpbmcoKSBpcyAn
W29iamVjdCBLZXlQYWlyXScKK1BBU1Mga2V5UGFpci5wdWJsaWNLZXkudHlwZSBpcyAncHVibGlj
JworUEFTUyBrZXlQYWlyLnB1YmxpY0tleS5hbGdvcml0aG0ubmFtZSBpcyAncnNhc3NhLXBrY3Mx
LXYxXzUnCitQQVNTIGtleVBhaXIucHVibGljS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoIGlz
IDIwNDgKK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcoa2V5UGFpci5wdWJsaWNLZXkuYWxnb3Jp
dGhtLnB1YmxpY0V4cG9uZW50KSBpcyAnWzAxIDAwIDAxXScKK1BBU1Mga2V5UGFpci5wdWJsaWNL
ZXkuYWxnb3JpdGhtLmhhc2ggaXMgdW5kZWZpbmVkLgorUEFTUyBrZXlQYWlyLnByaXZhdGVLZXku
dHlwZSBpcyAncHJpdmF0ZScKK1BBU1Mga2V5UGFpci5wcml2YXRlS2V5LmFsZ29yaXRobS5uYW1l
IGlzICdyc2Fzc2EtcGtjczEtdjFfNScKK1BBU1Mga2V5UGFpci5wcml2YXRlS2V5LmFsZ29yaXRo
bS5tb2R1bHVzTGVuZ3RoIGlzIDIwNDgKK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmcoa2V5UGFp
ci5wcml2YXRlS2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkgaXMgJ1swMSAwMCAwMV0nCitQ
QVNTIGtleVBhaXIucHJpdmF0ZUtleS5hbGdvcml0aG0uaGFzaCBpcyB1bmRlZmluZWQuCisKK1Rl
c3RpbmcgdGhhdCBjdXN0b20gYXR0cmlidXRlcyBvbiBrZXlzIHN1cnZpdmUgZ2FyYmFnZSBjb2xs
ZWN0aW9uLi4uCitQQVNTIGtleVBhaXIucHVibGljS2V5LmZvbyBpcyAnYmFyJworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJh
dGUta2V5LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0w
LDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtj
czEtdjFfNS1nZW5lcmF0ZS1rZXkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0
ZS1rZXkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGdlbmVyYXRp
bmcgYW4gUlNBIGtleSBwYWlyIGZvciBSU0FTU0EtUEtDUzEtdjFfNS4iKTsKKworanNUZXN0SXNB
c3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1
YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIgYWxnb3JpdGhtS2V5R2Vu
ID0geworICAgIG5hbWU6ICJSU0FTU0EtUEtDUzEtdjFfNSIsCisgICAgLy8gUnNhS2V5R2VuUGFy
YW1zCisgICAgbW9kdWx1c0xlbmd0aDogMjA0OCwKKyAgICBwdWJsaWNFeHBvbmVudDogbmV3IFVp
bnQ4QXJyYXkoWzB4MDEsIDB4MDAsIDB4MDFdKSwgIC8vIEVxdWl2YWxlbnQgdG8gNjU1MzcKK307
Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1ZygiR2VuZXJhdGluZyBhIGtleSBwYWly
Li4uIik7CitjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5KGFsZ29yaXRobUtleUdlbiwgZXh0cmFj
dGFibGUsIFsic2lnbiIsICJ2ZXJpZnkiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBr
ZXlQYWlyID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJrZXlQYWlyLnRvU3RyaW5nKCkiLCAiJ1tv
YmplY3QgS2V5UGFpcl0nIik7CisgICAgc2hvdWxkQmUoImtleVBhaXIucHVibGljS2V5LnR5cGUi
LCAiJ3B1YmxpYyciKTsKKyAgICBzaG91bGRCZSgia2V5UGFpci5wdWJsaWNLZXkuYWxnb3JpdGht
Lm5hbWUiLCAiJ3JzYXNzYS1wa2NzMS12MV81JyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnB1
YmxpY0tleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCIsICIyMDQ4Iik7CisgICAgc2hvdWxkQmUo
ImJ5dGVBcnJheVRvSGV4U3RyaW5nKGtleVBhaXIucHVibGljS2V5LmFsZ29yaXRobS5wdWJsaWNF
eHBvbmVudCkiLCAiJ1swMSAwMCAwMV0nIik7CisgICAgc2hvdWxkQmVVbmRlZmluZWQoImtleVBh
aXIucHVibGljS2V5LmFsZ29yaXRobS5oYXNoIik7CisgICAgc2hvdWxkQmUoImtleVBhaXIucHJp
dmF0ZUtleS50eXBlIiwgIidwcml2YXRlJyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnByaXZh
dGVLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1wa2NzMS12MV81JyIpOworICAgIHNob3Vs
ZEJlKCJrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgiLCAiMjA0OCIp
OworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhrZXlQYWlyLnByaXZhdGVLZXku
YWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSIsICInWzAxIDAwIDAxXSciKTsKKyAgICBzaG91bGRC
ZVVuZGVmaW5lZCgia2V5UGFpci5wcml2YXRlS2V5LmFsZ29yaXRobS5oYXNoIik7CisKKyAgICBk
ZWJ1ZygiXG5UZXN0aW5nIHRoYXQgY3VzdG9tIGF0dHJpYnV0ZXMgb24ga2V5cyBzdXJ2aXZlIGdh
cmJhZ2UgY29sbGVjdGlvbi4uLiIpOworICAgIGtleVBhaXIucHVibGljS2V5LmZvbyA9ICJiYXIi
OworICAgIGdjKCk7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZ2MoKTsK
KyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJr
ZXlQYWlyLnB1YmxpY0tleS5mb28iLCAiJ2JhciciKTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgICB9LCAwKTsKKyAgICB9LCAwKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJhdGUta2V5Lmh0bWwKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCit0ZXh0L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtj
czEtdjFfNS1pbXBvcnQtandrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWltcG9ydC1qd2stZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEt
djFfNS1pbXBvcnQtandrLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2
IEBACitUZXN0IGltcG9ydGluZyBhbiBSU0Ega2V5IGZvciBSU0FTU0EtUEtDUzEtdjFfNS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0ltcG9ydGluZyBhIHB1YmxpYyBrZXkuLi4K
K1BBU1MgcHVibGljS2V5LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgS2V5XScKK1BBU1MgcHVibGlj
S2V5LnR5cGUgaXMgJ3B1YmxpYycKK1BBU1MgcHVibGljS2V5LnVzYWdlcyBpcyBbJ3NpZ24nLCd2
ZXJpZnknXQorUEFTUyBwdWJsaWNLZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ3JzYXNzYS1wa2NzMS12
MV81JworUEFTUyBwdWJsaWNLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggaXMgMjA0OAorUEFT
UyBieXRlQXJyYXlUb0hleFN0cmluZyhwdWJsaWNLZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50
KSBpcyAnWzAxIDAwIDAxXScKK1BBU1MgcHVibGljS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUgaXMg
J3NoYS0yNTYnCisKK0ltcG9ydGluZyBhIHByaXZhdGUga2V5Li4uCitQQVNTIHByaXZhdGVLZXku
dG9TdHJpbmcoKSBpcyAnW29iamVjdCBLZXldJworUEFTUyBwcml2YXRlS2V5LnR5cGUgaXMgJ3By
aXZhdGUnCitQQVNTIHByaXZhdGVLZXkudXNhZ2VzIGlzIFsnc2lnbicsJ3ZlcmlmeSddCitQQVNT
IHByaXZhdGVLZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ3JzYXNzYS1wa2NzMS12MV81JworUEFTUyBw
cml2YXRlS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoIGlzIDIwNDgKK1BBU1MgYnl0ZUFycmF5
VG9IZXhTdHJpbmcocHJpdmF0ZUtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQpIGlzICdbMDEg
MDAgMDFdJworUEFTUyBwcml2YXRlS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUgaXMgJ3NoYS0yNTYn
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEt
djFfNS1pbXBvcnQtandrLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9y
c2Fzc2EtcGtjczEtdjFfNS1pbXBvcnQtandrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1pbXBvcnQtandrLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWlt
cG9ydC1qd2suaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGltcG9y
dGluZyBhbiBSU0Ega2V5IGZvciBSU0FTU0EtUEtDUzEtdjFfNS4iKTsKKworanNUZXN0SXNBc3lu
YyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRs
ZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxlOworCit2YXIgZXh0cmFjdGFibGUgPSB0cnVl
OworCit2YXIgcHVibGljS2V5SlNPTiA9IHsKKyAgICBrdHk6ICJSU0EiLAorICAgIGFsZzogIlJT
MjU2IiwKKyAgICBuOiAicmNDVUN2N09jMUhWYW0xREloQ3pxa25UaFdhd09wOFFMazhaaXkycDEw
QnlqUUZDYWpvRml5dUFXbC1SMVdYWmFmNHhpdExScmFjVDlhZ3B6SXpjLU1iTFNISUdnV1FHTzIx
bEdpSW15NWZ0Wi1EOGJIQXFSejJ5MTVwekQ0YzRDRW91N1hTU0xEb1JuUjBRRzVNc0RoRDZzMmdW
OW13SGtydGtDeHRNV2RCaS03N2FzOHdHbWxOUmxkY09TZ1pETEs4VW5DU2dBMU9ndVo5ODliRnlj
OHRPT0VJYjB4VVNmUFN6M0xQU0NueVl6NjhhRGptS1ZlTkgtaWc4NTdPU2N5V2JHeUV5M0JpdzY0
cXVuM2p1VWxOV3NKM3puZ2tPZHRlWVd5dHg1UXI0WEtOczZSLU15eXE3MktVcDAybUpEWmlpeWln
bHhNTF9pMy1fQ2VlY0N3IiwKKyAgICBlOiAiQVFBQiIKK307CisKK3ZhciBwcml2YXRlS2V5SlNP
TiA9IHsKKyAgICBrdHk6ICJSU0EiLAorICAgIGFsZzogIlJTMjU2IiwKKyAgICBuOiAicmNDVUN2
N09jMUhWYW0xREloQ3pxa25UaFdhd09wOFFMazhaaXkycDEwQnlqUUZDYWpvRml5dUFXbC1SMVdY
WmFmNHhpdExScmFjVDlhZ3B6SXpjLU1iTFNISUdnV1FHTzIxbEdpSW15NWZ0Wi1EOGJIQXFSejJ5
MTVwekQ0YzRDRW91N1hTU0xEb1JuUjBRRzVNc0RoRDZzMmdWOW13SGtydGtDeHRNV2RCaS03N2Fz
OHdHbWxOUmxkY09TZ1pETEs4VW5DU2dBMU9ndVo5ODliRnljOHRPT0VJYjB4VVNmUFN6M0xQU0Nu
eVl6NjhhRGptS1ZlTkgtaWc4NTdPU2N5V2JHeUV5M0JpdzY0cXVuM2p1VWxOV3NKM3puZ2tPZHRl
WVd5dHg1UXI0WEtOczZSLU15eXE3MktVcDAybUpEWmlpeWlnbHhNTF9pMy1fQ2VlY0N3IiwKKyAg
ICBlOiAiQVFBQiIsCisgICAgZDogImVOTFMzN2FDejdSWFNOUERfRHRMQko2ajVUOGNTeGR6UkJD
alBhSTZXY0dxSnAxNmxxM1VUd3VvRExBcWxBOW9HWW0yMzhkc0lXcHV1Y1BfbFF0YldlLTdTcHhv
STZfdm1ZR2Y3WVZVSHYxLURGOXFpT21Tck1tZHhNblZPellYWThSYVQ2dGhQam5fSjVjZkxWMnhJ
X0x3c3JNdG1wZFN5TmxnWDB6VFVod3R1YWhnQUtNRUNoWWpIMkVuakhkSHc2c1kyLXdBcGRjUUk3
VUxFMG9vNVJ6YlFacG11aGNOOWhpQmMwTDNoaEYwcW81MG1ibDAyXzY1X0dRN0RwVmtYQnhOZ1JC
THpsUGFibXp6RzJvQWhmZWZMZ1ltU0Mxb3BhQ2tYRTZ2UldRTldOTDQ1UlpOWkZZTTN1b0pnaE9N
cUdlb2NNMEJwamRDaEhyUE9sRnZTUSIsCisgICAgcDogIjRtaVR1QWpLTWVINXVKNUtCMzk3UVV3
aGJrWUVnU2JjQTJtaWZtU2t2RTIwMThnYjU1cWtCSEsxZVZyeWYxX200M0xObGM2T19hazZnZnpk
WkladlM1TkNHalBsMHEwOXBsVXB1OHFGT1NzcEJ3QTY3cUdINzZsRmxaTG5fZDR5Z2xTN3dmTHJ1
NF81WXM4cUxMcy1EcVZMdml3cG9zT255eVdxd001QVhwMCIsCisgICAgcTogInhIWXJ6a2l2dG1u
el9zR2NobldHYzBxLXBET2tLaWNwdFJwdjJwTUZJSVh4bkZYNWFNZUVYSVpqVnVqWHR3VXkxVWxG
SU4yR1pKU3Z5NUtKNzltdV9YeU5uRkhNemVkSC1BM2VlM3U4aDFVVXJaRi12VXUxX2U0VV94NjdO
TjFkZWR6VVNLeW5ON3BGbDNPa3VTaE1CV0dWLWN3ek9QZGNWQWZWdVpseFVNYyIsCisgICAgZHA6
ICJmQnpEellEVUJtQlFHb3A3SG4wZHZmX1QyN1Y2UnFwY3RXbzA3NENRWmNGYlAyYXRGVnRLU2oz
dmlXVDN4aWQyVkh6Y2dpREhkZnBNM25FVmxFTzF3d0lvbkdDU3ZkakdFT1ppaUZWT2pyWkFPVnhB
OGd1T2p5eUZ2cWJYa2UwNlZ3UElJVnZmS2VTVTJ6dWhiUF9fMXR0NkZfZnhvdzRLYjJ4b25HVDBH
R2siLAorICAgIGRxOiAiam1FMkRpSVBkaHdEZ0xYQVFwSWFCcVE4MWJPM1hmVlRfTFJVTEF3d3d3
bFB1UVYxNDhIMDR6bGg5VEo2WTJHWkhZb2tWMVUwZU9CcEp4ZmtiN2RMWXRwSnB1aUJqUmY0eUlV
RW9HbGtrSV9RbEpuRlNGci1ZakdSZGZOSHFXQmt4bFNNWkw3NzBSOW1JQVRuZEdrSDd6NXgtcjlL
d0JaRkM0RkNHMmhnX3pFIiwKKyAgICBxaTogIllDWF9wTHdiTUJBMVRoVkgwV2N3bW55dHFOY3JN
Q0V3VG03QnlBMmVVNm5XYlFyVUx2ZjdtOV9remZMVWNqc25wQVZsQlFHNUpNWE15MFNxNHB0d2J5
d3NhNS1HOEtBT09PUjJMM3Y0aEMtRXlzOWZ0Z0ZNXzNpMG80MGVlUUg0YjNoYVBibnRySWVNZzhJ
emxPdVZZS2Y5LTJRdUtEb1dlUmRkN05zZHhUayIKK307CisKK2RlYnVnKCJJbXBvcnRpbmcgYSBw
dWJsaWMga2V5Li4uIik7CitjcnlwdG8uc3VidGxlLmltcG9ydEtleSgiandrIiwgYXNjaWlUb0Fy
cmF5QnVmZmVyKEpTT04uc3RyaW5naWZ5KHB1YmxpY0tleUpTT04pKSwgbnVsbCwgZXh0cmFjdGFi
bGUsIFsic2lnbiIsICJ2ZXJpZnkiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBwdWJs
aWNLZXkgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoInB1YmxpY0tleS50b1N0cmluZygpIiwgIidb
b2JqZWN0IEtleV0nIik7CisgICAgc2hvdWxkQmUoInB1YmxpY0tleS50eXBlIiwgIidwdWJsaWMn
Iik7CisgICAgc2hvdWxkQmUoInB1YmxpY0tleS51c2FnZXMiLCAiWydzaWduJywndmVyaWZ5J10i
KTsKKyAgICBzaG91bGRCZSgicHVibGljS2V5LmFsZ29yaXRobS5uYW1lIiwgIidyc2Fzc2EtcGtj
czEtdjFfNSciKTsKKyAgICBzaG91bGRCZSgicHVibGljS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVu
Z3RoIiwgIjIwNDgiKTsKKyAgICBzaG91bGRCZSgiYnl0ZUFycmF5VG9IZXhTdHJpbmcocHVibGlj
S2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkiLCAiJ1swMSAwMCAwMV0nIik7CisgICAgc2hv
dWxkQmUoInB1YmxpY0tleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidzaGEtMjU2JyIpOworICAg
IGRlYnVnKCJcbkltcG9ydGluZyBhIHByaXZhdGUga2V5Li4uIik7CisgICAgcmV0dXJuIGNyeXB0
by5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLCBhc2NpaVRvQXJyYXlCdWZmZXIoSlNPTi5zdHJpbmdp
ZnkocHJpdmF0ZUtleUpTT04pKSwgbnVsbCwgZXh0cmFjdGFibGUsIFsic2lnbiIsICJ2ZXJpZnki
XSk7Cit9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIHByaXZhdGVLZXkgPSByZXN1bHQ7
CisgICAgc2hvdWxkQmUoInByaXZhdGVLZXkudG9TdHJpbmcoKSIsICInW29iamVjdCBLZXldJyIp
OworICAgIHNob3VsZEJlKCJwcml2YXRlS2V5LnR5cGUiLCAiJ3ByaXZhdGUnIik7CisgICAgc2hv
dWxkQmUoInByaXZhdGVLZXkudXNhZ2VzIiwgIlsnc2lnbicsJ3ZlcmlmeSddIik7CisgICAgc2hv
dWxkQmUoInByaXZhdGVLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1wa2NzMS12MV81JyIp
OworICAgIHNob3VsZEJlKCJwcml2YXRlS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoIiwgIjIw
NDgiKTsKKyAgICBzaG91bGRCZSgiYnl0ZUFycmF5VG9IZXhTdHJpbmcocHJpdmF0ZUtleS5hbGdv
cml0aG0ucHVibGljRXhwb25lbnQpIiwgIidbMDEgMDAgMDFdJyIpOworICAgIHNob3VsZEJlKCJw
cml2YXRlS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ3NoYS0yNTYnIik7CisgICAgZmluaXNo
SlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWlt
cG9ydC1qd2suaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEg
IyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBMYXlv
dXRUZXN0cy9jcnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzCShyZXZpc2lvbiAx
NTkxNTUpCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwyNCBAQCBmdW5jdGlvbiBhc2NpaVRvQXJyYXlC
dWZmZXIoc3RyKQogZnVuY3Rpb24gaGV4VG9BcnJheUJ1ZmZlcihzdHIpCiB7CiAgICAgaWYgKHN0
ci5sZW5ndGggJSAyKQotICAgICAgICB0aHJvdyAiSGV4IHN0cmluZyBsZW5naHQgbXVzdCBiZSBl
dmVuIjsKKyAgICAgICAgdGhyb3cgIkhleCBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgZXZlbiI7CiAg
ICAgdmFyIGNoYXJzID0gW107CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBp
ICs9IDIpCiAgICAgICAgIGNoYXJzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cihpLCAyKSwgMTYp
KTsKICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY2hhcnMpOwogfQogCit2YXIgQmFzZTY0VVJM
ID0geworICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgdmFyIGJhc2U2NHN0
cmluZyA9IGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKSk7CisgICAgICAgIHJl
dHVybiBiYXNlNjRzdHJpbmcucmVwbGFjZSgvPS9nLCAiIikucmVwbGFjZSgvXCsvZywgIi0iKS5y
ZXBsYWNlKC9cLy9nLCAiXyIpOworICAgIH0sCisgICAgcGFyc2U6IGZ1bmN0aW9uIChzKSB7Cisg
ICAgICAgIHMgPSBzLnJlcGxhY2UoLy0vZywgIisiKS5yZXBsYWNlKC9fL2csICIvIikucmVwbGFj
ZSgvXHMvZywgJycpOworICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkucHJvdG90
eXBlLm1hcC5jYWxsKGF0b2IocyksIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQo
MCkgfSkpOworICAgIH0KK307CisKIGZ1bmN0aW9uIHByaW50UmVqZWN0ZWRSZXN1bHQodmFsdWUp
CiB7CiAgICAgZGVidWcoIiAgICByZWplY3RlZCB3aXRoIHZhbHVlIG9mICIgKyB2YWx1ZSk7Cg==
</data>
<flag name="review"
          id="239757"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="239762"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216778</attachid>
            <date>2013-11-13 00:49:29 -0800</date>
            <delta_ts>2013-11-13 00:59:21 -0800</delta_ts>
            <desc>combined fixed patch for re-landing</desc>
            <filename>RsaSsa.txt</filename>
            <type>text/plain</type>
            <size>112335</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0xMS0xMiAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQga2V5IGdl
bmVyYXRpb24gYW5kIEpXSyBpbXBvcnQgZm9yIFJTQVNTQS1QS0NTMS12MV81CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQyMzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFRlc3RzOiBjcnlwdG8vc3VidGxlL3Jz
YXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8v
c3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWltcG9ydC1qd2suaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGNyeXB0by9Dcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDoKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8g
YWRkIGFuIFVpbnQ4QXJyYXksIGFzIG5lZWRlZCBmb3IgUlNBIGtleS5hbGdvcml0aG0ucHVibGlj
RXhwb25lbnQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKTogUmVtb3Zl
ZCB1bm5lZWRlZCBKU0MgcHJlZml4ZXMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBZXNLZXlH
ZW5QYXJhbXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNQYXJhbXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNLZXlQYXJhbXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJzYUtleUdlblBhcmFtcyk6IEFkZGVkLiAKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJzYVNzYUtleVBhcmFtcyk6IEFkZGVkLiBXZWJDcnlwdG8gY3VycmVu
dGx5IGRvZXNuJ3Qgc3BlY2lmeSBhbnkKKyAgICAgICAgcGFyYW1ldGVycyBmb3IgaW1wb3J0S2V5
LCBzbyB0aGUgc3RydWN0dXJlIHJlbWFpbnMgYmxhbmsgKHVubGlrZSB3aXRoIEpXSykuCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSc2FTc2FQYXJhbXMpOiBBZGRlZCAoY3VycmVudGx5IHVudXNl
ZCwgd2lsbCBiZSBzdWVkIGZvciBzaWduL3ZlcmlmeSBzb29uKS4KKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQp
OiBSZW1vdmVkIHVubmVlZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvclNpZ24pOiBBZGRlZCBzdXBwb3J0IGZvciBSU0FFU19QS0NTMV92MV81Lgor
ICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yVmVyaWZ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QpOiBSZW1vdmVkIHVubmVl
ZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JEZXJpdmVLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlcml2ZUJpdHMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckltcG9ydEtleSk6IEFkZGVkIHN1cHBvcnQgZm9yIFJTQUVTX1BLQ1MxX3YxXzUuCisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JFeHBvcnRLZXkpOiBSZW1vdmVkIHVubmVlZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAg
KFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
cldyYXBLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclVud3JhcEtleSk6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEpTQXJyYXlGcm9tSlNPTik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0
QmlnSW50ZWdlclZlY3RvckZyb21KU09OKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSU0FTU0FLZXlQYXJhbWV0ZXJzKTogQ3JlYXRlIHBhcmFtZXRlcnMgZm9yIGtleSBpbXBvcnQu
IFRoZSBrZXkKKyAgICAgICAgd2lsbCByZW1lbWJlciB3aGljaCBhbGdvcml0aG0gaXQncyBhbGxv
d2VkIHRvIGJlIHVzZWQgd2l0aC4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSzo6cmVjb25jaWxlQWxnb3JpdGhtKTogQWRkZWQgc3VwcG9ydCBmb3IKKyAgICAg
ICAgUlMyNTYuLi5SUzUxMiAodGhhIGlzLCBSU0FFU19QS0NTMV92MV81IHdpdGggU0hBLTI1Ni4u
LlNIQS01MTIpLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjprZXlEYXRhT2N0ZXRTZXF1ZW5jZSk6IFNwbGl0IG91dCBvZiBrZXlEYXRhKCkuCisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGFSU0FDb21wb25l
bnRzKTogQWRkZWQgY29kZSB0byByZWFkCisgICAgICAgIFJTQSBrZXkgY29tcG9uZW50cyBmcm9t
IEpXSy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5
RGF0YSk6IENhbGwgb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBjcnlw
dG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojp2ZXJpZnkp
OgorICAgICAgICBQbGFjZWhvbGRlcnMuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6
IChXZWJDb3JlOjpDcnlwdG9LZXlDbGFzcyk6IEFkZGVkIFJTQSBrZXkgY2xhc3MgZm9yIHBvb3Ig
bWFuJ3MgUlRUSS4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXlEYXRhLmg6IChXZWJDb3Jl
OjpDcnlwdG9LZXlEYXRhOjpGb3JtYXRSU0FDb21wb25lbnRzKTogQWRkZWQgUlNBQ29tcG9uZW50
cworICAgICAgICBmb3IgcG9vciBtYW4ncyBSVFRJLgorCisgICAgICAgICogY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHA6IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjppbXBvcnRLZXkpOiAKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1ITUFDLmNwcDogKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9y
dEtleSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmg6CisgICAgICAgIChX
ZWJDb3JlOjppc0NyeXB0b0tleUFFUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleUFF
Uyk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UpOgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ3J5
cHRvS2V5SE1BQyk6CisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleUhNQUMpOgorICAgICAg
ICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1ITUFDOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhN
QUM6OnZlcmlmeSk6CisgICAgICAgIFN3aXRjaGVkIGZyb20gImFzIiBmdW5jdGlvbnMgdG8gImlz
IiBhbmQgInRvIiBvbmVzLCBhcyB0aGF0J3MgbW9yZSBpZGlvbWF0aWMuCisKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81Lmg6IEFkZGVkLgorICAgICAgICBHbHVlIGNvZGUgZm9yIGltcG9ydEtleS9nZW5l
cmF0ZUtleSBmb3Igbm93LgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJT
QUNvbXBvbmVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6fkNyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMp
OgorICAgICAgICBBZGRlZCBhIHN0cnVjdHVyZSB0byBob2xkIFJTQSBrZXkgY29tcG9uZW50cywg
ZXh0cmFjdGVkIGZyb20gSldLIG9yIGFub3RoZXIgZm9ybWF0LgorCisgICAgICAgICogY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UlNBLmg6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpwbGF0Zm9ybVJlZ2lzdGVyQWxnb3JpdGhtcyk6CisgICAgICAgIFJlZ2lzdGVyIFJT
QVNTQV9QS0NTMV92MV81LgorCisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtSG1hY0tleVBhcmFtcy5oOiBBZGRlZCBhIGNvbnN0cnVjdG9yIHRvIG1ha2UKKyAgICAg
ICAgc3VyZSB0aGF0IGhhc0xlbmd0aCBpcyBuZXZlciBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGV2ZW4g
d2hlbiByZWFkaW5nIGZvcm1hdHMgdGhhdAorICAgICAgICBkb24ndCBjb250YWluIGEgbGVuZ3Ro
LgorCisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2Vu
UGFyYW1zLmg6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29y
aXRobVJzYVNzYUtleVBhcmFtcy5oOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaDogQWRkZWQuCisgICAgICAgIEFkZGVkIHBh
cmFtZXRlciBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgUlNBU1NBX1BLQ1MxX3YxXzUu
CisKIDIwMTMtMTEtMTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgRGlzYWJsZSBXZWJDcnlwdG8gb24gTW91bnRhaW4gTGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NTk1LDYgKzU1OTUsOCBAQAogCQlFMTU3QThGMTE4MTg1
NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFRjE4MTg1NDI1MDA5RjgyMUQg
LyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggKi87IH07CiAJCUUxNUEzNkQ3MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTVBMzZENjExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oICov
OyB9OwogCQlFMTVBMzZEOTExMDQ1NzI3MDBCN0I2MzkgLyogWE1MTlNOYW1lcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTVBMzZEODExMDQ1NzI3
MDBCN0I2MzkgLyogWE1MTlNOYW1lcy5jcHAgKi87IH07CisJCUUxNjRGQUEzMTgzMTVCRjQwMERC
NEU2MSAvKiBDcnlwdG9LZXlSU0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0EuaCAq
LzsgfTsKKwkJRTE2NEZBQTUxODMxNUUxQTAwREI0RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY0RkFBNDE4
MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAqLzsgfTsKIAkJRTE2OTgwM0Qx
MTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUgLyogQ1J1
bnRpbWVPYmplY3QuaCAqLzsgfTsKIAkJRTE2OTgwNDkxMTMzNjQ0NzAwODk0MTE1IC8qIENSdW50
aW1lT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5jcHAgKi87IH07
CiAJCUUxNjk4MjU1MTEzNDYyOUQwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgyNTQxMTM0NjI5
RDAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0LmggKi87IH07CkBAIC01NjY5LDggKzU2NzEs
MTYgQEAKIAkJRTFCQTY3MTgxNzQyQkVFNjAwQzIwMjUxIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMyODY5NDAy
ODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIAkJRTFCQTY3MUExNzQy
QkVGNDAwQzIwMjUxIC8qIFdlYkNvcmVUZXN0U2hpbUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQTY3MTkxNzQyQkVGNDAwQzIwMjUx
IC8qIFdlYkNvcmVUZXN0U2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlFMUJCODRBRDE4MjJDQTc0
MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQjg0QUMxODIyQ0E3NDAwNTI1MDQz
IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcCAqLzsgfTsKKwkJRTFCRDMzMTkxODJE
OERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkQzMzE3MTgyRDhE
REQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAgKi87IH07
CisJCUUxQkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFCRDMzMTgxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmggKi87IH07CisJCUUxQkQzMzFDMTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0
aG1Sc2FTc2FQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQkQzMzFCMTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQ
YXJhbXMuaCAqLzsgfTsKKwkJRTFCRDMzMUUxODJEOEY0MjAwQzA1RDlGIC8qIENyeXB0b0FsZ29y
aXRobVJzYUtleUdlblBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFCRDMzMUQxODJEOEY0MjAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJz
YUtleUdlblBhcmFtcy5oICovOyB9OwogCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQkU1MTJCMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICov
OyB9OwogCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQzBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi87IH07CisJCUUxQzI2NkQ4MTgzMTdB
QjQwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMyNjZENjE4MzE3
QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwICov
OyB9OworCQlFMUMyNjZEQjE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3Nh
S2V5UGFyYW1zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFy
YW1zLmggKi87IH07CisJCUUxQzI2NkRFMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUMyNjZEQzE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwICovOyB9OworCQlFMUMyNjZERjE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5
RGF0YVJTQUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQzI2NkREMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cy5oICovOyB9OwogCQlFMUMyRjI0QTE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMy
RjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi87IH07CiAJCUUxQzM2MkVG
MEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyog
SlNXb3JrZXJMb2NhdGlvbi5oICovOyB9OwogCQlFMUMzNjJGMDBFQUYyQUE5MDA3NDEwQkMgLyog
SlNXb3JrZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUMzNjJFRTBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5j
cHAgKi87IH07CkBAIC0xMjY3Nyw2ICsxMjY4Nyw4IEBACiAJCUUxNTdBOEVGMTgxODU0MjUwMDlG
ODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDgxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MTlNOYW1lcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAv
KiBDcnlwdG9LZXlSU0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRv
S2V5UlNBLmg7IHBhdGggPSBrZXlzL0NyeXB0b0tleVJTQS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMTY0RkFBNDE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0tleVJTQU1hYy5j
cHA7IHBhdGggPSBtYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE2OTgwM0MxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGlt
ZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDUnVudGlt
ZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MjU0MTEzNDYy
OUQwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmpDUnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI3NjAsOCArMTI3NzIsMTYgQEAKIAkJRTFCQTY3MTYxNzQyQkRFMDAwQzIwMjUxIC8q
IGxpYldlYkNvcmVUZXN0U2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJRTFCQTY3MTkxNzQyQkVGNDAwQzIwMjUxIC8qIFdlYkNvcmVU
ZXN0U2hpbUxpYnJhcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxQkI4NEFDMTgyMkNBNzQwMDUyNTA0MyAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeU1hYy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUJEMzMxNzE4MkQ4REREMDBDMDVEOUYg
LyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUJEMzMxODE4MkQ4REREMDBDMDVEOUYg
LyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFCRDMzMUIxODJEOEVFOTAwQzA1RDlGIC8qIENyeXB0
b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaDsgcGF0aCA9IHBhcmFtZXRlcnMvQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
QkQzMzFEMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNhS2V5
R2VuUGFyYW1zLmg7IHBhdGggPSBwYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBh
cmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQjBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFhTTFRVbmljb2RlU29ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkQ2MTgzMTdBQjQwMDNGOEIzMyAvKiBDcnlwdG9BbGdv
cml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkRBMTgzMTk5MzUwMDNGOEIzMyAvKiBDcnlw
dG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmg7IHBhdGggPSBwYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMUMyNjZEQzE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvS2V5
RGF0YVJTQUNvbXBvbmVudHMuY3BwOyBwYXRoID0ga2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkREMTgzMTlGMzEw
MDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oOyBwYXRoID0ga2V5
cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUMyRjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc01hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2Vy
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXb3JrZXJMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMzNjJFRTBFQUYyQUE5MDA3
NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dvcmtlckxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwMzI4LDExICsyMDM0OCwxMyBAQAogCQkJCUUxMjVGODM3MTgyMkYxRUIwMEQ4NENE
OSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLywKIAkJCQlFMUJCODRBQzE4MjJDQTc0
MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwICovLAogCQkJCUUxMjVG
ODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExTWFjLmNwcCAqLywKKwkJ
CQlFMUMyNjZENjE4MzE3QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzVNYWMuY3BwICovLAogCQkJCUUxOUFDM0RFMTgyNERDNjkwMDM0OTQyNiAvKiBDcnlwdG9B
bGdvcml0aG1TSEEyMjRNYWMuY3BwICovLAogCQkJCUUxOUFDM0RGMTgyNERDNjkwMDM0OTQyNiAv
KiBDcnlwdG9BbGdvcml0aG1TSEEyNTZNYWMuY3BwICovLAogCQkJCUUxOUFDM0UwMTgyNERDNjkw
MDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEzODRNYWMuY3BwICovLAogCQkJCUUxOUFDM0Ux
MTgyNERDNjkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEE1MTJNYWMuY3BwICovLAogCQkJ
CUUxOUFDM0Y4MTgyNTY2RjcwMDM0OTQyNiAvKiBDcnlwdG9LZXlNYWMuY3BwICovLAorCQkJCUUx
NjRGQUE0MTgzMTVFMUEwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwICovLAogCQkJKTsK
IAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjAzNDQsNiAr
MjAzNjYsOCBAQAogCQkJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmggKi8sCiAJCQkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobUhNQUMuY3BwICovLAogCQkJCUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlw
dG9BbGdvcml0aG1ITUFDLmggKi8sCisJCQkJRTFCRDMzMTcxODJEOERERDAwQzA1RDlGIC8qIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCAqLywKKwkJCQlFMUJEMzMxODE4MkQ4
REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCAqLywKIAkJ
CQlFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgKi8s
CiAJCQkJRTEyNUY4MkExODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCAq
LywKIAkJCQlFMTlBQzNFNjE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjI0
LmNwcCAqLywKQEAgLTIwMzY1LDggKzIwMzg5LDExIEBACiAJCQkJRTEyNUY4NEMxODI0Mjg5RDAw
RDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5oICovLAogCQkJCUUxMjVGODYxMTgyQzMwM0EwMEQ4NENE
OSAvKiBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5jcHAgKi8sCiAJCQkJRTEyNUY4NjIxODJD
MzAzQTAwRDg0Q0Q5IC8qIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmggKi8sCisJCQkJRTFD
MjY2REMxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCAq
LywKKwkJCQlFMUMyNjZERDE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuaCAqLywKIAkJCQlFMTI1RjgzMzE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1B
Qy5jcHAgKi8sCiAJCQkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMu
aCAqLywKKwkJCQlFMTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggKi8s
CiAJCQkJRTEyNUY4NTcxODJDMUFBNjAwRDg0Q0Q5IC8qIENyeXB0b0tleVNlcmlhbGl6YXRpb25S
YXcuY3BwICovLAogCQkJCUUxMjVGODU4MTgyQzFBQTYwMEQ4NENEOSAvKiBDcnlwdG9LZXlTZXJp
YWxpemF0aW9uUmF3LmggKi8sCiAJCQkpOwpAQCAtMjAzODAsNiArMjA0MDcsOSBAQAogCQkJCUUx
OUFDM0Y2MTgyNEU1RDEwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMu
aCAqLywKIAkJCQlFMTlEQTI5QjE4MTg5QUREMDAwODhCQzggLyogQ3J5cHRvQWxnb3JpdGhtSG1h
Y0tleVBhcmFtcy5oICovLAogCQkJCUUxQzY1NzFFMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9B
bGdvcml0aG1IbWFjUGFyYW1zLmggKi8sCisJCQkJRTFCRDMzMUQxODJEOEY0MjAwQzA1RDlGIC8q
IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oICovLAorCQkJCUUxQzI2NkRBMTgzMTk5
MzUwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCAqLywKKwkJCQlF
MUJEMzMxQjE4MkQ4RUU5MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmgg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IHBhcmFtZXRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMjIxMTAsNiArMjIxNDAsNyBAQAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1
OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5
OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdC
OEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9L
ZXlSU0EuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBD
aGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5
IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5MjU0MzBGN0VG
NUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MjMxMSw2ICsyMjM0Miw3IEBACiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAv
KiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNTg1MDMxN0ZBMTBEMDAw
NUYyQkNCIC8qIEpTQWxsVmlkZW9DYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
QkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjgxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVU
aW1lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYy
NjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDVGRUE1
RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjI4NzAs
NiArMjI5MDIsNyBAQAogCQkJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQ3MkY2RDdBMTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93
VGhyZWFkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFCRDMzMUUxODJEOEY0MjAw
QzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDIzNTE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNF
dmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzQ0NSw2ICsyMzQ3OCw3IEBACiAJCQkJQTgwRTdC
MEMwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTFRpdGxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNzU2RDQxNDIzOUE0RjAwNDE0MTYxIC8qIEpTSFRNTFRyYWNrRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4NUIyMTEwQTFCMjU4NzAwRDhDODdDIC8qIEpTSFRNTFVMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMjY2REYxODMxOUYzMTAwM0Y4QjMzIC8q
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTRBQkNE
NTEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3OEUwOTI3MTdEMTREMUMwMDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjE0MTcwQ0Q2ODI2OTAwRkFEQTc1IC8q
IEpTSFRNTFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzY3Myw2ICsyMzcwNyw3
IEBACiAJCQkJQjJGQTNEREQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b0Fi
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEREYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ01vdmV0b1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNTg1MjExN0ZEQzE0MDAw
NUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMy
NjZEQjE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0NjE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFj
a01lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RFMTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdQYXR0ZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MkE3OTUw
QUU1Qzk0MTAwREY1OERGIC8qIEpTU1ZHUG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5ODUs
NiArMjQwMjAsNyBAQAogCQkJCTA3OEUwOTFCMTdEMTREMUMwMDQyMEFBMSAvKiBOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REQwRTgxQjhERDAwQjI1
OTY1IC8qIE91dGxpbmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRDU3MzcwQTVDNzdG
RTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQkQzMzFD
MTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTM3NzRBQkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVl
c3RDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QTIxNDY4MDk3QTMyOTEwMEI5MDUwQSAv
KiBQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjUwQjFERTE3Q0Q0QzBGMDA4N0Y2M0MgLyog
Rm9ybU5hbWVkSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc1NCw2ICsyNTc5MCw3IEBACiAJ
CQkJNTBENDA2MTExNDdENDlERTAwRDMwQkI1IC8qIEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MDk4N0MyNjE1N0Q2NzZEMDBCREE4MzUgLyogQ3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEQ0MDVGOTE0
N0QzMUYzMDBEMzBCQjUgLyogQ3VzdG9tRmlsdGVyTWVzaC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMUMyNjZERTE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0UxMkU5MTAxNUZBNUQzQTAwNUU0MTI2IC8qIEN1c3Rv
bUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBDQzBBMzkxNEM2
RjVCMTAwMTdBQjUxIC8qIEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MDkzMzM0RjE2M0IwRTQzMDAwOTlBNjAgLyogQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzU1LDYgKzI2MzkyLDcgQEAKIAkJCQlFMTI1Rjgz
ODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0NENzRFNTBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzg3OTEyMjg4M0U5MDBCODFGRjggLyog
SFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDMjY2RDgxODMx
N0FCNDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0MEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVy
TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjcyMENFOTIzQTEwMDdFRjNDRCAvKiBI
VFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdC
OEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NzY5LDYgKzI2ODA3
LDcgQEAKIAkJCQlDNkY0MjBBMjE2QjcxNjRFMDA1MkE5RjIgLyogSlNNdXRhdGlvbkNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUZCMDlEMUNDNjAwMDBCRTMyNSAvKiBKU011
dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDkwMkMxNDMyN0Q0RjAwNjg1
ODQ5IC8qIEpTTXV0YXRpb25PYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTY0RkFB
NTE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUM2RjA5MTdGMTQzQTJCQjkwMDY4NTg0OSAvKiBKU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQzkxNDMxMDAwRDAwNjg1ODQ5IC8qIEpTTXV0
YXRpb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MDExN0QxNENFRTAwNDIw
QUExIC8qIE1lZGlhU3RyZWFtUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzA1OSw2
ICsyNzA5OCw3IEBACiAJCQkJOTNGMUQ1QzAxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3Nl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNXZWJHTFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTFCRDMzMTkxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE0RjEw
NTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xTaGFkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1OTE3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02NCw2ICs2NiwxNCBA
QCB2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0CiAgICAgbV9kaWN0aW9u
YXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIGpzU3RyaW5nKG1fZXhlYywgdmFsdWUpKTsK
IH0KIAordm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQoreworICAgIFZNJiB2bSA9IG1fZXhlYy0+
dm0oKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJnZtLCBrZXkpOworICAgIFJlZlB0cjxV
aW50OEFycmF5PiBhcnJheVZpZXcgPSBVaW50OEFycmF5OjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZp
ZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmR5bmFtaWNHbG9iYWxPYmplY3QpKTsKK30K
Kwogdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNv
bnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikKIHsK
ICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAkocmV2aXNpb24gMTU5
MTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWls
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlciYpIE9WRVJSSURFOwogCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYUtleUdl
blBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oIgor
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTExNiw3ICsxMTksNyBAQCBzdGF0aWMgYm9vbCBnZXRIYXNo
QWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgcmV0dXJuIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihleGVjLCBoYXNoLCByZXN1bHQpOwogfQogCi1z
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFl
c0NiY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXND
YmNQYXJhbXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE0NSw3
ICsxNDgsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAg
cmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0tleUdlblBhcmFtcyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE2Myw3ICsxNjYsNyBAQCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAgcmV0dXJuIHN0ZDo6bW92ZShy
ZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+IGNyZWF0ZUhtYWNQYXJhbXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gY3JlYXRlSG1hY1BhcmFtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMp
OwpAQCAtMTgxLDcgKzE4NCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY0tleVBhcmFtcyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjS2V5UGFyYW1zKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC0yMDMsNyArMjA2LDYzIEBA
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGEKICAgICByZXR1cm4gc3Rk
Ojptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JF
bmNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFs
Z29yaXRobSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVJz
YUtleUdlblBhcmFtcz4oKTsKKworICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0
UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJtb2R1bHVzTGVuZ3RoIik7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93d3cudzMu
b3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzc3OT4uCisgICAgcmVzdWx0LT5tb2R1
bHVzTGVuZ3RoID0gdG9VSW50MzIoZXhlYywgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHko
ZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8
VWludDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJheShwdWJsaWNFeHBv
bmVudFZhbHVlKTsKKyAgICBpZiAoIXB1YmxpY0V4cG9uZW50QXJyYXkpIHsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGEgVWludDhBcnJheSBpbiBwdWJsaWNFeHBvbmVu
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmVzdWx0LT5wdWJsaWNF
eHBvbmVudC5hcHBlbmQocHVibGljRXhwb25lbnRBcnJheS0+ZGF0YSgpLCBwdWJsaWNFeHBvbmVu
dEFycmF5LT5ieXRlTGVuZ3RoKCkpOworCisgICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwor
fQorCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNy
ZWF0ZVJzYVNzYUtleVBhcmFtcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKQoreworICAgIC8vIFdlYkNy
eXB0byBSU0FTU0EtUEtDUzEtdjFfNSBhbGdvcml0aG0gY3VycmVudGx5IGRvZXMgbm90IHRha2Ug
YW55IHBhcmFtZXRlcnMgdG8gaW1wb3J0S2V5LgorICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcz4oKTsKK30KKworc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FTc2FQYXJhbXMoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1ZS5n
ZXRPYmplY3QoKSk7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0Fs
Z29yaXRobVJzYVNzYVBhcmFtcz4oKTsKKworICAgIGlmICghZ2V0SGFzaEFsZ29yaXRobShqc0Rp
Y3Rpb25hcnksIHJlc3VsdC0+aGFzaCkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0
ZDo6bW92ZShyZXN1bHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtMjM1LDcg
KzI5NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQo
RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKQEAgLTI2NywxMSArMzI2LDE0
IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oRXhlY1N0YXRlKiBl
eGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNToKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVJzYVNzYVBhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6UlNBX09BRVA6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RT
QToKQEAgLTI5OSwxMSArMzYxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JW
ZXJpZnkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yVmVyaWZ5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NB
X1BLQ1MxX3YxXzU6CisgICAgICAgIHJldHVybiBjcmVhdGVSc2FTc2FQYXJhbXMoZXhlYywgdmFs
dWUpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX1BTUzoKICAgICBj
YXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQV9PQUVQOgogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CkBAIC0zMzEsNyArMzk2LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSkKK3N0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29y
aXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFf
djFfNToKQEAgLTM2MywxMyArNDI4LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JHZW5lcmF0ZUtleShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0
ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxn
b3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NT
MV92MV81OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1Mx
X3YxXzU6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVA6CisgICAgICAgIHJldHVy
biBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoZXhlYywgdmFsdWUpOwogICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpFQ0RIOgogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9F
UlIpOwpAQCAtMzk2LDcgKzQ2Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
ZXJpdmVLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIg
YWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRGVyaXZlS2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC00MjUsNyAr
NDkxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0K
IH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlcml2ZUJpdHMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6
OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVyaXZlQml0cyhF
eGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1Zh
bHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtNDU0LDExICs1MjAsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoRXhlY1N0YXRl
KiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81OgorICAgICAgICByZXR1cm4gY3JlYXRl
UnNhU3NhS2V5UGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlJTQV9QU1M6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpS
U0FfT0FFUDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgpAQCAt
NDg2LDcgKzU1NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIK
ICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFeHBvcnRLZXko
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGht
LCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRXhwb3J0
S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC01MTYsNyArNTg0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvcldyYXBLZXkoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yV3JhcEtleShFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlKQogewogICAgIHN3
aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpS
U0FFU19QS0NTMV92MV81OgpAQCAtNTQ1LDcgKzYxMyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JVbndyYXBLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yVW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0p
IHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIK
ICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQ
YXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgorI2luY2x1
ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5s
aW5lcy5oPgpAQCAtNDIsNiArNDQsMjYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCoganNvbiwgY29uc3QgY2hhcioga2V5LCBKU0FycmF5KiYgcmVzdWx0
KQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBrZXkpOworICAgIFByb3BlcnR5
U2xvdCBzbG90KGpzb24pOworCisgICAgaWYgKCFqc29uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTVmFsdWUg
dmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOworICAgIEFTU0VSVCghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmIChpc0pTQXJyYXkodmFsdWUpKSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhbiBhcnJheSBm
b3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmVzdWx0ID0gYXNBcnJheSh2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogc3RhdGljIGJvb2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCoganNvbiwgY29uc3QgY2hhcioga2V5LCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIoZXhlYywga2V5KTsKQEAgLTgyLDYgKzEwNCwyNSBAQCBzdGF0aWMgYm9v
bCBnZXRCb29sZWFuRnJvbUpTT04oRXhlY1N0YXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0
YXRpYyBib29sIGdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBqc29uLCBjb25zdCBjaGFyKiBrZXksIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQorewor
ICAgIFN0cmluZyBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyOworICAgIGlmICghZ2V0U3RyaW5nRnJv
bUpTT04oZXhlYywganNvbiwga2V5LCBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoYmFzZTY0dXJsRW5jb2Rl
ZE51bWJlciwgcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiQ2Fubm90
IGRlY29kZSBiYXNlNjR1cmwga2V5IGRhdGEgaW4gSldLIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0WzBdID09IDApIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgIkpXSyBCaWdJbnRlZ2VyIG11c3QgdXRpbGl6ZSB0aGUgbWluaW11bSBudW1i
ZXIgb2Ygb2N0ZXRzIHRvIHJlcHJlc2VudCB0aGUgdmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYganNvblN0cmluZykKICAgICA6IG1fZXhlYyhleGVjKQogewpAQCAtMTA4LDYg
KzE0OSwxNSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAg
cmV0dXJuIHN0ZDo6bW92ZShobWFjUGFyYW1ldGVycyk7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVy
cyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKK3sKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zPiByc2FTU0FQYXJhbWV0ZXJz
ID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXM+KCk7Cisg
ICAgcnNhU1NBUGFyYW1ldGVycy0+aGFzSGFzaCA9IHRydWU7CisgICAgcnNhU1NBUGFyYW1ldGVy
cy0+aGFzaCA9IGhhc2hGdW5jdGlvbjsKKyAgICByZXR1cm4gc3RkOjptb3ZlKHJzYVNTQVBhcmFt
ZXRlcnMpOworfQorCisKIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmNp
bGVBbGdvcml0aG0oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4mIHN1Z2dlc3RlZEFs
Z29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiBzdWdn
ZXN0ZWRQYXJhbWV0ZXJzKSBjb25zdAogewogICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9l
eGVjLCBtX2pzb24uZ2V0KCksICJhbGciLCBtX2p3a0FsZ29yaXRobU5hbWUpKSB7CkBAIC0xMjYs
NiArMTc2LDE1IEBAIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAg
ICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiSFM1MTIiKSB7CiAgICAgICAgIGFs
Z29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVI
TUFDUGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKKyAgICB9
IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMyNTYiKSB7CisgICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOworICAgICAgICBwYXJhbWV0ZXJz
ID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpT
SEFfMjU2KTsKKyAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMzODQiKSB7
CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5j
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOworICAg
ICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKKyAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFt
ZSA9PSAiUlM1MTIiKSB7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BL
Q1MxX3YxXzUpOworICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVy
cyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1f
andrQWxnb3JpdGhtTmFtZSA9PSAiQTEyOENCQyIpIHsKICAgICAgICAgYWxnb3JpdGhtID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKQEAgLTE1MiwxMSArMjExLDIwIEBAIGJvb2wg
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICBpZiAoYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCkgIT0gc3VnZ2VzdGVkQWxnb3JpdGhtLT5pZGVudGlmaWVyKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEhNQUMgaXMgdGhlIG9ubHkgYWxnb3JpdGhtIHRoYXQg
aGFzIHBhcmFtZXRlcnMgaW4gaW1wb3J0S2V5LgotICAgIGlmIChhbGdvcml0aG0tPmlkZW50aWZp
ZXIoKSAhPSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoYWxnb3JpdGhtLT5pZGVudGlmaWVyKCkgPT0gQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6SE1BQykKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0FsZ29y
aXRobUhtYWNQYXJhbXMmPigqcGFyYW1ldGVycykuaGFzaCA9PSBzdGF0aWNfY2FzdDxDcnlwdG9B
bGdvcml0aG1IbWFjUGFyYW1zJj4oKnN1Z2dlc3RlZFBhcmFtZXRlcnMpLmhhc2g7CisgICAgaWYg
KGFsZ29yaXRobS0+aWRlbnRpZmllcigpID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJT
QVNTQV9QS0NTMV92MV81KSB7CisgICAgICAgIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFt
cyYgcnNhU1NBUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PENyeXB0b0FsZ29yaXRobVJzYVNzYUtl
eVBhcmFtcyY+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5
UGFyYW1zJiBzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Q3J5cHRvQWxn
b3JpdGhtUnNhU3NhS2V5UGFyYW1zJj4oKnN1Z2dlc3RlZFBhcmFtZXRlcnMpOworICAgICAgICBB
U1NFUlQocnNhU1NBUGFyYW1ldGVycy5oYXNIYXNoKTsKKyAgICAgICAgaWYgKHN1Z2dlc3RlZFJT
QVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKKyAgICAgICAgICAgIHJldHVybiBzdWdnZXN0ZWRSU0FT
U0FQYXJhbWV0ZXJzLmhhc2ggPT0gcnNhU1NBUGFyYW1ldGVycy5oYXNoOworICAgICAgICBzdWdn
ZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc0hhc2ggPSB0cnVlOworICAgICAgICBzdWdnZXN0ZWRS
U0FTU0FQYXJhbWV0ZXJzLmhhc2ggPSByc2FTU0FQYXJhbWV0ZXJzLmhhc2g7CisgICAgfQogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPigqcGFyYW1l
dGVycykuaGFzaCA9PSBzdGF0aWNfY2FzdDxDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4oKnN1
Z2dlc3RlZFBhcmFtZXRlcnMpLmhhc2g7CisgICAgLy8gT3RoZXIgYWxnb3JpdGhtcyBkb24ndCBo
YXZlIHBhcmFtZXRlcnMuCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSlNDcnlwdG9LZXlT
ZXJpYWxpemF0aW9uSldLOjpyZWNvbmNpbGVVc2FnZXMoQ3J5cHRvS2V5VXNhZ2UmIHN1Z2dlc3Rl
ZFVzYWdlKSBjb25zdApAQCAtMjA3LDIwICsyNzUsOCBAQCBib29sIEpTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSzo6a2V5U2l6CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGEoKSBj
b25zdAorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSzo6a2V5RGF0YU9jdGV0U2VxdWVuY2UoKSBjb25zdAogewotICAgIFN0cmluZyBqd2tL
ZXlUeXBlOwotICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCks
ICJrdHkiLCBqd2tLZXlUeXBlKSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJSZXF1aXJlZCBKV0sgXCJr
dHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBpZiAoandrS2V5VHlwZSAhPSAib2N0IikgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihtX2V4ZWMsICJVbnN1cHBvcnRlZCBKV0sga2V5IHR5cGUgIiArIGp3a0tleVR5cGUpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBTdHJpbmcga2V5QmFzZTY0VVJMOwog
ICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJrIiwga2V5
QmFzZTY0VVJMKSkgewogICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC0y
NDIsNiArMjk4LDExOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9L
CiAgICAgcmV0dXJuIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlOjpjcmVhdGUob2N0ZXRTZXF1
ZW5jZSk7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0tleVNl
cmlhbGl6YXRpb25KV0s6OmtleURhdGFSU0FDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICBWZWN0
b3I8Y2hhcj4gbW9kdWx1czsKKyAgICBWZWN0b3I8Y2hhcj4gZXhwb25lbnQ7CisgICAgVmVjdG9y
PGNoYXI+IHByaXZhdGVFeHBvbmVudDsKKworICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZy
b21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAibiIsIG1vZHVsdXMpKSB7CisgICAgICAgIGlm
ICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1f
ZXhlYywgIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9t
SlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImUiLCBleHBvbmVudCkpIHsKKyAgICAgICAgaWYg
KCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9l
eGVjLCAiUmVxdWlyZWQgSldLIFwiZVwiIG1lbWJlciBpcyBtaXNzaW5nIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21K
U09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZCIsIG1vZHVsdXMpKSB7CisgICAgICAgIGlmICht
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKG1vZHVs
dXMsIGV4cG9uZW50KTsKKyAgICB9CisKKyAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZvOworICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CisgICAgaWYgKCFnZXRCaWdJ
bnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmlt
ZUluZm8ucHJpbWVGYWN0b3IpKSB7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0
ZUV4cG9uZW50KTsKKyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRwIiwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhw
b25lbnQpKSB7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsK
KyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1f
anNvbi5nZXQoKSwgInEiLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKSB7CisgICAgICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKKyAgICB9CisKKyAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgeworICAgICAgICBpZiAobV9leGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywg
ZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxaSIsIHNlY29uZFByaW1l
SW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIENy
eXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50
LCBwcml2YXRlRXhwb25lbnQpOworICAgIH0KKworICAgIEpTQXJyYXkqIG90aGVyUHJpbWVJbmZv
SlNBcnJheTsKKyAgICBpZiAoIWdldEpTQXJyYXlGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQo
KSwgIm90aCIsIG90aGVyUHJpbWVJbmZvSlNBcnJheSkpIHsKKyAgICAgICAgaWYgKG1fZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9u
YWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZv
LCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvdGhlclByaW1lSW5mb0pTQXJyYXktPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOworICAg
ICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBvdGhlclByaW1lSW5mb0pTQXJyYXktPmdldEluZGV4KG1f
ZXhlYywgaSk7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmICghZWxlbWVudC5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJKV0sgXCJvdGhcIiBhcnJheSBtZW1i
ZXIgaXMgbm90IGFuIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBh
c09iamVjdChlbGVtZW50KSwgInIiLCBpbmZvLnByaW1lRmFjdG9yKSkgeworICAgICAgICAgICAg
aWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBnZXQgcHJpbWUgZmFjdG9yIGZvciBhIHByaW1lIGluIFwib3Ro
XCIgZGljdGlvbmFyeSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09iamVj
dChlbGVtZW50KSwgImQiLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgeworICAgICAgICAgICAg
aWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBnZXQgZmFjdG9yIENSVCBleHBvbmVudCBmb3IgYSBwcmltZSBp
biBcIm90aFwiIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywg
YXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJDYW5ub3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQg
Zm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBvdGhlclByaW1lSW5mb3MuYXBwZW5kKGluZm8p
OworICAgIH0KKworICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRl
UHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50LCBmaXJzdFByaW1lSW5mbywgc2Vjb25kUHJpbWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLOjprZXlEYXRhKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgandrS2V5VHlwZTsKKyAgICBp
ZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5
VHlwZSkpIHsKKyAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiUmVxdWlyZWQgSldLIFwia3R5XCIgbWVtYmVyIGlz
IG1pc3NpbmciKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGp3
a0tleVR5cGUgPT0gIm9jdCIpCisgICAgICAgIHJldHVybiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSgp
OworCisgICAgaWYgKGp3a0tleVR5cGUgPT0gIlJTQSIpCisgICAgICAgIHJldHVybiBrZXlEYXRh
UlNBQ29tcG9uZW50cygpOworCisgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiVW5zdXBwb3J0
ZWQgSldLIGtleSB0eXBlICIgKyBqd2tLZXlUeXBlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0tleVNlcmlhbGl6YXRpb25KV0suaAkocmV2aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHJpdmF0ZToKICAgICBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0soSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wga2V5
U2l6ZUlzVmFsaWQoc2l6ZV90IHNpemVJbkJpdHMpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSgpIGNvbnN0OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBrZXlEYXRhUlNBQ29tcG9uZW50cygpIGNvbnN0Owog
CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBtX2pzb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oCShyZXZpc2lvbiAxNTkxNzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKQEAgLTQzLDYgKzQ0LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81TWFjLmNwcAkocmV2aXNpb24gMTU5MTYwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwOjE1OTE2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIgor
CisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNTo6c2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5
cHRvS2V5JiwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+Jiwgc3RkOjp1bmlxdWVf
cHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NTo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9L
ZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiAvKnNpZ25hdHVyZSovLCBjb25zdCBWZWN0
b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIC8qZGF0YSovLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlz
ZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PVF9TVVBQT1JURURf
RVJSOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDE1
OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsOCBAQCBjbGFzcyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxk
ZXI7CiAKIEVOVU1fQ0xBU1MoQ3J5cHRvS2V5Q2xhc3MpIHsKICAgICBITUFDLAotICAgIEFFUwor
ICAgIEFFUywKKyAgICBSU0EKIH07CiAKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENyeXB0b0tleT4gewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0YS5o
CShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIGNsYXNzIENyeXB0b0tleURhdGEg
ewogV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3J5cHRvS2V5RGF0YSk7CiBwdWJsaWM6CiAgICAgRU5V
TV9DTEFTUyhGb3JtYXQpIHsKLSAgICAgICAgT2N0ZXRTZXF1ZW5jZQorICAgICAgICBPY3RldFNl
cXVlbmNlLAorICAgICAgICBSU0FDb21wb25lbnRzCiAgICAgfTsKIAogICAgIENyeXB0b0tleURh
dGEoRm9ybWF0IGZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCShyZXZpc2lvbiAx
NTkxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShjCiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29uc3QgQ3J5cHRvS2V5RGF0YU9j
dGV0U2VxdWVuY2UmIGtleURhdGFPY3RldFNlcXVlbmNlID0gYXNDcnlwdG9LZXlEYXRhT2N0ZXRT
ZXF1ZW5jZShrZXlEYXRhKTsKKyAgICBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSYg
a2V5RGF0YU9jdGV0U2VxdWVuY2UgPSB0b0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlKGtleURh
dGEpOwogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdCA9IENyeXB0b0tleUFFUzo6Y3Jl
YXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMsIGtleURhdGFPY3RldFNlcXVl
bmNlLm9jdGV0U2VxdWVuY2UoKSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKICAgICBwcm9taXNlLT5m
dWxmaWxsKHJlc3VsdC5yZWxlYXNlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAJKHJldmlz
aW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KGNvbnMKICAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlEYXRh
T2N0ZXRTZXF1ZW5jZSYga2V5RGF0YU9jdGV0U2VxdWVuY2UgPSBhc0NyeXB0b0tleURhdGFPY3Rl
dFNlcXVlbmNlKGtleURhdGEpOworICAgIGNvbnN0IENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNl
JiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSA9IHRvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uoa2V5
RGF0YSk7CiAKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1l
dGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJh
bWV0ZXJzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNw
cAkocmV2aXNpb24gMTU5MTYwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6MTU5MTYwKQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtUnNhS2V5R2VuUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhU3Nh
S2V5UGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKKyNp
bmNsdWRlICJDcnlwdG9LZXlSU0EuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBjb25zdCBDcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNTo6c19uYW1lID0gInJzYXNzYS1wa2NzMS12MV81IjsKKworQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81
KCkKK3sKK30KKworQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6On5DcnlwdG9BbGdv
cml0aG1SU0FTU0FfUEtDUzFfdjFfNSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG0+IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPihuZXcgQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUpOworfQorCitDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppZGVudGlmaWVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc19pZGVudGlmaWVyOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81OjppbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4g
cHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtUnNh
U3NhS2V5UGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRv
S2V5RGF0YVJTQUNvbXBvbmVudHMmIHJzYUNvbXBvbmVudHMgPSB0b0NyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzKGtleURhdGEpOworCisgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BL
Q1MxX3YxXzUsIHJzYUNvbXBvbmVudHMsIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHJzYVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKKyAgICAgICAg
cmVzdWx0LT5yZXN0cmljdFRvSGFzaChyc2FTU0FQYXJhbWV0ZXJzLmhhc2gpOworCisgICAgcHJv
bWlzZS0+ZnVsZmlsbChyZXN1bHQucmVsZWFzZSgpKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNh
Z2VzLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNv
ZGUmKQoreworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcyYgcnNhUGFy
YW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFt
cyY+KHBhcmFtZXRlcnMpOworCisgICAgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUsIHJzYVBhcmFtZXRlcnMubW9k
dWx1c0xlbmd0aCwgcnNhUGFyYW1ldGVycy5wdWJsaWNFeHBvbmVudCwgZXh0cmFjdGFibGUsIHVz
YWdlcywgc3RkOjptb3ZlKHByb21pc2UpKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNV
QlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgJ
KHJldmlzaW9uIDE1OTE2MCkJKGZyb20gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDoxNTkxNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81X2gKKyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzVfaAorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtLmgiCisKKyNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNSBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdv
cml0aG0geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX25hbWU7Cisg
ICAgc3RhdGljIGNvbnN0IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgc19pZGVudGlmaWVyID0g
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzU7CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0
dWFsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURF
OworCisgICAgdmlydHVhbCB2b2lkIHNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYs
IHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBzaWduYXR1
cmUsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVf
cHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0
S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXlEYXRh
JiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBD
cnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNSgpOworICAgIHZpcnR1YWwgfkNyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81KCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
U1VCVExFX0NSWVBUTykKKyNlbmRpZiAvLyBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAkocmV2
aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVT
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE4ICs1NiwyMSBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxjaGFyPiBtX2tleTsKIH07CiAKLWlubGluZSBjb25zdCBDcnlwdG9LZXlBRVMqIGFzQ3J5cHRv
S2V5QUVTKGNvbnN0IENyeXB0b0tleSYga2V5KQoraW5saW5lIGJvb2wgaXNDcnlwdG9LZXlBRVMo
Y29uc3QgQ3J5cHRvS2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0
b0tleUNsYXNzOjpBRVMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlBRVMqPigma2V5KTsKKyAgICByZXR1cm4ga2V5LmtleUNs
YXNzKCkgPT0gQ3J5cHRvS2V5Q2xhc3M6OkFFUzsKIH0KIAotaW5saW5lIENyeXB0b0tleUFFUyog
YXNDcnlwdG9LZXlBRVMoQ3J5cHRvS2V5JiBrZXkpCitpbmxpbmUgY29uc3QgQ3J5cHRvS2V5QUVT
JiB0b0NyeXB0b0tleUFFUyhjb25zdCBDcnlwdG9LZXkmIGtleSkKIHsKLSAgICBpZiAoa2V5Lmtl
eUNsYXNzKCkgIT0gQ3J5cHRvS2V5Q2xhc3M6OkFFUykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleUFFUyo+KCZrZXkpOworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQ3J5cHRvS2V5QUVTKGtleSkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlBRVMmPihrZXkpOworfQorCitpbmxpbmUg
Q3J5cHRvS2V5QUVTJiB0b0NyeXB0b0tleUFFUyhDcnlwdG9LZXkmIGtleSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0NyeXB0b0tleUFFUyhrZXkpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5QUVTJj4oa2V5KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0
YU9jdGV0U2VxdWVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oCShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGNoYXI+IG1f
a2V5RGF0YTsKIH07CiAKLWlubGluZSBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSYg
YXNDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShjb25zdCBDcnlwdG9LZXlEYXRhJiBkYXRhKQor
aW5saW5lIGNvbnN0IENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlJiB0b0NyeXB0b0tleURhdGFP
Y3RldFNlcXVlbmNlKGNvbnN0IENyeXB0b0tleURhdGEmIGRhdGEpCiB7CiAgICAgQVNTRVJUKGRh
dGEuZm9ybWF0KCkgPT0gQ3J5cHRvS2V5RGF0YTo6Rm9ybWF0OjpPY3RldFNlcXVlbmNlKTsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UmPihk
YXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAJKHJldmlzaW9uIDE1OTE2MCkJKGZyb20gU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3BwOjE1
OTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21w
b25lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMo
Y29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50
KQorICAgIDogQ3J5cHRvS2V5RGF0YShDcnlwdG9LZXlEYXRhOjpGb3JtYXQ6OlJTQUNvbXBvbmVu
dHMpCisgICAgLCBtX3R5cGUoVHlwZTo6UHVibGljKQorICAgICwgbV9tb2R1bHVzKG1vZHVsdXMp
CisgICAgLCBtX2V4cG9uZW50KGV4cG9uZW50KQoreworfQorCitDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBt
b2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hhcj4m
IHByaXZhdGVFeHBvbmVudCkKKyAgICA6IENyeXB0b0tleURhdGEoQ3J5cHRvS2V5RGF0YTo6Rm9y
bWF0OjpSU0FDb21wb25lbnRzKQorICAgICwgbV90eXBlKFR5cGU6OlByaXZhdGUpCisgICAgLCBt
X21vZHVsdXMobW9kdWx1cykKKyAgICAsIG1fZXhwb25lbnQoZXhwb25lbnQpCisgICAgLCBtX3By
aXZhdGVFeHBvbmVudChwcml2YXRlRXhwb25lbnQpCisgICAgLCBtX2hhc0FkZGl0aW9uYWxQcml2
YXRlS2V5UGFyYW1ldGVycyhmYWxzZSkKK3sKK30KKworQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1
cywgY29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwcml2
YXRlRXhwb25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1l
SW5mbyYgc2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmlt
ZUluZm9zKQorICAgIDogQ3J5cHRvS2V5RGF0YShDcnlwdG9LZXlEYXRhOjpGb3JtYXQ6OlJTQUNv
bXBvbmVudHMpCisgICAgLCBtX3R5cGUoVHlwZTo6UHJpdmF0ZSkKKyAgICAsIG1fbW9kdWx1cyht
b2R1bHVzKQorICAgICwgbV9leHBvbmVudChleHBvbmVudCkKKyAgICAsIG1fcHJpdmF0ZUV4cG9u
ZW50KHByaXZhdGVFeHBvbmVudCkKKyAgICAsIG1faGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJh
bWV0ZXJzKHRydWUpCisgICAgLCBtX2ZpcnN0UHJpbWVJbmZvKGZpcnN0UHJpbWVJbmZvKQorICAg
ICwgbV9zZWNvbmRQcmltZUluZm8oc2Vjb25kUHJpbWVJbmZvKQorICAgICwgbV9vdGhlclByaW1l
SW5mb3Mob3RoZXJQcmltZUluZm9zKQoreworfQorCitDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50
czo6fkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzLmgJKHJldmlzaW9uIDE1OTE2MCkJKGZyb20gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaDoxNTkxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50c19oCisjZGVmaW5lIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzX2gKKworI2luY2x1
ZGUgIkNyeXB0b0tleURhdGEuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFC
TEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50cyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9LZXlEYXRhIHsKK3B1Ymxp
YzoKKyAgICBFTlVNX0NMQVNTKFR5cGUpIHsKKyAgICAgICAgUHVibGljLAorICAgICAgICBQcml2
YXRlCisgICAgfTsKKworICAgIHN0cnVjdCBQcmltZUluZm8geworICAgICAgICBWZWN0b3I8Y2hh
cj4gcHJpbWVGYWN0b3I7CisgICAgICAgIFZlY3RvcjxjaGFyPiBmYWN0b3JDUlRFeHBvbmVudDsK
KyAgICAgICAgVmVjdG9yPGNoYXI+IGZhY3RvckNSVENvZWZmaWNpZW50OworICAgIH07CisKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBjcmVh
dGVQdWJsaWMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGV4cG9uZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKG1vZHVs
dXMsIGV4cG9uZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50cz4gY3JlYXRlUHJpdmF0ZShjb25zdCBWZWN0b3I8Y2hhcj4m
IG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3RvcjxjaGFy
PiYgcHJpdmF0ZUV4cG9uZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzPiBjcmVhdGVQ
cml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywgY29u
c3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwcml2YXRlRXhw
b25lbnQsIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQcmltZUluZm8sIGNvbnN0IFByaW1lSW5mbyYg
c2Vjb25kUHJpbWVJbmZvLCBjb25zdCBWZWN0b3I8UHJpbWVJbmZvPiYgb3RoZXJQcmltZUluZm9z
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cz4obmV3IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzKG1vZHVsdXMsIGV4cG9u
ZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90
aGVyUHJpbWVJbmZvcykpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KworICAgIC8vIFByaXZhdGUgYW5kIHB1YmxpYyBrZXlzLgorICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiYgbW9kdWx1cygpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWx1czsgfQorICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgZXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cG9uZW50OyB9CisKKyAgICAv
LyBPbmx5IHByaXZhdGUga2V5cy4KKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZUV4cG9uZW50OyB9CisgICAgYm9vbCBoYXNB
ZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc0FkZGl0
aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVyczsgfQorICAgIGNvbnN0IFByaW1lSW5mbyYgZmlyc3RQ
cmltZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UHJpbWVJbmZvOyB9CisgICAgY29uc3Qg
UHJpbWVJbmZvJiBzZWNvbmRQcmltZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3NlY29uZFByaW1l
SW5mbzsgfQorICAgIGNvbnN0IFZlY3RvcjxQcmltZUluZm8+JiBvdGhlclByaW1lSW5mb3MoKSBj
b25zdCB7IHJldHVybiBtX290aGVyUHJpbWVJbmZvczsgfQorCitwcml2YXRlOgorICAgIENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywgY29uc3Qg
VmVjdG9yPGNoYXI+JiBleHBvbmVudCk7CisgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMo
Y29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBvbmVudCk7CisgICAgQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBvbmVudCwgY29u
c3QgUHJpbWVJbmZvJiBmaXJzdFByaW1lSW5mbywgY29uc3QgUHJpbWVJbmZvJiBzZWNvbmRQcmlt
ZUluZm8sIGNvbnN0IFZlY3RvcjxQcmltZUluZm8+JiBvdGhlclByaW1lSW5mb3MpOworCisgICAg
VHlwZSBtX3R5cGU7CisKKyAgICAvLyBQcml2YXRlIGFuZCBwdWJsaWMga2V5cy4KKyAgICBWZWN0
b3I8Y2hhcj4gbV9tb2R1bHVzOworICAgIFZlY3RvcjxjaGFyPiBtX2V4cG9uZW50OworCisgICAg
Ly8gT25seSBwcml2YXRlIGtleXMuCisgICAgVmVjdG9yPGNoYXI+IG1fcHJpdmF0ZUV4cG9uZW50
OworICAgIGJvb2wgbV9oYXNBZGRpdGlvbmFsUHJpdmF0ZUtleVBhcmFtZXRlcnM7CisgICAgUHJp
bWVJbmZvIG1fZmlyc3RQcmltZUluZm87CisgICAgUHJpbWVJbmZvIG1fc2Vjb25kUHJpbWVJbmZv
OworICAgIFZlY3RvcjxQcmltZUluZm8+IG1fb3RoZXJQcmltZUluZm9zOyAvLyBXaGVuIHRocmVl
IG9yIG1vcmUgcHJpbWVzIGhhdmUgYmVlbiB1c2VkLCB0aGUgbnVtYmVyIG9mIGFycmF5IGVsZW1l
bnRzIGlzIGJlIHRoZSBudW1iZXIgb2YgcHJpbWVzIHVzZWQgbWludXMgdHdvLgorfTsKKworaW5s
aW5lIGNvbnN0IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiB0b0NyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzKGNvbnN0IENyeXB0b0tleURhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEu
Zm9ybWF0KCkgPT0gQ3J5cHRvS2V5RGF0YTo6Rm9ybWF0OjpSU0FDb21wb25lbnRzKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmPihkYXRh
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHNfaApJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkocmV2aXNpb24gMTU5
MTc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxOCArNTcsMjEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Y2hhcj4g
bV9rZXk7CiB9OwogCi1pbmxpbmUgY29uc3QgQ3J5cHRvS2V5SE1BQyogYXNDcnlwdG9LZXlITUFD
KGNvbnN0IENyeXB0b0tleSYga2V5KQoraW5saW5lIGJvb2wgaXNDcnlwdG9LZXlITUFDKGNvbnN0
IENyeXB0b0tleSYga2V5KQogewotICAgIGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlD
bGFzczo6SE1BQykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IENyeXB0b0tleUhNQUMqPigma2V5KTsKKyAgICByZXR1cm4ga2V5LmtleUNsYXNz
KCkgPT0gQ3J5cHRvS2V5Q2xhc3M6OkhNQUM7CiB9CiAKLWlubGluZSBDcnlwdG9LZXlITUFDKiBh
c0NyeXB0b0tleUhNQUMoQ3J5cHRvS2V5JiBrZXkpCitpbmxpbmUgY29uc3QgQ3J5cHRvS2V5SE1B
QyYgdG9DcnlwdG9LZXlITUFDKGNvbnN0IENyeXB0b0tleSYga2V5KQogewotICAgIGlmIChrZXku
a2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6SE1BQykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleUhNQUMqPigma2V5KTsKKyAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0NyeXB0b0tleUhNQUMoa2V5KSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworfQorCitp
bmxpbmUgQ3J5cHRvS2V5SE1BQyYgdG9DcnlwdG9LZXlITUFDKENyeXB0b0tleSYga2V5KQorewor
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQ3J5cHRvS2V5SE1BQyhrZXkp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5SE1BQyY+KGtleSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleVJTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleVJTQS5oCShyZXZpc2lvbiAxNTkxNjApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleVJTQS5oOjE1OTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleVJTQS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENyeXB0b0tleVJTQV9oCisjZGVmaW5lIENyeXB0b0tleVJTQV9oCisK
KyNpbmNsdWRlICJDcnlwdG9LZXkuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCit0eXBlZGVmIHN0cnVjdCBfQ0NSU0FD
cnlwdG9yICpDQ1JTQUNyeXB0b3JSZWY7Cit0eXBlZGVmIENDUlNBQ3J5cHRvclJlZiBQbGF0Zm9y
bVJTQUtleTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0tl
eURhdGFSU0FDb21wb25lbnRzOworY2xhc3MgQ3J5cHRvS2V5UGFpcjsKK2NsYXNzIFByb21pc2VX
cmFwcGVyOworCitjbGFzcyBDcnlwdG9LZXlSU0EgRklOQUwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0tleVR5cGUgdHlwZSwgUGxh
dGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
IHVzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcnlwdG9LZXlSU0Eo
aWRlbnRpZmllciwgdHlwZSwgcGxhdGZvcm1LZXksIGV4dHJhY3RhYmxlLCB1c2FnZSkpOworICAg
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyLCBjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyYsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKKyAgICB2aXJ0dWFsIH5DcnlwdG9LZXlSU0Eo
KTsKKworICAgIHZvaWQgcmVzdHJpY3RUb0hhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcik7
CisKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciwgdW5zaWduZWQgbW9kdWx1c0xlbmd0aCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwdWJsaWNFeHBv
bmVudCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQ
cm9taXNlV3JhcHBlcj4pOworCisgICAgdmlydHVhbCBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpSU0E7IH0KKworICAgIFBs
YXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUtleTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxn
b3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgQ3J5cHRvS2V5UlNBKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIENyeXB0b0tleVR5cGUs
IFBsYXRmb3JtUlNBS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CisKKyAg
ICBQbGF0Zm9ybVJTQUtleSBtX3BsYXRmb3JtS2V5OworCisgICAgYm9vbCBtX3Jlc3RyaWN0ZWRU
b1NwZWNpZmljSGFzaDsKKyAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIG1faGFzaDsKK307
CisKK2lubGluZSBib29sIGlzQ3J5cHRvS2V5UlNBKGNvbnN0IENyeXB0b0tleSYga2V5KQorewor
ICAgIHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBDcnlwdG9LZXlDbGFzczo6UlNBOworfQorCitp
bmxpbmUgY29uc3QgQ3J5cHRvS2V5UlNBJiB0b0NyeXB0b0tleVJTQShjb25zdCBDcnlwdG9LZXkm
IGtleSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0NyeXB0b0tl
eVJTQShrZXkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5UlNBJj4o
a2V5KTsKK30KKworaW5saW5lIENyeXB0b0tleVJTQSYgYXNDcnlwdG9LZXlSU0EoQ3J5cHRvS2V5
JiBrZXkpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNDcnlwdG9L
ZXlSU0Eoa2V5KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleVJTQSY+KGtleSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQorI2VuZGlmIC8vIENyeXB0b0tleVJTQV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAJKHJl
dmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDI3ICs5MiwyNyBAQCBzdGF0
aWMgdm9pZCB0cmFuc2Zvcm1BRVNfQ0JDKENDT3BlcmF0aW9uCiB2b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1l
dGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25E
YXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMm
IGFlc0NCQ1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1BZXND
YmNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKLSAgICBjb25zdCBDcnlwdG9LZXlBRVMqIGFlc0tleSA9
IGFzQ3J5cHRvS2V5QUVTKGtleSk7CiAKLSAgICBpZiAoIWFlc0tleSkgeworICAgIGlmICghaXND
cnlwdG9LZXlBRVMoa2V5KSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIGNvbnN0IENyeXB0b0tleUFFUyYgYWVzS2V5ID0gdG9D
cnlwdG9LZXlBRVMoa2V5KTsKIAotICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVz
Q0JDUGFyYW1ldGVycywgKmFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKKyAgICB0
cmFuc2Zvcm1BRVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMsIGFlc0tleSwgZGF0
YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpkZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNv
bnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRh
dGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQ
YXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1z
Jj4ocGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5QUVTKiBhZXNLZXkgPSBhc0NyeXB0
b0tleUFFUyhrZXkpOwogCi0gICAgaWYgKCFhZXNLZXkpIHsKKyAgICBpZiAoIWlzQ3J5cHRvS2V5
QUVTKGtleSkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBjb25zdCBDcnlwdG9LZXlBRVMmIGFlc0tleSA9IHRvQ3J5cHRvS2V5
QUVTKGtleSk7CiAKLSAgICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc0NCQ1BhcmFt
ZXRlcnMsICphZXNLZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlKSk7CisgICAgdHJhbnNmb3Jt
QUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCBhZXNLZXksIGRhdGEsIHN0ZDo6
bW92ZShwcm9taXNlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNw
cAkocmV2aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1ITUFDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMjAgKzk1LDIwIEBAIHN0
YXRpYyBWZWN0b3I8dW5zaWduZWQgY2hhcj4gY2FsY3VsYXRlU2kKIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtSE1BQzo6c2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+
JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmIGhtYWNQ
YXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyY+
KHBhcmFtZXRlcnMpOwotICAgIGNvbnN0IENyeXB0b0tleUhNQUMqIGhtYWNLZXkgPSBhc0NyeXB0
b0tleUhNQUMoa2V5KTsKIAotICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYg
KCFnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGht
KSkgeworICAgIGlmICghaXNDcnlwdG9LZXlITUFDKGtleSkpIHsKICAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjb25zdCBDcnlwdG9L
ZXlITUFDJiBobWFjS2V5ID0gdG9DcnlwdG9LZXlITUFDKGtleSk7CiAKLSAgICBpZiAoIWhtYWNL
ZXkpIHsKKyAgICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOworICAgIGlmICghZ2V0Q29tbW9u
Q3J5cHRvQWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxn
b3JpdGhtLCBobWFjS2V5LT5rZXkoKSwgZGF0YSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCks
IGRhdGEpOwogCiAgICAgcHJvbWlzZS0+ZnVsZmlsbChzaWduYXR1cmUpOwogfQpAQCAtMTE2LDIw
ICsxMTYsMjAgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeQogdm9p
ZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9u
RGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYg
aG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFy
YW1zJj4ocGFyYW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5SE1BQyogaG1hY0tleSA9IGFz
Q3J5cHRvS2V5SE1BQyhrZXkpOwogCi0gICAgQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsKLSAg
ICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBhbGdv
cml0aG0pKSB7CisgICAgaWYgKCFpc0NyeXB0b0tleUhNQUMoa2V5KSkgewogICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNvbnN0IENy
eXB0b0tleUhNQUMmIGhtYWNLZXkgPSB0b0NyeXB0b0tleUhNQUMoa2V5KTsKIAotICAgIGlmICgh
aG1hY0tleSkgeworICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07CisgICAgaWYgKCFnZXRD
b21tb25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGhtKSkgewog
ICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVy
ZShhbGdvcml0aG0sIGhtYWNLZXktPmtleSgpLCBkYXRhKTsKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5r
ZXkoKSwgZGF0YSk7CiAKICAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXplKCkgPT0gZXhw
ZWN0ZWRTaWduYXR1cmUuc2Vjb25kICYmICFtZW1jbXAoc2lnbmF0dXJlLmRhdGEoKSwgZXhwZWN0
ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFj
LmNwcAkocmV2aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFFU19DQkMuaCIKICNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1ITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzUuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1TSEExLmgiCiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMjU2Lmgi
CkBAIC00Miw2ICs0Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRmb3Jt
UmUKIHsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpzX25h
bWUsIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1I
TUFDOjpzX25hbWUsIENyeXB0b0FsZ29yaXRobUhNQUM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxn
b3JpdGhtSE1BQzo6Y3JlYXRlKTsKKyAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNTo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6Y3Jl
YXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1TSEExOjpzX25hbWUs
IENyeXB0b0FsZ29yaXRobVNIQTE6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6
Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1TSEEyMjQ6OnNf
bmFtZSwgQ3J5cHRvQWxnb3JpdGhtU0hBMjI0OjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRo
bVNIQTIyNDo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1T
SEEyNTY6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtU0hBMjU2OjpzX2lkZW50aWZpZXIsIENyeXB0
b0FsZ29yaXRobVNIQTI1Njo6Y3JlYXRlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHJldmlzaW9uIDE1OTE2MCkJKGZyb20gU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOjE1OTE2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDcnlwdG9LZXlSU0EuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKKyNpbmNsdWRlICJKU0RPTVByb21p
c2UuaCIKKyNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvci5oPgorCisjaWYgZGVm
aW5lZChfX2hhc19pbmNsdWRlKQorI2lmIF9faGFzX2luY2x1ZGUoPENvbW1vbkNyeXB0by9Db21t
b25SU0FDcnlwdG9yLmg+KQorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25SU0FDcnlwdG9y
Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9DQ19SU0FDUllQVE9SX0hfCitlbnVtIHsK
KyAgICBjY1JTQUtleVB1YmxpYyAgICAgICAgICA9IDAsCisgICAgY2NSU0FLZXlQcml2YXRlICAg
ICAgICAgPSAxCit9OwordHlwZWRlZiB1aW50MzJfdCBDQ1JTQUtleVR5cGU7CisjZW5kaWYKKwor
ZXh0ZXJuICJDIiBDQ0NyeXB0b3JTdGF0dXMgQ0NSU0FDcnlwdG9yQ3JlYXRlRnJvbURhdGEoQ0NS
U0FLZXlUeXBlIGtleVR5cGUsIHVpbnQ4X3QgKm1vZHVsdXMsIHNpemVfdCBtb2R1bHVzTGVuZ3Ro
LCB1aW50OF90ICpleHBvbmVudCwgc2l6ZV90IGV4cG9uZW50TGVuZ3RoLCB1aW50OF90ICpwLCBz
aXplX3QgcExlbmd0aCwgdWludDhfdCAqcSwgc2l6ZV90IHFMZW5ndGgsIENDUlNBQ3J5cHRvclJl
ZiAqcmVmKTsKK2V4dGVybiAiQyIgQ0NDcnlwdG9yU3RhdHVzIENDUlNBQ3J5cHRvckdlbmVyYXRl
UGFpcihzaXplX3Qga2V5c2l6ZSwgdWludDMyX3QgZSwgQ0NSU0FDcnlwdG9yUmVmICpwdWJsaWNL
ZXksIENDUlNBQ3J5cHRvclJlZiAqcHJpdmF0ZUtleSk7CitleHRlcm4gIkMiIENDUlNBQ3J5cHRv
clJlZiBDQ1JTQUNyeXB0b3JHZXRQdWJsaWNLZXlGcm9tUHJpdmF0ZUtleShDQ1JTQUNyeXB0b3JS
ZWYgcHJpdmtleSk7CitleHRlcm4gIkMiIHZvaWQgQ0NSU0FDcnlwdG9yUmVsZWFzZShDQ1JTQUNy
eXB0b3JSZWYga2V5KTsKK2V4dGVybiAiQyIgQ0NDcnlwdG9yU3RhdHVzIENDUlNBR2V0S2V5Q29t
cG9uZW50cyhDQ1JTQUNyeXB0b3JSZWYgcnNhS2V5LCB1aW50OF90ICptb2R1bHVzLCBzaXplX3Qg
Km1vZHVsdXNMZW5ndGgsIHVpbnQ4X3QgKmV4cG9uZW50LCBzaXplX3QgKmV4cG9uZW50TGVuZ3Ro
LCB1aW50OF90ICpwLCBzaXplX3QgKnBMZW5ndGgsIHVpbnQ4X3QgKnEsIHNpemVfdCAqcUxlbmd0
aCk7CitleHRlcm4gIkMiIENDUlNBS2V5VHlwZSBDQ1JTQUdldEtleVR5cGUoQ0NSU0FDcnlwdG9y
UmVmIGtleSk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3J5cHRvS2V5UlNBOjpDcnlwdG9L
ZXlSU0EoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBl
IHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSB1c2FnZSkKKyAgICA6IENyeXB0b0tleShpZGVudGlmaWVyLCB0eXBlLCBleHRy
YWN0YWJsZSwgdXNhZ2UpCisgICAgLCBtX3BsYXRmb3JtS2V5KHBsYXRmb3JtS2V5KQorICAgICwg
bV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2goZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8Q3J5
cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiBrZXlEYXRhLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKK3sKKyAgICBpZiAoa2V5RGF0
YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlR5cGU6OlByaXZhdGUgJiYg
IWtleURhdGEuaGFzQWRkaXRpb25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAg
V1RGTG9nQWx3YXlzKCJQcml2YXRlIGtleXMgd2l0aG91dCBhZGRpdGlvbmFsIGRhdGEgYXJlIG5v
dCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlmIChr
ZXlEYXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSkgeworICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMTU0NDQwNzQ+IHRyYWNrcyBhZGRpbmcgc3VwcG9ydC4KKyAgICAgICAgV1RGTG9nQWx3
YXlzKCJLZXlzIHdpdGggbW9yZSB0aGFuIHR3byBwcmltZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIENDUlNBQ3J5cHRvclJlZiBjcnlw
dG9yOworICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBDQ1JTQUNyeXB0b3JDcmVhdGVGcm9t
RGF0YSgKKyAgICAgICAga2V5RGF0YS50eXBlKCkgPT0gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OlR5cGU6OlB1YmxpYyA/IGNjUlNBS2V5UHVibGljIDogY2NSU0FLZXlQcml2YXRlLAorICAg
ICAgICAodWludDhfdCopa2V5RGF0YS5tb2R1bHVzKCkuZGF0YSgpLCBrZXlEYXRhLm1vZHVsdXMo
KS5zaXplKCksCisgICAgICAgICh1aW50OF90KilrZXlEYXRhLmV4cG9uZW50KCkuZGF0YSgpLCBr
ZXlEYXRhLmV4cG9uZW50KCkuc2l6ZSgpLAorICAgICAgICAodWludDhfdCopa2V5RGF0YS5maXJz
dFByaW1lSW5mbygpLnByaW1lRmFjdG9yLmRhdGEoKSwga2V5RGF0YS5maXJzdFByaW1lSW5mbygp
LnByaW1lRmFjdG9yLnNpemUoKSwKKyAgICAgICAgKHVpbnQ4X3QqKWtleURhdGEuc2Vjb25kUHJp
bWVJbmZvKCkucHJpbWVGYWN0b3IuZGF0YSgpLCBrZXlEYXRhLnNlY29uZFByaW1lSW5mbygpLnBy
aW1lRmFjdG9yLnNpemUoKSwKKyAgICAgICAgJmNyeXB0b3IpOworCisgICAgaWYgKHN0YXR1cykg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGNyZWF0ZSBSU0Ega2V5IGZyb20gZGF0YSwg
ZXJyb3IgJWQiLCBzdGF0dXMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENyeXB0b0tleVJTQShpZGVudGlmaWVyLCBrZXlEYXRhLnR5
cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljID8gQ3J5cHRv
S2V5VHlwZTo6UHVibGljIDogQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwgY3J5cHRvciwgZXh0cmFj
dGFibGUsIHVzYWdlKSk7Cit9CisKK0NyeXB0b0tleVJTQTo6fkNyeXB0b0tleVJTQSgpCit7Cisg
ICAgQ0NSU0FDcnlwdG9yUmVsZWFzZShtX3BsYXRmb3JtS2V5KTsKK30KKwordm9pZCBDcnlwdG9L
ZXlSU0E6OnJlc3RyaWN0VG9IYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmll
cikKK3sKKyAgICBtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCA9IHRydWU7CisgICAgbV9oYXNo
ID0gaWRlbnRpZmllcjsKK30KKwordm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJiBidWlsZGVyKSBjb25z
dAoreworICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsK
KworICAgIEFTU0VSVChDQ1JTQUdldEtleVR5cGUobV9wbGF0Zm9ybUtleSkgPT0gY2NSU0FLZXlQ
dWJsaWMgfHwgQ0NSU0FHZXRLZXlUeXBlKG1fcGxhdGZvcm1LZXkpID09IGNjUlNBS2V5UHJpdmF0
ZSk7CisgICAgYm9vbCBwbGF0Zm9ybUtleUlzUHVibGljID0gQ0NSU0FHZXRLZXlUeXBlKG1fcGxh
dGZvcm1LZXkpID09IGNjUlNBS2V5UHVibGljOworICAgIENDUlNBQ3J5cHRvclJlZiBwdWJsaWNL
ZXkgPSBwbGF0Zm9ybUtleUlzUHVibGljID8gbV9wbGF0Zm9ybUtleSA6IENDUlNBQ3J5cHRvckdl
dFB1YmxpY0tleUZyb21Qcml2YXRlS2V5KG1fcGxhdGZvcm1LZXkpOworCisgICAgc2l6ZV90IG1v
ZHVsdXNMZW5ndGg7CisgICAgc2l6ZV90IGV4cG9uZW50TGVuZ3RoOworICAgIHVpbnQ4X3QgcHVi
bGljRXhwb25lbnRbMTYzODRdOworICAgIHNpemVfdCBkdW1teTsKKyAgICB1aW50OF90IGJ1Zlsx
NjM4NF07CisgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDUlNBR2V0S2V5Q29tcG9uZW50
cyhwdWJsaWNLZXksIGJ1ZiwgJm1vZHVsdXNMZW5ndGgsIHB1YmxpY0V4cG9uZW50LCAmZXhwb25l
bnRMZW5ndGgsIGJ1ZiwgJmR1bW15LCBidWYsICZkdW1teSk7CisgICAgaWYgKCFwbGF0Zm9ybUtl
eUlzUHVibGljKSB7CisgICAgICAgIC8vIENDUlNBQ3J5cHRvckdldFB1YmxpY0tleUZyb21Qcml2
YXRlS2V5IGhhcyAiR2V0IiBpbiB0aGUgbmFtZSwgYnV0IGl0cyByZXN1bHQgbmVlZHMgdG8gYmUg
cmVsZWFzZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0vMTU0NDk2OTc+KS4KKyAgICAgICAgQ0NSU0FD
cnlwdG9yUmVsZWFzZShwdWJsaWNLZXkpOworICAgIH0KKyAgICBpZiAoc3RhdHVzKSB7CisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkgY29tcG9uZW50cywgc3RhdHVz
ICVkIiwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1aWxkZXIuYWRk
KCJtb2R1bHVzTGVuZ3RoIiwgbW9kdWx1c0xlbmd0aCAqIDgpOworCisgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IHB1YmxpY0V4cG9uZW50VmVjdG9yOworICAgIHB1YmxpY0V4cG9uZW50VmVjdG9y
LmFwcGVuZChwdWJsaWNFeHBvbmVudCwgZXhwb25lbnRMZW5ndGgpOworICAgIGJ1aWxkZXIuYWRk
KCJwdWJsaWNFeHBvbmVudCIsIHB1YmxpY0V4cG9uZW50VmVjdG9yKTsKKworICAgIGlmIChtX3Jl
c3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgeworICAgICAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1
aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKKyAgICAgICAgaGFzaERlc2NyaXB0
aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgp
Lm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIs
ICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGJpZ0lu
dGVnZXJUb1VJbnQzMihjb25zdCBWZWN0b3I8Y2hhcj4mIGJpZ0ludGVnZXIsIHVpbnQzMl90JiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSArIDQg
PCBiaWdJbnRlZ2VyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiaWdJbnRlZ2VyW2ldKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gYmlnIHRvIGZpdCBpbiAzMiBiaXRzLgor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBiaWdJbnRlZ2VyLnNpemUoKSA+IDQgPyBiaWdJ
bnRlZ2VyLnNpemUoKSAtIDQgOiAwOyBpIDwgYmlnSW50ZWdlci5zaXplKCk7ICsraSkgeworICAg
ICAgICByZXN1bHQgPDw9IDg7CisgICAgICAgIHJlc3VsdCArPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihiaWdJbnRlZ2VyW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGgsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHVi
bGljRXhwb25lbnQsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBzdGQ6
OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UpCit7CisgICAgdWludDMyX3QgZTsK
KyAgICBpZiAoIWJpZ0ludGVnZXJUb1VJbnQzMihwdWJsaWNFeHBvbmVudCwgZSkpIHsKKyAgICAg
ICAgLy8gQWRkaW5nIHN1cHBvcnQgaXMgdHJhY2tlZCBhcyA8cmRhcjovL3Byb2JsZW0vMTU0NDQw
MzQ+LgorICAgICAgICBXVEZMb2dBbHdheXMoIlB1YmxpYyBleHBvbmVudCBpcyB0b28gYmlnLCBu
b3Qgc3VwcG9ydGVkIGJ5IENvbW1vbkNyeXB0byIpOworICAgICAgICBwcm9taXNlLT5yZWplY3Qo
bnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQcm9taXNlV3JhcHBlciog
bG9jYWxQcm9taXNlID0gcHJvbWlzZS5yZWxlYXNlKCk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQs
IDApLCBeeworICAgICAgICBDQ1JTQUNyeXB0b3JSZWYgY2NQdWJsaWNLZXk7CisgICAgICAgIEND
UlNBQ3J5cHRvclJlZiBjY1ByaXZhdGVLZXk7CisgICAgICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0
dXMgPSBDQ1JTQUNyeXB0b3JHZW5lcmF0ZVBhaXIobW9kdWx1c0xlbmd0aCwgZSwgJmNjUHVibGlj
S2V5LCAmY2NQcml2YXRlS2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgZ2VuZXJhdGUgYSBrZXkgcGFpciwgc3RhdHVzICVkIiwg
c3RhdHVzKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57CisgICAgICAgICAgICAgICAgbG9jYWxQcm9taXNlLT5yZWplY3QobnVsbHB0cik7
CisgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsUHJvbWlzZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZlB0cjxDcnlwdG9LZXlS
U0E+IHB1YmxpY0tleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgQ3J5cHRvS2V5
VHlwZTo6UHVibGljLCBjY1B1YmxpY0tleSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKKyAgICAgICAg
UmVmUHRyPENyeXB0b0tleVJTQT4gcHJpdmF0ZUtleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKGFs
Z29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6UHJpdmF0ZSwgY2NQcml2YXRlS2V5LCBleHRyYWN0YWJs
ZSwgdXNhZ2UpOworICAgICAgICBDcnlwdG9LZXlQYWlyKiByZXN1bHQgPSBDcnlwdG9LZXlQYWly
OjpjcmVhdGUocHVibGljS2V5LnJlbGVhc2UoKSwgcHJpdmF0ZUtleS5yZWxlYXNlKCkpLmxlYWtS
ZWYoKTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKKyAgICAgICAgICAgIGxvY2FsUHJvbWlzZS0+ZnVsZmlsbChhZG9wdFJlZihyZXN1bHQpKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBsb2NhbFByb21pc2U7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NS
WVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1h
Yy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDExICsxNzksMTAgQEAgdm9pZCBD
cnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbAogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4g
cHVibGljS2V5ID0gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBl
OjpQdWJsaWMsIGNjUHVibGljS2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpOwotICAgICAgICBSZWZQ
dHI8Q3J5cHRvS2V5UlNBPiBwcml2YXRlS2V5ID0gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3Jp
dGhtLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRlLCBjY1ByaXZhdGVLZXksIGV4dHJhY3RhYmxlLCB1
c2FnZSk7Ci0gICAgICAgIENyeXB0b0tleVBhaXIqIHJlc3VsdCA9IENyeXB0b0tleVBhaXI6OmNy
ZWF0ZShwdWJsaWNLZXkucmVsZWFzZSgpLCBwcml2YXRlS2V5LnJlbGVhc2UoKSkubGVha1JlZigp
OwogICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewot
ICAgICAgICAgICAgbG9jYWxQcm9taXNlLT5mdWxmaWxsKGFkb3B0UmVmKHJlc3VsdCkpOworICAg
ICAgICAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcHVibGljS2V5ID0gQ3J5cHRvS2V5UlNBOjpj
cmVhdGUoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBlOjpQdWJsaWMsIGNjUHVibGljS2V5LCBleHRy
YWN0YWJsZSwgdXNhZ2UpOworICAgICAgICAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcHJpdmF0
ZUtleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgQ3J5cHRvS2V5VHlwZTo6UHJp
dmF0ZSwgY2NQcml2YXRlS2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpOworICAgICAgICAgICAgbG9j
YWxQcm9taXNlLT5mdWxmaWxsKENyeXB0b0tleVBhaXI6OmNyZWF0ZShwdWJsaWNLZXkucmVsZWFz
ZSgpLCBwcml2YXRlS2V5LnJlbGVhc2UoKSkpOwogICAgICAgICAgICAgZGVsZXRlIGxvY2FsUHJv
bWlzZTsKICAgICAgICAgfSk7CiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBh
cmFtcy5oCShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5cHRvQWxnb3JpdGht
SG1hY0tleVBhcmFtcyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsK
IHB1YmxpYzoKKyAgICBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKCkKKyAgICAgICAgOiBo
YXNMZW5ndGgoZmFsc2UpCisgICAgeworICAgIH0KKwogICAgIC8vIFRoZSBpbm5lciBoYXNoIGZ1
bmN0aW9uIHRvIHVzZS4KICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2g7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtl
eUdlblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0
ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oCShyZXZpc2lvbiAxNTkxNjApCShm
cm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtl
eUdlblBhcmFtcy5oOjE1OTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBh
cmFtc19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtc19oCisKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NS
WVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9BbGdvcml0aG1Sc2FL
ZXlHZW5QYXJhbXMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7Citw
dWJsaWM6CisgICAgLy8gVGhlIGxlbmd0aCwgaW4gYml0cywgb2YgdGhlIFJTQSBtb2R1bHVzLgor
ICAgIHVuc2lnbmVkIG1vZHVsdXNMZW5ndGg7CisgICAgLy8gVGhlIFJTQSBwdWJsaWMgZXhwb25l
bnQsIGVuY29kZWQgYXMgQmlnSW50ZWdlci4KKyAgICBWZWN0b3I8Y2hhcj4gcHVibGljRXhwb25l
bnQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNlbmRpZiAv
LyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXNfaApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
UnNhU3NhS2V5UGFyYW1zLmgJKHJldmlzaW9uIDE1OTE2MCkJKGZyb20gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmg6MTU5MTYw
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNh
U3NhS2V5UGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zX2gKKyNkZWZpbmUgQ3J5
cHRvQWxnb3JpdGhtUnNhU3NhS2V5CisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5B
QkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBwYXJh
bWV0ZXJzIGNsYXNzIGlzIGN1cnJlbnRseSBub3Qgc3BlY2lmaWVkIGluIFdlYkNyeXB0by4KKy8v
IEl0IGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IGltcG9ydCBmcm9tIEpXSywgd2hpY2ggdHJlYXRz
IGhhc2ggZnVuY3Rpb24gYXMgcGFydCBvZiBhbGdvcml0aG0KKy8vIGlkZW50aWZpZXIsIHNvIHdl
IG5lZWQgdG8gcmVtZW1iZXIgaXQgdG8gY29tcGFyZSB3aXRoIG9uZSBwYXNzZWQgdG8gc2lnbiBv
ciB2ZXJpZnkgZnVuY3Rpb25zLgorY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1z
IEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgeworcHVibGljOgorICAg
IENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcygpCisgICAgICAgIDogaGFzSGFzaChmYWxz
ZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4KKyAg
ICBib29sIGhhc0hhc2g7CisgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoOworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhUGFyYW1zX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5o
CShyZXZpc2lvbiAxNTkxNjApCShmcm9tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oOjE1OTE2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0FsZ29y
aXRobVJzYVNzYVBhcmFtc19oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtc19o
CisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1z
IEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgeworcHVibGljOgorICAg
IC8vIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuCisgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBoYXNoOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisj
ZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zX2gKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1OTE3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIxIEBACisyMDEzLTExLTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCBrZXkgZ2VuZXJhdGlvbiBhbmQgSldLIGltcG9ydCBmb3Ig
UlNBU1NBLVBLQ1MxLXYxXzUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNDIzNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAg
ICAgICAgKiBjcnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanM6CisgICAgICAgIChoZXhU
b0FycmF5QnVmZmVyKTogRml4ZWQgYSB0eXBvCisgICAgICAgIChCYXNlNjRVUkwuc3RyaW5naWZ5
KToKKyAgICAgICAgKEJhc2U2NFVSTC5wYXJzZSk6CisgICAgICAgIEFkZGVkIGhlbHBlcnMgdG8g
ZGVhbCB3aXRoIEJhc2U2NFVSTCwgYXMgbmVlZGVkIGZvciBKV0suCisKKyAgICAgICAgKiBjcnlw
dG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJhdGUt
a2V5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYx
XzUtaW1wb3J0LWp3ay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9zdWJ0
bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5odG1sOiBBZGRlZC4KKwogMjAxMy0xMS0x
MiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxl
IFdlYkNyeXB0byBvbiBNb3VudGFpbiBMaW9uCkluZGV4OiBMYXlvdXRUZXN0cy9jcnlwdG8vc3Vi
dGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0
ZS1rZXktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTkxNjApCShmcm9tIExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4dDox
NTkxNjApCisrKyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdl
bmVyYXRlLWtleS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAor
VGVzdCBnZW5lcmF0aW5nIGFuIFJTQSBrZXkgcGFpciBmb3IgUlNBU1NBLVBLQ1MxLXYxXzUuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitHZW5lcmF0aW5nIGEga2V5IHBhaXIuLi4K
K1BBU1Mga2V5UGFpci50b1N0cmluZygpIGlzICdbb2JqZWN0IEtleVBhaXJdJworUEFTUyBrZXlQ
YWlyLnB1YmxpY0tleS50eXBlIGlzICdwdWJsaWMnCitQQVNTIGtleVBhaXIucHVibGljS2V5LmFs
Z29yaXRobS5uYW1lIGlzICdyc2Fzc2EtcGtjczEtdjFfNScKK1BBU1Mga2V5UGFpci5wdWJsaWNL
ZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggaXMgMjA0OAorUEFTUyBieXRlQXJyYXlUb0hleFN0
cmluZyhrZXlQYWlyLnB1YmxpY0tleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQpIGlzICdbMDEg
MDAgMDFdJworUEFTUyBrZXlQYWlyLnB1YmxpY0tleS5hbGdvcml0aG0uaGFzaCBpcyB1bmRlZmlu
ZWQuCitQQVNTIGtleVBhaXIucHJpdmF0ZUtleS50eXBlIGlzICdwcml2YXRlJworUEFTUyBrZXlQ
YWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLm5hbWUgaXMgJ3JzYXNzYS1wa2NzMS12MV81JworUEFT
UyBrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggaXMgMjA0OAorUEFT
UyBieXRlQXJyYXlUb0hleFN0cmluZyhrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLnB1Ymxp
Y0V4cG9uZW50KSBpcyAnWzAxIDAwIDAxXScKK1BBU1Mga2V5UGFpci5wcml2YXRlS2V5LmFsZ29y
aXRobS5oYXNoIGlzIHVuZGVmaW5lZC4KKworVGVzdGluZyB0aGF0IGN1c3RvbSBhdHRyaWJ1dGVz
IG9uIGtleXMgc3Vydml2ZSBnYXJiYWdlIGNvbGxlY3Rpb24uLi4KK1BBU1Mga2V5UGFpci5wdWJs
aWNLZXkuZm9vIGlzICdiYXInCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtj
czEtdjFfNS1nZW5lcmF0ZS1rZXkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS5odG1sCShyZXZpc2lvbiAx
NTkxNjApCShmcm9tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUt
Z2VuZXJhdGUta2V5Lmh0bWw6MTU5MTYwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9y
c2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCJUZXN0IGdlbmVyYXRpbmcgYW4gUlNBIGtleSBwYWlyIGZvciBSU0FTU0EtUEtD
UzEtdjFfNS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICghd2luZG93LnN1YnRs
ZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8ud2Via2l0U3VidGxl
OworCit2YXIgYWxnb3JpdGhtS2V5R2VuID0geworICAgIG5hbWU6ICJSU0FTU0EtUEtDUzEtdjFf
NSIsCisgICAgLy8gUnNhS2V5R2VuUGFyYW1zCisgICAgbW9kdWx1c0xlbmd0aDogMjA0OCwKKyAg
ICBwdWJsaWNFeHBvbmVudDogbmV3IFVpbnQ4QXJyYXkoWzB4MDEsIDB4MDAsIDB4MDFdKSwgIC8v
IEVxdWl2YWxlbnQgdG8gNjU1MzcKK307Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOworCitkZWJ1
ZygiR2VuZXJhdGluZyBhIGtleSBwYWlyLi4uIik7CitjcnlwdG8uc3VidGxlLmdlbmVyYXRlS2V5
KGFsZ29yaXRobUtleUdlbiwgZXh0cmFjdGFibGUsIFsic2lnbiIsICJ2ZXJpZnkiXSkudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXlQYWlyID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJr
ZXlQYWlyLnRvU3RyaW5nKCkiLCAiJ1tvYmplY3QgS2V5UGFpcl0nIik7CisgICAgc2hvdWxkQmUo
ImtleVBhaXIucHVibGljS2V5LnR5cGUiLCAiJ3B1YmxpYyciKTsKKyAgICBzaG91bGRCZSgia2V5
UGFpci5wdWJsaWNLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1wa2NzMS12MV81JyIpOwor
ICAgIHNob3VsZEJlKCJrZXlQYWlyLnB1YmxpY0tleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCIs
ICIyMDQ4Iik7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5nKGtleVBhaXIucHVi
bGljS2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkiLCAiJ1swMSAwMCAwMV0nIik7CisgICAg
c2hvdWxkQmVVbmRlZmluZWQoImtleVBhaXIucHVibGljS2V5LmFsZ29yaXRobS5oYXNoIik7Cisg
ICAgc2hvdWxkQmUoImtleVBhaXIucHJpdmF0ZUtleS50eXBlIiwgIidwcml2YXRlJyIpOworICAg
IHNob3VsZEJlKCJrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1w
a2NzMS12MV81JyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGht
Lm1vZHVsdXNMZW5ndGgiLCAiMjA0OCIpOworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0
cmluZyhrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSIsICInWzAx
IDAwIDAxXSciKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgia2V5UGFpci5wcml2YXRlS2V5LmFs
Z29yaXRobS5oYXNoIik7CisKKyAgICBkZWJ1ZygiXG5UZXN0aW5nIHRoYXQgY3VzdG9tIGF0dHJp
YnV0ZXMgb24ga2V5cyBzdXJ2aXZlIGdhcmJhZ2UgY29sbGVjdGlvbi4uLiIpOworICAgIGtleVBh
aXIucHVibGljS2V5LmZvbyA9ICJiYXIiOworICAgIGdjKCk7CisgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgZ2MoKTsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHNob3VsZEJlKCJrZXlQYWlyLnB1YmxpY0tleS5mb28iLCAiJ2JhciciKTsK
KyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9LCAwKTsKKyAgICB9LCAwKTsK
K30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1p
bXBvcnQtandrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU5MTYwKQkoZnJvbSBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWltcG9ydC1qd2stZXhwZWN0ZWQudHh0
OjE1OTE2MCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUt
aW1wb3J0LWp3ay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAor
VGVzdCBpbXBvcnRpbmcgYW4gUlNBIGtleSBmb3IgUlNBU1NBLVBLQ1MxLXYxXzUuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitJbXBvcnRpbmcgYSBwdWJsaWMga2V5Li4uCitQQVNT
IHB1YmxpY0tleS50b1N0cmluZygpIGlzICdbb2JqZWN0IEtleV0nCitQQVNTIHB1YmxpY0tleS50
eXBlIGlzICdwdWJsaWMnCitQQVNTIHB1YmxpY0tleS51c2FnZXMgaXMgWydzaWduJywndmVyaWZ5
J10KK1BBU1MgcHVibGljS2V5LmFsZ29yaXRobS5uYW1lIGlzICdyc2Fzc2EtcGtjczEtdjFfNScK
K1BBU1MgcHVibGljS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoIGlzIDIwNDgKK1BBU1MgYnl0
ZUFycmF5VG9IZXhTdHJpbmcocHVibGljS2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkgaXMg
J1swMSAwMCAwMV0nCitQQVNTIHB1YmxpY0tleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdzaGEt
MjU2JworCitJbXBvcnRpbmcgYSBwcml2YXRlIGtleS4uLgorUEFTUyBwcml2YXRlS2V5LnRvU3Ry
aW5nKCkgaXMgJ1tvYmplY3QgS2V5XScKK1BBU1MgcHJpdmF0ZUtleS50eXBlIGlzICdwcml2YXRl
JworUEFTUyBwcml2YXRlS2V5LnVzYWdlcyBpcyBbJ3NpZ24nLCd2ZXJpZnknXQorUEFTUyBwcml2
YXRlS2V5LmFsZ29yaXRobS5uYW1lIGlzICdyc2Fzc2EtcGtjczEtdjFfNScKK1BBU1MgcHJpdmF0
ZUtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCBpcyAyMDQ4CitQQVNTIGJ5dGVBcnJheVRvSGV4
U3RyaW5nKHByaXZhdGVLZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSBpcyAnWzAxIDAwIDAx
XScKK1BBU1MgcHJpdmF0ZUtleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdzaGEtMjU2JworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYx
XzUtaW1wb3J0LWp3ay5odG1sCShyZXZpc2lvbiAxNTkxNjApCShmcm9tIExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5odG1sOjE1OTE2MCkKKysr
IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgaW1wb3J0aW5nIGFuIFJT
QSBrZXkgZm9yIFJTQVNTQS1QS0NTMS12MV81LiIpOworCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
KworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRvdy5jcnlwdG8uc3VidGxlID0gd2luZG93
LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBleHRyYWN0YWJsZSA9IHRydWU7CisKK3ZhciBw
dWJsaWNLZXlKU09OID0geworICAgIGt0eTogIlJTQSIsCisgICAgYWxnOiAiUlMyNTYiLAorICAg
IG46ICJyY0NVQ3Y3T2MxSFZhbTFESWhDenFrblRoV2F3T3A4UUxrOFppeTJwMTBCeWpRRkNham9G
aXl1QVdsLVIxV1haYWY0eGl0TFJyYWNUOWFncHpJemMtTWJMU0hJR2dXUUdPMjFsR2lJbXk1ZnRa
LUQ4YkhBcVJ6MnkxNXB6RDRjNENFb3U3WFNTTERvUm5SMFFHNU1zRGhENnMyZ1Y5bXdIa3J0a0N4
dE1XZEJpLTc3YXM4d0dtbE5SbGRjT1NnWkRMSzhVbkNTZ0ExT2d1Wjk4OWJGeWM4dE9PRUliMHhV
U2ZQU3ozTFBTQ255WXo2OGFEam1LVmVOSC1pZzg1N09TY3lXYkd5RXkzQml3NjRxdW4zanVVbE5X
c0ozem5na09kdGVZV3l0eDVRcjRYS05zNlItTXl5cTcyS1VwMDJtSkRaaWl5aWdseE1MX2kzLV9D
ZWVjQ3ciLAorICAgIGU6ICJBUUFCIgorfTsKKwordmFyIHByaXZhdGVLZXlKU09OID0geworICAg
IGt0eTogIlJTQSIsCisgICAgYWxnOiAiUlMyNTYiLAorICAgIG46ICJyY0NVQ3Y3T2MxSFZhbTFE
SWhDenFrblRoV2F3T3A4UUxrOFppeTJwMTBCeWpRRkNham9GaXl1QVdsLVIxV1haYWY0eGl0TFJy
YWNUOWFncHpJemMtTWJMU0hJR2dXUUdPMjFsR2lJbXk1ZnRaLUQ4YkhBcVJ6MnkxNXB6RDRjNENF
b3U3WFNTTERvUm5SMFFHNU1zRGhENnMyZ1Y5bXdIa3J0a0N4dE1XZEJpLTc3YXM4d0dtbE5SbGRj
T1NnWkRMSzhVbkNTZ0ExT2d1Wjk4OWJGeWM4dE9PRUliMHhVU2ZQU3ozTFBTQ255WXo2OGFEam1L
VmVOSC1pZzg1N09TY3lXYkd5RXkzQml3NjRxdW4zanVVbE5Xc0ozem5na09kdGVZV3l0eDVRcjRY
S05zNlItTXl5cTcyS1VwMDJtSkRaaWl5aWdseE1MX2kzLV9DZWVjQ3ciLAorICAgIGU6ICJBUUFC
IiwKKyAgICBkOiAiZU5MUzM3YUN6N1JYU05QRF9EdExCSjZqNVQ4Y1N4ZHpSQkNqUGFJNldjR3FK
cDE2bHEzVVR3dW9ETEFxbEE5b0dZbTIzOGRzSVdwdXVjUF9sUXRiV2UtN1NweG9JNl92bVlHZjdZ
VlVIdjEtREY5cWlPbVNyTW1keE1uVk96WVhZOFJhVDZ0aFBqbl9KNWNmTFYyeElfTHdzck10bXBk
U3lObGdYMHpUVWh3dHVhaGdBS01FQ2hZakgyRW5qSGRIdzZzWTItd0FwZGNRSTdVTEUwb281Unpi
UVpwbXVoY045aGlCYzBMM2hoRjBxbzUwbWJsMDJfNjVfR1E3RHBWa1hCeE5nUkJMemxQYWJtenpH
Mm9BaGZlZkxnWW1TQzFvcGFDa1hFNnZSV1FOV05MNDVSWk5aRllNM3VvSmdoT01xR2VvY00wQnBq
ZENoSHJQT2xGdlNRIiwKKyAgICBwOiAiNG1pVHVBaktNZUg1dUo1S0IzOTdRVXdoYmtZRWdTYmNB
Mm1pZm1Ta3ZFMjAxOGdiNTVxa0JISzFlVnJ5ZjFfbTQzTE5sYzZPX2FrNmdmemRaSVp2UzVOQ0dq
UGwwcTA5cGxVcHU4cUZPU3NwQndBNjdxR0g3NmxGbFpMbl9kNHlnbFM3d2ZMcnU0XzVZczhxTExz
LURxVkx2aXdwb3NPbnl5V3F3TTVBWHAwIiwKKyAgICBxOiAieEhZcnpraXZ0bW56X3NHY2huV0dj
MHEtcERPa0tpY3B0UnB2MnBNRklJWHhuRlg1YU1lRVhJWmpWdWpYdHdVeTFVbEZJTjJHWkpTdnk1
S0o3OW11X1h5Tm5GSE16ZWRILUEzZWUzdThoMVVVclpGLXZVdTFfZTRVX3g2N05OMWRlZHpVU0t5
bk43cEZsM09rdVNoTUJXR1YtY3d6T1BkY1ZBZlZ1Wmx4VU1jIiwKKyAgICBkcDogImZCekR6WURV
Qm1CUUdvcDdIbjBkdmZfVDI3VjZScXBjdFdvMDc0Q1FaY0ZiUDJhdEZWdEtTajN2aVdUM3hpZDJW
SHpjZ2lESGRmcE0zbkVWbEVPMXd3SW9uR0NTdmRqR0VPWmlpRlZPanJaQU9WeEE4Z3VPanl5RnZx
YlhrZTA2VndQSUlWdmZLZVNVMnp1aGJQX18xdHQ2Rl9meG93NEtiMnhvbkdUMEdHayIsCisgICAg
ZHE6ICJqbUUyRGlJUGRod0RnTFhBUXBJYUJxUTgxYk8zWGZWVF9MUlVMQXd3d3dsUHVRVjE0OEgw
NHpsaDlUSjZZMkdaSFlva1YxVTBlT0JwSnhma2I3ZExZdHBKcHVpQmpSZjR5SVVFb0dsa2tJX1Fs
Sm5GU0ZyLVlqR1JkZk5IcVdCa3hsU01aTDc3MFI5bUlBVG5kR2tIN3o1eC1yOUt3QlpGQzRGQ0cy
aGdfekUiLAorICAgIHFpOiAiWUNYX3BMd2JNQkExVGhWSDBXY3dtbnl0cU5jck1DRXdUbTdCeUEy
ZVU2bldiUXJVTHZmN205X2t6ZkxVY2pzbnBBVmxCUUc1Sk1YTXkwU3E0cHR3Ynl3c2E1LUc4S0FP
T09SMkwzdjRoQy1FeXM5ZnRnRk1fM2kwbzQwZWVRSDRiM2hhUGJudHJJZU1nOEl6bE91VllLZjkt
MlF1S0RvV2VSZGQ3TnNkeFRrIgorfTsKKworZGVidWcoIkltcG9ydGluZyBhIHB1YmxpYyBrZXku
Li4iKTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLCBhc2NpaVRvQXJyYXlCdWZmZXIo
SlNPTi5zdHJpbmdpZnkocHVibGljS2V5SlNPTikpLCBudWxsLCBleHRyYWN0YWJsZSwgWyJzaWdu
IiwgInZlcmlmeSJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIHB1YmxpY0tleSA9IHJl
c3VsdDsKKyAgICBzaG91bGRCZSgicHVibGljS2V5LnRvU3RyaW5nKCkiLCAiJ1tvYmplY3QgS2V5
XSciKTsKKyAgICBzaG91bGRCZSgicHVibGljS2V5LnR5cGUiLCAiJ3B1YmxpYyciKTsKKyAgICBz
aG91bGRCZSgicHVibGljS2V5LnVzYWdlcyIsICJbJ3NpZ24nLCd2ZXJpZnknXSIpOworICAgIHNo
b3VsZEJlKCJwdWJsaWNLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1wa2NzMS12MV81JyIp
OworICAgIHNob3VsZEJlKCJwdWJsaWNLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgiLCAiMjA0
OCIpOworICAgIHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhwdWJsaWNLZXkuYWxnb3Jp
dGhtLnB1YmxpY0V4cG9uZW50KSIsICInWzAxIDAwIDAxXSciKTsKKyAgICBzaG91bGRCZSgicHVi
bGljS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUiLCAiJ3NoYS0yNTYnIik7CisgICAgZGVidWcoIlxu
SW1wb3J0aW5nIGEgcHJpdmF0ZSBrZXkuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5p
bXBvcnRLZXkoImp3ayIsIGFzY2lpVG9BcnJheUJ1ZmZlcihKU09OLnN0cmluZ2lmeShwcml2YXRl
S2V5SlNPTikpLCBudWxsLCBleHRyYWN0YWJsZSwgWyJzaWduIiwgInZlcmlmeSJdKTsKK30pLnRo
ZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgcHJpdmF0ZUtleSA9IHJlc3VsdDsKKyAgICBzaG91
bGRCZSgicHJpdmF0ZUtleS50b1N0cmluZygpIiwgIidbb2JqZWN0IEtleV0nIik7CisgICAgc2hv
dWxkQmUoInByaXZhdGVLZXkudHlwZSIsICIncHJpdmF0ZSciKTsKKyAgICBzaG91bGRCZSgicHJp
dmF0ZUtleS51c2FnZXMiLCAiWydzaWduJywndmVyaWZ5J10iKTsKKyAgICBzaG91bGRCZSgicHJp
dmF0ZUtleS5hbGdvcml0aG0ubmFtZSIsICIncnNhc3NhLXBrY3MxLXYxXzUnIik7CisgICAgc2hv
dWxkQmUoInByaXZhdGVLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgiLCAiMjA0OCIpOworICAg
IHNob3VsZEJlKCJieXRlQXJyYXlUb0hleFN0cmluZyhwcml2YXRlS2V5LmFsZ29yaXRobS5wdWJs
aWNFeHBvbmVudCkiLCAiJ1swMSAwMCAwMV0nIik7CisgICAgc2hvdWxkQmUoInByaXZhdGVLZXku
YWxnb3JpdGhtLmhhc2gubmFtZSIsICInc2hhLTI1NiciKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Ny
eXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL3Jlc291cmNlcy9jb21tb24uanMJKHJldmlzaW9uIDE1OTE3OSkKKysr
IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDgsMTMgKzQ4LDI0IEBAIGZ1bmN0aW9uIGFzY2lpVG9BcnJheUJ1ZmZlcihzdHIp
CiBmdW5jdGlvbiBoZXhUb0FycmF5QnVmZmVyKHN0cikKIHsKICAgICBpZiAoc3RyLmxlbmd0aCAl
IDIpCi0gICAgICAgIHRocm93ICJIZXggc3RyaW5nIGxlbmdodCBtdXN0IGJlIGV2ZW4iOworICAg
ICAgICB0aHJvdyAiSGV4IHN0cmluZyBsZW5ndGggbXVzdCBiZSBldmVuIjsKICAgICB2YXIgY2hh
cnMgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMikKICAg
ICAgICAgY2hhcnMucHVzaChwYXJzZUludChzdHIuc3Vic3RyKGksIDIpLCAxNikpOwogICAgIHJl
dHVybiBuZXcgVWludDhBcnJheShjaGFycyk7CiB9CiAKK3ZhciBCYXNlNjRVUkwgPSB7CisgICAg
c3RyaW5naWZ5OiBmdW5jdGlvbiAoYSkgeworICAgICAgICB2YXIgYmFzZTY0c3RyaW5nID0gYnRv
YShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KDAsIGEpKTsKKyAgICAgICAgcmV0dXJuIGJhc2U2
NHN0cmluZy5yZXBsYWNlKC89L2csICIiKS5yZXBsYWNlKC9cKy9nLCAiLSIpLnJlcGxhY2UoL1wv
L2csICJfIik7CisgICAgfSwKKyAgICBwYXJzZTogZnVuY3Rpb24gKHMpIHsKKyAgICAgICAgcyA9
IHMucmVwbGFjZSgvLS9nLCAiKyIpLnJlcGxhY2UoL18vZywgIi8iKS5yZXBsYWNlKC9ccy9nLCAn
Jyk7CisgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShBcnJheS5wcm90b3R5cGUubWFwLmNh
bGwoYXRvYihzKSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSB9KSk7Cisg
ICAgfQorfTsKKwogZnVuY3Rpb24gcHJpbnRSZWplY3RlZFJlc3VsdCh2YWx1ZSkKIHsKICAgICBk
ZWJ1ZygiICAgIHJlamVjdGVkIHdpdGggdmFsdWUgb2YgIiArIHZhbHVlKTsK
</data>
<flag name="commit-queue"
          id="239815"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216780</attachid>
            <date>2013-11-13 00:59:21 -0800</date>
            <delta_ts>2013-11-13 01:29:42 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>RsaSsa.txt</filename>
            <type>text/plain</type>
            <size>111212</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMy0xMS0xMiAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQga2V5IGdl
bmVyYXRpb24gYW5kIEpXSyBpbXBvcnQgZm9yIFJTQVNTQS1QS0NTMS12MV81CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQyMzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFRlc3RzOiBjcnlwdG8vc3VidGxlL3Jz
YXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS5odG1sCisgICAgICAgICAgICAgICBjcnlwdG8v
c3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWltcG9ydC1qd2suaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyOjphZGQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oOgorICAgICAgICAqIGNyeXB0by9Dcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXIuaDoKKyAgICAgICAgQWRkZWQgYSB3YXkgdG8g
YWRkIGFuIFVpbnQ4QXJyYXksIGFzIG5lZWRlZCBmb3IgUlNBIGtleS5hbGdvcml0aG0ucHVibGlj
RXhwb25lbnQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKTogUmVtb3Zl
ZCB1bm5lZWRlZCBKU0MgcHJlZml4ZXMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBZXNLZXlH
ZW5QYXJhbXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNQYXJhbXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNLZXlQYXJhbXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJzYUtleUdlblBhcmFtcyk6IEFkZGVkLiAKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJzYVNzYUtleVBhcmFtcyk6IEFkZGVkLiBXZWJDcnlwdG8gY3VycmVu
dGx5IGRvZXNuJ3Qgc3BlY2lmeSBhbnkKKyAgICAgICAgcGFyYW1ldGVycyBmb3IgaW1wb3J0S2V5
LCBzbyB0aGUgc3RydWN0dXJlIHJlbWFpbnMgYmxhbmsgKHVubGlrZSB3aXRoIEpXSykuCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVSc2FTc2FQYXJhbXMpOiBBZGRlZCAoY3VycmVudGx5IHVudXNl
ZCwgd2lsbCBiZSBzdWVkIGZvciBzaWduL3ZlcmlmeSBzb29uKS4KKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQp
OiBSZW1vdmVkIHVubmVlZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvclNpZ24pOiBBZGRlZCBzdXBwb3J0IGZvciBSU0FFU19QS0NTMV92MV81Lgor
ICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yVmVyaWZ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QpOiBSZW1vdmVkIHVubmVl
ZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JEZXJpdmVLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlcml2ZUJpdHMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckltcG9ydEtleSk6IEFkZGVkIHN1cHBvcnQgZm9yIFJTQUVTX1BLQ1MxX3YxXzUuCisgICAg
ICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRl
cnNGb3JFeHBvcnRLZXkpOiBSZW1vdmVkIHVubmVlZGVkIEpTQyBwcmVmaXhlcy4KKyAgICAgICAg
KFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
cldyYXBLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclVud3JhcEtleSk6IERpdHRvLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEpTQXJyYXlGcm9tSlNPTik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0
QmlnSW50ZWdlclZlY3RvckZyb21KU09OKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVSU0FTU0FLZXlQYXJhbWV0ZXJzKTogQ3JlYXRlIHBhcmFtZXRlcnMgZm9yIGtleSBpbXBvcnQu
IFRoZSBrZXkKKyAgICAgICAgd2lsbCByZW1lbWJlciB3aGljaCBhbGdvcml0aG0gaXQncyBhbGxv
d2VkIHRvIGJlIHVzZWQgd2l0aC4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSzo6cmVjb25jaWxlQWxnb3JpdGhtKTogQWRkZWQgc3VwcG9ydCBmb3IKKyAgICAg
ICAgUlMyNTYuLi5SUzUxMiAodGhhIGlzLCBSU0FFU19QS0NTMV92MV81IHdpdGggU0hBLTI1Ni4u
LlNIQS01MTIpLgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjprZXlEYXRhT2N0ZXRTZXF1ZW5jZSk6IFNwbGl0IG91dCBvZiBrZXlEYXRhKCkuCisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGFSU0FDb21wb25l
bnRzKTogQWRkZWQgY29kZSB0byByZWFkCisgICAgICAgIFJTQSBrZXkgY29tcG9uZW50cyBmcm9t
IEpXSy4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5
RGF0YSk6IENhbGwgb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBjcnlw
dG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojp2ZXJpZnkp
OgorICAgICAgICBQbGFjZWhvbGRlcnMuCisKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6
IChXZWJDb3JlOjpDcnlwdG9LZXlDbGFzcyk6IEFkZGVkIFJTQSBrZXkgY2xhc3MgZm9yIHBvb3Ig
bWFuJ3MgUlRUSS4KKworICAgICAgICAqIGNyeXB0by9DcnlwdG9LZXlEYXRhLmg6IChXZWJDb3Jl
OjpDcnlwdG9LZXlEYXRhOjpGb3JtYXRSU0FDb21wb25lbnRzKTogQWRkZWQgUlNBQ29tcG9uZW50
cworICAgICAgICBmb3IgcG9vciBtYW4ncyBSVFRJLgorCisgICAgICAgICogY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHA6IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjppbXBvcnRLZXkpOiAKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1ITUFDLmNwcDogKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9y
dEtleSk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmg6CisgICAgICAgIChX
ZWJDb3JlOjppc0NyeXB0b0tleUFFUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleUFF
Uyk6CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UpOgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ3J5
cHRvS2V5SE1BQyk6CisgICAgICAgIChXZWJDb3JlOjp0b0NyeXB0b0tleUhNQUMpOgorICAgICAg
ICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1ITUFDOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhN
QUM6OnZlcmlmeSk6CisgICAgICAgIFN3aXRjaGVkIGZyb20gImFzIiBmdW5jdGlvbnMgdG8gImlz
IiBhbmQgInRvIiBvbmVzLCBhcyB0aGF0J3MgbW9yZSBpZGlvbWF0aWMuCisKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81Lmg6IEFkZGVkLgorICAgICAgICBHbHVlIGNvZGUgZm9yIGltcG9ydEtleS9nZW5l
cmF0ZUtleSBmb3Igbm93LgorCisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJT
QUNvbXBvbmVudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6fkNyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzKToKKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMp
OgorICAgICAgICBBZGRlZCBhIHN0cnVjdHVyZSB0byBob2xkIFJTQSBrZXkgY29tcG9uZW50cywg
ZXh0cmFjdGVkIGZyb20gSldLIG9yIGFub3RoZXIgZm9ybWF0LgorCisgICAgICAgICogY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UlNBLmg6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcDogQWRkZWQuCisKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpwbGF0Zm9ybVJlZ2lzdGVyQWxnb3JpdGhtcyk6CisgICAgICAgIFJlZ2lzdGVyIFJT
QVNTQV9QS0NTMV92MV81LgorCisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtSG1hY0tleVBhcmFtcy5oOiBBZGRlZCBhIGNvbnN0cnVjdG9yIHRvIG1ha2UKKyAgICAg
ICAgc3VyZSB0aGF0IGhhc0xlbmd0aCBpcyBuZXZlciBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGV2ZW4g
d2hlbiByZWFkaW5nIGZvcm1hdHMgdGhhdAorICAgICAgICBkb24ndCBjb250YWluIGEgbGVuZ3Ro
LgorCisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2Vu
UGFyYW1zLmg6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29y
aXRobVJzYVNzYUtleVBhcmFtcy5oOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaDogQWRkZWQuCisgICAgICAgIEFkZGVkIHBh
cmFtZXRlciBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgUlNBU1NBX1BLQ1MxX3YxXzUu
CisKIDIwMTMtMTEtMTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgRGlzYWJsZSBXZWJDcnlwdG8gb24gTW91bnRhaW4gTGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NTk1LDYgKzU1OTUsOCBAQAogCQlFMTU3QThGMTE4MTg1
NDI1MDA5RjgyMUQgLyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU3QThFRjE4MTg1NDI1MDA5RjgyMUQg
LyogSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmggKi87IH07CiAJCUUxNUEzNkQ3MTEwNDU3MjAw
MEI3QjYzOSAvKiBYTUxOU05hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTVBMzZENjExMDQ1NzIwMDBCN0I2MzkgLyogWE1MTlNOYW1lcy5oICov
OyB9OwogCQlFMTVBMzZEOTExMDQ1NzI3MDBCN0I2MzkgLyogWE1MTlNOYW1lcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTVBMzZEODExMDQ1NzI3
MDBCN0I2MzkgLyogWE1MTlNOYW1lcy5jcHAgKi87IH07CisJCUUxNjRGQUEzMTgzMTVCRjQwMERC
NEU2MSAvKiBDcnlwdG9LZXlSU0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0EuaCAq
LzsgfTsKKwkJRTE2NEZBQTUxODMxNUUxQTAwREI0RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY0RkFBNDE4
MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAqLzsgfTsKIAkJRTE2OTgwM0Qx
MTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUgLyogQ1J1
bnRpbWVPYmplY3QuaCAqLzsgfTsKIAkJRTE2OTgwNDkxMTMzNjQ0NzAwODk0MTE1IC8qIENSdW50
aW1lT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGltZU9iamVjdC5jcHAgKi87IH07
CiAJCUUxNjk4MjU1MTEzNDYyOUQwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2OTgyNTQxMTM0NjI5
RDAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0LmggKi87IH07CkBAIC01NjY5LDggKzU2NzEs
MTYgQEAKIAkJRTFCQTY3MTgxNzQyQkVFNjAwQzIwMjUxIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMyODY5NDAy
ODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKIAkJRTFCQTY3MUExNzQy
QkVGNDAwQzIwMjUxIC8qIFdlYkNvcmVUZXN0U2hpbUxpYnJhcnkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQTY3MTkxNzQyQkVGNDAwQzIwMjUx
IC8qIFdlYkNvcmVUZXN0U2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlFMUJCODRBRDE4MjJDQTc0
MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCQjg0QUMxODIyQ0E3NDAwNTI1MDQz
IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcCAqLzsgfTsKKwkJRTFCRDMzMTkxODJE
OERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkQzMzE3MTgyRDhE
REQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAgKi87IH07
CisJCUUxQkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFCRDMzMTgxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmggKi87IH07CisJCUUxQkQzMzFDMTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0
aG1Sc2FTc2FQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQkQzMzFCMTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQ
YXJhbXMuaCAqLzsgfTsKKwkJRTFCRDMzMUUxODJEOEY0MjAwQzA1RDlGIC8qIENyeXB0b0FsZ29y
aXRobVJzYUtleUdlblBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFCRDMzMUQxODJEOEY0MjAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJz
YUtleUdlblBhcmFtcy5oICovOyB9OwogCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQkU1MTJCMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICov
OyB9OwogCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQzBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi87IH07CisJCUUxQzI2NkQ4MTgzMTdB
QjQwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMyNjZENjE4MzE3
QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwICov
OyB9OworCQlFMUMyNjZEQjE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3Nh
S2V5UGFyYW1zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUMyNjZEQTE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFy
YW1zLmggKi87IH07CisJCUUxQzI2NkRFMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUMyNjZEQzE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwICovOyB9OworCQlFMUMyNjZERjE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5
RGF0YVJTQUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQzI2NkREMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cy5oICovOyB9OwogCQlFMUMyRjI0QTE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMy
RjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi87IH07CiAJCUUxQzM2MkVG
MEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyog
SlNXb3JrZXJMb2NhdGlvbi5oICovOyB9OwogCQlFMUMzNjJGMDBFQUYyQUE5MDA3NDEwQkMgLyog
SlNXb3JrZXJMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUMzNjJFRTBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5j
cHAgKi87IH07CkBAIC0xMjY3Nyw2ICsxMjY4Nyw4IEBACiAJCUUxNTdBOEVGMTgxODU0MjUwMDlG
ODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDcnlwdG9BbGdvcml0aG1CdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxNUEzNkQ2MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTE5TTmFtZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDgxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MTlNOYW1lcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAv
KiBDcnlwdG9LZXlSU0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRv
S2V5UlNBLmg7IHBhdGggPSBrZXlzL0NyeXB0b0tleVJTQS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMTY0RkFBNDE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0tleVJTQU1hYy5j
cHA7IHBhdGggPSBtYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTE2OTgwM0MxMTMzNTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENSdW50aW1lT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MDQ4MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGlt
ZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDUnVudGlt
ZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MjU0MTEzNDYy
OUQwMDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPYmpDUnVudGltZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI3NjAsOCArMTI3NzIsMTYgQEAKIAkJRTFCQTY3MTYxNzQyQkRFMDAwQzIwMjUxIC8q
IGxpYldlYkNvcmVUZXN0U2hpbS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJRTFCQTY3MTkxNzQyQkVGNDAwQzIwMjUxIC8qIFdlYkNvcmVU
ZXN0U2hpbUxpYnJhcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVRlc3RTaGltTGlicmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxQkI4NEFDMTgyMkNBNzQwMDUyNTA0MyAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeU1hYy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUJEMzMxNzE4MkQ4REREMDBDMDVEOUYg
LyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUJEMzMxODE4MkQ4REREMDBDMDVEOUYg
LyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFCRDMzMUIxODJEOEVFOTAwQzA1RDlGIC8qIENyeXB0
b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaDsgcGF0aCA9IHBhcmFtZXRlcnMvQ3J5cHRv
QWxnb3JpdGhtUnNhU3NhUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
QkQzMzFEMTgyRDhGNDIwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNhS2V5
R2VuUGFyYW1zLmg7IHBhdGggPSBwYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUtleUdlblBh
cmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQjBDRjZDNTEyMDAy
RUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFhTTFRVbmljb2RlU29ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkQ2MTgzMTdBQjQwMDNGOEIzMyAvKiBDcnlwdG9BbGdv
cml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkRBMTgzMTk5MzUwMDNGOEIzMyAvKiBDcnlw
dG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmg7IHBhdGggPSBwYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFMUMyNjZEQzE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvS2V5
RGF0YVJTQUNvbXBvbmVudHMuY3BwOyBwYXRoID0ga2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzI2NkREMTgzMTlGMzEw
MDNGOEIzMyAvKiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oOyBwYXRoID0ga2V5
cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUMyRjI0ODE1MzNBMjEyMDA4M0Y5NzQgLyogU2V0dGluZ3NNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc01hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2Vy
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXb3JrZXJMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMzNjJFRTBFQUYyQUE5MDA3
NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dvcmtlckxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwMzI4LDExICsyMDM0OCwxMyBAQAogCQkJCUUxMjVGODM3MTgyMkYxRUIwMEQ4NENE
OSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLywKIAkJCQlFMUJCODRBQzE4MjJDQTc0
MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwICovLAogCQkJCUUxMjVG
ODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExTWFjLmNwcCAqLywKKwkJ
CQlFMUMyNjZENjE4MzE3QUI0MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzVNYWMuY3BwICovLAogCQkJCUUxOUFDM0RFMTgyNERDNjkwMDM0OTQyNiAvKiBDcnlwdG9B
bGdvcml0aG1TSEEyMjRNYWMuY3BwICovLAogCQkJCUUxOUFDM0RGMTgyNERDNjkwMDM0OTQyNiAv
KiBDcnlwdG9BbGdvcml0aG1TSEEyNTZNYWMuY3BwICovLAogCQkJCUUxOUFDM0UwMTgyNERDNjkw
MDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEzODRNYWMuY3BwICovLAogCQkJCUUxOUFDM0Ux
MTgyNERDNjkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEE1MTJNYWMuY3BwICovLAogCQkJ
CUUxOUFDM0Y4MTgyNTY2RjcwMDM0OTQyNiAvKiBDcnlwdG9LZXlNYWMuY3BwICovLAorCQkJCUUx
NjRGQUE0MTgzMTVFMUEwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwICovLAogCQkJKTsK
IAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjAzNDQsNiAr
MjAzNjYsOCBAQAogCQkJCUUxMjVGODQwMTgyNDI1M0EwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmggKi8sCiAJCQkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0Fs
Z29yaXRobUhNQUMuY3BwICovLAogCQkJCUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlw
dG9BbGdvcml0aG1ITUFDLmggKi8sCisJCQkJRTFCRDMzMTcxODJEOERERDAwQzA1RDlGIC8qIENy
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcCAqLywKKwkJCQlFMUJEMzMxODE4MkQ4
REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaCAqLywKIAkJ
CQlFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgKi8s
CiAJCQkJRTEyNUY4MkExODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCAq
LywKIAkJCQlFMTlBQzNFNjE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjI0
LmNwcCAqLywKQEAgLTIwMzY1LDggKzIwMzg5LDExIEBACiAJCQkJRTEyNUY4NEMxODI0Mjg5RDAw
RDg0Q0Q5IC8qIENyeXB0b0tleUFFUy5oICovLAogCQkJCUUxMjVGODYxMTgyQzMwM0EwMEQ4NENE
OSAvKiBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5jcHAgKi8sCiAJCQkJRTEyNUY4NjIxODJD
MzAzQTAwRDg0Q0Q5IC8qIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmggKi8sCisJCQkJRTFD
MjY2REMxODMxOUYzMTAwM0Y4QjMzIC8qIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmNwcCAq
LywKKwkJCQlFMUMyNjZERDE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHMuaCAqLywKIAkJCQlFMTI1RjgzMzE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1B
Qy5jcHAgKi8sCiAJCQkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMu
aCAqLywKKwkJCQlFMTY0RkFBMjE4MzE1QkY0MDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggKi8s
CiAJCQkJRTEyNUY4NTcxODJDMUFBNjAwRDg0Q0Q5IC8qIENyeXB0b0tleVNlcmlhbGl6YXRpb25S
YXcuY3BwICovLAogCQkJCUUxMjVGODU4MTgyQzFBQTYwMEQ4NENEOSAvKiBDcnlwdG9LZXlTZXJp
YWxpemF0aW9uUmF3LmggKi8sCiAJCQkpOwpAQCAtMjAzODAsNiArMjA0MDcsOSBAQAogCQkJCUUx
OUFDM0Y2MTgyNEU1RDEwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMu
aCAqLywKIAkJCQlFMTlEQTI5QjE4MTg5QUREMDAwODhCQzggLyogQ3J5cHRvQWxnb3JpdGhtSG1h
Y0tleVBhcmFtcy5oICovLAogCQkJCUUxQzY1NzFFMTgxNkU1MDMwMDI1NkNERCAvKiBDcnlwdG9B
bGdvcml0aG1IbWFjUGFyYW1zLmggKi8sCisJCQkJRTFCRDMzMUQxODJEOEY0MjAwQzA1RDlGIC8q
IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oICovLAorCQkJCUUxQzI2NkRBMTgzMTk5
MzUwMDNGOEIzMyAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMuaCAqLywKKwkJCQlF
MUJEMzMxQjE4MkQ4RUU5MDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zLmgg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IHBhcmFtZXRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMjIxMTAsNiArMjIxNDAsNyBAQAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1
OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5
OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdC
OEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9L
ZXlSU0EuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBD
aGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5
IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5MjU0MzBGN0VG
NUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MjMxMSw2ICsyMjM0Miw3IEBACiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAv
KiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNTg1MDMxN0ZBMTBEMDAw
NUYyQkNCIC8qIEpTQWxsVmlkZW9DYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
QkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjgxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVU
aW1lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCQTEyNTFGMTJEMDAzRUYy
NjkgLyogRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDVGRUE1
RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMjI4NzAs
NiArMjI5MDIsNyBAQAogCQkJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCUQ3MkY2RDdBMTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93
VGhyZWFkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFCRDMzMUUxODJEOEY0MjAw
QzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDIzNTE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNF
dmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzQ0NSw2ICsyMzQ3OCw3IEBACiAJCQkJQTgwRTdC
MEMwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTFRpdGxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNzU2RDQxNDIzOUE0RjAwNDE0MTYxIC8qIEpTSFRNTFRyYWNrRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4NUIyMTEwQTFCMjU4NzAwRDhDODdDIC8qIEpTSFRNTFVMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMjY2REYxODMxOUYzMTAwM0Y4QjMzIC8q
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTRBQkNE
NTEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3OEUwOTI3MTdEMTREMUMwMDQyMEFBMSAvKiBSVENTZXNzaW9uRGVzY3JpcHRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjE0MTcwQ0Q2ODI2OTAwRkFEQTc1IC8q
IEpTSFRNTFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzY3Myw2ICsyMzcwNyw3
IEBACiAJCQkJQjJGQTNEREQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ01vdmV0b0Fi
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEREYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
UGF0aFNlZ01vdmV0b1JlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNTg1MjExN0ZEQzE0MDAw
NUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMy
NjZEQjE4MzE5OTM1MDAzRjhCMzMgLyogQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0NjE4MERGRjRFMDA4QjhFNjUgLyogVmlkZW9UcmFj
a01lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RFMTBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdQYXR0ZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0MkE3OTUw
QUU1Qzk0MTAwREY1OERGIC8qIEpTU1ZHUG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5ODUs
NiArMjQwMjAsNyBAQAogCQkJCTA3OEUwOTFCMTdEMTREMUMwMDQyMEFBMSAvKiBOYXZpZ2F0b3JV
c2VyTWVkaWFFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REQwRTgxQjhERDAwQjI1
OTY1IC8qIE91dGxpbmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRDU3MzcwQTVDNzdG
RTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQkQzMzFD
MTgyRDhFRTkwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTM3NzRBQkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVl
c3RDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QTIxNDY4MDk3QTMyOTEwMEI5MDUwQSAv
KiBQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjUwQjFERTE3Q0Q0QzBGMDA4N0Y2M0MgLyog
Rm9ybU5hbWVkSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTc1NCw2ICsyNTc5MCw3IEBACiAJ
CQkJNTBENDA2MTExNDdENDlERTAwRDMwQkI1IC8qIEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MDk4N0MyNjE1N0Q2NzZEMDBCREE4MzUgLyogQ3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEQ0MDVGOTE0
N0QzMUYzMDBEMzBCQjUgLyogQ3VzdG9tRmlsdGVyTWVzaC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFMUMyNjZERTE4MzE5RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0UxMkU5MTAxNUZBNUQzQTAwNUU0MTI2IC8qIEN1c3Rv
bUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBDQzBBMzkxNEM2
RjVCMTAwMTdBQjUxIC8qIEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MDkzMzM0RjE2M0IwRTQzMDAwOTlBNjAgLyogQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzU1LDYgKzI2MzkyLDcgQEAKIAkJCQlFMTI1Rjgz
ODE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0NENzRFNTBBNEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzg3OTEyMjg4M0U5MDBCODFGRjggLyog
SFRNTFZpZXdTb3VyY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDMjY2RDgxODMx
N0FCNDAwM0Y4QjMzIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81TWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBCOEM1NkQ0MEYyODYyN0YwMDA1MDJFMSAvKiBIVFRQSGVhZGVy
TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjcyMENFOTIzQTEwMDdFRjNDRCAvKiBI
VFRQUGFyc2Vycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdC
OEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NzY5LDYgKzI2ODA3
LDcgQEAKIAkJCQlDNkY0MjBBMjE2QjcxNjRFMDA1MkE5RjIgLyogSlNNdXRhdGlvbkNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUZCMDlEMUNDNjAwMDBCRTMyNSAvKiBKU011
dGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDkwMkMxNDMyN0Q0RjAwNjg1
ODQ5IC8qIEpTTXV0YXRpb25PYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTY0RkFB
NTE4MzE1RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUM2RjA5MTdGMTQzQTJCQjkwMDY4NTg0OSAvKiBKU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZGMDhGQzkxNDMxMDAwRDAwNjg1ODQ5IC8qIEpTTXV0
YXRpb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4RTA5MDExN0QxNENFRTAwNDIw
QUExIC8qIE1lZGlhU3RyZWFtUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzA1OSw2
ICsyNzA5OCw3IEBACiAJCQkJOTNGMUQ1QzAxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3Nl
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNXZWJHTFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTFCRDMzMTkxODJEOERERDAwQzA1RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVFRDE0RjEw
NTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xTaGFkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1OTE3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgPHJ1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02NCw2ICs2NiwxNCBA
QCB2b2lkIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlcjo6YWRkKGNvbnN0CiAgICAgbV9kaWN0aW9u
YXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIGpzU3RyaW5nKG1fZXhlYywgdmFsdWUpKTsK
IH0KIAordm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXks
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQoreworICAgIFZNJiB2bSA9IG1fZXhlYy0+
dm0oKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJnZtLCBrZXkpOworICAgIFJlZlB0cjxV
aW50OEFycmF5PiBhcnJheVZpZXcgPSBVaW50OEFycmF5OjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSk7CisgICAgbV9kaWN0aW9uYXJ5LT5wdXREaXJlY3Qodm0sIGlkZW50aWZp
ZXIsIGFycmF5Vmlldy0+d3JhcChtX2V4ZWMsIHZtLmR5bmFtaWNHbG9iYWxPYmplY3QpKTsKK30K
Kwogdm9pZCBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXI6OmFkZChjb25zdCBjaGFyKiBrZXksIGNv
bnN0IENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgbmVzdGVkQnVpbGRlcikKIHsK
ICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaAkocmV2aXNpb24gMTU5
MTc5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1CdWls
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlciYpIE9WRVJSSURFOwogCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYUtleUdl
blBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5oIgor
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0NyeXB0b09wZXJhdGlvbkRhdGEuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKQEAgLTExNiw3ICsxMTksNyBAQCBzdGF0aWMgYm9vbCBnZXRIYXNo
QWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgcmV0dXJuIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihleGVjLCBoYXNoLCByZXN1bHQpOwogfQogCi1z
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFl
c0NiY1BhcmFtcyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXND
YmNQYXJhbXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE0NSw3
ICsxNDgsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAg
cmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0tleUdlblBhcmFtcyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKQEAgLTE2Myw3ICsxNjYsNyBAQCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAgcmV0dXJuIHN0ZDo6bW92ZShy
ZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+IGNyZWF0ZUhtYWNQYXJhbXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gY3JlYXRlSG1hY1BhcmFtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMp
OwpAQCAtMTgxLDcgKzE4NCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGEKICAgICByZXR1cm4gc3RkOjptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY0tleVBhcmFtcyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjS2V5UGFyYW1zKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CkBAIC0yMDMsNyArMjA2LDYzIEBA
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGEKICAgICByZXR1cm4gc3Rk
Ojptb3ZlKHJlc3VsdCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JF
bmNyeXB0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFs
Z29yaXRobSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVJz
YUtleUdlblBhcmFtcz4oKTsKKworICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0
UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJtb2R1bHVzTGVuZ3RoIik7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93d3cudzMu
b3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzc3OT4uCisgICAgcmVzdWx0LT5tb2R1
bHVzTGVuZ3RoID0gdG9VSW50MzIoZXhlYywgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHko
ZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8
VWludDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJheShwdWJsaWNFeHBv
bmVudFZhbHVlKTsKKyAgICBpZiAoIXB1YmxpY0V4cG9uZW50QXJyYXkpIHsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGEgVWludDhBcnJheSBpbiBwdWJsaWNFeHBvbmVu
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmVzdWx0LT5wdWJsaWNF
eHBvbmVudC5hcHBlbmQocHVibGljRXhwb25lbnRBcnJheS0+ZGF0YSgpLCBwdWJsaWNFeHBvbmVu
dEFycmF5LT5ieXRlTGVuZ3RoKCkpOworCisgICAgcmV0dXJuIHN0ZDo6bW92ZShyZXN1bHQpOwor
fQorCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNy
ZWF0ZVJzYVNzYUtleVBhcmFtcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKQoreworICAgIC8vIFdlYkNy
eXB0byBSU0FTU0EtUEtDUzEtdjFfNSBhbGdvcml0aG0gY3VycmVudGx5IGRvZXMgbm90IHRha2Ug
YW55IHBhcmFtZXRlcnMgdG8gaW1wb3J0S2V5LgorICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcz4oKTsKK30KKworc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FTc2FQYXJhbXMoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1ZS5n
ZXRPYmplY3QoKSk7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0Fs
Z29yaXRobVJzYVNzYVBhcmFtcz4oKTsKKworICAgIGlmICghZ2V0SGFzaEFsZ29yaXRobShqc0Rp
Y3Rpb25hcnksIHJlc3VsdC0+aGFzaCkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0
ZDo6bW92ZShyZXN1bHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RW5jcnlwdChFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtMjM1LDcg
KzI5NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQo
RXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKQEAgLTI2NywxMSArMzI2LDE0
IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oRXhlY1N0YXRlKiBl
eGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IE5PVF9TVVBQT1JURURfRVJSKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNToKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZVJzYVNzYVBhcmFtcyhleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6UlNBX09BRVA6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RT
QToKQEAgLTI5OSwxMSArMzYxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JW
ZXJpZnkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yVmVyaWZ5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAg
ICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NB
X1BLQ1MxX3YxXzU6CisgICAgICAgIHJldHVybiBjcmVhdGVSc2FTc2FQYXJhbXMoZXhlYywgdmFs
dWUpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX1BTUzoKICAgICBj
YXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQV9PQUVQOgogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CkBAIC0zMzEsNyArMzk2LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSkKK3N0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoRXhlY1N0YXRlKiBleGVjLCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29y
aXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFf
djFfNToKQEAgLTM2MywxMyArNDI4LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNG
b3JHZW5lcmF0ZUtleShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0
ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleShFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHN3aXRjaCAoYWxn
b3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NT
MV92MV81OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1Mx
X3YxXzU6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVA6CisgICAgICAgIHJldHVy
biBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoZXhlYywgdmFsdWUpOwogICAgIGNhc2UgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6RUNEU0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpFQ0RIOgogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9F
UlIpOwpAQCAtMzk2LDcgKzQ2Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
ZXJpdmVLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIg
YWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRGVyaXZlS2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBh
bGdvcml0aG0sIEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNl
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC00MjUsNyAr
NDkxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0K
IH0KIAotc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlcml2ZUJpdHMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6
OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVyaXZlQml0cyhF
eGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1Zh
bHVlKQogewogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81OgpAQCAtNDU0LDExICs1MjAsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoRXhlY1N0YXRl
KiBleGVjLCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBzd2l0Y2ggKGFsZ29yaXRobSkgewogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNToKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICBjYXNlIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81OgorICAgICAgICByZXR1cm4gY3JlYXRl
UnNhU3NhS2V5UGFyYW1zKGV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OlJTQV9QU1M6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpS
U0FfT0FFUDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgpAQCAt
NDg2LDcgKzU1NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXIK
ICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFeHBvcnRLZXko
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGht
LCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRXhwb3J0
S2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6CkBAIC01MTYsNyArNTg0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcgogICAgIH0KIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvcldyYXBLZXkoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yV3JhcEtleShFeGVjU3RhdGUqIGV4ZWMs
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU1ZhbHVlKQogewogICAgIHN3
aXRjaCAoYWxnb3JpdGhtKSB7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpS
U0FFU19QS0NTMV92MV81OgpAQCAtNTQ1LDcgKzYxMyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXIKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JVbndyYXBLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgYWxnb3JpdGhtLCBKU0M6OkpTVmFsdWUpCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yVW53cmFwS2V5KEV4ZWNTdGF0ZSogZXhlYywgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBhbGdvcml0aG0sIEpTVmFsdWUpCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0p
IHsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG0uaCIK
ICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQ
YXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZS5oIgorI2luY2x1
ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5s
aW5lcy5oPgpAQCAtNDIsNiArNDQsMjYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCoganNvbiwgY29uc3QgY2hhcioga2V5LCBKU0FycmF5KiYgcmVzdWx0
KQoreworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBrZXkpOworICAgIFByb3BlcnR5
U2xvdCBzbG90KGpzb24pOworCisgICAgaWYgKCFqc29uLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTVmFsdWUg
dmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOworICAgIEFTU0VSVCghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGlmIChpc0pTQXJyYXkodmFsdWUpKSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhbiBhcnJheSBm
b3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmVzdWx0ID0gYXNBcnJheSh2YWx1ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogc3RhdGljIGJvb2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCoganNvbiwgY29uc3QgY2hhcioga2V5LCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIoZXhlYywga2V5KTsKQEAgLTgyLDYgKzEwNCwyNSBAQCBzdGF0aWMgYm9v
bCBnZXRCb29sZWFuRnJvbUpTT04oRXhlY1N0YXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0
YXRpYyBib29sIGdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBqc29uLCBjb25zdCBjaGFyKiBrZXksIFZlY3RvcjxjaGFyPiYgcmVzdWx0KQorewor
ICAgIFN0cmluZyBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyOworICAgIGlmICghZ2V0U3RyaW5nRnJv
bUpTT04oZXhlYywganNvbiwga2V5LCBiYXNlNjR1cmxFbmNvZGVkTnVtYmVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFiYXNlNjRVUkxEZWNvZGUoYmFzZTY0dXJsRW5jb2Rl
ZE51bWJlciwgcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiQ2Fubm90
IGRlY29kZSBiYXNlNjR1cmwga2V5IGRhdGEgaW4gSldLIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0WzBdID09IDApIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgIkpXSyBCaWdJbnRlZ2VyIG11c3QgdXRpbGl6ZSB0aGUgbWluaW11bSBudW1i
ZXIgb2Ygb2N0ZXRzIHRvIHJlcHJlc2VudCB0aGUgdmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSyhFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYganNvblN0cmluZykKICAgICA6IG1fZXhlYyhleGVjKQogewpAQCAtMTA4LDYg
KzE0OSwxNSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhCiAgICAg
cmV0dXJuIHN0ZDo6bW92ZShobWFjUGFyYW1ldGVycyk7CiB9CiAKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVy
cyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hGdW5jdGlvbikKK3sKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zPiByc2FTU0FQYXJhbWV0ZXJz
ID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXM+KCk7Cisg
ICAgcnNhU1NBUGFyYW1ldGVycy0+aGFzSGFzaCA9IHRydWU7CisgICAgcnNhU1NBUGFyYW1ldGVy
cy0+aGFzaCA9IGhhc2hGdW5jdGlvbjsKKyAgICByZXR1cm4gc3RkOjptb3ZlKHJzYVNTQVBhcmFt
ZXRlcnMpOworfQorCisKIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmNp
bGVBbGdvcml0aG0oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4mIHN1Z2dlc3RlZEFs
Z29yaXRobSwgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiBzdWdn
ZXN0ZWRQYXJhbWV0ZXJzKSBjb25zdAogewogICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9l
eGVjLCBtX2pzb24uZ2V0KCksICJhbGciLCBtX2p3a0FsZ29yaXRobU5hbWUpKSB7CkBAIC0xMjYs
NiArMTc2LDE1IEBAIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAg
ICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiSFM1MTIiKSB7CiAgICAgICAgIGFs
Z29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVI
TUFDUGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKKyAgICB9
IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMyNTYiKSB7CisgICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOworICAgICAgICBwYXJhbWV0ZXJz
ID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpT
SEFfMjU2KTsKKyAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMzODQiKSB7
CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5j
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOworICAg
ICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVycyhDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKKyAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFt
ZSA9PSAiUlM1MTIiKSB7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BL
Q1MxX3YxXzUpOworICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBU1NBS2V5UGFyYW1ldGVy
cyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1f
andrQWxnb3JpdGhtTmFtZSA9PSAiQTEyOENCQyIpIHsKICAgICAgICAgYWxnb3JpdGhtID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKQEAgLTE1MiwxMSArMjExLDIwIEBAIGJvb2wg
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICBpZiAoYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCkgIT0gc3VnZ2VzdGVkQWxnb3JpdGhtLT5pZGVudGlmaWVyKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEhNQUMgaXMgdGhlIG9ubHkgYWxnb3JpdGhtIHRoYXQg
aGFzIHBhcmFtZXRlcnMgaW4gaW1wb3J0S2V5LgotICAgIGlmIChhbGdvcml0aG0tPmlkZW50aWZp
ZXIoKSAhPSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoYWxnb3JpdGhtLT5pZGVudGlmaWVyKCkgPT0gQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6SE1BQykKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0FsZ29y
aXRobUhtYWNQYXJhbXMmPigqcGFyYW1ldGVycykuaGFzaCA9PSBzdGF0aWNfY2FzdDxDcnlwdG9B
bGdvcml0aG1IbWFjUGFyYW1zJj4oKnN1Z2dlc3RlZFBhcmFtZXRlcnMpLmhhc2g7CisgICAgaWYg
KGFsZ29yaXRobS0+aWRlbnRpZmllcigpID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJT
QVNTQV9QS0NTMV92MV81KSB7CisgICAgICAgIENyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFt
cyYgcnNhU1NBUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PENyeXB0b0FsZ29yaXRobVJzYVNzYUtl
eVBhcmFtcyY+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5
UGFyYW1zJiBzdWdnZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Q3J5cHRvQWxn
b3JpdGhtUnNhU3NhS2V5UGFyYW1zJj4oKnN1Z2dlc3RlZFBhcmFtZXRlcnMpOworICAgICAgICBB
U1NFUlQocnNhU1NBUGFyYW1ldGVycy5oYXNIYXNoKTsKKyAgICAgICAgaWYgKHN1Z2dlc3RlZFJT
QVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKKyAgICAgICAgICAgIHJldHVybiBzdWdnZXN0ZWRSU0FT
U0FQYXJhbWV0ZXJzLmhhc2ggPT0gcnNhU1NBUGFyYW1ldGVycy5oYXNoOworICAgICAgICBzdWdn
ZXN0ZWRSU0FTU0FQYXJhbWV0ZXJzLmhhc0hhc2ggPSB0cnVlOworICAgICAgICBzdWdnZXN0ZWRS
U0FTU0FQYXJhbWV0ZXJzLmhhc2ggPSByc2FTU0FQYXJhbWV0ZXJzLmhhc2g7CisgICAgfQogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPigqcGFyYW1l
dGVycykuaGFzaCA9PSBzdGF0aWNfY2FzdDxDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4oKnN1
Z2dlc3RlZFBhcmFtZXRlcnMpLmhhc2g7CisgICAgLy8gT3RoZXIgYWxnb3JpdGhtcyBkb24ndCBo
YXZlIHBhcmFtZXRlcnMuCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSlNDcnlwdG9LZXlT
ZXJpYWxpemF0aW9uSldLOjpyZWNvbmNpbGVVc2FnZXMoQ3J5cHRvS2V5VXNhZ2UmIHN1Z2dlc3Rl
ZFVzYWdlKSBjb25zdApAQCAtMjA3LDIwICsyNzUsOCBAQCBib29sIEpTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSzo6a2V5U2l6CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGEoKSBj
b25zdAorc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSzo6a2V5RGF0YU9jdGV0U2VxdWVuY2UoKSBjb25zdAogewotICAgIFN0cmluZyBqd2tL
ZXlUeXBlOwotICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCks
ICJrdHkiLCBqd2tLZXlUeXBlKSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJSZXF1aXJlZCBKV0sgXCJr
dHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBpZiAoandrS2V5VHlwZSAhPSAib2N0IikgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihtX2V4ZWMsICJVbnN1cHBvcnRlZCBKV0sga2V5IHR5cGUgIiArIGp3a0tleVR5cGUpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBTdHJpbmcga2V5QmFzZTY0VVJMOwog
ICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJrIiwga2V5
QmFzZTY0VVJMKSkgewogICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCkBAIC0y
NDIsNiArMjk4LDExOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9L
CiAgICAgcmV0dXJuIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlOjpjcmVhdGUob2N0ZXRTZXF1
ZW5jZSk7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0tleVNl
cmlhbGl6YXRpb25KV0s6OmtleURhdGFSU0FDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICBWZWN0
b3I8Y2hhcj4gbW9kdWx1czsKKyAgICBWZWN0b3I8Y2hhcj4gZXhwb25lbnQ7CisgICAgVmVjdG9y
PGNoYXI+IHByaXZhdGVFeHBvbmVudDsKKworICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZy
b21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAibiIsIG1vZHVsdXMpKSB7CisgICAgICAgIGlm
ICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1f
ZXhlYywgIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9t
SlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImUiLCBleHBvbmVudCkpIHsKKyAgICAgICAgaWYg
KCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9l
eGVjLCAiUmVxdWlyZWQgSldLIFwiZVwiIG1lbWJlciBpcyBtaXNzaW5nIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21K
U09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZCIsIG1vZHVsdXMpKSB7CisgICAgICAgIGlmICht
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKG1vZHVs
dXMsIGV4cG9uZW50KTsKKyAgICB9CisKKyAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6
UHJpbWVJbmZvIGZpcnN0UHJpbWVJbmZvOworICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOworICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CisgICAgaWYgKCFnZXRCaWdJ
bnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmlt
ZUluZm8ucHJpbWVGYWN0b3IpKSB7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0
ZUV4cG9uZW50KTsKKyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRwIiwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhw
b25lbnQpKSB7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsK
KyAgICB9CisKKyAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1f
anNvbi5nZXQoKSwgInEiLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKSB7CisgICAgICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKKyAgICB9CisKKyAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgeworICAgICAgICBpZiAobV9leGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywg
ZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CisgICAgfQorCisgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxaSIsIHNlY29uZFByaW1l
SW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKKyAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIENy
eXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50
LCBwcml2YXRlRXhwb25lbnQpOworICAgIH0KKworICAgIEpTQXJyYXkqIG90aGVyUHJpbWVJbmZv
SlNBcnJheTsKKyAgICBpZiAoIWdldEpTQXJyYXlGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQo
KSwgIm90aCIsIG90aGVyUHJpbWVJbmZvSlNBcnJheSkpIHsKKyAgICAgICAgaWYgKG1fZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9u
YWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZv
LCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvdGhlclByaW1lSW5mb0pTQXJyYXktPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbyBpbmZvOworICAg
ICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBvdGhlclByaW1lSW5mb0pTQXJyYXktPmdldEluZGV4KG1f
ZXhlYywgaSk7CisgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmICghZWxlbWVudC5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJKV0sgXCJvdGhcIiBhcnJheSBtZW1i
ZXIgaXMgbm90IGFuIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBh
c09iamVjdChlbGVtZW50KSwgInIiLCBpbmZvLnByaW1lRmFjdG9yKSkgeworICAgICAgICAgICAg
aWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBnZXQgcHJpbWUgZmFjdG9yIGZvciBhIHByaW1lIGluIFwib3Ro
XCIgZGljdGlvbmFyeSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09iamVj
dChlbGVtZW50KSwgImQiLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgeworICAgICAgICAgICAg
aWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgIkNhbm5vdCBnZXQgZmFjdG9yIENSVCBleHBvbmVudCBmb3IgYSBwcmltZSBp
biBcIm90aFwiIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywg
YXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKKyAg
ICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJDYW5ub3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQg
Zm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBvdGhlclByaW1lSW5mb3MuYXBwZW5kKGluZm8p
OworICAgIH0KKworICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRl
UHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50LCBmaXJzdFByaW1lSW5mbywgc2Vjb25kUHJpbWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLOjprZXlEYXRhKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgandrS2V5VHlwZTsKKyAgICBp
ZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5
VHlwZSkpIHsKKyAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiUmVxdWlyZWQgSldLIFwia3R5XCIgbWVtYmVyIGlz
IG1pc3NpbmciKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGp3
a0tleVR5cGUgPT0gIm9jdCIpCisgICAgICAgIHJldHVybiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSgp
OworCisgICAgaWYgKGp3a0tleVR5cGUgPT0gIlJTQSIpCisgICAgICAgIHJldHVybiBrZXlEYXRh
UlNBQ29tcG9uZW50cygpOworCisgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCAiVW5zdXBwb3J0
ZWQgSldLIGtleSB0eXBlICIgKyBqd2tLZXlUeXBlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0tleVNlcmlhbGl6YXRpb25KV0suaAkocmV2aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgcHJpdmF0ZToKICAgICBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0soSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wga2V5
U2l6ZUlzVmFsaWQoc2l6ZV90IHNpemVJbkJpdHMpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSgpIGNvbnN0OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBrZXlEYXRhUlNBQ29tcG9uZW50cygpIGNvbnN0Owog
CiAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBtX2pzb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlci5oCShyZXZpc2lvbiAxNTkxNzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKQEAgLTQzLDYgKzQ0LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgdW5zaWduZWQpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmcmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBjaGFyKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgY2hhciosIGNvbnN0IENyeXB0b0FsZ29y
aXRobURlc2NyaXB0aW9uQnVpbGRlciYpID0gMDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81TWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6c2lnbihjb25zdCBDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPENy
eXB0b09wZXJhdGlvbkRhdGE+Jiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKK30KKwordm9p
ZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6dmVyaWZ5KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiAvKnNpZ25hdHVyZSovLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4m
IC8qZGF0YSovLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBjbGFz
cyBDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXI7CiAKIEVOVU1fQ0xBU1MoQ3J5cHRv
S2V5Q2xhc3MpIHsKICAgICBITUFDLAotICAgIEFFUworICAgIEFFUywKKyAgICBSU0EKIH07CiAK
IGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBSZWZDb3VudGVkPENyeXB0b0tleT4gewpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0YS5oCShyZXZpc2lvbiAxNTkxNzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw4IEBAIGNsYXNzIENyeXB0b0tleURhdGEgewogV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3J5cHRvS2V5RGF0YSk7CiBwdWJsaWM6CiAgICAgRU5VTV9DTEFTUyhGb3JtYXQpIHsKLSAgICAg
ICAgT2N0ZXRTZXF1ZW5jZQorICAgICAgICBPY3RldFNlcXVlbmNlLAorICAgICAgICBSU0FDb21w
b25lbnRzCiAgICAgfTsKIAogICAgIENyeXB0b0tleURhdGEoRm9ybWF0IGZvcm1hdCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DQkMuY3BwCShyZXZpc2lvbiAxNTkxNzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9y
dEtleShjCiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgY29uc3QgQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UmIGtleURhdGFPY3Rl
dFNlcXVlbmNlID0gYXNDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShrZXlEYXRhKTsKKyAgICBj
b25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSYga2V5RGF0YU9jdGV0U2VxdWVuY2UgPSB0
b0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlKGtleURhdGEpOwogICAgIFJlZlB0cjxDcnlwdG9L
ZXlBRVM+IHJlc3VsdCA9IENyeXB0b0tleUFFUzo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkFFU19DQkMsIGtleURhdGFPY3RldFNlcXVlbmNlLm9jdGV0U2VxdWVuY2UoKSwgZXh0
cmFjdGFibGUsIHVzYWdlKTsKICAgICBwcm9taXNlLT5mdWxmaWxsKHJlc3VsdC5yZWxlYXNlKCkp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtSE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0
S2V5KGNvbnMKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBjb25zdCBDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZSYga2V5RGF0YU9j
dGV0U2VxdWVuY2UgPSBhc0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlKGtleURhdGEpOworICAg
IGNvbnN0IENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlJiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSA9
IHRvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uoa2V5RGF0YSk7CiAKICAgICBjb25zdCBDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0
IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobVJzYUtleUdlblBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJzYVNz
YUtleVBhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCisj
aW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzU6OnNfbmFtZSA9ICJyc2Fzc2EtcGtjczEtdjFfNSI7CisKK0NyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81OjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NSgpCit7Cit9CisKK0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojp+Q3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4obmV3IENyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81KTsKK30KKworQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aWRlbnRpZmllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleURhdGEmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+
IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobVJz
YVNzYUtleVBhcmFtcyYgcnNhU1NBUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0
b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyY+KHBhcmFtZXRlcnMpOworICAgIGNvbnN0IENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzJiByc2FDb21wb25lbnRzID0gdG9DcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50cyhrZXlEYXRhKTsKKworICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdCA9
IENyeXB0b0tleVJTQTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9Q
S0NTMV92MV81LCByc2FDb21wb25lbnRzLCBleHRyYWN0YWJsZSwgdXNhZ2UpOworICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChyc2FTU0FQYXJhbWV0ZXJzLmhhc0hhc2gpCisgICAgICAg
IHJlc3VsdC0+cmVzdHJpY3RUb0hhc2gocnNhU1NBUGFyYW1ldGVycy5oYXNoKTsKKworICAgIHBy
b21pc2UtPmZ1bGZpbGwocmVzdWx0LnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVz
YWdlcywgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25D
b2RlJikKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMmIHJzYVBh
cmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJh
bXMmPihwYXJhbWV0ZXJzKTsKKworICAgIENyeXB0b0tleVJTQTo6Z2VuZXJhdGVQYWlyKENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81LCByc2FQYXJhbWV0ZXJzLm1v
ZHVsdXNMZW5ndGgsIHJzYVBhcmFtZXRlcnMucHVibGljRXhwb25lbnQsIGV4dHJhY3RhYmxlLCB1
c2FnZXMsIHN0ZDo6bW92ZShwcm9taXNlKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShT
VUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NV9oCisjZGVmaW5lIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81X2gKKworI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobS5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3Qgc19uYW1lOworICAgIHN0YXRpYyBjb25zdCBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIHNfaWRlbnRpZmllciA9IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJT
QVNTQV9QS0NTMV92MV81OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG0+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGlkZW50aWZpZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzaWduKGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBW
ZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBw
ZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHZlcmlmeShj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0
aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikg
T1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3Yx
XzUoKTsKKyAgICB2aXJ0dWFsIH5DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNSgpOwor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHJldmlzaW9uIDE1OTE3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxOCAr
NTYsMjEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7CiB9OwogCi1pbmxpbmUg
Y29uc3QgQ3J5cHRvS2V5QUVTKiBhc0NyeXB0b0tleUFFUyhjb25zdCBDcnlwdG9LZXkmIGtleSkK
K2lubGluZSBib29sIGlzQ3J5cHRvS2V5QUVTKGNvbnN0IENyeXB0b0tleSYga2V5KQogewotICAg
IGlmIChrZXkua2V5Q2xhc3MoKSAhPSBDcnlwdG9LZXlDbGFzczo6QUVTKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5QUVTKj4o
JmtleSk7CisgICAgcmV0dXJuIGtleS5rZXlDbGFzcygpID09IENyeXB0b0tleUNsYXNzOjpBRVM7
CiB9CiAKLWlubGluZSBDcnlwdG9LZXlBRVMqIGFzQ3J5cHRvS2V5QUVTKENyeXB0b0tleSYga2V5
KQoraW5saW5lIGNvbnN0IENyeXB0b0tleUFFUyYgdG9DcnlwdG9LZXlBRVMoY29uc3QgQ3J5cHRv
S2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpB
RVMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDcnlw
dG9LZXlBRVMqPigma2V5KTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
c0NyeXB0b0tleUFFUyhrZXkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRv
S2V5QUVTJj4oa2V5KTsKK30KKworaW5saW5lIENyeXB0b0tleUFFUyYgdG9DcnlwdG9LZXlBRVMo
Q3J5cHRvS2V5JiBrZXkpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aXNDcnlwdG9LZXlBRVMoa2V5KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENyeXB0b0tleUFF
UyY+KGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uu
aAkocmV2aXNpb24gMTU5MTc5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5RGF0YU9jdGV0U2VxdWVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxjaGFyPiBtX2tleURhdGE7CiB9OwogCi1pbmxpbmUgY29uc3Qg
Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2UmIGFzQ3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2Uo
Y29uc3QgQ3J5cHRvS2V5RGF0YSYgZGF0YSkKK2lubGluZSBjb25zdCBDcnlwdG9LZXlEYXRhT2N0
ZXRTZXF1ZW5jZSYgdG9DcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZShjb25zdCBDcnlwdG9LZXlE
YXRhJiBkYXRhKQogewogICAgIEFTU0VSVChkYXRhLmZvcm1hdCgpID09IENyeXB0b0tleURhdGE6
OkZvcm1hdDo6T2N0ZXRTZXF1ZW5jZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENy
eXB0b0tleURhdGFPY3RldFNlcXVlbmNlJj4oZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50cyhjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
ZXhwb25lbnQpCisgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6OkZvcm1hdDo6UlNB
Q29tcG9uZW50cykKKyAgICAsIG1fdHlwZShUeXBlOjpQdWJsaWMpCisgICAgLCBtX21vZHVsdXMo
bW9kdWx1cykKKyAgICAsIG1fZXhwb25lbnQoZXhwb25lbnQpCit7Cit9CisKK0NyeXB0b0tleURh
dGFSU0FDb21wb25lbnRzOjpDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhjb25zdCBWZWN0b3I8
Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50KQorICAgIDogQ3J5cHRvS2V5RGF0YShDcnlwdG9LZXlE
YXRhOjpGb3JtYXQ6OlJTQUNvbXBvbmVudHMpCisgICAgLCBtX3R5cGUoVHlwZTo6UHJpdmF0ZSkK
KyAgICAsIG1fbW9kdWx1cyhtb2R1bHVzKQorICAgICwgbV9leHBvbmVudChleHBvbmVudCkKKyAg
ICAsIG1fcHJpdmF0ZUV4cG9uZW50KHByaXZhdGVFeHBvbmVudCkKKyAgICAsIG1faGFzQWRkaXRp
b25hbFByaXZhdGVLZXlQYXJhbWV0ZXJzKGZhbHNlKQoreworfQorCitDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+
JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hh
cj4mIHByaXZhdGVFeHBvbmVudCwgY29uc3QgUHJpbWVJbmZvJiBmaXJzdFByaW1lSW5mbywgY29u
c3QgUHJpbWVJbmZvJiBzZWNvbmRQcmltZUluZm8sIGNvbnN0IFZlY3RvcjxQcmltZUluZm8+JiBv
dGhlclByaW1lSW5mb3MpCisgICAgOiBDcnlwdG9LZXlEYXRhKENyeXB0b0tleURhdGE6OkZvcm1h
dDo6UlNBQ29tcG9uZW50cykKKyAgICAsIG1fdHlwZShUeXBlOjpQcml2YXRlKQorICAgICwgbV9t
b2R1bHVzKG1vZHVsdXMpCisgICAgLCBtX2V4cG9uZW50KGV4cG9uZW50KQorICAgICwgbV9wcml2
YXRlRXhwb25lbnQocHJpdmF0ZUV4cG9uZW50KQorICAgICwgbV9oYXNBZGRpdGlvbmFsUHJpdmF0
ZUtleVBhcmFtZXRlcnModHJ1ZSkKKyAgICAsIG1fZmlyc3RQcmltZUluZm8oZmlyc3RQcmltZUlu
Zm8pCisgICAgLCBtX3NlY29uZFByaW1lSW5mbyhzZWNvbmRQcmltZUluZm8pCisgICAgLCBtX290
aGVyUHJpbWVJbmZvcyhvdGhlclByaW1lSW5mb3MpCit7Cit9CisKK0NyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzOjp+Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RGF0YVJT
QUNvbXBvbmVudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzX2gK
KyNkZWZpbmUgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHNfaAorCisjaW5jbHVkZSAiQ3J5cHRv
S2V5RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVUJUTEVf
Q1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzIEZJTkFMIDogcHVibGljIENyeXB0b0tleURhdGEgeworcHVibGljOgorICAgIEVO
VU1fQ0xBU1MoVHlwZSkgeworICAgICAgICBQdWJsaWMsCisgICAgICAgIFByaXZhdGUKKyAgICB9
OworCisgICAgc3RydWN0IFByaW1lSW5mbyB7CisgICAgICAgIFZlY3RvcjxjaGFyPiBwcmltZUZh
Y3RvcjsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGZhY3RvckNSVEV4cG9uZW50OworICAgICAgICBW
ZWN0b3I8Y2hhcj4gZmFjdG9yQ1JUQ29lZmZpY2llbnQ7CisgICAgfTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM+IGNyZWF0ZVB1YmxpYyhj
b25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQp
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FD
b21wb25lbnRzPihuZXcgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMobW9kdWx1cywgZXhwb25l
bnQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzPiBjcmVhdGVQcml2YXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgbW9kdWx1cywg
Y29uc3QgVmVjdG9yPGNoYXI+JiBleHBvbmVudCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwcml2YXRl
RXhwb25lbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tl
eURhdGFSU0FDb21wb25lbnRzPihuZXcgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMobW9kdWx1
cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCkpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM+IGNyZWF0ZVByaXZhdGVXaXRo
QWRkaXRpb25hbERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGV4cG9uZW50LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHByaXZhdGVFeHBvbmVudCwgY29u
c3QgUHJpbWVJbmZvJiBmaXJzdFByaW1lSW5mbywgY29uc3QgUHJpbWVJbmZvJiBzZWNvbmRQcmlt
ZUluZm8sIGNvbnN0IFZlY3RvcjxQcmltZUluZm8+JiBvdGhlclByaW1lSW5mb3MpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
PihuZXcgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMobW9kdWx1cywgZXhwb25lbnQsIHByaXZh
dGVFeHBvbmVudCwgZmlyc3RQcmltZUluZm8sIHNlY29uZFByaW1lSW5mbywgb3RoZXJQcmltZUlu
Zm9zKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMo
KTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8g
UHJpdmF0ZSBhbmQgcHVibGljIGtleXMuCisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVz
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bHVzOyB9CisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBl
eHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KKworICAgIC8vIE9ubHkgcHJp
dmF0ZSBrZXlzLgorICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wcml2YXRlRXhwb25lbnQ7IH0KKyAgICBib29sIGhhc0FkZGl0aW9uYWxQ
cml2YXRlS2V5UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWRkaXRpb25hbFByaXZh
dGVLZXlQYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgUHJpbWVJbmZvJiBmaXJzdFByaW1lSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RQcmltZUluZm87IH0KKyAgICBjb25zdCBQcmltZUluZm8m
IHNlY29uZFByaW1lSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kUHJpbWVJbmZvOyB9Cisg
ICAgY29uc3QgVmVjdG9yPFByaW1lSW5mbz4mIG90aGVyUHJpbWVJbmZvcygpIGNvbnN0IHsgcmV0
dXJuIG1fb3RoZXJQcmltZUluZm9zOyB9CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvS2V5RGF0YVJT
QUNvbXBvbmVudHMoY29uc3QgVmVjdG9yPGNoYXI+JiBtb2R1bHVzLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGV4cG9uZW50KTsKKyAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyhjb25zdCBWZWN0
b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhwb25lbnQsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50KTsKKyAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cyhjb25zdCBWZWN0b3I8Y2hhcj4mIG1vZHVsdXMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZXhw
b25lbnQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpdmF0ZUV4cG9uZW50LCBjb25zdCBQcmltZUlu
Zm8mIGZpcnN0UHJpbWVJbmZvLCBjb25zdCBQcmltZUluZm8mIHNlY29uZFByaW1lSW5mbywgY29u
c3QgVmVjdG9yPFByaW1lSW5mbz4mIG90aGVyUHJpbWVJbmZvcyk7CisKKyAgICBUeXBlIG1fdHlw
ZTsKKworICAgIC8vIFByaXZhdGUgYW5kIHB1YmxpYyBrZXlzLgorICAgIFZlY3RvcjxjaGFyPiBt
X21vZHVsdXM7CisgICAgVmVjdG9yPGNoYXI+IG1fZXhwb25lbnQ7CisKKyAgICAvLyBPbmx5IHBy
aXZhdGUga2V5cy4KKyAgICBWZWN0b3I8Y2hhcj4gbV9wcml2YXRlRXhwb25lbnQ7CisgICAgYm9v
bCBtX2hhc0FkZGl0aW9uYWxQcml2YXRlS2V5UGFyYW1ldGVyczsKKyAgICBQcmltZUluZm8gbV9m
aXJzdFByaW1lSW5mbzsKKyAgICBQcmltZUluZm8gbV9zZWNvbmRQcmltZUluZm87CisgICAgVmVj
dG9yPFByaW1lSW5mbz4gbV9vdGhlclByaW1lSW5mb3M7IC8vIFdoZW4gdGhyZWUgb3IgbW9yZSBw
cmltZXMgaGF2ZSBiZWVuIHVzZWQsIHRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgaXMgYmUg
dGhlIG51bWJlciBvZiBwcmltZXMgdXNlZCBtaW51cyB0d28uCit9OworCitpbmxpbmUgY29uc3Qg
Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIHRvQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMo
Y29uc3QgQ3J5cHRvS2V5RGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoZGF0YS5mb3JtYXQoKSA9
PSBDcnlwdG9LZXlEYXRhOjpGb3JtYXQ6OlJTQUNvbXBvbmVudHMpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyY+KGRhdGEpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykK
KyNlbmRpZiAvLyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50c19oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCShyZXZpc2lvbiAxNTkxNzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDE4ICs1NywyMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxjaGFyPiBtX2tleTsKIH07
CiAKLWlubGluZSBjb25zdCBDcnlwdG9LZXlITUFDKiBhc0NyeXB0b0tleUhNQUMoY29uc3QgQ3J5
cHRvS2V5JiBrZXkpCitpbmxpbmUgYm9vbCBpc0NyeXB0b0tleUhNQUMoY29uc3QgQ3J5cHRvS2V5
JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlDbGFzcygpICE9IENyeXB0b0tleUNsYXNzOjpITUFD
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
Q3J5cHRvS2V5SE1BQyo+KCZrZXkpOworICAgIHJldHVybiBrZXkua2V5Q2xhc3MoKSA9PSBDcnlw
dG9LZXlDbGFzczo6SE1BQzsKIH0KIAotaW5saW5lIENyeXB0b0tleUhNQUMqIGFzQ3J5cHRvS2V5
SE1BQyhDcnlwdG9LZXkmIGtleSkKK2lubGluZSBjb25zdCBDcnlwdG9LZXlITUFDJiB0b0NyeXB0
b0tleUhNQUMoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCiB7Ci0gICAgaWYgKGtleS5rZXlDbGFzcygp
ICE9IENyeXB0b0tleUNsYXNzOjpITUFDKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q3J5cHRvS2V5SE1BQyo+KCZrZXkpOworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQ3J5cHRvS2V5SE1BQyhrZXkpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyY+KGtleSk7Cit9CisKK2lubGluZSBDcnlw
dG9LZXlITUFDJiB0b0NyeXB0b0tleUhNQUMoQ3J5cHRvS2V5JiBrZXkpCit7CisgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNDcnlwdG9LZXlITUFDKGtleSkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlITUFDJj4oa2V5KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlS
U0EuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDcnlwdG9LZXlSU0FfaAorI2RlZmluZSBDcnlwdG9LZXlSU0FfaAorCisjaW5jbHVkZSAiQ3J5
cHRvS2V5LmgiCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TKQordHlwZWRlZiBzdHJ1Y3QgX0NDUlNBQ3J5cHRvciAqQ0NSU0FD
cnlwdG9yUmVmOwordHlwZWRlZiBDQ1JTQUNyeXB0b3JSZWYgUGxhdGZvcm1SU0FLZXk7CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czsKK2NsYXNzIENyeXB0b0tleVBhaXI7CitjbGFzcyBQcm9taXNlV3JhcHBlcjsKKworY2xh
c3MgQ3J5cHRvS2V5UlNBIEZJTkFMIDogcHVibGljIENyeXB0b0tleSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciBpZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBs
YXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIHR5
cGUsIHBsYXRmb3JtS2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpKTsKKyAgICB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q3J5cHRvS2V5UlNBPiBjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciwgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmLCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZSk7CisgICAgdmlydHVhbCB+Q3J5cHRvS2V5UlNBKCk7CisKKyAgICB2b2lk
IHJlc3RyaWN0VG9IYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIpOworCisgICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIHVuc2lnbmVkIG1v
ZHVsdXNMZW5ndGgsIGNvbnN0IFZlY3RvcjxjaGFyPiYgcHVibGljRXhwb25lbnQsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+
KTsKKworICAgIHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6UlNBOyB9CisKKyAgICBQbGF0Zm9ybVJTQUtleSBw
bGF0Zm9ybUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1LZXk7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0
aW9uQnVpbGRlciYpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIENyeXB0b0tleVJT
QShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlLCBQbGF0Zm9ybVJTQUtl
eSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UpOworCisgICAgUGxhdGZvcm1SU0FL
ZXkgbV9wbGF0Zm9ybUtleTsKKworICAgIGJvb2wgbV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2g7
CisgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBtX2hhc2g7Cit9OworCitpbmxpbmUgYm9v
bCBpc0NyeXB0b0tleVJTQShjb25zdCBDcnlwdG9LZXkmIGtleSkKK3sKKyAgICByZXR1cm4ga2V5
LmtleUNsYXNzKCkgPT0gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsKK30KKworaW5saW5lIGNvbnN0IENy
eXB0b0tleVJTQSYgdG9DcnlwdG9LZXlSU0EoY29uc3QgQ3J5cHRvS2V5JiBrZXkpCit7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNDcnlwdG9LZXlSU0Eoa2V5KSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleVJTQSY+KGtleSk7Cit9CisKK2lu
bGluZSBDcnlwdG9LZXlSU0EmIGFzQ3J5cHRvS2V5UlNBKENyeXB0b0tleSYga2V5KQoreworICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQ3J5cHRvS2V5UlNBKGtleSkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDcnlwdG9LZXlSU0EmPihrZXkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNlbmRp
ZiAvLyBDcnlwdG9LZXlSU0FfaApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCShyZXZpc2lvbiAxNTkxNzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwyNyArOTIsMjcgQEAgc3RhdGljIHZvaWQgdHJhbnNm
b3JtQUVTX0NCQyhDQ09wZXJhdGlvbgogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNy
eXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENy
eXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0
ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJhbWV0
ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJj4ocGFy
YW1ldGVycyk7Ci0gICAgY29uc3QgQ3J5cHRvS2V5QUVTKiBhZXNLZXkgPSBhc0NyeXB0b0tleUFF
UyhrZXkpOwogCi0gICAgaWYgKCFhZXNLZXkpIHsKKyAgICBpZiAoIWlzQ3J5cHRvS2V5QUVTKGtl
eSkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBjb25zdCBDcnlwdG9LZXlBRVMmIGFlc0tleSA9IHRvQ3J5cHRvS2V5QUVTKGtl
eSk7CiAKLSAgICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMs
ICphZXNLZXksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlKSk7CisgICAgdHJhbnNmb3JtQUVTX0NC
QyhrQ0NFbmNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCBhZXNLZXksIGRhdGEsIHN0ZDo6bW92ZShw
cm9taXNlKSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVjcnlwdChjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkm
IGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1
ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgYWVzQ0JDUGFyYW1ldGVycyA9IHN0
YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyY+KHBhcmFtZXRlcnMp
OwotICAgIGNvbnN0IENyeXB0b0tleUFFUyogYWVzS2V5ID0gYXNDcnlwdG9LZXlBRVMoa2V5KTsK
IAotICAgIGlmICghYWVzS2V5KSB7CisgICAgaWYgKCFpc0NyeXB0b0tleUFFUyhrZXkpKSB7CiAg
ICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgY29uc3QgQ3J5cHRvS2V5QUVTJiBhZXNLZXkgPSB0b0NyeXB0b0tleUFFUyhrZXkpOwogCi0g
ICAgdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNDQkNQYXJhbWV0ZXJzLCAqYWVzS2V5
LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkpOworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRGVj
cnlwdCwgYWVzQ0JDUGFyYW1ldGVycywgYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHJldmlzaW9uIDE1
OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01h
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDIwICs5NSwyMCBAQCBzdGF0aWMgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+IGNhbGN1bGF0ZVNpCiB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24o
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1
bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0
YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsK
LSAgICBjb25zdCBDcnlwdG9LZXlITUFDKiBobWFjS2V5ID0gYXNDcnlwdG9LZXlITUFDKGtleSk7
CiAKLSAgICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOwotICAgIGlmICghZ2V0Q29tbW9uQ3J5
cHRvQWxnb3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKKyAgICBpZiAo
IWlzQ3J5cHRvS2V5SE1BQyhrZXkpKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYgaG1hY0tl
eSA9IHRvQ3J5cHRvS2V5SE1BQyhrZXkpOwogCi0gICAgaWYgKCFobWFjS2V5KSB7CisgICAgQ0NI
bWFjQWxnb3JpdGhtIGFsZ29yaXRobTsKKyAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRo
bShobWFjUGFyYW1ldGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CiAgICAgICAgIGVjID0gTk9UX1NV
UFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tl
eS0+a2V5KCksIGRhdGEpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBj
YWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBobWFjS2V5LmtleSgpLCBkYXRhKTsKIAogICAg
IHByb21pc2UtPmZ1bGZpbGwoc2lnbmF0dXJlKTsKIH0KQEAgLTExNiwyMCArMTE2LDIwIEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c2lnbihjb25zdCBDcnkKIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtSE1BQzo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBleHBl
Y3RlZFNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+JiBkYXRhLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0ZXJz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyY+KHBhcmFtZXRl
cnMpOwotICAgIGNvbnN0IENyeXB0b0tleUhNQUMqIGhtYWNLZXkgPSBhc0NyeXB0b0tleUhNQUMo
a2V5KTsKIAotICAgIENDSG1hY0FsZ29yaXRobSBhbGdvcml0aG07Ci0gICAgaWYgKCFnZXRDb21t
b25DcnlwdG9BbGdvcml0aG0oaG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGhtKSkgeworICAg
IGlmICghaXNDcnlwdG9LZXlITUFDKGtleSkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjb25zdCBDcnlwdG9LZXlITUFDJiBo
bWFjS2V5ID0gdG9DcnlwdG9LZXlITUFDKGtleSk7CiAKLSAgICBpZiAoIWhtYWNLZXkpIHsKKyAg
ICBDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOworICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvQWxn
b3JpdGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKICAgICAgICAgZWMgPSBO
T1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBo
bWFjS2V5LT5rZXkoKSwgZGF0YSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNpZ25hdHVy
ZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOwog
CiAgICAgYm9vbCByZXN1bHQgPSBzaWduYXR1cmUuc2l6ZSgpID09IGV4cGVjdGVkU2lnbmF0dXJl
LnNlY29uZCAmJiAhbWVtY21wKHNpZ25hdHVyZS5kYXRhKCksIGV4cGVjdGVkU2lnbmF0dXJlLmZp
cnN0LCBzaWduYXR1cmUuc2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAJKHJldmlzaW9u
IDE1OTE3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnlNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmgiCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtU0hBMS5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNI
QTIyNC5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTI1Ni5oIgpAQCAtNDIsNiArNDMs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9ybVJlCiB7CiAgICAgcmVn
aXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6c19uYW1lLCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmNyZWF0
ZSk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19uYW1lLCBD
cnlwdG9BbGdvcml0aG1ITUFDOjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobUhNQUM6OmNy
ZWF0ZSk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzU6OnNfbmFtZSwgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnNfaWRlbnRp
ZmllciwgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmNyZWF0ZSk7CiAgICAgcmVn
aXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtU0hBMTo6c19uYW1lLCBDcnlwdG9BbGdvcml0
aG1TSEExOjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRobVNIQTE6OmNyZWF0ZSk7CiAgICAg
cmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtU0hBMjI0OjpzX25hbWUsIENyeXB0b0Fs
Z29yaXRobVNIQTIyNDo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1TSEEyMjQ6OmNyZWF0
ZSk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtU0hBMjU2OjpzX25hbWUs
IENyeXB0b0FsZ29yaXRobVNIQTI1Njo6c19pZGVudGlmaWVyLCBDcnlwdG9BbGdvcml0aG1TSEEy
NTY6OmNyZWF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJT
QU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9L
ZXlSU0FNYWMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9D
cnlwdG9LZXlSU0FNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleVJTQS5oIgor
CisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1E
ZXNjcmlwdGlvbkJ1aWxkZXIuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5o
IgorI2luY2x1ZGUgIkNyeXB0b0tleURhdGFSU0FDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ3J5
cHRvS2V5UGFpci5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorI2luY2x1ZGUgPENvbW1v
bkNyeXB0by9Db21tb25DcnlwdG9yLmg+CisKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCisj
aWYgX19oYXNfaW5jbHVkZSg8Q29tbW9uQ3J5cHRvL0NvbW1vblJTQUNyeXB0b3IuaD4pCisjaW5j
bHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vblJTQUNyeXB0b3IuaD4KKyNlbmRpZgorI2VuZGlmCisK
KyNpZm5kZWYgX0NDX1JTQUNSWVBUT1JfSF8KK2VudW0geworICAgIGNjUlNBS2V5UHVibGljICAg
ICAgICAgID0gMCwKKyAgICBjY1JTQUtleVByaXZhdGUgICAgICAgICA9IDEKK307Cit0eXBlZGVm
IHVpbnQzMl90IENDUlNBS2V5VHlwZTsKKyNlbmRpZgorCitleHRlcm4gIkMiIENDQ3J5cHRvclN0
YXR1cyBDQ1JTQUNyeXB0b3JDcmVhdGVGcm9tRGF0YShDQ1JTQUtleVR5cGUga2V5VHlwZSwgdWlu
dDhfdCAqbW9kdWx1cywgc2l6ZV90IG1vZHVsdXNMZW5ndGgsIHVpbnQ4X3QgKmV4cG9uZW50LCBz
aXplX3QgZXhwb25lbnRMZW5ndGgsIHVpbnQ4X3QgKnAsIHNpemVfdCBwTGVuZ3RoLCB1aW50OF90
ICpxLCBzaXplX3QgcUxlbmd0aCwgQ0NSU0FDcnlwdG9yUmVmICpyZWYpOworZXh0ZXJuICJDIiBD
Q0NyeXB0b3JTdGF0dXMgQ0NSU0FDcnlwdG9yR2VuZXJhdGVQYWlyKHNpemVfdCBrZXlzaXplLCB1
aW50MzJfdCBlLCBDQ1JTQUNyeXB0b3JSZWYgKnB1YmxpY0tleSwgQ0NSU0FDcnlwdG9yUmVmICpw
cml2YXRlS2V5KTsKK2V4dGVybiAiQyIgQ0NSU0FDcnlwdG9yUmVmIENDUlNBQ3J5cHRvckdldFB1
YmxpY0tleUZyb21Qcml2YXRlS2V5KENDUlNBQ3J5cHRvclJlZiBwcml2a2V5KTsKK2V4dGVybiAi
QyIgdm9pZCBDQ1JTQUNyeXB0b3JSZWxlYXNlKENDUlNBQ3J5cHRvclJlZiBrZXkpOworZXh0ZXJu
ICJDIiBDQ0NyeXB0b3JTdGF0dXMgQ0NSU0FHZXRLZXlDb21wb25lbnRzKENDUlNBQ3J5cHRvclJl
ZiByc2FLZXksIHVpbnQ4X3QgKm1vZHVsdXMsIHNpemVfdCAqbW9kdWx1c0xlbmd0aCwgdWludDhf
dCAqZXhwb25lbnQsIHNpemVfdCAqZXhwb25lbnRMZW5ndGgsIHVpbnQ4X3QgKnAsIHNpemVfdCAq
cExlbmd0aCwgdWludDhfdCAqcSwgc2l6ZV90ICpxTGVuZ3RoKTsKK2V4dGVybiAiQyIgQ0NSU0FL
ZXlUeXBlIENDUlNBR2V0S2V5VHlwZShDQ1JTQUNyeXB0b3JSZWYga2V5KTsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDcnlwdG9LZXlSU0E6OkNyeXB0b0tleVJTQShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0tleVR5cGUgdHlwZSwgUGxhdGZvcm1SU0FLZXkg
cGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQorICAg
IDogQ3J5cHRvS2V5KGlkZW50aWZpZXIsIHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZSkKKyAgICAs
IG1fcGxhdGZvcm1LZXkocGxhdGZvcm1LZXkpCisgICAgLCBtX3Jlc3RyaWN0ZWRUb1NwZWNpZmlj
SGFzaChmYWxzZSkKK3sKK30KKworUGFzc1JlZlB0cjxDcnlwdG9LZXlSU0E+IENyeXB0b0tleVJT
QTo6Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgQ3J5
cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0
b0tleVVzYWdlIHVzYWdlKQoreworICAgIGlmIChrZXlEYXRhLnR5cGUoKSA9PSBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHJpdmF0ZSAmJiAha2V5RGF0YS5oYXNBZGRpdGlvbmFs
UHJpdmF0ZUtleVBhcmFtZXRlcnMoKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIlByaXZhdGUg
a2V5cyB3aXRob3V0IGFkZGl0aW9uYWwgZGF0YSBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKGtleURhdGEub3RoZXJQcmltZUluZm9z
KCkuc2l6ZSgpKSB7CisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xNTQ0NDA3ND4gdHJhY2tz
IGFkZGluZyBzdXBwb3J0LgorICAgICAgICBXVEZMb2dBbHdheXMoIktleXMgd2l0aCBtb3JlIHRo
YW4gdHdvIHByaW1lcyBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgQ0NSU0FDcnlwdG9yUmVmIGNyeXB0b3I7CisgICAgQ0NDcnlwdG9yU3Rh
dHVzIHN0YXR1cyA9IENDUlNBQ3J5cHRvckNyZWF0ZUZyb21EYXRhKAorICAgICAgICBrZXlEYXRh
LnR5cGUoKSA9PSBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6VHlwZTo6UHVibGljID8gY2NS
U0FLZXlQdWJsaWMgOiBjY1JTQUtleVByaXZhdGUsCisgICAgICAgICh1aW50OF90KilrZXlEYXRh
Lm1vZHVsdXMoKS5kYXRhKCksIGtleURhdGEubW9kdWx1cygpLnNpemUoKSwKKyAgICAgICAgKHVp
bnQ4X3QqKWtleURhdGEuZXhwb25lbnQoKS5kYXRhKCksIGtleURhdGEuZXhwb25lbnQoKS5zaXpl
KCksCisgICAgICAgICh1aW50OF90KilrZXlEYXRhLmZpcnN0UHJpbWVJbmZvKCkucHJpbWVGYWN0
b3IuZGF0YSgpLCBrZXlEYXRhLmZpcnN0UHJpbWVJbmZvKCkucHJpbWVGYWN0b3Iuc2l6ZSgpLAor
ICAgICAgICAodWludDhfdCopa2V5RGF0YS5zZWNvbmRQcmltZUluZm8oKS5wcmltZUZhY3Rvci5k
YXRhKCksIGtleURhdGEuc2Vjb25kUHJpbWVJbmZvKCkucHJpbWVGYWN0b3Iuc2l6ZSgpLAorICAg
ICAgICAmY3J5cHRvcik7CisKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGRuJ3QgY3JlYXRlIFJTQSBrZXkgZnJvbSBkYXRhLCBlcnJvciAlZCIsIHN0YXR1cyk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q3J5cHRvS2V5UlNBKGlkZW50aWZpZXIsIGtleURhdGEudHlwZSgpID09IENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzOjpUeXBlOjpQdWJsaWMgPyBDcnlwdG9LZXlUeXBlOjpQdWJsaWMgOiBDcnlw
dG9LZXlUeXBlOjpQcml2YXRlLCBjcnlwdG9yLCBleHRyYWN0YWJsZSwgdXNhZ2UpKTsKK30KKwor
Q3J5cHRvS2V5UlNBOjp+Q3J5cHRvS2V5UlNBKCkKK3sKKyAgICBDQ1JTQUNyeXB0b3JSZWxlYXNl
KG1fcGxhdGZvcm1LZXkpOworfQorCit2b2lkIENyeXB0b0tleVJTQTo6cmVzdHJpY3RUb0hhc2go
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1fcmVzdHJpY3Rl
ZFRvU3BlY2lmaWNIYXNoID0gdHJ1ZTsKKyAgICBtX2hhc2ggPSBpZGVudGlmaWVyOworfQorCit2
b2lkIENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0
aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgQ3J5cHRvS2V5Ojpi
dWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOworCisgICAgQVNTRVJUKENDUlNBR2V0
S2V5VHlwZShtX3BsYXRmb3JtS2V5KSA9PSBjY1JTQUtleVB1YmxpYyB8fCBDQ1JTQUdldEtleVR5
cGUobV9wbGF0Zm9ybUtleSkgPT0gY2NSU0FLZXlQcml2YXRlKTsKKyAgICBib29sIHBsYXRmb3Jt
S2V5SXNQdWJsaWMgPSBDQ1JTQUdldEtleVR5cGUobV9wbGF0Zm9ybUtleSkgPT0gY2NSU0FLZXlQ
dWJsaWM7CisgICAgQ0NSU0FDcnlwdG9yUmVmIHB1YmxpY0tleSA9IHBsYXRmb3JtS2V5SXNQdWJs
aWMgPyBtX3BsYXRmb3JtS2V5IDogQ0NSU0FDcnlwdG9yR2V0UHVibGljS2V5RnJvbVByaXZhdGVL
ZXkobV9wbGF0Zm9ybUtleSk7CisKKyAgICBzaXplX3QgbW9kdWx1c0xlbmd0aDsKKyAgICBzaXpl
X3QgZXhwb25lbnRMZW5ndGg7CisgICAgdWludDhfdCBwdWJsaWNFeHBvbmVudFsxNjM4NF07Cisg
ICAgc2l6ZV90IGR1bW15OworICAgIHVpbnQ4X3QgYnVmWzE2Mzg0XTsKKyAgICBDQ0NyeXB0b3JT
dGF0dXMgc3RhdHVzID0gQ0NSU0FHZXRLZXlDb21wb25lbnRzKHB1YmxpY0tleSwgYnVmLCAmbW9k
dWx1c0xlbmd0aCwgcHVibGljRXhwb25lbnQsICZleHBvbmVudExlbmd0aCwgYnVmLCAmZHVtbXks
IGJ1ZiwgJmR1bW15KTsKKyAgICBpZiAoIXBsYXRmb3JtS2V5SXNQdWJsaWMpIHsKKyAgICAgICAg
Ly8gQ0NSU0FDcnlwdG9yR2V0UHVibGljS2V5RnJvbVByaXZhdGVLZXkgaGFzICJHZXQiIGluIHRo
ZSBuYW1lLCBidXQgaXRzIHJlc3VsdCBuZWVkcyB0byBiZSByZWxlYXNlZCAoc2VlIDxyZGFyOi8v
cHJvYmxlbS8xNTQ0OTY5Nz4pLgorICAgICAgICBDQ1JTQUNyeXB0b3JSZWxlYXNlKHB1YmxpY0tl
eSk7CisgICAgfQorICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3Vs
ZG4ndCBnZXQgUlNBIGtleSBjb21wb25lbnRzLCBzdGF0dXMgJWQiLCBzdGF0dXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYnVpbGRlci5hZGQoIm1vZHVsdXNMZW5ndGgiLCBtb2R1
bHVzTGVuZ3RoICogOCk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcHVibGljRXhwb25l
bnRWZWN0b3I7CisgICAgcHVibGljRXhwb25lbnRWZWN0b3IuYXBwZW5kKHB1YmxpY0V4cG9uZW50
LCBleHBvbmVudExlbmd0aCk7CisgICAgYnVpbGRlci5hZGQoInB1YmxpY0V4cG9uZW50IiwgcHVi
bGljRXhwb25lbnRWZWN0b3IpOworCisgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNo
KSB7CisgICAgICAgIGF1dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRl
RW1wdHlDbG9uZSgpOworICAgICAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUi
LCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkubmFtZUZvcklkZW50aWZpZXIobV9o
YXNoKSk7CisgICAgICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxk
ZXIpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgYmlnSW50ZWdlclRvVUludDMyKGNvbnN0IFZl
Y3RvcjxjaGFyPiYgYmlnSW50ZWdlciwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICsgNCA8IGJpZ0ludGVnZXIuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKGJpZ0ludGVnZXJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFRvbyBiaWcgdG8gZml0IGluIDMyIGJpdHMuCisgICAgfQorCisgICAgZm9yIChzaXpl
X3QgaSA9IGJpZ0ludGVnZXIuc2l6ZSgpID4gNCA/IGJpZ0ludGVnZXIuc2l6ZSgpIC0gNCA6IDA7
IGkgPCBiaWdJbnRlZ2VyLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlc3VsdCA8PD0gODsKKyAg
ICAgICAgcmVzdWx0ICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJpZ0ludGVnZXJbaV0p
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVy
YXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgdW5zaWduZWQgbW9k
dWx1c0xlbmd0aCwgY29uc3QgVmVjdG9yPGNoYXI+JiBwdWJsaWNFeHBvbmVudCwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4gcHJvbWlzZSkKK3sKKyAgICB1aW50MzJfdCBlOworICAgIGlmICghYmlnSW50ZWdlclRv
VUludDMyKHB1YmxpY0V4cG9uZW50LCBlKSkgeworICAgICAgICAvLyBBZGRpbmcgc3VwcG9ydCBp
cyB0cmFja2VkIGFzIDxyZGFyOi8vcHJvYmxlbS8xNTQ0NDAzND4uCisgICAgICAgIFdURkxvZ0Fs
d2F5cygiUHVibGljIGV4cG9uZW50IGlzIHRvbyBiaWcsIG5vdCBzdXBwb3J0ZWQgYnkgQ29tbW9u
Q3J5cHRvIik7CisgICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFByb21pc2VXcmFwcGVyKiBsb2NhbFByb21pc2UgPSBwcm9taXNl
LnJlbGVhc2UoKTsKKworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9nbG9iYWxfcXVl
dWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwgMCksIF57CisgICAgICAgIENDUlNB
Q3J5cHRvclJlZiBjY1B1YmxpY0tleTsKKyAgICAgICAgQ0NSU0FDcnlwdG9yUmVmIGNjUHJpdmF0
ZUtleTsKKyAgICAgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDUlNBQ3J5cHRvckdlbmVy
YXRlUGFpcihtb2R1bHVzTGVuZ3RoLCBlLCAmY2NQdWJsaWNLZXksICZjY1ByaXZhdGVLZXkpOwor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkIG5v
dCBnZW5lcmF0ZSBhIGtleSBwYWlyLCBzdGF0dXMgJWQiLCBzdGF0dXMpOworICAgICAgICAgICAg
ZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgICAg
ICAgICBsb2NhbFByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgbG9jYWxQcm9taXNlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcHVibGljS2V5ID0gQ3J5cHRv
S2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBlOjpQdWJsaWMsIGNjUHVibGlj
S2V5LCBleHRyYWN0YWJsZSwgdXNhZ2UpOworICAgICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBw
cml2YXRlS2V5ID0gQ3J5cHRvS2V5UlNBOjpjcmVhdGUoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBl
OjpQcml2YXRlLCBjY1ByaXZhdGVLZXksIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisgICAgICAgIENy
eXB0b0tleVBhaXIqIHJlc3VsdCA9IENyeXB0b0tleVBhaXI6OmNyZWF0ZShwdWJsaWNLZXkucmVs
ZWFzZSgpLCBwcml2YXRlS2V5LnJlbGVhc2UoKSkubGVha1JlZigpOworICAgICAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgbG9jYWxQ
cm9taXNlLT5mdWxmaWxsKGFkb3B0UmVmKHJlc3VsdCkpOworICAgICAgICAgICAgZGVsZXRlIGxv
Y2FsUHJvbWlzZTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksMTEgKzE3OSwxMCBAQCB2b2lkIENyeXB0b0tleVJTQTo6Z2VuZXJhdGVQ
YWlyKENyeXB0b0FsCiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBwdWJsaWNLZXkgPSBDcnlwdG9LZXlS
U0E6OmNyZWF0ZShhbGdvcml0aG0sIENyeXB0b0tleVR5cGU6OlB1YmxpYywgY2NQdWJsaWNLZXks
IGV4dHJhY3RhYmxlLCB1c2FnZSk7Ci0gICAgICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHByaXZh
dGVLZXkgPSBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIENyeXB0b0tleVR5cGU6OlBy
aXZhdGUsIGNjUHJpdmF0ZUtleSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKLSAgICAgICAgQ3J5cHRv
S2V5UGFpciogcmVzdWx0ID0gQ3J5cHRvS2V5UGFpcjo6Y3JlYXRlKHB1YmxpY0tleS5yZWxlYXNl
KCksIHByaXZhdGVLZXkucmVsZWFzZSgpKS5sZWFrUmVmKCk7CiAgICAgICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgICAgICBsb2NhbFByb21p
c2UtPmZ1bGZpbGwoYWRvcHRSZWYocmVzdWx0KSk7CisgICAgICAgICAgICBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiBwdWJsaWNLZXkgPSBDcnlwdG9LZXlSU0E6OmNyZWF0ZShhbGdvcml0aG0sIENyeXB0
b0tleVR5cGU6OlB1YmxpYywgY2NQdWJsaWNLZXksIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisgICAg
ICAgICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBwcml2YXRlS2V5ID0gQ3J5cHRvS2V5UlNBOjpj
cmVhdGUoYWxnb3JpdGhtLCBDcnlwdG9LZXlUeXBlOjpQcml2YXRlLCBjY1ByaXZhdGVLZXksIGV4
dHJhY3RhYmxlLCB1c2FnZSk7CisgICAgICAgICAgICBsb2NhbFByb21pc2UtPmZ1bGZpbGwoQ3J5
cHRvS2V5UGFpcjo6Y3JlYXRlKHB1YmxpY0tleS5yZWxlYXNlKCksIHByaXZhdGVLZXkucmVsZWFz
ZSgpKSk7CiAgICAgICAgICAgICBkZWxldGUgbG9jYWxQcm9taXNlOwogICAgICAgICB9KTsKICAg
ICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29y
aXRobUhtYWNLZXlQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmgJKHJldmlzaW9uIDE1OTE3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUht
YWNLZXlQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zIEZJTkFMIDog
cHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgorICAgIENyeXB0b0Fs
Z29yaXRobUhtYWNLZXlQYXJhbXMoKQorICAgICAgICA6IGhhc0xlbmd0aChmYWxzZSkKKyAgICB7
CisgICAgfQorCiAgICAgLy8gVGhlIGlubmVyIGhhc2ggZnVuY3Rpb24gdG8gdXNlLgogICAgIENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNh
S2V5R2VuUGFyYW1zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFy
YW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9BbGdvcml0aG1Sc2FL
ZXlHZW5QYXJhbXNfaAorI2RlZmluZSBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXNfaAor
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3J5cHRvQWxnb3Jp
dGhtUnNhS2V5R2VuUGFyYW1zIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMgeworcHVibGljOgorICAgIC8vIFRoZSBsZW5ndGgsIGluIGJpdHMsIG9mIHRoZSBSU0EgbW9k
dWx1cy4KKyAgICB1bnNpZ25lZCBtb2R1bHVzTGVuZ3RoOworICAgIC8vIFRoZSBSU0EgcHVibGlj
IGV4cG9uZW50LCBlbmNvZGVkIGFzIEJpZ0ludGVnZXIuCisgICAgVmVjdG9yPGNoYXI+IHB1Ymxp
Y0V4cG9uZW50OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisj
ZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVJzYVNzYUtleVBhcmFtcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxn
b3JpdGhtUnNhU3NhS2V5UGFyYW1zX2gKKyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5
CisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBwYXJhbWV0ZXJzIGNsYXNzIGlzIGN1cnJl
bnRseSBub3Qgc3BlY2lmaWVkIGluIFdlYkNyeXB0by4KKy8vIEl0IGlzIG5lY2Vzc2FyeSB0byBz
dXBwb3J0IGltcG9ydCBmcm9tIEpXSywgd2hpY2ggdHJlYXRzIGhhc2ggZnVuY3Rpb24gYXMgcGFy
dCBvZiBhbGdvcml0aG0KKy8vIGlkZW50aWZpZXIsIHNvIHdlIG5lZWQgdG8gcmVtZW1iZXIgaXQg
dG8gY29tcGFyZSB3aXRoIG9uZSBwYXNzZWQgdG8gc2lnbiBvciB2ZXJpZnkgZnVuY3Rpb25zLgor
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zIEZJTkFMIDogcHVibGljIENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMgeworcHVibGljOgorICAgIENyeXB0b0FsZ29yaXRobVJzYVNz
YUtleVBhcmFtcygpCisgICAgICAgIDogaGFzSGFzaChmYWxzZSkKKyAgICB7CisgICAgfQorCisg
ICAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4KKyAgICBib29sIGhhc0hhc2g7CisgICAg
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoOworfTsKKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFNVQlRMRV9DUllQVE8pCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1z
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRo
bVJzYVNzYVBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zX2gKKyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtUnNh
U3NhUGFyYW1zX2gKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzLmgiCisKKyNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcnlwdG9BbGdvcml0aG1S
c2FTc2FQYXJhbXMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7Citw
dWJsaWM6CisgICAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIHRvIHVzZS4KKyAgICBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2g7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExF
X0NSWVBUTykKKyNlbmRpZiAvLyBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXNfaApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTU5MTc5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMTEtMTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGtleSBnZW5lcmF0aW9uIGFuZCBKV0sg
aW1wb3J0IGZvciBSU0FTU0EtUEtDUzEtdjFfNQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KKworICAgICAgICAqIGNyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qczoKKyAg
ICAgICAgKGhleFRvQXJyYXlCdWZmZXIpOiBGaXhlZCBhIHR5cG8KKyAgICAgICAgKEJhc2U2NFVS
TC5zdHJpbmdpZnkpOgorICAgICAgICAoQmFzZTY0VVJMLnBhcnNlKToKKyAgICAgICAgQWRkZWQg
aGVscGVycyB0byBkZWFsIHdpdGggQmFzZTY0VVJMLCBhcyBuZWVkZWQgZm9yIEpXSy4KKworICAg
ICAgICAqIGNyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJhdGUta2V5LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFf
NS1nZW5lcmF0ZS1rZXkuaHRtbDogQWRkZWQuCisgICAgICAgICogY3J5cHRvL3N1YnRsZS9yc2Fz
c2EtcGtjczEtdjFfNS1pbXBvcnQtandrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
Y3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1pbXBvcnQtandrLmh0bWw6IEFkZGVkLgor
CiAyMDEzLTExLTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgV2ViQ3J5cHRvIG9uIE1vdW50YWluIExpb24KSW5kZXg6IExheW91dFRlc3Rz
L2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtZ2VuZXJhdGUta2V5LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12
MV81LWdlbmVyYXRlLWtleS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2NzMS12MV81LWdlbmVyYXRlLWtleS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorVGVzdCBnZW5lcmF0aW5nIGFuIFJT
QSBrZXkgcGFpciBmb3IgUlNBU1NBLVBLQ1MxLXYxXzUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitHZW5lcmF0aW5nIGEga2V5IHBhaXIuLi4KK1BBU1Mga2V5UGFpci50b1N0cmlu
ZygpIGlzICdbb2JqZWN0IEtleVBhaXJdJworUEFTUyBrZXlQYWlyLnB1YmxpY0tleS50eXBlIGlz
ICdwdWJsaWMnCitQQVNTIGtleVBhaXIucHVibGljS2V5LmFsZ29yaXRobS5uYW1lIGlzICdyc2Fz
c2EtcGtjczEtdjFfNScKK1BBU1Mga2V5UGFpci5wdWJsaWNLZXkuYWxnb3JpdGhtLm1vZHVsdXNM
ZW5ndGggaXMgMjA0OAorUEFTUyBieXRlQXJyYXlUb0hleFN0cmluZyhrZXlQYWlyLnB1YmxpY0tl
eS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQpIGlzICdbMDEgMDAgMDFdJworUEFTUyBrZXlQYWly
LnB1YmxpY0tleS5hbGdvcml0aG0uaGFzaCBpcyB1bmRlZmluZWQuCitQQVNTIGtleVBhaXIucHJp
dmF0ZUtleS50eXBlIGlzICdwcml2YXRlJworUEFTUyBrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3Jp
dGhtLm5hbWUgaXMgJ3JzYXNzYS1wa2NzMS12MV81JworUEFTUyBrZXlQYWlyLnByaXZhdGVLZXku
YWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggaXMgMjA0OAorUEFTUyBieXRlQXJyYXlUb0hleFN0cmlu
ZyhrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSBpcyAnWzAxIDAw
IDAxXScKK1BBU1Mga2V5UGFpci5wcml2YXRlS2V5LmFsZ29yaXRobS5oYXNoIGlzIHVuZGVmaW5l
ZC4KKworVGVzdGluZyB0aGF0IGN1c3RvbSBhdHRyaWJ1dGVzIG9uIGtleXMgc3Vydml2ZSBnYXJi
YWdlIGNvbGxlY3Rpb24uLi4KK1BBU1Mga2V5UGFpci5wdWJsaWNLZXkuZm9vIGlzICdiYXInCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXku
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL3JzYXNzYS1wa2Nz
MS12MV81LWdlbmVyYXRlLWtleS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5
cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEtdjFfNS1nZW5lcmF0ZS1rZXkuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGdlbmVyYXRpbmcgYW4gUlNBIGtleSBwYWlyIGZv
ciBSU0FTU0EtUEtDUzEtdjFfNS4iKTsKKworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICgh
d2luZG93LnN1YnRsZSkKKyAgICB3aW5kb3cuY3J5cHRvLnN1YnRsZSA9IHdpbmRvdy5jcnlwdG8u
d2Via2l0U3VidGxlOworCit2YXIgYWxnb3JpdGhtS2V5R2VuID0geworICAgIG5hbWU6ICJSU0FT
U0EtUEtDUzEtdjFfNSIsCisgICAgLy8gUnNhS2V5R2VuUGFyYW1zCisgICAgbW9kdWx1c0xlbmd0
aDogMjA0OCwKKyAgICBwdWJsaWNFeHBvbmVudDogbmV3IFVpbnQ4QXJyYXkoWzB4MDEsIDB4MDAs
IDB4MDFdKSwgIC8vIEVxdWl2YWxlbnQgdG8gNjU1MzcKK307Cit2YXIgZXh0cmFjdGFibGUgPSB0
cnVlOworCitkZWJ1ZygiR2VuZXJhdGluZyBhIGtleSBwYWlyLi4uIik7CitjcnlwdG8uc3VidGxl
LmdlbmVyYXRlS2V5KGFsZ29yaXRobUtleUdlbiwgZXh0cmFjdGFibGUsIFsic2lnbiIsICJ2ZXJp
ZnkiXSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBrZXlQYWlyID0gcmVzdWx0OworICAg
IHNob3VsZEJlKCJrZXlQYWlyLnRvU3RyaW5nKCkiLCAiJ1tvYmplY3QgS2V5UGFpcl0nIik7Cisg
ICAgc2hvdWxkQmUoImtleVBhaXIucHVibGljS2V5LnR5cGUiLCAiJ3B1YmxpYyciKTsKKyAgICBz
aG91bGRCZSgia2V5UGFpci5wdWJsaWNLZXkuYWxnb3JpdGhtLm5hbWUiLCAiJ3JzYXNzYS1wa2Nz
MS12MV81JyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnB1YmxpY0tleS5hbGdvcml0aG0ubW9k
dWx1c0xlbmd0aCIsICIyMDQ4Iik7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5n
KGtleVBhaXIucHVibGljS2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkiLCAiJ1swMSAwMCAw
MV0nIik7CisgICAgc2hvdWxkQmVVbmRlZmluZWQoImtleVBhaXIucHVibGljS2V5LmFsZ29yaXRo
bS5oYXNoIik7CisgICAgc2hvdWxkQmUoImtleVBhaXIucHJpdmF0ZUtleS50eXBlIiwgIidwcml2
YXRlJyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLm5hbWUi
LCAiJ3JzYXNzYS1wa2NzMS12MV81JyIpOworICAgIHNob3VsZEJlKCJrZXlQYWlyLnByaXZhdGVL
ZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgiLCAiMjA0OCIpOworICAgIHNob3VsZEJlKCJieXRl
QXJyYXlUb0hleFN0cmluZyhrZXlQYWlyLnByaXZhdGVLZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9u
ZW50KSIsICInWzAxIDAwIDAxXSciKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgia2V5UGFpci5w
cml2YXRlS2V5LmFsZ29yaXRobS5oYXNoIik7CisKKyAgICBkZWJ1ZygiXG5UZXN0aW5nIHRoYXQg
Y3VzdG9tIGF0dHJpYnV0ZXMgb24ga2V5cyBzdXJ2aXZlIGdhcmJhZ2UgY29sbGVjdGlvbi4uLiIp
OworICAgIGtleVBhaXIucHVibGljS2V5LmZvbyA9ICJiYXIiOworICAgIGdjKCk7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgZ2MoKTsKKyAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJrZXlQYWlyLnB1YmxpY0tleS5mb28i
LCAiJ2JhciciKTsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9LCAwKTsK
KyAgICB9LCAwKTsKK30pOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2Et
cGtjczEtdjFfNS1pbXBvcnQtandrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorVGVzdCBpbXBvcnRpbmcgYW4g
UlNBIGtleSBmb3IgUlNBU1NBLVBLQ1MxLXYxXzUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitJbXBvcnRpbmcgYSBwdWJsaWMga2V5Li4uCitQQVNTIHB1YmxpY0tleS50b1N0cmlu
ZygpIGlzICdbb2JqZWN0IEtleV0nCitQQVNTIHB1YmxpY0tleS50eXBlIGlzICdwdWJsaWMnCitQ
QVNTIHB1YmxpY0tleS51c2FnZXMgaXMgWydzaWduJywndmVyaWZ5J10KK1BBU1MgcHVibGljS2V5
LmFsZ29yaXRobS5uYW1lIGlzICdyc2Fzc2EtcGtjczEtdjFfNScKK1BBU1MgcHVibGljS2V5LmFs
Z29yaXRobS5tb2R1bHVzTGVuZ3RoIGlzIDIwNDgKK1BBU1MgYnl0ZUFycmF5VG9IZXhTdHJpbmco
cHVibGljS2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCkgaXMgJ1swMSAwMCAwMV0nCitQQVNT
IHB1YmxpY0tleS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdzaGEtMjU2JworCitJbXBvcnRpbmcg
YSBwcml2YXRlIGtleS4uLgorUEFTUyBwcml2YXRlS2V5LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3Qg
S2V5XScKK1BBU1MgcHJpdmF0ZUtleS50eXBlIGlzICdwcml2YXRlJworUEFTUyBwcml2YXRlS2V5
LnVzYWdlcyBpcyBbJ3NpZ24nLCd2ZXJpZnknXQorUEFTUyBwcml2YXRlS2V5LmFsZ29yaXRobS5u
YW1lIGlzICdyc2Fzc2EtcGtjczEtdjFfNScKK1BBU1MgcHJpdmF0ZUtleS5hbGdvcml0aG0ubW9k
dWx1c0xlbmd0aCBpcyAyMDQ4CitQQVNTIGJ5dGVBcnJheVRvSGV4U3RyaW5nKHByaXZhdGVLZXku
YWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSBpcyAnWzAxIDAwIDAxXScKK1BBU1MgcHJpdmF0ZUtl
eS5hbGdvcml0aG0uaGFzaC5uYW1lIGlzICdzaGEtMjU2JworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2NyeXB0by9z
dWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcnNhc3NhLXBrY3MxLXYxXzUtaW1wb3J0LWp3ay5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yc2Fzc2EtcGtjczEt
djFfNS1pbXBvcnQtandrLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1v
bi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCBpbXBvcnRpbmcgYW4gUlNBIGtleSBmb3IgUlNBU1NBLVBLQ1MxLXYxXzUuIik7CisKK2pzVGVz
dElzQXN5bmMgPSB0cnVlOworCitpZiAoIXdpbmRvdy5zdWJ0bGUpCisgICAgd2luZG93LmNyeXB0
by5zdWJ0bGUgPSB3aW5kb3cuY3J5cHRvLndlYmtpdFN1YnRsZTsKKwordmFyIGV4dHJhY3RhYmxl
ID0gdHJ1ZTsKKwordmFyIHB1YmxpY0tleUpTT04gPSB7CisgICAga3R5OiAiUlNBIiwKKyAgICBh
bGc6ICJSUzI1NiIsCisgICAgbjogInJjQ1VDdjdPYzFIVmFtMURJaEN6cWtuVGhXYXdPcDhRTGs4
Wml5MnAxMEJ5alFGQ2Fqb0ZpeXVBV2wtUjFXWFphZjR4aXRMUnJhY1Q5YWdwekl6Yy1NYkxTSElH
Z1dRR08yMWxHaUlteTVmdFotRDhiSEFxUnoyeTE1cHpENGM0Q0VvdTdYU1NMRG9SblIwUUc1TXNE
aEQ2czJnVjltd0hrcnRrQ3h0TVdkQmktNzdhczh3R21sTlJsZGNPU2daRExLOFVuQ1NnQTFPZ3Va
OTg5YkZ5Yzh0T09FSWIweFVTZlBTejNMUFNDbnlZejY4YURqbUtWZU5ILWlnODU3T1NjeVdiR3lF
eTNCaXc2NHF1bjNqdVVsTldzSjN6bmdrT2R0ZVlXeXR4NVFyNFhLTnM2Ui1NeXlxNzJLVXAwMm1K
RFppaXlpZ2x4TUxfaTMtX0NlZWNDdyIsCisgICAgZTogIkFRQUIiCit9OworCit2YXIgcHJpdmF0
ZUtleUpTT04gPSB7CisgICAga3R5OiAiUlNBIiwKKyAgICBhbGc6ICJSUzI1NiIsCisgICAgbjog
InJjQ1VDdjdPYzFIVmFtMURJaEN6cWtuVGhXYXdPcDhRTGs4Wml5MnAxMEJ5alFGQ2Fqb0ZpeXVB
V2wtUjFXWFphZjR4aXRMUnJhY1Q5YWdwekl6Yy1NYkxTSElHZ1dRR08yMWxHaUlteTVmdFotRDhi
SEFxUnoyeTE1cHpENGM0Q0VvdTdYU1NMRG9SblIwUUc1TXNEaEQ2czJnVjltd0hrcnRrQ3h0TVdk
QmktNzdhczh3R21sTlJsZGNPU2daRExLOFVuQ1NnQTFPZ3VaOTg5YkZ5Yzh0T09FSWIweFVTZlBT
ejNMUFNDbnlZejY4YURqbUtWZU5ILWlnODU3T1NjeVdiR3lFeTNCaXc2NHF1bjNqdVVsTldzSjN6
bmdrT2R0ZVlXeXR4NVFyNFhLTnM2Ui1NeXlxNzJLVXAwMm1KRFppaXlpZ2x4TUxfaTMtX0NlZWND
dyIsCisgICAgZTogIkFRQUIiLAorICAgIGQ6ICJlTkxTMzdhQ3o3UlhTTlBEX0R0TEJKNmo1VDhj
U3hkelJCQ2pQYUk2V2NHcUpwMTZscTNVVHd1b0RMQXFsQTlvR1ltMjM4ZHNJV3B1dWNQX2xRdGJX
ZS03U3B4b0k2X3ZtWUdmN1lWVUh2MS1ERjlxaU9tU3JNbWR4TW5WT3pZWFk4UmFUNnRoUGpuX0o1
Y2ZMVjJ4SV9Md3NyTXRtcGRTeU5sZ1gwelRVaHd0dWFoZ0FLTUVDaFlqSDJFbmpIZEh3NnNZMi13
QXBkY1FJN1VMRTBvbzVSemJRWnBtdWhjTjloaUJjMEwzaGhGMHFvNTBtYmwwMl82NV9HUTdEcFZr
WEJ4TmdSQkx6bFBhYm16ekcyb0FoZmVmTGdZbVNDMW9wYUNrWEU2dlJXUU5XTkw0NVJaTlpGWU0z
dW9KZ2hPTXFHZW9jTTBCcGpkQ2hIclBPbEZ2U1EiLAorICAgIHA6ICI0bWlUdUFqS01lSDV1SjVL
QjM5N1FVd2hia1lFZ1NiY0EybWlmbVNrdkUyMDE4Z2I1NXFrQkhLMWVWcnlmMV9tNDNMTmxjNk9f
YWs2Z2Z6ZFpJWnZTNU5DR2pQbDBxMDlwbFVwdThxRk9Tc3BCd0E2N3FHSDc2bEZsWkxuX2Q0eWds
Uzd3ZkxydTRfNVlzOHFMTHMtRHFWTHZpd3Bvc09ueXlXcXdNNUFYcDAiLAorICAgIHE6ICJ4SFly
emtpdnRtbnpfc0djaG5XR2MwcS1wRE9rS2ljcHRScHYycE1GSUlYeG5GWDVhTWVFWElaalZ1alh0
d1V5MVVsRklOMkdaSlN2eTVLSjc5bXVfWHlObkZITXplZEgtQTNlZTN1OGgxVVVyWkYtdlV1MV9l
NFVfeDY3Tk4xZGVkelVTS3luTjdwRmwzT2t1U2hNQldHVi1jd3pPUGRjVkFmVnVabHhVTWMiLAor
ICAgIGRwOiAiZkJ6RHpZRFVCbUJRR29wN0huMGR2Zl9UMjdWNlJxcGN0V28wNzRDUVpjRmJQMmF0
RlZ0S1NqM3ZpV1QzeGlkMlZIemNnaURIZGZwTTNuRVZsRU8xd3dJb25HQ1N2ZGpHRU9aaWlGVk9q
clpBT1Z4QThndU9qeXlGdnFiWGtlMDZWd1BJSVZ2ZktlU1UyenVoYlBfXzF0dDZGX2Z4b3c0S2Iy
eG9uR1QwR0drIiwKKyAgICBkcTogImptRTJEaUlQZGh3RGdMWEFRcElhQnFRODFiTzNYZlZUX0xS
VUxBd3d3d2xQdVFWMTQ4SDA0emxoOVRKNlkyR1pIWW9rVjFVMGVPQnBKeGZrYjdkTFl0cEpwdWlC
alJmNHlJVUVvR2xra0lfUWxKbkZTRnItWWpHUmRmTkhxV0JreGxTTVpMNzcwUjltSUFUbmRHa0g3
ejV4LXI5S3dCWkZDNEZDRzJoZ196RSIsCisgICAgcWk6ICJZQ1hfcEx3Yk1CQTFUaFZIMFdjd21u
eXRxTmNyTUNFd1RtN0J5QTJlVTZuV2JRclVMdmY3bTlfa3pmTFVjanNucEFWbEJRRzVKTVhNeTBT
cTRwdHdieXdzYTUtRzhLQU9PT1IyTDN2NGhDLUV5czlmdGdGTV8zaTBvNDBlZVFINGIzaGFQYm50
ckllTWc4SXpsT3VWWUtmOS0yUXVLRG9XZVJkZDdOc2R4VGsiCit9OworCitkZWJ1ZygiSW1wb3J0
aW5nIGEgcHVibGljIGtleS4uLiIpOworY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIsIGFz
Y2lpVG9BcnJheUJ1ZmZlcihKU09OLnN0cmluZ2lmeShwdWJsaWNLZXlKU09OKSksIG51bGwsIGV4
dHJhY3RhYmxlLCBbInNpZ24iLCAidmVyaWZ5Il0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgcHVibGljS2V5ID0gcmVzdWx0OworICAgIHNob3VsZEJlKCJwdWJsaWNLZXkudG9TdHJpbmco
KSIsICInW29iamVjdCBLZXldJyIpOworICAgIHNob3VsZEJlKCJwdWJsaWNLZXkudHlwZSIsICIn
cHVibGljJyIpOworICAgIHNob3VsZEJlKCJwdWJsaWNLZXkudXNhZ2VzIiwgIlsnc2lnbicsJ3Zl
cmlmeSddIik7CisgICAgc2hvdWxkQmUoInB1YmxpY0tleS5hbGdvcml0aG0ubmFtZSIsICIncnNh
c3NhLXBrY3MxLXYxXzUnIik7CisgICAgc2hvdWxkQmUoInB1YmxpY0tleS5hbGdvcml0aG0ubW9k
dWx1c0xlbmd0aCIsICIyMDQ4Iik7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5n
KHB1YmxpY0tleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQpIiwgIidbMDEgMDAgMDFdJyIpOwor
ICAgIHNob3VsZEJlKCJwdWJsaWNLZXkuYWxnb3JpdGhtLmhhc2gubmFtZSIsICInc2hhLTI1Nici
KTsKKyAgICBkZWJ1ZygiXG5JbXBvcnRpbmcgYSBwcml2YXRlIGtleS4uLiIpOworICAgIHJldHVy
biBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgiandrIiwgYXNjaWlUb0FycmF5QnVmZmVyKEpTT04u
c3RyaW5naWZ5KHByaXZhdGVLZXlKU09OKSksIG51bGwsIGV4dHJhY3RhYmxlLCBbInNpZ24iLCAi
dmVyaWZ5Il0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAgICBwcml2YXRlS2V5ID0g
cmVzdWx0OworICAgIHNob3VsZEJlKCJwcml2YXRlS2V5LnRvU3RyaW5nKCkiLCAiJ1tvYmplY3Qg
S2V5XSciKTsKKyAgICBzaG91bGRCZSgicHJpdmF0ZUtleS50eXBlIiwgIidwcml2YXRlJyIpOwor
ICAgIHNob3VsZEJlKCJwcml2YXRlS2V5LnVzYWdlcyIsICJbJ3NpZ24nLCd2ZXJpZnknXSIpOwor
ICAgIHNob3VsZEJlKCJwcml2YXRlS2V5LmFsZ29yaXRobS5uYW1lIiwgIidyc2Fzc2EtcGtjczEt
djFfNSciKTsKKyAgICBzaG91bGRCZSgicHJpdmF0ZUtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0
aCIsICIyMDQ4Iik7CisgICAgc2hvdWxkQmUoImJ5dGVBcnJheVRvSGV4U3RyaW5nKHByaXZhdGVL
ZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSIsICInWzAxIDAwIDAxXSciKTsKKyAgICBzaG91
bGRCZSgicHJpdmF0ZUtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidzaGEtMjU2JyIpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29tbW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvcmVzb3VyY2VzL2NvbW1vbi5qcwkocmV2
aXNpb24gMTU5MTc5KQorKysgTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9yZXNvdXJjZXMvY29t
bW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMjQgQEAgZnVuY3Rpb24gYXNjaWlU
b0FycmF5QnVmZmVyKHN0cikKIGZ1bmN0aW9uIGhleFRvQXJyYXlCdWZmZXIoc3RyKQogewogICAg
IGlmIChzdHIubGVuZ3RoICUgMikKLSAgICAgICAgdGhyb3cgIkhleCBzdHJpbmcgbGVuZ2h0IG11
c3QgYmUgZXZlbiI7CisgICAgICAgIHRocm93ICJIZXggc3RyaW5nIGxlbmd0aCBtdXN0IGJlIGV2
ZW4iOwogICAgIHZhciBjaGFycyA9IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxl
bmd0aDsgaSArPSAyKQogICAgICAgICBjaGFycy5wdXNoKHBhcnNlSW50KHN0ci5zdWJzdHIoaSwg
MiksIDE2KSk7CiAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNoYXJzKTsKIH0KIAordmFyIEJh
c2U2NFVSTCA9IHsKKyAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhKSB7CisgICAgICAgIHZhciBi
YXNlNjRzdHJpbmcgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSkpOworICAg
ICAgICByZXR1cm4gYmFzZTY0c3RyaW5nLnJlcGxhY2UoLz0vZywgIiIpLnJlcGxhY2UoL1wrL2cs
ICItIikucmVwbGFjZSgvXC8vZywgIl8iKTsKKyAgICB9LAorICAgIHBhcnNlOiBmdW5jdGlvbiAo
cykgeworICAgICAgICBzID0gcy5yZXBsYWNlKC8tL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIp
LnJlcGxhY2UoL1xzL2csICcnKTsKKyAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5
LnByb3RvdHlwZS5tYXAuY2FsbChhdG9iKHMpLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jaGFy
Q29kZUF0KDApIH0pKTsKKyAgICB9Cit9OworCiBmdW5jdGlvbiBwcmludFJlamVjdGVkUmVzdWx0
KHZhbHVlKQogewogICAgIGRlYnVnKCIgICAgcmVqZWN0ZWQgd2l0aCB2YWx1ZSBvZiAiICsgdmFs
dWUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>