<?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>164939</bug_id>
          
          <creation_ts>2016-11-18 11:39:16 -0800</creation_ts>
          <short_desc>[Mac] Change uint8_t* to Vector&lt;uint8_t&gt; type in all crypto algorithm implementation</short_desc>
          <delta_ts>2017-08-19 09:42:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>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>
          
          <blocked>164938</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</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>1252747</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-11-18 11:39:16 -0800</bug_when>
    <thetext>Change uint8_t* to Vector&lt;uint8_t&gt; type in all crypto algorithm implementation once WebKitSubtleCrypto is deprecated.
This includes:
CryptoAlgorithmAES_CBCMac.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; transformAES_CBC(CCOperation operation, const uint8_t* iv, const Vector&lt;uint8_t&gt;&amp; key, const uint8_t* data, size_t dataLength);
CryptoAlgorithmRSA_OAEP.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; encryptRSA_OAEP(CryptoAlgorithmIdentifier hash, const Vector&lt;uint8_t&gt;&amp; label, const PlatformRSAKey key, size_t keyLength, const uint8_t* data, size_t dataLength);
CryptoAlgorithmRSAES_PKCS1_v1_5.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; encryptRSAES_PKCS1_v1_5(const PlatformRSAKey key, size_t keyLength, const uint8_t* data, size_t dataLength);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252760</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-11-18 11:57:29 -0800</bug_when>
    <thetext>I assume this implies getting rid of the distinct &apos;dataLength&apos; argument, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252762</commentid>
    <comment_count>2</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-11-18 11:58:50 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; I assume this implies getting rid of the distinct &apos;dataLength&apos; argument, too?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253417</commentid>
    <comment_count>3</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-11-22 13:32:52 -0800</bug_when>
    <thetext>Appended:
CryptoAlgorithmRSA_OAEP.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; decryptRSA_OAEP(CryptoAlgorithmIdentifier hash, const Vector&lt;uint8_t&gt;&amp; label, const PlatformRSAKey key, size_t keyLength, const uint8_t* data, size_t dataLength);
CryptoAlgorithmRSAES_PKCS1_v1_5.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; decryptRSAES_PKCS1_v1_5(const PlatformRSAKey key, size_t keyLength, const uint8_t* data, size_t dataLength);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254634</commentid>
    <comment_count>4</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-11-29 18:47:11 -0800</bug_when>
    <thetext>Appended:
CryptoAlgorithmHMACMac.cpp::static Vector&lt;uint8_t&gt; calculateSignature(CCHmacAlgorithm algorithm, const Vector&lt;uint8_t&gt;&amp; key, const uint8_t* data, size_t dataLength)
CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; signRSASSA_PKCS1_v1_5(CryptoAlgorithmIdentifier hash, const PlatformRSAKey key, size_t keyLength, const uint8_t* data, size_t dataLength)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254931</commentid>
    <comment_count>5</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-11-30 13:22:35 -0800</bug_when>
    <thetext>Appended:
CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp::static ExceptionOr&lt;bool&gt; verifyRSASSA_PKCS1_v1_5(CryptoAlgorithmIdentifier hash, const PlatformRSAKey key, const uint8_t* signature, size_t signatureLength, const uint8_t* data, size_t dataLength)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263504</commentid>
    <comment_count>6</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-01-03 13:01:59 -0800</bug_when>
    <thetext>Appended:
CryptoAlgorithmAES_KWMac.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; wrapKeyAES_KW(const Vector&lt;uint8_t&gt;&amp; key, const uint8_t* data, size_t dataLength)
CryptoAlgorithmAES_KWMac.cpp::static ExceptionOr&lt;Vector&lt;uint8_t&gt;&gt; unwrapKeyAES_KW(const Vector&lt;uint8_t&gt;&amp; key, const uint8_t* data, size_t dataLength)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340357</commentid>
    <comment_count>7</comment_count>
      <attachid>318570</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 18:43:37 -0700</bug_when>
    <thetext>Created attachment 318570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340358</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-18 18:46:44 -0700</bug_when>
    <thetext>Attachment 318570 did not pass style-queue:


ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:38:  encryptRSA_OAEP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:52:  decryptRSA_OAEP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:38:  transformAES_CBC is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:36:  wrapKeyAES_KW is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp:47:  unwrapKeyAES_KW is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:38:  signRSASSA_PKCS1_v1_5 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:63:  verifyRSASSA_PKCS1_v1_5 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:37:  encryptRSAES_PKCS1_v1_5 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:47:  decryptRSAES_PKCS1_v1_5 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 9 in 7 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>1340398</commentid>
    <comment_count>9</comment_count>
      <attachid>318570</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-19 09:41:51 -0700</bug_when>
    <thetext>Comment on attachment 318570
Patch

Clearing flags on attachment: 318570

Committed r220953: &lt;http://trac.webkit.org/changeset/220953&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340399</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-19 09:41:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340400</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-19 09:42:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/33979696&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318570</attachid>
            <date>2017-08-18 18:43:37 -0700</date>
            <delta_ts>2017-08-19 09:41:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164939-20170818184336.patch</filename>
            <type>text/plain</type>
            <size>25020</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTA4LTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW01hY10gQ2hhbmdlIHVpbnQ4X3QqIHRv
