<?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>73477</bug_id>
          
          <creation_ts>2011-11-30 11:55:05 -0800</creation_ts>
          <short_desc>Prepare to deploy pass and peek types in the HashMap class</short_desc>
          <delta_ts>2011-12-02 08:50:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72474</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511981</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-30 11:55:05 -0800</bug_when>
    <thetext>Prepare to deploy pass and peek types in the HashMap class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511988</commentid>
    <comment_count>1</comment_count>
      <attachid>117244</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-30 12:07:48 -0800</bug_when>
    <thetext>Created attachment 117244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511996</commentid>
    <comment_count>2</comment_count>
      <attachid>117244</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-30 12:13:36 -0800</bug_when>
    <thetext>Comment on attachment 117244
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512012</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-30 12:35:52 -0800</bug_when>
    <thetext>Looks like there is some kind of compilation problem with gcc 4.2 so I can’t land this yet.

Anders, any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513432</commentid>
    <comment_count>4</comment_count>
      <attachid>117552</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 20:22:26 -0800</bug_when>
    <thetext>Created attachment 117552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513433</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 20:25:32 -0800</bug_when>
    <thetext>Attachment 117552 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/HashSet.h:29:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513797</commentid>
    <comment_count>6</comment_count>
      <attachid>117552</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-12-02 08:38:05 -0800</bug_when>
    <thetext>Comment on attachment 117552
Patch

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

&gt; Source/JavaScriptCore/wtf/HashSet.h:73
&gt; +        // FIXME: We should reverse the order of the template arguments so that callers
&gt; +        // can just pass the translator let the compiler deduce T.

I think you&apos;re missing a word in there.

&gt; Source/JavaScriptCore/wtf/HashSet.h:88
&gt; +        // FIXME: We should reverse the order of the template arguments so that callers
&gt; +        // can just pass the translator let the compiler deduce T.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513806</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-02 08:50:38 -0800</bug_when>
    <thetext>Committed r101806: &lt;http://trac.webkit.org/changeset/101806&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117244</attachid>
            <date>2011-11-30 12:07:48 -0800</date>
            <delta_ts>2011-12-01 20:22:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73477-20111130120747.patch</filename>
            <type>text/plain</type>
            <size>26897</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNTQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDExLTExLTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBQ
