<?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>175750</bug_id>
          
          <creation_ts>2017-08-18 20:38:06 -0700</creation_ts>
          <short_desc>[WebCrypto] Remove the KeyAlgorithm type hierarchy</short_desc>
          <delta_ts>2017-08-19 10:30:31 -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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1340370</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 20:38:06 -0700</bug_when>
    <thetext>[WebCrypto] Remove the KeyAlgorithm type hierarchy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340372</commentid>
    <comment_count>1</comment_count>
      <attachid>318576</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 20:43:57 -0700</bug_when>
    <thetext>Created attachment 318576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340376</commentid>
    <comment_count>2</comment_count>
      <attachid>318578</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 21:00:57 -0700</bug_when>
    <thetext>Created attachment 318578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340377</commentid>
    <comment_count>3</comment_count>
      <attachid>318579</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 21:03:12 -0700</bug_when>
    <thetext>Created attachment 318579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340379</commentid>
    <comment_count>4</comment_count>
      <attachid>318580</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 21:21:18 -0700</bug_when>
    <thetext>Created attachment 318580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340396</commentid>
    <comment_count>5</comment_count>
      <attachid>318585</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-19 08:10:41 -0700</bug_when>
    <thetext>Created attachment 318585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340403</commentid>
    <comment_count>6</comment_count>
      <attachid>318585</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-19 10:29:02 -0700</bug_when>
    <thetext>Comment on attachment 318585
Patch

Clearing flags on attachment: 318585

Committed r220954: &lt;http://trac.webkit.org/changeset/220954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340404</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-19 10:29:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340406</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-19 10:30:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/33979914&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318576</attachid>
            <date>2017-08-18 20:43:57 -0700</date>
            <delta_ts>2017-08-18 21:00:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175750-20170818204356.patch</filename>
            <type>text/plain</type>
            <size>26608</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uIHRo
YXQgZXhpc3RlZCB0byBnZW5lcmF0ZSBhCisgICAgICAgIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
IChvciByYXRoZXIsIG9uZSBvZiBpdHMgZGVyaXZlZCBkaWN0aW9uYXJpZXMpCisgICAgICAgIGZv
ciBhIENyeXB0b0tleS4gV2Ugd2VyZSBjYWxsaW5nIHRoZSB2aXJ0dWFsIGJ1aWxkQWxnb3JpdGht
KCksIHdoaWNoCisgICAgICAgIHJldHVybiBhIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
LCB3aGljaCB3ZSB0aGVuIGNhc3RlZCB0byB0aGUgCisgICAgICAgIGNvcnJlY3QgZGVyaXZlZCBj
bGFzcyBhbmQgY2FsbGVkIGRpY3Rpb25hcnkoKSBvbi4gVGhpcyBjYW4gbm93IGJlCisgICAgICAg
IHNpbXBsaWZpZWQgYnkgbWFraW5nIGVhY2ggQ3J5cHRvS2V5IGRlcml2ZWQgY2xhc3Mgb3ZlcnJp
ZGUgYSBmdW5jdGlvbgorICAgICAgICB0aGF0IHJldHVybnMgdGhlIEtleUFsZ29yaXRobSB2YXJp
YW50LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXk6OmFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRv
L0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5OjpleHRyYWN0YWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlBbGdvcml0aG06On5LZXlBbGdvcml0aG0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpuYW1lIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjphbGdvcml0aG0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3Jp
dGhtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OkVjS2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVjS2V5QWxnb3JpdGhtOjpuYW1lZEN1cnZlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJzYUtl
eUFsZ29yaXRobTo6ZGljdGlvbmFyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2ViQ29yZTo6UnNh
S2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjptb2R1bHVzTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJzYUtleUFsZ29yaXRobTo6cHVibGljRXhwb25lbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYXdLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5UmF3OjpidWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
YXdLZXlBbGdvcml0aG06OlJhd0tleUFsZ29yaXRobSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
UlNBOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpi
dWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMTggIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBHZXQgcmlkIG9mIENyeXB0
b0tleURhdGEgY2xhc3MgYW5kIGFsbCBpdHMgc3ViY2xhc3NlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksNiBAQAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlFQy5o
IgotI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIK
LSNpbmNsdWRlICJDcnlwdG9LZXlSYXcuaCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsMjcgKzQ1LDYg
QEAgQ3J5cHRvS2V5Ojp+Q3J5cHRvS2V5KCkKIHsKIH0KIAotYXV0byBDcnlwdG9LZXk6OmFsZ29y
aXRobSgpIGNvbnN0IC0+IEFsZ29yaXRobVZhcmlhbnQKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0gPSBidWlsZEFsZ29yaXRobSgpOwotICAgIHN3aXRjaCAo
YWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1D
bGFzczo6QUVTOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPigqYWxn
b3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6RUM6Ci0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxFY0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlv
bmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM6Ci0gICAgICAgIHJldHVy
biBkb3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0g
ICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SFJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJzYUhhc2hlZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNh
c2UgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJzYUtl
eUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3Jp
dGhtQ2xhc3M6OlJhdzoKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJhd0tleUFsZ29yaXRobT4o
KmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0
b3I8Q3J5cHRvS2V5VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhh
YmV0aWNhbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkocmV2aXNpb24gMjIw
OTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwotCiBlbnVtIGNsYXNzIENyeXB0b0tleUNsYXNz
IHsKICAgICBBRVMsCiAgICAgRUMsCkBAIC01NSw1MCArNTMsMjAgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlDbGFzcyB7CiAgICAgUmF3LAogfTsKIAotZW51bSBjbGFzcyBLZXlBbGdvcml0aG1DbGFz
cyB7Ci0gICAgQUVTLAotICAgIEVDLAotICAgIEhNQUMsCi0gICAgSFJTQSwKLSAgICBSU0EsCi0g
ICAgUmF3LAotfTsKLQotY2xhc3MgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5LZXlBbGdvcml0aG0oKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIEtleUFsZ29yaXRo
bUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOwotCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fbmFtZShu
YW1lKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFtZTsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+
IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKLSAgICB1c2luZyBB
bGdvcml0aG1WYXJpYW50ID0gVmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tl
eUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0s
IENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKKyAg
ICB1c2luZyBLZXlBbGdvcml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRv
QWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29y
aXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+
OwogCiAgICAgQ3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9L
ZXkoKTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9Ci0gICAgQWxnb3JpdGhtVmFyaWFudCBhbGdv
cml0aG0oKSBjb25zdDsKICAgICBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+IHVzYWdlcygpIGNvbnN0
OworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0g
MDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CkBAIC0x
MjYsOSArOTQsNCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvCiAg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJl
dHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCiAKLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4g
YWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xh
c3M7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCiAjZW5kaWYgLy8gRU5BQkxF
KFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0tleVJTQUdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxOSwxNSArNjE5LDI1IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5
cHRvS2V5UlMKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBj
b25zdAorQ3J5cHRvS2V5OjpBbGdvcml0aG0gQ3J5cHRvS2V5UlNBOjphbGdvcml0aG0oKSBjb25z
dAogewotICAgIFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKLSAgICBzaXplX3QgbW9kdWx1c0xlbmd0
aCA9IGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0Zm9ybUtleSk7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHB1YmxpY0V4cG9uZW50ID0gZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJl
Iik7Ci0KLSAgICBpZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xl
bmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Ojpz
aW5nbGV0b24oKS5uYW1lKG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJz
YUtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVu
dCkpOworICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0
Zm9ybUtleSk7CisgICAgYXV0byBwdWJsaWNFeHBvbmVudCA9IGdldFJTQUtleVBhcmFtZXRlciht
X3BsYXRmb3JtS2V5LCAiZSIpOworCisgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNo
KSB7CisgICAgICAgIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
YWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBt
b2R1bHVzTGVuZ3RoOworICAgICAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5
OjpjcmVhdGUocHVibGljRXhwb25lbnQuZGF0YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOwor
ICAgICAgICByZXN1bHQuaGFzaC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmds
ZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKyAgICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgcmVzdWx0
LnB1YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEo
KSwgcHVibGljRXhwb25lbnQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5UlNBQ29tcG9uZW50cz4gQ3J5cHRvS2V5UlNBOjpleHBvcnRE
YXRhKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
QUVTLmNwcAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9BZXNLZXlBbGdvcml0aG0gQWVzS2V5QWxnb3JpdGht
OjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0
OwotICAgIHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0
aGlzLT5sZW5ndGgoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIGJv
b2wgbGVuZ3RoSXNWYWxpZChzaXplX3QgbGVuZ3RoKQogewogICAgIHJldHVybiAobGVuZ3RoID09
IENyeXB0b0tleUFFUzo6c19sZW5ndGgxMjgpIHx8IChsZW5ndGggPT0gQ3J5cHRvS2V5QUVTOjpz
X2xlbmd0aDE5MikgfHwgKGxlbmd0aCA9PSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMjU2KTsKQEAg
LTEzMCw5ICsxMjIsMTIgQEAgRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9LZXlBRVM6OmdldEtl
eQogICAgIHJldHVybiBhZXNQYXJhbWV0ZXJzLmxlbmd0aDsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRv
IENyeXB0b0tleUFFUzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QWVzS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpLCBtX2tleS5z
aXplKCkgKiA4KTsKKyAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3Vs
dC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKTsKKyAgICByZXN1bHQubGVuZ3RoID0gbV9rZXkuc2l6ZSgpICogODsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAkocmV2aXNpb24gMjIwOTQ5
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDI0ICszOSw2IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM7
CiAKIHN0cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBBZXNLZXlBbGdvcml0aG0gZmluYWwgOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBBZXNLZXlBbGdvcml0aG0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotICAgICAgICA6IEtleUFsZ29yaXRobShuYW1l
KQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxn
b3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlB
bGdvcml0aG1DbGFzczo6QUVTOyB9Ci0KLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gZGljdGlv
bmFyeSgpIGNvbnN0OwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbGVuZ3RoOwotfTsKLQogY2xhc3MgQ3J5
cHRvS2V5QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IGludCBzX2xlbmd0aDEyOCA9IDEyODsKQEAgLTg3LDcgKzY5LDcgQEAgcHJpdmF0ZToK
ICAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsK
ICAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZp
bmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiBtX2tleTsKIH07CkBAIC05Niw2ICs3OCw0IEBAIHByaXZhdGU6CiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlBRVMsIENyeXB0b0tleUNs
YXNzOjpBRVMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShBZXNLZXlB
bGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlF
Qy5jcHAJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DcnlwdG9FY0tleUFsZ29yaXRobSBFY0tleUFsZ29yaXRobTo6ZGlj
dGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OwotICAg
IHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gdGhp
cy0+bmFtZWRDdXJ2ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBQMjU2ID0gIlAtMjU2IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQMzg0
ID0gIlAtMzg0IjsKIApAQCAtMjA3LDE4ICsxOTksMjEgQEAgYm9vbCBDcnlwdG9LZXlFQzo6aXNW
YWxpZEVDQWxnb3JpdGhtKENyeQogICAgIHJldHVybiBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6RUNEU0EgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkVDREg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tl
eUVDOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0b0tleUVDOjphbGdvcml0aG0o
KSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7Cisg
ICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKwogICAgIHN3aXRjaCAobV9jdXJ2ZSkgewogICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RWNLZXlBbGdvcml0aG0+KG5hbWUsIFN0
cmluZyhQMjU2KSk7CisgICAgICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gQVNDSUlMaXRlcmFsKFAy
NTYpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6Ci0gICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVjS2V5QWxnb3JpdGhtPihuYW1lLCBTdHJpbmcoUDM4
NCkpOworICAgICAgICByZXN1bHQubmFtZWRDdXJ2ZSA9IEFTQ0lJTGl0ZXJhbChQMzg0KTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oCShyZXZp
c2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NywyNyArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBFY0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlB
bGdvcml0aG0gewotcHVibGljOgotICAgIEVjS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBjdXJ2ZSkKLSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAg
ICAgICAgLCBtX2N1cnZlKGN1cnZlKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1D
bGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29y
aXRobUNsYXNzOjpFQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lZEN1cnZlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJ2ZTsgfQotCi0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gZGljdGlvbmFy
eSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX2N1cnZlOwotfTsKLQogY2xhc3Mg
Q3J5cHRvS2V5RUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTIzMQorICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRWxsaXB0aWMgQ3VydmUgUC01MjEgKGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE2OTIzMSkKICAgICBlbnVtIGNsYXNzIE5hbWVkQ3VydmUgewogICAgICAg
ICBQMjU2LAogICAgICAgICBQMzg0LApAQCAtMTAxLDcgKzgzLDcgQEAgcHJpdmF0ZToKIAogICAg
IENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5
Q2xhc3M6OkVDOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFs
Z29yaXRobSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25z
dCBmaW5hbDsKIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENyeXB0b0tleVBhaXI+IHBsYXRm
b3JtR2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICBzdGF0aWMgUmVmUHRy
PENyeXB0b0tleUVDPiBwbGF0Zm9ybUltcG9ydFJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
LCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CkBAIC0xMjIsNiArMTA0LDQgQEAgcHJpdmF0ZToKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUVDLCBDcnlwdG9LZXlD
bGFzczo6RUMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShFY0tleUFs
Z29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkVDKQotCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlI
TUFDLmNwcAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNyw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvSG1hY0tleUFsZ29yaXRobSBIbWFjS2V5QWxnb3Jp
dGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIHJl
c3VsdDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXN1bHQuaGFzaC5u
YW1lID0gdGhpcy0+aGFzaCgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgc2l6ZV90IGdldEtleUxlbmd0aEZyb21I
YXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCkKIHsKICAgICBzd2l0Y2ggKGhhc2gp
IHsKQEAgLTE1MCwxMCArMTQxLDEzIEBAIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvS2V5SE1B
Qzo6Z2V0S2UKICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtKCkg
Y29uc3QKK2F1dG8gQ3J5cHRvS2V5SE1BQzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3Jp
dGhtCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SG1hY0tleUFsZ29yaXRobT4oQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmll
cigpKSwKLSAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
bV9oYXNoKSwgbV9rZXkuc2l6ZSgpICogOCk7CisgICAgQ3J5cHRvSG1hY0tleUFsZ29yaXRobSBy
ZXN1bHQ7CisgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xl
dG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5oYXNoLm5hbWUg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpOworICAg
IHJlc3VsdC5sZW5ndGggPSBtX2tleS5zaXplKCkgKiA4OworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlITUFDLmgJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzAgKzM1
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVyczsKLQogc3RydWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIEhtYWNLZXlBbGdvcml0aG0gZmlu
YWwgOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBIbWFjS2V5QWxnb3JpdGht
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoLCBzaXplX3QgbGVuZ3RoKQot
ICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQotICAgICAgICAsIG1faGFzaChoYXNoKQotICAg
ICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGht
Q2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0
aG1DbGFzczo6SE1BQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoOyB9Ci0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9Ci0KLSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBTdHJpbmcgbV9oYXNoOwotICAgIHNpemVfdCBtX2xlbmd0aDsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKQEAgLTg1LDcgKzYzLDcgQEAgcHJpdmF0ZToK
ICAgICBDcnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0
bWFwKTsKICAgICBDcnlwdG9LZXlITUFDKFZlY3Rvcjx1aW50OF90PiYmIGtleSwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRo
bSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5h
bDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9oYXNoOwogICAgIFZlY3Rvcjx1
aW50OF90PiBtX2tleTsKQEAgLTk1LDYgKzczLDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpITUFD
KQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29yaXRo
bSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NS
WVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNw
cAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5UlNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DcnlwdG9Sc2FLZXlBbGdvcml0aG0gUnNhS2V5QWxnb3JpdGhtOjpkaWN0
aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OwotICAg
IHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0g
dGhpcy0+bW9kdWx1c0xlbmd0aCgpOwotICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4
QXJyYXk6OmNyZWF0ZSh0aGlzLT5wdWJsaWNFeHBvbmVudCgpLmRhdGEoKSwgdGhpcy0+cHVibGlj
RXhwb25lbnQoKS5zaXplKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNyeXB0b1JzYUhh
c2hlZEtleUFsZ29yaXRobSBSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25z
dAotewotICAgIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0
Lm5hbWUgPSB0aGlzLT5uYW1lKCk7Ci0gICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSB0aGlzLT5t
b2R1bHVzTGVuZ3RoKCk7Ci0gICAgcmVzdWx0LnB1YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6
Y3JlYXRlKHRoaXMtPnB1YmxpY0V4cG9uZW50KCkuZGF0YSgpLCB0aGlzLT5wdWJsaWNFeHBvbmVu
dCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0Lmhhc2gubmFtZSA9IHRoaXMtPmhhc2goKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6Omlt
cG9ydEp3ayhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgc3RkOjpvcHRpb25h
bDxDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyPiBoYXNoLCBKc29uV2ViS2V5JiYga2V5RGF0YSwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewogICAgIGlm
IChrZXlEYXRhLmt0eSAhPSAiUlNBIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8va2V5cy9DcnlwdG9LZXlSU0EuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDUgKzUxLDYgQEAg
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIHN0cnVjdCBDcnlwdG9LZXlQYWlyOwogc3Ry
dWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIFJzYUtleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdv
cml0aG0gewotcHVibGljOgotICAgIFJzYUtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUs
IHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVudCkK
LSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAgICAgICAgLCBtX21vZHVsdXNMZW5ndGgo
bW9kdWx1c0xlbmd0aCkKLSAgICAgICAgLCBtX3B1YmxpY0V4cG9uZW50KFdURk1vdmUocHVibGlj
RXhwb25lbnQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdv
cml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpS
U0E7IH0KLQotICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bHVzTGVuZ3RoOyB9Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwdWJsaWNFeHBvbmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHVibGljRXhwb25lbnQ7IH0KLQotICAgIENyeXB0b1JzYUtleUFs
Z29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbW9k
dWx1c0xlbmd0aDsKLSAgICBWZWN0b3I8dWludDhfdD4gbV9wdWJsaWNFeHBvbmVudDsKLX07Ci0K
LWNsYXNzIFJzYUhhc2hlZEtleUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBSc2FLZXlBbGdvcml0
aG0gewotcHVibGljOgotICAgIFJzYUhhc2hlZEtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5h
bWUsIHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVu
dCwgY29uc3QgU3RyaW5nJiBoYXNoKQotICAgICAgICA6IFJzYUtleUFsZ29yaXRobShuYW1lLCBt
b2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSkKLSAgICAgICAgLCBtX2hhc2go
aGFzaCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGht
Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTsgfQot
Ci0gICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoOyB9Ci0KLSAg
ICBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFN0cmluZyBtX2hhc2g7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlSU0EgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJT
QT4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlwZSwg
UGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlKQpAQCAtMTI0LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIENyeXB0
b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6
OlJTQTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0
aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0aG0gYWxnb3JpdGhtKCkgY29uc3QgZmlu
YWw7CiAKICAgICBQbGF0Zm9ybVJTQUtleSBtX3BsYXRmb3JtS2V5OwogCkBAIC0xMzYsOCArOTcs
NCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRv
S2V5UlNBLCBDcnlwdG9LZXlDbGFzczo6UlNBKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tF
WV9BTEdPUklUSE0oUnNhS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQotCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGht
LCBLZXlBbGdvcml0aG1DbGFzczo6SFJTQSkKLQogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSYXcuY3Bw
CShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlSYXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMiArMzIsMTcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DcnlwdG9LZXlBbGdvcml0aG0gUmF3S2V5QWxnb3JpdGhtOjpkaWN0aW9u
YXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9LZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3Vs
dC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENyeXB0b0tl
eVJhdzo6Q3J5cHRvS2V5UmF3KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwg
VmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQog
ICAgIDogQ3J5cHRvS2V5KGlkZW50aWZpZXIsIENyeXB0b0tleVR5cGU6OlNlY3JldCwgZmFsc2Us
IHVzYWdlcykKICAgICAsIG1fa2V5KFdURk1vdmUoa2V5RGF0YSkpCiB7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJhdzo6YnVpbGRBbGdvcml0aG0oKSBjb25z
dAorYXV0byBDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQog
ewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJhd0tleUFsZ29yaXRobT4oQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKSk7
CisgICAgQ3J5cHRvS2V5QWxnb3JpdGhtIHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgJKHJldmlzaW9uIDIy
MDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJhd0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgotICAg
IFJhd0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogS2V5QWxnb3Jp
dGhtKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29y
aXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OlJh
dzsgfQotICAgIAotICAgIENyeXB0b0tleUFsZ29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci19
OwotCiBjbGFzcyBDcnlwdG9LZXlSYXcgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJhdz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpAQCAtNTcsNyArNDUsNyBAQCBwcml2YXRlOgogCiAgICAgQ3J5
cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDcnlwdG9LZXlDbGFz
czo6UmF3OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29y
aXRobSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBm
aW5hbDsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBtX2tleTsKIH07CkBAIC02Niw2ICs1NCw0IEBA
IHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlS
YXcsIENyeXB0b0tleUNsYXNzOjpSYXcpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FM
R09SSVRITShSYXdLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpSYXcpCi0KICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc0LDIyICsxNzQsNDEgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygpIGNv
bgogICAgIHJldHVybiBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxL
ZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorQ3J5cHRv
S2V5OjpLZXlBbGdvcml0aG0gQ3J5cHRvS2V5UlNBOjphbGdvcml0aG0oKSBjb25zdAogewotICAg
IFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
YWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAvLyBGSVhNRTogQWRkIGEgdmVyc2lvbiBvZiBn
ZXRQdWJsaWNLZXlDb21wb25lbnRzIHRoYXQgcmV0dXJucyBVaW50OEFycmF5LCByYXRoZXIKKyAg
ICAvLyB0aGFuIFZlY3Rvcjx1aW50OF90PiwgdG8gYXZvaWQgYSBjb3B5IG9mIHRoZSBkYXRhLgor
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1Ymxp
Y0V4cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBnZXRQdWJsaWNLZXlDb21w
b25lbnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50KTsKICAgICBpZiAo
c3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkgY29t
cG9uZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKICAgICAgICAgcHVibGljRXhwb25lbnQuY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihu
YW1lLCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisKKyAgICAgICAgQ3J5cHRvUnNhS2V5
QWxnb3JpdGhtIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgICAg
ICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IDA7CisgICAgICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVu
dCA9IFVpbnQ4QXJyYXk6OmNyZWF0ZSgwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKICAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IG1vZHVsdXMuc2l6ZSgpICogODsKLSAgICBp
ZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92
ZShwdWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5u
YW1lKG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRo
bT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOworCisgICAg
aWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7CisgICAgICAgIENyeXB0b1JzYUhhc2hl
ZEtleUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBtb2R1bHVzTGVuZ3RoOworICAgICAgICByZXN1
bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVhdGUocHVibGljRXhwb25lbnQuZGF0
YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgICAgICByZXN1bHQuaGFzaC5uYW1lID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGht
IHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmVzdWx0Lm1vZHVsdXNM
ZW5ndGggPSBtb2R1bHVzTGVuZ3RoOworICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4
QXJyYXk6OmNyZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRhKCksIHB1YmxpY0V4cG9uZW50LnNpemUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVJT
QUNvbXBvbmVudHM+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318578</attachid>
            <date>2017-08-18 21:00:57 -0700</date>
            <delta_ts>2017-08-18 21:03:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175750-20170818210057.patch</filename>
            <type>text/plain</type>
            <size>26605</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uIHRo
