<?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>175539</bug_id>
          
          <creation_ts>2017-08-14 10:25:36 -0700</creation_ts>
          <short_desc>[WebCrypto] Push WorkQueue dispatches for AES algorithms into shared code</short_desc>
          <delta_ts>2017-08-28 01:17:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>buildbot</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1338388</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-14 10:25:36 -0700</bug_when>
    <thetext>[WebCrypto] Push WorkQueue dispatches for AES algorithms into shared code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338394</commentid>
    <comment_count>1</comment_count>
      <attachid>318047</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-14 10:37:06 -0700</bug_when>
    <thetext>Created attachment 318047
WIP patch

Needs adjustments for the Mac implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338395</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-14 10:38:36 -0700</bug_when>
    <thetext>Attachment 318047 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:196:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:204:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:167:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:175:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:180:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:188:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:118:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:126:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 11 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338425</commentid>
    <comment_count>3</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-08-14 12:06:04 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #0)
&gt; [WebCrypto] Push WorkQueue dispatches for AES algorithms into shared code

Sounds good to me but please make the &apos;Mac&apos; part work as well. I should bear this in mind at the very beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338429</commentid>
    <comment_count>4</comment_count>
      <attachid>318052</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-14 12:23:16 -0700</bug_when>
    <thetext>Created attachment 318052
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338430</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-14 12:24:22 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #4)
&gt; Created attachment 318052 [details]
&gt; WIP patch

This now contains appropriate changes to the Mac port. Running it through EWS first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338432</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-14 12:25:40 -0700</bug_when>
    <thetext>Attachment 318052 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:196:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:204:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:167:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:175:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:180:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:188:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:142:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:148:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:76:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:81:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:69:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:75:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:66:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:71:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:66:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:72:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:118:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:126:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 21 in 21 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>1339159</commentid>
    <comment_count>7</comment_count>
      <attachid>318258</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-16 06:54:53 -0700</bug_when>
    <thetext>Created attachment 318258
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339160</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-16 06:57:22 -0700</bug_when>
    <thetext>Attachment 318258 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:198:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:209:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:169:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:180:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:182:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:193:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:142:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:150:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:76:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:83:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:69:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:77:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:66:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:71:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:66:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:74:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:119:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:127:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 21 in 21 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>1339978</commentid>
    <comment_count>9</comment_count>
      <attachid>318478</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-17 23:25:02 -0700</bug_when>
    <thetext>Created attachment 318478
Patch

Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339979</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-17 23:26:53 -0700</bug_when>
    <thetext>Attachment 318478 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:198:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:209:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:169:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:180:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:182:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:193:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:141:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:149:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:75:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:82:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:68:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:76:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:66:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:71:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:65:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:73:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:119:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:127:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 20 in 21 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>1340254</commentid>
    <comment_count>11</comment_count>
      <attachid>318478</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-08-18 15:00:43 -0700</bug_when>
    <thetext>Comment on attachment 318478
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        Vector object to perform any additional transformation (e.g. padding).