cmVwYXJlIHRvIGRlcGxveSBwYXNzIGFuZCBwZWVrIHR5cGVzIGluIHRoZSBIYXNoTWFwIGNsYXNz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ3Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBwcml2YXRlIHR5cGVkZWZzIGluc2lkZSB0aGUgSGFzaE1hcCBjbGFzcywKKyAgICAg
ICAgYW5kIHVzZXMgdGhlbSBhcyBhcHByb3ByaWF0ZS4gQSBmdXR1cmUgcGF0Y2ggd2lsbCBhY3R1
YWxseQorICAgICAgICB0aWUgdGhvc2UgdHlwZWRlZnMgdG8gaGFzaCB0cmFpdHMsIHdoaWNoIHdp
bGwgYWxsb3cgdXMgdG8KKyAgICAgICAgbWFrZSBIYXNoTWFwIHdvcmsgd2l0aCBPd25QdHIgbWFw
cGVkIHZhbHVlcyBhbmQgdG8gb3B0aW1pemUKKyAgICAgICAgaG93IEhhc2hNYXAgd29ya3Mgd2l0
aCBSZWZQdHIgbWFwcGVkIHZhbHVlcy4KKworICAgICAgICBBbHNvIGNoYW5nZWQgdGhlIGhhc2gg
bWFwIHRyYW5zbGF0b3IgYW5kIHRyYW5zbGF0b3IgYWRhcHRlcgorICAgICAgICBjbGFzcyB0ZW1w
bGF0ZXMgdG8gdXNlIHRlbXBsYXRlIGZ1bmN0aW9ucyB0byBzaW1wbGlmeSB0aGVtIGFuZAorICAg
ICAgICBtYWtlIHRoZW0gbW9yZSBmbGV4aWJsZS4KKworICAgICAgICBBbHNvIHJlbW92ZWQgc29t
ZSB1bnVzZWQgdGVtcGxhdGUgYXJndW1lbnRzLgorCisgICAgICAgIFRoaXMgZ29lcyBvdXQgb2Yg
aXRzIHdheSB0byBub3QgY2hhbmdlIGJlaGF2aW9yLiBGdXR1cmUgcGF0Y2hlcworICAgICAgICB3
aWxsIGNoYW5nZSB0aGUgcGVlayB0eXBlIHRvIGJlIGEgcmVmZXJlbmNlIHR5cGUsIHdoaWNoIHdp
bGwKKyAgICAgICAgcmVkdWNlIHJlZmVyZW5jZSBjb3VudCBjaHVybiBhIGJpdCBmb3IgaGFzaCB0
YWJsZXMgd2l0aCBSZWZQdHIKKyAgICAgICAgbWFwcGVkIHZhbHVlcywgYW5kIHRoZW4gZG8gZnVy
dGhlciBvcHRpbWl6YXRpb25zIGZvciBSZWZQdHIKKyAgICAgICAgYW5kIE93blB0ciBieSBnZXR0
aW5nIHR5cGVzIGZyb20gdGhlIGhhc2ggdHJhaXRzLgorCisgICAgICAgICogd3RmL0hhc2hNYXAu
aDogQWRkZWQgTWFwcGVkUGFzc0luVHlwZSwgTWFwcGVkUGFzc091dFR5cGUsCisgICAgICAgIGFu
ZCBNYXBwZWRQZWVrVHlwZSB0eXBlZGVmcywgYW5kIHVzZWQgdGhlbSBmb3IgdGhlIGFyZ3VtZW50
cworICAgICAgICBhbmQgcmV0dXJuIHR5cGVzIG9mIHRoZSBnZXQsIHNldCwgYWRkLCB0YWtlLCBh
bmQgaW5saW5lQWRkCisgICAgICAgIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdURjo6SGFzaE1hcFRy
YW5zbGF0b3IpOiBDaGFuZ2VkIHRoaXMgY2xhc3MgdGVtcGxhdGUgdG8gdGFrZQorICAgICAgICBm
ZXdlciBhcmd1bWVudHMsIGFuZCBjaGFuZ2VkIGl0cyBtZW1iZXIgZnVuY3Rpb25zIHRvIGJlCisg
ICAgICAgIGZ1bmN0aW9uIHRlbXBsYXRlcyBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0aGUgY29tcGls
ZXIgdG8KKyAgICAgICAgZGV0ZXJtaW5lIHR5cGVzIG1vcmUgZmxleGlibHkgYW5kIGFsc28gc2lt
cGxpZmllcyB1c2Ugb2YgdGhpcy4KKyAgICAgICAgKFdURjo6SGFzaE1hcFRyYW5zbGF0b3JBZGFw
dGVyKTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmZpbmQpOiBVcGRhdGUgdG8gdXNl
IG5ldyBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXIuCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmNv
bnRhaW5zKTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmlubGluZUFkZCk6IFRha2Ug
TWFwcGVkUGFzc0luVHlwZS4KKyAgICAgICAgKFdURjo6SGFzaE1hcDo6c2V0KTogRGl0dG8uCisg
ICAgICAgIChXVEY6Okhhc2hNYXA6OmFkZCk6IERpdHRvLgorICAgICAgICAoV1RGOjpIYXNoTWFw
OjpnZXQpOiBSZXR1cm4gTWFwcGVkUGVla1R5cGUuCisgICAgICAgIChXVEY6Okhhc2hNYXA6OnRh
a2UpOiBSZXR1cm4gTWFwcGVkUGFzc091dFR5cGUuIEFsc28gdXNlIHRoYXQgdHlwZQorICAgICAg
ICBpbiB0aGUgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6
IFJlbW92ZWQgdW5uZWVkZWQgdGVtcGxhdGUgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbCB0
byBkZWxldGVBbGxQYWlyU2Vjb25kcy4KKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsS2V5cyk6IFJl
bW92ZWQgdW5uZWVkZWQgdGVtcGxhdGUgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbCB0byBk
ZWxldGVBbGxQYWlyRmlyc3RzLgorCisgICAgICAgICogd3RmL1JlZlB0ckhhc2hNYXAuaDogVXBk
YXRlZCBjb21tZW50cy4gUmVtb3ZlZCB0aGUKKyAgICAgICAgUmVmUHRySGFzaE1hcFJhd0tleVRy
YW5zbGF0b3IgY2xhc3MgdGVtcGxhdGU7IHdlIGNhbiB1c2UgdGhlCisgICAgICAgIEhhc2hNYXBU
cmFuc2xhdG9yIGNsYXNzIHRlbXBsYXRlIGZyb20gSGFzaE1hcC5oIGluc3RlYWQgbm93IHRoYXQK
KyAgICAgICAgaXQgaXMgbW9yZSBmbGV4aWJsZS4gQWRkZWQgTWFwcGVkUGFzc0luVHlwZSwgTWFw
cGVkUGFzc091dFR5cGUsCisgICAgICAgIGFuZCBNYXBwZWRQZWVrVHlwZSB0eXBlZGVmcywgYW5k
IHVzZWQgdGhlbSBmb3IgdGhlIGFyZ3VtZW50cworICAgICAgICBhbmQgcmV0dXJuIHR5cGVzIG9m
IHRoZSBnZXQsIGlubGluZUdldCwgc2V0LCBhZGQsIHRha2UsIGFuZCBpbmxpbmVBZGQKKyAgICAg
ICAgZnVuY3Rpb25zLiBDaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSBSYXdLZXlUcmFuc2xhdG9yIHR5
cGUgdG8KKyAgICAgICAgVHJhbnNsYXRvciBzaW5jZSBpdCdzIG5vdyBhIGNsYXNzIHRoYXQgY2Fu
IGhhbmRsZSBib3RoIHJhdyBrZXlzCisgICAgICAgIGFuZCBjb252ZW50aW9uYWwga2V5cy4KKyAg
ICAgICAgKFdURjo6SGFzaE1hcDo6ZmluZCk6IENoYW5nZWQgdG8gdXNlIFRyYW5zbGF0b3IgaW5z
dGVhZCBvZiBSYXdLZXlUcmFuc2xhdG9yLgorICAgICAgICAoV1RGOjpIYXNoTWFwOjpjb250YWlu
cyk6IERpdHRvLgorICAgICAgICAoV1RGOjpIYXNoTWFwOjppbmxpbmVBZGQpOiBEaXR0by4gQWxz
byBjaGFuZ2VkIHRvIHRha2UgTWFwcGVkUGFzc0luVHlwZS4KKyAgICAgICAgKFdURjo6SGFzaE1h
cDo6c2V0KTogVGFrZSBNYXBwZWRQYXNzSW5UeXBlLgorICAgICAgICAoV1RGOjpIYXNoTWFwOjph
ZGQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6SGFzaE1hcDo6Z2V0KTogUmV0dXJuIE1hcHBlZFBl
ZWtUeXBlLgorICAgICAgICAoV1RGOjpIYXNoTWFwOjppbmxpbmVHZXQpOiBEaXR0by4KKyAgICAg
ICAgKFdURjo6SGFzaE1hcDo6dGFrZSk6IFJldHVybiBNYXBwZWRQYXNzT3V0VHlwZS4gQWxzbyB1
c2UgdGhhdCB0eXBlCisgICAgICAgIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwogMjAxMS0xMS0z
MCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIHRv
U3RyaW5nQ2FsbGJhY2sgYW5kIHZhbHVlT2ZDYWxsYmFjayBkbyBub3QgY2hlY2sgdGhlIGVudGly
ZSBwcm90b3R5cGUgY2hhaW4gZm9yIGNvbnZlcnRUb1R5cGUgY2FsbGJhY2sKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxMDE1MjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNDIsNiArNDIsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRyYWl0VHlwZSBWYWx1ZVR5cGU7CiAKICAgICBwcml2YXRl
OgorICAgICAgICB0eXBlZGVmIGNvbnN0IE1hcHBlZFR5cGUmIE1hcHBlZFBhc3NJblR5cGU7Cisg
ICAgICAgIHR5cGVkZWYgTWFwcGVkVHlwZSBNYXBwZWRQYXNzT3V0VHlwZTsKKyAgICAgICAgdHlw
ZWRlZiBNYXBwZWRUeXBlIE1hcHBlZFBlZWtUeXBlOworICAgICAgICAKICAgICAgICAgdHlwZWRl
ZiBIYXNoQXJnIEhhc2hGdW5jdGlvbnM7CiAKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5
VHlwZSwgVmFsdWVUeXBlLCBQYWlyRmlyc3RFeHRyYWN0b3I8VmFsdWVUeXBlPiwKQEAgLTY2LDIz
ICs3MCwyMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBL
ZXlUeXBlJik7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYpIGNv
bnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmKSBjb25zdDsKLSAgICAg
ICAgTWFwcGVkVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OworICAgICAgICBNYXBwZWRQ
ZWVrVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OwogCiAgICAgICAgIC8vIHJlcGxhY2Vz
IHZhbHVlIGJ1dCBub3Qga2V5IGlmIGtleSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAgLy8g
cmV0dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8gdGhlIGtleSBsb2NhdGlv
biwgCiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcgdmFsdWUg
d2FzIGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChjb25z
dCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwg
Ym9vbD4gc2V0KGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzSW5UeXBlKTsgCiAKICAgICAgICAg
Ly8gZG9lcyBub3RoaW5nIGlmIGtleSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAgLy8gcmV0
dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8gdGhlIGtleSBsb2NhdGlvbiwg
CiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcgdmFsdWUgd2Fz
IGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBL
ZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9v
bD4gYWRkKGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzSW5UeXBlKTsgCiAKICAgICAgICAgdm9p
ZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7
CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAotICAgICAgICBNYXBwZWRUeXBlIHRha2UoY29uc3Qg
S2V5VHlwZSYpOyAvLyBlZmZpY2llbnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCisg
ICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYpOyAvLyBlZmZpY2ll
bnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCiAKICAgICAgICAgLy8gQW4gYWx0ZXJu
YXRlIHZlcnNpb24gb2YgZmluZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFu
ZCBjb21wYXJpbmcKICAgICAgICAgLy8gd2l0aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRo
ZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbi4gSGFzaFRyYW5zbGF0b3IKQEAgLTk5LDEyICsxMDMs
MTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVCYpOwogICAgICAgICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlw
ZSYsIGNvbnN0IFQmKTsKICAgICAgICAgLy8gICBzdGF0aWMgdHJhbnNsYXRlKFZhbHVlVHlwZSYs
IGNvbnN0IFQmLCB1bnNpZ25lZCBoYXNoQ29kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29u
c3QgVCYsIGNvbnN0IE1hcHBlZFR5cGUmKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBU
JiwgTWFwcGVkUGFzc0luVHlwZSk7CiAKICAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxp
bmVBZGQoY29uc3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5cGUmKTsKKyAgICAgICAgcGFpcjxp
dGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzSW5UeXBl
KTsKIAogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKICAgICB9OwpAQCAtMTEzLDI4ICsx
MTcsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB0eXBlbmFtZSBQ
YWlyVHlwZTo6Zmlyc3RfdHlwZSYgZXh0cmFjdChjb25zdCBQYWlyVHlwZSYgcCkgeyByZXR1cm4g
cC5maXJzdDsgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zPgogICAgIHN0cnVj
dCBIYXNoTWFwVHJhbnNsYXRvciB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUeXBl
OjpmaXJzdF90eXBlIEtleVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUeXBl
OjpzZWNvbmRfdHlwZSBNYXBwZWRUeXBlOwotCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEtleVR5cGUmIGtleSkgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9
Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEtleVR5cGUmIGEsIGNvbnN0IEtleVR5
cGUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShWYWx1ZVR5cGUmIGxvY2F0aW9uLCBjb25zdCBLZXlUeXBlJiBr
ZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rp
b25zOjpoYXNoKGtleSk7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gSGFz
aEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9u
LCBjb25zdCBVJiBrZXksIGNvbnN0IFYmIG1hcHBlZCkKICAgICAgICAgewogICAgICAgICAgICAg
bG9jYXRpb24uZmlyc3QgPSBrZXk7CiAgICAgICAgICAgICBsb2NhdGlvbi5zZWNvbmQgPSBtYXBw
ZWQ7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhbnNsYXRvcj4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgVHJhbnNsYXRvcj4K
ICAgICBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyIHsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBWYWx1ZVR5cGU6OmZpcnN0X3R5cGUgS2V5VHlwZTsKLSAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBWYWx1ZVR5cGU6OnNlY29uZF90eXBlIE1hcHBlZFR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNo
KGtleSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5VHlwZSYgYSwgY29u
c3QgVCYgYikgeyByZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KLSAgICAgICAgc3Rh
dGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlVHlwZSYgbG9jYXRpb24sIGNvbnN0IFQmIGtleSwgY29u
c3QgTWFwcGVkVHlwZSYgbWFwcGVkLCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVy
biBUcmFuc2xhdG9yOjpoYXNoKGtleSk7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyBy
ZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxv
Y2F0aW9uLCBjb25zdCBVJiBrZXksIGNvbnN0IFYmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbi5m
aXJzdCwga2V5LCBoYXNoQ29kZSk7CiAgICAgICAgICAgICBsb2NhdGlvbi5zZWNvbmQgPSBtYXBw
ZWQ7CkBAIC0yMTIsOCArMjEwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5cGVu
YW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yCiAgICAgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgVmFsdWVUcmFpdHMsIFRZUEUsIEhh
c2hUcmFuc2xhdG9yPiBBZGFwdGVyOwotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZp
bmQ8VFlQRSwgQWRhcHRlcj4odmFsdWUpOworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGZpbmQ8VFlQRSwgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHJhaXRzLCBIYXNoVHJh
bnNsYXRvcj4gPih2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KQEAgLTIyMSw4ICsy
MTgsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgCiAgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
ZmluZChjb25zdCBUWVBFJiB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgVmFsdWVUcmFpdHMsIFRZUEUsIEhhc2hU
cmFuc2xhdG9yPiBBZGFwdGVyOwotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8
VFlQRSwgQWRhcHRlcj4odmFsdWUpOworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZp
bmQ8VFlQRSwgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHJhaXRzLCBIYXNoVHJhbnNs
YXRvcj4gPih2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KQEAgLTIzMCwyMSArMjI2
LDE5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGluZSBib29sCiAgICAgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6Y29udGFpbnMoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiAgICAgewotICAg
ICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIFZhbHVlVHJh
aXRzLCBUWVBFLCBIYXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsKLSAgICAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBjb250YWluczxUWVBFLCBBZGFwdGVyPih2YWx1ZSk7CisgICAgICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8VFlQRSwgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVy
PFZhbHVlVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4gPih2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlw
ZW5hbWUgWD4KICAgICBpbmxpbmUgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVBZGQo
Y29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBtYXBwZWQpIAorICAgIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46OmlubGluZUFkZChjb25zdCBLZXlUeXBlJiBrZXksIE1hcHBlZFBh
c3NJblR5cGUgbWFwcGVkKSAKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcFRyYW5zbGF0
b3I8VmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gVHJhbnNsYXRvclR5cGU7
Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEtleVR5cGUsIE1hcHBlZFR5cGUs
IFRyYW5zbGF0b3JUeXBlPihrZXksIG1hcHBlZCk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgYWRkPEtleVR5cGUsIE1hcHBlZFBhc3NJblR5cGUsIEhhc2hNYXBUcmFuc2xhdG9yPFZh
bHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPiA+KGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXRl
cmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2V0KGNvbnN0IEtleVR5
cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKSAKKyAgICBIYXNoTWFwPFQsIFUsIFYs
IFcsIFg+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBNYXBwZWRQYXNzSW5UeXBlIG1hcHBlZCkg
CiAgICAgewogICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBpbmxpbmVBZGQo
a2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKQEAgLTI1NywyMSAr
MjUxLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVFlQRSwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+CiAgICAgcGFpcjx0eXBlbmFt
ZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjphZGQoY29uc3QgVFlQRSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiB2YWx1
ZSkKKyAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjphZGQoY29uc3QgVFlQRSYga2V5LCBNYXBw
ZWRQYXNzSW5UeXBlIHZhbHVlKQogICAgIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwVHJhbnNs
YXRvckFkYXB0ZXI8VmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgVFlQRSwgSGFzaFRyYW5zbGF0b3I+
IEFkYXB0ZXI7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkUGFzc2luZ0hhc2hD
b2RlPFRZUEUsIE1hcHBlZFR5cGUsIEFkYXB0ZXI+KGtleSwgdmFsdWUpOworICAgICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxUWVBFLCBNYXBwZWRQYXNzSW5U
eXBlLCBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8VmFsdWVUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
PiA+KGtleSwgdmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBl
bmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFw
PFQsIFUsIFYsIFcsIFg+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBl
JiBtYXBwZWQpCisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IEtleVR5cGUm
IGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpCiAgICAgewogICAgICAgICByZXR1cm4gaW5s
aW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+
Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRU
eXBlCisgICAgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBw
ZWRQZWVrVHlwZQogICAgIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNv
bnN0IEtleVR5cGUmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkg
PSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwpAQCAtMzAy
LDE0ICsyOTUsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFw
cGVkVHJhaXRzPgotICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRz
Pjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6TWFwcGVkUGFzc091dFR5cGUKICAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46OnRha2UoY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHsKICAgICAgICAgLy8gVGhpcyBj
YW4gcHJvYmFibHkgYmUgbWFkZSBtb3JlIGVmZmljaWVudCB0byBhdm9pZCByZWYvZGVyZWYgY2h1
cm4uCiAgICAgICAgIGl0ZXJhdG9yIGl0ID0gZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0g
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCk7Ci0g
ICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVk
VHlwZSByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1
bHQgPSBpdC0+c2Vjb25kOwogICAgICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KQEAgLTM0Niw3ICszMzksNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
cmV0dXJuICEoYSA9PSBiKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBwZWRU
eXBlLCB0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGU+CiAgICAgdm9pZCBkZWxldGVBbGxQYWlyU2Vjb25kcyhIYXNoVGFibGVUeXBlJiBj
b2xsZWN0aW9uKQogICAgIHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBl
Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKQEAgLTM1OCwxMCArMzUxLDEwIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHZvaWQgZGVsZXRlQWxsVmFsdWVz
KGNvbnN0IEhhc2hNYXA8VCwgVSwgViwgVywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAg
ICBkZWxldGVBbGxQYWlyU2Vjb25kczx0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpN
YXBwZWRUeXBlPihjb2xsZWN0aW9uKTsKKyAgICAgICAgZGVsZXRlQWxsUGFpclNlY29uZHMoY29s
bGVjdGlvbik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5h
bWUgSGFzaFRhYmxlVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBlPgog
ICAgIHZvaWQgZGVsZXRlQWxsUGFpckZpcnN0cyhIYXNoVGFibGVUeXBlJiBjb2xsZWN0aW9uKQog
ICAgIHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpjb25zdF9pdGVy
YXRvciBpdGVyYXRvcjsKQEAgLTM3Myw3ICszNjYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbEtleXMoY29uc3QgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPiYgY29sbGVjdGlvbikKICAgICB7Ci0gICAgICAgIGRlbGV0ZUFsbFBhaXJG
aXJzdHM8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6S2V5VHlwZT4oY29sbGVjdGlv
bik7CisgICAgICAgIGRlbGV0ZUFsbFBhaXJGaXJzdHMoY29sbGVjdGlvbik7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZlB0ckhhc2hNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZlB0ckhhc2hNYXAuaAkocmV2aXNpb24gMTAxNTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIzLDI3ICsyMywxMSBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIC8v
IFRoaXMgc3BlY2lhbGl6YXRpb24gaXMgYSBkaXJlY3QgY29weSBvZiBIYXNoTWFwLCB3aXRoIG92
ZXJsb2FkZWQgZnVuY3Rpb25zCisgICAgLy8gVGhpcyBzcGVjaWFsaXphdGlvbiBpcyBhIGNvcHkg
b2YgSGFzaE1hcCBmb3IgdXNlIHdpdGggUmVmUHRyIGtleXMsIHdpdGggb3ZlcmxvYWRlZCBmdW5j
dGlvbnMKICAgICAvLyB0byBhbGxvdyBmb3IgbG9va3VwIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBS
ZWZQdHIsIGF2b2lkaW5nIHJlZi1jb3VudCBjaHVybi4KICAgICAKLSAgICAvLyBGSVhNRTogRmlu
ZCBhIGJldHRlciB3YXkgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYW4gZW50aXJlIGNvcHkgb2YgdGhl
IEhhc2hNYXAgdGVtcGxhdGUuCisgICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGRvIHRoaXMg
d2l0aCB0cmFpdHMgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYSBjb3B5IG9mIHRoZSBIYXNoTWFwIHRl
bXBsYXRlLgogICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJhd0tleVR5cGUsIHR5cGVuYW1l
IFZhbHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+
Ci0gICAgc3RydWN0IFJlZlB0ckhhc2hNYXBSYXdLZXlUcmFuc2xhdG9yIHsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBWYWx1ZVR5cGU6OmZpcnN0X3R5cGUgS2V5VHlwZTsKLSAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBWYWx1ZVR5cGU6OnNlY29uZF90eXBlIE1hcHBlZFR5cGU7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OkZpcnN0VHJhaXRzIEtleVRyYWl0czsKLSAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6U2Vjb25kVHJhaXRzIE1hcHBlZFRy
YWl0czsKLQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChSYXdLZXlUeXBlIGtleSkgeyBy
ZXR1cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEtleVR5cGUmIGEsIFJhd0tleVR5cGUgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9u
czo6ZXF1YWwoYSwgYik7IH0KLSAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlVHlw
ZSYgbG9jYXRpb24sIFJhd0tleVR5cGUga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBtYXBwZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5OwotICAgICAgICAgICAg
bG9jYXRpb24uc2Vjb25kID0gbWFwcGVkOwotICAgICAgICB9Ci0gICAgfTsKLQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmc+CiAgICAgY2xhc3Mg
SGFzaE1hcDxSZWZQdHI8VD4sIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBw
ZWRUcmFpdHNBcmc+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01OSwx
MyArNDMsMTcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFs
dWVUcmFpdHM6OlRyYWl0VHlwZSBWYWx1ZVR5cGU7CiAKICAgICBwcml2YXRlOgorICAgICAgICB0
eXBlZGVmIGNvbnN0IE1hcHBlZFR5cGUmIE1hcHBlZFBhc3NJblR5cGU7CisgICAgICAgIHR5cGVk
ZWYgTWFwcGVkVHlwZSBNYXBwZWRQYXNzT3V0VHlwZTsKKyAgICAgICAgdHlwZWRlZiBNYXBwZWRU
eXBlIE1hcHBlZFBlZWtUeXBlOworICAgICAgICAKICAgICAgICAgdHlwZWRlZiBIYXNoQXJnIEhh
c2hGdW5jdGlvbnM7CiAKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8S2V5VHlwZSwgVmFsdWVU
eXBlLCBQYWlyRmlyc3RFeHRyYWN0b3I8VmFsdWVUeXBlPiwKICAgICAgICAgICAgIEhhc2hGdW5j
dGlvbnMsIFZhbHVlVHJhaXRzLCBLZXlUcmFpdHM+IEhhc2hUYWJsZVR5cGU7CiAKLSAgICAgICAg
dHlwZWRlZiBSZWZQdHJIYXNoTWFwUmF3S2V5VHJhbnNsYXRvcjxSYXdLZXlUeXBlLCBWYWx1ZVR5
cGUsIFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPgotICAgICAgICAgICAgUmF3S2V5VHJhbnNs
YXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFz
aEZ1bmN0aW9ucz4KKyAgICAgICAgICAgIFRyYW5zbGF0b3I7CiAKICAgICBwdWJsaWM6CiAgICAg
ICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVl
VHlwZT4gaXRlcmF0b3I7CkBAIC04OSwzMyArNzcsMzMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoUmF3S2V5VHlwZSkgY29uc3Q7CiAgICAgICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgS2V5VHlwZSYpIGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKFJh
d0tleVR5cGUpIGNvbnN0OwotICAgICAgICBNYXBwZWRUeXBlIGdldChjb25zdCBLZXlUeXBlJikg
Y29uc3Q7Ci0gICAgICAgIE1hcHBlZFR5cGUgZ2V0KFJhd0tleVR5cGUpIGNvbnN0OwotICAgICAg
ICBNYXBwZWRUeXBlIGlubGluZUdldChSYXdLZXlUeXBlKSBjb25zdDsKKyAgICAgICAgTWFwcGVk
UGVla1R5cGUgZ2V0KGNvbnN0IEtleVR5cGUmKSBjb25zdDsKKyAgICAgICAgTWFwcGVkUGVla1R5
cGUgZ2V0KFJhd0tleVR5cGUpIGNvbnN0OworICAgICAgICBNYXBwZWRQZWVrVHlwZSBpbmxpbmVH
ZXQoUmF3S2V5VHlwZSkgY29uc3Q7CiAKICAgICAgICAgLy8gcmVwbGFjZXMgdmFsdWUgYnV0IG5v
dCBrZXkgaWYga2V5IGlzIGFscmVhZHkgcHJlc2VudAogICAgICAgICAvLyByZXR1cm4gdmFsdWUg
aXMgYSBwYWlyIG9mIHRoZSBpdGVyYXRvciB0byB0aGUga2V5IGxvY2F0aW9uLCAKICAgICAgICAg
Ly8gYW5kIGEgYm9vbGVhbiB0aGF0J3MgdHJ1ZSBpZiBhIG5ldyB2YWx1ZSB3YXMgYWN0dWFsbHkg
YWRkZWQKLSAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gc2V0KGNvbnN0IEtleVR5cGUmLCBj
b25zdCBNYXBwZWRUeXBlJik7IAotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQoUmF3
S2V5VHlwZSwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9v
bD4gc2V0KGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzSW5UeXBlKTsgCisgICAgICAgIHBhaXI8
aXRlcmF0b3IsIGJvb2w+IHNldChSYXdLZXlUeXBlLCBNYXBwZWRQYXNzSW5UeXBlKTsgCiAKICAg
ICAgICAgLy8gZG9lcyBub3RoaW5nIGlmIGtleSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAg
Ly8gcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8gdGhlIGtleSBsb2Nh
dGlvbiwgCiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcgdmFs
dWUgd2FzIGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChj
b25zdCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKLSAgICAgICAgcGFpcjxpdGVyYXRv
ciwgYm9vbD4gYWRkKFJhd0tleVR5cGUsIGNvbnN0IE1hcHBlZFR5cGUmKTsgCisgICAgICAgIHBh
aXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc0luVHlwZSk7
IAorICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoUmF3S2V5VHlwZSwgTWFwcGVkUGFz
c0luVHlwZSk7IAogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKICAgICAg
ICAgdm9pZCByZW1vdmUoUmF3S2V5VHlwZSk7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9y
KTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgICAgIE1hcHBlZFR5cGUgdGFrZShjb25z
dCBLZXlUeXBlJik7IC8vIGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBnZXQgd2l0aCByZW1vdmUK
LSAgICAgICAgTWFwcGVkVHlwZSB0YWtlKFJhd0tleVR5cGUpOyAvLyBlZmZpY2llbnQgY29tYmlu
YXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHRha2Uo
Y29uc3QgS2V5VHlwZSYpOyAvLyBlZmZpY2llbnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGggcmVt
b3ZlCisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHRha2UoUmF3S2V5VHlwZSk7IC8vIGVmZmlj
aWVudCBjb21iaW5hdGlvbiBvZiBnZXQgd2l0aCByZW1vdmUKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGlubGluZUFkZChjb25zdCBLZXlUeXBlJiwgY29uc3Qg
TWFwcGVkVHlwZSYpOwotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQoUmF3
S2V5VHlwZSwgY29uc3QgTWFwcGVkVHlwZSYpOworICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29s
PiBpbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYsIE1hcHBlZFBhc3NJblR5cGUpOworICAgICAgICBw
YWlyPGl0ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQoUmF3S2V5VHlwZSwgTWFwcGVkUGFzc0luVHlw
ZSk7CiAKICAgICAgICAgSGFzaFRhYmxlVHlwZSBtX2ltcGw7CiAgICAgfTsKQEAgLTE3Nyw3ICsx
NjUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB0eXBl
bmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46Oml0ZXJhdG9yIEhhc2hNYXA8UmVm
UHRyPFQ+LCBVLCBWLCBXLCBYPjo6ZmluZChSYXdLZXlUeXBlIGtleSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxSYXdLZXlUeXBlLCBSYXdLZXlUcmFuc2xhdG9y
PihrZXkpOworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8UmF3S2V5VHlwZSwg
VHJhbnNsYXRvcj4oa2V5KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgpAQCAtMTg5LDcgKzE3
Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHR5cGVu
YW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6Y29uc3RfaXRlcmF0b3IgSGFzaE1h
cDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjpmaW5kKFJhd0tleVR5cGUga2V5KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPFJhd0tleVR5cGUsIFJhd0tl
eVRyYW5zbGF0b3I+KGtleSk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxS
YXdLZXlUeXBlLCBUcmFuc2xhdG9yPihrZXkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBA
IC0yMDEsMjcgKzE4OSwyNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAg
IGlubGluZSBib29sIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6Y29udGFpbnMoUmF3
S2V5VHlwZSBrZXkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGNvbnRhaW5zPFJhd0tleVR5cGUsIFJhd0tleVRyYW5zbGF0b3I+KGtleSk7CisgICAgICAgIHJl
dHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8UmF3S2V5VHlwZSwgVHJhbnNsYXRvcj4oa2V5
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSBwYWlyPHR5cGVuYW1lIEhh
c2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1h
cDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjppbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBj
b25zdCBNYXBwZWRUeXBlJiBtYXBwZWQpIAorICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBX
LCBYPjo6aW5saW5lQWRkKGNvbnN0IEtleVR5cGUmIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBw
ZWQpIAogICAgIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwVHJhbnNsYXRvcjxWYWx1ZVR5cGUs
IFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPiBUcmFuc2xhdG9yVHlwZTsKLSAgICAgICAgcmV0
dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8S2V5VHlwZSwgTWFwcGVkVHlwZSwgVHJhbnNsYXRvclR5
cGU+KGtleSwgbWFwcGVkKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8S2V5
VHlwZSwgTWFwcGVkUGFzc0luVHlwZSwgVHJhbnNsYXRvcj4oa2V5LCBtYXBwZWQpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgaW5saW5lIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQ
dHI8VD4sIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxU
PiwgVSwgViwgVywgWD46OmlubGluZUFkZChSYXdLZXlUeXBlIGtleSwgY29uc3QgTWFwcGVkVHlw
ZSYgbWFwcGVkKSAKKyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmlubGluZUFk
ZChSYXdLZXlUeXBlIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpIAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8UmF3S2V5VHlwZSwgTWFwcGVkVHlwZSwgUmF3
S2V5VHJhbnNsYXRvcj4oa2V5LCBtYXBwZWQpOworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGFkZDxSYXdLZXlUeXBlLCBNYXBwZWRQYXNzSW5UeXBlLCBUcmFuc2xhdG9yPihrZXksIG1h
cHBlZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBwYWlyPHR5cGVuYW1lIEhhc2hN
YXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxS
ZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjpzZXQoY29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBw
ZWRUeXBlJiBtYXBwZWQpIAorICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6c2V0
KGNvbnN0IEtleVR5cGUmIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpIAogICAgIHsKICAg
ICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVk
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0yMzMsNyArMjIwLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1h
cDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJl
ZlB0cjxUPiwgVSwgViwgVywgWD46OnNldChSYXdLZXlUeXBlIGtleSwgY29uc3QgTWFwcGVkVHlw
ZSYgbWFwcGVkKSAKKyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OnNldChSYXdL
ZXlUeXBlIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpIAogICAgIHsKICAgICAgICAgcGFp
cjxpdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CkBAIC0yNDUsMjAgKzIzMiwyMCBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFJlZlB0
cjxUPiwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8UmVmUHRyPFQ+
LCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYg
bWFwcGVkKQorICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IEtl
eVR5cGUmIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpCiAgICAgewogICAgICAgICByZXR1
cm4gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAg
IHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjppdGVyYXRvciwg
Ym9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmFkZChSYXdLZXlUeXBl
IGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKQorICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBV
LCBWLCBXLCBYPjo6YWRkKFJhd0tleVR5cGUga2V5LCBNYXBwZWRQYXNzSW5UeXBlIG1hcHBlZCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxU
PiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hN
YXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRQZWVrVHlwZQogICAg
IEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5
VHlwZSYga2V5KSBjb25zdAogICAgIHsKICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1faW1wbCkubG9va3VwKGtleSk7CkBAIC0yNjgsMTcgKzI1
NSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFp
dHM+Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0
cz46Ok1hcHBlZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywg
TWFwcGVkVHJhaXRzPjo6TWFwcGVkUGVla1R5cGUKICAgICBpbmxpbmUgSGFzaE1hcDxSZWZQdHI8
VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmlubGluZUdldChSYXdLZXlUeXBlIGtleSkgY29u
c3QKICAgICB7Ci0gICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJs
ZVR5cGUmPihtX2ltcGwpLnRlbXBsYXRlIGxvb2t1cDxSYXdLZXlUeXBlLCBSYXdLZXlUcmFuc2xh
dG9yPihrZXkpOworICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFi
bGVUeXBlJj4obV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8UmF3S2V5VHlwZSwgVHJhbnNsYXRvcj4o
a2V5KTsKICAgICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFp
dHM6OmVtcHR5VmFsdWUoKTsKICAgICAgICAgcmV0dXJuIGVudHJ5LT5zZWNvbmQ7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRy
PFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRUeXBlCisgICAgdHlwZW5hbWUgSGFz
aE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBlZFBlZWtUeXBlCiAg
ICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChSYXdLZXlU
eXBlIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBpbmxpbmVHZXQoa2V5KTsKQEAg
LTMxMiwyNyArMjk5LDI3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IE1hcHBlZFRyYWl0cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywg
TWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRQYXNzT3V0VHlwZQogICAgIEhhc2hNYXA8
UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKGNvbnN0IEtleVR5cGUmIGtl
eSkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgY2FuIHByb2JhYmx5IGJlIG1hZGUgbW9yZSBlZmZp
Y2llbnQgdG8gYXZvaWQgcmVmL2RlcmVmIGNodXJuLgogICAgICAgICBpdGVyYXRvciBpdCA9IGZp
bmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1h
cHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpOwotICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0
cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZSByZXN1bHQgPSBpdC0+c2Vj
b25kOworICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBpdC0+c2Vjb25kOwogICAg
ICAgICByZW1vdmUoaXQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIE1hcHBlZFRyYWl0cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwg
ViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVm
UHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRQYXNzT3V0VHlwZQogICAgIEhh
c2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojp0YWtlKFJhd0tleVR5cGUg
a2V5KQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjYW4gcHJvYmFibHkgYmUgbWFkZSBtb3JlIGVm
ZmljaWVudCB0byBhdm9pZCByZWYvZGVyZWYgY2h1cm4uCiAgICAgICAgIGl0ZXJhdG9yIGl0ID0g
ZmluZChrZXkpOwogICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4g
TWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCk7Ci0gICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVm
UHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRUeXBlIHJlc3VsdCA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgIE1hcHBlZFBhc3NPdXRUeXBlIHJlc3VsdCA9IGl0LT5zZWNvbmQ7CiAg
ICAgICAgIHJlbW92ZShpdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117552</attachid>
            <date>2011-12-01 20:22:26 -0800</date>
            <delta_ts>2011-12-02 08:38:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73477-20111201202224.patch</filename>
            <type>text/plain</type>
            <size>59025</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNjY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMS0xMi0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UHJlcGFyZSB0byBkZXBsb3kgcGFzcyBhbmQgcGVlayB0eXBlcyBpbiB0aGUgSGFzaE1hcCBjbGFz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NzcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgcHJpdmF0ZSB0eXBlZGVmcyBpbnNpZGUgdGhlIEhhc2hNYXAgY2xhc3MsCisgICAg