YXQgZXhpc3RlZCB0byBnZW5lcmF0ZSBhCisgICAgICAgIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
IChvciByYXRoZXIsIG9uZSBvZiBpdHMgZGVyaXZlZCBkaWN0aW9uYXJpZXMpCisgICAgICAgIGZv
ciBhIENyeXB0b0tleS4gV2Ugd2VyZSBjYWxsaW5nIHRoZSB2aXJ0dWFsIGJ1aWxkQWxnb3JpdGht
KCksIHdoaWNoCisgICAgICAgIHJldHVybiBhIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
LCB3aGljaCB3ZSB0aGVuIGNhc3RlZCB0byB0aGUgCisgICAgICAgIGNvcnJlY3QgZGVyaXZlZCBj
bGFzcyBhbmQgY2FsbGVkIGRpY3Rpb25hcnkoKSBvbi4gVGhpcyBjYW4gbm93IGJlCisgICAgICAg
IHNpbXBsaWZpZWQgYnkgbWFraW5nIGVhY2ggQ3J5cHRvS2V5IGRlcml2ZWQgY2xhc3Mgb3ZlcnJp
ZGUgYSBmdW5jdGlvbgorICAgICAgICB0aGF0IHJldHVybnMgdGhlIEtleUFsZ29yaXRobSB2YXJp
YW50LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXk6OmFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRv
L0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5OjpleHRyYWN0YWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlBbGdvcml0aG06On5LZXlBbGdvcml0aG0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpuYW1lIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjphbGdvcml0aG0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3Jp
dGhtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OkVjS2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVjS2V5QWxnb3JpdGhtOjpuYW1lZEN1cnZlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJzYUtl
eUFsZ29yaXRobTo6ZGljdGlvbmFyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2ViQ29yZTo6UnNh
S2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjptb2R1bHVzTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJzYUtleUFsZ29yaXRobTo6cHVibGljRXhwb25lbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYXdLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5UmF3OjpidWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
YXdLZXlBbGdvcml0aG06OlJhd0tleUFsZ29yaXRobSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
UlNBOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpi
dWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMTggIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBHZXQgcmlkIG9mIENyeXB0
b0tleURhdGEgY2xhc3MgYW5kIGFsbCBpdHMgc3ViY2xhc3NlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksNiBAQAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlFQy5o
IgotI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIK
LSNpbmNsdWRlICJDcnlwdG9LZXlSYXcuaCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsMjcgKzQ1LDYg
QEAgQ3J5cHRvS2V5Ojp+Q3J5cHRvS2V5KCkKIHsKIH0KIAotYXV0byBDcnlwdG9LZXk6OmFsZ29y
aXRobSgpIGNvbnN0IC0+IEFsZ29yaXRobVZhcmlhbnQKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0gPSBidWlsZEFsZ29yaXRobSgpOwotICAgIHN3aXRjaCAo
YWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1D
bGFzczo6QUVTOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPigqYWxn
b3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6RUM6Ci0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxFY0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlv
bmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM6Ci0gICAgICAgIHJldHVy
biBkb3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0g
ICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SFJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJzYUhhc2hlZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNh
c2UgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJzYUtl
eUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3Jp
dGhtQ2xhc3M6OlJhdzoKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJhd0tleUFsZ29yaXRobT4o
KmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0
b3I8Q3J5cHRvS2V5VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhh
YmV0aWNhbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkocmV2aXNpb24gMjIw
OTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwotCiBlbnVtIGNsYXNzIENyeXB0b0tleUNsYXNz
IHsKICAgICBBRVMsCiAgICAgRUMsCkBAIC01NSw1MCArNTMsMjAgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlDbGFzcyB7CiAgICAgUmF3LAogfTsKIAotZW51bSBjbGFzcyBLZXlBbGdvcml0aG1DbGFz
cyB7Ci0gICAgQUVTLAotICAgIEVDLAotICAgIEhNQUMsCi0gICAgSFJTQSwKLSAgICBSU0EsCi0g
ICAgUmF3LAotfTsKLQotY2xhc3MgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5LZXlBbGdvcml0aG0oKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIEtleUFsZ29yaXRo
bUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOwotCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fbmFtZShu
YW1lKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFtZTsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+
IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKLSAgICB1c2luZyBB
bGdvcml0aG1WYXJpYW50ID0gVmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tl
eUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0s
IENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKKyAg
ICB1c2luZyBLZXlBbGdvcml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRv
QWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29y
aXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+
OwogCiAgICAgQ3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9L
ZXkoKTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9Ci0gICAgQWxnb3JpdGhtVmFyaWFudCBhbGdv
cml0aG0oKSBjb25zdDsKICAgICBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+IHVzYWdlcygpIGNvbnN0
OworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0g
MDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CkBAIC0x
MjYsOSArOTQsNCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvCiAg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJl
dHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCiAKLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4g
YWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xh
c3M7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCiAjZW5kaWYgLy8gRU5BQkxF
KFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0tleVJTQUdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxOSwxNSArNjE5LDI1IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5
cHRvS2V5UlMKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBj
b25zdAorYXV0byBDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRo
bQogewotICAgIFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKLSAgICBzaXplX3QgbW9kdWx1c0xlbmd0
aCA9IGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0Zm9ybUtleSk7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHB1YmxpY0V4cG9uZW50ID0gZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJl
Iik7Ci0KLSAgICBpZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xl
bmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Ojpz
aW5nbGV0b24oKS5uYW1lKG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJz
YUtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVu
dCkpOworICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0
Zm9ybUtleSk7CisgICAgYXV0byBwdWJsaWNFeHBvbmVudCA9IGdldFJTQUtleVBhcmFtZXRlciht
X3BsYXRmb3JtS2V5LCAiZSIpOworCisgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNo
KSB7CisgICAgICAgIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
YWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBt
b2R1bHVzTGVuZ3RoOworICAgICAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5
OjpjcmVhdGUocHVibGljRXhwb25lbnQuZGF0YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOwor
ICAgICAgICByZXN1bHQuaGFzaC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmds
ZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKyAgICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgcmVzdWx0
LnB1YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEo
KSwgcHVibGljRXhwb25lbnQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5UlNBQ29tcG9uZW50cz4gQ3J5cHRvS2V5UlNBOjpleHBvcnRE
YXRhKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
QUVTLmNwcAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9BZXNLZXlBbGdvcml0aG0gQWVzS2V5QWxnb3JpdGht
OjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0
OwotICAgIHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0
aGlzLT5sZW5ndGgoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIGJv
b2wgbGVuZ3RoSXNWYWxpZChzaXplX3QgbGVuZ3RoKQogewogICAgIHJldHVybiAobGVuZ3RoID09
IENyeXB0b0tleUFFUzo6c19sZW5ndGgxMjgpIHx8IChsZW5ndGggPT0gQ3J5cHRvS2V5QUVTOjpz
X2xlbmd0aDE5MikgfHwgKGxlbmd0aCA9PSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMjU2KTsKQEAg
LTEzMCw5ICsxMjIsMTIgQEAgRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9LZXlBRVM6OmdldEtl
eQogICAgIHJldHVybiBhZXNQYXJhbWV0ZXJzLmxlbmd0aDsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRv
IENyeXB0b0tleUFFUzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QWVzS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpLCBtX2tleS5z
aXplKCkgKiA4KTsKKyAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3Vs
dC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKTsKKyAgICByZXN1bHQubGVuZ3RoID0gbV9rZXkuc2l6ZSgpICogODsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAkocmV2aXNpb24gMjIwOTQ5
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDI0ICszOSw2IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM7
CiAKIHN0cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBBZXNLZXlBbGdvcml0aG0gZmluYWwgOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBBZXNLZXlBbGdvcml0aG0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotICAgICAgICA6IEtleUFsZ29yaXRobShuYW1l
KQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxn
b3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlB
bGdvcml0aG1DbGFzczo6QUVTOyB9Ci0KLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gZGljdGlv
bmFyeSgpIGNvbnN0OwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbGVuZ3RoOwotfTsKLQogY2xhc3MgQ3J5
cHRvS2V5QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IGludCBzX2xlbmd0aDEyOCA9IDEyODsKQEAgLTg3LDcgKzY5LDcgQEAgcHJpdmF0ZToK
ICAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsK
ICAgICBDcnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZp
bmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKIAogICAgIFZl
Y3Rvcjx1aW50OF90PiBtX2tleTsKIH07CkBAIC05Niw2ICs3OCw0IEBAIHByaXZhdGU6CiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlBRVMsIENyeXB0b0tleUNs
YXNzOjpBRVMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShBZXNLZXlB
bGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VC
VExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlF
Qy5jcHAJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DcnlwdG9FY0tleUFsZ29yaXRobSBFY0tleUFsZ29yaXRobTo6ZGlj
dGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OwotICAg
IHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gdGhp
cy0+bmFtZWRDdXJ2ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBQMjU2ID0gIlAtMjU2IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQMzg0
ID0gIlAtMzg0IjsKIApAQCAtMjA3LDE4ICsxOTksMjEgQEAgYm9vbCBDcnlwdG9LZXlFQzo6aXNW
YWxpZEVDQWxnb3JpdGhtKENyeQogICAgIHJldHVybiBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6RUNEU0EgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkVDREg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tl
eUVDOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0b0tleUVDOjphbGdvcml0aG0o
KSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7Cisg
ICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKwogICAgIHN3aXRjaCAobV9jdXJ2ZSkgewogICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RWNLZXlBbGdvcml0aG0+KG5hbWUsIFN0
cmluZyhQMjU2KSk7CisgICAgICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gQVNDSUlMaXRlcmFsKFAy
NTYpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6Ci0gICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEVjS2V5QWxnb3JpdGhtPihuYW1lLCBTdHJpbmcoUDM4
NCkpOworICAgICAgICByZXN1bHQubmFtZWRDdXJ2ZSA9IEFTQ0lJTGl0ZXJhbChQMzg0KTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oCShyZXZp
c2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NywyNyArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBFY0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlB
bGdvcml0aG0gewotcHVibGljOgotICAgIEVjS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBjdXJ2ZSkKLSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAg
ICAgICAgLCBtX2N1cnZlKGN1cnZlKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1D
bGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29y
aXRobUNsYXNzOjpFQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lZEN1cnZlKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJ2ZTsgfQotCi0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gZGljdGlvbmFy
eSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX2N1cnZlOwotfTsKLQogY2xhc3Mg
Q3J5cHRvS2V5RUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTIzMQorICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRWxsaXB0aWMgQ3VydmUgUC01MjEgKGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE2OTIzMSkKICAgICBlbnVtIGNsYXNzIE5hbWVkQ3VydmUgewogICAgICAg
ICBQMjU2LAogICAgICAgICBQMzg0LApAQCAtMTAxLDcgKzgzLDcgQEAgcHJpdmF0ZToKIAogICAg
IENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5
Q2xhc3M6OkVDOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFs
Z29yaXRobSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25z
dCBmaW5hbDsKIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENyeXB0b0tleVBhaXI+IHBsYXRm
b3JtR2VuZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICBzdGF0aWMgUmVmUHRy
PENyeXB0b0tleUVDPiBwbGF0Zm9ybUltcG9ydFJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
LCBOYW1lZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CkBAIC0xMjIsNiArMTA0LDQgQEAgcHJpdmF0ZToKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUVDLCBDcnlwdG9LZXlD
bGFzczo6RUMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShFY0tleUFs
Z29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkVDKQotCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRM
RV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlI
TUFDLmNwcAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMv
Q3J5cHRvS2V5SE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNyw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvSG1hY0tleUFsZ29yaXRobSBIbWFjS2V5QWxnb3Jp
dGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIHJl
c3VsdDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXN1bHQuaGFzaC5u
YW1lID0gdGhpcy0+aGFzaCgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgc2l6ZV90IGdldEtleUxlbmd0aEZyb21I
YXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCkKIHsKICAgICBzd2l0Y2ggKGhhc2gp
IHsKQEAgLTE1MCwxMCArMTQxLDEzIEBAIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvS2V5SE1B
Qzo6Z2V0S2UKICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtKCkg
Y29uc3QKK2F1dG8gQ3J5cHRvS2V5SE1BQzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3Jp
dGhtCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SG1hY0tleUFsZ29yaXRobT4oQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmll
cigpKSwKLSAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
bV9oYXNoKSwgbV9rZXkuc2l6ZSgpICogOCk7CisgICAgQ3J5cHRvSG1hY0tleUFsZ29yaXRobSBy
ZXN1bHQ7CisgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xl
dG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5oYXNoLm5hbWUg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpOworICAg
IHJlc3VsdC5sZW5ndGggPSBtX2tleS5zaXplKCkgKiA4OworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlITUFDLmgJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzAgKzM1
LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVyczsKLQogc3RydWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIEhtYWNLZXlBbGdvcml0aG0gZmlu
YWwgOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBIbWFjS2V5QWxnb3JpdGht
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoLCBzaXplX3QgbGVuZ3RoKQot
ICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQotICAgICAgICAsIG1faGFzaChoYXNoKQotICAg
ICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGht
Q2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0
aG1DbGFzczo6SE1BQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoOyB9Ci0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9Ci0KLSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBTdHJpbmcgbV9oYXNoOwotICAgIHNpemVfdCBtX2xlbmd0aDsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKQEAgLTg1LDcgKzYzLDcgQEAgcHJpdmF0ZToK
ICAgICBDcnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0
bWFwKTsKICAgICBDcnlwdG9LZXlITUFDKFZlY3Rvcjx1aW50OF90PiYmIGtleSwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRo
bSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5h
bDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9oYXNoOwogICAgIFZlY3Rvcjx1
aW50OF90PiBtX2tleTsKQEAgLTk1LDYgKzczLDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpITUFD
KQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29yaXRo
bSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NS
WVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNw
cAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5UlNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DcnlwdG9Sc2FLZXlBbGdvcml0aG0gUnNhS2V5QWxnb3JpdGhtOjpkaWN0
aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OwotICAg
IHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0g
dGhpcy0+bW9kdWx1c0xlbmd0aCgpOwotICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4
QXJyYXk6OmNyZWF0ZSh0aGlzLT5wdWJsaWNFeHBvbmVudCgpLmRhdGEoKSwgdGhpcy0+cHVibGlj
RXhwb25lbnQoKS5zaXplKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNyeXB0b1JzYUhh
c2hlZEtleUFsZ29yaXRobSBSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25z
dAotewotICAgIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0
Lm5hbWUgPSB0aGlzLT5uYW1lKCk7Ci0gICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSB0aGlzLT5t
b2R1bHVzTGVuZ3RoKCk7Ci0gICAgcmVzdWx0LnB1YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6
Y3JlYXRlKHRoaXMtPnB1YmxpY0V4cG9uZW50KCkuZGF0YSgpLCB0aGlzLT5wdWJsaWNFeHBvbmVu
dCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0Lmhhc2gubmFtZSA9IHRoaXMtPmhhc2goKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6Omlt
cG9ydEp3ayhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgc3RkOjpvcHRpb25h
bDxDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyPiBoYXNoLCBKc29uV2ViS2V5JiYga2V5RGF0YSwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewogICAgIGlm
IChrZXlEYXRhLmt0eSAhPSAiUlNBIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleVJTQS5oCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8va2V5cy9DcnlwdG9LZXlSU0EuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDUgKzUxLDYgQEAg
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIHN0cnVjdCBDcnlwdG9LZXlQYWlyOwogc3Ry
dWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIFJzYUtleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdv
cml0aG0gewotcHVibGljOgotICAgIFJzYUtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUs
IHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVudCkK
LSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAgICAgICAgLCBtX21vZHVsdXNMZW5ndGgo
bW9kdWx1c0xlbmd0aCkKLSAgICAgICAgLCBtX3B1YmxpY0V4cG9uZW50KFdURk1vdmUocHVibGlj
RXhwb25lbnQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdv
cml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpS
U0E7IH0KLQotICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bHVzTGVuZ3RoOyB9Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwdWJsaWNFeHBvbmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHVibGljRXhwb25lbnQ7IH0KLQotICAgIENyeXB0b1JzYUtleUFs
Z29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbW9k
dWx1c0xlbmd0aDsKLSAgICBWZWN0b3I8dWludDhfdD4gbV9wdWJsaWNFeHBvbmVudDsKLX07Ci0K
LWNsYXNzIFJzYUhhc2hlZEtleUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBSc2FLZXlBbGdvcml0
aG0gewotcHVibGljOgotICAgIFJzYUhhc2hlZEtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5h
bWUsIHNpemVfdCBtb2R1bHVzTGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVu
dCwgY29uc3QgU3RyaW5nJiBoYXNoKQotICAgICAgICA6IFJzYUtleUFsZ29yaXRobShuYW1lLCBt
b2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSkKLSAgICAgICAgLCBtX2hhc2go
aGFzaCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGht
Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTsgfQot
Ci0gICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoOyB9Ci0KLSAg
ICBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFN0cmluZyBtX2hhc2g7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlSU0EgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJT
QT4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlwZSwg
UGxhdGZvcm1SU0FLZXkgcGxhdGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlKQpAQCAtMTI0LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIENyeXB0
b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6
OlJTQTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0
aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0aG0gYWxnb3JpdGhtKCkgY29uc3QgZmlu
YWw7CiAKICAgICBQbGF0Zm9ybVJTQUtleSBtX3BsYXRmb3JtS2V5OwogCkBAIC0xMzYsOCArOTcs
NCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRv
S2V5UlNBLCBDcnlwdG9LZXlDbGFzczo6UlNBKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tF
WV9BTEdPUklUSE0oUnNhS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQotCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGht
LCBLZXlBbGdvcml0aG1DbGFzczo6SFJTQSkKLQogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZ
UFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSYXcuY3Bw
CShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlSYXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMiArMzIsMTcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DcnlwdG9LZXlBbGdvcml0aG0gUmF3S2V5QWxnb3JpdGhtOjpkaWN0aW9u
YXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9LZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3Vs
dC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENyeXB0b0tl
eVJhdzo6Q3J5cHRvS2V5UmF3KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwg
VmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQog
ICAgIDogQ3J5cHRvS2V5KGlkZW50aWZpZXIsIENyeXB0b0tleVR5cGU6OlNlY3JldCwgZmFsc2Us
IHVzYWdlcykKICAgICAsIG1fa2V5KFdURk1vdmUoa2V5RGF0YSkpCiB7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJhdzo6YnVpbGRBbGdvcml0aG0oKSBjb25z
dAorYXV0byBDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQog
ewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJhd0tleUFsZ29yaXRobT4oQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKSk7
CisgICAgQ3J5cHRvS2V5QWxnb3JpdGhtIHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgJKHJldmlzaW9uIDIy
MDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJhd0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgotICAg
IFJhd0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogS2V5QWxnb3Jp
dGhtKG5hbWUpCi0gICAgewotICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29y
aXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OlJh
dzsgfQotICAgIAotICAgIENyeXB0b0tleUFsZ29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci19
OwotCiBjbGFzcyBDcnlwdG9LZXlSYXcgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJhdz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgaWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgQ3J5cHRvS2V5
VXNhZ2VCaXRtYXAgdXNhZ2VzKQpAQCAtNTcsNyArNDUsNyBAQCBwcml2YXRlOgogCiAgICAgQ3J5
cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDcnlwdG9LZXlDbGFz
czo6UmF3OyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29y
aXRobSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBm
aW5hbDsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBtX2tleTsKIH07CkBAIC02Niw2ICs1NCw0IEBA
IHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlS
YXcsIENyeXB0b0tleUNsYXNzOjpSYXcpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FM
R09SSVRITShSYXdLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpSYXcpCi0KICNlbmRp
ZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc0LDIyICsxNzQsNDEgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygpIGNv
bgogICAgIHJldHVybiBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxL
ZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorYXV0byBD
cnlwdG9LZXlSU0E6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewotICAgIFN0
cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxn
b3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAvLyBGSVhNRTogQWRkIGEgdmVyc2lvbiBvZiBnZXRQ
dWJsaWNLZXlDb21wb25lbnRzIHRoYXQgcmV0dXJucyBVaW50OEFycmF5LCByYXRoZXIKKyAgICAv
LyB0aGFuIFZlY3Rvcjx1aW50OF90PiwgdG8gYXZvaWQgYSBjb3B5IG9mIHRoZSBkYXRhLgorCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1YmxpY0V4
cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBnZXRQdWJsaWNLZXlDb21wb25l
bnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50KTsKICAgICBpZiAoc3Rh
dHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkgY29tcG9u
ZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKICAgICAgICAgcHVibGljRXhwb25lbnQuY2xlYXIo
KTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihuYW1l
LCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisKKyAgICAgICAgQ3J5cHRvUnNhS2V5QWxn
b3JpdGhtIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgICAgICBy
ZXN1bHQubW9kdWx1c0xlbmd0aCA9IDA7CisgICAgICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9
IFVpbnQ4QXJyYXk6OmNyZWF0ZSgwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IG1vZHVsdXMuc2l6ZSgpICogODsKLSAgICBpZiAo
bV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShw
dWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1l
KG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4o
bmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOworCisgICAgaWYg
KG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7CisgICAgICAgIENyeXB0b1JzYUhhc2hlZEtl
eUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAg
ICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBtb2R1bHVzTGVuZ3RoOworICAgICAgICByZXN1bHQu
cHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVhdGUocHVibGljRXhwb25lbnQuZGF0YSgp
LCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgICAgICByZXN1bHQuaGFzaC5uYW1lID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtIHJl
c3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0
b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmVzdWx0Lm1vZHVsdXNMZW5n
dGggPSBtb2R1bHVzTGVuZ3RoOworICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4QXJy
YXk6OmNyZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRhKCksIHB1YmxpY0V4cG9uZW50LnNpemUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVJTQUNv
bXBvbmVudHM+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318579</attachid>
            <date>2017-08-18 21:03:12 -0700</date>
            <delta_ts>2017-08-18 21:21:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175750-20170818210311.patch</filename>
            <type>text/plain</type>
            <size>27520</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uIHRo