I wonder if this &quot;reuse&quot; could potential lead to buffer overflow. I prefer it to be a const reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340535</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-21 00:24:52 -0700</bug_when>
    <thetext>(In reply to Jiewen Tan from comment #11)
&gt; Comment on attachment 318478 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318478&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:22
&gt; &gt; +        Vector object to perform any additional transformation (e.g. padding).
&gt; 
&gt; I wonder if this &quot;reuse&quot; could potential lead to buffer overflow. I prefer
&gt; it to be a const reference.

OK, let&apos;s adopt that. The libgcrypt implementation will copy the data where the padding has to be introduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340562</commentid>
    <comment_count>13</comment_count>
      <attachid>318623</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-21 04:05:31 -0700</bug_when>
    <thetext>Created attachment 318623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340563</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-21 04:07:49 -0700</bug_when>
    <thetext>Attachment 318623 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:198:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:209:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:169:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:180:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:182:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:193:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:141:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:149:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:75:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:82:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:65:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:73:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:62:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:67:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:65:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:73:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:118:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:126:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 20 in 21 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>1342339</commentid>
    <comment_count>15</comment_count>
      <attachid>319068</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-25 00:50:46 -0700</bug_when>
    <thetext>Created attachment 319068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342341</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-25 00:52:18 -0700</bug_when>
    <thetext>Attachment 319068 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:198:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:209:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:169:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:180:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:182:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:193:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:141:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:149:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:75:  CryptoAlgorithmAES_GCM::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:82:  CryptoAlgorithmAES_GCM::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:65:  CryptoAlgorithmAES_CBC::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:73:  CryptoAlgorithmAES_CBC::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:62:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:67:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:33:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:38:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:65:  CryptoAlgorithmAES_CFB::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:73:  CryptoAlgorithmAES_CFB::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:118:  CryptoAlgorithmAES_KW::platformWrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:126:  CryptoAlgorithmAES_KW::platformUnwrapKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 20 in 21 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>1342743</commentid>
    <comment_count>17</comment_count>
      <attachid>319068</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-27 17:04:09 -0700</bug_when>
    <thetext>Comment on attachment 319068
Patch

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

&gt; Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h:54
&gt; +    static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; platformEncrypt(CryptoAlgorithmParameters&amp;, const CryptoKey&amp;, const Vector&lt;uint8_t&gt;&amp;);
&gt; +    static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; platformDecrypt(CryptoAlgorithmParameters&amp;, const CryptoKey&amp;, const Vector&lt;uint8_t&gt;&amp;);

Seems like these should take CryptoAlgorithmAesCbcCfbParams rather than CryptoAlgorithmParameters, and CryptoKeyAES rather than CryptoKey. (Same for others below). Not needed for this change, but seems like a nice improvement for the future so the platforms don&apos;t have to do the downcast themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342762</commentid>
    <comment_count>18</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-28 00:43:10 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #17)
&gt; Comment on attachment 319068 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319068&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h:54
&gt; &gt; +    static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; platformEncrypt(CryptoAlgorithmParameters&amp;, const CryptoKey&amp;, const Vector&lt;uint8_t&gt;&amp;);
&gt; &gt; +    static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; platformDecrypt(CryptoAlgorithmParameters&amp;, const CryptoKey&amp;, const Vector&lt;uint8_t&gt;&amp;);
&gt; 
&gt; Seems like these should take CryptoAlgorithmAesCbcCfbParams rather than
&gt; CryptoAlgorithmParameters, and CryptoKeyAES rather than CryptoKey. (Same for
&gt; others below). Not needed for this change, but seems like a nice improvement
&gt; for the future so the platforms don&apos;t have to do the downcast themselves.

I&apos;ll look into it once the similar patches in #175619 and #175620 land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342768</commentid>
    <comment_count>19</comment_count>
      <attachid>319068</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-28 01:16:10 -0700</bug_when>
    <thetext>Comment on attachment 319068
Patch

Clearing flags on attachment: 319068

Committed r221235: &lt;http://trac.webkit.org/changeset/221235&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342769</commentid>
    <comment_count>20</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-08-28 01:16:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342770</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-28 01:17:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/34106927&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318047</attachid>
            <date>2017-08-14 10:37:06 -0700</date>
            <delta_ts>2017-08-14 12:23:12 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-175539-20170814193704.patch</filename>
            <type>text/plain</type>
            <size>47864</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZiN2I4MDhhYWJlZjJi
NTZhNzY1Zjc4YzczODgwMmU4ZDMyZjMwMC4uOTM0MjFjMGQ3MjI2NGRlODQ5MjI5MWQwZTUwMWNh
MjFhMTA4ZThjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUwIEBACiAyMDE3LTA4LTE0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmg6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQp
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaDoK
KyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OmVuY3J5cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdCk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmg6CisgICAgICAgICogY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19LVzo6d3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnVud3JhcEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXLmg6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBj
cnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURl
Y3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0Ny
eXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZv
cm1XcmFwS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1VbndyYXBLZXkpOgorCisyMDE3LTA4LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KKwogICAgICAgICBSRUdSRVNTSU9OKHIyMjA1MTctcjIyMDUyMSkgW0dUS10g
VmFyaW91cyBjb21wb3NpdGluZyB0ZXN0cyBmYWlsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0NzgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAppbmRl
eCA4NjM5MDU5YTM5MjdmOTg5ZTM5ZDc5MTU3Yzk2ZWM3NjFhMzI3NzBhLi40Y2M0Mjk0MmNkNGYy
MmY2NjRiMjc4YzllYjlhMWMwZmNjMzg5ZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcy5oIgog
I2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleURhdGFPY3RldFNl
cXVlbmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTczLDcgKzc0LDMxIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
CiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
TW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQu
cmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdU
Rk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92
ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0
aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tl
eSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBwbGF0Zm9ybUVuY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2
VmVjdG9yKCksIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAg
ICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0K
IAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYg
a2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxi
YWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTg0LDcgKzEwOSwz
MSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhP
cGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1EZWNy
eXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0
KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0
LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0
Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RG
TW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJh
bWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1l
dGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+
KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1EZWNyeXB0
KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRl
eHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5
T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRp
b25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgKaW5k
ZXggMmYwOTNhZjE2ZWFjY2M0YjFiMDVmYjBiNTFhZGVkNmMxYWNhYzhmZC4uODc1ZWFkYzM5YTU5
MzY0MmJhMzA3NTdmM2YxZTRmOGVjNjFhNGQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaApAQCAtNTcs
OCArNTcsOCBAQCBwcml2YXRlOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGltcG9ydEtleShjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleURh
dGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCwgS2V5Q2FsbGJhY2sm
JiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKSBmaW5hbDsKIAogICAgIGJvb2wga2V5
QWxnb3JpdGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNh
dGVkJiBhbGdvcml0aG1QYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmKSBjb25zdDsKLSAgICB2
b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxi
YWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3Jr
UXVldWUmKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+
JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBXb3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVp
bnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4m
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mJik7CiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gcGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1Bh
cmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNr
KTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtQWVzQ2JjUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJiBm
YWlsdXJlQ2FsbGJhY2spOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAKaW5kZXggNWYxYzYxNGQ3
OTM3MTJiNDYyZDcxZWU3ZWQwODFmMjdlY2ZiMWMzYy4uOTZlMmJkMTk4ZDVlMmVjYWIxZTZlZmFj
NzczYmU5MGRmNjk3MDZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BZXNLZXlQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMu
aCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNjIsNyArNjMsMzEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpl
bmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtl
eSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsK
KyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShw
YXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWlu
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0Ni
Y0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHBsYXRmb3JtRW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2Rl
KCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBk
ZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29y
a2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAg
ICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lk
IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4
Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtNzMsNyArOTgsMzEgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9u
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRGVjcnlwdChXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1
ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAg
ICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5
KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
ICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9
IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOwor
ICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0
KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRGVjcnlwdChhZXNLZXku
a2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9
IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhl
Yyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVy
IGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
cmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpn
ZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXMsIEtleU9yS2V5UGFp
ckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oCmluZGV4IDgwYmZk
Yjc3MmU5ZTYwNjUwMTEwYjdkYjdmZjg3ZmUxNDU1NzI0ODkuLmMyZWVkM2ZjY2Y1OWMwM2IwNTE4
ZTYwZDk1ZTk1ZDk0Yjg0ZGZjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgKQEAgLTUwLDggKzUwLDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydEtleShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCwg
UmVmPENyeXB0b0tleT4mJiwgS2V5RGF0YUNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYp
IGZpbmFsOwogICAgIEV4Y2VwdGlvbk9yPHNpemVfdD4gZ2V0S2V5TGVuZ3RoKGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmKSBmaW5hbDsKIAotICAgIHZvaWQgcGxhdGZvcm1FbmNyeXB0
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRv
S2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2Fs
bGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOwotICAgIHZvaWQg
cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2sm
JiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1
ZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRW5j
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0
b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
cGxhdGZvcm1EZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYsIFZlY3Rvcjx1aW50OF90PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DVFIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NUUi5jcHAKaW5kZXggNWI4NTg0NDkzMDk0MjI3NmU1NTQyZjlmNDE0ZGZl
NzMyNWQxNDUwMi4uNDdlMzhjOThjZjQwNTVlMzMyYjIyZjE2ZWJhMDE4Mjk5NTFkM2ZkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NUUi5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDcnlwdG9B
bGdvcml0aG1BZXNDdHJQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNLZXlQ
YXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzEsNyArNzIsMzEg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3Bl
cmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRW5jcnlw
dChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwg
V1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3
b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2go
CisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92
ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVy
cyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOwor
ICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0
KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdChhZXNLZXku
a2V5KCksIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0
aCwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
CisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2Rl
KCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBk
ZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29y
a2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAg
ICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lk
IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4
Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtODIsNyArMTA3LDMxIEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlv
bkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybURlY3J5cHQoV1RG
TW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQpLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtR
dWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAg
ICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtl
eSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAg
ICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgp
KTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybURlY3J5cHQoYWVzS2V5Lmtl
eSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgs
IFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNh
bGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4K
KyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRl
cmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3Jr
ZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VC
aXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DVFIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DVFIuaAppbmRleCBjZjA2YTUwOWRmMmRjYTEwN2EyM2E3ZGVlMjZlY2RlZmFlODcw
M2MwLi4zNWVmOTUxZDA4MjQ0OTdiNzgxYjY5MzQwM2ZhNjE2MGFmY2U3YmViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUi5oCkBAIC01MCw4ICs1MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBleHBvcnRLZXko
U3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQsIFJlZjxDcnlwdG9LZXk+JiYsIEtleURhdGFDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+
IGdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAK
LSAgICB2b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
ckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXb3JrUXVldWUmKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jiwgc2l6ZV90LCBWZWN0b3I8dWludDhfdD4mJik7CisgICAgc3Rh
dGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNyeXB0KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCwgVmVjdG9yPHVp
bnQ4X3Q+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NN
LmNwcAppbmRleCBmNjc3OTg2Y2VkMjEwMTkzNDNlMzJjZTMxNWNiZjQzZWRmNWY0ZDM0Li43NWE3
OWVjNzQ5ODE1MWQzYzE2ZDFiNzE2NGE5ODhkMGU5ZDk3ZThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NN
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0djbVBh
cmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcy5oIgogI2luY2x1
ZGUgIkNyeXB0b0tleUFFUy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Myw3ICs5NCwzMCBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19HQ006OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+JgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGxhdGZvcm1FbmNyeXB0
KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShwbGFpblRleHQpLCBX
VEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdv
cmtRdWV1ZSk7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisg
ICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
ICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9
IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAg
ICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdChhZXNLZXkua2V5
KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJh
bWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZh
bHVlX29yKDApIC8gOCk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVu
Y2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJl
YWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTEyMiw3ICsxNDYsMzAgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYKICAgICB9CiAjZW5kaWYKIAotICAgIHBsYXRmb3JtRGVjcnlwdChXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1v
dmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1
ZXVlKTsKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAg
ICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSks
IGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAm
Y29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAg
ICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsK
KworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybURlY3J5cHQoYWVzS2V5LmtleSgp
LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lwaGVyVGV4dCksIGFlc1BhcmFt
ZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFs
dWVfb3IoMCkgLyA4KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3Mg
YWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5j
ZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVh
ZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVm
KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19HQ006OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVz
YWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NN
LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
R0NNLmgKaW5kZXggNWZhZTA1NDE4MmQ2OTg0NGM2MGEyZjNkMzQzNGQ4ZTdhODgxN2MwYi4uYmYy
ZDczY2M2NmMzNmM4ZDI0YTI3ZGQxODhjY2RjYmI4YzQ1MDZkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00u
aApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhwb3J0S2V5KFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhj
ZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlM
ZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1
ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYm
LCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50
OF90Pj4gcGxhdGZvcm1FbmNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCB1
aW50OF90KTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9y
bURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwg
VmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHVpbnQ4X3QpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKaW5kZXggZDE4MGY4
MjBmMjdiNThhYzIyNjE2NTI3ZWU5YzZmMmZmODFkZjMwNC4uNmRhOGM0NDZhYzZjOGZkYzhlOGUz
ZWZhOTI5MjhmMTA5NjU4YmYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCkBAIC0xNjQsMTIgKzE2
NCwyNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6d3JhcEtleShSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YQogICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1X
cmFwS2V5KFdURk1vdmUoa2V5KSwgV1RGTW92ZShkYXRhKSwgV1RGTW92ZShjYWxsYmFjayksIFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKKworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0
PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtV3Jh
cEtleShhZXNLZXkua2V5KCksIFdURk1vdmUoZGF0YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2so
cmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfS1c6OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
ZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNl
cHRpb25DYWxsYmFjaykKIHsKLSAgICBwbGF0Zm9ybVVud3JhcEtleShXVEZNb3ZlKGtleSksIFdU
Rk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OworICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1VbndyYXBLZXkoYWVzS2V5LmtleSgpLCBXVEZN
b3ZlKGRhdGEpKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpn
ZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19LVy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXLmgKaW5kZXggMGNjZGI2N2I4MDM4MDgzZWNmNGEyZDU3YjU3NDdmNTlkMmQ1
Njg4Yi4uMmYwMTQ5N2JhZTEwMDQ4NzQ3MGZiNjE1MDljYTEzYzg5OTcxZjY4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmgKQEAgLTU2LDggKzU2LDggQEAgcHJpdmF0ZToKICAgICBFeGNlcHRpb25Pcjx2b2lk
PiBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBj
b25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXAsIEtleUNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaykgZmluYWw7
CiAKICAgICBib29sIGtleUFsZ29yaXRobU1hdGNoZXMoY29uc3QgQ3J5cHRvS2V5JikgY29uc3Q7
Ci0gICAgdm9pZCBwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOwotICAgIHZvaWQg
cGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZl
Y3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtV3JhcEtleShjb25zdCBWZWN0b3I8dWludDhf
dD4mLCBWZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gcGxhdGZvcm1VbndyYXBLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9y
PHVpbnQ4X3Q+JiYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHBsYXRmb3JtRW5jcnlwdChjb25z
dCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJh
Y2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKTsKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxs
YmFjayk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKaW5kZXggY2Y3YjNlNmI3ZmQ1YTdk
ZDcyNDNkNmMzNzY1NTMyOGZjYjBmYjI1NC4uNjMyNTg0Y2ExZWI1YWY5OGM2ZGUwMmVkNmUyYjFm
NDFiMGYzNjIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCkBAIC0yOCwxMCArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG1BZXNDYmNDZmJQYXJhbXMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5
cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIApAQCAtMTY3LDYwICsxNjQsMjAgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LAogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlv
bkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+
PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYm
IHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRj
aCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZN
b3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVy
cyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNL
ZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsK
LSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0g
ICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVu
Y2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJl
YWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0
cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYo
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byBvdXRwdXQgPSBn
Y3J5cHRFbmNyeXB0KGtleSwgaXYsIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAgaWYgKCFvdXRw
dXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJl
dHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6
OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
Y2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29y
a1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0Fs
Z29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4
dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAg
ICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSks
IGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAm
Y29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAg
ICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgp
KTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFlc0tleS5rZXko
KSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKLSAgICAg
ICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
ZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dv
cmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAg
ICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhP
cGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2Fs
bGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgot
ICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0g
V1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRE
ZWNyeXB0KGtleSwgaXYsIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgIGlmICghb3V0cHV0KQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4g
V1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFt
c0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25E
YXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0Ny
eXB0LmNwcAppbmRleCBlZWM2OTc4MzcwYTY4YWRiNTQ0NDdhMjFhY2NiZjhiM2YxYjFjZjNkLi42
MGUzZjVhOGVmMmE2MjFlN2JkMWY4ZDQwMWFhNzdkYmEyYjQwMjgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
QkdDcnlwdC5jcHAKQEAgLTI4LDE4ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBW
ZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4m
JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RT
dXBwb3J0ZWRFcnJvciB9OwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRm
b3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwg
UmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4
Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQor
RXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0
Zm9ybURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKaW5kZXggODc0YWIxNjIzMTBiNGE4NzA4
MDNkMzQwMjMxYWMyNTAwNmM0MDZmZi4uZWM1NmQxMTFlNzViMTU5Yzg3NWViYWE0NDBiZGNmMWNl
YWE3MTE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCkBAIC0zMCw5ICszMCw2IEBACiAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFl
c0N0clBhcmFtcy5oIgotI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUu
aD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIApAQCAtMTk2LDYw
ICsxOTMsMjAgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRB
RVNfQ1RSKFBBTDo6R0NyeXB0OjpDaXBoZXJPcGVyYXRpb24KICAgICByZXR1cm4gb3V0cHV0Owog
fQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5
cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFj
ayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1F
bmNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGNvdW50ZXIsIHNpemVfdCBjb3VudGVyTGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRl
eHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAg
ICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkp
LCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZj
b250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRv
d25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAg
ICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
Ci0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZW5j
cnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFy
YW1ldGVycy5sZW5ndGgsIHBsYWluVGV4dCk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkgewot
ICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBh
ZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNr
IHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9z
dFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUg
ewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0pOworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9lbmNy
eXB0LCBrZXksIGNvdW50ZXIsIGNvdW50ZXJMZW5ndGgsIHBsYWluVGV4dCk7CisgICAgaWYgKCFv
dXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAg
IHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
VFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJh
Y2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0
b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb3VudGVyLCBzaXplX3QgY291bnRlckxlbmd0
aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwot
ICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhl
clRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXND
dHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25j
YXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQg
PSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2RlY3J5cHQsIGFlc0tleS5rZXkoKSwgYWVzUGFy
YW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBjaXBoZXJUZXh0
KTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERv
Y3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
Ci0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBb
b3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byBvdXRwdXQg
PSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2RlY3J5cHQsIGtleSwgY291bnRlciwgY291bnRl
ckxlbmd0aCwgY2lwaGVyVGV4dCk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcApp
bmRleCBiNTFjMjViNjU3OTgyN2FiODY4MDA0MmJlZTM1Nzc4ZjFlZmZjYTkwLi5jNTA4MWFkMmI2
N2YxMjlmODQ0YmQ5NThjODk4YTI5NDVjNGQ2N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5j
cHAKQEAgLTMwLDEwICszMCw3IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2lu
Y2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcy5oIgotI2luY2x1ZGUgIkNyeXB0b0tl
eUFFUy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgog
I2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9D
cnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CkBAIC0xODAsNjAgKzE3NywyMCBAQCBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdERlY3J5cHQoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBrZXksCiAgICAgcmV0dXJuIG91dHB1dDsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1
aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9u
Q2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+
IENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdChjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYg
cGxhaW5UZXh0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGFkZGl0aW9uYWxEYXRhLCB1aW50OF90
IHRhZ0xlbmd0aCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRj
aCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZN
b3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7
Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5n
ZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXku
a2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpLCBhZXNQ
YXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3Ro
LnZhbHVlX29yKDApIC8gOCk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkgewotICAgICAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBj
b250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0g
ICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwor
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChrZXksIGl2LCBXVEZNb3ZlKHBsYWluVGV4
dCksIGFkZGl0aW9uYWxEYXRhLCB0YWdMZW5ndGgpOworICAgIGlmICghb3V0cHV0KQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92
ZSgqb3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURl
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1l
dGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNf
R0NNOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBhZGRpdGlvbmFsRGF0YSwgdWludDhfdCB0YWdMZW5ndGgpCiB7Ci0gICAg
Y29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0
ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0
ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5
cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRv
JiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAg
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRl
cnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlv
bmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgp
OwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9j
dW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygK
LSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVy
ZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRo
cmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtv
dXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdERlY3J5cHQoa2V5LCBpdiwgV1RGTW92ZShwbGFpblRleHQpLCBhZGRpdGlvbmFsRGF0
YSwgdGFnTGVuZ3RoKTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAppbmRleCBjNWY0
NTBkYzkyODVmYmQwNWI0ODc1Mjc5YTQxNGE3ODcyODAzYWYxLi40YjE4ZjEzOGZjOThkMGFjZjMy
ZmQ5NzllOWNhNzc3ZjE4Y2E2ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0yOSw3
ICsyOSw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0
b0tleUFFUy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8cGFsL2Ny
eXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0
aWVzLmg+CkBAIC0xMTYsMjggKzExNSwyMCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGdjcnlwdFVud3JhcEtleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleQogICAg
IHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9y
bVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2spCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBkYXRhKQogewotICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFF
Uz4oa2V5LmdldCgpKTsKLSAgICBhdXRvIG91dHB1dCA9IGdjcnlwdFdyYXBLZXkoYWVzS2V5Lmtl
eSgpLCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFj
aygqb3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdFdyYXBLZXkoa2V5LCBkYXRhKTsK
KyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVy
cm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9u
Q2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgYXV0byBvdXRwdXQg
PSBnY3J5cHRVbndyYXBLZXkoYWVzS2V5LmtleSgpLCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkg
ewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFjaygqb3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdFVud3JhcEtleShrZXksIGRhdGEpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgq
b3V0cHV0KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpw
bGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9u
RGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318052</attachid>
            <date>2017-08-14 12:23:16 -0700</date>
            <delta_ts>2017-08-16 06:54:48 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-175539-20170814212314.patch</filename>
            <type>text/plain</type>
            <size>67489</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDUwYjQzZDcwMGY0Y2Y3
NTMyMzdiYTZkYWY0YzQ0MjVhZmJlNDMwMi4uNTEzNWM4YmI4ZjQyYzFkMTk4ZGMyM2VmYjRkM2Fi
OTk3NDU0MTczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE3LTA4LTE0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmg6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQp
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaDoK
KyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OmVuY3J5cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdCk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmg6CisgICAgICAgICogY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19LVzo6d3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnVud3JhcEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXLmg6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBj
cnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURl
Y3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0Ny
eXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZv
cm1XcmFwS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1VbndyYXBLZXkpOgorCiAyMDE3LTA4LTE0ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFw
cGxlLmNvbT4KIAogICAgICAgICBbY3NzLXVpXSBJbXBsZW1lbnQgY2FyZXQtY29sb3Igc3VwcG9y
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDLmNwcAppbmRleCA4NjM5MDU5YTM5MjdmOTg5ZTM5ZDc5MTU3Yzk2
ZWM3NjFhMzI3NzBhLi40Y2M0Mjk0MmNkNGYyMmY2NjRiMjc4YzllYjlhMWMwZmNjMzg5ZmI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNyeXB0
b0FsZ29yaXRobUFlc0tleVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2lu
Y2x1ZGUgIkNyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTczLDcgKzc0LDMx
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9w
ZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybUVuY3J5
cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCks
IFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwg
d29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNo
KAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1v
dmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRl
cnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJz
KTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybUVuY3J5cHQoYWVz
S2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxhaW5UZXh0KSk7
CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRl
eHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBl
YyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFm
dGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAg
ICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBh
cmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJU
ZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2Vw
dGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUm
IHdvcmtRdWV1ZSkKQEAgLTg0LDcgKzEwOSwzMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
QkM6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+Jgog
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgcGxhdGZvcm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1v
dmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUo
ZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5y
ZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RG
TW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92
ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gcGxhdGZvcm1EZWNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5p
dlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJl
ZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2Vy
IHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAg
ICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9j
dW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAg
ICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUg
eworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwog
fQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0
b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywg
RXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgKaW5kZXggMmYwOTNhZjE2ZWFjY2M0YjFiMDVmYjBiNTFh
ZGVkNmMxYWNhYzhmZC4uODc1ZWFkYzM5YTU5MzY0MmJhMzA3NTdmM2YxZTRmOGVjNjFhNGQ1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DQkMuaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVw
cmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCwgS2V5Q2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxi
YWNrKSBmaW5hbDsKIAogICAgIGJvb2wga2V5QWxnb3JpdGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiBhbGdvcml0aG1QYXJhbWV0ZXJzLCBjb25z
dCBDcnlwdG9LZXkmKSBjb25zdDsKLSAgICB2b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVj
dG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVj
cnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENy
eXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlv
bkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKKyAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+
JiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRGVj
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0
b3I8dWludDhfdD4mJik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcGxhdGZvcm1FbmNyeXB0KGNv
bnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9L
ZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9p
ZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBwbGF0
Zm9ybURlY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zRGVwcmVjYXRlZCYs
IGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JD
YWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19D
RkIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NGQi5jcHAKaW5kZXggNWYxYzYxNGQ3OTM3MTJiNDYyZDcxZWU3ZWQwODFmMjdlY2ZiMWMz
Yy4uOTZlMmJkMTk4ZDVlMmVjYWIxZTZlZmFjNzczYmU5MGRmNjk3MDZmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NGQi5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1B
ZXNDYmNDZmJQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNLZXlQYXJhbXMu
aCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjIsNyArNjMsMzEgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9u
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92
ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVl
dWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAg
ICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkp
LCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZj
b250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRv
d25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAg
ICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdChhZXNLZXkua2V5
KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250
ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1
bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVy
cywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQpAQCAtNzMsNyArOTgsMzEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpkZWNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHBsYXRmb3JtRGVjcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSks
IFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7Cisg
ICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFy
YW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVy
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0Ni
Y0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHBsYXRmb3JtRGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAg
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29k
ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
ZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dv
cmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAg
ICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZUJpdG1hcCB1c2FnZXMsIEtleU9yS2V5UGFpckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlv
bkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NGQi5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NGQi5oCmluZGV4IDgwYmZkYjc3MmU5ZTYwNjUwMTEwYjdkYjdmZjg3ZmUxNDU1
NzI0ODkuLmMyZWVkM2ZjY2Y1OWMwM2IwNTE4ZTYwZDk1ZTk1ZDk0Yjg0ZGZjMmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19D
RkIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCLmgKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydEtl
eShTdWJ0bGVDcnlwdG86OktleUZvcm1hdCwgUmVmPENyeXB0b0tleT4mJiwgS2V5RGF0YUNhbGxi
YWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIEV4Y2VwdGlvbk9yPHNpemVf
dD4gZ2V0S2V5TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKSBmaW5hbDsK
IAotICAgIHZvaWQgcGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVj
dG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdvcmtRdWV1ZSYpOwotICAgIHZvaWQgcGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8
dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxW
ZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4
Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNyeXB0KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYmKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKaW5kZXggNWI4
NTg0NDkzMDk0MjI3NmU1NTQyZjlmNDE0ZGZlNzMyNWQxNDUwMi4uNDdlMzhjOThjZjQwNTVlMzMy
YjIyZjE2ZWJhMDE4Mjk5NTFkM2ZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXMuaCIKICNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG1BZXNLZXlQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlB
RVMuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNzEsNyArNzIsMzEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RS
OjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3Zl
KGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYo
KTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92
ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBs
YWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAg
ICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFl
c0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHBsYXRmb3JtRW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuY291bnRlclZl
Y3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250
ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1
bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVy
cywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQpAQCAtODIsNyArMTA3LDMxIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVj
cnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBwbGF0Zm9ybURlY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkp
LCBXVEZNb3ZlKGNpcGhlclRleHQpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigpOwor
ICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhl
clRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXND
dHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25j
YXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBwbGF0Zm9ybURlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0
b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgICAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRo
ZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRl
eHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIHJlc3Vs
dCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6Z2VuZXJh
dGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBl
eHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxs
YmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaAppbmRleCBjZjA2YTUwOWRm
MmRjYTEwN2EyM2E3ZGVlMjZlY2RlZmFlODcwM2MwLi4zNWVmOTUxZDA4MjQ0OTdiNzgxYjY5MzQw
M2ZhNjE2MGFmY2U3YmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oCkBAIC01MCw4ICs1MCw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleHBvcnRLZXkoU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQsIFJlZjxD
cnlwdG9LZXk+JiYsIEtleURhdGFDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmKSBmaW5h
bDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+IGdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4m
JiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNr
JiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKLSAgICB2b2lkIHBsYXRm
b3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwg
UmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4
Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsK
KyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jiwgc2l6ZV90LCBW
ZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gcGxhdGZvcm1EZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYsIHNpemVfdCwgVmVjdG9yPHVpbnQ4X3Q+JiYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAppbmRleCBmNjc3OTg2Y2VkMjEwMTkzNDNl
MzJjZTMxNWNiZjQzZWRmNWY0ZDM0Li43NWE3OWVjNzQ5ODE1MWQzYzE2ZDFiNzE2NGE5ODhkMGU5
ZDk3ZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfR0NNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobUFlc0tleVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05
Myw3ICs5NCwzMCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmVuY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgcGxhdGZvcm1FbmNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUo
a2V5KSwgV1RGTW92ZShwbGFpblRleHQpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CisgICAgY29udGV4dC5yZWYoKTsK
KyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShw
YXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWlu
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAg
ICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0dj
bVBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IHBsYXRmb3JtRW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwg
V1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCks
IGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisg
ICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxD
cnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxs
YmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAg
LTEyMiw3ICsxNDYsMzAgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICB9CiAjZW5kaWYK
IAotICAgIHBsYXRmb3JtRGVjcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSks
IFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKyAgICBjb250ZXh0LnJlZigpOworICAg
IHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRl
eHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21Q
YXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0
PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBw
bGF0Zm9ybURlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdU
Rk1vdmUoY2lwaGVyVGV4dCksIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwg
YWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBj
YWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmgKaW5kZXggNWZhZTA1NDE4MmQ2OTg0NGM2
MGEyZjNkMzQzNGQ4ZTdhODgxN2MwYi4uYmYyZDczY2M2NmMzNmM4ZDI0YTI3ZGQxODhjY2RjYmI4
YzQ1MDZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5
PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
RXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rv
cjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlw
dG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25D
YWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3Rh
dGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYm
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCB1aW50OF90KTsKKyAgICBzdGF0aWMgRXhjZXB0aW9u
T3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYsIHVpbnQ4X3QpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19LVy5jcHAKaW5kZXggZDE4MGY4MjBmMjdiNThhYzIyNjE2NTI3ZWU5YzZmMmZmODFk
ZjMwNC4uNmRhOGM0NDZhYzZjOGZkYzhlOGUzZWZhOTI5MjhmMTA5NjU4YmYyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfS1cuY3BwCkBAIC0xNjQsMTIgKzE2NCwyNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19LVzo6d3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0
YQogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1XcmFwS2V5KFdURk1vdmUoa2V5KSwgV1RGTW92ZShk
YXRhKSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spKTsKKwor
ICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtV3JhcEtleShhZXNLZXkua2V5KCksIFdURk1vdmUoZGF0
YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
IH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFj
aywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKIHsKLSAgICBwbGF0Zm9y
bVVud3JhcEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2sp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1V
bndyYXBLZXkoYWVzS2V5LmtleSgpLCBXVEZNb3ZlKGRhdGEpKTsKKyAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkuY29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxi
YWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVf
dD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5oIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmgKaW5kZXggMGNjZGI2N2I4
MDM4MDgzZWNmNGEyZDU3YjU3NDdmNTlkMmQ1Njg4Yi4uMmYwMTQ5N2JhZTEwMDQ4NzQ3MGZiNjE1
MDljYTEzYzg5OTcxZjY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmgKQEAgLTU2LDggKzU2LDggQEAgcHJp
dmF0ZToKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAsIEtleUNhbGxiYWNrJiYsIFZvaWRDYWxsYmFj
ayYmIGZhaWx1cmVDYWxsYmFjaykgZmluYWw7CiAKICAgICBib29sIGtleUFsZ29yaXRobU1hdGNo
ZXMoY29uc3QgQ3J5cHRvS2V5JikgY29uc3Q7Ci0gICAgdm9pZCBwbGF0Zm9ybVdyYXBLZXkoUmVm
PENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYpOwotICAgIHZvaWQgcGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tl
eT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxi
YWNrJiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3Jt
V3JhcEtleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mJik7CisgICAg
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1VbndyYXBLZXkoY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpOwogICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNh
bGxiYWNrKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBwbGF0Zm9ybURlY3J5cHQoY29uc3QgQ3J5
cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYs
IFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjayk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlw
dC5jcHAKaW5kZXggY2Y3YjNlNmI3ZmQ1YTdkZDcyNDNkNmMzNzY1NTMyOGZjYjBmYjI1NC4uNjMy
NTg0Y2ExZWI1YWY5OGM2ZGUwMmVkNmUyYjFmNDFiMGYzNjIyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNH
Q3J5cHQuY3BwCkBAIC0yOCwxMCArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CiAKLSNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKLSNpbmNsdWRl
ICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KIApAQCAt
MTY3LDYwICsxNjQsMjAgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBn
Y3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAogICAgIHJldHVybiBvdXRw
dXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQor
RXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0
Zm9ybUVuY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJl
ZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUo
cGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkg
PSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8g
b3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0
b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFm
dGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAg
ICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7CisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGtleSwgaXYsIFdURk1vdmUo
cGxhaW5UZXh0KSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12
b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBj
YWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25P
cjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlw
dChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwg
VmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAg
IHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRl
eHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmND
ZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25j
YXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQg
PSBnY3J5cHREZWNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBX
VEZNb3ZlKGNpcGhlclRleHQpKTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJl
aW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhl
IERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygK
LSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
CisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGtleSwgaXYsIFdURk1vdmUoY2lwaGVy
VGV4dCkpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3Bl
cmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogRXhjZXB0
aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0
IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlB
RVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENh
bGxiYWNrJiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlw
dC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcAppbmRleCBlZWM2OTc4MzcwYTY4YWRi
NTQ0NDdhMjFhY2NiZjhiM2YxYjFjZjNkLi42MGUzZjVhOGVmMmE2MjFlN2JkMWY4ZDQwMWFhNzdk
YmEyYjQwMjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKQEAgLTI4LDE4ICsyOCwxNiBA
QAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJh
Y2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtR
dWV1ZSYpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19D
RkI6OnBsYXRmb3JtRW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mLCBWZWN0b3I8dWludDhfdD4mJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCi12b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJy
b3IgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5j
cHAKaW5kZXggODc0YWIxNjIzMTBiNGE4NzA4MDNkMzQwMjMxYWMyNTAwNmM0MDZmZi4uZWM1NmQx
MTFlNzViMTU5Yzg3NWViYWE0NDBiZGNmMWNlYWE3MTE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5
cHQuY3BwCkBAIC0zMCw5ICszMCw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAot
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcy5oIgotI2luY2x1ZGUgIkNyeXB0
b0tleUFFUy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
IDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlw
dC9VdGlsaXRpZXMuaD4KIApAQCAtMTk2LDYwICsxOTMsMjAgQEAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRBRVNfQ1RSKFBBTDo6R0NyeXB0OjpDaXBoZXJPcGVy
YXRpb24KICAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
VFI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFj
ayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBX
b3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvdW50ZXIsIHNpemVfdCBjb3VudGVyTGVuZ3Ro
LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAg
ICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJh
bWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4
dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAg
ICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBh
cmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdj
cnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZW5jcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0
ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIHBsYWluVGV4dCk7Ci0g
ICAgICAgICAgICBpZiAoIW91dHB1dCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBv
bmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVu
dC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAg
ICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNl
IGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFk
cy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1
dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8gb3V0cHV0ID0gZ2Ny
eXB0QUVTX0NUUihnY3J5X2NpcGhlcl9lbmNyeXB0LCBrZXksIGNvdW50ZXIsIGNvdW50ZXJMZW5n
dGgsIHBsYWluVGV4dCk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQog
Ci12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRv
S2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVj
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBj
b3VudGVyLCBzaXplX3QgY291bnRlckxlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4
dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAg
ICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSks
IGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAm
Y29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAg
ICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsK
LQotICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2Rl
Y3J5cHQsIGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1Bh
cmFtZXRlcnMubGVuZ3RoLCBjaXBoZXJUZXh0KTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSk7CisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2Rl
Y3J5cHQsIGtleSwgY291bnRlciwgY291bnRlckxlbmd0aCwgY2lwaGVyVGV4dCk7CisgICAgaWYg
KCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9Owor
ICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRo
bUFFU19HQ01HQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcAppbmRleCBiNTFjMjViNjU3OTgyN2FiODY4MDA0MmJl
ZTM1Nzc4ZjFlZmZjYTkwLi5jNTA4MWFkMmI2N2YxMjlmODQ0YmQ5NThjODk4YTI5NDVjNGQ2N2I3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRo
bUFFU19HQ01HQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAKQEAgLTMwLDEwICszMCw3IEBACiAKICNpZiBF
TkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0djbVBh
cmFtcy5oIgotI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBh
bC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0
aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CkBAIC0x
ODAsNjAgKzE3NywyMCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdj
cnlwdERlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksCiAgICAgcmV0dXJuIG91dHB1
dDsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitF
eGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRm
b3JtRW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGFkZGl0aW9uYWxEYXRhLCB1aW50OF90IHRhZ0xlbmd0aCkKIHsKLSAgICBjb250ZXh0LnJl
ZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUo
cGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0
cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KSwgV1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9y
KCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7Ci0gICAgICAgICAg
ICBpZiAoIW91dHB1dCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAg
ICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0
aW9uRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNr
cyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAg
ICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1v
dmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KG91dHB1dCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlw
dChrZXksIGl2LCBXVEZNb3ZlKHBsYWluVGV4dCksIGFkZGl0aW9uYWxEYXRhLCB0YWdMZW5ndGgp
OworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9u
RXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4
Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVp
bnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50
OF90PiYmIHBsYWluVGV4dCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhZGRpdGlvbmFsRGF0YSwg
dWludDhfdCB0YWdMZW5ndGgpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUu
ZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5
ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBh
ZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFy
YW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlB
RVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlw
dChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJU
ZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJz
LnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsK
LSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3Mg
YWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFj
ayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoa2V5LCBpdiwgV1RGTW92
ZShwbGFpblRleHQpLCBhZGRpdGlvbmFsRGF0YSwgdGFnTGVuZ3RoKTsKKyAgICBpZiAoIW91dHB1
dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0
dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
R0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXR0NyeXB0LmNwcAppbmRleCBjNWY0NTBkYzkyODVmYmQwNWI0ODc1Mjc5YTQxNGE3ODcy
ODAzYWYxLi40YjE4ZjEzOGZjOThkMGFjZjMyZmQ5NzllOWNhNzc3ZjE4Y2E2ZjIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dD
cnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0
aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKIAotI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5jbHVk
ZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CkBAIC0xMTYsMjggKzExNSwyMCBAQCBz
dGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdFVud3JhcEtleShjb25z
dCBWZWN0b3I8dWludDhfdD4mIGtleQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXks
IFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogewotICAgIGF1dG8mIGFl
c0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICBhdXRvIG91dHB1
dCA9IGdjcnlwdFdyYXBLZXkoYWVzS2V5LmtleSgpLCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkg
ewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFjaygqb3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdFdyYXBLZXkoa2V5LCBkYXRhKTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91
dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtl
eShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykK
K0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0
Zm9ybVVud3JhcEtleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eS5nZXQoKSk7Ci0gICAgYXV0byBvdXRwdXQgPSBnY3J5cHRVbndyYXBLZXkoYWVzS2V5LmtleSgp
LCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhP
cGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYWxsYmFjaygq
b3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdFVud3JhcEtleShrZXksIGRhdGEpOwor
ICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9p
ZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvS2V5
QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRD
YWxsYmFjayYmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKaW5kZXggYjE4N2NjNWFiMWM2M2JhNTMyYTkzZjMyMDhi
YmY1ZTE4Nzc4MmIzOS4uMjEzNmJkNTkwOWY4YTNkMzU3NjJmMTU0NzQwOGE4NzE2ZTIxZTQwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkNNYWMuY3BwCkBAIC02Niw1MiArNjYsMTYgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNv
bnMKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhfdD4mJiBw
bGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2go
W3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBs
YWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0
byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBB
U1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMx
MjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwg
YWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLmRhdGEoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQu
ZGF0YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
Ci0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgQVNTRVJUKGl2LnNpemUoKSA9
PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0Vu
Y3J5cHQsIGl2LmRhdGEoKSwga2V5LCBwbGFpblRleHQuZGF0YSgpLCBwbGFpblRleHQuc2l6ZSgp
KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQor
RXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0
Zm9ybURlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4dC5y
ZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRl
eHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAg
YXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBh
cmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlw
dG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIGFzc2VydChhZXNQYXJhbWV0ZXJzLml2VmVj
dG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0
ID0gdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCku
ZGF0YSgpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQuZGF0YSgpLCBjaXBoZXJUZXh0LnNpemUo
KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0p
OwotICAgIH0pOworICAgIEFTU0VSVChpdi5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsK
KyAgICByZXR1cm4gdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBpdi5kYXRhKCksIGtleSwg
Y2lwaGVyVGV4dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8
dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0
b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0
b0tleUFFUyYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxs
YmFjayYmIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCTWFj
LmNwcAppbmRleCA0NmEwZDI4NTllYWZkZDVkZTdlNjUzNzk4YjJhMGVjNDgzZmUxNGI4Li5iNzc1
ZWJjY2E1YmRmZmQ0NTUwNjEzNWMyZmI3NzFhM2RmYjI1NmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHAKQEAg
LTYzLDUyICs2MywxNiBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiB0cmFu
c2Zvcm1BRVNfQ0ZCKENDT3BlcmF0aW9uIG9wZXJhdGlvbiwgY29ucwogICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1F
bmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFt
ZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNf
Q0ZCOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBj
b250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1v
dmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShw
bGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0Ni
Y0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChhZXNQYXJhbWV0ZXJz
Lml2VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8g
cmVzdWx0ID0gdHJhbnNmb3JtQUVTX0NGQihrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVj
dG9yKCksIGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNv
ZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVy
ZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRo
cmVhZHMuCi0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgQVNTRVJUKGl2LnNp
emUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ0ZC
KGtDQ0VuY3J5cHQsIGl2LCBrZXksIHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRp
b25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhfdD4m
JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3Bh
dGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkp
LCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
JmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3du
Y2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAg
ICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAg
ICAgICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1Np
emVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DRkIoa0NDRGVj
cnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQp
OwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNr
IHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFz
ayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsK
LSAgICB9KTsKKyAgICBBU1NFUlQoaXYuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Cisg
ICAgcmV0dXJuIHRyYW5zZm9ybUFFU19DRkIoa0NDRGVjcnlwdCwgaXYsIGtleSwgY2lwaGVyVGV4
dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwCmluZGV4IDU4YzM4
MjliOTkwYzdhMjJhMzkzZTU0ZmE4OTJhMzcyMmUzM2E3ZTYuLmZjMWU0M2NlYjU2MGY2YWU0NzMy
OGM3NzAxYjg0OTk3MjgyZjFjMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSTWFjLmNwcApAQCAtMTM5LDUyICsxMzksMTYg
QEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NUUihD
Q09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnMKICAgICByZXR1cm4gV1RGTW92ZShoZWFkKTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0
b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5j
cnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBj
b3VudGVyLCBzaXplX3QgY291bnRlckxlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0
KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0
ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQg
PSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11
dGFibGUgewotICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxn
b3JpdGhtQWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGFlc1Bh
cmFtZXRlcnMuY291bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwot
ICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DVFIoa0NDRW5jcnlwdCwgYWVzUGFy
YW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXkua2V5
KCksIHBsYWluVGV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBi
ZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAg
ICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFm
dGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBj
b250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSBy
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIEFTU0VSVChjb3VudGVyLnNpemUoKSA9PSBrQ0NC
bG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ1RSKGtDQ0VuY3J5cHQs
IGNvdW50ZXIsIGNvdW50ZXJMZW5ndGgsIGtleSwgcGxhaW5UZXh0KTsKIH0KIAotdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXks
IFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9y
PHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY291bnRlciwgc2l6
ZV90IGNvdW50ZXJMZW5ndGgsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAg
Y29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3Zl
KGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsK
LSAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFl
c0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIGFzc2VydChhZXNQYXJhbWV0ZXJz
LmNvdW50ZXJWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKLSAgICAgICAg
YXV0byByZXN1bHQgPSB0cmFuc2Zvcm1BRVNfQ1RSKGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMu
Y291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgYWVzS2V5LmtleSgpLCBjaXBo
ZXJUZXh0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
ZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgIGNvbnRleHQu
cG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAg
ICAgfSk7Ci0gICAgfSk7CisgICAgQVNTRVJUKGNvdW50ZXIuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6
ZUFFUzEyOCk7CisgICAgcmV0dXJuIHRyYW5zZm9ybUFFU19DVFIoa0NDRGVjcnlwdCwgY291bnRl
ciwgY291bnRlckxlbmd0aCwga2V5LCBjaXBoZXJUZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTU1hYy5jcHAKaW5kZXggMmI0YjZiNmI2OGFmODkyZWQ5YWJhMzRiZDRiN2Rj
YzI1NmQwZGJhMC4uYjg1YWEzNjAxOGVlYmEwN2Q2YjgzNjhlY2QzZGJkNjMwNDZiOWQ1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NN
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFF
U19HQ01NYWMuY3BwCkBAIC03Myw1MCArNzMsMTQgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rv
cjx1aW50OF90Pj4gZGVjeXB0QUVTX0dDTShjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBjb24K
ICAgICByZXR1cm4gV1RGTW92ZShwbGFpblRleHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBWZWN0b3I8dWludDhfdD4mJiBw
bGFpblRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25hbERhdGEsIHVpbnQ4X3Qg
dGFnTGVuZ3RoKQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNo
KFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBw
bGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250
ZXh0XSgpIG11dGFibGUgewotICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8
Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8m
IGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgYXV0
byByZXN1bHQgPSBlbmNyeXB0QUVTX0dDTShhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tl
eS5rZXkoKSwgcGxhaW5UZXh0LCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCks
ICooYWVzUGFyYW1ldGVycy50YWdMZW5ndGgpIC8gOCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNl
IGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFk
cy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5j
b2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNh
bGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIHJldHVybiBlbmNy
eXB0QUVTX0dDTShpdiwga2V5LCBwbGFpblRleHQsIGFkZGl0aW9uYWxEYXRhLCB0YWdMZW5ndGgp
OwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRGVjcnlwdChzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8
Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitF
eGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRm
b3JtRGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBhZGRpdGlvbmFsRGF0YSwgdWludDhfdCB0YWdMZW5ndGgpCiB7Ci0gICAgY29udGV4dC5y
ZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRl
eHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAg
YXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFt
cz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9L
ZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVjeXB0QUVTX0dDTShh
ZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCwgYWVzUGFy
YW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCAqKGFlc1BhcmFtZXRlcnMudGFnTGVuZ3Ro
KSAvIDgpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFj
ayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBl
YyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5w
b3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKKyAgICByZXR1cm4gZGVjeXB0QUVTX0dDTShpdiwga2V5LCBjaXBoZXJU
ZXh0LCBhZGRpdGlvbmFsRGF0YSwgdGFnTGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1BRVNfS1dNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1BRVNfS1dNYWMuY3BwCmluZGV4IDhkYmZlMTJlYzY1MDJlMDNjOTE3NjFjZmUxMzYyZDIyNjZm
MzI4MGQuLmY1NmJlMjM3ZjVlNGQ4OGVhMTllNmJmNzI0OGViMDljMGJkYjkyY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01h
Yy5jcHAKQEAgLTYzLDI2ICs2MywxNCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4
X3Q+PiB1bndyYXBLZXlBRVNfS1coY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksCiAgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBs
YXRmb3JtV3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0
YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRp
b25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEpCiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gcmVzdWx0ID0gd3JhcEtleUFFU19LVyhhZXNL
ZXkua2V5KCksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhyZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGJhY2so
cmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICByZXR1cm4gd3JhcEtleUFFU19LVyhr
ZXksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJh
Y2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgYXV0byByZXN1bHQgPSB1bndy
YXBLZXlBRVNfS1coYWVzS2V5LmtleSgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgcmV0dXJu
IHVud3JhcEtleUFFU19LVyhrZXksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1FbmNyeXB0KGNv
bnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBW
ZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2sp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318258</attachid>
            <date>2017-08-16 06:54:53 -0700</date>
            <delta_ts>2017-08-17 23:24:57 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-175539-20170816155451.patch</filename>
            <type>text/plain</type>
            <size>68707</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IzNzJmM2ZlZjUxYTk5
YWNhMWExOGQxOTYzNzU3ZmZkNDcxYzM0Yy4uMTAyYjRkMWVjY2EwOTgwNDUxMzMzZDE3Yjk3OWMz
ZjQ0NzFlNGRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE3LTA4LTE2ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmg6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQp
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaDoK
KyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OmVuY3J5cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdCk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmg6CisgICAgICAgICogY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19LVzo6d3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnVud3JhcEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXLmg6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBj
cnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6Cisg
ICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURl
Y3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0Ny
eXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZv
cm1XcmFwS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1VbndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpw
bGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUFFU19DRkJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DRkI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfQ1RSTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DVFI6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0dDTU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0
aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL0Ny
eXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdv
cml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KToKKwogMjAxNy0wOC0xNiAgWGFiaWVy
IFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3Ry
ZWFtZXJdW0VNRV0gUmV3b3JrIGhhbmRsaW5nIGtleSBzeXN0ZW1zIGFuZCBVVUlEcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmNwcAppbmRleCA4NjM5MDU5YTM5MjdmOTg5ZTM5ZDc5MTU3Yzk2ZWM3NjFhMzI3
NzBhLi5mYWI4Nzk4NDg1OTJiZGUyOTdmMTEyNjQ2OTdkNDQxOTY3MDkxNmIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JD
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRo
bUFlc0tleVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1ZGUgIkNy
eXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTczLDcgKzc0LDI4IEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVy
cm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUo
Y2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVl
KTsKKworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAg
ICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwg
cGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29u
dGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1FbmNy
eXB0KCpwYXJhbWV0ZXJzLCBrZXksIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisg
ICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzaygKKyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxD
cnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxs
YmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAg
LTg0LDcgKzEwNiwyOCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
cGxhdGZvcm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92
ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3Jr
UXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJz
KSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHBsYXRmb3JtRGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNp
cGhlclRleHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0
ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAg
ICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
CisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19DQkM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdl
cywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBl
eGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JD
LmgKaW5kZXggMmYwOTNhZjE2ZWFjY2M0YjFiMDVmYjBiNTFhZGVkNmMxYWNhYzhmZC4uMjIzZDVm
ODA4MGZiNzg0Yzc3Mzg0ZTIyNjU1ZmIzZThhODYxOGI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaApA
QCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGltcG9ydEtl
eShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0
b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCwgS2V5Q2Fs
bGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKSBmaW5hbDsKIAogICAgIGJv
b2wga2V5QWxnb3JpdGhtTWF0Y2hlcyhjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNE
ZXByZWNhdGVkJiBhbGdvcml0aG1QYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmKSBjb25zdDsK
LSAgICB2b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
ckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXb3JrUXVldWUmKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYs
IGNvbnN0IENyeXB0b0tleSYsIFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBzdGF0aWMgRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIFZlY3Rvcjx1aW50OF90PiYmKTsKICAgICBFeGNl
cHRpb25Pcjx2b2lkPiBwbGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
UGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJh
Y2spOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYm
IGZhaWx1cmVDYWxsYmFjayk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAppbmRleCA1ZjFjNjE0
ZDc5MzcxMmI0NjJkNzFlZTdlZDA4MWYyN2VjZmIxYzNjLi43MGYyNGJiZGJjZjBkMzZlY2M0NWI1
NjM5NmNlODQwMzA0OWY5ZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcy5oIgogI2luY2x1
ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFF
Uy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02Miw3ICs2MywyOCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6
OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgcGxhdGZvcm1FbmNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUo
a2V5KSwgV1RGTW92ZShwbGFpblRleHQpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigp
OworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxh
aW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdCgqcGFyYW1ldGVycywga2V5LCBX
VEZNb3ZlKHBsYWluVGV4dCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxi
YWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKV0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9y
PHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0
aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC03Myw3ICs5NSwyOCBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJv
cik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1EZWNyeXB0KFdURk1vdmUo
cGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShj
YWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUp
OworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAg
IFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBj
aXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNv
bnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRGVj
cnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9j
dW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygK
KyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFj
ayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSBy
ZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmdlbmVyYXRlS2V5
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgKaW5kZXggODBiZmRiNzcyZTllNjA2
NTAxMTBiN2RiN2ZmODdmZTE0NTU3MjQ4OS4uNWQ5Njc5NmEwYWYxYjczMDkwNDAwYTBiNDE5NmQ2
MTYzMGMyMTVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0LCBSZWY8Q3J5cHRv
S2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZl
Y3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxD
cnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRp
b25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAg
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4m
Jik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNy
eXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8
dWludDhfdD4mJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19D
VFIuY3BwCmluZGV4IDViODU4NDQ5MzA5NDIyNzZlNTU0MmY5ZjQxNGRmZTczMjVkMTQ1MDIuLjRi
ZmIyZGMxMTMyNzgzYjU4NTQ0ODAyZDgyZGQwY2JmNjQ1NzAwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19D
VFIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3Ry
UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1zLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcxLDcgKzcyLDI4IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0NUUjo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJh
Y2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKwor
ICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFy
YW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5U
ZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1FbmNyeXB0KCpw
YXJhbWV0ZXJzLCBrZXksIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAocmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
ZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dv
cmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAg
ICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCkuY29kZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhl
IERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygK
KyAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpkZWNyeXB0KHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9L
ZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYm
IGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTgyLDcg
KzEwNCwyOCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZv
cm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBo
ZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBj
b250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUu
ZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5
ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHBsYXRmb3JtRGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNpcGhlclRl
eHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DVFI6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5
T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRp
b25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmgKaW5k
ZXggY2YwNmE1MDlkZjJkY2ExMDdhMjNhN2RlZTI2ZWNkZWZhZTg3MDNjMC4uYzIxYTUyNzE3Nzk2
ZmViNDNmODU4YzMxOTY2MzA5YzBjOTExODdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaApAQCAtNTAs
OCArNTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2Fs
bGJhY2smJikgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJl
ZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNl
cHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0g
ICAgdm9pZCBwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JD
YWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
V29ya1F1ZXVlJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxh
dGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkm
LCBWZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50
OF90Pj4gcGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBD
cnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCmluZGV4IGY2Nzc5ODZjZWQyMTAxOTM0M2UzMmNlMzE1
Y2JmNDNlZGY1ZjRkMzQuLmM2ZTliYzdlMDYwMGRlODgxMTE4MjBkOGYxY2FkY2I2ZWRhNTJlYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19HQ00uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVz
S2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDcgKzk0
LDI3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBX
VEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdv
cmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKHBs
YWluVGV4dCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRl
ciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNh
bGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4K
KyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJh
Y2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC0xMjIsNyArMTQzLDI3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mCiAgICAgfQogI2VuZGlmCiAKLSAgICBwbGF0Zm9ybURlY3J5cHQoV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQpLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7
CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBo
ZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRGVjcnlw
dCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCByZXN1bHQgPSByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBj
YWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmgKaW5kZXggNWZhZTA1NDE4MmQ2OTg0NGM2
MGEyZjNkMzQzNGQ4ZTdhODgxN2MwYi4uODcwM2JhYWYzYjE0ZTg3Y2FhMTA1ZGIzNzVkZWQwMzdi
MmI1YjIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZXhwb3J0S2V5KFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5
PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAg
RXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rv
cjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlw
dG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25D
YWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3Rh
dGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJik7
CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNyeXB0
KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8dWlu
dDhfdD4mJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNw
cAppbmRleCBkMTgwZjgyMGYyN2I1OGFjMjI2MTY1MjdlZTljNmYyZmY4MWRmMzA0Li45Njk5MDk2
MmZkY2NmM2FlMmRkYWJiNGVjMjFlNzEyY2Y2NmM5NjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAK
QEAgLTE2NCwxMiArMTY0LDI1IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjp3cmFwS2V5
KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhCiAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBwbGF0Zm9ybVdyYXBLZXkoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3Zl
KGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjaykpOworCisgICAgYXV0byByZXN1
bHQgPSBwbGF0Zm9ybVdyYXBLZXkoa2V5LCBXVEZNb3ZlKGRhdGEpKTsKKyAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNh
bGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXOjp1bndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50
OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNr
JiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7Ci0gICAgcGxhdGZvcm1VbndyYXBLZXkoV1RGTW92ZShr
ZXkpLCBXVEZNb3ZlKGRhdGEpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjaykpOworICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1VbndyYXBLZXkoa2V5LCBXVEZN
b3ZlKGRhdGEpKTsKKyAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpn
ZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19LVy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0tXLmgKaW5kZXggMGNjZGI2N2I4MDM4MDgzZWNmNGEyZDU3YjU3NDdmNTlkMmQ1
Njg4Yi4uMjJjMjc3ZTQ4NDg4NDI1YWMyOWYyY2ZmZDAxM2QzMDdhM2VhODUyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmgKQEAgLTU2LDggKzU2LDggQEAgcHJpdmF0ZToKICAgICBFeGNlcHRpb25Pcjx2b2lk
PiBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyc0RlcHJlY2F0ZWQmLCBj
b25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRt
YXAsIEtleUNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjaykgZmluYWw7
CiAKICAgICBib29sIGtleUFsZ29yaXRobU1hdGNoZXMoY29uc3QgQ3J5cHRvS2V5JikgY29uc3Q7
Ci0gICAgdm9pZCBwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOwotICAgIHZvaWQg
cGxhdGZvcm1VbndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZl
Y3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtV3JhcEtleShjb25zdCBDcnlwdG9LZXkmLCBW
ZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gcGxhdGZvcm1VbndyYXBLZXkoY29uc3QgQ3J5cHRvS2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiYp
OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9LZXlB
RVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENh
bGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBwbGF0Zm9y
bURlY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYs
IFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjayk7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKaW5kZXggY2Y3YjNlNmI3ZmQ1YTdkZDcyNDNkNmMzNzY1
NTMyOGZjYjBmYjI1NC4uZjc5YTUyODAxZDNiZDBmOGJiNzBlYzJiODE3NjZjMjUxNmY2ZWMwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVT
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5j
bHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAKQEAgLTE2Nyw2MCArMTY2LDI2
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lk
IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYm
IGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxi
YWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAg
ICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJh
bWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4
dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAg
ICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0Nm
YlBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdEVuY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdU
Rk1vdmUocGxhaW5UZXh0KSk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkgewotICAgICAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBj
b250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0g
ICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwor
ICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmND
ZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0
b0tleUFFUz4oa2V5KTsKKworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXku
a2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAg
ICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9y
IH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRp
b25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVl
LmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtl
eSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYg
YWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4o
KnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERl
Y3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lw
aGVyVGV4dCkpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQv
V29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAg
ICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRv
JiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1z
PihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+
KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBh
ZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgIGlmICgh
b3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAg
ICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFl
c0NiY1BhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJH
Q3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0ZCR0NyeXB0LmNwcAppbmRleCBlZWM2OTc4MzcwYTY4YWRiNTQ0NDdhMjFhY2NiZjhiM2Yx
YjFjZjNkLi5kMzdkNWUxMDQyNmJhYzRkNmM2YTFkOWVmMzdjNjVmOTVmMmVhNjdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJH
Q3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NGQkdDcnlwdC5jcHAKQEAgLTI4LDE4ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKFNV
QlRMRV9DUllQVE8pCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRv
S2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2Fs
bGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCitFeGNlcHRpb25P
cjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRW5jcnlw
dChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgVmVjdG9yPHVp
bnQ4X3Q+JiYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9u
IHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZC
OjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1
ZXVlJikKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qjo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlw
dG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcAppbmRleCA4NzRhYjE2MjMxMGI0
YTg3MDgwM2QzNDAyMzFhYzI1MDA2YzQwNmZmLi4xNmIwMTA0Mjk1N2Q1YmM0M2RhN2UyMmE3MGQ5
M2ZiMmM2ZmM4NzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKQEAgLTMyLDcgKzMyLDYg
QEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcy5oIgogI2luY2x1ZGUg
IkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRv
L2djcnlwdC9VdGlsaXRpZXMuaD4KIApAQCAtMTk2LDYwICsxOTUsMjYgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRBRVNfQ1RSKFBBTDo6R0NyeXB0OjpDaXBo
ZXJPcGVyYXRpb24KICAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVp
bnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhf
dD4mJiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlz
cGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0g
V1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYgYWVzUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRl
cnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihr
ZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2Ny
eV9jaXBoZXJfZW5jcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0
b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIHBsYWluVGV4dCk7Ci0gICAgICAgICAgICBpZiAo
IW91dHB1dCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNl
IGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFk
cy4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAg
ICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJy
b3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRl
ciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91
dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1
dCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tl
eSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKworICAgIGF1dG8gb3V0cHV0ID0gZ2Ny
eXB0QUVTX0NUUihnY3J5X2NpcGhlcl9lbmNyeXB0LCBhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRl
cnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgcGxhaW5UZXh0KTsKKyAg
ICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9y
IH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRp
b25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVl
LmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtl
eSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYg
YWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBh
cmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19D
VFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50
ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRleHQpOwotICAgICAgICAg
ICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJl
ZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2Vy
IHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAg
ICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJh
dGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZN
b3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
JiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1
dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQ
YXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRl
eHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAKaW5kZXggYjUxYzI1YjY1Nzk4
MjdhYjg2ODAwNDJiZWUzNTc3OGYxZWZmY2E5MC4uYjE2MTk2MDk3MWFiZmNmMTg0ZWM2YzkzN2U2
NzVmMzIyOGZkNTE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFu
ZGxlLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0NyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaD4KQEAgLTE4MCw2MCArMTc5LDI2IEBAIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSwKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lkIENyeXB0
b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0
b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3Jr
UXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJz
KSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0
byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4o
KnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVu
Y3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxh
aW5UZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0
ZXJzLnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAg
ICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcg
YmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0
LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUo
ZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRh
YmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxn
b3JpdGhtQWVzR2NtUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEVuY3J5
cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUocGxhaW5U
ZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJz
LnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgq
b3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVy
cywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NN
OjpwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Y29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0g
ICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJh
bWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJU
ZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRd
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8
Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBh
dXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFt
ZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRp
dGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAv
IDgpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJl
ZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2Vy
IHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAg
IFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5k
ZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPihwYXJhbWV0
ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisK
KyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0
ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lwaGVyVGV4dCksIGFlc1BhcmFtZXRlcnMuYWRkaXRp
b25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4
KTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlv
bkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5
cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAppbmRleCBjNWY0NTBkYzkyODVmYmQw
NWI0ODc1Mjc5YTQxNGE3ODcyODAzYWYxLi4xOWE5Y2RlMGUxZGUwNDA5ZGY3N2EwYmU2ZGYyNmI1
ZDU2NDcyNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0xMTYsMjggKzExNiwyMCBA
QCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdFVud3JhcEtleShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBr
ZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4
Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IENy
eXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogewotICAgIGF1dG8mIGFlc0tl
eSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdFdyYXBLZXkoYWVzS2V5LmtleSgpLCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkgewot
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBjYWxsYmFjaygqb3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9IGdj
cnlwdFdyYXBLZXkoZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLmtleSgpLCBkYXRhKTsKKyAg
ICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9y
IH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9y
PHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2Fs
bGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBDcnlwdG9LZXkm
IGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgYXV0byBvdXRwdXQgPSBnY3J5cHRV
bndyYXBLZXkoYWVzS2V5LmtleSgpLCBkYXRhKTsKLSAgICBpZiAoIW91dHB1dCkgewotICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjYWxsYmFjaygqb3V0cHV0KTsKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdFVu
d3JhcEtleShkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSkua2V5KCksIGRhdGEpOworICAgIGlm
ICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsK
KyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybUVuY3J5cHQoY29uc3QgQ3J5cHRvS2V5QUVTJiwg
Y29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFj
ayYmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQ01hYy5jcHAKaW5kZXggYjE4N2NjNWFiMWM2M2JhNTMyYTkzZjMyMDhiYmY1ZTE4
Nzc4MmIzOS4uMTYxM2M2ZjUzNTgyNzg3ZWMwNDIyODM3NmRjYjk0MzE3NDU0MDY1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19D
QkNNYWMuY3BwCkBAIC02Niw1MiArNjYsMjAgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnMKICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
QkM6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFj
ayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBX
b3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBw
bGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2go
W3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBs
YWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0
byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBB
U1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMx
MjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwg
YWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLmRhdGEoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQu
ZGF0YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
Ci0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVy
cyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4ocGFyYW1ldGVycyk7
CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIEFT
U0VSVChhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEy
OCk7CisgICAgcmV0dXJuIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLmRhdGEoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQuZGF0YSgpLCBwbGFp
blRleHQuc2l6ZSgpKTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9y
bURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFy
YW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRl
eHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0
aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYg
d29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1l
dGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQp
CiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRl
cnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQg
PSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBt
dXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0Fs
Z29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIGFzc2VydChh
ZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0g
ICAgICAgIGF1dG8gcmVzdWx0ID0gdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNQYXJh
bWV0ZXJzLml2VmVjdG9yKCkuZGF0YSgpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQuZGF0YSgp
LCBjaXBoZXJUZXh0LnNpemUoKSk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBh
ZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAg
ICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1
bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAg
IGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQo
YWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwor
ICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKS5kYXRhKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dC5kYXRhKCksIGNpcGhlclRl
eHQuc2l6ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJl
Y2F0ZWQmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lkQ2FsbGJh
Y2smJiBmYWlsdXJlQ2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCTWFjLmNwcAppbmRleCA0NmEwZDI4NTllYWZkZDVk
ZTdlNjUzNzk4YjJhMGVjNDgzZmUxNGI4Li5lZTliNDI1MGJjN2QyYWU4Njk3OTgxZDNjZDNjMGRm
ODA4MDQ4YjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0Fs
Z29yaXRobUFFU19DRkJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHAKQEAgLTYzLDUyICs2MywyMCBAQCBzdGF0aWMgRXhj
ZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiB0cmFuc2Zvcm1BRVNfQ0ZCKENDT3BlcmF0aW9uIG9w
ZXJhdGlvbiwgY29ucwogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9y
PHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdv
cmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9
IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVzUGFyYW1l
dGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRl
cnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVChhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuc2l6ZSgpID09
IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdHJhbnNmb3JtQUVT
X0NGQihrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwg
cGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5n
IGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4
dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIg
YmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgIGNvbnRl
eHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IHJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAg
ICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENy
eXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVz
S2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIEFTU0VSVChhZXNQYXJhbWV0
ZXJzLml2VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7CisgICAgcmV0dXJu
IHRyYW5zZm9ybUFFU19DRkIoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBh
ZXNLZXkua2V5KCksIHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4m
JiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFj
ayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBX
b3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBj
aXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNo
KFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBj
aXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNv
bnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2Fz
dDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAg
YXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAg
ICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVB
RVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DRkIoa0NDRGVjcnlw
dCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwot
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVT
X0NGQihrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwg
Y2lwaGVyVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwCmlu
ZGV4IDU4YzM4MjliOTkwYzdhMjJhMzkzZTU0ZmE4OTJhMzcyMmUzM2E3ZTYuLjVlMWY1MDJlNmQz
YTljMWFiZThlODhhZjRmNzM3MjdlMGNlOTliOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSTWFjLmNwcApAQCAtMTM5LDUy
ICsxMzksMjAgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdHJhbnNmb3Jt
QUVTX0NUUihDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnMKICAgICByZXR1cm4gV1RGTW92ZSho
ZWFkKTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQo
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywg
UmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUp
CitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBs
YXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25z
dCBDcnlwdG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQogewotICAgIGNv
bnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92
ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBs
YWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAg
ICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3Ry
UGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENy
eXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuY291
bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DVFIoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5jb3Vu
dGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXkua2V5KCksIHBsYWluVGV4
dCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0p
OwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1BZXNDdHJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25j
YXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5jb3VudGVy
VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7CisgICAgcmV0dXJuIHRyYW5z
Zm9ybUFFU19DVFIoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFl
c1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCk7CiB9CiAKLXZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYg
a2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxi
YWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0g
ICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFl
c1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJh
bWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihr
ZXkuZ2V0KCkpOwotICAgICAgICBhc3NlcnQoYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCku
c2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdHJh
bnNmb3JtQUVTX0NUUihrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwg
YWVzUGFyYW1ldGVycy5sZW5ndGgsIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCk7Ci0gICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBv
bmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVu
dC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERv
Y3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3Vs
dCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwor
ICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQ
YXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tl
eUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCkuc2l6
ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7CisgICAgcmV0dXJuIHRyYW5zZm9ybUFFU19DVFIo
a0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMu
bGVuZ3RoLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29y
aXRobUFFU19HQ01NYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNTWFjLmNwcAppbmRleCAyYjRiNmI2YjY4YWY4OTJlZDlhYmEzNGJkNGI3ZGNj
MjU2ZDBkYmEwLi40ZmJjZTI5MjZiNzE2MDMwNjk0ODg0YjlmMDZkN2U0NmJkOTY0ZTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19HQ01N
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0dDTU1hYy5jcHAKQEAgLTczLDUwICs3MywxOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9y
PHVpbnQ4X3Q+PiBkZWN5cHRBRVNfR0NNKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIGNvbgog
ICAgIHJldHVybiBXVEZNb3ZlKHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNh
bGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBD
cnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90
PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNw
YXRjaChbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5
KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAm
Y29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25j
YXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBh
dXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAg
IGF1dG8gcmVzdWx0ID0gZW5jcnlwdEFFU19HQ00oYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBh
ZXNLZXkua2V5KCksIHBsYWluVGV4dCwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3Rv
cigpLCAqKGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoKSAvIDgpOwotICAgICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVy
ZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRo
cmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMp
OwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRl
cmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3Jr
ZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBh
ZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPihwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7
CisgICAgcmV0dXJuIGVuY3J5cHRBRVNfR0NNKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVz
S2V5LmtleSgpLCBwbGFpblRleHQsIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3Io
KSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKIH0KIAotdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBr
ZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJh
Y2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQoQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXks
IFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAg
ICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBr
ZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVz
UGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4oKnBhcmFt
ZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVjeXB0QUVTX0dDTShhZXNQYXJhbWV0
ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCwgYWVzUGFyYW1ldGVycy5h
ZGRpdGlvbmFsRGF0YVZlY3RvcigpLCAqKGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoKSAvIDgpOwot
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzR2NtUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxD
cnlwdG9LZXlBRVM+KGtleSk7CisgICAgcmV0dXJuIGRlY3lwdEFFU19HQ00oYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQsIGFlc1BhcmFtZXRlcnMuYWRk
aXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkg
LyA4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwCmluZGV4IDhkYmZl
MTJlYzY1MDJlMDNjOTE3NjFjZmUxMzYyZDIyNjZmMzI4MGQuLjVjYjJiMjc3ODIyZGVkNjJlODIx
OWIwNzc4NThmYTFmMDczMDg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAKQEAgLTYzLDI2ICs2MywxNCBAQCBz
dGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiB1bndyYXBLZXlBRVNfS1coY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBrZXksCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAot
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleShSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFj
aywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoY29u
c3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiB7Ci0gICAgYXV0byYg
YWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gcmVz
dWx0ID0gd3JhcEtleUFFU19LVyhhZXNLZXkua2V5KCksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAg
ICByZXR1cm4gd3JhcEtleUFFU19LVyhkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSkua2V5KCks
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0tXOjpwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBDcnlwdG9LZXkmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxD
cnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgYXV0byByZXN1bHQgPSB1bndyYXBLZXlBRVNf
S1coYWVzS2V5LmtleSgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
bGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgcmV0dXJuIHVud3JhcEtl
eUFFU19LVyhkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSkua2V5KCksIGRhdGEuZGF0YSgpLCBk
YXRhLnNpemUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBWb2lkQ2FsbGJh
Y2smJiBmYWlsdXJlQ2FsbGJhY2spCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318478</attachid>
            <date>2017-08-17 23:25:02 -0700</date>
            <delta_ts>2017-08-21 04:05:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175539-20170818082500.patch</filename>
            <type>text/plain</type>
            <size>70600</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwOTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyNGNmMjk5MTMwMmZj
NTQ1ZmJkYTFlNTU0Y2I5ZWVkYzQ3ZTk3Zi4uMDYwY2ZjYjJiZmU5NGJhYjczNjUzNTYwMzNiZDM4
MzVmNDk0YzhmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE3LTA4LTE3ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQdXNo
IHRoZSBXb3JrUXVldWUgZGlzcGF0Y2ggY29kZSBhbmQgb3RoZXIgY29kZSBkdXBsaWNhdGVkIGJl
dHdlZW4gdGhlCisgICAgICAgIE1hYyBhbmQgbGliZ2NyeXB0IGltcGxlbWVudGF0aW9ucyBvZiBX
ZWIgQ3J5cHRvIGludG8gdGhlIHNoYXJlZCBsYXllci4KKyAgICAgICAgVGhpcyBwYXRjaCBmb2N1
c2VzIG9uIHRoZSBBRVMtYmFzZWQgYWxnb3JpdGhtcy4KKworICAgICAgICBGdW5jdGlvbnMgd2l0
aCBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBmcm9t
CisgICAgICAgIHRoZXNlIGFzeW5jaHJvbm91cyBkaXNwYXRjaGVzIGFyZSBtYWRlIHN0YXRpYyBh
bmQgcmV0dXJuIGFuIEV4Y2VwdGlvbk9yCisgICAgICAgIHZhbHVlLiBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzIG9iamVjdHMgYXJlIHBhc3NlZCB0aHJvdWdoIG5vbi1jb25zdAorICAgICAgICBy
ZWZlcmVuY2VzIGJlY2F1c2UgZGF0YSBnZXR0ZXJzIGNvdWxkIGxhemlseSBjb25zdHJ1Y3QgdGhl
IHVuZGVybHlpbmcKKyAgICAgICAgVmVjdG9yIG9iamVjdHMuIENyeXB0b0tleSBvYmplY3RzIGFy
ZSBwYXNzZWQgdGhyb3VnaCBjb25zdCByZWZlcmVuY2VzLgorICAgICAgICBJbXBsZW1lbnRhdGlv
bnMgY2FuIHRoZW4gbWFudWFsbHkgcmV0cmlldmUgYW5kIGZ1cnRoZXIgdmFsaWRhdGUgYW55IGtl
eQorICAgICAgICBvciBwYXJhbWV0ZXIgZGF0YSwgYXMgcmVxdWlyZWQgZm9yIHRoYXQgc3BlY2lm
aWMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgSW5wdXQgZGF0YSAocGxhaW4gdGV4dCwgY2lw
aGVyIHRleHQgb3Igc2lnbmF0dXJlKSBpcyBwYXNzZWQgdGhyb3VnaAorICAgICAgICBydmFsdWUg
cmVmZXJlbmNlcywgZ2l2aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBhIGNoYW5jZSB0byByZXVzZSB0
aGF0CisgICAgICAgIFZlY3RvciBvYmplY3QgdG8gcGVyZm9ybSBhbnkgYWRkaXRpb25hbCB0cmFu
c2Zvcm1hdGlvbiAoZS5nLiBwYWRkaW5nKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8g
Y2hhbmdlcyBpbiBiZWhhdmlvciB0aGF0J3MgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZW5jcnlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KToKKyAgICAgICAg
KiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmg6CisgICAgICAgICog
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaDoKKyAgICAgICAgKiBjcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19DVFI6OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19HQ00uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTTo6ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1B
RVNfR0NNOjpkZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNLmg6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6
d3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnVud3Jh
cEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tX
Lmg6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3Jt
RW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0
Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQkdDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZC
OjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0Fs
Z29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2djcnlw
dC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNy
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkpOgorICAg
ICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KToK
KyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlw
dCk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSTWFjLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURl
Y3J5cHQpOgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTU1hYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVu
Y3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZv
cm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3Jt
V3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRm
b3JtVW53cmFwS2V5KToKKwogMjAxNy0wOC0xNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSW5wdXQgRXZlbnRzXSBSZW5hbWUgaW5wdXRUeXBlICJm
b3JtYXRGb3JlQ29sb3IiIHRvICJmb3JtYXRGb250Q29sb3IiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3Bw
CmluZGV4IDgwMGQzYmY4MGQ5YjhmNjVkMGZmOWU5MWJiOGYzMjRhY2MwYjE3OWQuLmEzNmI4MDRh
Yzc2Yzg3ZWM5MDg1M2Y5ZTFjYjJhMDc0NWY4OTMyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1z
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9j
dGV0U2VxdWVuY2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzMsNyArNzQsMjggQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29u
dGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJz
ID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBX
VEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFi
bGUgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybUVuY3J5cHQoKnBhcmFtZXRl
cnMsIGtleSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVy
ZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRo
cmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAg
ICAgICAgW2VjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAg
ICAgICAgICAgIFtyZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQog
CiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBr
ZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJh
Y2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtODQsNyArMTA2LDI4
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9w
ZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybURlY3J5
cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQp
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQs
IHdvcmtRdWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRj
aCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZN
b3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
cGxhdGZvcm1EZWNyeXB0KCpwYXJhbWV0ZXJzLCBrZXksIFdURk1vdmUoY2lwaGVyVGV4dCkpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNr
IHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0
LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbZWMgPSByZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
ZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRl
ciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW3Jlc3VsdCA9IHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6
Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBh
aXJDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxi
YWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaAppbmRleCAxNmQy
ZTgzMTk5NDQzMDIwMWY1MGI1NmI2MjU3YjRjMDM0NzBmZGFmLi4xNzMwYmFjYWE1MjEzNDZhNTAz
YzkyMjdlNzcwMjkxNWQwOWQwNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5oCkBAIC01Nyw4ICs1Nyw4
IEBAIHByaXZhdGU6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gaW1wb3J0S2V5KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnNEZXByZWNhdGVkJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwLCBLZXlDYWxsYmFjayYmLCBWb2lk
Q2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spIGZpbmFsOwogCiAgICAgYm9vbCBrZXlBbGdvcml0
aG1NYXRjaGVzKGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtc0RlcHJlY2F0ZWQmIGFs
Z29yaXRobVBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYpIGNvbnN0OwotICAgIHZvaWQgcGxh
dGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYm
LCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwg
RXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYp
OwotICAgIHZvaWQgcGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVj
dG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdvcmtRdWV1ZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+
IHBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRv
S2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IHBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29u
c3QgQ3J5cHRvS2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHBsYXRmb3JtRW5jcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNh
dGVkJiwgY29uc3QgQ3J5cHRvS2V5QUVTJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZl
Y3RvckNhbGxiYWNrJiYsIFZvaWRDYWxsYmFjayYmIGZhaWx1cmVDYWxsYmFjayk7CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gcGxhdGZvcm1EZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobUFlc0Ni
Y1BhcmFtc0RlcHJlY2F0ZWQmLCBjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVy
YXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxi
YWNrKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCmluZGV4IDljYTFlOGRmNWY2NTQ4MGVhOTUw
YmEyNzNjNTk1ZjA0NTJiMmIwMmIuLjRmZDdkOWE5NTU1MDA3ODZkZDFkOWUzMGJiNmMzZGQ1ZmRm
NjJhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DRkIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtQWVzS2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTYyLDcgKzYzLDI4IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZW5jcnlwdChzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBw
bGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3Zl
KHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29ya1F1
ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyks
IGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcGxhdGZvcm1FbmNyeXB0KCpwYXJhbWV0ZXJzLCBrZXksIFdURk1vdmUocGxhaW5U
ZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJl
aW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAg
IGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtlYyA9IHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbcmVzdWx0ID0gcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfQ0ZCOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBj
aXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYm
IGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3Jr
UXVldWUmIHdvcmtRdWV1ZSkKQEAgLTczLDcgKzk1LDI4IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0NGQjo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybURlY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQpLCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7CisKKyAgICBjb250
ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMg
PSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBX
VEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1EZWNyeXB0KCpwYXJhbWV0
ZXJzLCBrZXksIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAg
ICAgICAgICBbZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1
bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAg
ICAgICAgICAgICAgW3Jlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7
CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9
CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRv
S2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DRkIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19DRkIuaAppbmRleCBlZGVjODNjZGE0ZDNhNzZkMjdlZTIwMGQyNTc4
YTJlOGE2NDE1Mjk0Li4zNmI3N2EzN2UyMjRkZDczYjk4MmRhMjU2M2ZkYmVlNDZiZjEyZGRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NGQi5oCkBAIC01MCw4ICs1MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
eHBvcnRLZXkoQ3J5cHRvS2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYmLCBLZXlEYXRhQ2FsbGJh
Y2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8c2l6ZV90
PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpIGZpbmFsOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0
b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1
aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZl
Y3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
LCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJik7CisgICAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCmluZGV4IGZkNWExZWE1
MzcyZjY5YWU0ZDA2MDhmMGE2NmYwMWY1MTA3ZWIzN2QuLjZhNjkzNDBhM2U4MjJmMjdhYzJlMDgz
ZGFhZDkzYTgzNGYwNWY5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTcxLDcgKzcyLDI4IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZW5j
cnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkp
LCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7Cisg
ICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFy
YW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRl
eHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1FbmNyeXB0KCpwYXJhbWV0ZXJzLCBrZXksIFdURk1v
dmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtlYyA9IHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVu
Y2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJl
YWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbcmVz
dWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfQ1RSOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWlu
dDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25D
YWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTgyLDcgKzEwNCwyOCBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1EZWNyeXB0KFdURk1vdmUocGFy
YW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxs
YmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOwor
CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBo
ZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRGVjcnlw
dCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgW2VjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgIFtyZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVl
KCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmdlbmVyYXRlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBj
YWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmgKaW5kZXggZDk4ZjY5ZTg5OGMxNzNiMTYz
MGYxNTNiMGFiMmE4ZjNmY2VkZDgxNS4uNGUwZGQ3ZGVmNTQyOGQyYTg4OTU2OWRkMmZlN2FjZDI0
MWU1NWViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NUUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZXhwb3J0S2V5KENyeXB0b0tleUZvcm1hdCwgUmVmPENyeXB0b0tleT4mJiwgS2V5
RGF0YUNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIEV4Y2VwdGlv
bk9yPHNpemVfdD4gZ2V0S2V5TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
KSBmaW5hbDsKIAotICAgIHZvaWQgcGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhf
dD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOwotICAgIHZvaWQgcGxhdGZvcm1EZWNyeXB0KHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYm
LCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2sm
JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOworICAgIHN0YXRpYyBFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiYpOworICAgIHN0
YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRGVjcnlwdChDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiYp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAppbmRl
eCBjMDE0M2Q5ZDEwZjA3YTJkNTc2MjBhMTJlMDg3OWQwNTFjMWQ1ZGNjLi5hMDZiODM2YzJkYzgy
MDJiMmJiYzFkN2RmNjJkMTQ1MjM5ZTkwZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcy5oIgog
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0
b0tleUFFUy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC05Myw3ICs5NCwyNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19HQ006OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGxhdGZvcm1FbmNyeXB0KFdURk1vdmUo
cGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShwbGFpblRleHQpLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtRdWV1ZSk7
CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFp
blRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0
XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybUVuY3J5cHQo
KnBhcmFtZXRlcnMsIGtleSwgV1RGTW92ZShwbGFpblRleHQpKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQv
V29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAg
ICAgICAgICAgICAgICAgW2VjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgIFtyZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11
dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmRlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0
b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtMTIy
LDcgKzE0MywyNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmRlY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgIH0KICNlbmRpZgogCi0g
ICAgcGxhdGZvcm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RG
TW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworICAgIGNvbnRleHQucmVmKCk7CisgICAgd29y
a1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVy
cyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92
ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBwbGF0Zm9ybURlY3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgV1RGTW92ZShj
aXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFm
dGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAg
ICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtlYyA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVm
KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbcmVzdWx0
ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfR0NNOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2Fn
ZXMsIEtleU9yS2V5UGFpckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5o
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dD
TS5oCmluZGV4IDgzNmE3MDFhZGJlN2JkM2I4NzM3ZWE0ZWZjODg5NTk1NDA5ZGYwOGEuLjhkMjU5
ODhiYjY2ZDliYzUyNWYyZGE0YWUwMjlhZWI1MGUwYjU0YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmgK
QEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydEtleShDcnlwdG9LZXlG
b3JtYXQsIFJlZjxDcnlwdG9LZXk+JiYsIEtleURhdGFDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxs
YmFjayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+IGdldEtleUxlbmd0aChjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRmb3Jt
RW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVm
PENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKLSAg
ICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNh
bGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBX
b3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0
Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYs
IFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4
X3Q+PiBwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENy
eXB0b0tleSYsIFZlY3Rvcjx1aW50OF90PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19LVy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfS1cuY3BwCmluZGV4IDI4NTg5MmY5NzMwNTBiYzFjZTVkMjY2NTcxMTRh
NTFlMTNmZmI4NTYuLmRlMjY2YmM0NjRlZjc1NjdiNTQzMTdlNGFlOWVlNTQ0OGU2MWNlNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19LVy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXLmNwcApAQCAtMTY0LDEyICsxNjQsMjUgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfS1c6OndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90
PiYmIGRhdGEKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtV3JhcEtleShXVEZNb3ZlKGtleSksIFdU
Rk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtV3JhcEtleShrZXksIFdURk1vdmUoZGF0
YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
IH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFj
aywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKIHsKLSAgICBwbGF0Zm9y
bVVud3JhcEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2sp
LCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9y
bVVud3JhcEtleShrZXksIFdURk1vdmUoZGF0YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlw
dG9BbGdvcml0aG1BRVNfS1c6OmdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaAppbmRleCBhMjE4Njc4ZDZlNzkzYTUy
Njk1MjhkNmViZDAxNDE5OWY4ZjVjYjZlLi43OTQ5N2ExNWU4MzFkMGY2MDQyZTU3MmI0Y2JlOWY5
NDNmNTA5YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfS1cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaApAQCAtNTYsOCArNTYsOCBAQCBwcml2YXRlOgog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCwgS2V5Q2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFp
bHVyZUNhbGxiYWNrKSBmaW5hbDsKIAogICAgIGJvb2wga2V5QWxnb3JpdGhtTWF0Y2hlcyhjb25z
dCBDcnlwdG9LZXkmKSBjb25zdDsKLSAgICB2b2lkIHBsYXRmb3JtV3JhcEtleShSZWY8Q3J5cHRv
S2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2Fs
bGJhY2smJik7Ci0gICAgdm9pZCBwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJik7
CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1XcmFwS2V5
KGNvbnN0IENyeXB0b0tleSYsIFZlY3Rvcjx1aW50OF90PiYmKTsKKyAgICBzdGF0aWMgRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybVVud3JhcEtleShjb25zdCBDcnlwdG9LZXkm
LCBWZWN0b3I8dWludDhfdD4mJik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcGxhdGZvcm1FbmNy
eXB0KGNvbnN0IENyeXB0b0tleUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0
b3JDYWxsYmFjayYmLCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spOwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHBsYXRmb3JtRGVjcnlwdChjb25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2smJiwgVm9pZENhbGxiYWNrJiYgZmFp
bHVyZUNhbGxiYWNrKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcAppbmRleCBjZjdiM2U2
YjdmZDVhN2RkNzI0M2Q2YzM3NjU1MzI4ZmNiMGZiMjU0Li5mNzlhNTI4MDFkM2JkMGY4YmI3MGVj
MmI4MTc2NmMyNTE2ZjZlYzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKICNp
bmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxwYWwvY3J5cHRvL2dj
cnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4K
IApAQCAtMTY3LDYwICsxNjYsMjYgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAogICAgIHJldHVy
biBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRl
cnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZl
Y3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2Fs
bGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1
ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JD
OjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Y29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAg
ICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFt
ZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4
dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5
cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBh
dXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFt
ZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKLSAgICAgICAgICAgIGlmICgh
b3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAg
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJv
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVy
IGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0
cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENy
eXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVz
S2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworCisgICAgYXV0byBvdXRwdXQgPSBn
Y3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZN
b3ZlKHBsYWluVGV4dCkpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0
b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURl
Y3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4dC5y
ZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RG
TW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92
ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkg
ewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNr
cyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAg
ICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBi
YWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFi
bGUgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRv
d25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVj
cnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBo
ZXJUZXh0KSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBP
cGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zRGVwcmVjYXRlZCYsIGNvbnN0IENyeXB0b0tl
eUFFUyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjayYmLCBWb2lk
Q2FsbGJhY2smJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCmluZGV4IGVlYzY5NzgzNzBhNjhh
ZGI1NDQ0N2EyMWFjY2JmOGIzZjFiMWNmM2QuLmQzN2Q1ZTEwNDI2YmFjNGQ2YzZhMWQ5ZWYzN2M2
NWY5NWYyZWE2N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcApAQCAtMjgsMTggKzI4LDE2
IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0ZCOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxs
YmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29y
a1F1ZXVlJikKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQjo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBD
cnlwdG9LZXkmLCBWZWN0b3I8dWludDhfdD4mJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwogfQogCi12b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIFZlY3Rvcjx1aW50OF90PiYmKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9y
IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3Bw
CmluZGV4IDg3NGFiMTYyMzEwYjRhODcwODAzZDM0MDIzMWFjMjUwMDZjNDA2ZmYuLjE2YjAxMDQy
OTU3ZDViYzQzZGE3ZTIyYTcwZDkzZmIyYzZmYzg3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0
LmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3Ry
UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgog
I2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCkBAIC0xOTYsNjAgKzE5
NSwyNiBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEFFU19D
VFIoUEFMOjpHQ3J5cHQ6OkNpcGhlck9wZXJhdGlvbgogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAK
LXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9L
ZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYg
Y2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9u
T3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5
cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5
JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigp
OwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxh
aW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVz
Q3RyUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3du
Y2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0
ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9lbmNyeXB0LCBhZXNLZXkua2V5KCksIGFlc1Bh
cmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgcGxhaW5UZXh0
KTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERv
Y3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
Ci0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBb
b3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byYgYWVzUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4ocGFyYW1ldGVy
cyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworCisg
ICAgYXV0byBvdXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGFlc0tl
eS5rZXkoKSwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVu
Z3RoLCBwbGFpblRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0
b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURl
Y3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4dC5y
ZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RG
TW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92
ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkg
PSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8g
b3V0cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9kZWNyeXB0LCBhZXNLZXkua2V5KCks
IGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgY2lw
aGVyVGV4dCk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkgewotICAgICAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5
IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9X
b3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAg
ICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewotICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8m
IGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KHBh
cmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
KTsKKworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9kZWNyeXB0
LCBhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0
ZXJzLmxlbmd0aCwgY2lwaGVyVGV4dCk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRw
dXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNw
cAppbmRleCBiNTFjMjViNjU3OTgyN2FiODY4MDA0MmJlZTM1Nzc4ZjFlZmZjYTkwLi5iMTYxOTYw
OTcxYWJmY2YxODRlYzZjOTM3ZTY3NWYzMjI4ZmQ1MTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlw
dC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNHY21Q
YXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxw
YWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9V
dGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oPgpAQCAt
MTgwLDYwICsxNzksMjYgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBn
Y3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAogICAgIHJldHVybiBvdXRw
dXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJl
ZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNh
bGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ss
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQor
RXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0
Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3Qg
Q3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250
ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMg
PSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdU
Rk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9u
Q2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxn
b3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRh
VmVjdG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7Ci0gICAg
ICAgICAgICBpZiAoIW91dHB1dCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5
IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9X
b3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAg
ICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
T3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNh
bGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4K
LSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9
IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KHBhcmFtZXRlcnMpOworICAg
IGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKworICAgIGF1dG8g
b3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0
b3IoKSwgV1RGTW92ZShwbGFpblRleHQpLCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVj
dG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7CisgICAgaWYg
KCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9Owor
ICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFF
U19HQ006OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2Fs
bGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENy
eXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgY2lwaGVyVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNw
YXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBX
VEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8mIGFlc1Bh
cmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0
ZXJzKTsKLSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4o
a2V5LmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHREZWNyeXB0KGFl
c0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKGNpcGhlclRleHQp
LCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMudGFn
TGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7Ci0gICAgICAgICAgICBpZiAoIW91dHB1dCkgewotICAg
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRl
ciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soCi0gICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOwotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1B
ZXNHY21QYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENy
eXB0b0tleUFFUz4oa2V5KTsKKworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNL
ZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSwg
YWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xl
bmd0aC52YWx1ZV9vcigwKSAvIDgpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwCmlu
ZGV4IGM1ZjQ1MGRjOTI4NWZiZDA1YjQ4NzUyNzlhNDE0YTc4NzI4MDNhZjEuLjE5YTljZGUwZTFk
ZTA0MDlkZjc3YTBiZTZkZjI2YjVkNTY0NzI3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAK
QEAgLTExNiwyOCArMTE2LDIwIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gZ2NyeXB0VW53cmFwS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5CiAgICAgcmV0dXJu
IG91dHB1dDsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtl
eShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykK
K0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0
Zm9ybVdyYXBLZXkoY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEp
CiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OwotICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcEtleShhZXNLZXkua2V5KCksIGRhdGEpOwot
ICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVy
cm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrKCpvdXRwdXQpOwor
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcEtleShkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eSkua2V5KCksIGRhdGEpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNh
bGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrKQorRXhjZXB0aW9u
T3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFw
S2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogewotICAg
IGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICBh
dXRvIG91dHB1dCA9IGdjcnlwdFVud3JhcEtleShhZXNLZXkua2V5KCksIGRhdGEpOwotICAgIGlm
ICghb3V0cHV0KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrKCpvdXRwdXQpOworICAgIGF1
dG8gb3V0cHV0ID0gZ2NyeXB0VW53cmFwS2V5KGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KS5r
ZXkoKSwgZGF0YSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCiBF
eGNlcHRpb25Pcjx2b2lkPiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtRW5jcnlwdChj
b25zdCBDcnlwdG9LZXlBRVMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2Fs
bGJhY2smJiwgVm9pZENhbGxiYWNrJiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAppbmRleCBiMTg3Y2M1YWIxYzYz
YmE1MzJhOTNmMzIwOGJiZjVlMTg3NzgyYjM5Li4yZjBmYjljNWRmYmJmMTMwZjRmZjllZWE3YjRl
NzQ3ODU0MjQzZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0
b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPENvbW1vbkNy
eXB0by9Db21tb25DcnlwdG8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjYsNTIgKzY1
LDIwIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHRyYW5zZm9ybUFFU19D
QkMoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitF
eGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRm
b3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBD
cnlwdG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0KQogewotICAgIGNvbnRl
eHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShw
YXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWlu
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAg
ICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2Zi
UGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENy
eXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKLSAgICAgICAgYXV0byByZXN1
bHQgPSB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KS5kYXRhKCksIGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0LmRhdGEoKSwgcGxhaW5UZXh0LnNpemUo
KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0p
OwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRv
d25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZl
Y3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zv
cm1BRVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5kYXRhKCksIGFl
c0tleS5rZXkoKSwgcGxhaW5UZXh0LmRhdGEoKSwgcGxhaW5UZXh0LnNpemUoKSk7CiB9CiAKLXZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+
JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNh
bGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9y
PFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0
KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYg
a2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7
Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJz
KSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8m
IGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+
KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZlY3Rvcigp
LnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRy
YW5zZm9ybUFFU19DQkMoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLmRhdGEo
KSwgYWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOwot
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVT
X0NCQyhrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuZGF0YSgpLCBhZXNLZXku
a2V5KCksIGNpcGhlclRleHQuZGF0YSgpLCBjaXBoZXJUZXh0LnNpemUoKSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChjb25z
dCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXNEZXByZWNhdGVkJiBwYXJhbWV0ZXJzLCBjb25z
dCBDcnlwdG9LZXlBRVMmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVj
dG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgVm9pZENhbGxiYWNrJiYgZmFpbHVyZUNhbGxiYWNrKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0ZCTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQk1hYy5jcHAKaW5kZXggNDZhMGQyODU5ZWFmZGQ1ZGU3ZTY1Mzc5OGIyYTBlYzQ4M2ZlMTRi
OC4uYTRiNDE0OGJmNjFlYTg2MjAwZWM2ZjJjZDllN2EwY2FjNDdkNDRhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCTWFjLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMu
Y3BwCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDYmND
ZmJQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkNyeXB0by5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw1MiArNjIsMjAgQEAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NGQihDQ09wZXJhdGlvbiBvcGVy
YXRpb24sIGNvbnMKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi12b2lkIENyeXB0
b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBF
eGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBWZWN0
b3I8dWludDhfdD4mJiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3Jr
UXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBX
VEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRl
cnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJz
KTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0
KCkpOwotICAgICAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBr
Q0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19D
RkIoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBs
YWluVGV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBi
YWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
IGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5k
ZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJl
aW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0
LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlw
dG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tl
eSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0
cmFuc2Zvcm1BRVNfQ0ZCKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVz
S2V5LmtleSgpLCBwbGFpblRleHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6
OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
Y2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29y
a1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0Fs
Z29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lw
aGVyVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChb
cGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lw
aGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250
ZXh0XSgpIG11dGFibGUgewotICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1
dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAg
YXNzZXJ0KGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVT
MTI4KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSB0cmFuc2Zvcm1BRVNfQ0ZCKGtDQ0RlY3J5cHQs
IGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0KTsKLSAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERv
Y3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhj
ZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0
aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2so
cmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFl
c0NiY0NmYlBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIEFTU0VSVChhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCku
c2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7CisgICAgcmV0dXJuIHRyYW5zZm9ybUFFU19D
RkIoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNp
cGhlclRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSTWFjLmNwcAppbmRl
eCA1OGMzODI5Yjk5MGM3YTIyYTM5M2U1NGZhODkyYTM3MjJlMzNhN2U2Li4yZDM4ODJhYmEzMTYw
Y2QwNTAwOThiMDNkNTJkYzFmYmMyYmE1ZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAKQEAgLTMwLDcgKzMw
LDYgQEAKIAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcy5oIgogI2luY2x1
ZGUgIkNyeXB0b0tleUFFUy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uQ3J5cHRvLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTEzOSw1MiArMTM4LDIwIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IHRyYW5zZm9ybUFFU19DVFIoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zCiAgICAg
cmV0dXJuIFdURk1vdmUoaGVhZCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6
cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBw
bGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWlu
VGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFy
YW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5U
ZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0o
KSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0
b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNL
ZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChh
ZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4
KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSB0cmFuc2Zvcm1BRVNfQ1RSKGtDQ0VuY3J5cHQsIGFl
c1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgYWVzS2V5
LmtleSgpLCBwbGFpblRleHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0
ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAg
ICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNr
cyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAg
ICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0
ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
JiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1Bh
cmFtZXRlcnMuY291bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwor
ICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ1RSKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuY291
bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgYWVzS2V5LmtleSgpLCBwbGFpblRl
eHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUp
CitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBs
YXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25z
dCBDcnlwdG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCkKIHsKLSAgICBj
b250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1v
dmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUo
Y2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewot
ICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVz
Q3RyUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0
PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgYXNzZXJ0KGFlc1BhcmFtZXRlcnMu
Y291bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBh
dXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DVFIoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5j
b3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXkua2V5KCksIGNpcGhl
clRleHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFj
ayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBl
YyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5w
b3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRv
QWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuY291
bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0
cmFuc2Zvcm1BRVNfQ1RSKGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3Rvcigp
LCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgYWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTU1hYy5jcHAKaW5kZXggMmI0YjZiNmI2OGFmODky
ZWQ5YWJhMzRiZDRiN2RjYzI1NmQwZGJhMC4uNjViM2E1MWFiYWUxNDYxOWRlZmVkNTU4NzM3NTM4
YWM4ZmU3MDkwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0Ny
eXB0b0FsZ29yaXRobUFFU19HQ01NYWMuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
Q29tbW9uQ3J5cHRvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzR2Nt
UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczLDUwICs3MiwxOCBAQCBzdGF0aWMgRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBkZWN5cHRBRVNfR0NNKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgaXYsIGNvbgogICAgIHJldHVybiBXVEZNb3ZlKHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9y
PHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdv
cmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9
IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgYWVzUGFyYW1l
dGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4oKnBhcmFtZXRlcnMp
OwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQo
KSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZW5jcnlwdEFFU19HQ00oYWVzUGFyYW1ldGVycy5p
dlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCwgYWVzUGFyYW1ldGVycy5hZGRpdGlv
bmFsRGF0YVZlY3RvcigpLCAqKGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoKSAvIDgpOwotICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1
bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAgICB9KTsK
KyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2Nt
UGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9L
ZXlBRVM+KGtleSk7CisgICAgcmV0dXJuIGVuY3J5cHRBRVNfR0NNKGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQsIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25h
bERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsK
IH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENy
eXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxi
YWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhj
ZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9y
bURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5
cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4
dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhl
clRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBh
cmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlw
dG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVjeXB0QUVTX0dD
TShhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCwgYWVz
UGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCAqKGFlc1BhcmFtZXRlcnMudGFnTGVu
Z3RoKSAvIDgpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAg
ICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcg
YmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0
LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAg
ICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBi
ZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4
dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAg
ICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5
cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkg
PSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgcmV0dXJuIGRlY3lwdEFFU19HQ00o
YWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQsIGFlc1Bh
cmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgu
dmFsdWVfb3IoMCkgLyA4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3Bw
CmluZGV4IDhkYmZlMTJlYzY1MDJlMDNjOTE3NjFjZmUxMzYyZDIyNjZmMzI4MGQuLjVjYjJiMjc3
ODIyZGVkNjJlODIxOWIwNzc4NThmYTFmMDczMDg5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAKQEAgLTYzLDI2
ICs2MywxNCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiB1bndyYXBLZXlB
RVNfS1coY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksCiAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleShS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJh
Y2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4
Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9y
bVdyYXBLZXkoY29uc3QgQ3J5cHRvS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiB7
Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
ICAgIGF1dG8gcmVzdWx0ID0gd3JhcEtleUFFU19LVyhhZXNLZXkua2V5KCksIGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpKTsKKyAgICByZXR1cm4gd3JhcEtleUFFU19LVyhkb3duY2FzdDxDcnlwdG9LZXlBRVM+
KGtleSkua2V5KCksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKLXZvaWQgQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0
aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50
OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleShjb25zdCBDcnlw
dG9LZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKIHsKLSAgICBhdXRvJiBhZXNLZXkg
PSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAgYXV0byByZXN1bHQgPSB1
bndyYXBLZXlBRVNfS1coYWVzS2V5LmtleSgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwot
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgcmV0
dXJuIHVud3JhcEtleUFFU19LVyhkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSkua2V5KCksIGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENyeXB0b0Fs
Z29yaXRobUFFU19LVzo6cGxhdGZvcm1FbmNyeXB0KGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBj
b25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBWb2lkQ2FsbGJhY2smJiBmYWlsdXJlQ2FsbGJhY2spCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318623</attachid>
            <date>2017-08-21 04:05:31 -0700</date>
            <delta_ts>2017-08-25 00:50:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175539-20170821130529.patch</filename>
            <type>text/plain</type>
            <size>70173</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwOTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWYwNzE3OGZkMTRjYWI1
NTg0NzBjNTAyYzM5NjY5YmQ2OWRmNDVlOC4uYWYyNTg3ZjY3YWI2ZDNkYWNhN2NhMTViZmMwNzE3
NmEzZjViZGQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE3LTA4LTIxICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQdXNo
IHRoZSBXb3JrUXVldWUgZGlzcGF0Y2ggY29kZSBhbmQgb3RoZXIgY29kZSBkdXBsaWNhdGVkIGJl
dHdlZW4gdGhlCisgICAgICAgIE1hYyBhbmQgbGliZ2NyeXB0IGltcGxlbWVudGF0aW9ucyBvZiBX
ZWIgQ3J5cHRvIGludG8gdGhlIHNoYXJlZCBsYXllci4KKyAgICAgICAgVGhpcyBwYXRjaCBmb2N1
c2VzIG9uIHRoZSBBRVMtYmFzZWQgYWxnb3JpdGhtcy4KKworICAgICAgICBGdW5jdGlvbnMgd2l0
aCBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBmcm9t
CisgICAgICAgIHRoZXNlIGFzeW5jaHJvbm91cyBkaXNwYXRjaGVzIGFyZSBtYWRlIHN0YXRpYyBh
bmQgcmV0dXJuIGFuIEV4Y2VwdGlvbk9yCisgICAgICAgIHZhbHVlLiBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzIG9iamVjdHMgYXJlIHBhc3NlZCB0aHJvdWdoIG5vbi1jb25zdAorICAgICAgICBy
ZWZlcmVuY2VzIGJlY2F1c2UgZGF0YSBnZXR0ZXJzIGNvdWxkIGxhemlseSBjb25zdHJ1Y3QgdGhl
IHVuZGVybHlpbmcKKyAgICAgICAgVmVjdG9yIG9iamVjdHMuIENyeXB0b0tleSBvYmplY3RzIGFy
ZSBwYXNzZWQgdGhyb3VnaCBjb25zdCByZWZlcmVuY2VzLgorICAgICAgICBJbXBsZW1lbnRhdGlv
bnMgY2FuIHRoZW4gbWFudWFsbHkgcmV0cmlldmUgYW5kIGZ1cnRoZXIgdmFsaWRhdGUgYW55IGtl
eQorICAgICAgICBvciBwYXJhbWV0ZXIgZGF0YSwgYXMgcmVxdWlyZWQgZm9yIHRoYXQgc3BlY2lm
aWMgaW1wbGVtZW50YXRpb24uIElucHV0CisgICAgICAgIGRhdGEgaXMgcGFzc2VkIHRocm91Z2gg
Y29uc3QgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgVmVjdG9yIG9iamVjdHMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIC0tIG5vIGNoYW5nZXMgaW4gYmVoYXZpb3IgdGhhdCdzIGNvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6ZGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19DRkIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZW5j
cnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpkZWNyeXB0
KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmg6
CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjplbmNyeXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5cHQpOgorICAgICAg
ICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaDoKKyAgICAgICAg
KiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmVuY3J5cHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZGVjcnlwdCk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5oOgorICAgICAgICAqIGNyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfS1c6OndyYXBLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0tXOjp1bndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19LVy5oOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICog
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQpOgor
ICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnY3J5cHRFbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6Omdj
cnlwdERlY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6
cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19H
Q006OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfS1dHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3Jp
dGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleSk6CisgICAgICAgICogY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkpOgorCiAyMDE3
LTA4LTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
RU1FXSBBZGQgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgSFRNTE1lZGlhRWxlbWVudDo6c2V0TWVk
aWFLZXlzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19DQkMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKaW5kZXggY2U2MDc3ZGNkODM5ODhlMDFjNTMy
ZTBkMzZkMjk1Mzg4MGNhZWQ4Ni4uNzJlZWE0MzkxMGFiNGFhYTE3ZjM5OGYyZDBkMDRiY2Q4YjFh
NTRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1BZXNLZXlQYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjIsNyArNjMsMjggQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBs
YXRmb3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUo
cGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
LCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVl
dWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBwbGF0Zm9ybUVuY3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgV1RGTW92ZShwbGFpblRl
eHQpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2VjID0gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtyZXN1bHQgPSByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjayhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNp
cGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlKQpAQCAtNzMsNyArOTUsMjggQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRGVjcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEZNb3ZlKGtleSksIFdURk1vdmUoY2lwaGVyVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRl
eHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9
IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdU
Rk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFi
bGUgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybURlY3J5cHQoKnBhcmFtZXRl
cnMsIGtleSwgV1RGTW92ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgICAgIFtlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAg
ICAgICAgICAgICBbcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0K
IAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9L
ZXlVc2FnZUJpdG1hcCB1c2FnZXMsIEtleU9yS2V5UGFpckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4
Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQy5oCmluZGV4IDRmYmFkMmI1OWIyZDk5NmIzYzQzNDFjY2ZmOTA4
NzEyZjIxNTQ0ZmEuLmEwYjQ5MTI3NTE4MDNjODI4YTFjYzYwYjdjMzNkMTQzY2I1ZWM3ZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmgKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4
cG9ydEtleShDcnlwdG9LZXlGb3JtYXQsIFJlZjxDcnlwdG9LZXk+JiYsIEtleURhdGFDYWxsYmFj
ayYmLCBFeGNlcHRpb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+
IGdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAK
LSAgICB2b2lkIHBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
ckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXb3JrUXVldWUmKTsKLSAgICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVp
bnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYs
IGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworICAgIHN0YXRpYyBF
eGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCmluZGV4
IDljYTFlOGRmNWY2NTQ4MGVhOTUwYmEyNzNjNTk1ZjA0NTJiMmIwMmIuLjRmZDdkOWE5NTU1MDA3
ODZkZDFkOWUzMGJiNmMzZGQ1ZmRmNjJhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgi
CiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzS2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5
cHRvS2V5QUVTLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyLDcgKzYzLDI4IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0NGQjo6ZW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGTW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRl
eHQucmVmKCk7CisgICAgd29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9
IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RG
TW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25D
YWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxhdGZvcm1FbmNyeXB0KCpwYXJhbWV0ZXJz
LCBrZXksIFdURk1vdmUocGxhaW5UZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVu
Y2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJl
YWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAg
ICAgIFtlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9u
bHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50
L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAg
ICAgICAgICBbcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAog
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpkZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5
LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKQEAgLTczLDcgKzk1LDI4IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJh
dGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwbGF0Zm9ybURlY3J5cHQo
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQpLCBX
VEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdv
cmtRdWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgK
KyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3Zl
KGtleSksIGNpcGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcGxh
dGZvcm1EZWNyeXB0KCpwYXJhbWV0ZXJzLCBrZXksIFdURk1vdmUoY2lwaGVyVGV4dCkpOworICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBi
ZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgW3Jlc3VsdCA9IHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6Z2Vu
ZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJD
YWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNr
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaAppbmRleCBlZGVjODNj
ZGE0ZDNhNzZkMjdlZTIwMGQyNTc4YTJlOGE2NDE1Mjk0Li42ZGRiODc2ZGJiODBiMjdmNGIzNjAy
NTQ0NGU4MmMyNjk2ZTQ0OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oCkBAIC01MCw4ICs1MCw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBleHBvcnRLZXkoQ3J5cHRvS2V5Rm9ybWF0LCBSZWY8Q3J5cHRv
S2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZl
Y3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxD
cnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRp
b25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAg
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9y
bURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfQ1RSLmNwcAppbmRleCBmZDVhMWVhNTM3MmY2OWFlNGQwNjA4ZjBhNjZmMDFmNTEw
N2ViMzdkLi42YTY5MzQwYTNlODIyZjI3YWMyZTA4M2RhYWQ5M2E4MzRmMDVmOWNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
Q1RSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfQ1RSLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobUFlc0N0clBhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFlc0tleVBhcmFt
cy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MSw3ICs3MiwyOCBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRp
b25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1FbmNyeXB0KFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShwbGFpblRleHQpLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQsIHdvcmtR
dWV1ZSk7CisKKyAgICBjb250ZXh0LnJlZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAg
ICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtl
eSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwg
JmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3Jt
RW5jcnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKHBsYWluVGV4dCkpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNr
KAorICAgICAgICAgICAgICAgICAgICBbZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNv
ZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBi
YWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soCisgICAgICAgICAgICAgICAgW3Jlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlwdChz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBS
ZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUp
CkBAIC04Miw3ICsxMDQsMjggQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpkZWNyeXB0
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIHBsYXRmb3JtRGVjcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdU
Rk1vdmUoY2lwaGVyVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKworICAgIGNvbnRleHQucmVmKCk7CisgICAg
d29ya1F1ZXVlLmRpc3BhdGNoKAorICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1l
dGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4
dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgeworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybURlY3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgV1RGTW92
ZShjaXBoZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtlYyA9IHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRl
cmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVu
Y2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJl
YWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAgICBbcmVz
dWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKIH0KIAogdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfQ1RSOjpnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1
c2FnZXMsIEtleU9yS2V5UGFpckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNr
JiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NU
Ui5oIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NUUi5oCmluZGV4IGQ5OGY2OWU4OThjMTczYjE2MzBmMTUzYjBhYjJhOGYzZmNlZGQ4MTUuLmNk
NzRjZjEzMGUyZDU4Yzc1ZjE2ZGRmZTdkOTM5Y2M4M2E2MmRmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmgKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4cG9ydEtleShDcnlwdG9L
ZXlGb3JtYXQsIFJlZjxDcnlwdG9LZXk+JiYsIEtleURhdGFDYWxsYmFjayYmLCBFeGNlcHRpb25D
YWxsYmFjayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+IGdldEtleUxlbmd0aChj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRm
b3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwg
UmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4
Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKTsK
LSAgICB2b2lkIHBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3Rv
ckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBXb3JrUXVldWUmKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBw
bGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tl
eSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0
b3I8dWludDhfdD4+IHBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwg
Y29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCmluZGV4IGMwMTQzZDlkMTBmMDdh
MmQ1NzYyMGExMmUwODc5ZDA1MWMxZDVkY2MuLmEwNmI4MzZjMmRjODIwMmIyYmJjMWQ3ZGY2MmQx
NDUyMzllOTBmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtQWVzS2V5UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTkzLDcgKzk0LDI3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZW5jcnlwdChz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBwbGF0Zm9ybUVuY3J5cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
TW92ZShrZXkpLCBXVEZNb3ZlKHBsYWluVGV4dCksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgY29udGV4dCwgd29ya1F1ZXVlKTsKKyAgICBjb250ZXh0LnJl
ZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUo
cGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtRW5jcnlwdCgqcGFyYW1ldGVycywga2V5
LCBXVEZNb3ZlKHBsYWluVGV4dCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNh
bGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4K
KyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBb
ZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRl
cmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3Jr
ZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgW3Jlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhj
ZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC0xMjIsNyArMTQzLDI3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mCiAgICAgfQogI2VuZGlmCiAKLSAgICBwbGF0Zm9ybURlY3J5
cHQoV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShrZXkpLCBXVEZNb3ZlKGNpcGhlclRleHQp
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGNvbnRleHQs
IHdvcmtRdWV1ZSk7CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2go
CisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92
ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBs
YXRmb3JtRGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBXVEZNb3ZlKGNpcGhlclRleHQpKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKKyAgICAgICAgICAgICAgICAgICAgW2VjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVj
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIg
YmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCisgICAgICAgICAgICBj
b250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgIFtyZXN1bHQgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNh
bGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006Omdl
bmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWly
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmgKaW5kZXggODM2YTcw
MWFkYmU3YmQzYjg3MzdlYTRlZmM4ODk1OTU0MDlkZjA4YS4uMzk5ZWFhYzVhMGVmNTYzYThjZTBk
NjE3MmI0NGZhYTE2MWU1YzM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uaApAQCAtNTAsOCArNTAsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgZXhwb3J0S2V5KENyeXB0b0tleUZvcm1hdCwgUmVmPENyeXB0
b0tleT4mJiwgS2V5RGF0YUNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYpIGZpbmFsOwog
ICAgIEV4Y2VwdGlvbk9yPHNpemVfdD4gZ2V0S2V5TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmKSBmaW5hbDsKIAotICAgIHZvaWQgcGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBW
ZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOwotICAgIHZvaWQgcGxhdGZvcm1E
ZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8
Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0
aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOworICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtRW5jcnlwdChDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+Jik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZv
cm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19LVy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfS1cuY3BwCmluZGV4IDc4MGE1ODYzYWFiZDY4YWY0NTgwYjJmNzgwMTQwYmMzMmZm
MzlkY2EuLmQwNTQxNTZhYjhmMzNiNWYyM2M4MTMxNDdhOTdlNzc3ZGM0ZDBlMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19L
Vy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXLmNwcApAQCAtMTU0LDEyICsxNTQsMjUgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfS1c6OndyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtV3JhcEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUo
ZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisK
KyAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3JtV3JhcEtleShrZXksIFdURk1vdmUoZGF0YSkpOwor
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAog
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtl
eSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhj
ZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKIHsKLSAgICBwbGF0Zm9ybVVud3Jh
cEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisgICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybVVud3Jh
cEtleShrZXksIFdURk1vdmUoZGF0YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkp
IHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5j
b2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdv
cml0aG1BRVNfS1c6OmdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaAppbmRleCA4YzI4OTFmMTVjMjY0NDE2YjBhZjlk
M2I5Y2E4MWVjNTlmMTE4YjkxLi5lOTIyZGM4ZGU0Y2NjYzhhNjY0NmEzODkwODM1NzQyMjVmNTU4
MjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfS1cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1BRVNfS1cuaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgdW53cmFwS2V5KFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JD
YWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25Pcjxz
aXplX3Q+IGdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmlu
YWw7CiAKLSAgICB2b2lkIHBsYXRmb3JtV3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8
dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJik7Ci0gICAg
dm9pZCBwbGF0Zm9ybVVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4m
JiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJik7CisgICAgc3RhdGljIEV4
Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1XcmFwS2V5KGNvbnN0IENyeXB0b0tl
eSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0
b3I8dWludDhfdD4+IHBsYXRmb3JtVW53cmFwS2V5KGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0Ny
eXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQ0dDcnlwdC5jcHAKaW5kZXggYTU5MjZiYTVhMTFjYmM1MzMyOTJhMTYzM2Y0ZjJmNGIwM2Vm
ODU3Yy4uODg2ZDJjZmI1YmU5OTAwZDY1ODhmMWNhMzdiYjZhMTAwNjllNzBiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0Ny
eXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRo
bUFFU19DQkNHQ3J5cHQuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5jbHVkZSA8cGFs
L2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+CiAKQEAgLTE2Nyw2MCArMTY2LDI2IEBAIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RGVjcnlwdChjb25zdCBWZWN0
b3I8dWludDhfdD4mIGtleSwKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi12b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNl
cHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50
OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdv
cmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBh
dXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFy
YW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxD
cnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2Ny
eXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92
ZShwbGFpblRleHQpKTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRl
eHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3Vt
ZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAg
ICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAg
YXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBh
cmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
QUVTPihrZXkpOworCisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXko
KSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBWZWN0b3I8dWludDhfdD4ocGxhaW5UZXh0KSk7
CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25F
cnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVj
dG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhj
ZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAg
d29ya1F1ZXVlLmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1l
dGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4
dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RG
TW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAg
ICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0Nm
YlBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9
IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdU
Rk1vdmUoY2lwaGVyVGV4dCkpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAg
Y29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAot
ICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
KyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2Jj
Q2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlw
dG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5
LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGNpcGhlclRleHQpOworICAgIGlmICgh
b3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAg
ICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0ZCR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKaW5kZXggZWVjNjk3ODM3MGE2OGFkYjU0NDQ3YTIxYWNj
YmY4YjNmMWIxY2YzZC4uNThhM2Q0NmU2OGNhNmU3NGRiMGQwMGU4MTU0YTU2ZDk5Y2NjNWQ2MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1B
RVNfQ0ZCR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwCkBAIC0yOCwxOCArMjgsMTYgQEAKIAogI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3Jt
RW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVm
PENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorRXhj
ZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9y
bUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKIH0KIAotdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBW
ZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgV29ya1F1ZXVlJikKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxn
b3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
LCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCmlu
ZGV4IDg3NGFiMTYyMzEwYjRhODcwODAzZDM0MDIzMWFjMjUwMDZjNDA2ZmYuLmMxMzQ4MmRjYzdi
MjBkNjMxMDcyZTg4NzQyZjJkNjAyZDk2ZmEzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNw
cApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFy
YW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgogI2lu
Y2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogCkBAIC0xOTYsNjAgKzE5NSwy
NiBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdEFFU19DVFIo
UEFMOjpHQ3J5cHQ6OkNpcGhlck9wZXJhdGlvbgogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+
JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2Fs
bGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQo
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBr
ZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGxhaW5UZXh0KQogewotICAgIGNvbnRleHQucmVm
KCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1v
dmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShw
bGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1B
ZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRv
d25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRw
dXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2VuY3J5cHQsIGFlc0tleS5rZXkoKSwgYWVz
UGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBwbGFpblRl
eHQpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFz
aygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJl
ZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2Vy
IHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAg
IFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5k
ZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0
ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisK
KyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZW5jcnlwdCwgYWVz
S2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5s
ZW5ndGgsIHBsYWluVGV4dCk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwog
fQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5
cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJh
Y2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3Jt
RGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlw
dG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNv
bnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVy
cyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9
IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11
dGFibGUgewotICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0
b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYg
YWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAg
ICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVzS2V5
LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5n
dGgsIGNpcGhlclRleHQpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcg
YmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29u
dGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayld
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9j
dW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAg
ICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAg
ICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFy
YW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlB
RVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJf
ZGVjcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVz
UGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92
ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdD
cnlwdC5jcHAKaW5kZXggYjUxYzI1YjY1Nzk4MjdhYjg2ODAwNDJiZWUzNTc3OGYxZWZmY2E5MC4u
YzU3MjQyNzFiNDE4ZDg5NTA1Mzk4NTI1OWZhZGM1NjFjMzc4NmQ4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19H
Q01HQ3J5cHQuY3BwCkBAIC0zMywxNCArMzMsMTMgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0
aG1BZXNHY21QYXJhbXMuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRv
L2djcnlwdC9VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxpdGll
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGFkZGl0aW9uYWxEYXRhLCB1aW50OF90IHRhZ0xlbmd0aCkKK3N0
YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25h
bERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3RoKQogewogICAgIC8vIERldGVybWluZSB0aGUgQUVTIGFs
Z29yaXRobSBmb3IgdGhlIGdpdmVuIGtleSBzaXplLgogICAgIGF1dG8gYWxnb3JpdGhtID0gUEFM
OjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOwpAQCAtMTA4
LDcgKzEwNyw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0
RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwKICAgICByZXR1cm4gb3V0cHV0Owog
fQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdERlY3J5cHQo
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZl
Y3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRp
b25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3RoKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGl2LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNpcGhlclRleHQs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3Ro
KQogewogICAgIC8vIERldGVybWluZSB0aGUgQUVTIGFsZ29yaXRobSBmb3IgdGhlIGdpdmVuIGtl
eSBzaXplLgogICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZv
cktleVNpemUoa2V5LnNpemUoKSAqIDgpOwpAQCAtMTgwLDYwICsxNzksMjYgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYga2V5LAogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8
dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlv
bkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+
PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgcGxhaW5UZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1
ZXVlLmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyks
IGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8m
IGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpw
YXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tl
eUFFUz4oa2V5LmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNy
eXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWlu
VGV4dCksIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVy
cy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAg
ICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0
aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJh
Y2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5w
b3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29y
aXRobUFlc0djbVBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworCisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0
KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBwbGFpblRleHQsIGFlc1Bh
cmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgu
dmFsdWVfb3IoMCkgLyA4KTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9
CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFj
ayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1E
ZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0
b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNpcGhlclRleHQpCiB7Ci0gICAgY29u
dGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJz
ID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0g
V1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0
aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRv
QWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBh
ZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAg
IGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlwdChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMu
aXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFs
RGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOwot
ICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAg
ICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5j
ZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVh
ZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRw
dXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPihwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBh
dXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2
VmVjdG9yKCksIGNpcGhlclRleHQsIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3Io
KSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKKyAgICBpZiAoIW91
dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAg
cmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVT
X0tXR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0tXR0NyeXB0LmNwcAppbmRleCBkZjVlZDE2MTk1MmY1YTkzOTU3MGJjYmQ2YzdkNTYz
OGQ5ZmZjMTU4Li5jODZmNDUyZmNiN2Y1MDllNzAwNmIwNTE0OWY0ZDdlZWExNzY1ZmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19L
V0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0xMTUsMjggKzExNSwyMCBAQCBzdGF0aWMgc3RkOjpv
cHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdjcnlwdFVud3JhcEtleShjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGtleQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50
OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNr
JiYgZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0
b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3Jh
cEtleShhZXNLZXkua2V5KCksIGRhdGEpOwotICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNhbGxiYWNrKCpvdXRwdXQpOworICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcEtl
eShkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSkua2V5KCksIGRhdGEpOworICAgIGlmICghb3V0
cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICBy
ZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6
OnBsYXRmb3JtVW53cmFwS2V5KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4m
JiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4
Y2VwdGlvbkNhbGxiYWNrKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdv
cml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0VW53cmFw
S2V5KGFlc0tleS5rZXkoKSwgZGF0YSk7Ci0gICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgY2FsbGJhY2soKm91dHB1dCk7CisgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRVbndyYXBL
ZXkoZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLmtleSgpLCBkYXRhKTsKKyAgICBpZiAoIW91
dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAg
cmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Q01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19D
QkNNYWMuY3BwCmluZGV4IDljODhmNzQ0OWU1ZTZiYzk0YjdmYWRkODU1OWZhMDg4ZWFlOWUzZjku
LjNiNTc2NDAyOGM2MmFmZmYxMTNmMGIwYzQwMDhjMTBjZDRiOGY3OTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNw
cApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2Zi
UGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25DcnlwdG8uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsNTIgKzYyLDIwIEBAIHN0YXRpYyBFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRpb24gb3BlcmF0
aW9uLCBjb25zCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotdm9pZCBDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZl
Y3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhj
ZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWlu
dDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3
b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkg
PSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlv
bkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFt
ZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0
ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXku
Z2V0KCkpOwotICAgICAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9
PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFF
U19DQkMoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCks
IHBsYWluVGV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRl
eHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVy
IGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250
ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFl
c0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1l
dGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVy
biB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwg
YWVzS2V5LmtleSgpLCBwbGFpblRleHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
QkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+
JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJh
Y2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0
b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRp
c3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBk
b3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAg
ICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
ICAgICAgICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9j
a1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0ND
RGVjcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRl
eHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9
IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYo
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBi
YWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0
VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2Fs
bGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBj
YWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9
KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxn
b3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZW
ZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNm
b3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5r
ZXkoKSwgY2lwaGVyVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMu
Y3BwCmluZGV4IDQ2YTBkMjg1OWVhZmRkNWRlN2U2NTM3OThiMmEwZWM0ODNmZTE0YjguLjk1NDY1
NWNjMDk3MDk4MmM5Y2M4OGY1ZjI4NGRmOTJjOThkNWNiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCTWFjLmNwcApAQCAt
MzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1z
LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25DcnlwdG8uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsNTIgKzYyLDIwIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxW
ZWN0b3I8dWludDhfdD4+IHRyYW5zZm9ybUFFU19DRkIoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBj
b25zCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1
aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9u
Q2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+
IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVl
dWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZN
b3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMg
PSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsK
LSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OwotICAgICAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NC
bG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DRkIo
a0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWlu
VGV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNr
IHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9z
dFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVj
ID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5n
IGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVs
ZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAg
IH0pOwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9B
bGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5p
dlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFu
c2Zvcm1BRVNfQ0ZCKGtDQ0VuY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5
LmtleSgpLCBwbGFpblRleHQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBs
YXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
JiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lw
aGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBl
eGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29y
aXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBj
aXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNo
KFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBj
aXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNv
bnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2Fz
dDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAg
YXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAg
ICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVB
RVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DRkIoa0NDRGVjcnlw
dCwgYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwot
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUg
RG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2sp
XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3Io
KS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVT
X0NGQihrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwg
Y2lwaGVyVGV4dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwCmlu
ZGV4IDU4YzM4MjliOTkwYzdhMjJhMzkzZTU0ZmE4OTJhMzcyMmUzM2E3ZTYuLjM2NWMyODIxMTg1
ZGU1OWQ4ZjE2M2UzZWM2NDJmZDhmM2U1NmRkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSTWFjLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25DcnlwdG8uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTM5LDUyICsxMzgsMjAgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1
aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NUUihDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnMKICAg
ICByZXR1cm4gV1RGTW92ZShoZWFkKTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RS
OjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYm
IHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2sm
JiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29y
a1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0Fs
Z29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0
Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSks
IHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNv
bnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2Fz
dDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0
byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBB
U1NFUlQoYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6
ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdHJhbnNmb3JtQUVTX0NUUihrQ0NFbmNy
eXB0LCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgs
IGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBj
YWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMu
Ci0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sg
PSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVy
cyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4ocGFyYW1ldGVycyk7Cisg
ICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIEFTU0VS
VChhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVT
MTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVTX0NUUihrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0
ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGFlc0tleS5rZXkoKSwg
cGxhaW5UZXh0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURl
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1l
dGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQs
IFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9u
Q2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29y
a1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNf
Q1RSOjpwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVy
cywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY2lwaGVyVGV4
dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1l
dGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4
dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgp
IG11dGFibGUgewotICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRv
QWxnb3JpdGhtQWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tl
eSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgYXNzZXJ0KGFl
c1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgp
OwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DVFIoa0NDRGVjcnlwdCwgYWVz
UGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXku
a2V5KCksIGNpcGhlclRleHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0
ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAg
ICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNr
cyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAg
ICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0
ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJl
ZigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
JiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1Bh
cmFtZXRlcnMuY291bnRlclZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwor
ICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ1RSKGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMuY291
bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgYWVzS2V5LmtleSgpLCBjaXBoZXJU
ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNTWFjLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTU1hYy5jcHAKaW5kZXggMmI0
YjZiNmI2OGFmODkyZWQ5YWJhMzRiZDRiN2RjYzI1NmQwZGJhMC4uODU5ZjdlMmY1ZjYyMTZjZDBh
YjQ4NWZkMTkxOGFiNWJkODc5NmYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19HQ01NYWMuY3BwCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtQWVzR2NtUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGlj
VXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTczLDUwICs3MiwxOCBAQCBz
dGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBkZWN5cHRBRVNfR0NNKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgaXYsIGNvbgogICAgIHJldHVybiBXVEZNb3ZlKHBsYWluVGV4dCk7CiB9
CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVu
Y3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRv
S2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGxhaW5UZXh0KQogewotICAgIGNvbnRl
eHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShw
YXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWlu
VGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAg
ICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFy
YW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0
b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBlbmNyeXB0QUVTX0dD
TShhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0LCBhZXNQ
YXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksICooYWVzUGFyYW1ldGVycy50YWdMZW5n
dGgpIC8gOCk7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBi
YWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQu
cG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
IGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5k
ZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJl
aW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0
LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOworICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlw
dG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KTsKKyAgICByZXR1cm4gZW5jcnlwdEFFU19HQ00o
YWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCwgYWVzUGFy
YW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aC52
YWx1ZV9vcigwKSAvIDgpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRm
b3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBw
YXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVy
VGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNl
cHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVl
JiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRo
bUFFU19HQ006OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBo
ZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBo
ZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYg
YWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IGRlY3lwdEFFU19HQ00oYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXku
a2V5KCksIGNpcGhlclRleHQsIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwg
KihhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aCkgLyA4KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2Ug
Y2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRz
LgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNv
ZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVy
ZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRo
cmVhZHMuCi0gICAgICAgIGNvbnRleHQucG9zdFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAg
IGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgYXV0byYgYWVzUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4ocGFyYW1ldGVy
cyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworICAg
IHJldHVybiBkZWN5cHRBRVNfR0NNKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5Lmtl
eSgpLCBjaXBoZXJUZXh0LCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksIGFl
c1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVlX29yKDApIC8gOCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0tXTWFjLmNwcAppbmRleCA0OTBkNmY5NzkyZjcyOGM5YjQ4MDVhN2Y1ZTRh
ZWEwOTE3ZDQxNzEwLi43MzI3ZWZjNWFmMjFkNDI2YWI2NmQ4N2VjMzU4NDA2N2QxODk3NGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19L
V01hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1B
RVNfS1dNYWMuY3BwCkBAIC01OSwyNiArNTksMTQgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rv
cjx1aW50OF90Pj4gdW53cmFwS2V5QUVTX0tXKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAog
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90
PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0Fs
Z29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gcmVzdWx0ID0gd3JhcEtleUFFU19L
VyhhZXNLZXkua2V5KCksIGRhdGEpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2Rl
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7CisgICAgcmV0dXJuIHdyYXBLZXlBRVNfS1coZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkpLmtleSgpLCBkYXRhKTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
S1c6OnBsYXRmb3JtVW53cmFwS2V5KFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhf
dD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYm
IGV4Y2VwdGlvbkNhbGxiYWNrKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9B
bGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgIGF1dG8gcmVzdWx0ID0gdW53cmFwS2V5
QUVTX0tXKGFlc0tleS5rZXkoKSwgZGF0YSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgewotICAgICAgICBleGNlcHRpb25DYWxsYmFjayhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
LmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbGJhY2socmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICByZXR1cm4gdW53cmFwS2V5QUVTX0tXKGRvd25jYXN0
PENyeXB0b0tleUFFUz4oa2V5KS5rZXkoKSwgZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319068</attachid>
            <date>2017-08-25 00:50:46 -0700</date>
            <delta_ts>2017-08-28 01:16:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175539-20170825095044.patch</filename>
            <type>text/plain</type>
            <size>61539</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVlYWI3MzAwNzI0MDIy
NTMxNmRkZjc5NWUyZGYwMzhmZWRkM2NlMy4uOWM2M2VlZmY0YTk2YTBmMjVjZTZhNzg0ZjI2ODBk
YjcxY2I0OGViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgwIEBACiAyMDE3LTA4LTI1ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbV2ViQ3J5cHRvXSBQ
dXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBBRVMgYWxnb3JpdGhtcyBpbnRvIHNoYXJlZCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQdXNo
IHRoZSBXb3JrUXVldWUgZGlzcGF0Y2ggY29kZSBhbmQgb3RoZXIgY29kZSBkdXBsaWNhdGVkIGJl
dHdlZW4gdGhlCisgICAgICAgIE1hYyBhbmQgbGliZ2NyeXB0IGltcGxlbWVudGF0aW9ucyBvZiBX
ZWIgQ3J5cHRvIGludG8gdGhlIHNoYXJlZCBsYXllci4KKyAgICAgICAgVGhpcyBwYXRjaCBmb2N1
c2VzIG9uIHRoZSBBRVMtYmFzZWQgYWxnb3JpdGhtcy4KKworICAgICAgICBGdW5jdGlvbnMgd2l0
aCBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBmcm9t
CisgICAgICAgIHRoZXNlIGFzeW5jaHJvbm91cyBkaXNwYXRjaGVzIGFyZSBtYWRlIHN0YXRpYyBh
bmQgcmV0dXJuIGFuIEV4Y2VwdGlvbk9yCisgICAgICAgIHZhbHVlLiBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzIG9iamVjdHMgYXJlIHBhc3NlZCB0aHJvdWdoIG5vbi1jb25zdAorICAgICAgICBy
ZWZlcmVuY2VzIGJlY2F1c2UgZGF0YSBnZXR0ZXJzIGNvdWxkIGxhemlseSBjb25zdHJ1Y3QgdGhl
IHVuZGVybHlpbmcKKyAgICAgICAgVmVjdG9yIG9iamVjdHMuIENyeXB0b0tleSBvYmplY3RzIGFy
ZSBwYXNzZWQgdGhyb3VnaCBjb25zdCByZWZlcmVuY2VzLgorICAgICAgICBJbXBsZW1lbnRhdGlv
bnMgY2FuIHRoZW4gbWFudWFsbHkgcmV0cmlldmUgYW5kIGZ1cnRoZXIgdmFsaWRhdGUgYW55IGtl
eQorICAgICAgICBvciBwYXJhbWV0ZXIgZGF0YSwgYXMgcmVxdWlyZWQgZm9yIHRoYXQgc3BlY2lm
aWMgaW1wbGVtZW50YXRpb24uIElucHV0CisgICAgICAgIGRhdGEgaXMgcGFzc2VkIHRocm91Z2gg
Y29uc3QgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgVmVjdG9yIG9iamVjdHMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIC0tIG5vIGNoYW5nZXMgaW4gYmVoYXZpb3IgdGhhdCdzIGNvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6ZGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQy5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19DRkIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZW5j
cnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpkZWNyeXB0
KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmg6
CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjplbmNyeXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5cHQpOgorICAgICAg
ICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaDoKKyAgICAgICAg
KiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmVuY3J5cHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6ZGVjcnlwdCk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5oOgorICAgICAgICAqIGNyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1BRVNfS1c6OndyYXBLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0tXOjp1bndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19LVy5oOgorICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8vZ2Ny
eXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICog
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQpOgor
ICAgICAgICAqIGNyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnY3J5cHRFbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6Omdj
cnlwdERlY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6
cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19H
Q006OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdv
cml0aG1BRVNfS1dHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGht
QUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3Jp
dGhtQUVTX0tXOjpwbGF0Zm9ybVVud3JhcEtleSk6CisgICAgICAgICogY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29y
aXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAqIGNyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNyeXB0KToKKyAgICAgICAgKiBjcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdCk6CisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybURlY3J5cHQpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFwS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXkpOgorCisyMDE3
LTA4LTI1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKwogICAgICAgICBb
V2ViQ3J5cHRvXSBQdXNoIFdvcmtRdWV1ZSBkaXNwYXRjaGVzIGZvciBSU0EgYWxnb3JpdGhtcyBp
bnRvIHNoYXJlZCBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU2MjEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAppbmRleCBjZTYwNzdkY2Q4Mzk4
OGUwMWM1MzJlMGQzNmQyOTUzODgwY2FlZDg2Li40MzkwY2ExMGIxNTc3ODM3OGIzOTdmMmEwYTk2
Y2NlNzgyOTlmNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcApAQCAtNjIsNyArNjIsMTEgQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0
aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3JtRW5jcnlwdChX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RG
TW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3Jr
UXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24od29ya1F1ZXVlLCBjb250ZXh0LCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksCisgICAgICAgIFtwYXJh
bWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRl
eHQgPSBXVEZNb3ZlKHBsYWluVGV4dCldIHsKKyAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybUVu
Y3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgcGxhaW5UZXh0KTsKKyAgICAgICAgfSk7CiB9CiAKIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwg
VmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywg
RXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC03Myw3ICs3NywxMSBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRp
b25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZvcm1EZWNyeXB0KFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RG
TW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3Jr
UXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24od29ya1F1ZXVlLCBjb250ZXh0LCBXVEZN
b3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksCisgICAgICAgIFtwYXJh
bWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJU
ZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KV0geworICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
RGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBjaXBoZXJUZXh0KTsKKyAgICAgICAgfSk7CiB9CiAK
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNl
cHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DQkMuaAppbmRleCA0ZmJhZDJiNTliMmQ5OTZiM2M0MzQxY2NmZjkwODcx
MmYyMTU0NGZhLi5hMGI0OTEyNzUxODAzYzgyOGExY2M2MGI3YzMzZDE0M2NiNWVjN2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ0JDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5oCkBAIC01MCw4ICs1MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBleHBv
cnRLZXkoQ3J5cHRvS2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2sm
JiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBn
ZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpIGZpbmFsOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JD
YWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
V29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50
OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rv
cjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBj
b25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKKyAgICBzdGF0aWMgRXhj
ZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybURlY3J5cHQoQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAppbmRleCA5
Y2ExZThkZjVmNjU0ODBlYTk1MGJhMjczYzU5NWYwNDUyYjJiMDJiLi4yYjdkZWMyYmU5ZjA3YmY3
NzY1NjIyNzVjMDAzMzI5YmE5ZjQwOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcApAQCAtNjIs
NyArNjIsMTEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjplbmNyeXB0KHN0ZDo6dW5p
cXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRm
b3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxh
aW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBj
b250ZXh0LCB3b3JrUXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24od29ya1F1ZXVlLCBj
b250ZXh0LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksCisg
ICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCldIHsKKyAgICAgICAgICAgIHJldHVy
biBwbGF0Zm9ybUVuY3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgcGxhaW5UZXh0KTsKKyAgICAgICAg
fSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6ZGVjcnlwdChzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRv
S2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCkBAIC03Myw3
ICs3NywxMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmRlY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcGxhdGZv
cm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBo
ZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBj
b250ZXh0LCB3b3JrUXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24od29ya1F1ZXVlLCBj
b250ZXh0LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksCisg
ICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KV0geworICAgICAgICAgICAgcmV0
dXJuIHBsYXRmb3JtRGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBjaXBoZXJUZXh0KTsKKyAgICAg
ICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6Z2VuZXJhdGVLZXkoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayYmIGNh
bGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuaAppbmRleCBlZGVjODNjZGE0ZDNhNzZkMjdl
ZTIwMGQyNTc4YTJlOGE2NDE1Mjk0Li42ZGRiODc2ZGJiODBiMjdmNGIzNjAyNTQ0NGU4MmMyNjk2
ZTQ0OGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5oCkBAIC01MCw4ICs1MCw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBleHBvcnRLZXkoQ3J5cHRvS2V5Rm9ybWF0LCBSZWY8Q3J5cHRvS2V5PiYmLCBLZXlE
YXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAgICAgRXhjZXB0aW9u
T3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYp
IGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90
PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlY3J5cHQoc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYs
IFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKKyAg
ICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9ybURlY3J5cHQoQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmNwcAppbmRleCBmZDVhMWVhNTM3MmY2OWFlNGQwNjA4ZjBhNjZmMDFmNTEwN2ViMzdkLi41Mzg0
N2Y0MWJmOTJlZTRiYjU3YzBhNjI0OGQ2MDEwODM4OWE5MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmNwcApAQCAtNzEsNyArNzEsMTEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjplbmNy
eXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYKICAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSks
IFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24o
d29ya1F1ZXVlLCBjb250ZXh0LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5
ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCldIHsKKyAgICAg
ICAgICAgIHJldHVybiBwbGF0Zm9ybUVuY3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgcGxhaW5UZXh0
KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6ZGVjcnlw
dChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJz
LCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVj
dG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxs
YmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVl
dWUpCkBAIC04Miw3ICs4NiwxMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmRlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JgogICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgcGxhdGZvcm1EZWNyeXB0KFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwg
V1RGTW92ZShjaXBoZXJUZXh0KSwgV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9u
Q2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUpOworCisgICAgZGlzcGF0Y2hPcGVyYXRpb24o
d29ya1F1ZXVlLCBjb250ZXh0LCBXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayksCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5
ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KV0geworICAg
ICAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGVjcnlwdCgqcGFyYW1ldGVycywga2V5LCBjaXBoZXJU
ZXh0KTsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6Z2Vu
ZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzLCBLZXlPcktleVBhaXJD
YWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNr
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuaAppbmRleCBkOThmNjll
ODk4YzE3M2IxNjMwZjE1M2IwYWIyYThmM2ZjZWRkODE1Li5jZDc0Y2YxMzBlMmQ1OGM3NWYxNmRk
ZmU3ZDkzOWNjODNhNjJkZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5oCkBAIC01MCw4ICs1MCw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBleHBvcnRLZXkoQ3J5cHRvS2V5Rm9ybWF0LCBSZWY8Q3J5cHRv
S2V5PiYmLCBLZXlEYXRhQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJikgZmluYWw7CiAg
ICAgRXhjZXB0aW9uT3I8c2l6ZV90PiBnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYpIGZpbmFsOwogCi0gICAgdm9pZCBwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZl
Y3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxD
cnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRp
b25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJik7CisgICAg
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1FbmNyeXB0KENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBwbGF0Zm9y
bURlY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0dDTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNLmNwcAppbmRleCBjMDE0M2Q5ZDEwZjA3YTJkNTc2MjBhMTJlMDg3OWQwNTFj
MWQ1ZGNjLi5iYWFjMDVjNDVkOWY3MWNlNjE4NDk5N2FmZDU1MzRhY2RjYmM5ZGY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
R0NNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNLmNwcApAQCAtOTMsNyArOTMsMTAgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1B
RVNfR0NNOjplbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBsYXRmb3JtRW5jcnlwdChXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEZNb3ZlKGtleSksIFdURk1vdmUocGxhaW5UZXh0KSwgV1RGTW92ZShj
YWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3JrUXVldWUp
OworICAgIGRpc3BhdGNoT3BlcmF0aW9uKHdvcmtRdWV1ZSwgY29udGV4dCwgV1RGTW92ZShjYWxs
YmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLAorICAgICAgICBbcGFyYW1ldGVycyA9
IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RG
TW92ZShwbGFpblRleHQpXSB7CisgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1FbmNyeXB0KCpw
YXJhbWV0ZXJzLCBrZXksIHBsYWluVGV4dCk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIENyeXB0
b0FsZ29yaXRobUFFU19HQ006OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1
aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlv
bkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQpAQCAtMTIyLDcgKzEyNSwxMCBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19HQ006OmRlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JgogICAgIH0KICNlbmRpZgogCi0gICAgcGxhdGZvcm1EZWNyeXB0KFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoa2V5KSwgV1RGTW92ZShjaXBoZXJUZXh0KSwgV1RG
TW92ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBjb250ZXh0LCB3b3Jr
UXVldWUpOworICAgIGRpc3BhdGNoT3BlcmF0aW9uKHdvcmtRdWV1ZSwgY29udGV4dCwgV1RGTW92
ZShjYWxsYmFjayksIFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLAorICAgICAgICBbcGFyYW1l
dGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4
dCA9IFdURk1vdmUoY2lwaGVyVGV4dCldIHsKKyAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybURl
Y3J5cHQoKnBhcmFtZXRlcnMsIGtleSwgY2lwaGVyVGV4dCk7CisgICAgICAgIH0pOwogfQogCiB2
b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlcywgS2V5T3JLZXlQYWlyQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0
aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNLmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1BRVNfR0NNLmgKaW5kZXggODM2YTcwMWFkYmU3YmQzYjg3MzdlYTRlZmM4ODk1OTU0
MDlkZjA4YS4uMzk5ZWFhYzVhMGVmNTYzYThjZTBkNjE3MmI0NGZhYTE2MWU1YzM2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0dDTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19HQ00uaApAQCAtNTAsOCArNTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhwb3J0
S2V5KENyeXB0b0tleUZvcm1hdCwgUmVmPENyeXB0b0tleT4mJiwgS2V5RGF0YUNhbGxiYWNrJiYs
IEV4Y2VwdGlvbkNhbGxiYWNrJiYpIGZpbmFsOwogICAgIEV4Y2VwdGlvbk9yPHNpemVfdD4gZ2V0
S2V5TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKSBmaW5hbDsKIAotICAg
IHZvaWQgcGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2Fs
bGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdv
cmtRdWV1ZSYpOwotICAgIHZvaWQgcGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhf
dD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IHBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29u
c3QgQ3J5cHRvS2V5JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gcGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCmluZGV4IDc4MGE1
ODYzYWFiZDY4YWY0NTgwYjJmNzgwMTQwYmMzMmZmMzlkY2EuLmQwNTQxNTZhYjhmMzNiNWYyM2M4
MTMxNDdhOTdlNzc3ZGM0ZDBlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcApAQCAtMTU0LDEyICsx
NTQsMjUgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OndyYXBLZXkoUmVmPENyeXB0b0tl
eT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEKICAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soT3BlcmF0aW9uRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHBsYXRmb3Jt
V3JhcEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUoZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHBsYXRmb3Jt
V3JhcEtleShrZXksIFdURk1vdmUoZGF0YSkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KS5jb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6
OnVud3JhcEtleShSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwg
VmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25D
YWxsYmFjaykKIHsKLSAgICBwbGF0Zm9ybVVud3JhcEtleShXVEZNb3ZlKGtleSksIFdURk1vdmUo
ZGF0YSksIFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBwbGF0Zm9ybVVud3JhcEtleShrZXksIFdURk1vdmUoZGF0YSkpOwor
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAog
RXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OmdldEtleUxlbmd0aChj
b25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cu
aAppbmRleCA4YzI4OTFmMTVjMjY0NDE2YjBhZjlkM2I5Y2E4MWVjNTlmMTE4YjkxLi5lOTIyZGM4
ZGU0Y2NjYzhhNjY0NmEzODkwODM1NzQyMjVmNTU4MjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuaApAQCAt
NTAsOCArNTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgdW53cmFwS2V5KFJlZjxDcnlwdG9LZXk+
JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFj
ayYmKSBmaW5hbDsKICAgICBFeGNlcHRpb25PcjxzaXplX3Q+IGdldEtleUxlbmd0aChjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJikgZmluYWw7CiAKLSAgICB2b2lkIHBsYXRmb3JtV3Jh
cEtleShSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2sm
JiwgRXhjZXB0aW9uQ2FsbGJhY2smJik7Ci0gICAgdm9pZCBwbGF0Zm9ybVVud3JhcEtleShSZWY8
Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0
aW9uQ2FsbGJhY2smJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4g
cGxhdGZvcm1XcmFwS2V5KGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYp
OworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHBsYXRmb3JtVW53cmFw
S2V5KGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ0dDcnlwdC5jcHAKaW5kZXggYTU5MjZi
YTVhMTFjYmM1MzMyOTJhMTYzM2Y0ZjJmNGIwM2VmODU3Yy4uODg2ZDJjZmI1YmU5OTAwZDY1ODhm
MWNhMzdiYjZhMTAwNjllNzBiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DQkNHQ3J5cHQuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8cGFsL2NyeXB0by9n
Y3J5cHQvSGFuZGxlLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmg+
CiAKQEAgLTE2Nyw2MCArMTY2LDI2IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4gZ2NyeXB0RGVjcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwKICAgICByZXR1
cm4gb3V0cHV0OwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5j
cnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0
ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBW
ZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtR
dWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6cGxhdGZvcm1FbmNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHBsYWluVGV4dCkK
IHsKLSAgICBjb250ZXh0LnJlZigpOwotICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKLSAgICAgICAg
W3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBs
YWluVGV4dCA9IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNh
c3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAg
ICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0K
LSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RW5jcnlwdChhZXNLZXkua2V5KCksIGFl
c1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShwbGFpblRleHQpKTsKLSAgICAgICAgICAg
IGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCi0gICAgICAgICAgICAg
ICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9
IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhPcGVyYXRp
b25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tz
IGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAg
ICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBbb3V0cHV0ID0gV1RGTW92
ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
b3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25j
YXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0
byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworCisgICAgYXV0byBvdXRw
dXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5pdlZlY3Rvcigp
LCBWZWN0b3I8dWludDhfdD4ocGxhaW5UZXh0KSk7CisgICAgaWYgKCFvdXRwdXQpCisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OworICAgIHJldHVybiBXVEZNb3Zl
KCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVj
cnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0
ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwg
VmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25D
YWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3Jr
UXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19D
QkM6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0
KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKAotICAgICAg
ICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwg
Y2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZj
b250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRv
d25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBhcmFtZXRlcnMpOwotICAg
ICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgp
LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIFdURk1vdmUoY2lwaGVyVGV4dCkpOwotICAgICAg
ICAgICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBk
ZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29y
a2VyIHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAg
ICAgICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9w
ZXJhdGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxs
YmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0g
ICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBX
VEZNb3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25D
YWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0g
ZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAg
ICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRv
IG91dHB1dCA9IGdjcnlwdERlY3J5cHQoYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVj
dG9yKCksIGNpcGhlclRleHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQkdDcnlwdC5jcHAKaW5k
ZXggZWVjNjk3ODM3MGE2OGFkYjU0NDQ3YTIxYWNjYmY4YjNmMWIxY2YzZC4uNThhM2Q0NmU2OGNh
NmU3NGRiMGQwMGU4MTU0YTU2ZDk5Y2NjNWQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCR0NyeXB0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DRkJHQ3J5cHQuY3Bw
CkBAIC0yOCwxOCArMjgsMTYgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybURlY3J5
cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlw
dG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25D
YWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK0V4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6cGxhdGZvcm1EZWNy
eXB0KENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUkdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCmluZGV4IDg3NGFiMTYyMzEwYjRhODcwODAzZDM0
MDIzMWFjMjUwMDZjNDA2ZmYuLmMxMzQ4MmRjYzdiMjBkNjMxMDcyZTg4NzQyZjJkNjAyZDk2ZmEz
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUkdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5
QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHBh
bC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0
aWxpdGllcy5oPgogCkBAIC0xOTYsNjAgKzE5NSwyNiBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGdjcnlwdEFFU19DVFIoUEFMOjpHQ3J5cHQ6OkNpcGhlck9wZXJhdGlv
bgogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6
cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBw
bGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
cGxhaW5UZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNo
KAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1v
dmUoa2V5KSwgcGxhaW5UZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJh
Y2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRl
cnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsK
LSAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5Lmdl
dCgpKTsKLQotICAgICAgICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lw
aGVyX2VuY3J5cHQsIGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCks
IGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBwbGFpblRleHQpOwotICAgICAgICAgICAgaWYgKCFvdXRw
dXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxs
YmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0g
ICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVp
bmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250
ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1v
dmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBt
dXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRv
QWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFF
U19DVFIoZ2NyeV9jaXBoZXJfZW5jcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNv
dW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIHBsYWluVGV4dCk7CisgICAgaWYg
KCFvdXRwdXQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9Owor
ICAgIHJldHVybiBXVEZNb3ZlKCpvdXRwdXQpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4
X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2Fs
bGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENy
eXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVl
LmRpc3BhdGNoKAotICAgICAgICBbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtl
eSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byYg
YWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBh
cmFtZXRlcnMpOwotICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
QUVTPihrZXkuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19D
VFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50
ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRleHQpOwotICAgICAgICAg
ICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJl
ZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2Vy
IHRocmVhZHMuCi0gICAgICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAg
ICAgICAgICAgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJh
dGlvbkVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZN
b3ZlKCpvdXRwdXQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShvdXRwdXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
JiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1
dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZGVjcnlwdCwgYWVzS2V5LmtleSgpLCBhZXNQ
YXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGNpcGhlclRl
eHQpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9n
Y3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTUdDcnlwdC5jcHAKaW5kZXggYjUxYzI1YjY1Nzk4
MjdhYjg2ODAwNDJiZWUzNTc3OGYxZWZmY2E5MC4uYzU3MjQyNzFiNDE4ZDg5NTA1Mzk4NTI1OWZh
ZGM1NjFjMzc4NmQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9D
cnlwdG9BbGdvcml0aG1BRVNfR0NNR0NyeXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19HQ01HQ3J5cHQuY3BwCkBAIC0zMywxNCArMzMs
MTMgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXMuaCIKICNpbmNsdWRl
ICJDcnlwdG9LZXlBRVMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9I
YW5kbGUuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KICNpbmNs
dWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpdiwgVmVj
dG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGFkZGl0aW9u
YWxEYXRhLCB1aW50OF90IHRhZ0xlbmd0aCkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1
aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBpdiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3RoKQog
ewogICAgIC8vIERldGVybWluZSB0aGUgQUVTIGFsZ29yaXRobSBmb3IgdGhlIGdpdmVuIGtleSBz
aXplLgogICAgIGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktl
eVNpemUoa2V5LnNpemUoKSAqIDgpOwpAQCAtMTA4LDcgKzEwNyw3IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0RW5jcnlwdChjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSwKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGdjcnlwdERlY3J5cHQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXks
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRkaXRpb25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3Ro
KQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHREZWNyeXB0KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGl2LCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGNpcGhlclRleHQsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYWRk
aXRpb25hbERhdGEsIHVpbnQ4X3QgdGFnTGVuZ3RoKQogewogICAgIC8vIERldGVybWluZSB0aGUg
QUVTIGFsZ29yaXRobSBmb3IgdGhlIGdpdmVuIGtleSBzaXplLgogICAgIGF1dG8gYWxnb3JpdGht
ID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5LnNpemUoKSAqIDgpOwpA
QCAtMTgwLDYwICsxNzksMjYgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBnY3J5cHREZWNyeXB0KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAogICAgIHJldHVybiBv
dXRwdXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1FbmNyeXB0
KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMs
IFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3Rv
ckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVl
KQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjpw
bGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGxhaW5UZXh0KQogewot
ICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKAotICAgICAgICBbcGFy
YW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtleSA9IFdURk1vdmUoa2V5KSwgcGxhaW5U
ZXh0ID0gV1RGTW92ZShwbGFpblRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0o
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxD
cnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGF1
dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLQotICAgICAg
ICAgICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1l
dGVycy5pdlZlY3RvcigpLCBXVEZNb3ZlKHBsYWluVGV4dCksIGFlc1BhcmFtZXRlcnMuYWRkaXRp
b25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4
KTsKLSAgICAgICAgICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERv
Y3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
Ci0gICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNl
cHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhPcGVyYXRpb25FcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZl
cmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0
aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICBb
b3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVy
ZWYoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgYXV0byYgYWVzUGFy
YW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0djbVBhcmFtcz4ocGFyYW1ldGVy
cyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworCisg
ICAgYXV0byBvdXRwdXQgPSBnY3J5cHRFbmNyeXB0KGFlc0tleS5rZXkoKSwgYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLCBwbGFpblRleHQsIGFlc1BhcmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0
b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgudmFsdWVfb3IoMCkgLyA4KTsKKyAgICBpZiAo
IW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07Cisg
ICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0dDTTo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhf
dD4mJiBjaXBoZXJUZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBFeGNlcHRpb25DYWxs
YmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK0V4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5
cHRvQWxnb3JpdGhtQUVTX0dDTTo6cGxhdGZvcm1EZWNyeXB0KENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGNpcGhlclRleHQpCiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUu
ZGlzcGF0Y2goCi0gICAgICAgIFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5
ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2Vw
dGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBhdXRvJiBh
ZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFy
YW1ldGVycyk7Ci0gICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlB
RVM+KGtleS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0RGVjcnlw
dChhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgV1RGTW92ZShjaXBoZXJU
ZXh0KSwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3RvcigpLCBhZXNQYXJhbWV0ZXJz
LnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOwotICAgICAgICAgICAgaWYgKCFvdXRwdXQpIHsK
LSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3Mg
YWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVycm9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFj
ayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAotICAgICAgICAgICAgICAgIFtvdXRwdXQgPSBXVEZNb3ZlKCpvdXRwdXQpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShvdXRwdXQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzR2NtUGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2Fz
dDxDcnlwdG9LZXlBRVM+KGtleSk7CisKKyAgICBhdXRvIG91dHB1dCA9IGdjcnlwdERlY3J5cHQo
YWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCksIGNpcGhlclRleHQsIGFlc1Bh
cmFtZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy50YWdMZW5ndGgu
dmFsdWVfb3IoMCkgLyA4KTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXR0NyeXB0LmNwcAppbmRleCBk
ZjVlZDE2MTk1MmY1YTkzOTU3MGJjYmQ2YzdkNTYzOGQ5ZmZjMTU4Li5jODZmNDUyZmNiN2Y1MDll
NzAwNmIwNTE0OWY0ZDdlZWExNzY1ZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlw
dG8vZ2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19LV0dDcnlwdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfS1dHQ3J5cHQuY3BwCkBAIC0x
MTUsMjggKzExNSwyMCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdj
cnlwdFVud3JhcEtleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleQogICAgIHJldHVybiBvdXRw
dXQ7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVm
PENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1X
cmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OwotICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcEtleShhZXNLZXkua2V5KCksIGRhdGEpOwot
ICAgIGlmICghb3V0cHV0KSB7Ci0gICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKE9wZXJhdGlvbkVy
cm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrKCpvdXRwdXQpOwor
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0V3JhcEtleShkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtl
eSkua2V5KCksIGRhdGEpOworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKKyAgICByZXR1cm4gV1RGTW92ZSgqb3V0cHV0KTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KFJlZjxDcnlw
dG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYmIGNh
bGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrKQorRXhjZXB0aW9u
T3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFw
S2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
ICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0VW53cmFwS2V5KGFlc0tleS5rZXkoKSwgZGF0YSk7Ci0g
ICAgaWYgKCFvdXRwdXQpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJy
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FsbGJhY2soKm91dHB1dCk7Cisg
ICAgYXV0byBvdXRwdXQgPSBnY3J5cHRVbndyYXBLZXkoZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihr
ZXkpLmtleSgpLCBkYXRhKTsKKyAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE9wZXJhdGlvbkVycm9yIH07CisgICAgcmV0dXJuIFdURk1vdmUoKm91dHB1dCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19DQkNNYWMuY3BwCmluZGV4IDljODhmNzQ0OWU1
ZTZiYzk0YjdmYWRkODU1OWZhMDg4ZWFlOWUzZjkuLjNiNTc2NDAyOGM2MmFmZmYxMTNmMGIwYzQw
MDhjMTBjZDRiOGY3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21h
Yy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
S2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
PENvbW1vbkNyeXB0by9Db21tb25DcnlwdG8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NjMsNTIgKzYyLDIwIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHRyYW5z
Zm9ybUFFU19DQkMoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zCiAgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybUVu
Y3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1l
dGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwg
VmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25D
YWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3Jr
UXVldWUpCitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19D
QkM6OnBsYXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
LCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQp
CiB7Ci0gICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRl
cnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9
IFdURk1vdmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0
aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdv
cml0aG1BZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5
ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoYWVz
UGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAg
ICAgICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzUGFyYW1l
dGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCk7Ci0gICAgICAgIGlmIChy
ZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRl
cmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3Jr
ZXIgdGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhlYyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9u
bHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50
L1dvcmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4
Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIGF1
dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJh
bXM+KHBhcmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFF
Uz4oa2V5KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBr
Q0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0VuY3J5
cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQpOwog
fQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5
cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJh
Y2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNl
cHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3Jt
RGVjcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlw
dG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNv
bnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92
ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShj
aXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXND
YmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNh
c3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBhc3NlcnQoYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZl
Y3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5j
ZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVh
ZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdU
Rk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCku
Y29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwot
ICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25D
YWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAg
ICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPihwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7
CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tT
aXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVTX0NCQyhrQ0NEZWNyeXB0LCBhZXNQ
YXJhbWV0ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
bWFjL0NyeXB0b0FsZ29yaXRobUFFU19DRkJNYWMuY3BwCmluZGV4IDQ2YTBkMjg1OWVhZmRkNWRl
N2U2NTM3OThiMmEwZWM0ODNmZTE0YjguLjk1NDY1NWNjMDk3MDk4MmM5Y2M4OGY1ZjI4NGRmOTJj
OThkNWNiMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NGQk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCTWFjLmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVT
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPENvbW1v
bkNyeXB0by9Db21tb25DcnlwdG8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsNTIg
KzYyLDIwIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHRyYW5zZm9ybUFF
U19DRkIoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zCiAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjpwbGF0Zm9ybUVuY3J5cHQo
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywg
UmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUp
CitFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBs
YXRmb3JtRW5jcnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25z
dCBDcnlwdG9LZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQpCiB7Ci0g
ICAgY29udGV4dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1v
dmUocGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1B
ZXNDYmNDZmJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoYWVzUGFyYW1l
dGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBh
dXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DRkIoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVycy5p
dlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCk7Ci0gICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJl
bmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhy
ZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0g
V1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhlYyk7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVy
ZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtl
ciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2VwdGlv
bkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAg
ICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIGF1dG8mIGFl
c1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQYXJhbXM+KHBh
cmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
KTsKKyAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLnNpemUoKSA9PSBrQ0NCbG9j
a1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ0ZCKGtDQ0VuY3J5cHQsIGFl
c1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5LmtleSgpLCBwbGFpblRleHQpOwogfQogCi12
b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5
PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBj
YWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25P
cjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DRkI6OnBsYXRmb3JtRGVjcnlw
dChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkm
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQu
cmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJh
bWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJU
ZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDYmNDZmJQ
YXJhbXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5
cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBhc3NlcnQoYWVzUGFyYW1ldGVycy5pdlZl
Y3RvcigpLnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3Vs
dCA9IHRyYW5zZm9ybUFFU19DRkIoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5pdlZlY3Rvcigp
LCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxs
YmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0g
ICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUo
ZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soZWMpOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNl
IGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFk
cy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCBleGNlcHRpb25DYWxsYmFj
ayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBhdXRvJiBhZXNQYXJhbWV0
ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPihwYXJhbWV0ZXJz
KTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleSk7CisgICAg
QVNTRVJUKGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVT
MTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQUVTX0NGQihrQ0NEZWNyeXB0LCBhZXNQYXJhbWV0
ZXJzLml2VmVjdG9yKCksIGFlc0tleS5rZXkoKSwgY2lwaGVyVGV4dCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NUUk1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0Ny
eXB0b0FsZ29yaXRobUFFU19DVFJNYWMuY3BwCmluZGV4IDU4YzM4MjliOTkwYzdhMjJhMzkzZTU0
ZmE4OTJhMzcyMmUzM2E3ZTYuLjM2NWMyODIxMTg1ZGU1OWQ4ZjE2M2UzZWM2NDJmZDhmM2U1NmRk
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfQ1RSTWFjLmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRv
QWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPENvbW1vbkNyeXB0by9D
b21tb25DcnlwdG8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTM5LDUyICsxMzgsMjAg
QEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NUUihD
Q09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnMKICAgICByZXR1cm4gV1RGTW92ZShoZWFkKTsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0
b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5j
cnlwdChDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9L
ZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwbGFpblRleHQpCiB7Ci0gICAgY29udGV4
dC5yZWYoKTsKLSAgICB3b3JrUXVldWUuZGlzcGF0Y2goW3BhcmFtZXRlcnMgPSBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUocGxhaW5U
ZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJh
bXM+KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBBU1NFUlQoYWVzUGFyYW1ldGVycy5jb3VudGVy
VmVjdG9yKCkuc2l6ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gdHJhbnNmb3JtQUVTX0NUUihrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJW
ZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0KTsK
LSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhl
IERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzayhb
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgIGNvbnRleHQucG9zdFRhc2so
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgY2FsbGJh
Y2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0g
ICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRo
bUFlc0N0clBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8
Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIEFTU0VSVChhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0
b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tTaXplQUVTMTI4KTsKKyAgICByZXR1cm4gdHJhbnNmb3Jt
QUVTX0NUUihrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFy
YW1ldGVycy5sZW5ndGgsIGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0KTsKIH0KIAotdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXks
IFZlY3Rvcjx1aW50OF90PiYmIGNpcGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9y
PHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgY2lwaGVyVGV4dCkKIHsKLSAgICBjb250ZXh0LnJlZigpOwot
ICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyks
IGtleSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShl
eGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICBhdXRvJiBh
ZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPigqcGFy
YW1ldGVycyk7Ci0gICAgICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4o
a2V5LmdldCgpKTsKLSAgICAgICAgYXNzZXJ0KGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3Rvcigp
LnNpemUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHRy
YW5zZm9ybUFFU19DVFIoa0NDRGVjcnlwdCwgYWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCks
IGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQpOwotICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBXZSBzaG91bGQg
b25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1l
bnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRp
b25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkuY29kZSgpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soZWMpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBE
b2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KLSAgICAgICAgY29udGV4dC5wb3N0VGFzayhbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVzdWx0ID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1
bHQpOwotICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICB9KTsKLSAgICB9KTsK
KyAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3Ry
UGFyYW1zPihwYXJhbWV0ZXJzKTsKKyAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9L
ZXlBRVM+KGtleSk7CisgICAgQVNTRVJUKGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLnNp
emUoKSA9PSBrQ0NCbG9ja1NpemVBRVMxMjgpOworICAgIHJldHVybiB0cmFuc2Zvcm1BRVNfQ1RS
KGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJz
Lmxlbmd0aCwgYWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfR0NNTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTU1hYy5jcHAKaW5kZXggMmI0YjZiNmI2OGFmODkyZWQ5YWJhMzRiZDRiN2Rj
YzI1NmQwZGJhMC4uODU5ZjdlMmY1ZjYyMTZjZDBhYjQ4NWZkMTkxOGFiNWJkODc5NmYwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfR0NN
TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFF
U19HQ01NYWMuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ29tbW9uQ3J5cHRvVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zLmgiCiAjaW5j
bHVkZSAiQ3J5cHRvS2V5QUVTLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTczLDUwICs3MiwxOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVp
bnQ4X3Q+PiBkZWN5cHRBRVNfR0NNKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIGNvbgogICAg
IHJldHVybiBXVEZNb3ZlKHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVT
X0dDTTo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhf
dD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxi
YWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlw
dG9BbGdvcml0aG1BRVNfR0NNOjpwbGF0Zm9ybUVuY3J5cHQoQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgcGxhaW5UZXh0KQogewotICAgIGNvbnRleHQucmVmKCk7Ci0gICAgd29ya1F1ZXVlLmRp
c3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShr
ZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayks
ICZjb250ZXh0XSgpIG11dGFibGUgewotICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzR2NtUGFyYW1zPigqcGFyYW1ldGVycyk7Ci0gICAgICAg
IGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBlbmNyeXB0QUVTX0dDTShhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCks
IGFlc0tleS5rZXkoKSwgcGxhaW5UZXh0LCBhZXNQYXJhbWV0ZXJzLmFkZGl0aW9uYWxEYXRhVmVj
dG9yKCksICooYWVzUGFyYW1ldGVycy50YWdMZW5ndGgpIC8gOCk7Ci0gICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KLSAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhl
Yyk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
ZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dv
cmtlciB0aHJlYWRzLgotICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spLCByZXN1bHQgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCksIGV4Y2Vw
dGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIGF1dG8m
IGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+KHBh
cmFtZXRlcnMpOworICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5
KTsKKyAgICByZXR1cm4gZW5jcnlwdEFFU19HQ00oYWVzUGFyYW1ldGVycy5pdlZlY3RvcigpLCBh
ZXNLZXkua2V5KCksIHBsYWluVGV4dCwgYWVzUGFyYW1ldGVycy5hZGRpdGlvbmFsRGF0YVZlY3Rv
cigpLCBhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aC52YWx1ZV9vcigwKSAvIDgpOwogfQogCi12b2lk
IENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYm
IGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxs
YmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCitFeGNlcHRpb25PcjxW
ZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19HQ006OnBsYXRmb3JtRGVjcnlwdChD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtl
eSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjaXBoZXJUZXh0KQogewotICAgIGNvbnRleHQucmVm
KCk7Ci0gICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0
ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZN
b3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1
dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0aG1BZXNHY21QYXJhbXM+
KCpwYXJhbWV0ZXJzKTsKLSAgICAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5
QUVTPihrZXkuZ2V0KCkpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGRlY3lwdEFFU19HQ00oYWVz
UGFyYW1ldGVycy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIGNpcGhlclRleHQsIGFlc1BhcmFt
ZXRlcnMuYWRkaXRpb25hbERhdGFWZWN0b3IoKSwgKihhZXNQYXJhbWV0ZXJzLnRhZ0xlbmd0aCkg
LyA4KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgotICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMg
PSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKGVjKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmRlcmVm
KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcg
YmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCi0gICAgICAgIGNvbnRleHQucG9z
dFRhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAg
Y2FsbGJhY2socmVzdWx0KTsKLSAgICAgICAgICAgIGNvbnRleHQuZGVyZWYoKTsKLSAgICAgICAg
fSk7Ci0gICAgfSk7CisgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0Fs
Z29yaXRobUFlc0djbVBhcmFtcz4ocGFyYW1ldGVycyk7CisgICAgYXV0byYgYWVzS2V5ID0gZG93
bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpOworICAgIHJldHVybiBkZWN5cHRBRVNfR0NNKGFlc1Bh
cmFtZXRlcnMuaXZWZWN0b3IoKSwgYWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0LCBhZXNQYXJhbWV0
ZXJzLmFkZGl0aW9uYWxEYXRhVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMudGFnTGVuZ3RoLnZhbHVl
X29yKDApIC8gOCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAppbmRl
eCA0OTBkNmY5NzkyZjcyOGM5YjQ4MDVhN2Y1ZTRhZWEwOTE3ZDQxNzEwLi43MzI3ZWZjNWFmMjFk
NDI2YWI2NmQ4N2VjMzU4NDA2N2QxODk3NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUFFU19LV01hYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwCkBAIC01OSwyNiArNTks
MTQgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdW53cmFwS2V5QUVTX0tX
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjpwbGF0Zm9ybVdyYXBLZXkoUmVmPENy
eXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxiYWNrJiYg
Y2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCitFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1XcmFw
S2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7
Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
ICAgIGF1dG8gcmVzdWx0ID0gd3JhcEtleUFFU19LVyhhZXNLZXkua2V5KCksIGRhdGEpOwotICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CisgICAgcmV0dXJu
IHdyYXBLZXlBRVNfS1coZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkpLmtleSgpLCBkYXRhKTsK
IH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53cmFwS2V5KFJlZjxD
cnlwdG9LZXk+JiYga2V5LCBWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBWZWN0b3JDYWxsYmFjayYm
IGNhbGxiYWNrLCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrKQorRXhjZXB0
aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtVW53
cmFwS2V5KGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7Ci0gICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkp
OwotICAgIGF1dG8gcmVzdWx0ID0gdW53cmFwS2V5QUVTX0tXKGFlc0tleS5rZXkoKSwgZGF0YSk7
Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FsbGJhY2socmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gdW53cmFwS2V5QUVTX0tXKGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5KS5rZXkoKSwg
ZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>