IFZlY3Rvcjx1aW50OF90PiB0eXBlIGluIGFsbCBjcnlwdG8gYWxnb3JpdGhtIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ5
MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRy
ZXNzIEZJWE1FcywgcmVwbGFjaW5nIHVpbnQ4X3QqL3NpemVfdCBwYXJhbWV0ZXJzIHdpdGggVmVj
dG9yPHVpbnQ4X3Q+Ji4KKworICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NCQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1BRVNfQ0JDKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OnBsYXRmb3JtRW5jcnlwdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpwbGF0Zm9ybURlY3J5cHQp
OgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyYXBLZXlBRVNfS1cpOgorICAgICAgICAoV2ViQ29yZTo6dW53cmFw
S2V5QUVTX0tXKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1XcmFwS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6
cGxhdGZvcm1VbndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
SE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1TaWduKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtVmVyaWZ5KToKKyAgICAg
ICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzVNYWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5jcnlwdFJTQUVTX1BLQ1MxX3YxXzUpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVjcnlwdFJTQUVTX1BLQ1MxX3YxXzUpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OnBsYXRmb3JtRGVjcnlwdCk6
CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1h
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaWduUlNBU1NBX1BLQ1MxX3YxXzUpOgorICAgICAg
ICAoV2ViQ29yZTo6dmVyaWZ5UlNBU1NBX1BLQ1MxX3YxXzUpOgorICAgICAgICAoV2ViQ29yZTo6
Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnBsYXRmb3JtU2lnbik6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6cGxhdGZvcm1WZXJp
ZnkpOgorICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVBNYWMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZW5jcnlwdFJTQV9PQUVQKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlY3J5cHRSU0FfT0FFUCk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0Ff
T0FFUDo6cGxhdGZvcm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRo
bVJTQV9PQUVQOjpwbGF0Zm9ybURlY3J5cHQpOgorCiAyMDE3LTA4LTE4ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dlYkNyeXB0b10gR2V0IHJpZCBvZiBDcnlwdG9L
ZXlEYXRhIGNsYXNzIGFuZCBhbGwgaXRzIHN1YmNsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDTWFjLmNwcAko
cmV2aXNpb24gMjIwOTQ4KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdv
cml0aG1BRVNfQ0JDTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTkgKzM1LDE3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgaXYgYW5k
IGRhdGEgdG8gVmVjdG9yPHVpbnQ4X3Q+IHR5cGUgb25jZSBXZWJLaXRTdWJ0bGVDcnlwdG8gaXMg
ZGVwcmVjYXRlZC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ5MzkKLXN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHRyYW5zZm9ybUFFU19D
QkMoQ0NPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCB1aW50OF90KiBpdiwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQor
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gdHJhbnNmb3JtQUVTX0NCQyhDQ09w
ZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgaXYsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgQ0ND
cnlwdG9yUmVmIGNyeXB0b3I7Ci0gICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IENDQ3J5cHRv
ckNyZWF0ZShvcGVyYXRpb24sIGtDQ0FsZ29yaXRobUFFUywga0NDT3B0aW9uUEtDUzdQYWRkaW5n
LCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLCBpdiwgJmNyeXB0b3IpOworICAgIENDQ3J5cHRvclN0
YXR1cyBzdGF0dXMgPSBDQ0NyeXB0b3JDcmVhdGUob3BlcmF0aW9uLCBrQ0NBbGdvcml0aG1BRVMs
IGtDQ09wdGlvblBLQ1M3UGFkZGluZywga2V5LmRhdGEoKSwga2V5LnNpemUoKSwgaXYuZGF0YSgp
LCAmY3J5cHRvcik7CiAgICAgaWYgKHN0YXR1cykKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IE9wZXJhdGlvbkVycm9yIH07CiAKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KENDQ3J5cHRv
ckdldE91dHB1dExlbmd0aChjcnlwdG9yLCBkYXRhTGVuZ3RoLCB0cnVlKSk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHJlc3VsdChDQ0NyeXB0b3JHZXRPdXRwdXRMZW5ndGgoY3J5cHRvciwgZGF0YS5z
aXplKCksIHRydWUpKTsKIAogICAgIHNpemVfdCBieXRlc1dyaXR0ZW47Ci0gICAgc3RhdHVzID0g
Q0NDcnlwdG9yVXBkYXRlKGNyeXB0b3IsIGRhdGEsIGRhdGFMZW5ndGgsIHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCksICZieXRlc1dyaXR0ZW4pOworICAgIHN0YXR1cyA9IENDQ3J5cHRvclVw
ZGF0ZShjcnlwdG9yLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIHJlc3VsdC5kYXRhKCksIHJl
c3VsdC5zaXplKCksICZieXRlc1dyaXR0ZW4pOwogICAgIGlmIChzdGF0dXMpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OwogCkBAIC03Miw3ICs3MCw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6cGxhdGZvcm1FbmMKICAgICAgICAgYXV0byYgYWVz
UGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRobUFlc0NiY0NmYlBhcmFtcz4oKnBh
cmFtZXRlcnMpOwogICAgICAgICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+
KGtleS5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuc2l6
ZSgpID09IGtDQ0Jsb2NrU2l6ZUFFUzEyOCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdHJhbnNm
b3JtQUVTX0NCQyhrQ0NFbmNyeXB0LCBhZXNQYXJhbWV0ZXJzLml2VmVjdG9yKCkuZGF0YSgpLCBh
ZXNLZXkua2V5KCksIHBsYWluVGV4dC5kYXRhKCksIHBsYWluVGV4dC5zaXplKCkpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzUGFyYW1ldGVy
cy5pdlZlY3RvcigpLCBhZXNLZXkua2V5KCksIHBsYWluVGV4dCk7CiAgICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KICAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNr
ID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKQEAgLTk2LDcgKzk0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1BRVNfQ0JDOjpwbGF0Zm9ybURlYwogICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93
bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ2JjQ2ZiUGFyYW1zPigqcGFyYW1ldGVycyk7CiAgICAg
ICAgIGF1dG8mIGFlc0tleSA9IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKICAg
ICAgICAgYXNzZXJ0KGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5zaXplKCkgPT0ga0NDQmxvY2tT
aXplQUVTMTI4KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0Rl
Y3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKS5kYXRhKCksIGFlc0tleS5rZXkoKSwgY2lw
aGVyVGV4dC5kYXRhKCksIGNpcGhlclRleHQuc2l6ZSgpKTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc1BhcmFtZXRlcnMuaXZWZWN0b3IoKSwg
YWVzS2V5LmtleSgpLCBjaXBoZXJUZXh0KTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgewogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJh
Y2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgogICAg
ICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4
Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1B
RVNfS1dNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0tXTWFjLmNwcAkocmV2aXNpb24gMjIwOTQ4KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1BRVNfS1dNYWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywzMCArMzMsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhN
RTogV2Ugc2hvdWxkIGNoYW5nZSBkYXRhIHRvIFZlY3Rvcjx1aW50OF90PiB0eXBlIG9uY2UgV2Vi
S2l0U3VidGxlQ3J5cHRvIGlzIGRlcHJlY2F0ZWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTM5Ci1zdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4
X3Q+PiB3cmFwS2V5QUVTX0tXKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IHdyYXBLZXlBRVNfS1coY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KEND
U3ltbWV0cmljV3JhcHBlZFNpemUoa0NDV1JBUEFFUywgZGF0YUxlbmd0aCkpOworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoQ0NTeW1tZXRyaWNXcmFwcGVkU2l6ZShrQ0NXUkFQQUVTLCBkYXRh
LnNpemUoKSkpOwogICAgIHNpemVfdCByZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICBp
ZiAoQ0NTeW1tZXRyaWNLZXlXcmFwKGtDQ1dSQVBBRVMsIENDcmZjMzM5NF9pdiwgQ0NyZmMzMzk0
X2l2TGVuLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLCBkYXRhLCBkYXRhTGVuZ3RoLCByZXN1bHQu
ZGF0YSgpLCAmcmVzdWx0U2l6ZSkpCisgICAgaWYgKENDU3ltbWV0cmljS2V5V3JhcChrQ0NXUkFQ
QUVTLCBDQ3JmYzMzOTRfaXYsIENDcmZjMzM5NF9pdkxlbiwga2V5LmRhdGEoKSwga2V5LnNpemUo
KSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCByZXN1bHQuZGF0YSgpLCAmcmVzdWx0U2l6ZSkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OwogCiAgICAgcmVz
dWx0LnNocmluayhyZXN1bHRTaXplKTsKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQog
Ci0vLyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5nZSBkYXRhIHRvIFZlY3Rvcjx1aW50OF90PiB0eXBl
IG9uY2UgV2ViS2l0U3VidGxlQ3J5cHRvIGlzIGRlcHJlY2F0ZWQuCi0vLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTM5Ci1zdGF0aWMgRXhjZXB0aW9uT3I8VmVj
dG9yPHVpbnQ4X3Q+PiB1bndyYXBLZXlBRVNfS1coY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXks
IGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIEV4Y2VwdGlv
bk9yPFZlY3Rvcjx1aW50OF90Pj4gdW53cmFwS2V5QUVTX0tXKGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHJlc3VsdChDQ1N5bW1ldHJpY1Vud3JhcHBlZFNpemUoa0NDV1JBUEFFUywgZGF0YUxlbmd0
aCkpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoQ0NTeW1tZXRyaWNVbndyYXBwZWRTaXpl
KGtDQ1dSQVBBRVMsIGRhdGEuc2l6ZSgpKSk7CiAgICAgc2l6ZV90IHJlc3VsdFNpemUgPSByZXN1
bHQuc2l6ZSgpOwogCiAgICAgaWYgKHJlc3VsdFNpemUgJSA4KQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKIAotICAgIGlmIChDQ1N5bW1ldHJpY0tleVVud3Jh
cChrQ0NXUkFQQUVTLCBDQ3JmYzMzOTRfaXYsIENDcmZjMzM5NF9pdkxlbiwga2V5LmRhdGEoKSwg
a2V5LnNpemUoKSwgZGF0YSwgZGF0YUxlbmd0aCwgcmVzdWx0LmRhdGEoKSwgJnJlc3VsdFNpemUp
KQorICAgIGlmIChDQ1N5bW1ldHJpY0tleVVud3JhcChrQ0NXUkFQQUVTLCBDQ3JmYzMzOTRfaXYs
IENDcmZjMzM5NF9pdkxlbiwga2V5LmRhdGEoKSwga2V5LnNpemUoKSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpLCByZXN1bHQuZGF0YSgpLCAmcmVzdWx0U2l6ZSkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBPcGVyYXRpb25FcnJvciB9OwogCiAgICAgcmVzdWx0LnNocmluayhyZXN1bHRT
aXplKTsKQEAgLTY2LDcgKzYyLDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90
Pj4gdW53cgogdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfS1c6OnBsYXRmb3JtV3JhcEtleShSZWY8
Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sm
JiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaykKIHsKICAg
ICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7Ci0gICAg
YXV0byByZXN1bHQgPSB3cmFwS2V5QUVTX0tXKGFlc0tleS5rZXkoKSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHdyYXBLZXlBRVNfS1coYWVzS2V5LmtleSgp
LCBkYXRhKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNzcsNyArNzMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxh
dGZvcm1XcmFwCiB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6cGxhdGZvcm1VbndyYXBLZXko
UmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFZlY3RvckNhbGxi
YWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2spCiB7
CiAgICAgYXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOwot
ICAgIGF1dG8gcmVzdWx0ID0gdW53cmFwS2V5QUVTX0tXKGFlc0tleS5rZXkoKSwgZGF0YS5kYXRh
KCksIGRhdGEuc2l6ZSgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHVud3JhcEtleUFFU19LVyhhZXNL
ZXkua2V5KCksIGRhdGEpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2socmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCkpOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0Fs
Z29yaXRobUhNQUNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDkgKzUzLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0NIbWFjQWxnb3Jp
dGhtPiBjbwogICAgIH0KIH0KIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgZGF0YSB0byBW
ZWN0b3I8dWludDhfdD4gdHlwZSBvbmNlIFdlYktpdFN1YnRsZUNyeXB0byBpcyBkZXByZWNhdGVk
LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDkzOQotc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiBjYWxjdWxhdGVTaWduYXR1cmUoQ0NIbWFjQWxnb3JpdGhtIGFs
Z29yaXRobSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBjYWxjdWxhdGVTaWdu
YXR1cmUoQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBr
ZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBzaXplX3QgZGlnZXN0TGVu
Z3RoOwogICAgIHN3aXRjaCAoYWxnb3JpdGhtKSB7CkBAIC04MCw3ICs3OCw3IEBAIHN0YXRpYyBW
ZWN0b3I8dWludDhfdD4gY2FsY3VsYXRlU2lnbmF0dXIKICAgICB9CiAKICAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KGRpZ2VzdExlbmd0aCk7Ci0gICAgQ0NIbWFjKGFsZ29yaXRobSwga2V5LmRh
dGEoKSwga2V5LnNpemUoKSwgZGF0YSwgZGF0YUxlbmd0aCwgcmVzdWx0LmRhdGEoKSk7CisgICAg
Q0NIbWFjKGFsZ29yaXRobSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpLCByZXN1bHQuZGF0YSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05
OCw3ICs5Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6cGxhdGZvcm1TaWduKFIKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1
dG8gcmVzdWx0ID0gY2FsY3VsYXRlU2lnbmF0dXJlKCphbGdvcml0aG0sIGhtYWNLZXkua2V5KCks
IGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gY2FsY3Vs
YXRlU2lnbmF0dXJlKCphbGdvcml0aG0sIGhtYWNLZXkua2V5KCksIGRhdGEpOwogICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFja3MgYWZ0ZXIgYmVpbmcgYmFjayB0
byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCiAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsK
QEAgLTEyMiw3ICsxMjAsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnBsYXRmb3JtVmVy
aWZ5CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBhdXRvIGV4cGVjdGVkU2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKCphbGdvcml0
aG0sIGhtYWNLZXkua2V5KCksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgICAgIGF1
dG8gZXhwZWN0ZWRTaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoKmFsZ29yaXRobSwgaG1h
Y0tleS5rZXkoKSwgZGF0YSk7CiAgICAgICAgIC8vIFVzaW5nIGEgY29uc3RhbnQgdGltZSBjb21w
YXJpc29uIHRvIHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgICAgIGJvb2wgcmVzdWx0ID0g
c2lnbmF0dXJlLnNpemUoKSA9PSBleHBlY3RlZFNpZ25hdHVyZS5zaXplKCkgJiYgIWNvbnN0YW50
VGltZU1lbWNtcChleHBlY3RlZFNpZ25hdHVyZS5kYXRhKCksIHNpZ25hdHVyZS5kYXRhKCksIGV4
cGVjdGVkU2lnbmF0dXJlLnNpemUoKSk7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVm
ZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIg
dGhyZWFkcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UlNBRVNfUEtDUzFfdjFfNU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81TWFjLmNwcAkocmV2aXNpb24g
MjIwOTQ4KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDIxIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgZGF0YSB0
byBWZWN0b3I8dWludDhfdD4gdHlwZSBvbmNlIFdlYktpdFN1YnRsZUNyeXB0byBpcyBkZXByZWNh
dGVkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDkzOQot
c3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gZW5jcnlwdFJTQUVTX1BLQ1MxX3Yx
XzUoY29uc3QgUGxhdGZvcm1SU0FLZXkga2V5LCBzaXplX3Qga2V5TGVuZ3RoLCBjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8
dWludDhfdD4+IGVuY3J5cHRSU0FFU19QS0NTMV92MV81KGNvbnN0IFBsYXRmb3JtUlNBS2V5IGtl
eSwgc2l6ZV90IGtleUxlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewogICAg
IFZlY3Rvcjx1aW50OF90PiBjaXBoZXJUZXh0KGtleUxlbmd0aCAvIDgpOyAvLyBQZXIgU3RlcCAz
LmMgb2YgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NDcjc2VjdGlvbi03LjIuMQog
ICAgIHNpemVfdCBjaXBoZXJUZXh0TGVuZ3RoID0gY2lwaGVyVGV4dC5zaXplKCk7Ci0gICAgaWYg
KENDUlNBQ3J5cHRvckVuY3J5cHQoa2V5LCBjY1BLQ1MxUGFkZGluZywgZGF0YSwgZGF0YUxlbmd0
aCwgY2lwaGVyVGV4dC5kYXRhKCksICZjaXBoZXJUZXh0TGVuZ3RoLCAwLCAwLCBrQ0NEaWdlc3RO
b25lKSkKKyAgICBpZiAoQ0NSU0FDcnlwdG9yRW5jcnlwdChrZXksIGNjUEtDUzFQYWRkaW5nLCBk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIGNpcGhlclRleHQuZGF0YSgpLCAmY2lwaGVyVGV4dExl
bmd0aCwgMCwgMCwga0NDRGlnZXN0Tm9uZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBP
cGVyYXRpb25FcnJvciB9OwogCiAgICAgcmV0dXJuIFdURk1vdmUoY2lwaGVyVGV4dCk7CiB9CiAK
LS8vIEZJWE1FOiBXZSBzaG91bGQgY2hhbmdlIGRhdGEgdG8gVmVjdG9yPHVpbnQ4X3Q+IHR5cGUg
b25jZSBXZWJLaXRTdWJ0bGVDcnlwdG8gaXMgZGVwcmVjYXRlZC4KLS8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ5MzkKLXN0YXRpYyBFeGNlcHRpb25PcjxWZWN0
b3I8dWludDhfdD4+IGRlY3J5cHRSU0FFU19QS0NTMV92MV81KGNvbnN0IFBsYXRmb3JtUlNBS2V5
IGtleSwgc2l6ZV90IGtleUxlbmd0aCwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFM
ZW5ndGgpCitzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBkZWNyeXB0UlNBRVNf
UEtDUzFfdjFfNShjb25zdCBQbGF0Zm9ybVJTQUtleSBrZXksIHNpemVfdCBrZXlMZW5ndGgsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gcGxhaW5U
ZXh0KGtleUxlbmd0aCAvIDgpOyAvLyBQZXIgU3RlcCAxIG9mIGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmMzNDQ3I3NlY3Rpb24tNy4yLjEKICAgICBzaXplX3QgcGxhaW5UZXh0TGVuZ3Ro
ID0gcGxhaW5UZXh0LnNpemUoKTsKLSAgICBpZiAoQ0NSU0FDcnlwdG9yRGVjcnlwdChrZXksIGNj
UEtDUzFQYWRkaW5nLCBkYXRhLCBkYXRhTGVuZ3RoLCBwbGFpblRleHQuZGF0YSgpLCAmcGxhaW5U
ZXh0TGVuZ3RoLCAwLCAwLCBrQ0NEaWdlc3ROb25lKSkKKyAgICBpZiAoQ0NSU0FDcnlwdG9yRGVj
cnlwdChrZXksIGNjUEtDUzFQYWRkaW5nLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIHBsYWlu
VGV4dC5kYXRhKCksICZwbGFpblRleHRMZW5ndGgsIDAsIDAsIGtDQ0RpZ2VzdE5vbmUpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IgfTsKIAogICAgIHBsYWluVGV4
dC5yZXNpemUocGxhaW5UZXh0TGVuZ3RoKTsKQEAgLTY0LDcgKzYwLDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbAogICAgIGNvbnRleHQucmVmKCk7CiAgICAgd29y
a1F1ZXVlLmRpc3BhdGNoKFtrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUo
cGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CiAg
ICAgICAgIGF1dG8mIHJzYUtleSA9IGRvd25jYXN0PENyeXB0b0tleVJTQT4oa2V5LmdldCgpKTsK
LSAgICAgICAgYXV0byByZXN1bHQgPSBlbmNyeXB0UlNBRVNfUEtDUzFfdjFfNShyc2FLZXkucGxh
dGZvcm1LZXkoKSwgcnNhS2V5LmtleVNpemVJbkJpdHMoKSwgcGxhaW5UZXh0LmRhdGEoKSwgcGxh
aW5UZXh0LnNpemUoKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5jcnlwdFJTQUVTX1BLQ1Mx
X3YxXzUocnNhS2V5LnBsYXRmb3JtS2V5KCksIHJzYUtleS5rZXlTaXplSW5CaXRzKCksIHBsYWlu
VGV4dCk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNr
IHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KICAgICAgICAgICAgIGNvbnRleHQucG9z
dFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksIGVj
ID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKQEAgLTg2LDcgKzgy
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjpwbAogICAgIGNvbnRl
eHQucmVmKCk7CiAgICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtrZXkgPSBXVEZNb3ZlKGtleSksIGNp
cGhlclRleHQgPSBXVEZNb3ZlKGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29u
dGV4dF0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byYgcnNhS2V5ID0gZG93bmNhc3Q8Q3J5cHRv
S2V5UlNBPihrZXkuZ2V0KCkpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGRlY3J5cHRSU0FFU19Q
S0NTMV92MV81KHJzYUtleS5wbGF0Zm9ybUtleSgpLCByc2FLZXkua2V5U2l6ZUluQml0cygpLCBj
aXBoZXJUZXh0LmRhdGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOworICAgICAgICBhdXRvIHJlc3Vs
dCA9IGRlY3J5cHRSU0FFU19QS0NTMV92MV81KHJzYUtleS5wbGF0Zm9ybUtleSgpLCByc2FLZXku
a2V5U2l6ZUluQml0cygpLCBjaXBoZXJUZXh0KTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2Fs
bGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgog
ICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3Zl
KGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMgPSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUo
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNU1hYy5jcHAJKHJldmlz
aW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgZGF0
YSB0byBWZWN0b3I8dWludDhfdD4gdHlwZSBvbmNlIFdlYktpdFN1YnRsZUNyeXB0byBpcyBkZXBy
ZWNhdGVkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDkz
OQotc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gc2lnblJTQVNTQV9QS0NTMV92
MV81KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgUGxhdGZvcm1SU0FLZXkg
a2V5LCBzaXplX3Qga2V5TGVuZ3RoLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCkKK3N0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IHNpZ25SU0FTU0FfUEtD
UzFfdjFfNShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFBsYXRmb3JtUlNB
S2V5IGtleSwgc2l6ZV90IGtleUxlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQog
ewogICAgIENDRGlnZXN0QWxnb3JpdGhtIGRpZ2VzdEFsZ29yaXRobTsKICAgICBpZiAoIWdldENv
bW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXRobShoYXNoLCBkaWdlc3RBbGdvcml0aG0pKQpAQCAtNDks
NyArNDcsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBzaWduCiAgICAg
YXV0byBkaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKCpjcnlwdG9EaWdlc3RBbGdv
cml0aG0pOwogICAgIGlmICghZGlnZXN0KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3Bl
cmF0aW9uRXJyb3IgfTsKLSAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEsIGRhdGFMZW5ndGgpOwor
ICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKICAgICBhdXRv
IGRpZ2VzdERhdGEgPSBkaWdlc3QtPmNvbXB1dGVIYXNoKCk7CiAKICAgICBWZWN0b3I8dWludDhf
dD4gc2lnbmF0dXJlKGtleUxlbmd0aCAvIDgpOyAvLyBQZXIgaHR0cHM6Ly90b29scy5pZXRmLm9y
Zy9odG1sL3JmYzM0NDcjc2VjdGlvbi04LjIuMQpAQCAtNjIsOSArNjAsNyBAQCBzdGF0aWMgRXhj
ZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+PiBzaWduCiAgICAgcmV0dXJuIFdURk1vdmUoc2lnbmF0
dXJlKTsKIH0KIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2Ugc2lnbmF0dXJlLCBkYXRhIHRv
IFZlY3Rvcjx1aW50OF90PiB0eXBlIG9uY2UgV2ViS2l0U3VidGxlQ3J5cHRvIGlzIGRlcHJlY2F0
ZWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0OTM5Ci1z
dGF0aWMgRXhjZXB0aW9uT3I8Ym9vbD4gdmVyaWZ5UlNBU1NBX1BLQ1MxX3YxXzUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBjb25zdCBQbGF0Zm9ybVJTQUtleSBrZXksIGNvbnN0IHVp
bnQ4X3QqIHNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZUxlbmd0aCwgY29uc3QgdWludDhfdCog
ZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCitzdGF0aWMgRXhjZXB0aW9uT3I8Ym9vbD4gdmVyaWZ5
UlNBU1NBX1BLQ1MxX3YxXzUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBjb25zdCBQ
bGF0Zm9ybVJTQUtleSBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2lnbmF0dXJlLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCiB7CiAgICAgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0
QWxnb3JpdGhtOwogICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKGhhc2gs
IGRpZ2VzdEFsZ29yaXRobSkpCkBAIC03NiwxMCArNzIsMTAgQEAgc3RhdGljIEV4Y2VwdGlvbk9y
PGJvb2w+IHZlcmlmeVJTQVNTQV9QSwogICAgIGF1dG8gZGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdl
c3Q6OmNyZWF0ZSgqY3J5cHRvRGlnZXN0QWxnb3JpdGhtKTsKICAgICBpZiAoIWRpZ2VzdCkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yIH07Ci0gICAgZGlnZXN0LT5h
ZGRCeXRlcyhkYXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7CiAgICAgYXV0byBkaWdlc3REYXRhID0gZGlnZXN0LT5jb21wdXRl
SGFzaCgpOwogCi0gICAgYXV0byBzdGF0dXMgPSBDQ1JTQUNyeXB0b3JWZXJpZnkoa2V5LCBjY1BL
Q1MxUGFkZGluZywgZGlnZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdlc3RB
bGdvcml0aG0sIDAsIHNpZ25hdHVyZSwgc2lnbmF0dXJlTGVuZ3RoKTsKKyAgICBhdXRvIHN0YXR1
cyA9IENDUlNBQ3J5cHRvclZlcmlmeShrZXksIGNjUEtDUzFQYWRkaW5nLCBkaWdlc3REYXRhLmRh
dGEoKSwgZGlnZXN0RGF0YS5zaXplKCksIGRpZ2VzdEFsZ29yaXRobSwgMCwgc2lnbmF0dXJlLmRh
dGEoKSwgc2lnbmF0dXJlLnNpemUoKSk7CiAgICAgaWYgKCFzdGF0dXMpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmIChzdGF0dXMgPT0ga0NDTm90VmVyaWZpZWQgfHwgc3RhdHVzID09IGtD
Q0RlY29kZUVycm9yKSAvLyA8cmRhcjovL3Byb2JsZW0vMTU0NjQ5ODI+IENDUlNBQ3J5cHRvclZl
cmlmeSByZXR1cm5zIGtDQ0RlY29kZUVycm9yIGluc3RlYWQgb2Yga0NDTm90VmVyaWZpZWQgc29t
ZXRpbWVzCkBAIC05Myw3ICs4OSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzU6OnAKICAgICBjb250ZXh0LnJlZigpOwogICAgIHdvcmtRdWV1ZS5kaXNwYXRjaChba2V5
ID0gV1RGTW92ZShrZXkpLCBkYXRhID0gV1RGTW92ZShkYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNr
KSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8mIHJzYUtleSA9IGRvd25jYXN0
PENyeXB0b0tleVJTQT4oa2V5LmdldCgpKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBzaWduUlNB
U1NBX1BLQ1MxX3YxXzUocnNhS2V5Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCksIHJzYUtleS5w
bGF0Zm9ybUtleSgpLCByc2FLZXkua2V5U2l6ZUluQml0cygpLCBkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ25SU0FTU0FfUEtDUzFfdjFfNShyc2FL
ZXkuaGFzaEFsZ29yaXRobUlkZW50aWZpZXIoKSwgcnNhS2V5LnBsYXRmb3JtS2V5KCksIHJzYUtl
eS5rZXlTaXplSW5CaXRzKCksIGRhdGEpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKSB7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgb25seSBkZXJlZmVyZW5jZSBjYWxsYmFj
a3MgYWZ0ZXIgYmVpbmcgYmFjayB0byB0aGUgRG9jdW1lbnQvV29ya2VyIHRocmVhZHMuCiAgICAg
ICAgICAgICBjb250ZXh0LnBvc3RUYXNrKFtleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhj
ZXB0aW9uQ2FsbGJhY2spLCBlYyA9IHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkuY29kZSgpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSB7CkBAIC0xMTUsNyArMTExLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtD
UzFfdjFfNTo6cAogICAgIGNvbnRleHQucmVmKCk7CiAgICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtr
ZXkgPSBXVEZNb3ZlKGtleSksIHNpZ25hdHVyZSA9IFdURk1vdmUoc2lnbmF0dXJlKSwgZGF0YSA9
IFdURk1vdmUoZGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNh
bGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUg
ewogICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtleS5nZXQo
KSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdmVyaWZ5UlNBU1NBX1BLQ1MxX3YxXzUocnNhS2V5
Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCksIHJzYUtleS5wbGF0Zm9ybUtleSgpLCBzaWduYXR1
cmUuZGF0YSgpLCBzaWduYXR1cmUuc2l6ZSgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHZlcmlmeVJTQVNTQV9QS0NTMV92MV81KHJzYUtleS5oYXNo
QWxnb3JpdGhtSWRlbnRpZmllcigpLCByc2FLZXkucGxhdGZvcm1LZXkoKSwgc2lnbmF0dXJlLCBk
YXRhKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sg
dG8gdGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgogICAgICAgICAgICAgY29udGV4dC5wb3N0
VGFzayhbZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgZWMg
PSByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpLmNvZGUoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUE1hYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SU0FfT0FF
UE1hYy5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtUlNBX09BRVBNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICsz
NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFdlIHNob3VsZCBjaGFu
Z2UgZGF0YSB0byBWZWN0b3I8dWludDhfdD4gdHlwZSBvbmNlIFdlYktpdFN1YnRsZUNyeXB0byBp
cyBkZXByZWNhdGVkLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDkzOQotc3RhdGljIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gZW5jcnlwdFJTQV9P
QUVQKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBsYWJlbCwgY29uc3QgUGxhdGZvcm1SU0FLZXkga2V5LCBzaXplX3Qga2V5TGVuZ3RoLCBjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyBFeGNlcHRpb25PcjxW
ZWN0b3I8dWludDhfdD4+IGVuY3J5cHRSU0FfT0FFUChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGhhc2gsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbGFiZWwsIGNvbnN0IFBsYXRmb3JtUlNBS2V5
IGtleSwgc2l6ZV90IGtleUxlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQogewog
ICAgIENDRGlnZXN0QWxnb3JpdGhtIGRpZ2VzdEFsZ29yaXRobTsKICAgICBpZiAoIWdldENvbW1v
bkNyeXB0b0RpZ2VzdEFsZ29yaXRobShoYXNoLCBkaWdlc3RBbGdvcml0aG0pKQpAQCAtNDUsMTUg
KzQzLDEzIEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+IGVuY3IKIAogICAg
IFZlY3Rvcjx1aW50OF90PiBjaXBoZXJUZXh0KGtleUxlbmd0aCAvIDgpOyAvLyBQZXIgU3RlcCAz
LmMgb2YgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0NDcjc2VjdGlvbi03LjEuMQog
ICAgIHNpemVfdCBjaXBoZXJUZXh0TGVuZ3RoID0gY2lwaGVyVGV4dC5zaXplKCk7Ci0gICAgaWYg
KENDUlNBQ3J5cHRvckVuY3J5cHQoa2V5LCBjY09BRVBQYWRkaW5nLCBkYXRhLCBkYXRhTGVuZ3Ro
LCBjaXBoZXJUZXh0LmRhdGEoKSwgJmNpcGhlclRleHRMZW5ndGgsIGxhYmVsLmRhdGEoKSwgbGFi
ZWwuc2l6ZSgpLCBkaWdlc3RBbGdvcml0aG0pKQorICAgIGlmIChDQ1JTQUNyeXB0b3JFbmNyeXB0
KGtleSwgY2NPQUVQUGFkZGluZywgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBjaXBoZXJUZXh0
LmRhdGEoKSwgJmNpcGhlclRleHRMZW5ndGgsIGxhYmVsLmRhdGEoKSwgbGFiZWwuc2l6ZSgpLCBk
aWdlc3RBbGdvcml0aG0pKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IgfTsKIAogICAgIHJldHVybiBXVEZNb3ZlKGNpcGhlclRleHQpOwogfQogCi0vLyBGSVhNRTog
V2Ugc2hvdWxkIGNoYW5nZSBkYXRhIHRvIFZlY3Rvcjx1aW50OF90PiB0eXBlIG9uY2UgV2ViS2l0
U3VidGxlQ3J5cHRvIGlzIGRlcHJlY2F0ZWQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY0OTM5Ci1zdGF0aWMgRXhjZXB0aW9uT3I8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWNyeXB0UlNBX09BRVAoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGxhYmVsLCBjb25zdCBQbGF0Zm9ybVJTQUtleSBrZXksIHNpemVfdCBr
ZXlMZW5ndGgsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQorc3RhdGlj
IEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gZGVjcnlwdFJTQV9PQUVQKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBsYWJlbCwgY29uc3Qg
UGxhdGZvcm1SU0FLZXkga2V5LCBzaXplX3Qga2V5TGVuZ3RoLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCiB7CiAgICAgQ0NEaWdlc3RBbGdvcml0aG0gZGlnZXN0QWxnb3JpdGhtOwogICAg
IGlmICghZ2V0Q29tbW9uQ3J5cHRvRGlnZXN0QWxnb3JpdGhtKGhhc2gsIGRpZ2VzdEFsZ29yaXRo
bSkpCkBAIC02MSw3ICs1Nyw3IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxWZWN0b3I8dWludDhfdD4+
IGRlY3IKIAogICAgIFZlY3Rvcjx1aW50OF90PiBwbGFpblRleHQoa2V5TGVuZ3RoIC8gOCk7IC8v
IFBlciBTdGVwIDEuYiBvZiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ0NyNzZWN0
aW9uLTcuMS4xCiAgICAgc2l6ZV90IHBsYWluVGV4dExlbmd0aCA9IHBsYWluVGV4dC5zaXplKCk7
Ci0gICAgaWYgKENDUlNBQ3J5cHRvckRlY3J5cHQoa2V5LCBjY09BRVBQYWRkaW5nLCBkYXRhLCBk
YXRhTGVuZ3RoLCBwbGFpblRleHQuZGF0YSgpLCAmcGxhaW5UZXh0TGVuZ3RoLCBsYWJlbC5kYXRh
KCksIGxhYmVsLnNpemUoKSwgZGlnZXN0QWxnb3JpdGhtKSkKKyAgICBpZiAoQ0NSU0FDcnlwdG9y
RGVjcnlwdChrZXksIGNjT0FFUFBhZGRpbmcsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgcGxh
aW5UZXh0LmRhdGEoKSwgJnBsYWluVGV4dExlbmd0aCwgbGFiZWwuZGF0YSgpLCBsYWJlbC5zaXpl
KCksIGRpZ2VzdEFsZ29yaXRobSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciB9OwogCiAgICAgcGxhaW5UZXh0LnJlc2l6ZShwbGFpblRleHRMZW5ndGgpOwpAQCAt
NzQsNyArNzAsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjpwbGF0Zm9ybUVuCiAg
ICAgd29ya1F1ZXVlLmRpc3BhdGNoKFtwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwg
a2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewogICAgICAgICBhdXRvJiByc2FQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcz4oKnBhcmFt
ZXRlcnMpOwogICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtl
eS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZW5jcnlwdFJTQV9PQUVQKHJzYUtleS5o
YXNoQWxnb3JpdGhtSWRlbnRpZmllcigpLCByc2FQYXJhbWV0ZXJzLmxhYmVsVmVjdG9yKCksIHJz
YUtleS5wbGF0Zm9ybUtleSgpLCByc2FLZXkua2V5U2l6ZUluQml0cygpLCBwbGFpblRleHQuZGF0
YSgpLCBwbGFpblRleHQuc2l6ZSgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBlbmNyeXB0UlNB
X09BRVAocnNhS2V5Lmhhc2hBbGdvcml0aG1JZGVudGlmaWVyKCksIHJzYVBhcmFtZXRlcnMubGFi
ZWxWZWN0b3IoKSwgcnNhS2V5LnBsYXRmb3JtS2V5KCksIHJzYUtleS5rZXlTaXplSW5CaXRzKCks
IHBsYWluVGV4dCk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWlu
ZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KICAgICAgICAgICAgIGNvbnRl
eHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFj
ayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKQEAgLTk3
LDcgKzkzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6cGxhdGZvcm1EZQogICAg
IHdvcmtRdWV1ZS5kaXNwYXRjaChbcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyksIGtl
eSA9IFdURk1vdmUoa2V5KSwgY2lwaGVyVGV4dCA9IFdURk1vdmUoY2lwaGVyVGV4dCksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNl
cHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewogICAgICAgICBhdXRvJiByc2FQ
YXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcz4oKnBhcmFt
ZXRlcnMpOwogICAgICAgICBhdXRvJiByc2FLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlSU0E+KGtl
eS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGVjcnlwdFJTQV9PQUVQKHJzYUtleS5o
YXNoQWxnb3JpdGhtSWRlbnRpZmllcigpLCByc2FQYXJhbWV0ZXJzLmxhYmVsVmVjdG9yKCksIHJz
YUtleS5wbGF0Zm9ybUtleSgpLCByc2FLZXkua2V5U2l6ZUluQml0cygpLCBjaXBoZXJUZXh0LmRh
dGEoKSwgY2lwaGVyVGV4dC5zaXplKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGRlY3J5cHRS
U0FfT0FFUChyc2FLZXkuaGFzaEFsZ29yaXRobUlkZW50aWZpZXIoKSwgcnNhUGFyYW1ldGVycy5s
YWJlbFZlY3RvcigpLCByc2FLZXkucGxhdGZvcm1LZXkoKSwgcnNhS2V5LmtleVNpemVJbkJpdHMo
KSwgY2lwaGVyVGV4dCk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBi
ZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KICAgICAgICAgICAgIGNv
bnRleHQucG9zdFRhc2soW2V4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxs
YmFjayksIGVjID0gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKS5jb2RlKCksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>