YXQgZXhpc3RlZCB0byBnZW5lcmF0ZSBhCisgICAgICAgIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
IChvciByYXRoZXIsIG9uZSBvZiBpdHMgZGVyaXZlZCBkaWN0aW9uYXJpZXMpCisgICAgICAgIGZv
ciBhIENyeXB0b0tleS4gV2Ugd2VyZSBjYWxsaW5nIHRoZSB2aXJ0dWFsIGJ1aWxkQWxnb3JpdGht
KCksIHdoaWNoCisgICAgICAgIHJldHVybiBhIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
LCB3aGljaCB3ZSB0aGVuIGNhc3RlZCB0byB0aGUgCisgICAgICAgIGNvcnJlY3QgZGVyaXZlZCBj
bGFzcyBhbmQgY2FsbGVkIGRpY3Rpb25hcnkoKSBvbi4gVGhpcyBjYW4gbm93IGJlCisgICAgICAg
IHNpbXBsaWZpZWQgYnkgbWFraW5nIGVhY2ggQ3J5cHRvS2V5IGRlcml2ZWQgY2xhc3Mgb3ZlcnJp
ZGUgYSBmdW5jdGlvbgorICAgICAgICB0aGF0IHJldHVybnMgdGhlIEtleUFsZ29yaXRobSB2YXJp
YW50LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXk6OmFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRv
L0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5OjpleHRyYWN0YWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlBbGdvcml0aG06On5LZXlBbGdvcml0aG0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpuYW1lIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjphbGdvcml0aG0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3Jp
dGhtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OkVjS2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVjS2V5QWxnb3JpdGhtOjpuYW1lZEN1cnZlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJzYUtl
eUFsZ29yaXRobTo6ZGljdGlvbmFyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2ViQ29yZTo6UnNh
S2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjptb2R1bHVzTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJzYUtleUFsZ29yaXRobTo6cHVibGljRXhwb25lbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYXdLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5UmF3OjpidWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
YXdLZXlBbGdvcml0aG06OlJhd0tleUFsZ29yaXRobSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
UlNBOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpi
dWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMTggIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBHZXQgcmlkIG9mIENyeXB0
b0tleURhdGEgY2xhc3MgYW5kIGFsbCBpdHMgc3ViY2xhc3NlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksNiBAQAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlFQy5o
IgotI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIK
LSNpbmNsdWRlICJDcnlwdG9LZXlSYXcuaCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsMjcgKzQ1LDYg
QEAgQ3J5cHRvS2V5Ojp+Q3J5cHRvS2V5KCkKIHsKIH0KIAotYXV0byBDcnlwdG9LZXk6OmFsZ29y
aXRobSgpIGNvbnN0IC0+IEFsZ29yaXRobVZhcmlhbnQKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0gPSBidWlsZEFsZ29yaXRobSgpOwotICAgIHN3aXRjaCAo
YWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1D
bGFzczo6QUVTOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPigqYWxn
b3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6RUM6Ci0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxFY0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlv
bmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM6Ci0gICAgICAgIHJldHVy
biBkb3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0g
ICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SFJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJzYUhhc2hlZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNh
c2UgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJzYUtl
eUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3Jp
dGhtQ2xhc3M6OlJhdzoKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJhd0tleUFsZ29yaXRobT4o
KmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0
b3I8Q3J5cHRvS2V5VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhh
YmV0aWNhbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkocmV2aXNpb24gMjIw
OTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwotCiBlbnVtIGNsYXNzIENyeXB0b0tleUNsYXNz
IHsKICAgICBBRVMsCiAgICAgRUMsCkBAIC01NSw1MCArNTMsMjAgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlDbGFzcyB7CiAgICAgUmF3LAogfTsKIAotZW51bSBjbGFzcyBLZXlBbGdvcml0aG1DbGFz
cyB7Ci0gICAgQUVTLAotICAgIEVDLAotICAgIEhNQUMsCi0gICAgSFJTQSwKLSAgICBSU0EsCi0g
ICAgUmF3LAotfTsKLQotY2xhc3MgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5LZXlBbGdvcml0aG0oKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIEtleUFsZ29yaXRo
bUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOwotCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fbmFtZShu
YW1lKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFtZTsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+
IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKLSAgICB1c2luZyBB
bGdvcml0aG1WYXJpYW50ID0gVmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tl
eUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0s
IENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKKyAg
ICB1c2luZyBLZXlBbGdvcml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRv
QWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29y
aXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+
OwogCiAgICAgQ3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9L
ZXkoKTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9Ci0gICAgQWxnb3JpdGhtVmFyaWFudCBhbGdv
cml0aG0oKSBjb25zdDsKICAgICBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+IHVzYWdlcygpIGNvbnN0
OworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0g
MDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CkBAIC0x
MjYsOSArOTQsNCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvCiAg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJl
dHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCiAKLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4g
YWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xh
c3M7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCiAjZW5kaWYgLy8gRU5BQkxF
KFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0tleVJTQUdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRzLmgi
CiAjaW5jbHVkZSAiR0NyeXB0VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9IYW5kbGUuaD4KICNp
bmNsdWRlIDxwYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxwYWwvY3J5
cHRvL3Rhc24xL1V0aWxpdGllcy5oPgpAQCAtNjE5LDE1ICs2MjEsMjUgQEAgRXhjZXB0aW9uT3I8
VmVjdG9yPHVpbnQ4X3Q+PiBDcnlwdG9LZXlSUwogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNB
OjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0b0tleVJTQTo6YWxnb3JpdGhtKCkg
Y29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAgU3RyaW5nIG5hbWUgPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOwotICAg
IHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gZ2V0UlNBTW9kdWx1c0xlbmd0aChtX3BsYXRmb3JtS2V5
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHVibGljRXhwb25lbnQgPSBnZXRSU0FLZXlQYXJhbWV0
ZXIobV9wbGF0Zm9ybUtleSwgImUiKTsKLQotICAgIGlmIChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmlj
SGFzaCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhSGFzaGVkS2V5QWxnb3Jp
dGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSwgQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNoKSk7Ci0gICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBX
VEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisgICAgYXV0byBtb2R1bHVzTGVuZ3RoID0gZ2V0UlNB
TW9kdWx1c0xlbmd0aChtX3BsYXRmb3JtS2V5KTsKKyAgICBhdXRvIHB1YmxpY0V4cG9uZW50ID0g
Z2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJlIik7CisKKyAgICBpZiAobV9yZXN0
cmljdGVkVG9TcGVjaWZpY0hhc2gpIHsKKyAgICAgICAgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3Jp
dGhtIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgICAgICByZXN1
bHQubW9kdWx1c0xlbmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgICAgIHJlc3VsdC5wdWJsaWNF
eHBvbmVudCA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRhKCksIHB1Ymxp
Y0V4cG9uZW50LnNpemUoKSk7CisgICAgICAgIHJlc3VsdC5oYXNoLm5hbWUgPSBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIENyeXB0b1JzYUtleUFsZ29yaXRobSByZXN1bHQ7CisgICAg
cmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShh
bGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gbW9kdWx1
c0xlbmd0aDsKKyAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVhdGUo
cHVibGljRXhwb25lbnQuZGF0YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlSU0FDb21wb25lbnRzPiBD
cnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxNCArMzcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0Flc0tleUFsZ29y
aXRobSBBZXNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25zdAotewotICAgIENyeXB0b0Fl
c0tleUFsZ29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm5hbWUgPSB0aGlzLT5uYW1lKCk7Ci0g
ICAgcmVzdWx0Lmxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBsZW5ndGhJc1ZhbGlkKHNpemVfdCBsZW5ndGgpCiB7CiAg
ICAgcmV0dXJuIChsZW5ndGggPT0gQ3J5cHRvS2V5QUVTOjpzX2xlbmd0aDEyOCkgfHwgKGxlbmd0
aCA9PSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTkyKSB8fCAobGVuZ3RoID09IENyeXB0b0tleUFF
Uzo6c19sZW5ndGgyNTYpOwpAQCAtMTMwLDkgKzEyMiwxMiBAQCBFeGNlcHRpb25PcjxzaXplX3Q+
IENyeXB0b0tleUFFUzo6Z2V0S2V5CiAgICAgcmV0dXJuIGFlc1BhcmFtZXRlcnMubGVuZ3RoOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlBRVM6OmJ1aWxkQWxn
b3JpdGhtKCkgY29uc3QKK2F1dG8gQ3J5cHRvS2V5QUVTOjphbGdvcml0aG0oKSBjb25zdCAtPiBL
ZXlBbGdvcml0aG0KIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBZXNLZXlBbGdvcml0
aG0+KENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlk
ZW50aWZpZXIoKSksIG1fa2V5LnNpemUoKSAqIDgpOworICAgIENyeXB0b0Flc0tleUFsZ29yaXRo
bSByZXN1bHQ7CisgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2lu
Z2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5sZW5ndGgg
PSBtX2tleS5zaXplKCkgKiA4OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFF
Uy5oCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlBRVMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMjQgKzM5LDYgQEAgY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVyczsKIAogc3RydWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIEFlc0tl
eUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgotICAgIEFl
c0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBsZW5ndGgpCi0gICAgICAg
IDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgIHsK
LSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpBRVM7IH0KLQotICAgIENyeXB0b0Fl
c0tleUFsZ29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci0KLSAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9sZW5n
dGg7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlBRVMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbGVuZ3RoMTI4ID0gMTI4OwpAQCAtODcs
NyArNjksNyBAQCBwcml2YXRlOgogICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5
cHRvS2V5VXNhZ2VCaXRtYXApOwogICAgIENyeXB0b0tleUFFUyhDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyLCBWZWN0b3I8dWludDhfdD4mJiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlQml0bWFwKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IGJ1aWxk
QWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNv
bnN0IGZpbmFsOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fa2V5OwogfTsKQEAgLTk2LDYgKzc4
LDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0
b0tleUFFUywgQ3J5cHRvS2V5Q2xhc3M6OkFFUykKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19L
RVlfQUxHT1JJVEhNKEFlc0tleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUykKLQog
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
NCArMzQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0VjS2V5QWxnb3JpdGht
IEVjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9FY0tleUFs
Z29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm5hbWUgPSB0aGlzLT5uYW1lKCk7Ci0gICAgcmVz
dWx0Lm5hbWVkQ3VydmUgPSB0aGlzLT5uYW1lZEN1cnZlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFAyNTYgPSAiUC0yNTYiOwogc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IFAzODQgPSAiUC0zODQiOwogCkBAIC0yMDcsMTggKzE5OSwyMSBAQCBi
b29sIENyeXB0b0tleUVDOjppc1ZhbGlkRUNBbGdvcml0aG0oQ3J5CiAgICAgcmV0dXJuIGFsZ29y
aXRobSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RTQSB8fCBhbGdvcml0aG0gPT0g
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6RUNESDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEtl
eUFsZ29yaXRobT4gQ3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKK2F1dG8gQ3J5
cHRvS2V5RUM6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewotICAgIFN0cmlu
ZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKTsKKyAgICBDcnlwdG9FY0tleUFsZ29yaXRobSByZXN1bHQ7CisgICAg
cmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShh
bGdvcml0aG1JZGVudGlmaWVyKCkpOworCiAgICAgc3dpdGNoIChtX2N1cnZlKSB7CiAgICAgY2Fz
ZSBOYW1lZEN1cnZlOjpQMjU2OgotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxFY0tl
eUFsZ29yaXRobT4obmFtZSwgU3RyaW5nKFAyNTYpKTsKKyAgICAgICAgcmVzdWx0Lm5hbWVkQ3Vy
dmUgPSBBU0NJSUxpdGVyYWwoUDI1Nik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTmFtZWRD
dXJ2ZTo6UDM4NDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RWNLZXlBbGdvcml0
aG0+KG5hbWUsIFN0cmluZyhQMzg0KSk7CisgICAgICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gQVND
SUlMaXRlcmFsKFAzODQpOworICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlFQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleUVDLmgJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleUVDLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDI3ICs0Nyw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIEVjS2V5QWxn
b3JpdGhtIDogcHVibGljIEtleUFsZ29yaXRobSB7Ci1wdWJsaWM6Ci0gICAgRWNLZXlBbGdvcml0
aG0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGN1cnZlKQotICAgICAgICA6IEtl
eUFsZ29yaXRobShuYW1lKQotICAgICAgICAsIG1fY3VydmUoY3VydmUpCi0gICAgewotICAgIH0K
LQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkVDOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcm
IG5hbWVkQ3VydmUoKSBjb25zdCB7IHJldHVybiBtX2N1cnZlOyB9Ci0KLSAgICBDcnlwdG9FY0tl
eUFsZ29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1f
Y3VydmU7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlFQyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9LZXkg
ewogcHVibGljOgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5MjMxCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBFbGxpcHRpYyBD
dXJ2ZSBQLTUyMSAoaHR0cHM6Ly93ZWJraXQub3JnL2IvMTY5MjMxKQogICAgIGVudW0gY2xhc3Mg
TmFtZWRDdXJ2ZSB7CiAgICAgICAgIFAyNTYsCiAgICAgICAgIFAzODQsCkBAIC0xMDEsNyArODMs
NyBAQCBwcml2YXRlOgogCiAgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6RUM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxL
ZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgS2V5QWxnb3Jp
dGhtIGFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOwogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
Q3J5cHRvS2V5UGFpcj4gcGxhdGZvcm1HZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciwgTmFtZWRDdXJ2ZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAp
OwogICAgIHN0YXRpYyBSZWZQdHI8Q3J5cHRvS2V5RUM+IHBsYXRmb3JtSW1wb3J0UmF3KENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIFZlY3Rvcjx1aW50OF90PiYmIGtleURh
dGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKQEAgLTEyMiw2ICsx
MDQsNCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5
cHRvS2V5RUMsIENyeXB0b0tleUNsYXNzOjpFQykKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19L
RVlfQUxHT1JJVEhNKEVjS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6RUMpCi0KICNl
bmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTUgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9IbWFjS2V5QWxn
b3JpdGhtIEhtYWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25zdAotewotICAgIENyeXB0
b0htYWNLZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgp
OwotICAgIHJlc3VsdC5oYXNoLm5hbWUgPSB0aGlzLT5oYXNoKCk7Ci0gICAgcmVzdWx0Lmxlbmd0
aCA9IHRoaXMtPmxlbmd0aCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBzaXpl
X3QgZ2V0S2V5TGVuZ3RoRnJvbUhhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoKQog
ewogICAgIHN3aXRjaCAoaGFzaCkgewpAQCAtMTUwLDEwICsxNDEsMTMgQEAgRXhjZXB0aW9uT3I8
c2l6ZV90PiBDcnlwdG9LZXlITUFDOjpnZXRLZQogICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBl
RXJyb3IgfTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5SE1B
Qzo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorYXV0byBDcnlwdG9LZXlITUFDOjphbGdvcml0aG0o
KSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxI
bWFjS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFt
ZShhbGdvcml0aG1JZGVudGlmaWVyKCkpLAotICAgICAgICBDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpLCBtX2tleS5zaXplKCkgKiA4KTsKKyAgICBDcnlw
dG9IbWFjS2V5QWxnb3JpdGhtIHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7Cisg
ICAgcmVzdWx0Lmhhc2gubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS5uYW1lKG1faGFzaCk7CisgICAgcmVzdWx0Lmxlbmd0aCA9IG1fa2V5LnNpemUoKSAqIDg7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkocmV2aXNpb24gMjIwOTQ5
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwzMCArMzUsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzOwotCiBzdHJ1Y3QgSnNvbldlYktleTsKIAotY2xhc3Mg
SG1hY0tleUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgot
ICAgIEhtYWNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGhh
c2gsIHNpemVfdCBsZW5ndGgpCi0gICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgICAg
ICwgbV9oYXNoKGhhc2gpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgIHsKLSAgICB9
Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpITUFDOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcm
IGhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLQotICAgIENyeXB0b0htYWNLZXlBbGdvcml0aG0gZGlj
dGlvbmFyeSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX2hhc2g7Ci0gICAgc2l6
ZV90IG1fbGVuZ3RoOwotfTsKLQogY2xhc3MgQ3J5cHRvS2V5SE1BQyBmaW5hbCA6IHB1YmxpYyBD
cnlwdG9LZXkgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvS2V5SE1BQz4gY3JlYXRl
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhh
c2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlKQpAQCAtODUs
NyArNjMsNyBAQCBwcml2YXRlOgogICAgIENyeXB0b0tleUhNQUMoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJs
ZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApOwogICAgIENyeXB0b0tleUhNQUMoVmVjdG9yPHVpbnQ4
X3Q+JiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFi
bGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdv
cml0aG0+IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgS2V5QWxnb3JpdGhtIGFs
Z29yaXRobSgpIGNvbnN0IGZpbmFsOwogCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBt
X2hhc2g7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fa2V5OwpAQCAtOTUsNiArNzMsNCBAQCBwcml2
YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5SE1BQywg
Q3J5cHRvS2V5Q2xhc3M6OkhNQUMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09S
SVRITShIbWFjS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6SE1BQykKLQogI2VuZGlm
IC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5UlNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
a2V5cy9DcnlwdG9LZXlSU0EuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsy
OCw2IEBACiAKICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAi
SnNvbldlYktleS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKQEAgLTM3LDI1ICszNSw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ3J5cHRvUnNhS2V5QWxnb3JpdGhtIFJzYUtleUFsZ29yaXRobTo6ZGljdGlv
bmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtIHJlc3VsdDsKLSAgICBy
ZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IHRo
aXMtPm1vZHVsdXNMZW5ndGgoKTsKLSAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFy
cmF5OjpjcmVhdGUodGhpcy0+cHVibGljRXhwb25lbnQoKS5kYXRhKCksIHRoaXMtPnB1YmxpY0V4
cG9uZW50KCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1DcnlwdG9Sc2FIYXNo
ZWRLZXlBbGdvcml0aG0gUnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QK
LXsKLSAgICBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3VsdC5u
YW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gdGhpcy0+bW9k
dWx1c0xlbmd0aCgpOwotICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4QXJyYXk6OmNy
ZWF0ZSh0aGlzLT5wdWJsaWNFeHBvbmVudCgpLmRhdGEoKSwgdGhpcy0+cHVibGljRXhwb25lbnQo
KS5zaXplKCkpOwotICAgIHJlc3VsdC5oYXNoLm5hbWUgPSB0aGlzLT5oYXNoKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQogUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5cHRvS2V5UlNBOjppbXBv
cnRKd2soQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIHN0ZDo6b3B0aW9uYWw8
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4gaGFzaCwgSnNvbldlYktleSYmIGtleURhdGEsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKIHsKICAgICBpZiAo
a2V5RGF0YS5rdHkgIT0gIlJTQSIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlSU0EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlSU0EuaAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UlNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQ1ICs1MSw2IEBAIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBzdHJ1Y3QgQ3J5cHRvS2V5UGFpcjsKIHN0cnVj
dCBKc29uV2ViS2V5OwogCi1jbGFzcyBSc2FLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3Jp
dGhtIHsKLXB1YmxpYzoKLSAgICBSc2FLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lLCBz
aXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcHVibGljRXhwb25lbnQpCi0g
ICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgICAgICwgbV9tb2R1bHVzTGVuZ3RoKG1v
ZHVsdXNMZW5ndGgpCi0gICAgICAgICwgbV9wdWJsaWNFeHBvbmVudChXVEZNb3ZlKHB1YmxpY0V4
cG9uZW50KSkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3Jp
dGhtQ2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6UlNB
OyB9Ci0KLSAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWx1
c0xlbmd0aDsgfQotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcHVibGljRXhwb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3B1YmxpY0V4cG9uZW50OyB9Ci0KLSAgICBDcnlwdG9Sc2FLZXlBbGdv
cml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHNpemVfdCBtX21vZHVs
dXNMZW5ndGg7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcHVibGljRXhwb25lbnQ7Ci19OwotCi1j
bGFzcyBSc2FIYXNoZWRLZXlBbGdvcml0aG0gZmluYWwgOiBwdWJsaWMgUnNhS2V5QWxnb3JpdGht
IHsKLXB1YmxpYzoKLSAgICBSc2FIYXNoZWRLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1l
LCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcHVibGljRXhwb25lbnQs
IGNvbnN0IFN0cmluZyYgaGFzaCkKLSAgICAgICAgOiBSc2FLZXlBbGdvcml0aG0obmFtZSwgbW9k
dWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpCi0gICAgICAgICwgbV9oYXNoKGhh
c2gpCi0gICAgewotICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNs
YXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0E7IH0KLQot
ICAgIGNvbnN0IFN0cmluZyYgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQotCi0gICAg
Q3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9oYXNoOwotfTsKLQogY2xhc3MgQ3J5cHRvS2V5UlNBIGZpbmFsIDog
cHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlSU0E+
IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBDcnlwdG9LZXlUeXBlIHR5cGUsIFBs
YXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZUJpdG1hcCB1c2FnZSkKQEAgLTEyNCw3ICs4NSw3IEBAIHByaXZhdGU6CiAKICAgICBDcnlwdG9L
ZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpS
U0E7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IGJ1aWxkQWxnb3JpdGht
KCkgY29uc3QgZmluYWw7CisgICAgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNvbnN0IGZpbmFs
OwogCiAgICAgUGxhdGZvcm1SU0FLZXkgbV9wbGF0Zm9ybUtleTsKIApAQCAtMTM2LDggKzk3LDQg
QEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tl
eVJTQSwgQ3J5cHRvS2V5Q2xhc3M6OlJTQSkKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKFJzYUtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQSkKLQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUhhc2hlZEtleUFsZ29yaXRobSwg
S2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0EpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBU
TykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmNwcAko
cmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
UmF3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjIgKzMyLDE3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ3J5cHRvS2V5QWxnb3JpdGhtIFJhd0tleUFsZ29yaXRobTo6ZGljdGlvbmFy
eSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvS2V5QWxnb3JpdGhtIHJlc3VsdDsKLSAgICByZXN1bHQu
bmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBDcnlwdG9LZXlS
YXc6OkNyeXB0b0tleVJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIFZl
Y3Rvcjx1aW50OF90PiYmIGtleURhdGEsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKICAg
ICA6IENyeXB0b0tleShpZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlOjpTZWNyZXQsIGZhbHNlLCB1
c2FnZXMpCiAgICAgLCBtX2tleShXVEZNb3ZlKGtleURhdGEpKQogewogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlSYXc6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QK
K2F1dG8gQ3J5cHRvS2V5UmF3OjphbGdvcml0aG0oKSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsK
LSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSYXdLZXlBbGdvcml0aG0+KENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSkpOwor
ICAgIENyeXB0b0tleUFsZ29yaXRobSByZXN1bHQ7CisgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5oCShyZXZpc2lvbiAyMjA5
NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSYXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTggKzMxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBSYXdLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBS
YXdLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IEtleUFsZ29yaXRo
bShuYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0
aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpSYXc7
IH0KLSAgICAKLSAgICBDcnlwdG9LZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotfTsK
LQogY2xhc3MgQ3J5cHRvS2V5UmF3IGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlSYXc+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGlkZW50aWZpZXIsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlcykKQEAgLTU3LDcgKzQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIENyeXB0
b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6
OlJhdzsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0
aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0aG0gYWxnb3JpdGhtKCkgY29uc3QgZmlu
YWw7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CiB9OwpAQCAtNjYsNiArNTQsNCBAQCBw
cml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UmF3
LCBDcnlwdG9LZXlDbGFzczo6UmF3KQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdP
UklUSE0oUmF3S2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UmF3KQotCiAjZW5kaWYg
Ly8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0tleVJTQU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDggQEAKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCiAjaW5jbHVkZSAiQ3J5cHRv
S2V5UlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTc0LDIyICsxNzYsNDEgQEAgc2l6ZV90IENyeXB0b0tleVJTQTo6a2V5U2l6ZUluQml0cygp
IGNvbgogICAgIHJldHVybiBtb2R1bHVzLnNpemUoKSAqIDg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorYXV0
byBDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewotICAg
IFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUo
YWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAvLyBGSVhNRTogQWRkIGEgdmVyc2lvbiBvZiBn
ZXRQdWJsaWNLZXlDb21wb25lbnRzIHRoYXQgcmV0dXJucyBVaW50OEFycmF5LCByYXRoZXIKKyAg
ICAvLyB0aGFuIFZlY3Rvcjx1aW50OF90PiwgdG8gYXZvaWQgYSBjb3B5IG9mIHRoZSBkYXRhLgor
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1vZHVsdXM7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHB1Ymxp
Y0V4cG9uZW50OwogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBnZXRQdWJsaWNLZXlDb21w
b25lbnRzKG1fcGxhdGZvcm1LZXksIG1vZHVsdXMsIHB1YmxpY0V4cG9uZW50KTsKICAgICBpZiAo
c3RhdHVzKSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGRuJ3QgZ2V0IFJTQSBrZXkgY29t
cG9uZW50cywgc3RhdHVzICVkIiwgc3RhdHVzKTsKICAgICAgICAgcHVibGljRXhwb25lbnQuY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGhtPihu
YW1lLCAwLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisKKyAgICAgICAgQ3J5cHRvUnNhS2V5
QWxnb3JpdGhtIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgICAg
ICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IDA7CisgICAgICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVu
dCA9IFVpbnQ4QXJyYXk6OmNyZWF0ZSgwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKICAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IG1vZHVsdXMuc2l6ZSgpICogODsKLSAgICBp
ZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92
ZShwdWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5u
YW1lKG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRo
bT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOworCisgICAg
aWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7CisgICAgICAgIENyeXB0b1JzYUhhc2hl
ZEtleUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAg
ICAgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBtb2R1bHVzTGVuZ3RoOworICAgICAgICByZXN1
bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVhdGUocHVibGljRXhwb25lbnQuZGF0
YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgICAgICByZXN1bHQuaGFzaC5uYW1lID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGht
IHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmVzdWx0Lm1vZHVsdXNM
ZW5ndGggPSBtb2R1bHVzTGVuZ3RoOworICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4
QXJyYXk6OmNyZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRhKCksIHB1YmxpY0V4cG9uZW50LnNpemUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVJT
QUNvbXBvbmVudHM+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318580</attachid>
            <date>2017-08-18 21:21:18 -0700</date>
            <delta_ts>2017-08-19 08:10:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175750-20170818212117.patch</filename>
            <type>text/plain</type>
            <size>27975</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uIHRo