ICAgIGFuZCB1c2VzIHRoZW0gYXMgYXBwcm9wcmlhdGUuIEEgZnV0dXJlIHBhdGNoIHdpbGwgYWN0
dWFsbHkKKyAgICAgICAgdGllIHRob3NlIHR5cGVkZWZzIHRvIGhhc2ggdHJhaXRzLCB3aGljaCB3
aWxsIGFsbG93IHVzIHRvCisgICAgICAgIG1ha2UgSGFzaE1hcCB3b3JrIHdpdGggT3duUHRyIG1h
cHBlZCB2YWx1ZXMgYW5kIHRvIG9wdGltaXplCisgICAgICAgIGhvdyBIYXNoTWFwIHdvcmtzIHdp
dGggUmVmUHRyIG1hcHBlZCB2YWx1ZXMuCisKKyAgICAgICAgQWxzbyBjaGFuZ2VkIHRoZSBoYXNo
IHRyYW5zbGF0b3IgYW5kIGFkYXB0ZXIgc3RydWN0IHRlbXBsYXRlcworICAgICAgICB0byB1c2Ug
dGVtcGxhdGUgZnVuY3Rpb25zIHRvIHNpbXBsaWZ5IHRoZW0gYW5kIG1ha2UgdGhlbSBtb3JlCisg
ICAgICAgIGZsZXhpYmxlLgorCisgICAgICAgIEFsc28gcmVtb3ZlZCBzb21lIHVudXNlZCB0ZW1w
bGF0ZSBhcmd1bWVudHMuCisKKyAgICAgICAgVGhpcyBnb2VzIG91dCBvZiBpdHMgd2F5IHRvIG5v
dCBjaGFuZ2UgYmVoYXZpb3IuIEZ1dHVyZSBwYXRjaGVzCisgICAgICAgIHdpbGwgY2hhbmdlIHRo
ZSBwZWVrIHR5cGUgdG8gYmUgYSByZWZlcmVuY2UgdHlwZSwgd2hpY2ggd2lsbAorICAgICAgICBy
ZWR1Y2UgcmVmZXJlbmNlIGNvdW50IGNodXJuIGEgYml0IGZvciBoYXNoIHRhYmxlcyB3aXRoIFJl
ZlB0cgorICAgICAgICBtYXBwZWQgdmFsdWVzLCBhbmQgdGhlbiBkbyBmdXJ0aGVyIG9wdGltaXph
dGlvbnMgZm9yIFJlZlB0cgorICAgICAgICBhbmQgT3duUHRyIGJ5IGdldHRpbmcgdHlwZXMgZnJv
bSB0aGUgaGFzaCB0cmFpdHMuCisKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOiBBZGRlZCBNYXBw
ZWRQYXNzSW5UeXBlLCBNYXBwZWRQYXNzT3V0VHlwZSwKKyAgICAgICAgYW5kIE1hcHBlZFBlZWtU
eXBlIHR5cGVkZWZzLCBhbmQgdXNlZCB0aGVtIGZvciB0aGUgYXJndW1lbnRzCisgICAgICAgIGFu
ZCByZXR1cm4gdHlwZXMgb2YgdGhlIGdldCwgc2V0LCBhZGQsIHRha2UsIGFuZCBpbmxpbmVBZGQK
KyAgICAgICAgZnVuY3Rpb25zLgorICAgICAgICAoV1RGOjpIYXNoTWFwVHJhbnNsYXRvcik6IENo
YW5nZWQgdGhpcyBzdHJ1Y3QgdGVtcGxhdGUgdG8gdGFrZQorICAgICAgICBmZXdlciBhcmd1bWVu
dHMsIGFuZCBjaGFuZ2VkIGl0cyBtZW1iZXIgZnVuY3Rpb25zIHRvIGJlCisgICAgICAgIGZ1bmN0
aW9uIHRlbXBsYXRlcyBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0aGUgY29tcGlsZXIgdG8KKyAgICAg
ICAgZGV0ZXJtaW5lIHR5cGVzIG1vcmUgZmxleGlibHkgYW5kIGFsc28gc2ltcGxpZmllcyB1c2Ug
b2YgaXQuCisgICAgICAgIChXVEY6Okhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcik6IERpdHRvLgor
ICAgICAgICAoV1RGOjpIYXNoTWFwOjpmaW5kKTogVXBkYXRlZCB0byB1c2UgbmV3IEhhc2hNYXBU
cmFuc2xhdG9yQWRhcHRlci4KKyAgICAgICAgQWxzbyByZWR1Y2VkIHRoZSBhcmd1bWVudHMgcGFz
c2VkIHRvIHRoZSBIYXNoVGFibGUgZnVuY3Rpb24gdGVtcGxhdGUuCisgICAgICAgIChXVEY6Okhh
c2hNYXA6OmNvbnRhaW5zKTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmlubGluZUFk
ZCk6IERpdHRvLiBBbHNvIHRha2UgTWFwcGVkUGFzc0luVHlwZS4KKyAgICAgICAgKFdURjo6SGFz
aE1hcDo6c2V0KTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmFkZCk6IERpdHRvLgor
ICAgICAgICAoV1RGOjpIYXNoTWFwOjppbmxpbmVHZXQpOiBEaXR0bywgYnV0IHJldHVybiBNYXBw
ZWRQZWVrVHlwZS4KKyAgICAgICAgKFdURjo6SGFzaE1hcDo6Z2V0KTogRGl0dG8uCisgICAgICAg
IChXVEY6Okhhc2hNYXA6OnRha2UpOiBEaXR0bywgYnV0IHJldHVybiBNYXBwZWRQYXNzT3V0VHlw
ZSBhbmQgdXNlCisgICAgICAgIHRoYXQgdHlwZSBpbiB0aGUgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6IFJlbW92ZWQgdW5uZWVkZWQgdGVtcGxhdGUgYXJn
dW1lbnRzIGZyb20KKyAgICAgICAgY2FsbCB0byBkZWxldGVBbGxQYWlyU2Vjb25kcy4KKyAgICAg
ICAgKFdURjo6ZGVsZXRlQWxsS2V5cyk6IFJlbW92ZWQgdW5uZWVkZWQgdGVtcGxhdGUgYXJndW1l
bnRzIGZyb20KKyAgICAgICAgY2FsbCB0byBkZWxldGVBbGxQYWlyRmlyc3RzLgorCisgICAgICAg
ICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6SWRlbnRpdHlFeHRyYWN0b3IpOiBDaGFu
Z2VkIHRoaXMgdG8gYmUgYSBzdHJ1Y3QgcmF0aGVyIHRoYW4KKyAgICAgICAgYSBzdHJ1Y3QgdGVt
cGxhdGUsIGFuZCByZXBsYWNlZCB0aGUgZXh0cmFjdCBmdW5jdGlvbiB3aXRoIGEgZnVuY3Rpb24K
KyAgICAgICAgdGVtcGxhdGUuIFRoaXMgYWxsb3dzIHRoZSBjb21waWxlciB0byBkZWR1Y2UgdGhl
IHR5cGUuCisgICAgICAgIChXVEY6Okhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcik6IENoYW5nZWQg
dGhpcyBzdHJ1Y3QgdGVtcGxhdGUgdG8gdGFrZQorICAgICAgICBmZXdlciBhcmd1bWVudHMsIGFu
ZCBjaGFuZ2VkIGl0cyBtZW1iZXIgZnVuY3Rpb25zIHRvIGJlCisgICAgICAgIGZ1bmN0aW9uIHRl
bXBsYXRlcyBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0aGUgY29tcGlsZXIgdG8KKyAgICAgICAgZGV0
ZXJtaW5lIHR5cGVzIG1vcmUgZmxleGlibHkgYW5kIGFsc28gc2ltcGxpZmllcyB1c2Ugb2YgaXQu
CisgICAgICAgIChXVEY6Okhhc2hTZXQ6OmZpbmQpOiBVcGRhdGVkIHRvIHVzZSBuZXcgSGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyLgorICAgICAgICBBbHNvIHJlZHVjZWQgdGhlIGFyZ3VtZW50cyBw
YXNzZWQgdG8gdGhlIEhhc2hUYWJsZSBmdW5jdGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgKFdURjo6
SGFzaFNldDo6Y29udGFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdURjo6SGFzaFNldDo6YWRkKTog
RGl0dG8uCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6OklkZW50
aXR5SGFzaFRyYW5zbGF0b3IpOiBDaGFuZ2VkIHRoaXMgc3RydWN0IHRlbXBsYXRlIHRvIHRha2UK
KyAgICAgICAgZmV3ZXIgYXJndW1lbnRzLCBhbmQgY2hhbmdlZCBpdHMgbWVtYmVyIGZ1bmN0aW9u
cyB0byBiZQorICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZXMgaW5zdGVhZC4gVGhpcyBhbGxvd3Mg
dGhlIGNvbXBpbGVyIHRvCisgICAgICAgIGRldGVybWluZSB0eXBlcyBtb3JlIGZsZXhpYmx5IGFu
ZCBhbHNvIHNpbXBsaWZpZXMgdXNlIG9mIGl0LgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OmFk
ZCk6IFJlZHVjZWQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gdGVtcGxhdGUuCisg
ICAgICAgIChXVEY6Okhhc2hUYWJsZTo6ZmluZCk6IERpdHRvLCBhbHNvIHJldmVyc2VkIHRoZSB0
ZW1wbGF0ZSBhcmd1bWVudHMgc28gdGhlCisgICAgICAgIHRyYW5zbGF0b3IgY29tZXMgZmlyc3Qg
c28gdGhlIGNvbXBpbGVyIGNhbiBkZWR1Y2UgdGhlIG90aGVyIHR5cGUuCisgICAgICAgIChXVEY6
Okhhc2hUYWJsZTo6Y29udGFpbnMpOiBEaXR0by4KKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjps
b29rdXApOiBEaXR0by4KKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpsb29rdXBGb3JXcml0aW5n
KTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y2hlY2tLZXkpOiBEaXR0by4KKyAg
ICAgICAgKFdURjo6SGFzaFRhYmxlOjpmdWxsTG9va3VwRm9yV3JpdGluZyk6IERpdHRvLgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmFkZCk6IERpdHRvLgorICAgICAgICAoV1RGOjpIYXNoVGFi
bGU6OmFkZFBhc3NpbmdIYXNoQ29kZSk6IERpdHRvLgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OmZpbmQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpjb250YWlucyk6IERpdHRv
LgorCisgICAgICAgICogd3RmL0xpc3RIYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Okxpc3RIYXNo
U2V0Tm9kZUhhc2hGdW5jdGlvbnMpOiBDaGFuZ2VkIHRoaXMgc3RydWN0IHRlbXBsYXRlIHRvIHRh
a2UKKyAgICAgICAgZmV3ZXIgYXJndW1lbnRzLCBhbmQgY2hhbmdlZCBpdHMgbWVtYmVyIGZ1bmN0
aW9ucyB0byBiZSBmdW5jdGlvbiB0ZW1wbGF0ZXMKKyAgICAgICAgaW5zdGVhZC4gVGhpcyBhbGxv
d3MgdGhlIGNvbXBpbGVyIHRvIGRldGVybWluZSB0eXBlcyBtb3JlIGZsZXhpYmx5IGFuZAorICAg
ICAgICBhbHNvIHNpbXBsaWZpZXMgdXNlIG9mIGl0LgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNl
dDo6ZmluZCk6IFJlZHVjZWQgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIEhhc2hUYWJsZQor
ICAgICAgICBmdW5jdG9uIHRlbXBsYXRlLgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldFRyYW5z
bGF0b3JBZGFwdGVyKTogQ2hhbmdlZCB0aGlzIHN0cnVjdCB0ZW1wbGF0ZSBpbiB0aGUKKyAgICAg
ICAgc2FtZSB3YXkgd2UgY2hhbmdlZCBMaXN0SGFzaFNldE5vZGVIYXNoRnVuY3Rpb25zIGFib3Zl
LgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyOjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Ojo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAg
IChXVEY6Ojo6aW5zZXJ0QmVmb3JlKToKKworICAgICAgICAqIHd0Zi9SZWZQdHJIYXNoTWFwLmg6
IFVwZGF0ZWQgY29tbWVudHMuIFJlbW92ZWQgdGhlCisgICAgICAgIFJlZlB0ckhhc2hNYXBSYXdL
ZXlUcmFuc2xhdG9yIHN0cnVjdCB0ZW1wbGF0ZTsgd2UgY2FuIHVzZSB0aGUKKyAgICAgICAgSGFz
aE1hcFRyYW5zbGF0b3Igc3RydWN0IHRlbXBsYXRlIGZyb20gSGFzaE1hcC5oIGluc3RlYWQgbm93
IHRoYXQKKyAgICAgICAgaXQgaXMgbW9yZSBmbGV4aWJsZS4gQWRkZWQgTWFwcGVkUGFzc0luVHlw
ZSwgTWFwcGVkUGFzc091dFR5cGUsCisgICAgICAgIGFuZCBNYXBwZWRQZWVrVHlwZSB0eXBlZGVm
cywgYW5kIHVzZWQgdGhlbSBmb3IgdGhlIGFyZ3VtZW50cworICAgICAgICBhbmQgcmV0dXJuIHR5
cGVzIG9mIHRoZSBnZXQsIGlubGluZUdldCwgc2V0LCBhZGQsIHRha2UsIGFuZCBpbmxpbmVBZGQK
KyAgICAgICAgZnVuY3Rpb25zLiBDaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSBSYXdLZXlUcmFuc2xh
dG9yIHR5cGUgdG8KKyAgICAgICAgVHJhbnNsYXRvciBzaW5jZSBpdCdzIG5vdyBhIGNsYXNzIHRo
YXQgY2FuIGhhbmRsZSBib3RoIHJhdyBrZXlzCisgICAgICAgIGFuZCBjb252ZW50aW9uYWwga2V5
cy4KKyAgICAgICAgKFdURjo6SGFzaE1hcDo6ZmluZCk6IENoYW5nZWQgdG8gdXNlIFRyYW5zbGF0
b3IgaW5zdGVhZCBvZiBSYXdLZXlUcmFuc2xhdG9yLgorICAgICAgICBSZWR1Y2VkIHRoZSBhcmd1
bWVudHMgcGFzc2VkIHRvIHRoZSBIYXNoVGFibGUgZnVuY3Rpb24gdGVtcGxhdGUuCisgICAgICAg
IChXVEY6Okhhc2hNYXA6OmNvbnRhaW5zKTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6
OmlubGluZUFkZCk6IERpdHRvLiBBbHNvIHRha2UgTWFwcGVkUGFzc0luVHlwZS4KKyAgICAgICAg
KFdURjo6SGFzaE1hcDo6c2V0KTogRGl0dG8uCisgICAgICAgIChXVEY6Okhhc2hNYXA6OmFkZCk6
IERpdHRvLgorICAgICAgICAoV1RGOjpIYXNoTWFwOjppbmxpbmVHZXQpOiBEaXR0bywgYnV0IHJl
dHVybiBNYXBwZWRQZWVrVHlwZS4KKyAgICAgICAgKFdURjo6SGFzaE1hcDo6Z2V0KTogRGl0dG8u
CisgICAgICAgIChXVEY6Okhhc2hNYXA6OnRha2UpOiBEaXR0bywgYnV0IHJldHVybiBNYXBwZWRQ
YXNzT3V0VHlwZSBhbmQgdXNlCisgICAgICAgIHRoYXQgdHlwZSBpbiB0aGUgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXVEY6OmRlbGV0ZUFsbFZhbHVlcyk6IFJlbW92ZWQgdW5uZWVkZWQgdGVt
cGxhdGUgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbCB0byBkZWxldGVBbGxQYWlyU2Vjb25k
cy4KKyAgICAgICAgKFdURjo6ZGVsZXRlQWxsS2V5cyk6IFJlbW92ZWQgdW5uZWVkZWQgdGVtcGxh
dGUgYXJndW1lbnRzIGZyb20KKyAgICAgICAgY2FsbCB0byBkZWxldGVBbGxQYWlyRmlyc3RzLgor
CiAyMDExLTEyLTAxICBDaGFvLXlpbmcgRnUgIDxmdUBtaXBzLmNvbT4KIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlck1JUFMgZG9lcyBub3QgaW1wbGVtZW50IHJlYWRDYWxsVGFyZ2V0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0hhc2hNYXAuaAkocmV2aXNpb24gMTAxNjY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTQyLDYgKzQyLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwogCiAgICAgcHJp
dmF0ZToKKyAgICAgICAgdHlwZWRlZiBjb25zdCBNYXBwZWRUeXBlJiBNYXBwZWRQYXNzSW5UeXBl
OworICAgICAgICB0eXBlZGVmIE1hcHBlZFR5cGUgTWFwcGVkUGFzc091dFR5cGU7CisgICAgICAg
IHR5cGVkZWYgTWFwcGVkVHlwZSBNYXBwZWRQZWVrVHlwZTsKKyAgICAgICAgCiAgICAgICAgIHR5
cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxl
PEtleVR5cGUsIFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPFZhbHVlVHlwZT4sCkBAIC02
NiwyMyArNzAsMjMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGZpbmQoY29u
c3QgS2V5VHlwZSYpOwogICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUm
KSBjb25zdDsKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJikgY29uc3Q7Ci0g
ICAgICAgIE1hcHBlZFR5cGUgZ2V0KGNvbnN0IEtleVR5cGUmKSBjb25zdDsKKyAgICAgICAgTWFw
cGVkUGVla1R5cGUgZ2V0KGNvbnN0IEtleVR5cGUmKSBjb25zdDsKIAogICAgICAgICAvLyByZXBs
YWNlcyB2YWx1ZSBidXQgbm90IGtleSBpZiBrZXkgaXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAg
IC8vIHJldHVybiB2YWx1ZSBpcyBhIHBhaXIgb2YgdGhlIGl0ZXJhdG9yIHRvIHRoZSBrZXkgbG9j
YXRpb24sIAogICAgICAgICAvLyBhbmQgYSBib29sZWFuIHRoYXQncyB0cnVlIGlmIGEgbmV3IHZh
bHVlIHdhcyBhY3R1YWxseSBhZGRlZAotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQo
Y29uc3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5cGUmKTsgCisgICAgICAgIHBhaXI8aXRlcmF0
b3IsIGJvb2w+IHNldChjb25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc0luVHlwZSk7IAogCiAgICAg
ICAgIC8vIGRvZXMgbm90aGluZyBpZiBrZXkgaXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAgIC8v
IHJldHVybiB2YWx1ZSBpcyBhIHBhaXIgb2YgdGhlIGl0ZXJhdG9yIHRvIHRoZSBrZXkgbG9jYXRp
b24sIAogICAgICAgICAvLyBhbmQgYSBib29sZWFuIHRoYXQncyB0cnVlIGlmIGEgbmV3IHZhbHVl
IHdhcyBhY3R1YWxseSBhZGRlZAotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29u
c3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5cGUmKTsgCisgICAgICAgIHBhaXI8aXRlcmF0b3Is
IGJvb2w+IGFkZChjb25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc0luVHlwZSk7IAogCiAgICAgICAg
IHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmKTsKICAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0
b3IpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAgICAgTWFwcGVkVHlwZSB0YWtlKGNv
bnN0IEtleVR5cGUmKTsgLy8gZWZmaWNpZW50IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92
ZQorICAgICAgICBNYXBwZWRQYXNzT3V0VHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmKTsgLy8gZWZm
aWNpZW50IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQogCiAgICAgICAgIC8vIEFuIGFs
dGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGlu
ZyBhbmQgY29tcGFyaW5nCiAgICAgICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9p
ZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24uIEhhc2hUcmFuc2xhdG9yCkBAIC05OSwxMiAr
MTAzLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFQmKTsKICAgICAgICAgLy8gICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1
ZVR5cGUmLCBjb25zdCBUJik7CiAgICAgICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5
cGUmLCBjb25zdCBUJiwgdW5zaWduZWQgaGFzaENvZGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRk
KGNvbnN0IFQmLCBjb25zdCBNYXBwZWRUeXBlJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29u
c3QgVCYsIE1hcHBlZFBhc3NJblR5cGUpOwogCiAgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5j
eSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4g
aW5saW5lQWRkKGNvbnN0IEtleVR5cGUmLCBjb25zdCBNYXBwZWRUeXBlJik7CisgICAgICAgIHBh
aXI8aXRlcmF0b3IsIGJvb2w+IGlubGluZUFkZChjb25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc0lu
VHlwZSk7CiAKICAgICAgICAgSGFzaFRhYmxlVHlwZSBtX2ltcGw7CiAgICAgfTsKQEAgLTExMywy
OCArMTE3LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBzdGF0aWMgY29uc3QgdHlwZW5h
bWUgUGFpclR5cGU6OmZpcnN0X3R5cGUmIGV4dHJhY3QoY29uc3QgUGFpclR5cGUmIHApIHsgcmV0
dXJuIHAuZmlyc3Q7IH0KICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KICAgICBz
dHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3IgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVl
VHlwZTo6Zmlyc3RfdHlwZSBLZXlUeXBlOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVl
VHlwZTo6c2Vjb25kX3R5cGUgTWFwcGVkVHlwZTsKLQotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5
KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXlUeXBlJiBhLCBjb25zdCBL
ZXlUeXBlJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQotICAgICAg
ICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVmFsdWVUeXBlJiBsb2NhdGlvbiwgY29uc3QgS2V5VHlw
ZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBtYXBwZWQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gSGFzaEZ1
bmN0aW9uczo6aGFzaChrZXkpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJu
IEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2Nh
dGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBWJiBtYXBwZWQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5OwogICAgICAgICAgICAgbG9jYXRpb24uc2Vjb25kID0g
bWFwcGVkOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYW5zbGF0
b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIFRyYW5zbGF0
b3I+CiAgICAgc3RydWN0IEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlciB7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgVmFsdWVUeXBlOjpmaXJzdF90eXBlIEtleVR5cGU7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgVmFsdWVUeXBlOjpzZWNvbmRfdHlwZSBNYXBwZWRUeXBlOwotCi0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6
aGFzaChrZXkpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEtleVR5cGUmIGEs
IGNvbnN0IFQmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShWYWx1ZVR5cGUmIGxvY2F0aW9uLCBjb25zdCBUJiBrZXks
IGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCwgdW5zaWduZWQgaGFzaENvZGUpCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyBy
ZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIp
IHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShU
JiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBWJiBtYXBwZWQsIHVuc2lnbmVkIGhhc2hD
b2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRp
b24uZmlyc3QsIGtleSwgaGFzaENvZGUpOwogICAgICAgICAgICAgbG9jYXRpb24uc2Vjb25kID0g
bWFwcGVkOwpAQCAtMjEyLDggKzIxMCw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGluZSB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvcgogICAgIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46OmZpbmQoY29uc3QgVFlQRSYgdmFsdWUpCiAgICAgewotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIFZhbHVlVHJhaXRzLCBUWVBF
LCBIYXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0
ZSBmaW5kPFRZUEUsIEFkYXB0ZXI+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBmaW5kPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVRyYWl0cywgSGFzaFRyYW5z
bGF0b3I+ID4odmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBAIC0yMjEsOCArMjE4
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OmNvbnN0X2l0ZXJhdG9yIAogICAgIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmZp
bmQoY29uc3QgVFlQRSYgdmFsdWUpIGNvbnN0CiAgICAgewotICAgICAgICB0eXBlZGVmIEhhc2hN
YXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIFZhbHVlVHJhaXRzLCBUWVBFLCBIYXNoVHJh
bnNsYXRvcj4gQWRhcHRlcjsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPFRZ
UEUsIEFkYXB0ZXI+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5k
PEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVRyYWl0cywgSGFzaFRyYW5zbGF0b3I+ID4o
dmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkBAIC0yMzAsMjEgKzIyNiwxOSBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICBpbmxpbmUgYm9vbAogICAgIEhhc2hNYXA8VCwgVSwgViwgVywg
WD46OmNvbnRhaW5zKGNvbnN0IFRZUEUmIHZhbHVlKSBjb25zdAogICAgIHsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwVHJhbnNsYXRvckFkYXB0ZXI8VmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgVFlQ
RSwgSGFzaFRyYW5zbGF0b3I+IEFkYXB0ZXI7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxh
dGUgY29udGFpbnM8VFlQRSwgQWRhcHRlcj4odmFsdWUpOworICAgICAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hNYXBUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVRyYWl0cywg
SGFzaFRyYW5zbGF0b3I+ID4odmFsdWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAg
aW5saW5lIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJv
b2w+Ci0gICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lQWRkKGNvbnN0IEtleVR5cGUm
IGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKSAKKyAgICBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjppbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBNYXBwZWRQYXNzSW5UeXBlIG1hcHBl
ZCkgCiAgICAgewotICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9yPFZhbHVlVHlwZSwg
VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+IFRyYW5zbGF0b3JUeXBlOwotICAgICAgICByZXR1
cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxLZXlUeXBlLCBNYXBwZWRUeXBlLCBUcmFuc2xhdG9yVHlw
ZT4oa2V5LCBtYXBwZWQpOworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNo
TWFwVHJhbnNsYXRvcjxWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9ucz4gPihrZXksIG1hcHBlZCk7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
ViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBwYWlyPHR5cGVuYW1lIEhhc2hNYXA8VCwg
VSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8VCwgVSwgViwgVywgWD46
OnNldChjb25zdCBLZXlUeXBlJiBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkgCisgICAg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgTWFwcGVkUGFz
c0luVHlwZSBtYXBwZWQpIAogICAgIHsKICAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7CkBAIC0yNTcsMjEgKzI1MSwyMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRZUEUsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgog
ICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+
Ci0gICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IFRZUEUmIGtleSwgY29uc3Qg
TWFwcGVkVHlwZSYgdmFsdWUpCisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0
IFRZUEUmIGtleSwgTWFwcGVkUGFzc0luVHlwZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgVmFsdWVUcmFpdHMsIFRZUEUs
IEhhc2hUcmFuc2xhdG9yPiBBZGFwdGVyOwotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGFkZFBhc3NpbmdIYXNoQ29kZTxUWVBFLCBNYXBwZWRUeXBlLCBBZGFwdGVyPihrZXksIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFz
aE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4gPihrZXks
IHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFz
aE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxULCBVLCBW
LCBXLCBYPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVk
KQorICAgIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIE1h
cHBlZFBhc3NJblR5cGUgbWFwcGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlubGluZUFkZChr
ZXksIG1hcHBlZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotICAgIHR5
cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZQorICAg
IHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkUGVla1R5
cGUKICAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlU
eXBlJiBrZXkpIGNvbnN0CiAgICAgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3Rf
Y2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKQEAgLTMwMiwxNCArMjk1
LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBl
ZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1h
cHBlZFBhc3NPdXRUeXBlCiAgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+Ojp0
YWtlKGNvbnN0IEtleVR5cGUmIGtleSkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgY2FuIHByb2Jh
Ymx5IGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgdG8gYXZvaWQgcmVmL2RlcmVmIGNodXJuLgogICAg
ICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAgaWYgKGl0ID09IGVuZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpOwotICAgICAgICB0
eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBlZFR5cGUgcmVz
dWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgTWFwcGVkUGFzc091dFR5cGUgcmVzdWx0ID0gaXQt
PnNlY29uZDsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkBAIC0zNDYsNyArMzM5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiAh
KGEgPT0gYik7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwcGVkVHlwZSwgdHlw
ZW5hbWUgSGFzaFRhYmxlVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGVUeXBl
PgogICAgIHZvaWQgZGVsZXRlQWxsUGFpclNlY29uZHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlv
bikKICAgICB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlcmF0b3I7CkBAIC0zNTgsMTAgKzM1MSwxMCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhjb25zdCBI
YXNoTWFwPFQsIFUsIFYsIFcsIFg+JiBjb2xsZWN0aW9uKQogICAgIHsKLSAgICAgICAgZGVsZXRl
QWxsUGFpclNlY29uZHM8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6TWFwcGVkVHlw
ZT4oY29sbGVjdGlvbik7CisgICAgICAgIGRlbGV0ZUFsbFBhaXJTZWNvbmRzKGNvbGxlY3Rpb24p
OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEhhc2hU
YWJsZVR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRhYmxlVHlwZT4KICAgICB2b2lk
IGRlbGV0ZUFsbFBhaXJGaXJzdHMoSGFzaFRhYmxlVHlwZSYgY29sbGVjdGlvbikKICAgICB7CiAg
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRl
cmF0b3I7CkBAIC0zNzMsNyArMzY2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KICAgICBpbmxpbmUgdm9pZCBkZWxldGVBbGxLZXlzKGNvbnN0IEhhc2hNYXA8VCwgVSwgViwg
VywgWD4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICBkZWxldGVBbGxQYWlyRmlyc3RzPHR5
cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OktleVR5cGU+KGNvbGxlY3Rpb24pOworICAg
ICAgICBkZWxldGVBbGxQYWlyRmlyc3RzKGNvbGxlY3Rpb24pOwogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9I
YXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoU2V0
LmgJKHJldmlzaW9uIDEwMTY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxNCArMjYsMTQg
QEAKIAogbmFtZXNwYWNlIFdURiB7CiAKKyAgICBzdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Cisg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgSGFzaFNldDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgogICAgIHZvaWQg
ZGVsZXRlQWxsVmFsdWVzKGNvbnN0IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz4mKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgogICAgIHZvaWQgZmFzdERlbGV0ZUFsbFZhbHVlcyhjb25zdCBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Jik7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSWRlbnRpdHlFeHRyYWN0b3I7Ci0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZh
bHVlQXJnPjo6SGFzaCwKICAgICAgICAgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxW
YWx1ZUFyZz4gPiBjbGFzcyBIYXNoU2V0IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5
RXh0cmFjdG9yPFZhbHVlVHlwZT4sCisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlw
ZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwKICAgICAgICAgICAgIEhhc2hGdW5jdGlv
bnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKIAogICAgIHB1Ymxp
YzoKQEAgLTY5LDYgKzY5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIG11c3QgaGF2
ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG1lbWJlcnM6CiAgICAgICAgIC8vICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVCYpOwogICAgICAgICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIHNvIHRoYXQgY2FsbGVy
cworICAgICAgICAvLyBjYW4ganVzdCBwYXNzIHRoZSB0cmFuc2xhdG9yIGxldCB0aGUgY29tcGls
ZXIgZGVkdWNlIFQuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IGJvb2wgY29udGFpbnMoY29u
c3QgVCYpIGNvbnN0OwogCkBAIC04Miw2ICs4NCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKICAgICAgICAgLy8gICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CiAgICAgICAgIC8vICAg
c3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5zaWduZWQgaGFzaENvZGUp
OworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSB0
ZW1wbGF0ZSBhcmd1bWVudHMgc28gdGhhdCBjYWxsZXJzCisgICAgICAgIC8vIGNhbiBqdXN0IHBh
c3MgdGhlIHRyYW5zbGF0b3IgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IHBhaXI8aXRlcmF0b3Is
IGJvb2w+IGFkZChjb25zdCBUJik7CiAKICAgICAgICAgdm9pZCByZW1vdmUoY29uc3QgVmFsdWVU
eXBlJik7CkBAIC05NSwxNSArOTksMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEhhc2hU
YWJsZVR5cGUgbV9pbXBsOwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSWRlbnRpdHlFeHRyYWN0b3IgewotICAgICAgICBzdGF0aWMgY29uc3QgVCYgZXh0cmFjdChj
b25zdCBUJiB0KSB7IHJldHVybiB0OyB9CisgICAgc3RydWN0IElkZW50aXR5RXh0cmFjdG9yIHsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29u
c3QgVCYgdCkgeyByZXR1cm4gdDsgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFu
c2xhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYW5zbGF0b3I+CiAgICAgc3RydWN0IEhh
c2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYgYSwgY29uc3QgVCYgYikgeyByZXR1cm4g
VHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KLSAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRl
KFZhbHVlVHlwZSYgbG9jYXRpb24sIGNvbnN0IFQmIGtleSwgY29uc3QgVCYsIHVuc2lnbmVkIGhh
c2hDb2RlKQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIFRyYW5zbGF0b3I6Omhhc2goa2V5KTsgfQorICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgdm9pZCB0cmFu
c2xhdGUoVCYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3QgVSYsIHVuc2lnbmVkIGhhc2hD
b2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRp
b24sIGtleSwgaGFzaENvZGUpOwogICAgICAgICB9CkBAIC0xNjIsMTYgKzE2NiwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB0eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHM+OjppdGVyYXRvcgogICAgIGlubGluZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8VmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgVCwg
SGFzaFRyYW5zbGF0b3I+IEFkYXB0ZXI7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
ZmluZDxULCBBZGFwdGVyPih2YWx1ZSk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
ZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+ID4odmFsdWUpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3I+CiAgICAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAgICAgewotICAg
ICAgICB0eXBlZGVmIEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIFZhbHVlVHJh
aXRzLCBULCBIYXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50
ZW1wbGF0ZSBjb250YWluczxULCBBZGFwdGVyPih2YWx1ZSk7CisgICAgICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xh
dG9yPiA+KHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgpAQCAtMTg1LDggKzE4Nyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IGlubGluZSBwYWlyPHR5cGVuYW1lIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46Oml0ZXJhdG9yLCBib29sPgogICAgIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmFkZChjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgVmFsdWVUcmFpdHMsIFQsIEhhc2hUcmFuc2xh
dG9yPiBBZGFwdGVyOwotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdI
YXNoQ29kZTxULCBULCBBZGFwdGVyPih2YWx1ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4gbV9p
bXBsLnRlbXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8
SGFzaFRyYW5zbGF0b3I+ID4odmFsdWUsIHZhbHVlKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxMDE2NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiBu
YW1lc3BhY2UgV1RGIHsKIAogI2RlZmluZSBEVU1QX0hBU0hUQUJMRV9TVEFUUyAwCisKIC8vIEVu
YWJsZXMgaW50ZXJuYWwgV1RGIGNvbnNpc3RlbmN5IGNoZWNrcyB0aGF0IGFyZSBpbnZva2VkIGF1
dG9tYXRpY2FsbHkuIE5vbi1XVEYgY2FsbGVycyBjYW4gY2FsbCBjaGVja1RhYmxlQ29uc2lzdGVu
Y3koKSBldmVuIGlmIGludGVybmFsIGNoZWNrcyBhcmUgZGlzYWJsZWQuCiAjZGVmaW5lIENIRUNL
X0hBU0hUQUJMRV9DT05TSVNURU5DWSAwCiAKQEAgLTI3OCwxMSArMjc5LDExIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7
IHN0YXRpYyB2b2lkIG1vdmUoVCYgZnJvbSwgVCYgdG8pIHsgaGFzaFRhYmxlU3dhcChmcm9tLCB0
byk7IH0gfTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+
IHsgc3RhdGljIHZvaWQgbW92ZShUJiBmcm9tLCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnM+IGNsYXNzIElkZW50aXR5SGFzaFRyYW5zbGF0b3IgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnM+IGNsYXNzIElkZW50aXR5SGFzaFRyYW5zbGF0b3IgewogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBrZXkpIHsg
cmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6
ZXF1YWwoYSwgYik7IH0KLSAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlJiBsb2Nh
dGlvbiwgY29uc3QgS2V5JiwgY29uc3QgVmFsdWUmIHZhbHVlKSB7IGxvY2F0aW9uID0gdmFsdWU7
IH0KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgVCYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNoKGtleSk7IH0KKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3Qg
VCYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxv
Y2F0aW9uLCBjb25zdCBVJiwgY29uc3QgVCYgdmFsdWUpIHsgbG9jYXRpb24gPSB2YWx1ZTsgfQog
ICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgpAQCAtMjkzLDcgKzI5NCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICB0eXBlZGVmIFRyYWl0cyBWYWx1ZVRyYWl0czsKICAgICAgICAgdHlwZWRlZiBLZXkg
S2V5VHlwZTsKICAgICAgICAgdHlwZWRlZiBWYWx1ZSBWYWx1ZVR5cGU7Ci0gICAgICAgIHR5cGVk
ZWYgSWRlbnRpdHlIYXNoVHJhbnNsYXRvcjxLZXksIFZhbHVlLCBIYXNoRnVuY3Rpb25zPiBJZGVu
dGl0eVRyYW5zbGF0b3JUeXBlOworICAgICAgICB0eXBlZGVmIElkZW50aXR5SGFzaFRyYW5zbGF0
b3I8SGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTsKIAogICAgICAgICBIYXNo
VGFibGUoKTsKICAgICAgICAgfkhhc2hUYWJsZSgpIApAQCAtMzE4LDIxICszMTksMjEgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIGludCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFi
bGVTaXplOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2tleUNv
dW50OyB9CiAKLSAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZhbHVlVHlw
ZSYgdmFsdWUpIHsgcmV0dXJuIGFkZDxLZXlUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5VHJhbnNs
YXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQorICAgICAgICBw
YWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4g
YWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0cmFjdCh2YWx1ZSksIHZh
bHVlKTsgfQogCiAgICAgICAgIC8vIEEgc3BlY2lhbCB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmlu
ZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKICAgICAgICAgLy8gd2l0aCBz
b21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbiBpZiB0
aGUgb2JqZWN0IGlzIGFscmVhZHkKICAgICAgICAgLy8gaW4gdGhlIHRhYmxlLgotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYSwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3I+IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBUJiBrZXksIGNvbnN0IEV4dHJhJik7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhLCB0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvcj4gcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkUGFzc2luZ0hhc2hDb2RlKGNv
bnN0IFQmIGtleSwgY29uc3QgRXh0cmEmKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhPiBwYWlyPGl0ZXJhdG9yLCBi
b29sPiBhZGQoY29uc3QgVCYga2V5LCBjb25zdCBFeHRyYSYpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmE+IHBhaXI8
aXRlcmF0b3IsIGJvb2w+IGFkZFBhc3NpbmdIYXNoQ29kZShjb25zdCBUJiBrZXksIGNvbnN0IEV4
dHJhJik7CiAKLSAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0
dXJuIGZpbmQ8S2V5VHlwZSwgSWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQotICAgICAg
ICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4g
ZmluZDxLZXlUeXBlLCBJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9Ci0gICAgICAgIGJv
b2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBjb250YWluczxL
ZXlUeXBlLCBJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9Ci0KLSAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBpdGVyYXRvciBmaW5kKGNv
bnN0IFQmKTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKLSAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBib29sIGNvbnRhaW5z
KGNvbnN0IFQmKSBjb25zdDsKKyAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBr
ZXkpIHsgcmV0dXJuIGZpbmQ8SWRlbnRpdHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfQorICAgICAg
ICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QgeyByZXR1cm4g
ZmluZDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9CisgICAgICAgIGJvb2wgY29udGFp
bnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCB7IHJldHVybiBjb250YWluczxJZGVudGl0eVRy
YW5zbGF0b3JUeXBlPihrZXkpOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQoY29uc3QgVCYpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gY29uc3RfaXRlcmF0
b3IgZmluZChjb25zdCBUJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3Zl
KGl0ZXJhdG9yKTsKQEAgLTM0NCw4ICszNDUsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkQnVja2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0
dXJuIEtleVRyYWl0czo6aXNEZWxldGVkVmFsdWUoRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSk7
IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eU9yRGVsZXRlZEJ1Y2tldChjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBpc0VtcHR5QnVja2V0KHZhbHVlKSB8fCBpc0RlbGV0ZWRC
dWNrZXQodmFsdWUpOyB9CiAKLSAgICAgICAgVmFsdWVUeXBlKiBsb29rdXAoY29uc3QgS2V5JiBr
ZXkpIHsgcmV0dXJuIGxvb2t1cDxLZXksIElkZW50aXR5VHJhbnNsYXRvclR5cGU+KGtleSk7IH0K
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IFZh
bHVlVHlwZSogbG9va3VwKGNvbnN0IFQmKTsKKyAgICAgICAgVmFsdWVUeXBlKiBsb29rdXAoY29u
c3QgS2V5JiBrZXkpIHsgcmV0dXJuIGxvb2t1cDxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkp
OyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBU
PiBWYWx1ZVR5cGUqIGxvb2t1cChjb25zdCBUJik7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3Q7CkBAIC0zNjcsMTEgKzM2
OCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBwYWlyPFZhbHVlVHlwZSos
IGJvb2w+IExvb2t1cFR5cGU7CiAgICAgICAgIHR5cGVkZWYgcGFpcjxMb29rdXBUeXBlLCB1bnNp
Z25lZD4gRnVsbExvb2t1cFR5cGU7CiAKLSAgICAgICAgTG9va3VwVHlwZSBsb29rdXBGb3JXcml0
aW5nKGNvbnN0IEtleSYga2V5KSB7IHJldHVybiBsb29rdXBGb3JXcml0aW5nPEtleSwgSWRlbnRp
dHlUcmFuc2xhdG9yVHlwZT4oa2V5KTsgfTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEZ1bGxMb29rdXBUeXBlIGZ1bGxMb29rdXBGb3JXcml0
aW5nKGNvbnN0IFQmKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3I+IExvb2t1cFR5cGUgbG9va3VwRm9yV3JpdGluZyhjb25zdCBUJik7CisgICAg
ICAgIExvb2t1cFR5cGUgbG9va3VwRm9yV3JpdGluZyhjb25zdCBLZXkmIGtleSkgeyByZXR1cm4g
bG9va3VwRm9yV3JpdGluZzxJZGVudGl0eVRyYW5zbGF0b3JUeXBlPihrZXkpOyB9OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gRnVsbExvb2t1
cFR5cGUgZnVsbExvb2t1cEZvcldyaXRpbmcoY29uc3QgVCYpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gTG9va3VwVHlwZSBsb29rdXBGb3JX
cml0aW5nKGNvbnN0IFQmKTsKIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvcj4gdm9pZCBjaGVja0tleShjb25zdCBUJik7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiB2b2lkIGNoZWNrS2V5KGNv
bnN0IFQmKTsKIAogICAgICAgICB2b2lkIHJlbW92ZUFuZEludmFsaWRhdGVXaXRob3V0RW50cnlD
b25zaXN0ZW5jeUNoZWNrKFZhbHVlVHlwZSopOwogICAgICAgICB2b2lkIHJlbW92ZUFuZEludmFs
aWRhdGUoVmFsdWVUeXBlKik7CkBAIC00NTIsNyArNDUzLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAj
aWYgQVNTRVJUX0RJU0FCTEVECiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPgogICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tLZXko
Y29uc3QgVCYpCiAgICAgewogICAgIH0KQEAgLTQ2MCw3ICs0NjEsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICNlbHNlCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpjaGVja0tleShjb25zdCBUJiBrZXkpCiAg
ICAgewogICAgICAgICBpZiAoIUhhc2hGdW5jdGlvbnM6OnNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkKQpAQCAtNDc1LDEwICs0NzYsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJh
Y3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3I+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+CiAg
ICAgaW5saW5lIFZhbHVlKiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpCiAgICAgewot
ICAgICAgICBjaGVja0tleTxULCBIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICAgICAgY2hlY2tL
ZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKICAgICAgICAgaW50IGsgPSAwOwogICAgICAgICBp
bnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CkBAIC01MjIsMTEgKzUyMywxMSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVu
YW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPgogICAgIGlubGluZSB0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Okxvb2t1
cFR5cGUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+Ojpsb29rdXBGb3JXcml0aW5nKGNvbnN0IFQmIGtleSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3RhYmxlKTsKLSAgICAgICAgY2hlY2tLZXk8VCwgSGFzaFRyYW5zbGF0
b3I+KGtleSk7CisgICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCiAgICAg
ICAgIGludCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7CkBAIC01
NzQsMTEgKzU3NSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPgogICAgIGlubGluZSB0eXBl
bmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OkZ1bGxMb29rdXBUeXBlIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRy
YWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6ZnVsbExvb2t1cEZvcldy
aXRpbmcoY29uc3QgVCYga2V5KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdGFibGUpOwotICAg
ICAgICBjaGVja0tleTxULCBIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICAgICAgY2hlY2tLZXk8
SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKICAgICAgICAgaW50IGsgPSAwOwogICAgICAgICBWYWx1
ZVR5cGUqIHRhYmxlID0gbV90YWJsZTsKQEAgLTY1MSwxMCArNjUyLDEwIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJh
aXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXh0cmEsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYT4KICAgICBpbmxpbmUg
cGFpcjx0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46Oml0ZXJhdG9yLCBib29sPiBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmFkZChj
b25zdCBUJiBrZXksIGNvbnN0IEV4dHJhJiBleHRyYSkKICAgICB7Ci0gICAgICAgIGNoZWNrS2V5
PFQsIEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRv
cj4oa2V5KTsKIAogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CiAKQEAgLTczNiwxMCAr
NzM3LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXh0cmEsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeHRyYT4KICAgICBpbmxpbmUgcGFpcjx0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Oml0ZXJhdG9yLCBi
b29sPiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46OmFkZFBhc3NpbmdIYXNoQ29kZShjb25zdCBUJiBrZXksIGNvbnN0IEV4
dHJhJiBleHRyYSkKICAgICB7Ci0gICAgICAgIGNoZWNrS2V5PFQsIEhhc2hUcmFuc2xhdG9yPihr
ZXkpOworICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAogICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKCk7CiAKQEAgLTc0OCw3ICs3NDksNyBAQCBuYW1lc3BhY2UgV1RG
IHsKIAogICAgICAgICBpbnRlcm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogCi0gICAgICAg
IEZ1bGxMb29rdXBUeXBlIGxvb2t1cFJlc3VsdCA9IGZ1bGxMb29rdXBGb3JXcml0aW5nPFQsIEhh
c2hUcmFuc2xhdG9yPihrZXkpOworICAgICAgICBGdWxsTG9va3VwVHlwZSBsb29rdXBSZXN1bHQg
PSBmdWxsTG9va3VwRm9yV3JpdGluZzxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAogICAgICAgICBW
YWx1ZVR5cGUqIGVudHJ5ID0gbG9va3VwUmVzdWx0LmZpcnN0LmZpcnN0OwogICAgICAgICBib29s
IGZvdW5kID0gbG9va3VwUmVzdWx0LmZpcnN0LnNlY29uZDsKQEAgLTc5NCwxMyArNzk1LDEzIEBA
IG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IAogICAgIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aXRl
cmF0b3IgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIGtleSkKICAgICB7CiAgICAgICAgIGlmICgh
bV90YWJsZSkKICAgICAgICAgICAgIHJldHVybiBlbmQoKTsKIAotICAgICAgICBWYWx1ZVR5cGUq
IGVudHJ5ID0gbG9va3VwPFQsIEhhc2hUcmFuc2xhdG9yPihrZXkpOworICAgICAgICBWYWx1ZVR5
cGUqIGVudHJ5ID0gbG9va3VwPEhhc2hUcmFuc2xhdG9yPihrZXkpOwogICAgICAgICBpZiAoIWVu
dHJ5KQogICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwogCkBAIC04MDgsMTMgKzgwOSwxMyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiAKICAgICB0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNvbnN0
X2l0ZXJhdG9yIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6ZmluZChjb25zdCBUJiBrZXkpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAgICAgICByZXR1cm4gZW5kKCk7CiAKLSAgICAgICAg
VmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxU
LCBIYXNoVHJhbnNsYXRvcj4oa2V5KTsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4odGhpcyktPmxvb2t1cDxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKICAg
ICAgICAgaWYgKCFlbnRyeSkKICAgICAgICAgICAgIHJldHVybiBlbmQoKTsKIApAQCAtODIyLDEz
ICs4MjMsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gCiAgICAgYm9vbCBIYXNoVGFi
bGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz46OmNvbnRhaW5zKGNvbnN0IFQmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV90
YWJsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPFQsIEhhc2hUcmFuc2xhdG9yPihrZXkpOwor
ICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxIYXNoVGFibGUqPih0aGlzKS0+bG9va3VwPEhhc2hU
cmFuc2xhdG9yPihrZXkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0xpc3RIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9MaXN0SGFzaFNldC5oCShyZXZpc2lvbiAxMDE2NjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0xpc3RIYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIEJlbmphbWluIFBvdWxhaW4gPGlraXBvdUBnbWFpbC5jb20+CiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMjIsMTEgKzIyLDkgQEAKICNpZm5kZWYgV1RGX0xpc3RIYXNoU2V0X2gKICNkZWZp
bmUgV1RGX0xpc3RIYXNoU2V0X2gKIAotI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKICNpbmNsdWRl
ICJIYXNoU2V0LmgiCiAjaW5jbHVkZSAiT3duUHRyLmgiCiAjaW5jbHVkZSAiUGFzc093blB0ci5o
IgotI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDIs
OCArNDAsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnM+IGNsYXNzIExp
c3RIYXNoU2V0OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IElkZW50aXR5RXh0
cmFjdG9yOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KICAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhj
b25zdCBMaXN0SGFzaFNldDxWYWx1ZSwgaW5saW5lQ2FwYWNpdHksIEhhc2hGdW5jdGlvbnM+Jik7
CiAKQEAgLTU0LDcgKzUwLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgTGlzdEhhc2hTZXRO
b2RlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IHN0cnVjdCBMaXN0SGFzaFNldE5vZGVBbGxvY2F0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVBcmcsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgSGFzaEFyZz4gc3Ry
dWN0IExpc3RIYXNoU2V0Tm9kZUhhc2hGdW5jdGlvbnM7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoQXJnPiBzdHJ1Y3QgTGlzdEhhc2hTZXROb2RlSGFzaEZ1bmN0aW9uczsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoQXJnPiBzdHJ1Y3QgTGlzdEhhc2hTZXRUcmFuc2xhdG9yOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDI1
NiwgdHlwZW5hbWUgSGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlQXJnPjo6SGFz
aD4gY2xhc3MgTGlzdEhhc2hTZXQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
QEAgLTYzLDExICs2MSwxMiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiBMaXN0
SGFzaFNldE5vZGVBbGxvY2F0b3I8VmFsdWVBcmcsIGlubGluZUNhcGFjaXR5PiBOb2RlQWxsb2Nh
dG9yOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxOb2RlKj4gTm9kZVRyYWl0czsKLSAg
ICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldE5vZGVIYXNoRnVuY3Rpb25zPFZhbHVlQXJnLCBpbmxp
bmVDYXBhY2l0eSwgSGFzaEFyZz4gTm9kZUhhc2g7CisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hT
ZXROb2RlSGFzaEZ1bmN0aW9uczxIYXNoQXJnPiBOb2RlSGFzaDsKKyAgICAgICAgdHlwZWRlZiBM
aXN0SGFzaFNldFRyYW5zbGF0b3I8SGFzaEFyZz4gQmFzZVRyYW5zbGF0b3I7CiAKLSAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGU8Tm9kZSosIE5vZGUqLCBJZGVudGl0eUV4dHJhY3RvcjxOb2RlKj4s
IE5vZGVIYXNoLCBOb2RlVHJhaXRzLCBOb2RlVHJhaXRzPiBJbXBsVHlwZTsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxOb2RlKiwgTm9kZSosIElkZW50aXR5RXh0cmFjdG9yPE5v
ZGUqPiwgTm9kZUhhc2gsIE5vZGVUcmFpdHMsIE5vZGVUcmFpdHM+IEltcGxUeXBlSXRlcmF0b3I7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxOb2RlKiwgTm9kZSosIElk
ZW50aXR5RXh0cmFjdG9yPE5vZGUqPiwgTm9kZUhhc2gsIE5vZGVUcmFpdHMsIE5vZGVUcmFpdHM+
IEltcGxUeXBlQ29uc3RJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8Tm9kZSos
IE5vZGUqLCBJZGVudGl0eUV4dHJhY3RvciwgTm9kZUhhc2gsIE5vZGVUcmFpdHMsIE5vZGVUcmFp
dHM+IEltcGxUeXBlOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPE5vZGUqLCBO
b2RlKiwgSWRlbnRpdHlFeHRyYWN0b3IsIE5vZGVIYXNoLCBOb2RlVHJhaXRzLCBOb2RlVHJhaXRz
PiBJbXBsVHlwZUl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0
b3I8Tm9kZSosIE5vZGUqLCBJZGVudGl0eUV4dHJhY3RvciwgTm9kZUhhc2gsIE5vZGVUcmFpdHMs
IE5vZGVUcmFpdHM+IEltcGxUeXBlQ29uc3RJdGVyYXRvcjsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hBcmcgSGFzaEZ1bmN0aW9uczsKIApAQCAtMTE3LDEyICsxMTYsMTQgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSB0aGF0IGZpbmRz
IHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCiAgICAgICAgIC8vIHdpdGggc29t
ZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24uCiAgICAg
ICAgIC8vIFRoZSBIYXNoVHJhbnNsYXRvciBpbnRlcmZhY2UgaXMgZGVmaW5lZCBpbiBIYXNoU2V0
LgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSB0
ZW1wbGF0ZSBhcmd1bWVudHMgc28gdGhhdCBjYWxsZXJzCisgICAgICAgIC8vIGNhbiBqdXN0IHBh
c3MgdGhlIHRyYW5zbGF0b3IgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IGl0ZXJhdG9yIGZpbmQo
Y29uc3QgVCYpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvcj4gY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBib29sIGNvbnRhaW5z
KGNvbnN0IFQmKSBjb25zdDsKIAotICAgICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFp
ciBvZiBhbiBpdGVyYXRvciB0byB0aGUgbmV3IHZhbHVlJ3MgbG9jYXRpb24sIAotICAgICAgICAv
LyBhbmQgYSBib29sIHRoYXQgaXMgdHJ1ZSBpZiBhbiBuZXcgZW50cnkgd2FzIGFkZGVkCisgICAg
ICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgYWRkIGlzIGEgcGFpciBvZiBhbiBpdGVyYXRvciB0
byB0aGUgbmV3IHZhbHVlJ3MgbG9jYXRpb24sIAorICAgICAgICAvLyBhbmQgYSBib29sIHRoYXQg
aXMgdHJ1ZSBpZiBhbiBuZXcgZW50cnkgd2FzIGFkZGVkLgogICAgICAgICBwYWlyPGl0ZXJhdG9y
LCBib29sPiBhZGQoY29uc3QgVmFsdWVUeXBlJik7CiAKICAgICAgICAgcGFpcjxpdGVyYXRvciwg
Ym9vbD4gaW5zZXJ0QmVmb3JlKGNvbnN0IFZhbHVlVHlwZSYgYmVmb3JlVmFsdWUsIGNvbnN0IFZh
bHVlVHlwZSYgbmV3VmFsdWUpOwpAQCAtMjUyLDExICsyNTMsOSBAQCBuYW1lc3BhY2UgV1RGIHsK
ICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBIYXNoQXJnPiBzdHJ1Y3QgTGlzdEhhc2hTZXROb2Rl
SGFzaEZ1bmN0aW9ucyB7Ci0gICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXROb2RlPFZhbHVlQXJn
LCBpbmxpbmVDYXBhY2l0eT4gTm9kZTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKE5vZGUqIGNvbnN0JiBrZXkpIHsgcmV0dXJuIEhhc2hBcmc6Omhhc2goa2V5LT5tX3Zh
bHVlKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChOb2RlKiBjb25zdCYgYSwgTm9kZSog
Y29uc3QmIGIpIHsgcmV0dXJuIEhhc2hBcmc6OmVxdWFsKGEtPm1fdmFsdWUsIGItPm1fdmFsdWUp
OyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaEFyZz4gc3RydWN0IExpc3RIYXNoU2V0Tm9k
ZUhhc2hGdW5jdGlvbnMgeworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hBcmc6Omhhc2goa2V5LT5tX3Zh
bHVlKTsgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBUJiBhLCBjb25zdCBUJiBiKSB7IHJldHVybiBIYXNoQXJnOjplcXVhbChhLT5tX3ZhbHVl
LCBiLT5tX3ZhbHVlKTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogICAgIH07CiAKQEAgLTQ4NCwxNyArNDgzLDEzIEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBOb2RlKiBtX3Bvc2l0aW9uOwogICAgIH07CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
PgogICAgIHN0cnVjdCBMaXN0SGFzaFNldFRyYW5zbGF0b3IgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHR5cGVkZWYgTGlzdEhhc2hTZXROb2RlPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHk+IE5v
ZGU7Ci0gICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXROb2RlQWxsb2NhdG9yPFZhbHVlVHlwZSwg
aW5saW5lQ2FwYWNpdHk+IE5vZGVBbGxvY2F0b3I7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBWYWx1ZVR5cGUmIGtleSkgeyByZXR1cm4gSGFzaEZ1bmN0
aW9uczo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKE5vZGUqIGNvbnN0
JiBhLCBjb25zdCBWYWx1ZVR5cGUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEt
Pm1fdmFsdWUsIGIpOyB9Ci0gICAgICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShOb2RlKiYgbG9j
YXRpb24sIGNvbnN0IFZhbHVlVHlwZSYga2V5LCBOb2RlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQm
IGtleSkgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEs
IGNvbnN0IFUmIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEtPm1fdmFsdWUsIGIp
OyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUKiYgbG9jYXRpb24sIGNvbnN0IFUmIGtleSwgY29uc3Qg
ViYgYWxsb2NhdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhdGlvbiA9IG5ldyAoYWxs
b2NhdG9yKSBOb2RlKGtleSk7CisgICAgICAgICAgICBsb2NhdGlvbiA9IG5ldyAoYWxsb2NhdG9y
KSBUKGtleSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC02NDUsOCArNjQwLDcgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBVPgogICAgIGlubGluZSB0eXBlbmFtZSBMaXN0SGFzaFNldDxULCBpbmxpbmVD
YXBhY2l0eSwgVT46Oml0ZXJhdG9yIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5LCBVPjo6
ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgdHlwZWRlZiBMaXN0
SGFzaFNldFRyYW5zbGF0b3I8VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgSGFzaEZ1bmN0aW9u
cz4gVHJhbnNsYXRvcjsKLSAgICAgICAgSW1wbFR5cGVJdGVyYXRvciBpdCA9IG1faW1wbC50ZW1w
bGF0ZSBmaW5kPFZhbHVlVHlwZSwgVHJhbnNsYXRvcj4odmFsdWUpOworICAgICAgICBJbXBsVHlw
ZUl0ZXJhdG9yIGl0ID0gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8QmFzZVRyYW5zbGF0b3I+KHZhbHVl
KTsKICAgICAgICAgaWYgKGl0ID09IG1faW1wbC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiBl
bmQoKTsKICAgICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigqaXQpOyAKQEAgLTY1NSwyOCArNjQ5
LDIzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KICAgICBpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hT
ZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+Ojpjb25zdF9pdGVyYXRvciBMaXN0SGFzaFNldDxULCBp
bmxpbmVDYXBhY2l0eSwgVT46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRUcmFuc2xhdG9yPFZhbHVlVHlwZSwgaW5s
aW5lQ2FwYWNpdHksIEhhc2hGdW5jdGlvbnM+IFRyYW5zbGF0b3I7Ci0gICAgICAgIEltcGxUeXBl
Q29uc3RJdGVyYXRvciBpdCA9IG1faW1wbC50ZW1wbGF0ZSBmaW5kPFZhbHVlVHlwZSwgVHJhbnNs
YXRvcj4odmFsdWUpOworICAgICAgICBJbXBsVHlwZUNvbnN0SXRlcmF0b3IgaXQgPSBtX2ltcGwu
dGVtcGxhdGUgZmluZDxCYXNlVHJhbnNsYXRvcj4odmFsdWUpOwogICAgICAgICBpZiAoaXQgPT0g
bV9pbXBsLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwogICAgICAgICByZXR1cm4g
bWFrZUNvbnN0SXRlcmF0b3IoKml0KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJh
bnNsYXRvcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2xhdG9yPgogICAgIHN0cnVjdCBM
aXN0SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0Tm9kZTxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5PiBOb2RlOwotICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJl
dHVybiBUcmFuc2xhdG9yOjpoYXNoKGtleSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Tm9kZSogY29uc3QmIGEsIGNvbnN0IFQmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEt
Pm1fdmFsdWUsIGIpOyB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEt
Pm1fdmFsdWUsIGIpOyB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgogICAgIGlubGluZSB0eXBlbmFtZSBMaXN0
SGFzaFNldDxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBVPjo6aXRlcmF0b3IgTGlzdEhhc2hT
ZXQ8VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgVT46OmZpbmQoY29uc3QgVCYgdmFsdWUpCiAg
ICAgewotICAgICAgICB0eXBlZGVmIExpc3RIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8VmFsdWVU
eXBlLCBpbmxpbmVDYXBhY2l0eSwgVCwgSGFzaFRyYW5zbGF0b3I+IEFkYXB0ZXI7Ci0gICAgICAg
IEltcGxUeXBlQ29uc3RJdGVyYXRvciBpdCA9IG1faW1wbC50ZW1wbGF0ZSBmaW5kPFQsIEFkYXB0
ZXI+KHZhbHVlKTsKKyAgICAgICAgSW1wbFR5cGVDb25zdEl0ZXJhdG9yIGl0ID0gbV9pbXBsLnRl
bXBsYXRlIGZpbmQ8TGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4g
Pih2YWx1ZSk7CiAgICAgICAgIGlmIChpdCA9PSBtX2ltcGwuZW5kKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZW5kKCk7CiAgICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKml0KTsKQEAgLTY4Niw4
ICs2NzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvcj4KICAgICBpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hTZXQ8VmFs
dWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgVT46OmNvbnN0X2l0ZXJhdG9yIExpc3RIYXNoU2V0PFZh
bHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdAog
ICAgIHsKLSAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVl
VHlwZSwgaW5saW5lQ2FwYWNpdHksIFQsIEhhc2hUcmFuc2xhdG9yPiBBZGFwdGVyOwotICAgICAg
ICBJbXBsVHlwZUNvbnN0SXRlcmF0b3IgaXQgPSBtX2ltcGwudGVtcGxhdGUgZmluZDxULCBBZGFw
dGVyPih2YWx1ZSk7CisgICAgICAgIEltcGxUeXBlQ29uc3RJdGVyYXRvciBpdCA9IG1faW1wbC50
ZW1wbGF0ZSBmaW5kPExpc3RIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+
ID4odmFsdWUpOwogICAgICAgICBpZiAoaXQgPT0gbV9pbXBsLmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIGVuZCgpOwogICAgICAgICByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IoKml0KTsKQEAg
LTY5NywyMiArNjg1LDE5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgogICAgIGlubGluZSBib29sIExpc3RIYXNoU2V0
PFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+Ojpjb250YWlucyhjb25zdCBUJiB2YWx1ZSkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
cjxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBULCBIYXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsK
LSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxULCBBZGFwdGVyPih2YWx1
ZSk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8TGlzdEhhc2hTZXRU
cmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4gPih2YWx1ZSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgog
ICAgIGlubGluZSBib29sIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5LCBVPjo6Y29udGFp
bnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHR5cGVkZWYg
TGlzdEhhc2hTZXRUcmFuc2xhdG9yPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIEhhc2hGdW5j
dGlvbnM+IFRyYW5zbGF0b3I7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFp
bnM8VmFsdWVUeXBlLCBUcmFuc2xhdG9yPih2YWx1ZSk7CisgICAgICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8QmFzZVRyYW5zbGF0b3I+KHZhbHVlKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIFU+CiAg
ICAgcGFpcjx0eXBlbmFtZSBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwgVT46Oml0ZXJh
dG9yLCBib29sPiBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwgVT46OmFkZChjb25zdCBW
YWx1ZVR5cGUgJnZhbHVlKQogICAgIHsKLSAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldFRyYW5z
bGF0b3I8VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgSGFzaEZ1bmN0aW9ucz4gVHJhbnNsYXRv
cjsKLSAgICAgICAgcGFpcjx0eXBlbmFtZSBJbXBsVHlwZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3Vs
dCA9IG1faW1wbC50ZW1wbGF0ZSBhZGQ8VmFsdWVUeXBlLCBOb2RlQWxsb2NhdG9yKiwgVHJhbnNs
YXRvcj4odmFsdWUsIG1fYWxsb2NhdG9yLmdldCgpKTsKKyAgICAgICAgcGFpcjx0eXBlbmFtZSBJ
bXBsVHlwZTo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1faW1wbC50ZW1wbGF0ZSBhZGQ8QmFz
ZVRyYW5zbGF0b3I+KHZhbHVlLCBtX2FsbG9jYXRvci5nZXQoKSk7CiAgICAgICAgIGlmIChyZXN1
bHQuc2Vjb25kKQogICAgICAgICAgICAgYXBwZW5kTm9kZSgqcmVzdWx0LmZpcnN0KTsKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1ha2VJdGVyYXRvcigqcmVzdWx0LmZpcnN0KSwgcmVz
dWx0LnNlY29uZCk7CkBAIC03MjEsOCArNzA2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgogICAg
IHBhaXI8dHlwZW5hbWUgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjppdGVyYXRv
ciwgYm9vbD4gTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjppbnNlcnRCZWZvcmUo
aXRlcmF0b3IgaXQsIGNvbnN0IFZhbHVlVHlwZSYgbmV3VmFsdWUpCiAgICAgewotICAgICAgICB0
eXBlZGVmIExpc3RIYXNoU2V0VHJhbnNsYXRvcjxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBI
YXNoRnVuY3Rpb25zPiBUcmFuc2xhdG9yOwotICAgICAgICBwYWlyPHR5cGVuYW1lIEltcGxUeXBl
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9pbXBsLnRlbXBsYXRlIGFkZDxWYWx1ZVR5cGUs
IE5vZGVBbGxvY2F0b3IqLCBUcmFuc2xhdG9yPihuZXdWYWx1ZSwgbV9hbGxvY2F0b3IuZ2V0KCkp
OworICAgICAgICBwYWlyPHR5cGVuYW1lIEltcGxUeXBlOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0
ID0gbV9pbXBsLnRlbXBsYXRlIGFkZDxCYXNlVHJhbnNsYXRvcj4obmV3VmFsdWUsIG1fYWxsb2Nh
dG9yLmdldCgpKTsKICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKGl0Lm5vZGUoKSwgKnJlc3VsdC5maXJzdCk7CiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihtYWtlSXRlcmF0b3IoKnJlc3VsdC5maXJzdCksIHJlc3VsdC5zZWNvbmQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHJIYXNoTWFwLmgJKHJldmlz
aW9uIDEwMTY2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmUHRySGFzaE1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyNyArMjMsMTEgQEAK
IAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICAvLyBUaGlzIHNwZWNpYWxpemF0aW9uIGlzIGEgZGly
ZWN0IGNvcHkgb2YgSGFzaE1hcCwgd2l0aCBvdmVybG9hZGVkIGZ1bmN0aW9ucworICAgIC8vIFRo
aXMgc3BlY2lhbGl6YXRpb24gaXMgYSBjb3B5IG9mIEhhc2hNYXAgZm9yIHVzZSB3aXRoIFJlZlB0
ciBrZXlzLCB3aXRoIG92ZXJsb2FkZWQgZnVuY3Rpb25zCiAgICAgLy8gdG8gYWxsb3cgZm9yIGxv
b2t1cCBieSBwb2ludGVyIGluc3RlYWQgb2YgUmVmUHRyLCBhdm9pZGluZyByZWYtY291bnQgY2h1
cm4uCiAgICAgCi0gICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRoYXQgZG9lc24ndCBy
ZXF1aXJlIGFuIGVudGlyZSBjb3B5IG9mIHRoZSBIYXNoTWFwIHRlbXBsYXRlLgorICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBkbyB0aGlzIHdpdGggdHJhaXRzIHRoYXQgZG9lc24ndCByZXF1
aXJlIGEgY29weSBvZiB0aGUgSGFzaE1hcCB0ZW1wbGF0ZS4KICAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBSYXdLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHJh
aXRzLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zPgotICAgIHN0cnVjdCBSZWZQdHJIYXNoTWFwUmF3
S2V5VHJhbnNsYXRvciB7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUeXBlOjpmaXJz
dF90eXBlIEtleVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUeXBlOjpzZWNv
bmRfdHlwZSBNYXBwZWRUeXBlOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRz
OjpGaXJzdFRyYWl0cyBLZXlUcmFpdHM7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVU
cmFpdHM6OlNlY29uZFRyYWl0cyBNYXBwZWRUcmFpdHM7Ci0KLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goUmF3S2V5VHlwZSBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5
KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXlUeXBlJiBhLCBSYXdLZXlU
eXBlIGIpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFsKGEsIGIpOyB9Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShWYWx1ZVR5cGUmIGxvY2F0aW9uLCBSYXdLZXlUeXBlIGtleSwg
Y29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2NhdGlv
bi5maXJzdCA9IGtleTsKLSAgICAgICAgICAgIGxvY2F0aW9uLnNlY29uZCA9IG1hcHBlZDsKLSAg
ICAgICAgfQotICAgIH07Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNYXBw
ZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzQXJnPgogICAgIGNsYXNzIEhhc2hNYXA8UmVmUHRyPFQ+LCBNYXBwZWRBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVkVHJhaXRzQXJnPiB7CiAgICAgICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksMTMgKzQzLDE3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBl
OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBjb25zdCBNYXBwZWRUeXBlJiBNYXBw
ZWRQYXNzSW5UeXBlOworICAgICAgICB0eXBlZGVmIE1hcHBlZFR5cGUgTWFwcGVkUGFzc091dFR5
cGU7CisgICAgICAgIHR5cGVkZWYgTWFwcGVkVHlwZSBNYXBwZWRQZWVrVHlwZTsKKyAgICAgICAg
CiAgICAgICAgIHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwogCiAgICAgICAgIHR5cGVk
ZWYgSGFzaFRhYmxlPEtleVR5cGUsIFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPFZhbHVl
VHlwZT4sCiAgICAgICAgICAgICBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgS2V5VHJhaXRz
PiBIYXNoVGFibGVUeXBlOwogCi0gICAgICAgIHR5cGVkZWYgUmVmUHRySGFzaE1hcFJhd0tleVRy
YW5zbGF0b3I8UmF3S2V5VHlwZSwgVmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgSGFzaEZ1bmN0aW9u
cz4KLSAgICAgICAgICAgIFJhd0tleVRyYW5zbGF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cFRyYW5zbGF0b3I8VmFsdWVUcmFpdHMsIEhhc2hGdW5jdGlvbnM+CisgICAgICAgICAgICBUcmFu
c2xhdG9yOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9y
QWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGl0ZXJhdG9yOwpAQCAtODksMzMgKzc3
LDMzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kKFJhd0tl
eVR5cGUpIGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmKSBjb25z
dDsKICAgICAgICAgYm9vbCBjb250YWlucyhSYXdLZXlUeXBlKSBjb25zdDsKLSAgICAgICAgTWFw
cGVkVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OwotICAgICAgICBNYXBwZWRUeXBlIGdl
dChSYXdLZXlUeXBlKSBjb25zdDsKLSAgICAgICAgTWFwcGVkVHlwZSBpbmxpbmVHZXQoUmF3S2V5
VHlwZSkgY29uc3Q7CisgICAgICAgIE1hcHBlZFBlZWtUeXBlIGdldChjb25zdCBLZXlUeXBlJikg
Y29uc3Q7CisgICAgICAgIE1hcHBlZFBlZWtUeXBlIGdldChSYXdLZXlUeXBlKSBjb25zdDsKKyAg
ICAgICAgTWFwcGVkUGVla1R5cGUgaW5saW5lR2V0KFJhd0tleVR5cGUpIGNvbnN0OwogCiAgICAg
ICAgIC8vIHJlcGxhY2VzIHZhbHVlIGJ1dCBub3Qga2V5IGlmIGtleSBpcyBhbHJlYWR5IHByZXNl
bnQKICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8g
dGhlIGtleSBsb2NhdGlvbiwgCiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUg
aWYgYSBuZXcgdmFsdWUgd2FzIGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3Is
IGJvb2w+IHNldChjb25zdCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKLSAgICAgICAg
cGFpcjxpdGVyYXRvciwgYm9vbD4gc2V0KFJhd0tleVR5cGUsIGNvbnN0IE1hcHBlZFR5cGUmKTsg
CisgICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChjb25zdCBLZXlUeXBlJiwgTWFwcGVk
UGFzc0luVHlwZSk7IAorICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQoUmF3S2V5VHlw
ZSwgTWFwcGVkUGFzc0luVHlwZSk7IAogCiAgICAgICAgIC8vIGRvZXMgbm90aGluZyBpZiBrZXkg
aXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpcyBhIHBhaXIgb2Yg
dGhlIGl0ZXJhdG9yIHRvIHRoZSBrZXkgbG9jYXRpb24sIAogICAgICAgICAvLyBhbmQgYSBib29s
ZWFuIHRoYXQncyB0cnVlIGlmIGEgbmV3IHZhbHVlIHdhcyBhY3R1YWxseSBhZGRlZAotICAgICAg
ICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5
cGUmKTsgCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChSYXdLZXlUeXBlLCBjb25z
dCBNYXBwZWRUeXBlJik7IAorICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3Qg
S2V5VHlwZSYsIE1hcHBlZFBhc3NJblR5cGUpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9v
bD4gYWRkKFJhd0tleVR5cGUsIE1hcHBlZFBhc3NJblR5cGUpOyAKIAogICAgICAgICB2b2lkIHJl
bW92ZShjb25zdCBLZXlUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKFJhd0tleVR5cGUpOwog
ICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAot
ICAgICAgICBNYXBwZWRUeXBlIHRha2UoY29uc3QgS2V5VHlwZSYpOyAvLyBlZmZpY2llbnQgY29t
YmluYXRpb24gb2YgZ2V0IHdpdGggcmVtb3ZlCi0gICAgICAgIE1hcHBlZFR5cGUgdGFrZShSYXdL
ZXlUeXBlKTsgLy8gZWZmaWNpZW50IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQorICAg
ICAgICBNYXBwZWRQYXNzT3V0VHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmKTsgLy8gZWZmaWNpZW50
IGNvbWJpbmF0aW9uIG9mIGdldCB3aXRoIHJlbW92ZQorICAgICAgICBNYXBwZWRQYXNzT3V0VHlw
ZSB0YWtlKFJhd0tleVR5cGUpOyAvLyBlZmZpY2llbnQgY29tYmluYXRpb24gb2YgZ2V0IHdpdGgg
cmVtb3ZlCiAKICAgICBwcml2YXRlOgotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxp
bmVBZGQoY29uc3QgS2V5VHlwZSYsIGNvbnN0IE1hcHBlZFR5cGUmKTsKLSAgICAgICAgcGFpcjxp
dGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKFJhd0tleVR5cGUsIGNvbnN0IE1hcHBlZFR5cGUmKTsK
KyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKGNvbnN0IEtleVR5cGUmLCBN
YXBwZWRQYXNzSW5UeXBlKTsKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRk
KFJhd0tleVR5cGUsIE1hcHBlZFBhc3NJblR5cGUpOwogCiAgICAgICAgIEhhc2hUYWJsZVR5cGUg
bV9pbXBsOwogICAgIH07CkBAIC0xNzcsNyArMTY1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywg
dHlwZW5hbWUgWD4KICAgICBpbmxpbmUgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYs
IFcsIFg+OjppdGVyYXRvciBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmZpbmQoUmF3
S2V5VHlwZSBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8
UmF3S2V5VHlwZSwgUmF3S2V5VHJhbnNsYXRvcj4oa2V5KTsKKyAgICAgICAgcmV0dXJuIG1faW1w
bC50ZW1wbGF0ZSBmaW5kPFRyYW5zbGF0b3I+KGtleSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KQEAgLTE4OSw3ICsxNzcsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgog
ICAgIGlubGluZSB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmNvbnN0
X2l0ZXJhdG9yIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6ZmluZChSYXdLZXlUeXBl
IGtleSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZmluZDxS
YXdLZXlUeXBlLCBSYXdLZXlUcmFuc2xhdG9yPihrZXkpOworICAgICAgICByZXR1cm4gbV9pbXBs
LnRlbXBsYXRlIGZpbmQ8VHJhbnNsYXRvcj4oa2V5KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBY
PgpAQCAtMjAxLDI3ICsxODksMjYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4K
ICAgICBpbmxpbmUgYm9vbCBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmNvbnRhaW5z
KFJhd0tleVR5cGUga2V5KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBjb250YWluczxSYXdLZXlUeXBlLCBSYXdLZXlUcmFuc2xhdG9yPihrZXkpOworICAgICAg
ICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPFRyYW5zbGF0b3I+KGtleSk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBpbmxpbmUgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFJl
ZlB0cjxUPiwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8UmVmUHRy
PFQ+LCBVLCBWLCBXLCBYPjo6aW5saW5lQWRkKGNvbnN0IEtleVR5cGUmIGtleSwgY29uc3QgTWFw
cGVkVHlwZSYgbWFwcGVkKSAKKyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46Omlu
bGluZUFkZChjb25zdCBLZXlUeXBlJiBrZXksIE1hcHBlZFBhc3NJblR5cGUgbWFwcGVkKSAKICAg
ICB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcFRyYW5zbGF0b3I8VmFsdWVUeXBlLCBWYWx1ZVRy
YWl0cywgSGFzaEZ1bmN0aW9ucz4gVHJhbnNsYXRvclR5cGU7Ci0gICAgICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgYWRkPEtleVR5cGUsIE1hcHBlZFR5cGUsIFRyYW5zbGF0b3JUeXBlPihrZXks
IG1hcHBlZCk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPFRyYW5zbGF0b3I+
KGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGluZSBwYWly
PHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+
Ci0gICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjppbmxpbmVBZGQoUmF3S2V5VHlw
ZSBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkgCisgICAgSGFzaE1hcDxSZWZQdHI8VD4s
IFUsIFYsIFcsIFg+OjppbmxpbmVBZGQoUmF3S2V5VHlwZSBrZXksIE1hcHBlZFBhc3NJblR5cGUg
bWFwcGVkKSAKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPFJhd0tl
eVR5cGUsIE1hcHBlZFR5cGUsIFJhd0tleVRyYW5zbGF0b3I+KGtleSwgbWFwcGVkKTsKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8VHJhbnNsYXRvcj4oa2V5LCBtYXBwZWQpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFJlZlB0
cjxUPiwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8UmVmUHRyPFQ+
LCBVLCBWLCBXLCBYPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYg
bWFwcGVkKSAKKyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OnNldChjb25zdCBL
ZXlUeXBlJiBrZXksIE1hcHBlZFBhc3NJblR5cGUgbWFwcGVkKSAKICAgICB7CiAgICAgICAgIHBh
aXI8aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAg
ICAgIGlmICghcmVzdWx0LnNlY29uZCkgewpAQCAtMjMzLDcgKzIyMCw3IEBAIG5hbWVzcGFjZSBX
VEYgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBwYWlyPHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRy
PFQ+LCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxSZWZQdHI8VD4s
IFUsIFYsIFcsIFg+OjpzZXQoUmF3S2V5VHlwZSBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBl
ZCkgCisgICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjpzZXQoUmF3S2V5VHlwZSBr
ZXksIE1hcHBlZFBhc3NJblR5cGUgbWFwcGVkKSAKICAgICB7CiAgICAgICAgIHBhaXI8aXRlcmF0
b3IsIGJvb2w+IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICgh
cmVzdWx0LnNlY29uZCkgewpAQCAtMjQ1LDIwICsyMzIsMjAgQEAgbmFtZXNwYWNlIFdURiB7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUs
IFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwg
VywgWD46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkK
KyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmFkZChjb25zdCBLZXlUeXBlJiBr
ZXksIE1hcHBlZFBhc3NJblR5cGUgbWFwcGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlubGlu
ZUFkZChrZXksIG1hcHBlZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBwYWlyPHR5
cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0g
ICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjphZGQoUmF3S2V5VHlwZSBrZXksIGNv
bnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkKKyAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywg
WD46OmFkZChSYXdLZXlUeXBlIGtleSwgTWFwcGVkUGFzc0luVHlwZSBtYXBwZWQpCiAgICAgewog
ICAgICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBl
bmFtZSBNYXBwZWRUcmFpdHM+Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYs
IFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBlZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0
cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkUGVla1R5cGUKICAgICBIYXNoTWFw
PFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QKICAgICB7CiAgICAgICAgIFZhbHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhh
c2hUYWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1cChrZXkpOwpAQCAtMjY4LDE3ICsyNTUsMTcgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotICAg
IHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBw
ZWRUeXBlCisgICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRy
YWl0cz46Ok1hcHBlZFBlZWtUeXBlCiAgICAgaW5saW5lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoUmF3S2V5VHlwZSBrZXkpIGNvbnN0CiAgICAg
ewotICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4o
bV9pbXBsKS50ZW1wbGF0ZSBsb29rdXA8UmF3S2V5VHlwZSwgUmF3S2V5VHJhbnNsYXRvcj4oa2V5
KTsKKyAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+
KG1faW1wbCkudGVtcGxhdGUgbG9va3VwPFRyYW5zbGF0b3I+KGtleSk7CiAgICAgICAgIGlmICgh
ZW50cnkpCiAgICAgICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCk7CiAg
ICAgICAgIHJldHVybiBlbnRyeS0+c2Vjb25kOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVk
VHJhaXRzPjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRQZWVrVHlwZQogICAgIEhhc2hNYXA8UmVmUHRyPFQ+
LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoUmF3S2V5VHlwZSBrZXkpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gaW5saW5lR2V0KGtleSk7CkBAIC0zMTIsMjcgKzI5OSwyNyBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci0gICAg
dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBl
ZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVkVHJh
aXRzPjo6TWFwcGVkUGFzc091dFR5cGUKICAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywg
TWFwcGVkVHJhaXRzPjo6dGFrZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewogICAgICAgICAv
LyBUaGlzIGNhbiBwcm9iYWJseSBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IHRvIGF2b2lkIHJlZi9k
ZXJlZiBjaHVybi4KICAgICAgICAgaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgICAgIGlm
IChpdCA9PSBlbmQoKSkKICAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OmVtcHR5VmFs
dWUoKTsKLSAgICAgICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBl
ZFRyYWl0cz46Ok1hcHBlZFR5cGUgcmVzdWx0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgTWFwcGVk
UGFzc091dFR5cGUgcmVzdWx0ID0gaXQtPnNlY29uZDsKICAgICAgICAgcmVtb3ZlKGl0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+
Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46
Ok1hcHBlZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFw
cGVkVHJhaXRzPjo6TWFwcGVkUGFzc091dFR5cGUKICAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwg
ViwgVywgTWFwcGVkVHJhaXRzPjo6dGFrZShSYXdLZXlUeXBlIGtleSkKICAgICB7CiAgICAgICAg
IC8vIFRoaXMgY2FuIHByb2JhYmx5IGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgdG8gYXZvaWQgcmVm
L2RlcmVmIGNodXJuLgogICAgICAgICBpdGVyYXRvciBpdCA9IGZpbmQoa2V5KTsKICAgICAgICAg
aWYgKGl0ID09IGVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6ZW1wdHlW
YWx1ZSgpOwotICAgICAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFw
cGVkVHJhaXRzPjo6TWFwcGVkVHlwZSByZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICBNYXBw
ZWRQYXNzT3V0VHlwZSByZXN1bHQgPSBpdC0+c2Vjb25kOwogICAgICAgICByZW1vdmUoaXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
</data>
<flag name="review"
          id="117015"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>