YXQgZXhpc3RlZCB0byBnZW5lcmF0ZSBhCisgICAgICAgIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
IChvciByYXRoZXIsIG9uZSBvZiBpdHMgZGVyaXZlZCBkaWN0aW9uYXJpZXMpCisgICAgICAgIGZv
ciBhIENyeXB0b0tleS4gV2Ugd2VyZSBjYWxsaW5nIHRoZSB2aXJ0dWFsIGJ1aWxkQWxnb3JpdGht
KCksIHdoaWNoCisgICAgICAgIHJldHVybiBhIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
LCB3aGljaCB3ZSB0aGVuIGNhc3RlZCB0byB0aGUgCisgICAgICAgIGNvcnJlY3QgZGVyaXZlZCBj
bGFzcyBhbmQgY2FsbGVkIGRpY3Rpb25hcnkoKSBvbi4gVGhpcyBjYW4gbm93IGJlCisgICAgICAg
IHNpbXBsaWZpZWQgYnkgbWFraW5nIGVhY2ggQ3J5cHRvS2V5IGRlcml2ZWQgY2xhc3Mgb3ZlcnJp
ZGUgYSBmdW5jdGlvbgorICAgICAgICB0aGF0IHJldHVybnMgdGhlIEtleUFsZ29yaXRobSB2YXJp
YW50LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXk6OmFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRv
L0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5OjpleHRyYWN0YWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlBbGdvcml0aG06On5LZXlBbGdvcml0aG0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpuYW1lIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjphbGdvcml0aG0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3Jp
dGhtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OkVjS2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVjS2V5QWxnb3JpdGhtOjpuYW1lZEN1cnZlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJzYUtl
eUFsZ29yaXRobTo6ZGljdGlvbmFyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2ViQ29yZTo6UnNh
S2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjptb2R1bHVzTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJzYUtleUFsZ29yaXRobTo6cHVibGljRXhwb25lbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYXdLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5UmF3OjpidWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
YXdLZXlBbGdvcml0aG06OlJhd0tleUFsZ29yaXRobSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
UlNBOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpi
dWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMTggIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBHZXQgcmlkIG9mIENyeXB0
b0tleURhdGEgY2xhc3MgYW5kIGFsbCBpdHMgc3ViY2xhc3NlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL0NyeXB0b0tleS5jcHAJKHJldmlzaW9uIDIyMDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksNiBAQAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlBRVMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlFQy5o
IgotI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlSU0EuaCIK
LSNpbmNsdWRlICJDcnlwdG9LZXlSYXcuaCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsMjcgKzQ1LDYg
QEAgQ3J5cHRvS2V5Ojp+Q3J5cHRvS2V5KCkKIHsKIH0KIAotYXV0byBDcnlwdG9LZXk6OmFsZ29y
aXRobSgpIGNvbnN0IC0+IEFsZ29yaXRobVZhcmlhbnQKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
S2V5QWxnb3JpdGhtPiBhbGdvcml0aG0gPSBidWlsZEFsZ29yaXRobSgpOwotICAgIHN3aXRjaCAo
YWxnb3JpdGhtLT5rZXlBbGdvcml0aG1DbGFzcygpKSB7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1D
bGFzczo6QUVTOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWVzS2V5QWxnb3JpdGhtPigqYWxn
b3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0gICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6RUM6Ci0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxFY0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlv
bmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM6Ci0gICAgICAgIHJldHVy
biBkb3duY2FzdDxIbWFjS2V5QWxnb3JpdGhtPigqYWxnb3JpdGhtKS5kaWN0aW9uYXJ5KCk7Ci0g
ICAgY2FzZSBLZXlBbGdvcml0aG1DbGFzczo6SFJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJzYUhhc2hlZEtleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNh
c2UgS2V5QWxnb3JpdGhtQ2xhc3M6OlJTQToKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJzYUtl
eUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3Jp
dGhtQ2xhc3M6OlJhdzoKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJhd0tleUFsZ29yaXRobT4o
KmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KIGF1dG8gQ3J5cHRvS2V5Ojp1c2FnZXMoKSBjb25zdCAtPiBWZWN0
b3I8Q3J5cHRvS2V5VXNhZ2U+CiB7CiAgICAgLy8gVGhlIHJlc3VsdCBpcyBvcmRlcmVkIGFscGhh
YmV0aWNhbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkocmV2aXNpb24gMjIw
OTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyOwotCiBlbnVtIGNsYXNzIENyeXB0b0tleUNsYXNz
IHsKICAgICBBRVMsCiAgICAgRUMsCkBAIC01NSw1MCArNTMsMjAgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlDbGFzcyB7CiAgICAgUmF3LAogfTsKIAotZW51bSBjbGFzcyBLZXlBbGdvcml0aG1DbGFz
cyB7Ci0gICAgQUVTLAotICAgIEVDLAotICAgIEhNQUMsCi0gICAgSFJTQSwKLSAgICBSU0EsCi0g
ICAgUmF3LAotfTsKLQotY2xhc3MgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5LZXlBbGdvcml0aG0oKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIEtleUFsZ29yaXRo
bUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgPSAwOwotCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBs
aWNpdCBLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1fbmFtZShu
YW1lKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFtZTsKLX07Ci0K
IGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+
IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKLSAgICB1c2luZyBB
bGdvcml0aG1WYXJpYW50ID0gVmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tl
eUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0s
IENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKKyAg
ICB1c2luZyBLZXlBbGdvcml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRv
QWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29y
aXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+
OwogCiAgICAgQ3J5cHRvS2V5KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUsIGJvb2wg
ZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9L
ZXkoKTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIGJvb2wgZXh0cmFjdGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2V4dHJhY3RhYmxlOyB9Ci0gICAgQWxnb3JpdGhtVmFyaWFudCBhbGdv
cml0aG0oKSBjb25zdDsKICAgICBWZWN0b3I8Q3J5cHRvS2V5VXNhZ2U+IHVzYWdlcygpIGNvbnN0
OworICAgIHZpcnR1YWwgS2V5QWxnb3JpdGhtIGFsZ29yaXRobSgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xhc3MoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0ID0g
MDsKIAogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtSWRlbnRpZmllcjsgfQogICAgIENyeXB0b0tleVVz
YWdlQml0bWFwIHVzYWdlc0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNhZ2VzOyB9CkBAIC0x
MjYsOSArOTQsNCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvCiAg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNyeXB0b0tleSYga2V5KSB7IHJl
dHVybiBrZXkua2V5Q2xhc3MoKSA9PSBXZWJDb3JlOjpLZXlDbGFzczsgfSBcCiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCiAKLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKFRvQ2xhc3NOYW1lLCBLZXlBbGdvcml0aG1DbGFzcykgXAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb0NsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpLZXlBbGdvcml0aG0mIGFsZ29yaXRobSkgeyByZXR1cm4g
YWxnb3JpdGhtLmtleUFsZ29yaXRobUNsYXNzKCkgPT0gV2ViQ29yZTo6S2V5QWxnb3JpdGhtQ2xh
c3M7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCiAjZW5kaWYgLy8gRU5BQkxF
KFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0
b0tleVJTQUdDcnlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2dj
cnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCShyZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRzLmgi
CiAjaW5jbHVkZSAiR0NyeXB0VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5cHQv
VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8cGFsL2NyeXB0by90YXNuMS9VdGlsaXRpZXMuaD4KQEAg
LTYxOSwxNSArNjIyLDI1IEBAIEV4Y2VwdGlvbk9yPFZlY3Rvcjx1aW50OF90Pj4gQ3J5cHRvS2V5
UlMKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAor
YXV0byBDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewot
ICAgIFN0cmluZyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5h
bWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKLSAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCA9IGdl
dFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0Zm9ybUtleSk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHB1
YmxpY0V4cG9uZW50ID0gZ2V0UlNBS2V5UGFyYW1ldGVyKG1fcGxhdGZvcm1LZXksICJlIik7Ci0K
LSAgICBpZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpCi0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFJzYUhhc2hlZEtleUFsZ29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwg
V1RGTW92ZShwdWJsaWNFeHBvbmVudCksIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0
b24oKS5uYW1lKG1faGFzaCkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFs
Z29yaXRobT4obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpOwor
ICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGdldFJTQU1vZHVsdXNMZW5ndGgobV9wbGF0Zm9ybUtl
eSk7CisgICAgYXV0byBwdWJsaWNFeHBvbmVudCA9IGdldFJTQUtleVBhcmFtZXRlcihtX3BsYXRm
b3JtS2V5LCAiZSIpOworCisgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3BlY2lmaWNIYXNoKSB7Cisg
ICAgICAgIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBtb2R1bHVz
TGVuZ3RoOworICAgICAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVh
dGUocHVibGljRXhwb25lbnQuZGF0YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgICAg
ICByZXN1bHQuaGFzaC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigp
Lm5hbWUobV9oYXNoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBDcnlw
dG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAg
ICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgcmVzdWx0LnB1Ymxp
Y0V4cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEoKSwgcHVi
bGljRXhwb25lbnQuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8Q3J5cHRvS2V5UlNBQ29tcG9uZW50cz4gQ3J5cHRvS2V5UlNBOjpleHBvcnREYXRhKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmNw
cAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5QUVTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DcnlwdG9BZXNLZXlBbGdvcml0aG0gQWVzS2V5QWxnb3JpdGhtOjpkaWN0
aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0OwotICAg
IHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0aGlzLT5s
ZW5ndGgoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgbGVu
Z3RoSXNWYWxpZChzaXplX3QgbGVuZ3RoKQogewogICAgIHJldHVybiAobGVuZ3RoID09IENyeXB0
b0tleUFFUzo6c19sZW5ndGgxMjgpIHx8IChsZW5ndGggPT0gQ3J5cHRvS2V5QUVTOjpzX2xlbmd0
aDE5MikgfHwgKGxlbmd0aCA9PSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMjU2KTsKQEAgLTEzMCw5
ICsxMjIsMTIgQEAgRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9LZXlBRVM6OmdldEtleQogICAg
IHJldHVybiBhZXNQYXJhbWV0ZXJzLmxlbmd0aDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEtleUFs
Z29yaXRobT4gQ3J5cHRvS2V5QUVTOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0
b0tleUFFUzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QWVzS2V5QWxnb3JpdGhtPihDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpLCBtX2tleS5zaXplKCkg
KiA4KTsKKyAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1l
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRl
bnRpZmllcigpKTsKKyAgICByZXN1bHQubGVuZ3RoID0gbV9rZXkuc2l6ZSgpICogODsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuaAkocmV2aXNpb24gMjIwOTQ5KQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5QUVTLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDI0ICszOSw2IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM7CiAKIHN0
cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBBZXNLZXlBbGdvcml0aG0gZmluYWwgOiBwdWJsaWMg
S2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBBZXNLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5n
JiBuYW1lLCBzaXplX3QgbGVuZ3RoKQotICAgICAgICA6IEtleUFsZ29yaXRobShuYW1lKQotICAg
ICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGht
Q2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0
aG1DbGFzczo6QUVTOyB9Ci0KLSAgICBDcnlwdG9BZXNLZXlBbGdvcml0aG0gZGljdGlvbmFyeSgp
IGNvbnN0OwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9
Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbGVuZ3RoOwotfTsKLQogY2xhc3MgQ3J5cHRvS2V5
QUVTIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IGludCBzX2xlbmd0aDEyOCA9IDEyODsKQEAgLTg3LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBD
cnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBrZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICBD
cnlwdG9LZXlBRVMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4X3Q+JiYg
a2V5LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFsOwor
ICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKIAogICAgIFZlY3Rvcjx1
aW50OF90PiBtX2tleTsKIH07CkBAIC05Niw2ICs3OCw0IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlBRVMsIENyeXB0b0tleUNsYXNzOjpB
RVMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShBZXNLZXlBbGdvcml0
aG0sIEtleUFsZ29yaXRobUNsYXNzOjpBRVMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NS
WVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUVDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAJ
KHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUVDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1DcnlwdG9FY0tleUFsZ29yaXRobSBFY0tleUFsZ29yaXRobTo6ZGljdGlvbmFy
eSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3Vs
dC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gdGhpcy0+bmFt
ZWRDdXJ2ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBQMjU2ID0gIlAtMjU2IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQMzg0ID0gIlAt
Mzg0IjsKIApAQCAtMjA3LDE4ICsxOTksMjEgQEAgYm9vbCBDcnlwdG9LZXlFQzo6aXNWYWxpZEVD
QWxnb3JpdGhtKENyeQogICAgIHJldHVybiBhbGdvcml0aG0gPT0gQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6RUNEU0EgfHwgYWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkVDREg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUVDOjpi
dWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0b0tleUVDOjphbGdvcml0aG0oKSBjb25z
dCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgQ3J5
cHRvRWNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKwog
ICAgIHN3aXRjaCAobV9jdXJ2ZSkgewogICAgIGNhc2UgTmFtZWRDdXJ2ZTo6UDI1NjoKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RWNLZXlBbGdvcml0aG0+KG5hbWUsIFN0cmluZyhQ
MjU2KSk7CisgICAgICAgIHJlc3VsdC5uYW1lZEN1cnZlID0gQVNDSUlMaXRlcmFsKFAyNTYpOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIE5hbWVkQ3VydmU6OlAzODQ6Ci0gICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEVjS2V5QWxnb3JpdGhtPihuYW1lLCBTdHJpbmcoUDM4NCkpOwor
ICAgICAgICByZXN1bHQubmFtZWRDdXJ2ZSA9IEFTQ0lJTGl0ZXJhbChQMzg0KTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oCShyZXZpc2lvbiAy
MjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywyNyArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVj
dCBKc29uV2ViS2V5OwogCi1jbGFzcyBFY0tleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0
aG0gewotcHVibGljOgotICAgIEVjS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBjdXJ2ZSkKLSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAgICAgICAg
LCBtX2N1cnZlKGN1cnZlKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBr
ZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNs
YXNzOjpFQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lZEN1cnZlKCkgY29uc3QgeyByZXR1
cm4gbV9jdXJ2ZTsgfQotCi0gICAgQ3J5cHRvRWNLZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZyBtX2N1cnZlOwotfTsKLQogY2xhc3MgQ3J5cHRv
S2V5RUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTIzMQorICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgRWxsaXB0aWMgQ3VydmUgUC01MjEgKGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE2OTIzMSkKICAgICBlbnVtIGNsYXNzIE5hbWVkQ3VydmUgewogICAgICAgICBQMjU2
LAogICAgICAgICBQMzg0LApAQCAtMTAxLDcgKzgzLDcgQEAgcHJpdmF0ZToKIAogICAgIENyeXB0
b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6
OkVDOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRo
bSgpIGNvbnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5h
bDsKIAogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENyeXB0b0tleVBhaXI+IHBsYXRmb3JtR2Vu
ZXJhdGVQYWlyKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIsIE5hbWVkQ3VydmUsIGJvb2wgZXh0
cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsKICAgICBzdGF0aWMgUmVmUHRyPENyeXB0
b0tleUVDPiBwbGF0Zm9ybUltcG9ydFJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBOYW1l
ZEN1cnZlLCBWZWN0b3I8dWludDhfdD4mJiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZUJpdG1hcCk7CkBAIC0xMjIsNiArMTA0LDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DUllQVE9fS0VZKENyeXB0b0tleUVDLCBDcnlwdG9LZXlDbGFzczo6
RUMpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShFY0tleUFsZ29yaXRo
bSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkVDKQotCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNw
cAkocmV2aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5SE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNyw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ3J5cHRvSG1hY0tleUFsZ29yaXRobSBIbWFjS2V5QWxnb3JpdGhtOjpk
aWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIHJlc3VsdDsK
LSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXN1bHQuaGFzaC5uYW1lID0g
dGhpcy0+aGFzaCgpOwotICAgIHJlc3VsdC5sZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgc2l6ZV90IGdldEtleUxlbmd0aEZyb21IYXNoKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCkKIHsKICAgICBzd2l0Y2ggKGhhc2gpIHsKQEAg
LTE1MCwxMCArMTQxLDEzIEBAIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvS2V5SE1BQzo6Z2V0
S2UKICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QK
K2F1dG8gQ3J5cHRvS2V5SE1BQzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SG1hY0tleUFsZ29yaXRobT4oQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKSwK
LSAgICAgICAgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUobV9oYXNo
KSwgbV9rZXkuc2l6ZSgpICogOCk7CisgICAgQ3J5cHRvSG1hY0tleUFsZ29yaXRobSByZXN1bHQ7
CisgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCku
bmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5oYXNoLm5hbWUgPSBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpOworICAgIHJlc3Vs
dC5sZW5ndGggPSBtX2tleS5zaXplKCkgKiA4OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0Ny
eXB0b0tleUhNQUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9D
cnlwdG9LZXlITUFDLmgJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMzAgKzM1LDggQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVyczsK
LQogc3RydWN0IEpzb25XZWJLZXk7CiAKLWNsYXNzIEhtYWNLZXlBbGdvcml0aG0gZmluYWwgOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBIbWFjS2V5QWxnb3JpdGhtKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoLCBzaXplX3QgbGVuZ3RoKQotICAgICAg
ICA6IEtleUFsZ29yaXRobShuYW1lKQotICAgICAgICAsIG1faGFzaChoYXNoKQotICAgICAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mg
a2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFz
czo6SE1BQzsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNoOyB9Ci0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0K
LSAgICBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV9oYXNoOwotICAgIHNpemVfdCBtX2xlbmd0aDsKLX07Ci0KIGNsYXNz
IENyeXB0b0tleUhNQUMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtl
eSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKQEAgLTg1LDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICBD
cnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwKTsK
ICAgICBDcnlwdG9LZXlITUFDKFZlY3Rvcjx1aW50OF90PiYmIGtleSwgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNv
bnN0IGZpbmFsOworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKIAog
ICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgbV9oYXNoOwogICAgIFZlY3Rvcjx1aW50OF90
PiBtX2tleTsKQEAgLTk1LDYgKzczLDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DUllQVE9fS0VZKENyeXB0b0tleUhNQUMsIENyeXB0b0tleUNsYXNzOjpITUFDKQogCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oSG1hY0tleUFsZ29yaXRobSwgS2V5
QWxnb3JpdGhtQ2xhc3M6OkhNQUMpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcAkocmV2
aXNpb24gMjIwOTQ5KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNB
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzQgKzI4LDEyIEBACiAKICNpbmNsdWRlICJDcnlw
dG9LZXlSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiSnNvbldlYktleS5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaD4KLSNpbmNs
dWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Dcnlw
dG9Sc2FLZXlBbGdvcml0aG0gUnNhS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsK
LSAgICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3VsdC5uYW1lID0gdGhp
cy0+bmFtZSgpOwotICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gdGhpcy0+bW9kdWx1c0xlbmd0
aCgpOwotICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4QXJyYXk6OmNyZWF0ZSh0aGlz
LT5wdWJsaWNFeHBvbmVudCgpLmRhdGEoKSwgdGhpcy0+cHVibGljRXhwb25lbnQoKS5zaXplKCkp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSBS
c2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25zdAotewotICAgIENyeXB0b1Jz
YUhhc2hlZEtleUFsZ29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm5hbWUgPSB0aGlzLT5uYW1l
KCk7Ci0gICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSB0aGlzLT5tb2R1bHVzTGVuZ3RoKCk7Ci0g
ICAgcmVzdWx0LnB1YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHRoaXMtPnB1Ymxp
Y0V4cG9uZW50KCkuZGF0YSgpLCB0aGlzLT5wdWJsaWNFeHBvbmVudCgpLnNpemUoKSk7Ci0gICAg
cmVzdWx0Lmhhc2gubmFtZSA9IHRoaXMtPmhhc2goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CiBSZWZQdHI8Q3J5cHRvS2V5UlNBPiBDcnlwdG9LZXlSU0E6OmltcG9ydEp3ayhDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgc3RkOjpvcHRpb25hbDxDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyPiBoYXNoLCBKc29uV2ViS2V5JiYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwg
Q3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogewogICAgIGlmIChrZXlEYXRhLmt0eSAhPSAi
UlNBIikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCShy
ZXZpc2lvbiAyMjA5NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlS
U0EuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNDUgKzUxLDYgQEAgY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIHN0cnVjdCBDcnlwdG9LZXlQYWlyOwogc3RydWN0IEpzb25XZWJLZXk7CiAK
LWNsYXNzIFJzYUtleUFsZ29yaXRobSA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgot
ICAgIFJzYUtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBtb2R1bHVzTGVu
Z3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVudCkKLSAgICAgICAgOiBLZXlBbGdv
cml0aG0obmFtZSkKLSAgICAgICAgLCBtX21vZHVsdXNMZW5ndGgobW9kdWx1c0xlbmd0aCkKLSAg
ICAgICAgLCBtX3B1YmxpY0V4cG9uZW50KFdURk1vdmUocHVibGljRXhwb25lbnQpKQotICAgIHsK
LSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29yaXRobUNsYXNzOjpSU0E7IH0KLQotICAgIHNpemVf
dCBtb2R1bHVzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bHVzTGVuZ3RoOyB9Ci0gICAg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwdWJsaWNFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHVibGljRXhwb25lbnQ7IH0KLQotICAgIENyeXB0b1JzYUtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fbW9kdWx1c0xlbmd0aDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gbV9wdWJsaWNFeHBvbmVudDsKLX07Ci0KLWNsYXNzIFJzYUhhc2hlZEtl
eUFsZ29yaXRobSBmaW5hbCA6IHB1YmxpYyBSc2FLZXlBbGdvcml0aG0gewotcHVibGljOgotICAg
IFJzYUhhc2hlZEtleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIHNpemVfdCBtb2R1bHVz
TGVuZ3RoLCBWZWN0b3I8dWludDhfdD4mJiBwdWJsaWNFeHBvbmVudCwgY29uc3QgU3RyaW5nJiBo
YXNoKQotICAgICAgICA6IFJzYUtleUFsZ29yaXRobShuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZN
b3ZlKHB1YmxpY0V4cG9uZW50KSkKLSAgICAgICAgLCBtX2hhc2goaGFzaCkKLSAgICB7Ci0gICAg
fQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6SFJTQTsgfQotCi0gICAgY29uc3QgU3RyaW5n
JiBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoOyB9Ci0KLSAgICBDcnlwdG9Sc2FIYXNoZWRL
ZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0cmluZyBt
X2hhc2g7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlSU0EgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENyeXB0b0tleVJTQT4gY3JlYXRlKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBo
YXNoLCBib29sIGhhc0hhc2gsIENyeXB0b0tleVR5cGUgdHlwZSwgUGxhdGZvcm1SU0FLZXkgcGxh
dGZvcm1LZXksIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlKQpA
QCAtMTI0LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3J5cHRvS2V5Q2xhc3M6OlJTQTsgfQogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsK
KyAgICBLZXlBbGdvcml0aG0gYWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CiAKICAgICBQbGF0Zm9y
bVJTQUtleSBtX3BsYXRmb3JtS2V5OwogCkBAIC0xMzYsOCArOTcsNCBAQCBwcml2YXRlOgogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVkoQ3J5cHRvS2V5UlNBLCBDcnlwdG9LZXlD
bGFzczo6UlNBKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0tFWV9BTEdPUklUSE0oUnNhS2V5
QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6UlNBKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0tFWV9BTEdPUklUSE0oUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFz
czo6SFJTQSkKLQogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSYXcuY3BwCShyZXZpc2lvbiAyMjA5NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSYXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwyMiArMzIsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Dcnlw
dG9LZXlBbGdvcml0aG0gUmF3S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5KCkgY29uc3QKLXsKLSAg
ICBDcnlwdG9LZXlBbGdvcml0aG0gcmVzdWx0OwotICAgIHJlc3VsdC5uYW1lID0gdGhpcy0+bmFt
ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENyeXB0b0tleVJhdzo6Q3J5cHRvS2V5UmF3
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllciwgVmVjdG9yPHVpbnQ4X3Q+JiYg
a2V5RGF0YSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2VzKQogICAgIDogQ3J5cHRvS2V5KGlk
ZW50aWZpZXIsIENyeXB0b0tleVR5cGU6OlNlY3JldCwgZmFsc2UsIHVzYWdlcykKICAgICAsIG1f
a2V5KFdURk1vdmUoa2V5RGF0YSkpCiB7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0
aG0+IENyeXB0b0tleVJhdzo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorYXV0byBDcnlwdG9LZXlS
YXc6OmFsZ29yaXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewotICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFJhd0tleUFsZ29yaXRobT4oQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKSk7CisgICAgQ3J5cHRvS2V5QWxn
b3JpdGhtIHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3LmgJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
OCArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJhd0tleUFsZ29yaXRo
bSA6IHB1YmxpYyBLZXlBbGdvcml0aG0gewotcHVibGljOgotICAgIFJhd0tleUFsZ29yaXRobShj
b25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgewot
ICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OlJhdzsgfQotICAgIAotICAgIENy
eXB0b0tleUFsZ29yaXRobSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci19OwotCiBjbGFzcyBDcnlwdG9L
ZXlSYXcgZmluYWwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PENyeXB0b0tleVJhdz4gY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgVmVjdG9yPHVpbnQ4X3Q+JiYga2V5RGF0YSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2Vz
KQpAQCAtNTcsNyArNDUsNyBAQCBwcml2YXRlOgogCiAgICAgQ3J5cHRvS2V5Q2xhc3Mga2V5Q2xh
c3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDcnlwdG9LZXlDbGFzczo6UmF3OyB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBidWlsZEFsZ29yaXRobSgpIGNvbnN0IGZpbmFs
OworICAgIEtleUFsZ29yaXRobSBhbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKIAogICAgIFZlY3Rv
cjx1aW50OF90PiBtX2tleTsKIH07CkBAIC02Niw2ICs1NCw0IEBAIHByaXZhdGU6CiAKIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlSYXcsIENyeXB0b0tleUNsYXNz
OjpSYXcpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShSYXdLZXlBbGdv
cml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpSYXcpCi0KICNlbmRpZiAvLyBFTkFCTEUoU1VCVExF
X0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJT
QU1hYy5jcHAJKHJldmlzaW9uIDIyMDk0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5UlNBTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOSBAQAogI2lu
Y2x1ZGUgIkNyeXB0b0tleVBhaXIuaCIKICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRz
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaD4KKyNpbmNsdWRlIDxo
ZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDksNiArNTIsOCBAQCBzdGF0aWMgQ0NDcnlwdG9yU3RhdHVzIGdl
dFB1YmxpY0tleUNvbXBvCiAgICAgYm9vbCBrZXlJc1B1YmxpYyA9IENDUlNBR2V0S2V5VHlwZShy
c2FLZXkpID09IGNjUlNBS2V5UHVibGljOwogICAgIENDUlNBQ3J5cHRvclJlZiBwdWJsaWNLZXkg
PSBrZXlJc1B1YmxpYyA/IHJzYUtleSA6IENDUlNBQ3J5cHRvckdldFB1YmxpY0tleUZyb21Qcml2
YXRlS2V5KHJzYUtleSk7CiAKKyAgICAoQ0NSU0FHZXRLZXlTaXplKHB1YmxpY0tleSkgKzcpIC8g
ODsKKwogICAgIG1vZHVsdXMucmVzaXplKDE2Mzg0KTsKICAgICBzaXplX3QgbW9kdWx1c0xlbmd0
aCA9IG1vZHVsdXMuc2l6ZSgpOwogICAgIHB1YmxpY0V4cG9uZW50LnJlc2l6ZSgxNjM4NCk7CkBA
IC0xNzQsMjIgKzE3OSw0MSBAQCBzaXplX3QgQ3J5cHRvS2V5UlNBOjprZXlTaXplSW5CaXRzKCkg
Y29uCiAgICAgcmV0dXJuIG1vZHVsdXMuc2l6ZSgpICogODsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PEtleUFsZ29yaXRobT4gQ3J5cHRvS2V5UlNBOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRv
IENyeXB0b0tleVJTQTo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAg
U3RyaW5nIG5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShh
bGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIC8vIEZJWE1FOiBBZGQgYSB2ZXJzaW9uIG9mIGdl
dFB1YmxpY0tleUNvbXBvbmVudHMgdGhhdCByZXR1cm5zIFVpbnQ4QXJyYXksIHJhdGhlcgorICAg
IC8vIHRoYW4gVmVjdG9yPHVpbnQ4X3Q+LCB0byBhdm9pZCBhIGNvcHkgb2YgdGhlIGRhdGEuCisK
ICAgICBWZWN0b3I8dWludDhfdD4gbW9kdWx1czsKICAgICBWZWN0b3I8dWludDhfdD4gcHVibGlj
RXhwb25lbnQ7CiAgICAgQ0NDcnlwdG9yU3RhdHVzIHN0YXR1cyA9IGdldFB1YmxpY0tleUNvbXBv
bmVudHMobV9wbGF0Zm9ybUtleSwgbW9kdWx1cywgcHVibGljRXhwb25lbnQpOwogICAgIGlmIChz
dGF0dXMpIHsKICAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZG4ndCBnZXQgUlNBIGtleSBjb21w
b25lbnRzLCBzdGF0dXMgJWQiLCBzdGF0dXMpOwogICAgICAgICBwdWJsaWNFeHBvbmVudC5jbGVh
cigpOwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdvcml0aG0+KG5h
bWUsIDAsIFdURk1vdmUocHVibGljRXhwb25lbnQpKTsKKworICAgICAgICBDcnlwdG9Sc2FLZXlB
bGdvcml0aG0gcmVzdWx0OworICAgICAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgICAg
IHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gMDsKKyAgICAgICAgcmVzdWx0LnB1YmxpY0V4cG9uZW50
ID0gVWludDhBcnJheTo6Y3JlYXRlKDApOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIHNpemVfdCBtb2R1bHVzTGVuZ3RoID0gbW9kdWx1cy5zaXplKCkgKiA4OwotICAgIGlm
IChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8UnNhSGFzaGVkS2V5QWxnb3JpdGhtPihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3Zl
KHB1YmxpY0V4cG9uZW50KSwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5h
bWUobV9oYXNoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UnNhS2V5QWxnb3JpdGht
PihuYW1lLCBtb2R1bHVzTGVuZ3RoLCBXVEZNb3ZlKHB1YmxpY0V4cG9uZW50KSk7CisKKyAgICBp
ZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpIHsKKyAgICAgICAgQ3J5cHRvUnNhSGFzaGVk
S2V5QWxnb3JpdGhtIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAg
ICAgICByZXN1bHQubW9kdWx1c0xlbmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgICAgIHJlc3Vs
dC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRh
KCksIHB1YmxpY0V4cG9uZW50LnNpemUoKSk7CisgICAgICAgIHJlc3VsdC5oYXNoLm5hbWUgPSBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBDcnlwdG9Sc2FLZXlBbGdvcml0aG0g
cmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmds
ZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICByZXN1bHQubW9kdWx1c0xl
bmd0aCA9IG1vZHVsdXNMZW5ndGg7CisgICAgcmVzdWx0LnB1YmxpY0V4cG9uZW50ID0gVWludDhB
cnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEoKSwgcHVibGljRXhwb25lbnQuc2l6ZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5UlNB
Q29tcG9uZW50cz4gQ3J5cHRvS2V5UlNBOjpleHBvcnREYXRhKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318585</attachid>
            <date>2017-08-19 08:10:41 -0700</date>
            <delta_ts>2017-08-19 10:29:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175750-20170819081040.patch</filename>
            <type>text/plain</type>
            <size>27566</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTA4LTE5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTc1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIHVubmVjZXNzYXJ5IGluZGlyZWN0aW9uIHRo
YXQgZXhpc3RlZCB0byBnZW5lcmF0ZSBhCisgICAgICAgIEtleUFsZ29yaXRobSBkaWN0aW9uYXJ5
IChvciByYXRoZXIsIG9uZSBvZiBpdHMgZGVyaXZlZCBkaWN0aW9uYXJpZXMpCisgICAgICAgIGZv
ciBhIENyeXB0b0tleS4gV2Ugd2VyZSBjYWxsaW5nIHRoZSB2aXJ0dWFsIGJ1aWxkQWxnb3JpdGht
KCksIHdoaWNoCisgICAgICAgIHJldHVybiBhIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
LCB3aGljaCB3ZSB0aGVuIGNhc3RlZCB0byB0aGUgCisgICAgICAgIGNvcnJlY3QgZGVyaXZlZCBj
bGFzcyBhbmQgY2FsbGVkIGRpY3Rpb25hcnkoKSBvbi4gVGhpcyBjYW4gbm93IGJlCisgICAgICAg
IHNpbXBsaWZpZWQgYnkgbWFraW5nIGVhY2ggQ3J5cHRvS2V5IGRlcml2ZWQgY2xhc3Mgb3ZlcnJp
ZGUgYSBmdW5jdGlvbgorICAgICAgICB0aGF0IHJldHVybnMgdGhlIEtleUFsZ29yaXRobSB2YXJp
YW50LgorCisgICAgICAgICogY3J5cHRvL0NyeXB0b0tleS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9LZXk6OmFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogY3J5cHRv
L0NyeXB0b0tleS5oOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5OjpleHRyYWN0YWJsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpLZXlBbGdvcml0aG06On5LZXlBbGdvcml0aG0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5QWxnb3JpdGhtOjpuYW1lIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleUFsZ29yaXRobTo6S2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0b0tleVJTQUdDcnlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvS2V5QUVTOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWVz
S2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0tleUFFUzo6YnVpbGRBbGdvcml0aG0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5oOgorICAgICAgICAqIGNyeXB0by9rZXlzL0Ny
eXB0b0tleUVDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUVDOjphbGdvcml0aG0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5RUM6OmJ1aWxkQWxnb3Jp
dGhtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5o
OgorICAgICAgICAoV2ViQ29yZTo6RWNLZXlBbGdvcml0aG06OkVjS2V5QWxnb3JpdGhtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVjS2V5QWxnb3JpdGhtOjpuYW1lZEN1cnZlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIbWFjS2V5QWxnb3JpdGhtOjpkaWN0aW9uYXJ5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmg6CisgICAgICAg
ICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJzYUtl
eUFsZ29yaXRobTo6ZGljdGlvbmFyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSc2FIYXNoZWRLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oOgorICAgICAgICAoV2ViQ29yZTo6UnNh
S2V5QWxnb3JpdGhtOjpSc2FLZXlBbGdvcml0aG0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UnNhS2V5QWxnb3JpdGhtOjptb2R1bHVzTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJzYUtleUFsZ29yaXRobTo6cHVibGljRXhwb25lbnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9LZXlSYXc6OmFsZ29yaXRobSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYXdLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvS2V5UmF3OjpidWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5UmF3Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
YXdLZXlBbGdvcml0aG06OlJhd0tleUFsZ29yaXRobSk6IERlbGV0ZWQuCisgICAgICAgICogY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5
UlNBOjphbGdvcml0aG0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpi
dWlsZEFsZ29yaXRobSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMTctMDgtMTggIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRm9yYmlkIHNldERyYWdJbWFnZSBhZnRl
ciBkcmFnc3RhcnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCShyZXZpc2lv
biAyMjA5NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTEgKzI5LDYgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAog
I2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiQ3J5cHRvS2V5
QUVTLmgiCi0jaW5jbHVkZSAiQ3J5cHRvS2V5RUMuaCIKLSNpbmNsdWRlICJDcnlwdG9LZXlITUFD
LmgiCi0jaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCi0jaW5jbHVkZSAiQ3J5cHRvS2V5UmF3Lmgi
CiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTUwLDI3ICs0NSw2IEBAIENyeXB0b0tleTo6fkNyeXB0b0tleSgp
CiB7CiB9CiAKLWF1dG8gQ3J5cHRvS2V5OjphbGdvcml0aG0oKSBjb25zdCAtPiBBbGdvcml0aG1W
YXJpYW50Ci17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4gYWxnb3JpdGhtID0g
YnVpbGRBbGdvcml0aG0oKTsKLSAgICBzd2l0Y2ggKGFsZ29yaXRobS0+a2V5QWxnb3JpdGhtQ2xh
c3MoKSkgewotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUzoKLSAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEFlc0tleUFsZ29yaXRobT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAg
IGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6OkVDOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8RWNL
ZXlBbGdvcml0aG0+KCphbGdvcml0aG0pLmRpY3Rpb25hcnkoKTsKLSAgICBjYXNlIEtleUFsZ29y
aXRobUNsYXNzOjpITUFDOgotICAgICAgICByZXR1cm4gZG93bmNhc3Q8SG1hY0tleUFsZ29yaXRo
bT4oKmFsZ29yaXRobSkuZGljdGlvbmFyeSgpOwotICAgIGNhc2UgS2V5QWxnb3JpdGhtQ2xhc3M6
OkhSU0E6Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSc2FIYXNoZWRLZXlBbGdvcml0aG0+KCph
bGdvcml0aG0pLmRpY3Rpb25hcnkoKTsKLSAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNzOjpSU0E6
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSc2FLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pLmRp
Y3Rpb25hcnkoKTsKLSAgICBjYXNlIEtleUFsZ29yaXRobUNsYXNzOjpSYXc6Ci0gICAgICAgIHJl
dHVybiBkb3duY2FzdDxSYXdLZXlBbGdvcml0aG0+KCphbGdvcml0aG0pLmRpY3Rpb25hcnkoKTsK
LSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBhdXRvIENy
eXB0b0tleTo6dXNhZ2VzKCkgY29uc3QgLT4gVmVjdG9yPENyeXB0b0tleVVzYWdlPgogewogICAg
IC8vIFRoZSByZXN1bHQgaXMgb3JkZXJlZCBhbHBoYWJldGljYWxseS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDIyMDk1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
cjsKLQogZW51bSBjbGFzcyBDcnlwdG9LZXlDbGFzcyB7CiAgICAgQUVTLAogICAgIEVDLApAQCAt
NTUsNTAgKzUzLDIwIEBAIGVudW0gY2xhc3MgQ3J5cHRvS2V5Q2xhc3MgewogICAgIFJhdywKIH07
CiAKLWVudW0gY2xhc3MgS2V5QWxnb3JpdGhtQ2xhc3MgewotICAgIEFFUywKLSAgICBFQywKLSAg
ICBITUFDLAotICAgIEhSU0EsCi0gICAgUlNBLAotICAgIFJhdywKLX07Ci0KLWNsYXNzIEtleUFs
Z29yaXRobSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+S2V5QWxnb3JpdGhtKCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCBLZXlBbGdvcml0aG1DbGFzcyBrZXlBbGdvcml0aG1DbGFzcygp
IGNvbnN0ID0gMDsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgS2V5QWxnb3JpdGhtKGNvbnN0IFN0
cmluZyYgbmFtZSkKLSAgICAgICAgOiBtX25hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFN0cmluZyBtX25hbWU7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVHlw
ZSA9IENyeXB0b0tleVR5cGU7Ci0gICAgdXNpbmcgQWxnb3JpdGhtVmFyaWFudCA9IFZhcmlhbnQ8
Q3J5cHRvS2V5QWxnb3JpdGhtLCBDcnlwdG9BZXNLZXlBbGdvcml0aG0sIENyeXB0b0VjS2V5QWxn
b3JpdGhtLCBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0
aG0sIENyeXB0b1JzYUtleUFsZ29yaXRobT47CisgICAgdXNpbmcgS2V5QWxnb3JpdGhtID0gVmFy
aWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNL
ZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFs
Z29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKIAogICAgIENyeXB0b0tleShDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyLCBUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2Fn
ZUJpdG1hcCk7CiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5KCk7CiAKICAgICBUeXBlIHR5cGUoKSBj
b25zdDsKICAgICBib29sIGV4dHJhY3RhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYWN0YWJs
ZTsgfQotICAgIEFsZ29yaXRobVZhcmlhbnQgYWxnb3JpdGhtKCkgY29uc3Q7CiAgICAgVmVjdG9y
PENyeXB0b0tleVVzYWdlPiB1c2FnZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtleUFsZ29yaXRo
bSBhbGdvcml0aG0oKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIENyeXB0b0tleUNsYXNzIGtl
eUNsYXNzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29y
aXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCA9IDA7CiAKICAgICBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2FsZ29yaXRo
bUlkZW50aWZpZXI7IH0KICAgICBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZXNCaXRtYXAoKSBj
b25zdCB7IHJldHVybiBtX3VzYWdlczsgfQpAQCAtMTI2LDkgKzk0LDQgQEAgU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUbwogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpDcnlwdG9LZXkmIGtleSkgeyByZXR1cm4ga2V5LmtleUNsYXNzKCkgPT0gV2Vi
Q29yZTo6S2V5Q2xhc3M7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi0jZGVm
aW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfS0VZX0FMR09SSVRITShUb0NsYXNzTmFtZSwgS2V5
QWxnb3JpdGhtQ2xhc3MpIFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
VG9DbGFzc05hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6S2V5
QWxnb3JpdGhtJiBhbGdvcml0aG0pIHsgcmV0dXJuIGFsZ29yaXRobS5rZXlBbGdvcml0aG1DbGFz
cygpID09IFdlYkNvcmU6OktleUFsZ29yaXRobUNsYXNzOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKLQogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9DcnlwdG9LZXlSU0FHQ3J5cHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQvQ3J5cHRvS2V5UlNBR0NyeXB0LmNw
cAkocmV2aXNpb24gMjIwOTUyKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2djcnlwdC9Dcnlw
dG9LZXlSU0FHQ3J5cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw5IEBACiAjaW5j
bHVkZSAiQ3J5cHRvS2V5UlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkdDcnlwdFV0aWxpdGll
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg+CisjaW5jbHVkZSA8
aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5o
PgogI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHBh
bC9jcnlwdG8vdGFzbjEvVXRpbGl0aWVzLmg+CkBAIC02MTksMTUgKzYyMiwyNSBAQCBFeGNlcHRp
b25PcjxWZWN0b3I8dWludDhfdD4+IENyeXB0b0tleVJTCiAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0LnZhbHVlKCkpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9L
ZXlSU0E6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKK2F1dG8gQ3J5cHRvS2V5UlNBOjphbGdvcml0
aG0oKSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICBTdHJpbmcgbmFtZSA9IENyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7
Ci0gICAgc2l6ZV90IG1vZHVsdXNMZW5ndGggPSBnZXRSU0FNb2R1bHVzTGVuZ3RoKG1fcGxhdGZv
cm1LZXkpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudCA9IGdldFJTQUtleVBh
cmFtZXRlcihtX3BsYXRmb3JtS2V5LCAiZSIpOwotCi0gICAgaWYgKG1fcmVzdHJpY3RlZFRvU3Bl
Y2lmaWNIYXNoKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FIYXNoZWRLZXlB
bGdvcml0aG0+KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpLCBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gpKTsKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdvcml0aG0+KG5hbWUsIG1vZHVsdXNMZW5n
dGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKTsKKyAgICBhdXRvIG1vZHVsdXNMZW5ndGggPSBn
ZXRSU0FNb2R1bHVzTGVuZ3RoKG1fcGxhdGZvcm1LZXkpOworICAgIGF1dG8gcHVibGljRXhwb25l
bnQgPSBnZXRSU0FLZXlQYXJhbWV0ZXIobV9wbGF0Zm9ybUtleSwgImUiKTsKKworICAgIGlmICht
X3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgeworICAgICAgICBDcnlwdG9Sc2FIYXNoZWRLZXlB
bGdvcml0aG0gcmVzdWx0OworICAgICAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgICAg
IHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gbW9kdWx1c0xlbmd0aDsKKyAgICAgICAgcmVzdWx0LnB1
YmxpY0V4cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEoKSwg
cHVibGljRXhwb25lbnQuc2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0Lmhhc2gubmFtZSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKG1faGFzaCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtIHJlc3VsdDsK
KyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5u
YW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmVzdWx0Lm1vZHVsdXNMZW5ndGggPSBt
b2R1bHVzTGVuZ3RoOworICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9IFVpbnQ4QXJyYXk6OmNy
ZWF0ZShwdWJsaWNFeHBvbmVudC5kYXRhKCksIHB1YmxpY0V4cG9uZW50LnNpemUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleVJTQUNvbXBvbmVu
dHM+IENyeXB0b0tleVJTQTo6ZXhwb3J0RGF0YSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlBRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHJldmlzaW9uIDIyMDk1MikKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUFFUy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDE0ICszNyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvQWVzS2V5
QWxnb3JpdGhtIEFlc0tleUFsZ29yaXRobTo6ZGljdGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5
cHRvQWVzS2V5QWxnb3JpdGhtIHJlc3VsdDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUo
KTsKLSAgICByZXN1bHQubGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGxlbmd0aElzVmFsaWQoc2l6ZV90IGxlbmd0aCkK
IHsKICAgICByZXR1cm4gKGxlbmd0aCA9PSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTI4KSB8fCAo
bGVuZ3RoID09IENyeXB0b0tleUFFUzo6c19sZW5ndGgxOTIpIHx8IChsZW5ndGggPT0gQ3J5cHRv
S2V5QUVTOjpzX2xlbmd0aDI1Nik7CkBAIC0xMzAsOSArMTIyLDEyIEBAIEV4Y2VwdGlvbk9yPHNp
emVfdD4gQ3J5cHRvS2V5QUVTOjpnZXRLZXkKICAgICByZXR1cm4gYWVzUGFyYW1ldGVycy5sZW5n
dGg7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+IENyeXB0b0tleUFFUzo6YnVp
bGRBbGdvcml0aG0oKSBjb25zdAorYXV0byBDcnlwdG9LZXlBRVM6OmFsZ29yaXRobSgpIGNvbnN0
IC0+IEtleUFsZ29yaXRobQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFlc0tleUFs
Z29yaXRobT4oQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3Jp
dGhtSWRlbnRpZmllcigpKSwgbV9rZXkuc2l6ZSgpICogOCk7CisgICAgQ3J5cHRvQWVzS2V5QWxn
b3JpdGhtIHJlc3VsdDsKKyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgcmVzdWx0Lmxl
bmd0aCA9IG1fa2V5LnNpemUoKSAqIDg7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5QUVTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRv
S2V5QUVTLmgJKHJldmlzaW9uIDIyMDk1MikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlz
L0NyeXB0b0tleUFFUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNCArMzksNiBAQCBjbGFzcyBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzOwogCiBzdHJ1Y3QgSnNvbldlYktleTsKIAotY2xhc3Mg
QWVzS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGljIEtleUFsZ29yaXRobSB7Ci1wdWJsaWM6Ci0g
ICAgQWVzS2V5QWxnb3JpdGhtKGNvbnN0IFN0cmluZyYgbmFtZSwgc2l6ZV90IGxlbmd0aCkKLSAg
ICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0g
ICAgewotICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkFFUzsgfQotCi0gICAgQ3J5
cHRvQWVzS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQotICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIHNpemVfdCBt
X2xlbmd0aDsKLX07Ci0KIGNsYXNzIENyeXB0b0tleUFFUyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9L
ZXkgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19sZW5ndGgxMjggPSAxMjg7CkBA
IC04Nyw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAgICAgQ3J5cHRvS2V5QUVTKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIsIFZlY3Rvcjx1aW50OF90PiYmIGtleSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5
cHRvS2V5VXNhZ2VCaXRtYXApOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRobT4g
YnVpbGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0aG0gYWxnb3JpdGht
KCkgY29uc3QgZmluYWw7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CiB9OwpAQCAtOTYs
NiArNzgsNCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19LRVko
Q3J5cHRvS2V5QUVTLCBDcnlwdG9LZXlDbGFzczo6QUVTKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0tFWV9BTEdPUklUSE0oQWVzS2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6QUVT
KQotCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuY3BwCShyZXZpc2lvbiAyMjA5NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlFQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDE0ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvRWNLZXlBbGdv
cml0aG0gRWNLZXlBbGdvcml0aG06OmRpY3Rpb25hcnkoKSBjb25zdAotewotICAgIENyeXB0b0Vj
S2V5QWxnb3JpdGhtIHJlc3VsdDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAg
ICByZXN1bHQubmFtZWRDdXJ2ZSA9IHRoaXMtPm5hbWVkQ3VydmUoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgUDI1NiA9ICJQLTI1NiI7CiBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgUDM4NCA9ICJQLTM4NCI7CiAKQEAgLTIwNywxOCArMTk5LDIx
IEBAIGJvb2wgQ3J5cHRvS2V5RUM6OmlzVmFsaWRFQ0FsZ29yaXRobShDcnkKICAgICByZXR1cm4g
YWxnb3JpdGhtID09IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkVDRFNBIHx8IGFsZ29yaXRo
bSA9PSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RIOwogfQogCi1zdGQ6OnVuaXF1ZV9w
dHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlFQzo6YnVpbGRBbGdvcml0aG0oKSBjb25zdAorYXV0
byBDcnlwdG9LZXlFQzo6YWxnb3JpdGhtKCkgY29uc3QgLT4gS2V5QWxnb3JpdGhtCiB7Ci0gICAg
U3RyaW5nIG5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShh
bGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIENyeXB0b0VjS2V5QWxnb3JpdGhtIHJlc3VsdDsK
KyAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5u
YW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisKICAgICBzd2l0Y2ggKG1fY3VydmUpIHsKICAg
ICBjYXNlIE5hbWVkQ3VydmU6OlAyNTY6Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEVjS2V5QWxnb3JpdGhtPihuYW1lLCBTdHJpbmcoUDI1NikpOworICAgICAgICByZXN1bHQubmFt
ZWRDdXJ2ZSA9IEFTQ0lJTGl0ZXJhbChQMjU2KTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBO
YW1lZEN1cnZlOjpQMzg0OgotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxFY0tleUFs
Z29yaXRobT4obmFtZSwgU3RyaW5nKFAzODQpKTsKKyAgICAgICAgcmVzdWx0Lm5hbWVkQ3VydmUg
PSBBU0NJSUxpdGVyYWwoUDM4NCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9rZXlzL0NyeXB0b0tleUVDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5RUMuaAkocmV2aXNpb24gMjIwOTUyKQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5RUMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMjcgKzQ3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgSnNvbldlYktleTsKIAotY2xhc3MgRWNL
ZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBFY0tleUFs
Z29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgY3VydmUpCi0gICAgICAg
IDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgICAgICwgbV9jdXJ2ZShjdXJ2ZSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgS2V5QWxnb3JpdGhtQ2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBLZXlBbGdvcml0aG1DbGFzczo6RUM7IH0KLQotICAgIGNvbnN0IFN0
cmluZyYgbmFtZWRDdXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VydmU7IH0KLQotICAgIENyeXB0
b0VjS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHJp
bmcgbV9jdXJ2ZTsKLX07Ci0KIGNsYXNzIENyeXB0b0tleUVDIGZpbmFsIDogcHVibGljIENyeXB0
b0tleSB7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjkyMzEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEVsbGlw
dGljIEN1cnZlIFAtNTIxIChodHRwczovL3dlYmtpdC5vcmcvYi8xNjkyMzEpCiAgICAgZW51bSBj
bGFzcyBOYW1lZEN1cnZlIHsKICAgICAgICAgUDI1NiwKICAgICAgICAgUDM4NCwKQEAgLTEwMSw3
ICs4Myw3IEBAIHByaXZhdGU6CiAKICAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIENyeXB0b0tleUNsYXNzOjpFQzsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEtleUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlB
bGdvcml0aG0gYWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CiAKICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxDcnlwdG9LZXlQYWlyPiBwbGF0Zm9ybUdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyLCBOYW1lZEN1cnZlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJp
dG1hcCk7CiAgICAgc3RhdGljIFJlZlB0cjxDcnlwdG9LZXlFQz4gcGxhdGZvcm1JbXBvcnRSYXco
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwgTmFtZWRDdXJ2ZSwgVmVjdG9yPHVpbnQ4X3Q+JiYg
a2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApOwpAQCAtMTIy
LDYgKzEwNCw0IEBAIHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tF
WShDcnlwdG9LZXlFQywgQ3J5cHRvS2V5Q2xhc3M6OkVDKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0tFWV9BTEdPUklUSE0oRWNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpFQykK
LQogI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDIyMDk1MikKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxNSArMzcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNyeXB0b0htYWNL
ZXlBbGdvcml0aG0gSG1hY0tleUFsZ29yaXRobTo6ZGljdGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAg
Q3J5cHRvSG1hY0tleUFsZ29yaXRobSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm5hbWUgPSB0aGlzLT5u
YW1lKCk7Ci0gICAgcmVzdWx0Lmhhc2gubmFtZSA9IHRoaXMtPmhhc2goKTsKLSAgICByZXN1bHQu
bGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGlj
IHNpemVfdCBnZXRLZXlMZW5ndGhGcm9tSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhh
c2gpCiB7CiAgICAgc3dpdGNoIChoYXNoKSB7CkBAIC0xNTAsMTAgKzE0MSwxMyBAQCBFeGNlcHRp
b25PcjxzaXplX3Q+IENyeXB0b0tleUhNQUM6OmdldEtlCiAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFR5cGVFcnJvciB9OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9L
ZXlITUFDOjpidWlsZEFsZ29yaXRobSgpIGNvbnN0CithdXRvIENyeXB0b0tleUhNQUM6OmFsZ29y
aXRobSgpIGNvbnN0IC0+IEtleUFsZ29yaXRobQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEhtYWNLZXlBbGdvcml0aG0+KENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSksCi0gICAgICAgIENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKG1faGFzaCksIG1fa2V5LnNpemUoKSAqIDgpOworICAg
IENyeXB0b0htYWNLZXlBbGdvcml0aG0gcmVzdWx0OworICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigp
KTsKKyAgICByZXN1bHQuaGFzaC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmds
ZXRvbigpLm5hbWUobV9oYXNoKTsKKyAgICByZXN1bHQubGVuZ3RoID0gbV9rZXkuc2l6ZSgpICog
ODsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCShyZXZpc2lvbiAy
MjA5NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDMwICszNSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM7Ci0KIHN0cnVjdCBKc29uV2ViS2V5OwogCi1j
bGFzcyBIbWFjS2V5QWxnb3JpdGhtIGZpbmFsIDogcHVibGljIEtleUFsZ29yaXRobSB7Ci1wdWJs
aWM6Ci0gICAgSG1hY0tleUFsZ29yaXRobShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgaGFzaCwgc2l6ZV90IGxlbmd0aCkKLSAgICAgICAgOiBLZXlBbGdvcml0aG0obmFtZSkKLSAg
ICAgICAgLCBtX2hhc2goaGFzaCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgewot
ICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNzIGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xhc3M6OkhNQUM7IH0KLQotICAgIGNvbnN0IFN0
cmluZyYgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQotICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotCi0gICAgQ3J5cHRvSG1hY0tleUFsZ29yaXRo
bSBkaWN0aW9uYXJ5KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1faGFzaDsKLSAg
ICBzaXplX3QgbV9sZW5ndGg7Ci19OwotCiBjbGFzcyBDcnlwdG9LZXlITUFDIGZpbmFsIDogcHVi
bGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlITUFDPiBj
cmVhdGUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaGFzaCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXAgdXNhZ2UpCkBA
IC04NSw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgQ3J5cHRvS2V5SE1BQyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAgICAgQ3J5cHRvS2V5SE1BQyhWZWN0b3I8
dWludDhfdD4mJiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtl
eUFsZ29yaXRobT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0
aG0gYWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CiAKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIG1faGFzaDsKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CkBAIC05NSw2ICs3Myw0IEBA
IHByaXZhdGU6CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1JZUFRPX0tFWShDcnlwdG9LZXlI
TUFDLCBDcnlwdG9LZXlDbGFzczo6SE1BQykKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlf
QUxHT1JJVEhNKEhtYWNLZXlBbGdvcml0aG0sIEtleUFsZ29yaXRobUNsYXNzOjpITUFDKQotCiAj
ZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8va2V5cy9DcnlwdG9LZXlSU0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHJldmlzaW9uIDIyMDk1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDM0ICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBQ29tcG9uZW50cy5oIgogI2lu
Y2x1ZGUgIkpzb25XZWJLZXkuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvUnNhS2V5QWxnb3JpdGhtIFJzYUtleUFs
Z29yaXRobTo6ZGljdGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvUnNhS2V5QWxnb3JpdGht
IHJlc3VsdDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXN1bHQubW9k
dWx1c0xlbmd0aCA9IHRoaXMtPm1vZHVsdXNMZW5ndGgoKTsKLSAgICByZXN1bHQucHVibGljRXhw
b25lbnQgPSBVaW50OEFycmF5OjpjcmVhdGUodGhpcy0+cHVibGljRXhwb25lbnQoKS5kYXRhKCks
IHRoaXMtPnB1YmxpY0V4cG9uZW50KCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1DcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0gUnNhSGFzaGVkS2V5QWxnb3JpdGhtOjpkaWN0
aW9uYXJ5KCkgY29uc3QKLXsKLSAgICBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0gcmVzdWx0
OwotICAgIHJlc3VsdC5uYW1lID0gdGhpcy0+bmFtZSgpOwotICAgIHJlc3VsdC5tb2R1bHVzTGVu
Z3RoID0gdGhpcy0+bW9kdWx1c0xlbmd0aCgpOwotICAgIHJlc3VsdC5wdWJsaWNFeHBvbmVudCA9
IFVpbnQ4QXJyYXk6OmNyZWF0ZSh0aGlzLT5wdWJsaWNFeHBvbmVudCgpLmRhdGEoKSwgdGhpcy0+
cHVibGljRXhwb25lbnQoKS5zaXplKCkpOwotICAgIHJlc3VsdC5oYXNoLm5hbWUgPSB0aGlzLT5o
YXNoKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogUmVmUHRyPENyeXB0b0tleVJTQT4gQ3J5
cHRvS2V5UlNBOjppbXBvcnRKd2soQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IHN0ZDo6b3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcj4gaGFzaCwgSnNvbldlYktl
eSYmIGtleURhdGEsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdl
cykKIHsKICAgICBpZiAoa2V5RGF0YS5rdHkgIT0gIlJTQSIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlSU0EuaAkocmV2aXNpb24gMjIwOTUyKQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDQ1ICs1MSw2IEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBzdHJ1Y3QgQ3J5cHRv
S2V5UGFpcjsKIHN0cnVjdCBKc29uV2ViS2V5OwogCi1jbGFzcyBSc2FLZXlBbGdvcml0aG0gOiBw
dWJsaWMgS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBSc2FLZXlBbGdvcml0aG0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYgcHVi
bGljRXhwb25lbnQpCi0gICAgICAgIDogS2V5QWxnb3JpdGhtKG5hbWUpCi0gICAgICAgICwgbV9t
b2R1bHVzTGVuZ3RoKG1vZHVsdXNMZW5ndGgpCi0gICAgICAgICwgbV9wdWJsaWNFeHBvbmVudChX
VEZNb3ZlKHB1YmxpY0V4cG9uZW50KSkKLSAgICB7Ci0gICAgfQotCi0gICAgS2V5QWxnb3JpdGht
Q2xhc3Mga2V5QWxnb3JpdGhtQ2xhc3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBLZXlBbGdv
cml0aG1DbGFzczo6UlNBOyB9Ci0KLSAgICBzaXplX3QgbW9kdWx1c0xlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kdWx1c0xlbmd0aDsgfQotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcHVi
bGljRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3B1YmxpY0V4cG9uZW50OyB9Ci0KLSAgICBD
cnlwdG9Sc2FLZXlBbGdvcml0aG0gZGljdGlvbmFyeSgpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IHNpemVfdCBtX21vZHVsdXNMZW5ndGg7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcHVibGljRXhw
b25lbnQ7Ci19OwotCi1jbGFzcyBSc2FIYXNoZWRLZXlBbGdvcml0aG0gZmluYWwgOiBwdWJsaWMg
UnNhS2V5QWxnb3JpdGhtIHsKLXB1YmxpYzoKLSAgICBSc2FIYXNoZWRLZXlBbGdvcml0aG0oY29u
c3QgU3RyaW5nJiBuYW1lLCBzaXplX3QgbW9kdWx1c0xlbmd0aCwgVmVjdG9yPHVpbnQ4X3Q+JiYg
cHVibGljRXhwb25lbnQsIGNvbnN0IFN0cmluZyYgaGFzaCkKLSAgICAgICAgOiBSc2FLZXlBbGdv
cml0aG0obmFtZSwgbW9kdWx1c0xlbmd0aCwgV1RGTW92ZShwdWJsaWNFeHBvbmVudCkpCi0gICAg
ICAgICwgbV9oYXNoKGhhc2gpCi0gICAgewotICAgIH0KLQotICAgIEtleUFsZ29yaXRobUNsYXNz
IGtleUFsZ29yaXRobUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gS2V5QWxnb3JpdGhtQ2xh
c3M6OkhSU0E7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzaDsgfQotCi0gICAgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtIGRpY3Rpb25hcnkoKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9oYXNoOwotfTsKLQogY2xhc3MgQ3J5cHRv
S2V5UlNBIGZpbmFsIDogcHVibGljIENyeXB0b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxDcnlwdG9LZXlSU0E+IGNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZp
ZXIsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBoYXNIYXNoLCBDcnlwdG9L
ZXlUeXBlIHR5cGUsIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5LCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZUJpdG1hcCB1c2FnZSkKQEAgLTEyNCw3ICs4NSw3IEBAIHByaXZhdGU6
CiAKICAgICBDcnlwdG9LZXlDbGFzcyBrZXlDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENy
eXB0b0tleUNsYXNzOjpSU0E7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlBbGdvcml0aG0+
IGJ1aWxkQWxnb3JpdGhtKCkgY29uc3QgZmluYWw7CisgICAgS2V5QWxnb3JpdGhtIGFsZ29yaXRo
bSgpIGNvbnN0IGZpbmFsOwogCiAgICAgUGxhdGZvcm1SU0FLZXkgbV9wbGF0Zm9ybUtleTsKIApA
QCAtMTM2LDggKzk3LDQgQEAgcHJpdmF0ZToKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DUllQ
VE9fS0VZKENyeXB0b0tleVJTQSwgQ3J5cHRvS2V5Q2xhc3M6OlJTQSkKIAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xh
c3M6OlJTQSkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19LRVlfQUxHT1JJVEhNKFJzYUhhc2hl
ZEtleUFsZ29yaXRobSwgS2V5QWxnb3JpdGhtQ2xhc3M6OkhSU0EpCi0KICNlbmRpZiAvLyBFTkFC
TEUoU1VCVExFX0NSWVBUTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleVJhdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5
cHRvS2V5UmF3LmNwcAkocmV2aXNpb24gMjIwOTUyKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5UmF3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjIgKzMyLDE3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvS2V5QWxnb3JpdGhtIFJhd0tleUFsZ29y
aXRobTo6ZGljdGlvbmFyeSgpIGNvbnN0Ci17Ci0gICAgQ3J5cHRvS2V5QWxnb3JpdGhtIHJlc3Vs
dDsKLSAgICByZXN1bHQubmFtZSA9IHRoaXMtPm5hbWUoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiBDcnlwdG9LZXlSYXc6OkNyeXB0b0tleVJhdyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGlkZW50aWZpZXIsIFZlY3Rvcjx1aW50OF90PiYmIGtleURhdGEsIENyeXB0b0tleVVzYWdlQml0
bWFwIHVzYWdlcykKICAgICA6IENyeXB0b0tleShpZGVudGlmaWVyLCBDcnlwdG9LZXlUeXBlOjpT
ZWNyZXQsIGZhbHNlLCB1c2FnZXMpCiAgICAgLCBtX2tleShXVEZNb3ZlKGtleURhdGEpKQogewog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3JpdGhtPiBDcnlwdG9LZXlSYXc6OmJ1aWxkQWxn
b3JpdGhtKCkgY29uc3QKK2F1dG8gQ3J5cHRvS2V5UmF3OjphbGdvcml0aG0oKSBjb25zdCAtPiBL
ZXlBbGdvcml0aG0KIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSYXdLZXlBbGdvcml0
aG0+KENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlk
ZW50aWZpZXIoKSkpOworICAgIENyeXB0b0tleUFsZ29yaXRobSByZXN1bHQ7CisgICAgcmVzdWx0
Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShhbGdvcml0
aG1JZGVudGlmaWVyKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJhdy5o
CShyZXZpc2lvbiAyMjA5NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlSYXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBSYXdLZXlBbGdvcml0aG0gOiBwdWJsaWMgS2V5QWxnb3JpdGhtIHsK
LXB1YmxpYzoKLSAgICBSYXdLZXlBbGdvcml0aG0oY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAg
ICA6IEtleUFsZ29yaXRobShuYW1lKQotICAgIHsKLSAgICB9Ci0KLSAgICBLZXlBbGdvcml0aG1D
bGFzcyBrZXlBbGdvcml0aG1DbGFzcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEtleUFsZ29y
aXRobUNsYXNzOjpSYXc7IH0KLSAgICAKLSAgICBDcnlwdG9LZXlBbGdvcml0aG0gZGljdGlvbmFy
eSgpIGNvbnN0OwotfTsKLQogY2xhc3MgQ3J5cHRvS2V5UmF3IGZpbmFsIDogcHVibGljIENyeXB0
b0tleSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDcnlwdG9LZXlSYXc+IGNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIsIFZlY3Rvcjx1aW50OF90PiYmIGtleURh
dGEsIENyeXB0b0tleVVzYWdlQml0bWFwIHVzYWdlcykKQEAgLTU3LDcgKzQ1LDcgQEAgcHJpdmF0
ZToKIAogICAgIENyeXB0b0tleUNsYXNzIGtleUNsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Q3J5cHRvS2V5Q2xhc3M6OlJhdzsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEtleUFsZ29yaXRo
bT4gYnVpbGRBbGdvcml0aG0oKSBjb25zdCBmaW5hbDsKKyAgICBLZXlBbGdvcml0aG0gYWxnb3Jp
dGhtKCkgY29uc3QgZmluYWw7CiAKICAgICBWZWN0b3I8dWludDhfdD4gbV9rZXk7CiB9OwpAQCAt
NjYsNiArNTQsNCBAQCBwcml2YXRlOgogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NSWVBUT19L
RVkoQ3J5cHRvS2V5UmF3LCBDcnlwdG9LZXlDbGFzczo6UmF3KQogCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0tFWV9BTEdPUklUSE0oUmF3S2V5QWxnb3JpdGhtLCBLZXlBbGdvcml0aG1DbGFzczo6
UmF3KQotCiAjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCShyZXZpc2lvbiAyMjA5NTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDkgQEAKICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvS2V5UlNBQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3NCwyMiAr
MTc3LDQxIEBAIHNpemVfdCBDcnlwdG9LZXlSU0E6OmtleVNpemVJbkJpdHMoKSBjb24KICAgICBy
ZXR1cm4gbW9kdWx1cy5zaXplKCkgKiA4OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8S2V5QWxnb3Jp
dGhtPiBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtKCkgY29uc3QKK2F1dG8gQ3J5cHRvS2V5
UlNBOjphbGdvcml0aG0oKSBjb25zdCAtPiBLZXlBbGdvcml0aG0KIHsKLSAgICBTdHJpbmcgbmFt
ZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlk
ZW50aWZpZXIoKSk7CisgICAgLy8gRklYTUU6IEFkZCBhIHZlcnNpb24gb2YgZ2V0UHVibGljS2V5
Q29tcG9uZW50cyB0aGF0IHJldHVybnMgVWludDhBcnJheSwgcmF0aGVyCisgICAgLy8gdGhhbiBW
ZWN0b3I8dWludDhfdD4sIHRvIGF2b2lkIGEgY29weSBvZiB0aGUgZGF0YS4KKwogICAgIFZlY3Rv
cjx1aW50OF90PiBtb2R1bHVzOwogICAgIFZlY3Rvcjx1aW50OF90PiBwdWJsaWNFeHBvbmVudDsK
ICAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gZ2V0UHVibGljS2V5Q29tcG9uZW50cyhtX3Bs
YXRmb3JtS2V5LCBtb2R1bHVzLCBwdWJsaWNFeHBvbmVudCk7CiAgICAgaWYgKHN0YXR1cykgewog
ICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkbid0IGdldCBSU0Ega2V5IGNvbXBvbmVudHMsIHN0
YXR1cyAlZCIsIHN0YXR1cyk7CiAgICAgICAgIHB1YmxpY0V4cG9uZW50LmNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFJzYUtleUFsZ29yaXRobT4obmFtZSwgMCwgV1RG
TW92ZShwdWJsaWNFeHBvbmVudCkpOworCisgICAgICAgIENyeXB0b1JzYUtleUFsZ29yaXRobSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5uYW1lID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWUoYWxnb3JpdGhtSWRlbnRpZmllcigpKTsKKyAgICAgICAgcmVzdWx0Lm1v
ZHVsdXNMZW5ndGggPSAwOworICAgICAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFy
cmF5OjpjcmVhdGUoMCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgc2l6
ZV90IG1vZHVsdXNMZW5ndGggPSBtb2R1bHVzLnNpemUoKSAqIDg7Ci0gICAgaWYgKG1fcmVzdHJp
Y3RlZFRvU3BlY2lmaWNIYXNoKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FI
YXNoZWRLZXlBbGdvcml0aG0+KG5hbWUsIG1vZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhw
b25lbnQpLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFtZShtX2hhc2gp
KTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSc2FLZXlBbGdvcml0aG0+KG5hbWUsIG1v
ZHVsdXNMZW5ndGgsIFdURk1vdmUocHVibGljRXhwb25lbnQpKTsKKworICAgIGlmIChtX3Jlc3Ry
aWN0ZWRUb1NwZWNpZmljSGFzaCkgeworICAgICAgICBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0
aG0gcmVzdWx0OworICAgICAgICByZXN1bHQubmFtZSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5uYW1lKGFsZ29yaXRobUlkZW50aWZpZXIoKSk7CisgICAgICAgIHJlc3Vs
dC5tb2R1bHVzTGVuZ3RoID0gbW9kdWx1c0xlbmd0aDsKKyAgICAgICAgcmVzdWx0LnB1YmxpY0V4
cG9uZW50ID0gVWludDhBcnJheTo6Y3JlYXRlKHB1YmxpY0V4cG9uZW50LmRhdGEoKSwgcHVibGlj
RXhwb25lbnQuc2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0Lmhhc2gubmFtZSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lKG1faGFzaCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIENyeXB0b1JzYUtleUFsZ29yaXRobSByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm5hbWUgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkubmFt
ZShhbGdvcml0aG1JZGVudGlmaWVyKCkpOworICAgIHJlc3VsdC5tb2R1bHVzTGVuZ3RoID0gbW9k
dWx1c0xlbmd0aDsKKyAgICByZXN1bHQucHVibGljRXhwb25lbnQgPSBVaW50OEFycmF5OjpjcmVh
dGUocHVibGljRXhwb25lbnQuZGF0YSgpLCBwdWJsaWNFeHBvbmVudC5zaXplKCkpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlSU0FDb21wb25lbnRz
PiBDcnlwdG9LZXlSU0E6OmV4cG9ydERhdGEoKSBjb25zdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>