<?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>55376</bug_id>
          
          <creation_ts>2011-02-28 07:40:05 -0800</creation_ts>
          <short_desc>IndexedDB: Move SQL code, especially for cursors, to IDBBackingStore</short_desc>
          <delta_ts>2011-03-03 11:21:24 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55443</dependson>
    
    <dependson>55692</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>359044</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-28 07:40:05 -0800</bug_when>
    <thetext>IndexedDB: Move SQL code, especially for cursors, to IDBBackingStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359052</commentid>
    <comment_count>1</comment_count>
      <attachid>84060</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-28 07:50:54 -0800</bug_when>
    <thetext>Created attachment 84060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359053</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-28 07:55:37 -0800</bug_when>
    <thetext>This is another fat patch, but again, most of it is just code being moved around. I believe this should be the last fat patch in this refactoring.

I expect function signatures and the classes concerning cursors are most interesting to focus on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359639</commentid>
    <comment_count>3</comment_count>
      <attachid>84060</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-28 20:29:58 -0800</bug_when>
    <thetext>Comment on attachment 84060
Patch

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

*sigh*...I should have read this before I started working on my patch.  Our work is majorly overlapping.  I guess it&apos;s a good thing that we made a lot of very similar changes though.

Please make these changes and otherwise try to make it look as similar to https://bugs.webkit.org/show_bug.cgi?id=55443 as possible.  If you do that and get Andrei to sign off on it then r=me.  Otherwise I&apos;ll try to review it early tomorrow if possible.

&gt; Source/WebCore/storage/IDBBackingStore.cpp:705
&gt; +        if (key &amp;&amp; !key-&gt;isEqual(m_currentKey.get()))

Uh oh...this is wrong.  We&apos;re supposed to loop while less than, and stop if something is greater than or equal.  We need to fix this for m11.

&gt; Source/WebCore/storage/IDBBackingStore.h:79
&gt; +    class Cursor : public RefCounted&lt;Cursor&gt; {

Like I mentioned elsewhere, I&apos;m not sure it makes sense to have all of these sub-classes...I think it just makes life more difficult for us.

&gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:64
&gt; +    switch (m_cursorType) {

This is ugly...there&apos;s no way to do some template magic or something?  Why can&apos;t we just have one interface and have stuff assert we don&apos;t call methods that don&apos;t exist?  (That&apos;s what I did in my patch.)

&gt; Source/WebCore/storage/IDBCursorBackendImpl.h:53
&gt; +    enum CursorType {

Put on IDBCursorBackendInterface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359893</commentid>
    <comment_count>4</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-03-01 07:49:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 84060 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84060&amp;action=review
&gt; 
&gt; *sigh*...I should have read this before I started working on my patch.  Our work is majorly overlapping.  I guess it&apos;s a good thing that we made a lot of very similar changes though.
&gt; 
&gt; Please make these changes and otherwise try to make it look as similar to https://bugs.webkit.org/show_bug.cgi?id=55443 as possible.  If you do that and get Andrei to sign off on it then r=me.  Otherwise I&apos;ll try to review it early tomorrow if possible.


No worries, I&apos;ll let your patch land and then rebase off of it. I don&apos;t think there&apos;s any reason to rush this.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.cpp:705
&gt; &gt; +        if (key &amp;&amp; !key-&gt;isEqual(m_currentKey.get()))
&gt; 
&gt; Uh oh...this is wrong.  We&apos;re supposed to loop while less than, and stop if something is greater than or equal.  We need to fix this for m11.

Ah, well spotted. I noticed you filed crbug.com/74500 for this.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.h:79
&gt; &gt; +    class Cursor : public RefCounted&lt;Cursor&gt; {
&gt; 
&gt; Like I mentioned elsewhere, I&apos;m not sure it makes sense to have all of these sub-classes...I think it just makes life more difficult for us.

Yeah, as noted below, I&apos;ll put it all in a common interface.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:64
&gt; &gt; +    switch (m_cursorType) {
&gt; 
&gt; This is ugly...there&apos;s no way to do some template magic or something?  Why can&apos;t we just have one interface and have stuff assert we don&apos;t call methods that don&apos;t exist?  (That&apos;s what I did in my patch.)

Yes, I&apos;ll do that. Your patch fixes the problem that value() could return different types (a value or a key) depending on cursor type, so this should all work out nicely.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.h:53
&gt; &gt; +    enum CursorType {
&gt; 
&gt; Put on IDBCursorBackendInterface

Cool, I&apos;ll just use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360778</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-03-02 07:18:46 -0800</bug_when>
    <thetext>Uploading new patch rebased on top of Jeremy&apos;s patch in Bug 55443, and addressing Jeremy&apos;s comments.

Expecting purple ews bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360779</commentid>
    <comment_count>6</comment_count>
      <attachid>84417</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-03-02 07:19:15 -0800</bug_when>
    <thetext>Created attachment 84417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361135</commentid>
    <comment_count>7</comment_count>
      <attachid>84417</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-02 15:51:46 -0800</bug_when>
    <thetext>Comment on attachment 84417
Patch

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

r=me

&gt; Source/WebCore/storage/IDBBackingStore.cpp:669
&gt; +class CursorImplCommon : public IDBBackingStore::Cursor {

I feel like all of this is a bit overly complicated.  You&apos;re still joining on index data for index.keyCursors, which is the primary reason I could imagine this logic becoming more complicated.  Maybe take a stab at simplifying a bit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361467</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-03-03 02:32:31 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 84417 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84417&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.cpp:669
&gt; &gt; +class CursorImplCommon : public IDBBackingStore::Cursor {
&gt; 
&gt; I feel like all of this is a bit overly complicated.  You&apos;re still joining on index data for index.keyCursors, which is the primary reason I could imagine this logic becoming more complicated.  Maybe take a stab at simplifying a bit?

I&apos;ll land this now, and try to simplify a bit in a follow-up patch.

Which part is it that you find complicated? That there are different classes for the different kinds of cursors? Or just that they could share code in a more elegant way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361469</commentid>
    <comment_count>9</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-03-03 02:38:01 -0800</bug_when>
    <thetext>Committed r80220: &lt;http://trac.webkit.org/changeset/80220&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84060</attachid>
            <date>2011-02-28 07:50:54 -0800</date>
            <delta_ts>2011-03-02 07:19:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55376-20110228155052.patch</filename>
            <type>text/plain</type>
            <size>62416</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ODBkNmFkNjFjODNkNDViOWE5NTIzYzVhMDFlN2UxMGQ5NmVkMThkLi43
NzBmYjQ1Y2UwNWJkYzhhOGVlYTdkZmY2ODgwY2Y0NzJhYWQ2OTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzcgQEAKKzIwMTEtMDItMjggIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRl
eGVkREI6IE1vdmUgU1FMIGNvZGUsIGVzcGVjaWFsbHkgZm9yIGN1cnNvcnMsIHRvIElEQkJhY2tp
bmdTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUzNzYKKworICAgICAgICBNb3ZlIFNRTCBjb2RlIGZyb20gSURCS2V5LCBJREJLZXlSYW5nZSwg
SURCSW5kZXhCYWNrZW5kSW1wbCwKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCwg
YW5kIGVzcGVjaWFsbHkgSURCQ3Vyc29yQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IGZ1
bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjp1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjprZXlGcm9tUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cnNvckltcGxDb21tb246OkN1cnNvckltcGxDb21tb246OmNvbnRpbnVlSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3Vyc29ySW1wbENvbW1vbjo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29ySW1wbENvbW1v
bjo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpvYmplY3RTdG9yZURhdGFJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3JJbXBsQ29tbW9uOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJzb3JJbXBsQ29tbW9uOjpPYmplY3RTdG9yZUN1cnNvckltcGw6
OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvckltcGxDb21tb246Ok9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9i
amVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3VycmVudFJvd0V4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmRleEtleUN1cnNvckltcGw6OkluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmRleEtleUN1cnNvckltcGw6OmluZGV4RGF0YUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkluZGV4S2V5Q3Vyc29ySW1wbDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vy
c29ySW1wbDo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvcklt
cGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJ
bXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBs
OjpJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpp
bmRleERhdGFJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnByaW1hcnlLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRl
eEN1cnNvckltcGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3Jl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6fkN1cnNvcik6
CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgICogc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlB
bGxvd2VkKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzRXF1
YWwpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJL
ZXlSYW5nZS5jcHA6CisgICAgICAgICogc3RvcmFnZS9JREJLZXlSYW5nZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwp
OgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorCiAyMDEx
LTAyLTI4ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU3M2IzNWZiYmM4OGQ1OTcxYmFlNjU5MDc4YTU1NWYz
NTQ1YmRkNDQuLjFjODhlYmU3NmU0OGM1ZWI2N2Q5MjYxOTNmOGYxNzdkMmNlMTllMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNp
bmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgog
I2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCkBAIC0zMzYsNiArMzM3LDQyIEBAIHN0YXRp
YyBpbnQgYmluZEtleVRvUXVlcnkoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbiwg
Y29uc3QgSURCS2V5JiBrZXkpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBTdHJpbmcgbG93
ZXJDdXJzb3JXaGVyZUZyYWdtZW50KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgY29tcGFyaXNv
bk9wZXJhdG9yLCBTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1lID0gIiIpCit7CisgICAgc3dpdGNo
IChrZXkudHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJl
dHVybiAiPyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiAiICsgcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleVN0cmluZyAgQU5EICAiOworICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKKyAgICAg
ICAgcmV0dXJuICIoPyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiAiICsgcXVhbGlmaWVkVGFi
bGVOYW1lICsgImtleURhdGUgIE9SIE5PVCAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0
cmluZyBJUyBOVUxMKSAgQU5EICAiOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAg
ICAgICByZXR1cm4gIig/ICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiICIgKyBxdWFsaWZpZWRU
YWJsZU5hbWUgKyAia2V5TnVtYmVyICBPUiAgTk9UICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAi
a2V5U3RyaW5nIElTIE5VTEwgIE9SICBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlE
YXRlIElTIE5VTEwpICBBTkQgICI7CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAg
ICBpZiAoY29tcGFyaXNvbk9wZXJhdG9yID09ICI8IikKKyAgICAgICAgICAgIHJldHVybiAiTk9U
KCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1
YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRh
YmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFORCAgIjsKKyAgICAgICAgcmV0dXJuICIi
OyAvLyBJZiBpdCdzID0sIHRoZSB1cHBlciBib3VuZCBoYWxmIHdpbGwgZG8gdGhlIGNvbnN0cmFp
bmluZy4gSWYgaXQncyA8PSwgdGhlbiB0aGF0J3MgYSBuby1vcC4KKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCitzdGF0aWMgU3RyaW5nIHVwcGVy
Q3Vyc29yV2hlcmVGcmFnbWVudChjb25zdCBJREJLZXkmIGtleSwgU3RyaW5nIGNvbXBhcmlzb25P
cGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFtZSA9ICIiKQoreworICAgIHN3aXRjaCAo
a2V5LnR5cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1
cm4gIigiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyAiICsgY29tcGFyaXNvbk9w
ZXJhdG9yICsgIiA/ICBPUiAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMg
TlVMTCkgIEFORCAgIjsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHJldHVy
biAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSAiICsgY29tcGFyaXNvbk9wZXJh
dG9yICsgIiA/IE9SICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMKSAg
QU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICI7
CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIHJldHVybiAiKCIgKyBxdWFs
aWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8g
T1IgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFORCAgIiAr
IHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlm
aWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiOworICAgIGNhc2UgSURCS2V5
OjpOdWxsVHlwZToKKyAgICAgICAgaWYgKGNvbXBhcmlzb25PcGVyYXRvciA9PSAiPCIpCisgICAg
ICAgICAgICByZXR1cm4gIjAgIT0gMCAgQU5EICAiOworICAgICAgICByZXR1cm4gcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5h
bWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
TnVtYmVyIElTIE5VTEwgIEFORCAgIjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuICIiOworfQorCiBTdHJpbmcgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQogewog
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0
ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyBBTkQgIiArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSkpOwpAQCAtNDE1LDYgKzQ1Miwy
NyBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwogfQogCit2b2lkIElE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCBv
YmplY3RTdG9yZURhdGFJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgb3NRdWVyeShtX2RiLCAi
REVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIGlkID0gPyIpOworICAgIGJvb2wgb2sg
PSBvc1F1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBvc1F1ZXJ5LmJp
bmRJbnQ2NCgxLCBvYmplY3RTdG9yZURhdGFJZCk7CisKKyAgICBvayA9IG9zUXVlcnkuc3RlcCgp
ID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworCisgICAgU1FM
aXRlU3RhdGVtZW50IGluZGV4UXVlcnkobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVS
RSBvYmplY3RTdG9yZURhdGFJZCA9ID8iKTsKKyAgICBvayA9IGluZGV4UXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIGluZGV4UXVlcnkuYmluZEludDY0KDEsIG9iamVj
dFN0b3JlRGF0YUlkKTsKKworICAgIG9rID0gaW5kZXhRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0
RG9uZTsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Cit9CisKIGRvdWJsZSBJREJCYWNraW5n
U3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
ICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBtYXgoa2V5TnVtYmVyKSAr
IDEgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EIGtleVN0
cmluZyBJUyBOVUxMIEFORCBrZXlEYXRlIElTIE5VTEwiKTsKQEAgLTQyOSw2ICs0ODcsMjMgQEAg
ZG91YmxlIElEQkJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBv
YmplY3RTdG9yZUlkKQogICAgIHJldHVybiBxdWVyeS5nZXRDb2x1bW5Eb3VibGUoMCk7CiB9CiAK
K2Jvb2wgSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGludDY0X3QmIGZvdW5kT2JqZWN0U3RvcmVE
YXRhSWQpCit7CisgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIGlkIEZST00gT2JqZWN0
U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAiKSArIHdoZXJlU3ludGF4Rm9y
S2V5KGtleSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7CisgICAgYm9v
bCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBxdWVyeS5i
aW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJZCk7CisgICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIs
IGtleSk7CisKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgZm91bmRPYmplY3RTdG9yZURhdGFJZCA9IHF1ZXJ5LmdldENv
bHVtbkludDY0KDApOworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGIsICJTRUxFQ1QgaWQsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9i
amVjdFN0b3JlSWQgPSA/Iik7CkBAIC01MTUsNiArNTkwLDM3MCBAQCBib29sIElEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQp
CiAgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwogfQogCitTdHJpbmcg
SURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYga2V5KQoreworICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQorICAg
ICAgICAgICAgICAgICArICJPYmplY3RTdG9yZURhdGEudmFsdWUgIgorICAgICAgICAgICAgICAg
ICArICJGUk9NIEluZGV4RGF0YSBJTk5FUiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERh
dGEub2JqZWN0U3RvcmVEYXRhSWQgPSBPYmplY3RTdG9yZURhdGEuaWQgIgorICAgICAgICAgICAg
ICAgICArICJXSEVSRSBJbmRleERhdGEuaW5kZXhJZCA9ID8gIEFORCAgIiArIHdoZXJlU3ludGF4
Rm9yS2V5KGtleSwgIkluZGV4RGF0YS4iKQorICAgICAgICAgICAgICAgICArICJPUkRFUiBCWSBJ
bmRleERhdGEuaWQgTElNSVQgMSI7IC8vIE9yZGVyIGJ5IGluc2VydGlvbiBvcmRlciB3aGVuIGFs
bCBlbHNlIGZhaWxzLgorICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBzcWwpOworICAg
IGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VO
VVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgcXVl
cnkuYmluZEludDY0KDEsIGluZGV4SWQpOworICAgIGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBr
ZXkpOworCisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZyBmb3VuZFZhbHVlID0gcXVlcnkuZ2V0Q29sdW1u
QmxvYkFzU3RyaW5nKDApOworICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KTsKKyAgICByZXR1cm4gZm91bmRWYWx1ZTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXlGcm9tUXVlcnkoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGJhc2VDb2x1bW4pCit7
CisgICAgaWYgKHF1ZXJ5LmNvbHVtbkNvdW50KCkgPD0gYmFzZUNvbHVtbikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoIXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uKSkKKyAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKHF1ZXJ5LmdldENvbHVtblRleHQoYmFzZUNv
bHVtbikpOworCisgICAgaWYgKCFxdWVyeS5pc0NvbHVtbk51bGwoYmFzZUNvbHVtbiArIDEpKQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHF1ZXJ5LmdldENvbHVtbkRvdWJsZShi
YXNlQ29sdW1uICsgMSkpOworCisgICAgaWYgKCFxdWVyeS5pc0NvbHVtbk51bGwoYmFzZUNvbHVt
biArIDIpKQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIocXVlcnkuZ2V0Q29s
dW1uRG91YmxlKGJhc2VDb2x1bW4gKyAyKSk7CisKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVO
dWxsKCk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJCYWNraW5nU3RvcmU6OmdldFByaW1h
cnlLZXlWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAg
IFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQorICAgICAgICAgICAgICAgICArICJPYmpl
Y3RTdG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3Rv
cmVEYXRhLmtleU51bWJlciAiCisgICAgICAgICAgICAgICAgICsgIkZST00gSW5kZXhEYXRhIElO
TkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9
IE9iamVjdFN0b3JlRGF0YS5pZCAiCisgICAgICAgICAgICAgICAgICsgIldIRVJFIEluZGV4RGF0
YS5pbmRleElkID0gPyAgQU5EICAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5LCAiSW5kZXhEYXRh
LiIpCisgICAgICAgICAgICAgICAgICsgIk9SREVSIEJZIEluZGV4RGF0YS5pZCBMSU1JVCAxIjsg
Ly8gT3JkZXIgYnkgaW5zZXJ0aW9uIG9yZGVyIHdoZW4gYWxsIGVsc2UgZmFpbHMuCisgICAgU1FM
aXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBh
cmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1F
OiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBxdWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJ
ZCk7CisgICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIsIGtleSk7CisKKyAgICBpZiAocXVlcnku
c3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPElEQktleT4gZm91bmRLZXkgPSBrZXlGcm9tUXVlcnkocXVlcnksIDApOworICAgIEFTU0VS
VChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KTsKKyAgICByZXR1cm4gZm91bmRLZXkucmVs
ZWFzZSgpOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIFN0cmluZyBzcWwgPSBTdHJp
bmcoIlNFTEVDVCBpZCBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkID0gPyBBTkQgIikgKyB3
aGVyZVN5bnRheEZvcktleShrZXkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBz
cWwpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwor
CisgICAgcXVlcnkuYmluZEludDY0KDEsIGluZGV4SWQpOworICAgIGJpbmRLZXlUb1F1ZXJ5KHF1
ZXJ5LCAyLCBrZXkpOworCisgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7
Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBDdXJzb3JJbXBsQ29tbW9uIHsKK3B1YmxpYzoKKyAg
ICBDdXJzb3JJbXBsQ29tbW9uKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5n
IHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3NDb25zdHJhaW50KQorICAgICAgICA6IG1fcXVlcnkoc3Fs
aXRlRGF0YWJhc2UsIHF1ZXJ5KQorICAgICAgICAsIG1fZGIoc3FsaXRlRGF0YWJhc2UpCisgICAg
ICAgICwgbV91bmlxdWVuZXNzQ29uc3RyYWludCh1bmlxdWVuZXNzQ29uc3RyYWludCkKKyAgICB7
CisgICAgfQorICAgIHZpcnR1YWwgfkN1cnNvckltcGxDb21tb24oKSB7fQorCisgICAgYm9vbCBj
b250aW51ZUludGVybmFsKGNvbnN0IElEQktleSopOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ3Vy
cmVudFJvdygpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygpID0gMDsK
KworICAgIFNRTGl0ZVN0YXRlbWVudCBtX3F1ZXJ5OworCitwcm90ZWN0ZWQ6CisgICAgU1FMaXRl
RGF0YWJhc2UmIG1fZGI7CisgICAgYm9vbCBtX3VuaXF1ZW5lc3NDb25zdHJhaW50OworICAgIGlu
dDY0X3QgbV9jdXJyZW50SWQ7CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OworfTsK
KworYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUludGVybmFsKGNvbnN0IElEQktleSog
a2V5KQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChtX3F1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEZJWE1FOiBQdXQg
Y3Vyc29yIGluIHNvbWUga2luZCBvZiBpbnZhbGlkIHN0YXRlIGFmdGVyIHRoaXM/CisKKyAgICAg
ICAgUmVmUHRyPElEQktleT4gb2xkS2V5ID0gbV9jdXJyZW50S2V5OworICAgICAgICBsb2FkQ3Vy
cmVudFJvdygpOworCisgICAgICAgIC8vIFNraXAgaWYgdGhpcyBlbnRyeSBoYXMgYmVlbiBkZWxl
dGVkIGZyb20gdGhlIG9iamVjdCBzdG9yZS4KKyAgICAgICAgaWYgKCFjdXJyZW50Um93RXhpc3Rz
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiBhIGtleSB3YXMgc3Vw
cGxpZWQsIHdlIG11c3QgbG9vcCB1bnRpbCB3ZSBmaW5kIHRoYXQga2V5IChvciBoaXQgdGhlIGVu
ZCkuCisgICAgICAgIGlmIChrZXkgJiYgIWtleS0+aXNFcXVhbChtX2N1cnJlbnRLZXkuZ2V0KCkp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBh
IHVuaXF1ZW5lc3MgY29uc3RyYWludCwgd2UgY2FuIHN0b3Agbm93LgorICAgICAgICBpZiAoIW1f
dW5pcXVlbmVzc0NvbnN0cmFpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCFt
X2N1cnJlbnRLZXktPmlzRXF1YWwob2xkS2V5LmdldCgpKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBPYmplY3RTdG9yZUN1cnNvcklt
cGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiwgcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVDdXJzb3IgeworcHVibGljOgorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVuZXNz
Q29uc3RyYWludCkKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHNxbGl0ZURhdGFiYXNlLCBx
dWVyeSwgdW5pcXVlbmVzc0NvbnN0cmFpbnQpCisgICAgeworICAgIH0KKworICAgIC8vIElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVDdXJzb3IKKyAgICB2aXJ0dWFsIGludDY0X3Qgb2JqZWN0
U3RvcmVEYXRhSWQoKSB7IHJldHVybiBtX2N1cnJlbnRJZDsgfTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CisgICAgdmlydHVhbCBi
b29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkpIHsgcmV0dXJuIGNvbnRpbnVl
SW50ZXJuYWwoa2V5KTsgfQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgorICAgIHZpcnR1YWwg
dm9pZCBsb2FkQ3VycmVudFJvdygpOworICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50Um93RXhpc3Rz
KCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOworfTsKK30gLy8gbmFt
ZXNwYWNlCisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZUN1cnNvcj4g
SURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsK
KyAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKKworICAgIFN0
cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFs
dWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIjsKKyAgICBpZiAobG93ZXJCb3VuZCkKKyAg
ICAgICAgc3FsICs9IGxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2UtPmxvd2VyKCksIHJh
bmdlLT5sb3dlck9wZW4oKSA/ICI8IiA6ICI8PSIpOworICAgIGlmICh1cHBlckJvdW5kKQorICAg
ICAgICBzcWwgKz0gdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFu
Z2UtPnVwcGVyT3BlbigpID8gIjwiIDogIjw9Iik7CisgICAgc3FsICs9ICJvYmplY3RTdG9yZUlk
ID0gPyBPUkRFUiBCWSAiOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQg
fHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUpCisgICAgICAgIHNx
bCArPSAia2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIiOworICAgIGVsc2UKKyAgICAgICAg
c3FsICs9ICJrZXlTdHJpbmcgREVTQywga2V5RGF0ZSBERVNDLCBrZXlOdW1iZXIgREVTQyI7CisK
KyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcg
T2JqZWN0U3RvcmVDdXJzb3JJbXBsKG1fZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6
TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBM
SUNBVEUpKTsKKworICAgIGJvb2wgb2sgPSBjdXJzb3ItPm1fcXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KKworICAgIGludCBjdXJyZW50Q29sdW1uID0gMTsKKyAgICBpZiAobG93
ZXJCb3VuZCkKKyAgICAgICAgY3VycmVudENvbHVtbiArPSBiaW5kS2V5VG9RdWVyeShjdXJzb3It
Pm1fcXVlcnksIGN1cnJlbnRDb2x1bW4sICpyYW5nZS0+bG93ZXIoKSk7CisgICAgaWYgKHVwcGVy
Qm91bmQpCisgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gYmluZEtleVRvUXVlcnkoY3Vyc29yLT5t
X3F1ZXJ5LCBjdXJyZW50Q29sdW1uLCAqcmFuZ2UtPnVwcGVyKCkpOworICAgIGN1cnNvci0+bV9x
dWVyeS5iaW5kSW50NjQoY3VycmVudENvbHVtbiwgb2JqZWN0U3RvcmVJZCk7CisKKyAgICBpZiAo
Y3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiAw
OworCisgICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOworCisgICAgcmV0dXJuIGN1cnNvci5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCit7CisgICAgbV9jdXJyZW50SWQgPSBtX3F1ZXJ5LmdldENvbHVtbkludDY0KDApOworICAg
IG1fY3VycmVudEtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCAxKTsKKyAgICBtX2N1cnJlbnRW
YWx1ZSA9IG1fcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDQpOworfQorCitib29sIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbDo6Y3VycmVudFJvd0V4aXN0cygpCit7CisgICAgU3RyaW5nIHNxbCA9
ICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/IjsKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGIsIHNxbCk7CisKKyAgICBib29sIG9rID0gc3RhdGVt
ZW50LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
CisKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIG1fY3VycmVudElkKTsKKyAgICByZXR1cm4g
c3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Cit9CisKK2NsYXNzIEluZGV4S2V5Q3Vy
c29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uLCBwdWJsaWMgSURCQmFja2luZ1N0b3Jl
OjpJbmRleEtleUN1cnNvciB7CitwdWJsaWM6CisgICAgSW5kZXhLZXlDdXJzb3JJbXBsKFNRTGl0
ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3ND
b25zdHJhaW50KQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24oc3FsaXRlRGF0YWJhc2UsIHF1
ZXJ5LCB1bmlxdWVuZXNzQ29uc3RyYWludCkKKyAgICB7CisgICAgfQorCisgICAgLy8gSURCQmFj
a2luZ1N0b3JlOjpJbmRleEtleUN1cnNvcgorICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJ
ZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5OyB9Cisg
ICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXkpIHsgcmV0
dXJuIGNvbnRpbnVlSW50ZXJuYWwoa2V5KTsgfQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkQ3VycmVudFJvdygpOworICAgIHZpcnR1YWwgYm9vbCBjdXJy
ZW50Um93RXhpc3RzKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50
UHJpbWFyeUtleTsKK307CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpJbmRleEtleUN1
cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgSW5kZXhEYXRhLmlkLCBJbmRl
eERhdGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwg
IikKKyAgICAgICAgICAgICAgICAgKyAoIk9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVj
dFN0b3JlRGF0YS5rZXlEYXRlLCBPYmplY3RTdG9yZURhdGEua2V5TnVtYmVyICIpCisgICAgICAg
ICAgICAgICAgICsgIkZST00gSW5kZXhEYXRhIElOTkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9O
IEluZGV4RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9IE9iamVjdFN0b3JlRGF0YS5pZCBXSEVSRSAi
OworCisgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CisgICAg
Ym9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CisKKyAgICBpZiAobG93
ZXJCb3VuZCkKKyAgICAgICAgc3FsICs9IGxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVudCgqcmFuZ2Ut
Pmxvd2VyKCksIHJhbmdlLT5sb3dlck9wZW4oKSA/ICI8IiA6ICI8PSIsICJJbmRleERhdGEuIik7
CisgICAgaWYgKHVwcGVyQm91bmQpCisgICAgICAgIHNxbCArPSB1cHBlckN1cnNvcldoZXJlRnJh
Z21lbnQoKnJhbmdlLT51cHBlcigpLCByYW5nZS0+dXBwZXJPcGVuKCkgPyAiPCIgOiAiPD0iLCAi
SW5kZXhEYXRhLiIpOworICAgIHNxbCArPSAiSW5kZXhEYXRhLmluZGV4SWQgPSA/IE9SREVSIEJZ
ICI7CisKKyAgICBpZiAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24g
PT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSkKKyAgICAgICAgc3FsICs9ICJJbmRleERh
dGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgSW5k
ZXhEYXRhLmlkIjsKKyAgICBlbHNlCisgICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmlu
ZyBERVNDLCBJbmRleERhdGEua2V5RGF0ZSBERVNDLCBJbmRleERhdGEua2V5TnVtYmVyIERFU0Ms
IEluZGV4RGF0YS5pZCBERVNDIjsKKworICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1
cnNvciA9IGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwobV9kYiwgc3FsLCBkaXJlY3Rp
b24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vy
c29yOjpQUkVWX05PX0RVUExJQ0FURSkpOworCisgICAgYm9vbCBvayA9IGN1cnNvci0+bV9xdWVy
eS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAv
LyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgaW50IGluZGV4Q29sdW1uID0g
MTsKKyAgICBpZiAobG93ZXJCb3VuZCkKKyAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmluZEtleVRv
UXVlcnkoY3Vyc29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT5sb3dlcigpKTsKKyAg
ICBpZiAodXBwZXJCb3VuZCkKKyAgICAgICAgaW5kZXhDb2x1bW4gKz0gYmluZEtleVRvUXVlcnko
Y3Vyc29yLT5tX3F1ZXJ5LCBpbmRleENvbHVtbiwgKnJhbmdlLT51cHBlcigpKTsKKyAgICBjdXJz
b3ItPm1fcXVlcnkuYmluZEludDY0KGluZGV4Q29sdW1uLCBpbmRleElkKTsKKworICAgIGlmIChj
dXJzb3ItPm1fcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7CisgICAgcmV0dXJuIGN1cnNvci5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCit7
CisgICAgbV9jdXJyZW50SWQgPSBtX3F1ZXJ5LmdldENvbHVtbkludDY0KDApOworICAgIG1fY3Vy
cmVudEtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCAxKTsKKyAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDQpOworfQorCitib29sIEluZGV4S2V5Q3Vyc29y
SW1wbDo6Y3VycmVudFJvd0V4aXN0cygpCit7CisgICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQg
RlJPTSBJbmRleERhdGEgV0hFUkUgaWQgPSA/IjsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGIsIHNxbCk7CisKKyAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisKKyAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDEsIG1fY3VycmVudElkKTsKKyAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxSZXN1bHRSb3c7Cit9CisKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJz
b3JJbXBsQ29tbW9uLCBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpJbmRleEN1cnNvciB7CitwdWJs
aWM6CisgICAgSW5kZXhDdXJzb3JJbXBsKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwg
U3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3NDb25zdHJhaW50KQorICAgICAgICA6IEN1cnNv
ckltcGxDb21tb24oc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB1bmlxdWVuZXNzQ29uc3RyYWludCkK
KyAgICB7CisgICAgfQorCisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpJbmRleEN1cnNvcgorICAg
IHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9Owor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVy
biBtX2N1cnJlbnRQcmltYXJ5S2V5OyB9CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJl
dHVybiBtX2N1cnJlbnRWYWx1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9u
KGNvbnN0IElEQktleSoga2V5KSB7IHJldHVybiBjb250aW51ZUludGVybmFsKGtleSk7IH0KKwor
ICAgIC8vIEN1cnNvckltcGxDb21tb24KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3co
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygpOworCitwcml2YXRlOgorICAg
IFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7CisgICAgU3RyaW5nIG1fY3VycmVu
dFZhbHVlOworfTsKKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkluZGV4Q3Vyc29yPiBJ
REJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIEluZGV4RGF0YS5rZXlT
dHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCAiKQorICAgICAg
ICAgICAgICAgICArICgiT2JqZWN0U3RvcmVEYXRhLnZhbHVlLCBPYmplY3RTdG9yZURhdGEua2V5
U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVEYXRhLmtleU51bWJl
ciAiKQorICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5FUiBKT0lOIE9iamVj
dFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBPYmplY3RTdG9yZURh
dGEuaWQgV0hFUkUgIjsKKworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5s
b3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwor
CisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIHNxbCArPSBsb3dlckN1cnNvcldoZXJlRnJh
Z21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJPcGVuKCkgPyAiPCIgOiAiPD0iLCAi
SW5kZXhEYXRhLiIpOworICAgIGlmICh1cHBlckJvdW5kKQorICAgICAgICBzcWwgKz0gdXBwZXJD
dXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFuZ2UtPnVwcGVyT3BlbigpID8g
IjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKKyAgICBzcWwgKz0gIkluZGV4RGF0YS5pbmRleElk
ID0gPyBPUkRFUiBCWSAiOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQg
fHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUpCisgICAgICAgIHNx
bCArPSAiSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0YS5r
ZXlOdW1iZXIsIEluZGV4RGF0YS5pZCI7CisgICAgZWxzZQorICAgICAgICBzcWwgKz0gIkluZGV4
RGF0YS5rZXlTdHJpbmcgREVTQywgSW5kZXhEYXRhLmtleURhdGUgREVTQywgSW5kZXhEYXRhLmtl
eU51bWJlciBERVNDLCBJbmRleERhdGEuaWQgREVTQyI7CisKKyAgICBSZWZQdHI8SW5kZXhDdXJz
b3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKG1fZGIsIHNxbCwg
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09
IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpKTsKKworICAgIGJvb2wgb2sgPSBjdXJzb3It
Pm1fcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIGludCBpbmRleENv
bHVtbiA9IDE7CisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIGluZGV4Q29sdW1uICs9IGJp
bmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+bG93ZXIo
KSk7CisgICAgaWYgKHVwcGVyQm91bmQpCisgICAgICAgIGluZGV4Q29sdW1uICs9IGJpbmRLZXlU
b1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+dXBwZXIoKSk7Cisg
ICAgY3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChpbmRleENvbHVtbiwgaW5kZXhJZCk7CisKKyAg
ICBpZiAoY3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOworICAgIHJldHVybiBjdXJz
b3IucmVsZWFzZSgpOworfQorCit2b2lkIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3co
KQoreworICAgIG1fY3VycmVudElkID0gbV9xdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICBt
X2N1cnJlbnRLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgMSk7CisgICAgbV9jdXJyZW50VmFs
dWUgPSBtX3F1ZXJ5LmdldENvbHVtbkJsb2JBc1N0cmluZyg0KTsKKyAgICBtX2N1cnJlbnRQcmlt
YXJ5S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDUpOworfQorCitib29sIEluZGV4Q3Vyc29y
SW1wbDo6Y3VycmVudFJvd0V4aXN0cygpCit7CisgICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQg
RlJPTSBJbmRleERhdGEgV0hFUkUgaWQgPSA/IjsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGIsIHNxbCk7CisKKyAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPazsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisKKyAgICBzdGF0ZW1lbnQu
YmluZEludDY0KDEsIG1fY3VycmVudElkKTsKKyAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxSZXN1bHRSb3c7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2lu
Z1N0b3JlLmgKaW5kZXggMTFhN2U1ODEwM2IzMmM2MWExYmMzNjkwZjgxYjRjMzM2NWEyMWQ5MS4u
YjVjMDQ3MTdhNGU1ZDNjZGE1ZTI0YzM5MjJjM2Y5N2ExZDIwNTJmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzgsNiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleTsKK2NsYXNzIElE
QktleVJhbmdlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4gewpAQCAtNTQsNyArNTYsOSBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CiAgICAgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CiAgICAgdm9pZCBjbGVhck9iamVj
dFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQp
OwogICAgIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOworICAgIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIGludDY0X3QmIGZvdW5kT2JqZWN0U3RvcmVEYXRhSWQpOwogCiAg
ICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiAgICAgcHVibGljOgpAQCAtNjgs
NiArNzIsMzYgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElk
KTsKICAgICBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpOwogICAgIGJvb2wgZGVsZXRlSW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpOworICAgIFN0cmluZyBn
ZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIFBh
c3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmKTsKKyAgICBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmKTsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVk
PEN1cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVu
Y3Rpb24oY29uc3QgSURCS2V5KiA9IDApID0gMDsKKyAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkg
e307CisgICAgfTsKKworICAgIGNsYXNzIE9iamVjdFN0b3JlQ3Vyc29yIDogcHVibGljIEN1cnNv
ciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRh
SWQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsK
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7CisgICAgfTsKKyAgICBjbGFzcyBJ
bmRleEtleUN1cnNvciA6IHB1YmxpYyBDdXJzb3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXkoKSA9IDA7CisgICAgfTsKKyAgICBjbGFzcyBJbmRleEN1cnNvciA6IHB1Ymxp
YyBJbmRleEtleUN1cnNvciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpID0gMDsKKyAgICB9OworCisgICAgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvcj4g
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgUGFzc1JlZlB0cjxJbmRleEtleUN1
cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgUGFzc1JlZlB0cjxJbmRleEN1cnNvcj4g
b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7CiAKICAgICBTUUxpdGVEYXRhYmFzZSYgZGIoKSB7IHJldHVybiBt
X2RiOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHAKaW5kZXggNDU3NmY2ZGI4MTc2Nzg0NTkzODk3ODJmNDMyZWMyNDk2ODRlMmZjYi4uOWQw
NjFlY2M1YTUxMzZmNzU4ZTFkMWZiNzIxMTc5MmJkZjZhZDBjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTMxLDMwICszMSwyMyBA
QAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAj
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVk
ZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNv
ckJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNz
T3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNTZXJpYWxpemVkU2NyaXB0VmFs
dWVDdXJzb3IsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCi0gICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorSURCQ3Vy
c29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCisg
ICAgOiBtX2N1cnNvcihjdXJzb3IpCisgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKICAg
ICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fcXVlcnkocXVlcnkpCi0gICAgLCBt
X2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vy
c29yKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fb2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmUpCiB7Ci0gICAgbG9hZEN1cnJlbnRSb3coKTsKIH0KIAogSURCQ3Vyc29y
QmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCgpCkBAIC02OCwyNCArNjEsNTIgQEAg
dW5zaWduZWQgc2hvcnQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRpcmVjdGlvbigpIGNvbnN0CiAK
IFBhc3NSZWZQdHI8SURCS2V5PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6a2V5KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9jdXJyZW50S2V5OworICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7Cisg
ICAgY2FzZSBPYmplY3RTdG9yZUN1cnNvclR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlQ3Vyc29yKj4obV9jdXJzb3IuZ2V0KCkpLT5r
ZXkoKTsKKyAgICBjYXNlIEluZGV4S2V5Q3Vyc29yVHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PElEQkJhY2tpbmdTdG9yZTo6SW5kZXhLZXlDdXJzb3IqPihtX2N1cnNvci5nZXQoKSkt
PmtleSgpOworICAgIGNhc2UgSW5kZXhDdXJzb3JUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SURCQmFja2luZ1N0b3JlOjpJbmRleEN1cnNvcio+KG1fY3Vyc29yLmdldCgpKS0+a2V5
KCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwogfQog
CiBQYXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlKCkgY29uc3QK
IHsKLSAgICBpZiAobV9pc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKLSAgICAgICAgcmV0
dXJuIElEQkFueTo6Y3JlYXRlKG1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5nZXQoKSk7
Ci0gICAgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1fY3VycmVudElEQktleVZhbHVlLmdldCgpKTsK
KyAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgeworICAgIGNhc2UgT2JqZWN0U3RvcmVDdXJzb3JU
eXBlOgorICAgICAgICByZXR1cm4gSURCQW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZShzdGF0aWNfY2FzdDxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3Jl
Q3Vyc29yKj4obV9jdXJzb3IuZ2V0KCkpLT52YWx1ZSgpKS5nZXQoKSk7CisgICAgY2FzZSBJbmRl
eEtleUN1cnNvclR5cGU6CisgICAgICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxJREJCYWNraW5nU3RvcmU6OkluZGV4S2V5Q3Vyc29yKj4obV9jdXJzb3IuZ2V0KCkpLT5wcmlt
YXJ5S2V5KCkpOworICAgIGNhc2UgSW5kZXhDdXJzb3JUeXBlOgorICAgICAgICByZXR1cm4gSURC
QW55OjpjcmVhdGUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShzdGF0aWNf
Y2FzdDxJREJCYWNraW5nU3RvcmU6OkluZGV4Q3Vyc29yKj4obV9jdXJzb3IuZ2V0KCkpLT52YWx1
ZSgpKSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwog
fQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1fcXVlcnkgfHwgbV9jdXJyZW50SWQg
PT0gSW52YWxpZElkIHx8ICFtX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKSB7CisgICAg
aWYgKCFtX2N1cnNvcikgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
QUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5
PiBrZXk7CisgICAgc3dpdGNoIChtX2N1cnNvclR5cGUpIHsKKyAgICBjYXNlIE9iamVjdFN0b3Jl
Q3Vyc29yVHlwZToKKyAgICAgICAga2V5ID0gIHN0YXRpY19jYXN0PElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVDdXJzb3IqPihtX2N1cnNvci5nZXQoKSktPmtleSgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEluZGV4S2V5Q3Vyc29yVHlwZToKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmRleEN1cnNvclR5cGU6CisgICAgICAgIGtleSA9IHN0YXRpY19jYXN0PElEQkJhY2tpbmdTdG9y
ZTo6SW5kZXhDdXJzb3IqPihtX2N1cnNvci5nZXQoKSktPnByaW1hcnlLZXkoKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gbV9jdXJyZW50SURCS2V5
VmFsdWUgPyBtX2N1cnJlbnRJREJLZXlWYWx1ZSA6IG1fY3VycmVudEtleTsKICAgICBtX29iamVj
dFN0b3JlLT5wdXQodmFsdWUsIGtleS5yZWxlYXNlKCksIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVXBkYXRlLCBjYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVj
KTsKIH0KIApAQCAtOTgsNTEgKzExOSwxNyBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpj
b250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdAogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiB9CiAKLWJv
b2wgSURCQ3Vyc29yQmFja2VuZEltcGw6OmN1cnJlbnRSb3dFeGlzdHMoKQotewotICAgIFN0cmlu
ZyBzcWwgPSBtX2N1cnJlbnRJREJLZXlWYWx1ZSA/ICJTRUxFQ1QgaWQgRlJPTSBJbmRleERhdGEg
V0hFUkUgaWQgPSA/IiA6ICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQg
PSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fYmFja2luZ1N0b3JlLT5kYigp
LCBzcWwpOwotCi0gICAgYm9vbCBvayA9IHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0
T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgc3RhdGVtZW50LmJpbmRJbnQ2
NCgxLCBtX2N1cnJlbnRJZCk7Ci0gICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMUmVz
dWx0Um93OwotfQotCiAvLyBJTVBPUlRBTlQ6IElmIHRoaXMgZXZlciAxKSBmaXJlcyBhbiAnZXJy
b3InIGV2ZW50IGFuZCAyKSBpdCdzIHBvc3NpYmxlIHRvIGZpcmUgYW5vdGhlciBldmVudCBhZnRl
cndhcmRzLAogLy8gICAgICAgICAgICBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSB3
aWxsIG5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gaGFuZGxlIHRoaXMhISEKIHZvaWQgSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewogICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwog
ICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICBpZiAoIWN1cnNvci0+bV9xdWVyeSB8fCBjdXJzb3ItPm1fcXVlcnktPnN0ZXAoKSAhPSBT
UUxSZXN1bHRSb3cpIHsKLSAgICAgICAgICAgIGN1cnNvci0+bV9xdWVyeSA9IDA7Ci0gICAgICAg
ICAgICBjdXJzb3ItPm1fY3VycmVudElkID0gSW52YWxpZElkOwotICAgICAgICAgICAgY3Vyc29y
LT5tX2N1cnJlbnRLZXkgPSAwOwotICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnJlbnRTZXJpYWxp
emVkU2NyaXB0VmFsdWUgPSAwOwotICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnJlbnRJREJLZXlW
YWx1ZSA9IDA7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IG9sZEtleSA9IGN1cnNvci0+bV9jdXJyZW50S2V5Owot
ICAgICAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7Ci0KLSAgICAgICAgLy8gU2tpcCBpZiB0
aGlzIGVudHJ5IGhhcyBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgb2JqZWN0IHN0b3JlLgotICAgICAg
ICBpZiAoIWN1cnNvci0+Y3VycmVudFJvd0V4aXN0cygpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gSWYgYSBrZXkgd2FzIHN1cHBsaWVkLCB3ZSBtdXN0IGxvb3AgdW50aWwg
d2UgZmluZCB0aGF0IGtleSAob3IgaGl0IHRoZSBlbmQpLgotICAgICAgICBpZiAoa2V5ICYmICFr
ZXktPmlzRXF1YWwoY3Vyc29yLT5tX2N1cnJlbnRLZXkuZ2V0KCkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHVuaXF1ZW5lc3MgY29uc3Ry
YWludCwgd2UgY2FuIHN0b3Agbm93LgotICAgICAgICBpZiAoY3Vyc29yLT5tX2RpcmVjdGlvbiA9
PSBJREJDdXJzb3I6Ok5FWFQgfHwgY3Vyc29yLT5tX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBS
RVYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCFjdXJzb3ItPm1fY3VycmVudEtl
eS0+aXNFcXVhbChvbGRLZXkuZ2V0KCkpKQotICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAo
IWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24o
a2V5LmdldCgpKSkgeworICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3Iu
Z2V0KCkpOwpAQCAtMTUwLDMxICsxMzcsMjUgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Y29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXMKIAog
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFt
X3F1ZXJ5IHx8IG1fY3VycmVudElkID09IEludmFsaWRJZCB8fCAhbV9pc1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUN1cnNvcikgeworICAgIGlmICghbV9jdXJzb3IpIHsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gbV9jdXJyZW50SURCS2V5VmFsdWUgPyBtX2N1
cnJlbnRJREJLZXlWYWx1ZSA6IG1fY3VycmVudEtleTsKLSAgICBtX29iamVjdFN0b3JlLT5kZWxl
dGVGdW5jdGlvbihrZXkucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0
KCksIGVjKTsKLX0KLQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpsb2FkQ3VycmVudFJv
dygpCi17Ci0gICAgLy8gVGhlIGNvbHVtbiBudW1iZXJzIGRlcGVuZCBvbiB0aGUgcXVlcnkgaW4g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsIG9yCi0gICAgLy8g
SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsLgotICAgIG1fY3VycmVudElk
ID0gbV9xdWVyeS0+Z2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgbV9jdXJyZW50S2V5ID0gSURCS2V5
Ojpmcm9tUXVlcnkoKm1fcXVlcnksIDEpOwotICAgIGlmIChtX2lzU2VyaWFsaXplZFNjcmlwdFZh
bHVlQ3Vyc29yKQotICAgICAgICBtX2N1cnJlbnRTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKG1fcXVlcnktPmdldENvbHVtbkJsb2JB
c1N0cmluZyg0KSk7Ci0KLSAgICBtX2N1cnJlbnRJREJLZXlWYWx1ZSA9IElEQktleTo6ZnJvbVF1
ZXJ5KCptX3F1ZXJ5LCA1KTsKLX0KKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAgc3dpdGNo
IChtX2N1cnNvclR5cGUpIHsKKyAgICBjYXNlIE9iamVjdFN0b3JlQ3Vyc29yVHlwZToKKyAgICAg
ICAga2V5ID0gIHN0YXRpY19jYXN0PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVDdXJzb3Iq
PihtX2N1cnNvci5nZXQoKSktPmtleSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4
S2V5Q3Vyc29yVHlwZToKKyAgICAgICAga2V5ID0gc3RhdGljX2Nhc3Q8SURCQmFja2luZ1N0b3Jl
OjpJbmRleEtleUN1cnNvcio+KG1fY3Vyc29yLmdldCgpKS0+cHJpbWFyeUtleSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4Q3Vyc29yVHlwZToKKyAgICAgICAga2V5ID0gc3RhdGlj
X2Nhc3Q8SURCQmFja2luZ1N0b3JlOjpJbmRleEN1cnNvcio+KG1fY3Vyc29yLmdldCgpKS0+cHJp
bWFyeUtleSgpOworICAgICAgICBicmVhazsKKyAgICB9CiAKLVNRTGl0ZURhdGFiYXNlJiBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6ZGF0YWJhc2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tp
bmdTdG9yZS0+ZGIoKTsKKyAgICBtX29iamVjdFN0b3JlLT5kZWxldGVGdW5jdGlvbihrZXkucmVs
ZWFzZSgpLCBwcnBDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5oCmluZGV4IGRiMTJmMTdkMGQyMWNlZWE2ZGU1NWJlYjM2N2IyODQzNjQzNjJh
YmIuLjFlMmZkNjk3ZWUyMDRkNWI0N2QxMzcyNjYyZjY1OWEzMDUwYWExZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ5LDkgKzUwLDE1
IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2Vu
ZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc093blB0cjxTUUxpdGVTdGF0ZW1lbnQ+
IHF1ZXJ5LCBib29sIGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UqIG9iamVjdFN0b3JlKQorICAgIGVudW0gQ3Vyc29yVHlwZSB7CisgICAgICAgIE9iamVj
dFN0b3JlQ3Vyc29yVHlwZSwKKyAgICAgICAgSW5kZXhLZXlDdXJzb3JUeXBlLAorICAgICAgICBJ
bmRleEN1cnNvclR5cGUKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBj
dXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIG9iamVjdFN0b3JlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGtleVJh
bmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LCBpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvciwgdHJh
bnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
Q3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCBkaXJlY3Rpb24sIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNrZW5k
SW1wbCgpOwogCkBAIC02MywzNCArNzAsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
IAogcHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NPd25QdHI8
U1FMaXRlU3RhdGVtZW50PiBxdWVyeSwgYm9vbCBpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNv
ciwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlKik7Ci0KLSAgICBib29sIGN1cnJlbnRSb3dFeGlzdHMoKTsKLSAgICB2b2lkIGxv
YWRDdXJyZW50Um93KCk7Ci0gICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgY29uc3Q7Cisg
ICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4sIEN1cnNvclR5cGUsIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKIAogICAgIHN0
YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IElu
dmFsaWRJZCA9IC0xOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJz
b3I7CisgICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CiAKLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLQotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKICAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBPd25QdHI8
U1FMaXRlU3RhdGVtZW50PiBtX3F1ZXJ5OwotICAgIGJvb2wgbV9pc1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUN1cnNvcjsKLSAgICBpbnQ2NF90IG1fY3VycmVudElkOwotCi0gICAgLy8gVGhlIGtleSBp
biB0aGUgb2JqZWN0U3RvcmUgb3IgaW5kZXggdGhhdCB0aGlzIGN1cnNvciBpdGVyYXRlcyBvdmVy
LgotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLQotICAgIC8vIG1faXNTZXJpYWxp
emVkU2NyaXB0VmFsdWVDdXJzb3Igd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBmb3Igb2JqZWN0IGN1
cnNvcnMuCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9jdXJyZW50U2VyaWFs
aXplZFNjcmlwdFZhbHVlOwotCi0gICAgLy8gRklYTUU6IG1ha2UgdGhlIHByaW1hcnkga2V5IGF2
YWlsYWJsZSB2aWEgc2NyaXB0IGZvciBhbGwgdHlwZXMgb2YgY3Vyc29ycy4KLSAgICAvLyBGb3Ig
Y3Vyc29ycyBvbiBpbmRpY2VzLCB0aGlzIGlzIHRoZSBrZXkgaW4gdGhlIG9iamVjdHN0b3JlIHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIGluZGV4LgotICAgIFJl
ZlB0cjxJREJLZXk+IG1fY3VycmVudElEQktleVZhbHVlOwotCiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKICAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IGJmM2NhYjQ4NGE5
NDdjNjMzNGIxN2JkZDE1MWRjMWI0NzQ4NDU4NDkuLjNlZDkzZTFlMjBiODI4YTU3OTg3ZDI3YTRm
OGVlOGY5MWU2ZjJiMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcApAQCAtMzcsOCArMzcsNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjgsMzggKzY2LDE2IEBAIElEQklu
ZGV4QmFja2VuZEltcGw6On5JREJJbmRleEJhY2tlbmRJbXBsKCkKIAogdm9pZCBJREJJbmRleEJh
Y2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1bnR5cGVkRGlyZWN0aW9uLCBib29sIG9iamVjdEN1
cnNvciwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewotICAgIC8vIFNldmVy
YWwgZmlsZXMgZGVwZW5kIG9uIHRoaXMgb3JkZXIgb2Ygc2VsZWN0cy4KLSAgICBTdHJpbmcgc3Fs
ID0gU3RyaW5nKCJTRUxFQ1QgSW5kZXhEYXRhLmlkLCBJbmRleERhdGEua2V5U3RyaW5nLCBJbmRl
eERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgIikKLSAgICAgICAgICAgICAgICAg
KyAoIk9iamVjdFN0b3JlRGF0YS52YWx1ZSwgT2JqZWN0U3RvcmVEYXRhLmtleVN0cmluZywgT2Jq
ZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0YS5rZXlOdW1iZXIgIikKLSAgICAg
ICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEgSU5ORVIgSk9JTiBPYmplY3RTdG9yZURhdGEg
T04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlkID0gT2JqZWN0U3RvcmVEYXRhLmlkIFdIRVJF
ICI7Ci0KLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAg
ICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLSAgICAKLSAgICBp
ZiAobG93ZXJCb3VuZCkKLSAgICAgICAgc3FsICs9IHJhbmdlLT5sb3dlcigpLT5sb3dlckN1cnNv
cldoZXJlRnJhZ21lbnQocmFuZ2UtPmxvd2VyV2hlcmVDbGF1c2VDb21wYXJpc29uT3BlcmF0b3Io
KSwgIkluZGV4RGF0YS4iKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgc3FsICs9IHJh
bmdlLT51cHBlcigpLT51cHBlckN1cnNvcldoZXJlRnJhZ21lbnQocmFuZ2UtPnVwcGVyV2hlcmVD
bGF1c2VDb21wYXJpc29uT3BlcmF0b3IoKSwgIkluZGV4RGF0YS4iKTsKLSAgICBzcWwgKz0gIklu
ZGV4RGF0YS5pbmRleElkID0gPyBPUkRFUiBCWSAiOwotCiAgICAgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KHVudHlwZWRE
aXJlY3Rpb24pOwotICAgIGlmIChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUIHx8IGRpcmVj
dGlvbiA9PSBJREJDdXJzb3I6Ok5FWFRfTk9fRFVQTElDQVRFKQotICAgICAgICBzcWwgKz0gIklu
ZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVy
LCBJbmRleERhdGEuaWQiOwotICAgIGVsc2UKLSAgICAgICAgc3FsICs9ICJJbmRleERhdGEua2V5
U3RyaW5nIERFU0MsIEluZGV4RGF0YS5rZXlEYXRlIERFU0MsIEluZGV4RGF0YS5rZXlOdW1iZXIg
REVTQywgSW5kZXhEYXRhLmlkIERFU0MiOwogCi0gICAgT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4g
cXVlcnkgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVtZW50KGluZGV4LT5zcWxpdGVEYXRhYmFz
ZSgpLCBzcWwpKTsKLSAgICBib29sIG9rID0gcXVlcnktPnByZXBhcmUoKSA9PSBTUUxSZXN1bHRP
azsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFu
ZGxpbmc/CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVD
dXJzb3I7CiAKLSAgICBpbnQgaW5kZXhDb2x1bW4gPSAxOwotICAgIGlmIChsb3dlckJvdW5kKQot
ICAgICAgICBpbmRleENvbHVtbiArPSByYW5nZS0+bG93ZXIoKS0+YmluZCgqcXVlcnksIGluZGV4
Q29sdW1uKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0gcmFu
Z2UtPnVwcGVyKCktPmJpbmQoKnF1ZXJ5LCBpbmRleENvbHVtbik7Ci0gICAgcXVlcnktPmJpbmRJ
bnQ2NChpbmRleENvbHVtbiwgaW5kZXgtPmlkKCkpOworICAgIGlmIChvYmplY3RDdXJzb3IpCisg
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3Blbklu
ZGV4Q3Vyc29yKGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBlbHNl
CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3Bl
bkluZGV4S2V5Q3Vyc29yKGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKIAot
ICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgeworICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA4
LDcgKzg0LDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHIKICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLT5vYmplY3RT
dG9yZShpbmRleC0+bV9zdG9yZU5hbWUsIGVjKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUgJiYg
IWVjKTsKIAotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGluZGV4LT5tX2JhY2tpbmdTdG9yZS5nZXQoKSwg
cmFuZ2UsIGRpcmVjdGlvbiwgcXVlcnkucmVsZWFzZSgpLCBvYmplY3RDdXJzb3IsIHRyYW5zYWN0
aW9uLmdldCgpLCBvYmplY3RTdG9yZS5nZXQoKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2lu
Z1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgb2JqZWN0Q3Vyc29yID8gSURCQ3Vyc29yQmFja2VuZElt
cGw6OkluZGV4Q3Vyc29yVHlwZSA6IElEQkN1cnNvckJhY2tlbmRJbXBsOjpJbmRleEtleUN1cnNv
clR5cGUsIGRpcmVjdGlvbiwgdHJhbnNhY3Rpb24uZ2V0KCksIG9iamVjdFN0b3JlLmdldCgpKTsK
ICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IucmVsZWFzZSgpKTsKIH0KIApAQCAtMTM0
LDI3ICsxMTAsMjIgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCB1bnMKIAogdm9pZCBJREJJbmRleEJh
Y2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9v
bCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAg
U3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIpCi0gICAgICAgICAgICAgICAgICsgKGdldE9i
amVjdCA/ICJPYmplY3RTdG9yZURhdGEudmFsdWUgIiA6ICJPYmplY3RTdG9yZURhdGEua2V5U3Ry
aW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVEYXRhLmtleU51bWJlciAi
KQotICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5FUiBKT0lOIE9iamVjdFN0
b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBPYmplY3RTdG9yZURhdGEu
aWQgIgotICAgICAgICAgICAgICAgICArICJXSEVSRSBJbmRleERhdGEuaW5kZXhJZCA9ID8gIEFO
RCAgIiArIGtleS0+d2hlcmVTeW50YXgoIkluZGV4RGF0YS4iKQotICAgICAgICAgICAgICAgICAr
ICJPUkRFUiBCWSBJbmRleERhdGEuaWQgTElNSVQgMSI7IC8vIE9yZGVyIGJ5IGluc2VydGlvbiBv
cmRlciB3aGVuIGFsbCBlbHNlIGZhaWxzLgotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShpbmRl
eC0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KLQotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRleC0+aWQo
KSk7Ci0gICAga2V5LT5iaW5kKHF1ZXJ5LCAyKTsKLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNR
TFJlc3VsdFJvdykgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMg
bm90IGV4aXN0IGluIHRoZSBpbmRleC4iKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhN
RTogU3BsaXQgZ2V0SW50ZXJuYWwgaW50byB0d28gZnVuY3Rpb25zLCBnZXR0aW5nIHJpZCBvZmYg
fGdldE9iamVjdHwuCisgICAgaWYgKGdldE9iamVjdCkgeworICAgICAgICBTdHJpbmcgdmFsdWUg
PSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFZpYUluZGV4KGluZGV4LT5pZCgpLCAq
a2V5KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleC4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5tX2JhY2tp
bmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAg
ICAgaWYgKCFrZXlSZXN1bHQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIs
ICJLZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGluZGV4LiIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0
KCkpOwogICAgIH0KLQotICAgIGlmIChnZXRPYmplY3QpCi0gICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnkuZ2V0Q29s
dW1uVGV4dCgwKSkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoSURC
S2V5Ojpmcm9tUXVlcnkocXVlcnksIDApKTsKLSAgICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNR
TFJlc3VsdFJvdyk7CiB9CiAKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQ
dHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTc1LDM0ICsxNDYsMTIgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmEKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogfQogCi1z
dGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSoga2V5KQotewotICAgIHJldHVybiAiV0hF
UkUgaW5kZXhJZCA9ID8gIEFORCAgIiArIGtleS0+d2hlcmVTeW50YXgoKTsKLX0KLQotc3RhdGlj
IHZvaWQgYmluZFdoZXJlQ2xhdXNlKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQs
IElEQktleSoga2V5KQotewotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAga2V5LT5i
aW5kKHF1ZXJ5LCAyKTsKLX0KLQogYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlB
bGxvd2VkKElEQktleSoga2V5KQogewogICAgIGlmICghbV91bmlxdWUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJT
RUxFQ1QgaWQgRlJPTSBJbmRleERhdGEgIiArIHdoZXJlQ2xhdXNlKGtleSkpOwotICAgIGJvb2wg
b2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotICAgIGJpbmRXaGVyZUNs
YXVzZShxdWVyeSwgbV9pZCwga2V5KTsKLSAgICBib29sIGV4aXN0aW5nVmFsdWUgPSBxdWVyeS5z
dGVwKCkgPT0gU1FMUmVzdWx0Um93OwotCi0gICAgcmV0dXJuICFleGlzdGluZ1ZhbHVlOwotfQot
Ci1TUUxpdGVEYXRhYmFzZSYgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3FsaXRlRGF0YWJhc2UoKSBj
b25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+ZGIoKTsKKyAgICByZXR1cm4gIW1f
YmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbkluZGV4KG1faWQsICprZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5k
SW1wbC5oCmluZGV4IDk4ZjM2MjNlZmQzNDdhOGNjNjQ1OTNmMzk5YjljNDZhZmZkZjkzOTYuLjcz
N2Q3ZWZhMTUzZmVmODcwZjg1MTM1MjU1MTQ1YjhlNTBkOGY3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC03NSw4ICs3NSw2IEBAIHByaXZh
dGU6CiAgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKTsKICAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJh
Y2tpbmdTdG9yZSosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOwogCi0gICAgU1FMaXRlRGF0YWJh
c2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29y
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIGJvb2wgb2JqZWN0Q3Vyc29yLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQgZ2V0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcAppbmRleCA1ZjQ1NTQz
NzNlNzJjMzYzMjUzYzJmNjJmMmU4Zjg0MWNhNDA1MDI5Li5iY2JmM2RkMzZhNTYyM2MxNTgzZWQz
NTQ5OTZkOGEyNWY1MzhiYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBAIC0yOCw5
ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIlNR
TGl0ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIElEQktleTo6SURCS2V5KCkKQEAgLTQyLDI0ICszOSw3IEBA
IElEQktleTo6fklEQktleSgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJLZXk6OmZy
b21RdWVyeShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikKLXsKLSAgICBp
ZiAocXVlcnkuY29sdW1uQ291bnQoKSA8PSBiYXNlQ29sdW1uKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghcXVlcnkuaXNDb2x1bW5OdWxsKGJhc2VDb2x1bW4pKQotICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcocXVlcnkuZ2V0Q29sdW1uVGV4dChiYXNlQ29sdW1uKSk7
Ci0KLSAgICBpZiAoIXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uICsgMSkpCi0gICAgICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUocXVlcnkuZ2V0Q29sdW1uRG91YmxlKGJhc2VDb2x1
bW4gKyAxKSk7Ci0KLSAgICBpZiAoIXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uICsgMikp
Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihxdWVyeS5nZXRDb2x1bW5Eb3Vi
bGUoYmFzZUNvbHVtbiArIDIpKTsKLQotICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bGwoKTsK
LX0KLQotYm9vbCBJREJLZXk6OmlzRXF1YWwoSURCS2V5KiBvdGhlcikKK2Jvb2wgSURCS2V5Ojpp
c0VxdWFsKElEQktleSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlciB8fCBvdGhlci0+
bV90eXBlICE9IG1fdHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzksMTA4ICs1OSw2
IEBAIGJvb2wgSURCS2V5Ojppc0VxdWFsKElEQktleSogb3RoZXIpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1TdHJpbmcgSURCS2V5Ojp3aGVyZVN5bnRheChTdHJpbmcgcXVhbGlmaWVkVGFibGVO
YW1lKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0
cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5n
ID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5E
ICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAgIGNh
c2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyID0g
PyAgIjsKLSAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZp
ZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxl
TmFtZSArICJrZXlEYXRlID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51
bWJlciBJUyBOVUxMICAiOwotICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgcmV0
dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFi
bGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotU3RyaW5nIElEQktleTo6bG93ZXJDdXJz
b3JXaGVyZUZyYWdtZW50KFN0cmluZyBjb21wYXJpc29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZp
ZWRUYWJsZU5hbWUpCi17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFN0cmluZ1R5
cGU6Ci0gICAgICAgIHJldHVybiAiPyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyAgQU5EICAiOwotICAgIGNhc2UgRGF0ZVR5cGU6
Ci0gICAgICAgIHJldHVybiAiKD8gIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgIiArIHF1YWxp
ZmllZFRhYmxlTmFtZSArICJrZXlEYXRlICBPUiBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSAr
ICJrZXlTdHJpbmcgSVMgTlVMTCkgIEFORCAgIjsKLSAgICBjYXNlIE51bWJlclR5cGU6Ci0gICAg
ICAgIHJldHVybiAiKD8gIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgIiArIHF1YWxpZmllZFRh
YmxlTmFtZSArICJrZXlOdW1iZXIgIE9SICBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlTdHJpbmcgSVMgTlVMTCAgT1IgIE5PVCAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURh
dGUgSVMgTlVMTCkgIEFORCAgIjsKLSAgICBjYXNlIE51bGxUeXBlOgotICAgICAgICBpZiAoY29t
cGFyaXNvbk9wZXJhdG9yID09ICI8IikKLSAgICAgICAgICAgIHJldHVybiAiTk9UKCIgKyBxdWFs
aWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRh
YmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSAr
ICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFORCAgIjsKLSAgICAgICAgcmV0dXJuICIiOyAvLyBJZiBp
dCdzID0sIHRoZSB1cHBlciBib3VuZCBoYWxmIHdpbGwgZG8gdGhlIGNvbnN0cmFpbmluZy4gSWYg
aXQncyA8PSwgdGhlbiB0aGF0J3MgYSBuby1vcC4KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCi1TdHJpbmcgSURCS2V5Ojp1cHBlckN1cnNvcldo
ZXJlRnJhZ21lbnQoU3RyaW5nIGNvbXBhcmlzb25PcGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRh
YmxlTmFtZSkKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgU3RyaW5nVHlwZToK
LSAgICAgICAgcmV0dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgIiAr
IGNvbXBhcmlzb25PcGVyYXRvciArICIgPyAgT1IgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAi
a2V5U3RyaW5nIElTIE5VTEwpICBBTkQgICI7Ci0gICAgY2FzZSBEYXRlVHlwZToKLSAgICAgICAg
cmV0dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlICIgKyBjb21wYXJpc29u
T3BlcmF0b3IgKyAiID8gT1IgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5V
TEwpICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFO
RCAgIjsKLSAgICBjYXNlIE51bWJlclR5cGU6Ci0gICAgICAgIHJldHVybiAiKCIgKyBxdWFsaWZp
ZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8gT1Ig
IiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFORCAgIiArIHF1
YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiOwotICAgIGNhc2UgTnVsbFR5cGU6
Ci0gICAgICAgIGlmIChjb21wYXJpc29uT3BlcmF0b3IgPT0gIjwiKQotICAgICAgICAgICAgcmV0
dXJuICIwICE9IDAgIEFORCAgIjsKLSAgICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFtZSAr
ICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURh
dGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBO
VUxMICBBTkQgICI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biAiIjsKLX0KLQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGJvdW5kLgotaW50IElE
QktleTo6YmluZChTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1uKSBjb25zdAotewot
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAg
ICAgIHF1ZXJ5LmJpbmRUZXh0KGNvbHVtbiwgbV9zdHJpbmcpOwotICAgICAgICByZXR1cm4gMTsK
LSAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29s
dW1uLCBtX2RhdGUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIElEQktleTo6TnVtYmVy
VHlwZToKLSAgICAgICAgcXVlcnkuYmluZERvdWJsZShjb2x1bW4sIG1fbnVtYmVyKTsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBJREJLZXk6OmJpbmRXaXRoTnVsbHMoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50
IGJhc2VDb2x1bW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIElE
QktleTo6U3RyaW5nVHlwZToKLSAgICAgICAgcXVlcnkuYmluZFRleHQoYmFzZUNvbHVtbiArIDAs
IG1fc3RyaW5nKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEpOwotICAg
ICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVt
biArIDApOwotICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAxLCBtX2RhdGUp
OwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICBxdWVyeS5iaW5kTnVsbChi
YXNlQ29sdW1uICsgMCk7Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsK
LSAgICAgICAgcXVlcnkuYmluZERvdWJsZShiYXNlQ29sdW1uICsgMiwgbV9udW1iZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJp
bmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVt
biArIDEpOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5oCmluZGV4IDkxMTg3NDNmYzRmMzcxYzk1YjBhYmQxMWM0Mjc5MGU3ZjZiMzA5NmUuLmVm
ZmIwMTI4YTZjYmMzNmJiNjBmNzA4MDc5OWY5NTBhNmQ5YjA1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJLZXkuaApAQCAtOTksMTQgKzk5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9udW1i
ZXI7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmcm9tUXVlcnkoU1FM
aXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGJhc2VDb2x1bW4pOwotCi0gICAgYm9vbCBpc0VxdWFs
KElEQktleSogb3RoZXIpOwotICAgIFN0cmluZyB3aGVyZVN5bnRheChTdHJpbmcgcXVhbGlmaWVk
VGFibGVOYW1lID0gIiIpIGNvbnN0OwotICAgIFN0cmluZyBsb3dlckN1cnNvcldoZXJlRnJhZ21l
bnQoU3RyaW5nIGNvbXBhcmlzb25PcGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFtZSA9
ICIiKTsKLSAgICBTdHJpbmcgdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KFN0cmluZyBjb21wYXJp
c29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5hbWUgPSAiIik7Ci0gICAgaW50IGJp
bmQoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbikgY29uc3Q7Ci0gICAgdm9pZCBi
aW5kV2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uKSBjb25z
dDsKKyAgICBib29sIGlzRXF1YWwoSURCS2V5KiBvdGhlcikgY29uc3Q7CiAKICAgICB1c2luZyBU
aHJlYWRTYWZlU2hhcmVkPElEQktleT46OnJlZjsKICAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVk
PElEQktleT46OmRlcmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXlSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmNwcAppbmRl
eCAxNDJiM2JkODdjNGIyZTJlZDIzOGU5NTZhODUwZWY4ZmZhOWVhYzhmLi5iZTk1OGJhZDQ5NmFj
Y2YzNmZkZjc4NDM4OWM4NjJiODI0YjQ5NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQktleVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eVJhbmdlLmNwcApAQCAtNjUsMjIgKzY1LDYgQEAgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURC
S2V5UmFuZ2U6OmJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjwKICAg
ICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShsb3dlciwgdXBwZXIsIGxvd2VyT3BlbiwgdXBw
ZXJPcGVuKTsKIH0KIAotU3RyaW5nIElEQktleVJhbmdlOjpsb3dlcldoZXJlQ2xhdXNlQ29tcGFy
aXNvbk9wZXJhdG9yKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9sb3dlcik7Ci0gICAgaWYgKG1f
bG93ZXJPcGVuKQotICAgICAgICByZXR1cm4gIjwiOwotICAgIHJldHVybiAiPD0iOwotfQotCi1T
dHJpbmcgSURCS2V5UmFuZ2U6OnVwcGVyV2hlcmVDbGF1c2VDb21wYXJpc29uT3BlcmF0b3IoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3VwcGVyKTsKLSAgICBpZiAobV91cHBlck9wZW4pCi0gICAg
ICAgIHJldHVybiAiPCI7Ci0gICAgcmV0dXJuICI8PSI7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXlSYW5nZS5oCmluZGV4IDhhZjQ4ZmVlZjdhNGY2YjEzMzMzZDE2MWY5Y2Y3NWRj
Mjk4OGE1YjIuLjU5OTcyZWE0M2EzYWVhMDM4NGRlMDIwZGZjZWYzMjRhOTM2OTE3MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmgKQEAgLTQzLDE1ICs0MywxMSBAQCBwdWJsaWM6
CiAgICAgfQogICAgIH5JREJLZXlSYW5nZSgpIHsgfQogCi0KICAgICBQYXNzUmVmUHRyPElEQktl
eT4gbG93ZXIoKSBjb25zdCB7IHJldHVybiBtX2xvd2VyOyB9CiAgICAgUGFzc1JlZlB0cjxJREJL
ZXk+IHVwcGVyKCkgY29uc3QgeyByZXR1cm4gbV91cHBlcjsgfQogICAgIGJvb2wgbG93ZXJPcGVu
KCkgY29uc3QgeyByZXR1cm4gbV9sb3dlck9wZW47IH0KICAgICBib29sIHVwcGVyT3BlbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXBwZXJPcGVuOyB9CiAKLSAgICBTdHJpbmcgbG93ZXJXaGVyZUNsYXVz
ZUNvbXBhcmlzb25PcGVyYXRvcigpIGNvbnN0OwotICAgIFN0cmluZyB1cHBlcldoZXJlQ2xhdXNl
Q29tcGFyaXNvbk9wZXJhdG9yKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gb25seShQYXNzUmVmUHRyPElEQktleT4gdmFsdWUpOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBsb3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwg
Ym9vbCBvcGVuID0gZmFsc2UpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiB1
cHBlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuID0gZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKaW5kZXggYzYzN2IxY2Q4NWVmNjFmMWEwMzU4OWZiYjZhZjRkNWIzOTM0NzhiZS4uZmU2
Njg0MDAzOGI5N2I2ZGU5YTkwNjk2ZWMwOGNkMDNiMzA4M2JhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC00Myw5
ICs0Myw2IEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1l
bnQuaCIKLSNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTgyLDE3ICs3OSw2IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgcmV0dXJuIGluZGV4
TmFtZXMucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSog
a2V5KQotewotICAgIHJldHVybiAiV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAgIiArIGtl
eS0+d2hlcmVTeW50YXgoKTsKLX0KLQotc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xhdXNlKFNRTGl0
ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktleSoga2V5KQotewotICAgIHF1ZXJ5
LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAga2V5LT5iaW5kKHF1ZXJ5LCAyKTsKLX0KLQogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKQEAgLTI0
MSwxMiArMjI3LDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgaW5kZXhLZXlz
LmFwcGVuZChrZXkucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0
UXVlcnkob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmpl
Y3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOwotICAgIGJvb2wgb2sgPSBn
ZXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworICAgIGludDY0X3QgZGF0YVJv
d0lkID0gSW52YWxpZElkOworICAgIGJvb2wgaXNFeGlzdGluZ1ZhbHVlID0gb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5pZCgp
LCAqa2V5LCBkYXRhUm93SWQpOwogCi0gICAgYmluZFdoZXJlQ2xhdXNlKGdldFF1ZXJ5LCBvYmpl
Y3RTdG9yZS0+aWQoKSwga2V5LmdldCgpKTsKLSAgICBib29sIGlzRXhpc3RpbmdWYWx1ZSA9IGdl
dFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7CiAgICAgaWYgKHB1dE1vZGUgPT0gQWRkT25s
eSAmJiBpc0V4aXN0aW5nVmFsdWUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIs
ICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTI1NCw3ICsyMzcsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAg
Ly8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMg
cG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAg
aW50NjRfdCBkYXRhUm93SWQgPSBpc0V4aXN0aW5nVmFsdWUgPyBnZXRRdWVyeS5nZXRDb2x1bW5J
bnQoMCkgOiBJbnZhbGlkSWQ7CiAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUt
PnB1dE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9X
aXJlU3RyaW5nKCksIGRhdGFSb3dJZCwgZGF0YVJvd0lkID09IEludmFsaWRJZCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3Qg
aGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4i
KSk7CkBAIC0zMDEsMzUgKzI4MywxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZQogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBpZFF1ZXJ5KG9iamVjdFN0b3JlLT5zcWxp
dGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNs
YXVzZShrZXkuZ2V0KCkpKTsKLSAgICBib29sIG9rID0gaWRRdWVyeS5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVy
cm9yIGhhbmRsaW5nPwotICAgIGJpbmRXaGVyZUNsYXVzZShpZFF1ZXJ5LCBvYmplY3RTdG9yZS0+
aWQoKSwga2V5LmdldCgpKTsKLSAgICBpZiAoaWRRdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KSB7CisgICAgaW50NjRfdCBpZDsKKyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9y
ZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgaWQpKSB7
CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsICJLZXkgZG9lcyBub3QgZXhpc3QgaW4g
dGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQ2
NF90IGlkID0gaWRRdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVu
dCBvc1F1ZXJ5KG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2Jq
ZWN0U3RvcmVEYXRhIFdIRVJFIGlkID0gPyIpOwotICAgIG9rID0gb3NRdWVyeS5wcmVwYXJlKCkg
PT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0
dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgb3NRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotCi0g
ICAgb2sgPSBvc1F1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBpbmRleFF1ZXJ5KG9iamVjdFN0b3Jl
LT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0
b3JlRGF0YUlkID0gPyIpOwotICAgIG9rID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVz
dWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nPwotCi0gICAgaW5kZXhRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotCi0gICAgb2sg
PSBpbmRleFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVTRUQo
b2ssIG9rKTsKLQorICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksIGlkKTsKICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIApAQCAtNDg0LDQw
ICs0NDQsMTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdlLCB1bnMKIAogdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKIHsKLSAgICBib29sIGxvd2VyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAm
JiByYW5nZS0+dXBwZXIoKTsKLQotICAgIC8vIFNldmVyYWwgZmlsZXMgZGVwZW5kIG9uIHRoaXMg
b3JkZXIgb2Ygc2VsZWN0cy4KLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBpZCwga2V5U3RyaW5n
LCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFICI7
Ci0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAgIHNxbCArPSByYW5nZS0+bG93ZXIoKS0+bG93
ZXJDdXJzb3JXaGVyZUZyYWdtZW50KHJhbmdlLT5sb3dlcldoZXJlQ2xhdXNlQ29tcGFyaXNvbk9w
ZXJhdG9yKCkpOwotICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBzcWwgKz0gcmFuZ2UtPnVw
cGVyKCktPnVwcGVyQ3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+dXBwZXJXaGVyZUNsYXVzZUNv
bXBhcmlzb25PcGVyYXRvcigpKTsKLSAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVS
IEJZICI7Ci0KICAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2Fz
dDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odG1wRGlyZWN0aW9uKTsKLSAgICBpZiAoZGlyZWN0aW9u
ID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RV
UExJQ0FURSkKLSAgICAgICAgc3FsICs9ICJrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciI7
Ci0gICAgZWxzZQotICAgICAgICBzcWwgKz0gImtleVN0cmluZyBERVNDLCBrZXlEYXRlIERFU0Ms
IGtleU51bWJlciBERVNDIjsKLQotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5ID0g
YWRvcHRQdHIobmV3IFNRTGl0ZVN0YXRlbWVudChvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2Uo
KSwgc3FsKSk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LT5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7
Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRs
aW5nPwotCi0gICAgaW50IGN1cnJlbnRDb2x1bW4gPSAxOwotICAgIGlmIChsb3dlckJvdW5kKQot
ICAgICAgICBjdXJyZW50Q29sdW1uICs9IHJhbmdlLT5sb3dlcigpLT5iaW5kKCpxdWVyeSwgY3Vy
cmVudENvbHVtbik7Ci0gICAgaWYgKHVwcGVyQm91bmQpCi0gICAgICAgIGN1cnJlbnRDb2x1bW4g
Kz0gcmFuZ2UtPnVwcGVyKCktPmJpbmQoKnF1ZXJ5LCBjdXJyZW50Q29sdW1uKTsKLSAgICBxdWVy
eS0+YmluZEludDY0KGN1cnJlbnRDb2x1bW4sIG9iamVjdFN0b3JlLT5pZCgpKTsKLQotICAgIGlm
IChxdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgeworCisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+bV9iYWNr
aW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2Uu
Z2V0KCksIGRpcmVjdGlvbik7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RT
dG9yZS0+bV9iYWNraW5nU3RvcmUuZ2V0KCksIHJhbmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LnJlbGVh
c2UoKSwgdHJ1ZSwgdHJhbnNhY3Rpb24uZ2V0KCksIG9iamVjdFN0b3JlLmdldCgpKTsKKyAgICBS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IucmVsZWFzZSgpLCBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVDdXJzb3JUeXBlLCBkaXJlY3Rpb24sIHRyYW5zYWN0aW9uLmdl
dCgpLCBvYmplY3RTdG9yZS5nZXQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29y
LnJlbGVhc2UoKSk7CiB9CiAKQEAgLTUzNywxMSArNDcyLDYgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiAgICAgICAgIG1faW5kZXhlcy5zZXQobmFtZXNb
aV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgaWRz
W2ldLCBuYW1lc1tpXSwgbV9uYW1lLCBrZXlQYXRoc1tpXSwgdW5pcXVlRmxhZ3NbaV0pKTsKIH0K
IAotU1FMaXRlRGF0YWJhc2UmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFi
YXNlKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5kYigpOwotfQotCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKICAg
ICBBU1NFUlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+bmFtZSgpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCmluZGV4IGRjMGE5YTc2ODRmN2E0NGE4Zjg3Y2FhZDRmMjcwZGM4YWQ1MjU0M2UuLjRmZGRh
YmRmZDJlYzgxMDNiODMxZDUyNmNjNzdiODlmMTEzZTQ1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC04Miw3ICs4Miw2
IEBAIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3Rv
cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50KTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBTUUxpdGVEYXRhYmFz
ZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0
b0luY3JlbWVudEtleSgpOwogICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKSB7
IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5PiBzZWxlY3RLZXlGb3JQdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIElEQktleSos
IFB1dE1vZGUsIElEQkNhbGxiYWNrcyosIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84417</attachid>
            <date>2011-03-02 07:19:15 -0800</date>
            <delta_ts>2011-03-02 15:51:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55376-20110302151913.patch</filename>
            <type>text/plain</type>
            <size>59959</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YTg1M2E0NTRmMDJhYTk4NmZlNmYwYzQ1ZTk4NGMyMzMxODUzNDllLi5l
OTg4YzhhZmJjYmJmNDU5ZmI3ZjkyY2QyNzY4YWI4NGJiYWRhNDg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzcgQEAKKzIwMTEtMDItMjggIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRl
eGVkREI6IE1vdmUgU1FMIGNvZGUsIGVzcGVjaWFsbHkgZm9yIGN1cnNvcnMsIHRvIElEQkJhY2tp
bmdTdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTUzNzYKKworICAgICAgICBNb3ZlIFNRTCBjb2RlIGZyb20gSURCS2V5LCBJREJLZXlSYW5nZSwg
SURCSW5kZXhCYWNrZW5kSW1wbCwKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCwg
YW5kIGVzcGVjaWFsbHkgSURCQ3Vyc29yQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IGZ1
bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjp1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjprZXlGcm9tUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cnNvckltcGxDb21tb246OkN1cnNvckltcGxDb21tb246OmNvbnRpbnVlSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3Vyc29ySW1wbENvbW1vbjo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29ySW1wbENvbW1v
bjo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpvYmplY3RTdG9yZURhdGFJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3JJbXBsQ29tbW9uOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJzb3JJbXBsQ29tbW9uOjpPYmplY3RTdG9yZUN1cnNvckltcGw6
OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvckltcGxDb21tb246Ok9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9i
amVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3VycmVudFJvd0V4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmRleEtleUN1cnNvckltcGw6OkluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmRleEtleUN1cnNvckltcGw6OmluZGV4RGF0YUlkKToKKyAgICAgICAgKFdlYkNvcmU6
OkluZGV4S2V5Q3Vyc29ySW1wbDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vy
c29ySW1wbDo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvcklt
cGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJ
bXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBs
OjpJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpp
bmRleERhdGFJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnByaW1hcnlLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRl
eEN1cnNvckltcGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3Jl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6fkN1cnNvcik6
CisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgICogc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgICogc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlB
bGxvd2VkKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzRXF1
YWwpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJL
ZXlSYW5nZS5jcHA6CisgICAgICAgICogc3RvcmFnZS9JREJLZXlSYW5nZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwp
OgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorCiAyMDEx
LTAzLTAyICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCBhIHRyaXZpYWwgZml4IGZvciByODAwOTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggZTczYjM1ZmJiYzg4ZDU5NzFiYWU2NTkwNzhhNTU1
ZjM1NDViZGQ0NC4uODE4YjI4MjA4YjZkNTFiYzk1YTY2NDUyZDc1MTQwYTNhYzY2NmU0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgog
I2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKQEAgLTMzNiw2ICszMzcsNDIgQEAgc3Rh
dGljIGludCBiaW5kS2V5VG9RdWVyeShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1u
LCBjb25zdCBJREJLZXkmIGtleSkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFN0cmluZyBs
b3dlckN1cnNvcldoZXJlRnJhZ21lbnQoY29uc3QgSURCS2V5JiBrZXksIFN0cmluZyBjb21wYXJp
c29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5hbWUgPSAiIikKK3sKKyAgICBzd2l0
Y2ggKGtleS50eXBlKCkpIHsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAg
cmV0dXJuICI/ICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiICIgKyBxdWFsaWZpZWRUYWJsZU5h
bWUgKyAia2V5U3RyaW5nICBBTkQgICI7CisgICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgorICAg
ICAgICByZXR1cm4gIig/ICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiICIgKyBxdWFsaWZpZWRU
YWJsZU5hbWUgKyAia2V5RGF0ZSAgT1IgTk9UICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
U3RyaW5nIElTIE5VTEwpICBBTkQgICI7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Cisg
ICAgICAgIHJldHVybiAiKD8gIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgIiArIHF1YWxpZmll
ZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgIE9SICBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSAr
ICJrZXlTdHJpbmcgSVMgTlVMTCAgT1IgIE5PVCAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eURhdGUgSVMgTlVMTCkgIEFORCAgIjsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAg
ICAgIGlmIChjb21wYXJpc29uT3BlcmF0b3IgPT0gIjwiKQorICAgICAgICAgICAgcmV0dXJuICJO
T1QoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsg
cXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMKSAgQU5EICAiOworICAgICAgICByZXR1cm4g
IiI7IC8vIElmIGl0J3MgPSwgdGhlIHVwcGVyIGJvdW5kIGhhbGYgd2lsbCBkbyB0aGUgY29uc3Ry
YWluaW5nLiBJZiBpdCdzIDw9LCB0aGVuIHRoYXQncyBhIG5vLW9wLgorICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBTdHJpbmcgdXBw
ZXJDdXJzb3JXaGVyZUZyYWdtZW50KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgY29tcGFyaXNv
bk9wZXJhdG9yLCBTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1lID0gIiIpCit7CisgICAgc3dpdGNo
IChrZXkudHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJl
dHVybiAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nICIgKyBjb21wYXJpc29u
T3BlcmF0b3IgKyAiID8gIE9SICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJ
UyBOVUxMKSAgQU5EICAiOworICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKKyAgICAgICAgcmV0
dXJuICIoIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlICIgKyBjb21wYXJpc29uT3Bl
cmF0b3IgKyAiID8gT1IgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwp
ICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAg
IjsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcmV0dXJuICIoIiArIHF1
YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgIiArIGNvbXBhcmlzb25PcGVyYXRvciArICIg
PyBPUiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMKSAgQU5EICAi
ICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFs
aWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICI7CisgICAgY2FzZSBJREJL
ZXk6Ok51bGxUeXBlOgorICAgICAgICBpZiAoY29tcGFyaXNvbk9wZXJhdG9yID09ICI8IikKKyAg
ICAgICAgICAgIHJldHVybiAiMCAhPSAwICBBTkQgICI7CisgICAgICAgIHJldHVybiBxdWFsaWZp
ZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxl
TmFtZSArICJrZXlEYXRlIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlOdW1iZXIgSVMgTlVMTCAgQU5EICAiOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gIiI7Cit9CisKIFN0cmluZyBJREJCYWNraW5nU3RvcmU6OmdldE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7
CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlE
YXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0
b3JlSWQgPSA/IEFORCAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5KSk7CkBAIC00MTUsNiArNDUy
LDI3IEBAIHZvaWQgSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVE
YXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CiB9CiAKK3ZvaWQg
SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90
IG9iamVjdFN0b3JlRGF0YUlkKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG1fZGIs
ICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/Iik7CisgICAgYm9vbCBv
ayA9IG9zUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQo
b2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIG9zUXVlcnku
YmluZEludDY0KDEsIG9iamVjdFN0b3JlRGF0YUlkKTsKKworICAgIG9rID0gb3NRdWVyeS5zdGVw
KCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgaW5kZXhRdWVyeShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdI
RVJFIG9iamVjdFN0b3JlRGF0YUlkID0gPyIpOworICAgIG9rID0gaW5kZXhRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTog
QmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgaW5kZXhRdWVyeS5iaW5kSW50NjQoMSwgb2Jq
ZWN0U3RvcmVEYXRhSWQpOworCisgICAgb2sgPSBpbmRleFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1
bHREb25lOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKK30KKwogZG91YmxlIElEQkJhY2tp
bmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIG1heChrZXlOdW1iZXIp
ICsgMSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQga2V5
U3RyaW5nIElTIE5VTEwgQU5EIGtleURhdGUgSVMgTlVMTCIpOwpAQCAtNDI5LDYgKzQ4NywyMyBA
QCBkb3VibGUgSURCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90
IG9iamVjdFN0b3JlSWQpCiAgICAgcmV0dXJuIHF1ZXJ5LmdldENvbHVtbkRvdWJsZSgwKTsKIH0K
IAorYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgaW50NjRfdCYgZm91bmRPYmplY3RTdG9y
ZURhdGFJZCkKK3sKKyAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgaWQgRlJPTSBPYmpl
Y3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EICIpICsgd2hlcmVTeW50YXhG
b3JLZXkoa2V5KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgc3FsKTsKKyAgICBi
b29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIHF1ZXJ5
LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlkKTsKKyAgICBiaW5kS2V5VG9RdWVyeShxdWVyeSwg
Miwga2V5KTsKKworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZE9iamVjdFN0b3JlRGF0YUlkID0gcXVlcnkuZ2V0
Q29sdW1uSW50NjQoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSURCQmFja2luZ1N0
b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgIlNFTEVDVCBpZCwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8iKTsKQEAgLTUxNSw2ICs1OTAsMzcwIEBAIGJvb2wgSURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZURhdGFJ
ZCkKICAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CiB9CiAKK1N0cmlu
ZyBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBrZXkpCit7CisgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIpCisg
ICAgICAgICAgICAgICAgICsgIk9iamVjdFN0b3JlRGF0YS52YWx1ZSAiCisgICAgICAgICAgICAg
ICAgICsgIkZST00gSW5kZXhEYXRhIElOTkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4
RGF0YS5vYmplY3RTdG9yZURhdGFJZCA9IE9iamVjdFN0b3JlRGF0YS5pZCAiCisgICAgICAgICAg
ICAgICAgICsgIldIRVJFIEluZGV4RGF0YS5pbmRleElkID0gPyAgQU5EICAiICsgd2hlcmVTeW50
YXhGb3JLZXkoa2V5LCAiSW5kZXhEYXRhLiIpCisgICAgICAgICAgICAgICAgICsgIk9SREVSIEJZ
IEluZGV4RGF0YS5pZCBMSU1JVCAxIjsgLy8gT3JkZXIgYnkgaW5zZXJ0aW9uIG9yZGVyIHdoZW4g
YWxsIGVsc2UgZmFpbHMuCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7Cisg
ICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CisKKyAgICBx
dWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJZCk7CisgICAgYmluZEtleVRvUXVlcnkocXVlcnksIDIs
IGtleSk7CisKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIGZvdW5kVmFsdWUgPSBxdWVyeS5nZXRDb2x1
bW5CbG9iQXNTdHJpbmcoMCk7CisgICAgQVNTRVJUKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRS
b3cpOworICAgIHJldHVybiBmb3VuZFZhbHVlOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleUZyb21RdWVyeShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikK
K3sKKyAgICBpZiAocXVlcnkuY29sdW1uQ291bnQoKSA8PSBiYXNlQ29sdW1uKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghcXVlcnkuaXNDb2x1bW5OdWxsKGJhc2VDb2x1bW4pKQorICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcocXVlcnkuZ2V0Q29sdW1uVGV4dChiYXNl
Q29sdW1uKSk7CisKKyAgICBpZiAoIXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uICsgMSkp
CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUocXVlcnkuZ2V0Q29sdW1uRG91Ymxl
KGJhc2VDb2x1bW4gKyAxKSk7CisKKyAgICBpZiAoIXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29s
dW1uICsgMikpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihxdWVyeS5nZXRD
b2x1bW5Eb3VibGUoYmFzZUNvbHVtbiArIDIpKTsKKworICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZU51bGwoKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZTo6Z2V0UHJp
bWFyeUtleVZpYUluZGV4KGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCit7Cisg
ICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIpCisgICAgICAgICAgICAgICAgICsgIk9i
amVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBPYmplY3RT
dG9yZURhdGEua2V5TnVtYmVyICIKKyAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEg
SU5ORVIgSk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlk
ID0gT2JqZWN0U3RvcmVEYXRhLmlkICIKKyAgICAgICAgICAgICAgICAgKyAiV0hFUkUgSW5kZXhE
YXRhLmluZGV4SWQgPSA/ICBBTkQgICIgKyB3aGVyZVN5bnRheEZvcktleShrZXksICJJbmRleERh
dGEuIikKKyAgICAgICAgICAgICAgICAgKyAiT1JERVIgQlkgSW5kZXhEYXRhLmlkIExJTUlUIDEi
OyAvLyBPcmRlciBieSBpbnNlcnRpb24gb3JkZXIgd2hlbiBhbGwgZWxzZSBmYWlscy4KKyAgICBT
UUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgc3FsKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJl
cGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklY
TUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRl
eElkKTsKKyAgICBiaW5kS2V5VG9RdWVyeShxdWVyeSwgMiwga2V5KTsKKworICAgIGlmIChxdWVy
eS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8SURCS2V5PiBmb3VuZEtleSA9IGtleUZyb21RdWVyeShxdWVyeSwgMCk7CisgICAgQVNT
RVJUKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpOworICAgIHJldHVybiBmb3VuZEtleS5y
ZWxlYXNlKCk7Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCit7CisgICAgU3RyaW5nIHNxbCA9IFN0
cmluZygiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IEFORCAiKSAr
IHdoZXJlU3ludGF4Rm9yS2V5KGtleSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIs
IHNxbCk7CisgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/
CisKKyAgICBxdWVyeS5iaW5kSW50NjQoMSwgaW5kZXhJZCk7CisgICAgYmluZEtleVRvUXVlcnko
cXVlcnksIDIsIGtleSk7CisKKyAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJv
dzsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvciB7CitwdWJsaWM6CisgICAgQ3Vyc29ySW1wbENvbW1vbihT
UUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVu
ZXNzQ29uc3RyYWludCkKKyAgICAgICAgOiBtX3F1ZXJ5KHNxbGl0ZURhdGFiYXNlLCBxdWVyeSkK
KyAgICAgICAgLCBtX2RiKHNxbGl0ZURhdGFiYXNlKQorICAgICAgICAsIG1fdW5pcXVlbmVzc0Nv
bnN0cmFpbnQodW5pcXVlbmVzc0NvbnN0cmFpbnQpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFs
IH5DdXJzb3JJbXBsQ29tbW9uKCkge30KKworICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
CisgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5Kik7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1f
Y3VycmVudEtleTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOworICAgIHZpcnR1
YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCgpID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3Qg
aW5kZXhEYXRhSWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGN1cnJlbnRSb3dFeGlzdHMoKSA9IDA7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgbV9xdWVyeTsKKworcHJvdGVjdGVkOgorICAgIFNRTGl0ZURhdGFiYXNlJiBt
X2RiOworICAgIGJvb2wgbV91bmlxdWVuZXNzQ29uc3RyYWludDsKKyAgICBpbnQ2NF90IG1fY3Vy
cmVudElkOworICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKK307CisKK2Jvb2wgQ3Vy
c29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSkKK3sKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAobV9xdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0
Um93KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFJlZlB0cjxJREJLZXk+
IG9sZEtleSA9IG1fY3VycmVudEtleTsKKyAgICAgICAgbG9hZEN1cnJlbnRSb3coKTsKKworICAg
ICAgICAvLyBTa2lwIGlmIHRoaXMgZW50cnkgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBvYmpl
Y3Qgc3RvcmUuCisgICAgICAgIGlmICghY3VycmVudFJvd0V4aXN0cygpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gSWYgYSBrZXkgd2FzIHN1cHBsaWVkLCB3ZSBtdXN0IGxv
b3AgdW50aWwgd2UgZmluZCB0aGF0IGtleSAob3IgaGl0IHRoZSBlbmQpLgorICAgICAgICBpZiAo
a2V5ICYmICFrZXktPmlzRXF1YWwobV9jdXJyZW50S2V5LmdldCgpKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSB1bmlxdWVuZXNzIGNvbnN0
cmFpbnQsIHdlIGNhbiBzdG9wIG5vdy4KKyAgICAgICAgaWYgKCFtX3VuaXF1ZW5lc3NDb25zdHJh
aW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghbV9jdXJyZW50S2V5LT5pc0Vx
dWFsKG9sZEtleS5nZXQoKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNv
ckltcGxDb21tb24geworcHVibGljOgorICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChTUUxpdGVE
YXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIFN0cmluZyBxdWVyeSwgYm9vbCB1bmlxdWVuZXNzQ29u
c3RyYWludCkKKyAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHNxbGl0ZURhdGFiYXNlLCBxdWVy
eSwgdW5pcXVlbmVzc0NvbnN0cmFpbnQpCisgICAgeworICAgIH0KKworICAgIC8vIEN1cnNvcklt
cGxDb21tb24uCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRW
YWx1ZTsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCgpIHsgcmV0dXJu
IG1fY3VycmVudElkOyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJl
bnRSb3coKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygpOworCitwcml2YXRl
OgorICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKK307CisKK3ZvaWQgT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCit7CisgICAgbV9jdXJyZW50SWQgPSBtX3F1ZXJ5Lmdl
dENvbHVtbkludDY0KDApOworICAgIG1fY3VycmVudEtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5
LCAxKTsKKyAgICBtX2N1cnJlbnRWYWx1ZSA9IG1fcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5n
KDQpOworfQorCitib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3VycmVudFJvd0V4aXN0cygp
Cit7CisgICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hF
UkUgaWQgPSA/IjsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGIsIHNxbCk7CisK
KyAgICBib29sIG9rID0gc3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKKyAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7CisKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIG1fY3Vy
cmVudElkKTsKKyAgICByZXR1cm4gc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Cit9
CisKK2NsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsK
K3B1YmxpYzoKKyAgICBJbmRleEtleUN1cnNvckltcGwoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURh
dGFiYXNlLCBTdHJpbmcgcXVlcnksIGJvb2wgdW5pcXVlbmVzc0NvbnN0cmFpbnQpCisgICAgICAg
IDogQ3Vyc29ySW1wbENvbW1vbihzcWxpdGVEYXRhYmFzZSwgcXVlcnksIHVuaXF1ZW5lc3NDb25z
dHJhaW50KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudFBy
aW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBvYmplY3RTdG9y
ZURhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4
aXN0cygpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlL
ZXk7Cit9OworCit2b2lkIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQorewor
ICAgIG1fY3VycmVudElkID0gbV9xdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICBtX2N1cnJl
bnRLZXkgPSBrZXlGcm9tUXVlcnkobV9xdWVyeSwgMSk7CisgICAgbV9jdXJyZW50UHJpbWFyeUtl
eSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCA0KTsKK30KKworYm9vbCBJbmRleEtleUN1cnNvcklt
cGw6OmN1cnJlbnRSb3dFeGlzdHMoKQoreworICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkIEZS
T00gSW5kZXhEYXRhIFdIRVJFIGlkID0gPyI7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RiLCBzcWwpOworCisgICAgYm9vbCBvayA9IHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
UmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworCisgICAgc3RhdGVtZW50LmJp
bmRJbnQ2NCgxLCBtX2N1cnJlbnRJZCk7CisgICAgcmV0dXJuIHN0YXRlbWVudC5zdGVwKCkgPT0g
U1FMUmVzdWx0Um93OworfQorCitjbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29y
SW1wbENvbW1vbiB7CitwdWJsaWM6CisgICAgSW5kZXhDdXJzb3JJbXBsKFNRTGl0ZURhdGFiYXNl
JiBzcWxpdGVEYXRhYmFzZSwgU3RyaW5nIHF1ZXJ5LCBib29sIHVuaXF1ZW5lc3NDb25zdHJhaW50
KQorICAgICAgICA6IEN1cnNvckltcGxDb21tb24oc3FsaXRlRGF0YWJhc2UsIHF1ZXJ5LCB1bmlx
dWVuZXNzQ29uc3RyYWludCkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ3Vyc29ySW1wbENvbW1v
bgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBt
X2N1cnJlbnRQcmltYXJ5S2V5OyB9CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVy
biBtX2N1cnJlbnRWYWx1ZTsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJ
ZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQ2
NF90IGluZGV4RGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZEN1cnJlbnRSb3coKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygp
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7Cisg
ICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOworfTsKKwordm9pZCBJbmRleEN1cnNvckltcGw6Omxv
YWRDdXJyZW50Um93KCkKK3sKKyAgICBtX2N1cnJlbnRJZCA9IG1fcXVlcnkuZ2V0Q29sdW1uSW50
NjQoMCk7CisgICAgbV9jdXJyZW50S2V5ID0ga2V5RnJvbVF1ZXJ5KG1fcXVlcnksIDEpOworICAg
IG1fY3VycmVudFZhbHVlID0gbV9xdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoNCk7CisgICAg
bV9jdXJyZW50UHJpbWFyeUtleSA9IGtleUZyb21RdWVyeShtX3F1ZXJ5LCA1KTsKK30KKworYm9v
bCBJbmRleEN1cnNvckltcGw6OmN1cnJlbnRSb3dFeGlzdHMoKQoreworICAgIFN0cmluZyBzcWwg
PSAiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGlkID0gPyI7CisgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RiLCBzcWwpOworCisgICAgYm9vbCBvayA9IHN0YXRlbWVudC5w
cmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworCisg
ICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBtX2N1cnJlbnRJZCk7CisgICAgcmV0dXJuIHN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OworfQorCit9IC8vIG5hbWVzcGFjZQorCitQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9wZW5PYmpl
Y3RTdG9yZUN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiBy
YW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGJvb2wgbG93ZXJC
b3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJh
bmdlICYmIHJhbmdlLT51cHBlcigpOworCisgICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQsIGtl
eVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBX
SEVSRSAiOworICAgIGlmIChsb3dlckJvdW5kKQorICAgICAgICBzcWwgKz0gbG93ZXJDdXJzb3JX
aGVyZUZyYWdtZW50KCpyYW5nZS0+bG93ZXIoKSwgcmFuZ2UtPmxvd2VyT3BlbigpID8gIjwiIDog
Ijw9Iik7CisgICAgaWYgKHVwcGVyQm91bmQpCisgICAgICAgIHNxbCArPSB1cHBlckN1cnNvcldo
ZXJlRnJhZ21lbnQoKnJhbmdlLT51cHBlcigpLCByYW5nZS0+dXBwZXJPcGVuKCkgPyAiPCIgOiAi
PD0iKTsKKyAgICBzcWwgKz0gIm9iamVjdFN0b3JlSWQgPSA/IE9SREVSIEJZICI7CisKKyAgICBp
ZiAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29y
OjpORVhUX05PX0RVUExJQ0FURSkKKyAgICAgICAgc3FsICs9ICJrZXlTdHJpbmcsIGtleURhdGUs
IGtleU51bWJlciI7CisgICAgZWxzZQorICAgICAgICBzcWwgKz0gImtleVN0cmluZyBERVNDLCBr
ZXlEYXRlIERFU0MsIGtleU51bWJlciBERVNDIjsKKworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1
cnNvckltcGw+IGN1cnNvciA9IGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwobV9k
Yiwgc3FsLCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJl
Y3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSkpOworCisgICAgYm9vbCBvayA9
IGN1cnNvci0+bV9xdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VO
VVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgaW50
IGN1cnJlbnRDb2x1bW4gPSAxOworICAgIGlmIChsb3dlckJvdW5kKQorICAgICAgICBjdXJyZW50
Q29sdW1uICs9IGJpbmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgY3VycmVudENvbHVtbiwg
KnJhbmdlLT5sb3dlcigpKTsKKyAgICBpZiAodXBwZXJCb3VuZCkKKyAgICAgICAgY3VycmVudENv
bHVtbiArPSBiaW5kS2V5VG9RdWVyeShjdXJzb3ItPm1fcXVlcnksIGN1cnJlbnRDb2x1bW4sICpy
YW5nZS0+dXBwZXIoKSk7CisgICAgY3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChjdXJyZW50Q29s
dW1uLCBvYmplY3RTdG9yZUlkKTsKKworICAgIGlmIChjdXJzb3ItPm1fcXVlcnkuc3RlcCgpICE9
IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjdXJzb3ItPmxvYWRDdXJy
ZW50Um93KCk7CisgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vy
c29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNU
IEluZGV4RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIElu
ZGV4RGF0YS5rZXlOdW1iZXIsICIpCisgICAgICAgICAgICAgICAgICsgKCJPYmplY3RTdG9yZURh
dGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVEYXRhLmtl
eU51bWJlciAiKQorICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5FUiBKT0lO
IE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBPYmplY3RT
dG9yZURhdGEuaWQgV0hFUkUgIjsKKworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJh
bmdlLT5sb3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBl
cigpOworCisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIHNxbCArPSBsb3dlckN1cnNvcldo
ZXJlRnJhZ21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJPcGVuKCkgPyAiPCIgOiAi
PD0iLCAiSW5kZXhEYXRhLiIpOworICAgIGlmICh1cHBlckJvdW5kKQorICAgICAgICBzcWwgKz0g
dXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFuZ2UtPnVwcGVyT3Bl
bigpID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKKyAgICBzcWwgKz0gIkluZGV4RGF0YS5p
bmRleElkID0gPyBPUkRFUiBCWSAiOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUpCisgICAg
ICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4
RGF0YS5rZXlOdW1iZXIsIEluZGV4RGF0YS5pZCI7CisgICAgZWxzZQorICAgICAgICBzcWwgKz0g
IkluZGV4RGF0YS5rZXlTdHJpbmcgREVTQywgSW5kZXhEYXRhLmtleURhdGUgREVTQywgSW5kZXhE
YXRhLmtleU51bWJlciBERVNDLCBJbmRleERhdGEuaWQgREVTQyI7CisKKyAgICBSZWZQdHI8SW5k
ZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBs
KG1fZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwg
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpKTsKKworICAgIGJvb2wg
b2sgPSBjdXJzb3ItPm1fcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAg
IGludCBpbmRleENvbHVtbiA9IDE7CisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIGluZGV4
Q29sdW1uICs9IGJpbmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpy
YW5nZS0+bG93ZXIoKSk7CisgICAgaWYgKHVwcGVyQm91bmQpCisgICAgICAgIGluZGV4Q29sdW1u
ICs9IGJpbmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+
dXBwZXIoKSk7CisgICAgY3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChpbmRleENvbHVtbiwgaW5k
ZXhJZCk7CisKKyAgICBpZiAoY3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cp
CisgICAgICAgIHJldHVybiAwOworCisgICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOworICAg
IHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIElu
ZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVy
LCAiKQorICAgICAgICAgICAgICAgICArICgiT2JqZWN0U3RvcmVEYXRhLnZhbHVlLCBPYmplY3RT
dG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0U3RvcmVE
YXRhLmtleU51bWJlciAiKQorICAgICAgICAgICAgICAgICArICJGUk9NIEluZGV4RGF0YSBJTk5F
UiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3RvcmVEYXRhSWQgPSBP
YmplY3RTdG9yZURhdGEuaWQgV0hFUkUgIjsKKworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdl
LT51cHBlcigpOworCisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIHNxbCArPSBsb3dlckN1
cnNvcldoZXJlRnJhZ21lbnQoKnJhbmdlLT5sb3dlcigpLCByYW5nZS0+bG93ZXJPcGVuKCkgPyAi
PCIgOiAiPD0iLCAiSW5kZXhEYXRhLiIpOworICAgIGlmICh1cHBlckJvdW5kKQorICAgICAgICBz
cWwgKz0gdXBwZXJDdXJzb3JXaGVyZUZyYWdtZW50KCpyYW5nZS0+dXBwZXIoKSwgcmFuZ2UtPnVw
cGVyT3BlbigpID8gIjwiIDogIjw9IiwgIkluZGV4RGF0YS4iKTsKKyAgICBzcWwgKz0gIkluZGV4
RGF0YS5pbmRleElkID0gPyBPUkRFUiBCWSAiOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBJREJD
dXJzb3I6Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUp
CisgICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUs
IEluZGV4RGF0YS5rZXlOdW1iZXIsIEluZGV4RGF0YS5pZCI7CisgICAgZWxzZQorICAgICAgICBz
cWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcgREVTQywgSW5kZXhEYXRhLmtleURhdGUgREVTQywg
SW5kZXhEYXRhLmtleU51bWJlciBERVNDLCBJbmRleERhdGEuaWQgREVTQyI7CisKKyAgICBSZWZQ
dHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBs
KG1fZGIsIHNxbCwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9OT19EVVBMSUNBVEUgfHwg
ZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUpKTsKKworICAgIGJvb2wg
b2sgPSBjdXJzb3ItPm1fcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KKworICAg
IGludCBpbmRleENvbHVtbiA9IDE7CisgICAgaWYgKGxvd2VyQm91bmQpCisgICAgICAgIGluZGV4
Q29sdW1uICs9IGJpbmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpy
YW5nZS0+bG93ZXIoKSk7CisgICAgaWYgKHVwcGVyQm91bmQpCisgICAgICAgIGluZGV4Q29sdW1u
ICs9IGJpbmRLZXlUb1F1ZXJ5KGN1cnNvci0+bV9xdWVyeSwgaW5kZXhDb2x1bW4sICpyYW5nZS0+
dXBwZXIoKSk7CisgICAgY3Vyc29yLT5tX3F1ZXJ5LmJpbmRJbnQ2NChpbmRleENvbHVtbiwgaW5k
ZXhJZCk7CisKKyAgICBpZiAoY3Vyc29yLT5tX3F1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cp
CisgICAgICAgIHJldHVybiAwOworCisgICAgY3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOworICAg
IHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDExYTdlNTgxMDNiMzJjNjFhMWJjMzY5MGY4MWI0YzMz
NjVhMjFkOTEuLjY1ZGFkZTBjNzhlZDFjMTFmMjMzMTk3YTZjZTkxOTVlNzE1OTQ3MDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIK
ICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7CiBjbGFzcyBJREJLZXk7
CitjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBjbGFzcyBJREJC
YWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKQEAgLTU0
LDcgKzU2LDkgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOwogICAgIGJvb2wgcHV0T2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogICAgIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlRGF0YUlkKTsKICAgICBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKKyAgICBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBpbnQ2NF90JiBmb3VuZE9iamVjdFN0b3JlRGF0
YUlkKTsKIAogICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewogICAgIHB1Ymxp
YzoKQEAgLTY4LDYgKzcyLDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0
X3QgaW5kZXhJZCk7CiAgICAgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKTsKICAgICBib29s
IGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKTsKKyAg
ICBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KTsKKyAgICBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisKKyAgICBjbGFzcyBDdXJzb3IgOiBwdWJsaWMg
UmVmQ291bnRlZDxDdXJzb3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBj
b250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQktleT4gcHJpbWFyeUtleSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUo
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCgpID0gMDsK
KyAgICAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIH5DdXJzb3IoKSB7fTsKKyAgICB9OworCisgICAgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5P
YmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5k
ZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKTsKKyAgICBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7
CiAKICAgICBTUUxpdGVEYXRhYmFzZSYgZGIoKSB7IHJldHVybiBtX2RiOyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggODQyMzg4
YjdjOTIwYWI0MDgyODNlYTg3NzI3ZDQyMGVmOGU1ZGE5OC4uNmFlMzYxNjQ0NDUwMWExNTBiYzc0
ZTYyNjRlN2FmMGUyMGMzMDRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTMxLDMwICszMSwyMyBAQAogI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklE
QkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
SURCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
IgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKElEQkJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZVN0YXRl
bWVudD4gcXVlcnksIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKiBv
YmplY3RTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1f
a2V5UmFuZ2Uoa2V5UmFuZ2UpCitJREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2Vu
ZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlKiBvYmplY3RTdG9yZSkKKyAgICA6IG1fY3Vyc29yKGN1cnNvcikKICAgICAsIG1f
ZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fcXVlcnkocXVlcnkpCiAgICAgLCBtX2N1cnNv
clR5cGUoY3Vyc29yVHlwZSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAg
LCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogewotICAgIGxvYWRDdXJyZW50Um93KCk7CiB9
CiAKIElEQkN1cnNvckJhY2tlbmRJbXBsOjp+SURCQ3Vyc29yQmFja2VuZEltcGwoKQpAQCAtNjgs
MjggKzYxLDI4IEBAIHVuc2lnbmVkIHNob3J0IElEQkN1cnNvckJhY2tlbmRJbXBsOjpkaXJlY3Rp
b24oKSBjb25zdAogCiBQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6Omtl
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY3VycmVudEtleTsKKyAgICByZXR1cm4gbV9jdXJz
b3ItPmtleSgpOwogfQogCiBQYXNzUmVmUHRyPElEQktleT4gSURCQ3Vyc29yQmFja2VuZEltcGw6
OnByaW1hcnlLZXkoKSBjb25zdAogewotICAgIHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5Owor
ICAgIHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOwogfQogCiBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4S2V5Q3Vyc29yKTsKLSAgICByZXR1cm4g
bV9jdXJyZW50VmFsdWU7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjp1cGRhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBpZiAoIW1fcXVlcnkgfHwgbV9jdXJyZW50SWQgPT0gSW52YWxpZElkIHx8IG1fY3Vyc29yVHlw
ZSA9PSBJbmRleEtleUN1cnNvcikgeworICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JUeXBl
ID09IEluZGV4S2V5Q3Vyc29yKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fb2JqZWN0
U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJyZW50UHJpbWFyeUtleSwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQo
KSwgZWMpOworICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1hcnlL
ZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNhbGxi
YWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MTAxLDUxICs5NCwxNyBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdAogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiB9CiAKLWJvb2wgSURCQ3Vyc29y
QmFja2VuZEltcGw6OmN1cnJlbnRSb3dFeGlzdHMoKQotewotICAgIFN0cmluZyBzcWwgPSBtX2N1
cnNvclR5cGUgPT0gT2JqZWN0U3RvcmVDdXJzb3IgPyAiU0VMRUNUIGlkIEZST00gT2JqZWN0U3Rv
cmVEYXRhIFdIRVJFIGlkID0gPyIgOiAiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGlk
ID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2JhY2tpbmdTdG9yZS0+ZGIo
KSwgc3FsKTsKLQotICAgIGJvb2wgb2sgPSBzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTFJlc3Vs
dE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoMSwgbV9jdXJyZW50SWQpOwotICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09IFNRTFJl
c3VsdFJvdzsKLX0KLQogLy8gSU1QT1JUQU5UOiBJZiB0aGlzIGV2ZXIgMSkgZmlyZXMgYW4gJ2Vy
cm9yJyBldmVudCBhbmQgMikgaXQncyBwb3NzaWJsZSB0byBmaXJlIGFub3RoZXIgZXZlbnQgYWZ0
ZXJ3YXJkcywKIC8vICAgICAgICAgICAgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
d2lsbCBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGlzISEhCiB2b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
IHsKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBycEN1cnNvcjsK
ICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgaWYgKCFjdXJzb3ItPm1fcXVlcnkgfHwgY3Vyc29yLT5tX3F1ZXJ5LT5zdGVwKCkgIT0g
U1FMUmVzdWx0Um93KSB7Ci0gICAgICAgICAgICBjdXJzb3ItPm1fcXVlcnkgPSAwOwotICAgICAg
ICAgICAgY3Vyc29yLT5tX2N1cnJlbnRJZCA9IEludmFsaWRJZDsKLSAgICAgICAgICAgIGN1cnNv
ci0+bV9jdXJyZW50S2V5ID0gMDsKLSAgICAgICAgICAgIGN1cnNvci0+bV9jdXJyZW50UHJpbWFy
eUtleSA9IDA7Ci0gICAgICAgICAgICBjdXJzb3ItPm1fY3VycmVudFZhbHVlID0gMDsKLSAgICAg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRy
PElEQktleT4gb2xkS2V5ID0gY3Vyc29yLT5tX2N1cnJlbnRLZXk7Ci0gICAgICAgIGN1cnNvci0+
bG9hZEN1cnJlbnRSb3coKTsKLQotICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZW50cnkgaGFzIGJl
ZW4gZGVsZXRlZCBmcm9tIHRoZSBvYmplY3Qgc3RvcmUuCi0gICAgICAgIGlmICghY3Vyc29yLT5j
dXJyZW50Um93RXhpc3RzKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJ
ZiBhIGtleSB3YXMgc3VwcGxpZWQsIHdlIG11c3QgbG9vcCB1bnRpbCB3ZSBmaW5kIHRoYXQga2V5
IChvciBoaXQgdGhlIGVuZCkuCi0gICAgICAgIGlmIChrZXkgJiYgIWtleS0+aXNFcXVhbChjdXJz
b3ItPm1fY3VycmVudEtleS5nZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgdW5pcXVlbmVzcyBjb25zdHJhaW50LCB3ZSBjYW4gc3Rv
cCBub3cuCi0gICAgICAgIGlmIChjdXJzb3ItPm1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVY
VCB8fCBjdXJzb3ItPm1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVikKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBpZiAoIWN1cnNvci0+bV9jdXJyZW50S2V5LT5pc0VxdWFsKG9sZEtl
eS5nZXQoKSkpCi0gICAgICAgICAgICBicmVhazsKKworICAgIGlmICghY3Vyc29yLT5tX2N1cnNv
ciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbihrZXkuZ2V0KCkpKSB7Cisg
ICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5nZXQoKSk7CkBAIC0xNTMs
MjcgKzExMiwxMiBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9u
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhcwogCiB2b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1fcXVlcnkgfHwgbV9jdXJy
ZW50SWQgPT0gSW52YWxpZElkIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikgewor
ICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vyc29yKSB7CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKG1f
Y3VycmVudFByaW1hcnlLZXksIHBycENhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMp
OwotfQotCi0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmxvYWRDdXJyZW50Um93KCkKLXsK
LSAgICAvLyBUaGUgY29sdW1uIG51bWJlcnMgZGVwZW5kIG9uIHRoZSBxdWVyeSBpbiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwgYW5kL29yIElEQkluZGV4QmFj
a2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbC4KLSAgICBtX2N1cnJlbnRJZCA9IG1fcXVlcnkt
PmdldENvbHVtbkludDY0KDApOwotICAgIG1fY3VycmVudEtleSA9IElEQktleTo6ZnJvbVF1ZXJ5
KCptX3F1ZXJ5LCAxKTsKLSAgICBtX2N1cnJlbnRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUobV9xdWVyeS0+Z2V0Q29sdW1uQmxvYkFzU3RyaW5nKDQpKTsKLSAg
ICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gSURCS2V5Ojpmcm9tUXVlcnkoKm1fcXVlcnksIDUpOwot
fQotCi1TUUxpdGVEYXRhYmFzZSYgSURCQ3Vyc29yQmFja2VuZEltcGw6OmRhdGFiYXNlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmRiKCk7CisgICAgbV9vYmplY3RTdG9y
ZS0+ZGVsZXRlRnVuY3Rpb24obV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgcHJwQ2FsbGJhY2tzLCBt
X3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCBhNDZm
N2JmNzFjYmQyZTk2Njc3NzU5NTM3OWU0OTVhZmI1Nzg1Y2FiLi40NGU4OGJkODU0MDFmZTRiNzRh
N2JmYWEzZmE3ODg0MDUwYTdkYmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklE
QkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OSw5ICs1MCw5IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbiwgUGFzc093blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5LCBDdXJzb3JUeXBlIGN1cnNv
clR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBjdXJzb3IsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIG9iamVjdFN0b3JlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChiYWNr
aW5nU3RvcmUsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LCBjdXJzb3JUeXBlLCB0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJz
b3JCYWNrZW5kSW1wbChjdXJzb3IsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBs
KCk7CiAKQEAgLTY0LDI4ICs2NSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogCiBw
cml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc093blB0cjxTUUxp
dGVTdGF0ZW1lbnQ+IHF1ZXJ5LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqKTsKLQotICAgIGJvb2wgY3Vy
cmVudFJvd0V4aXN0cygpOwotICAgIHZvaWQgbG9hZEN1cnJlbnRSb3coKTsKLSAgICBTUUxpdGVE
YXRhYmFzZSYgZGF0YWJhc2UoKSBjb25zdDsKKyAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIEN1
cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZSopOwogCiAgICAgc3RhdGljIHZvaWQgY29udGludWVGdW5jdGlvbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwog
Ci0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7Ci0KLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLQotICAgIFJlZlB0cjxJREJLZXlSYW5n
ZT4gbV9rZXlSYW5nZTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vy
c29yOwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIE93blB0cjxT
UUxpdGVTdGF0ZW1lbnQ+IG1fcXVlcnk7CiAgICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0g
ICAgaW50NjRfdCBtX2N1cnJlbnRJZDsKLQotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtl
eTsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRQcmltYXJ5S2V5OwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fY3VycmVudFZhbHVlOwotCiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IGRkOWQ5NTM4
ODY2MTM2NzA3NTc5N2UzZTJhMTUyYWM0M2VjNjFkY2EuLjYyZTUzNjRiZWY4MjJkYjk4Y2MwZGU1
NTQwMDVlZTMzZDIwMWY1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcApAQCAtMzcsOCArMzcsNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgog
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjgsMzggKzY2LDI0IEBAIElE
QkluZGV4QmFja2VuZEltcGw6On5JREJJbmRleEJhY2tlbmRJbXBsKCkKIAogdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1bnR5cGVkRGlyZWN0aW9uLCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbikKIHsKLSAgICAvLyBTZXZlcmFsIGZpbGVzIGRlcGVuZCBvbiB0aGlz
IG9yZGVyIG9mIHNlbGVjdHMuCi0gICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIEluZGV4
RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0
YS5rZXlOdW1iZXIsICIpCi0gICAgICAgICAgICAgICAgICsgKCJPYmplY3RTdG9yZURhdGEudmFs
dWUsIE9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBP
YmplY3RTdG9yZURhdGEua2V5TnVtYmVyICIpCi0gICAgICAgICAgICAgICAgICsgIkZST00gSW5k
ZXhEYXRhIElOTkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmplY3RTdG9y
ZURhdGFJZCA9IE9iamVjdFN0b3JlRGF0YS5pZCBXSEVSRSAiOwotCi0gICAgYm9vbCBsb3dlckJv
dW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7Ci0gICAgYm9vbCB1cHBlckJvdW5kID0gcmFu
Z2UgJiYgcmFuZ2UtPnVwcGVyKCk7Ci0gICAgCi0gICAgaWYgKGxvd2VyQm91bmQpCi0gICAgICAg
IHNxbCArPSByYW5nZS0+bG93ZXIoKS0+bG93ZXJDdXJzb3JXaGVyZUZyYWdtZW50KHJhbmdlLT5s
b3dlcldoZXJlQ2xhdXNlQ29tcGFyaXNvbk9wZXJhdG9yKCksICJJbmRleERhdGEuIik7Ci0gICAg
aWYgKHVwcGVyQm91bmQpCi0gICAgICAgIHNxbCArPSByYW5nZS0+dXBwZXIoKS0+dXBwZXJDdXJz
b3JXaGVyZUZyYWdtZW50KHJhbmdlLT51cHBlcldoZXJlQ2xhdXNlQ29tcGFyaXNvbk9wZXJhdG9y
KCksICJJbmRleERhdGEuIik7Ci0gICAgc3FsICs9ICJJbmRleERhdGEuaW5kZXhJZCA9ID8gT1JE
RVIgQlkgIjsKLQogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19j
YXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih1bnR5cGVkRGlyZWN0aW9uKTsKLSAgICBpZiAoZGly
ZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
X05PX0RVUExJQ0FURSkKLSAgICAgICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nLCBJbmRl
eERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgSW5kZXhEYXRhLmlkIjsKLSAgICBl
bHNlCi0gICAgICAgIHNxbCArPSAiSW5kZXhEYXRhLmtleVN0cmluZyBERVNDLCBJbmRleERhdGEu
a2V5RGF0ZSBERVNDLCBJbmRleERhdGEua2V5TnVtYmVyIERFU0MsIEluZGV4RGF0YS5pZCBERVND
IjsKLQotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5ID0gYWRvcHRQdHIobmV3IFNR
TGl0ZVN0YXRlbWVudChpbmRleC0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKSk7Ci0gICAgYm9vbCBv
ayA9IHF1ZXJ5LT5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgaW50IGluZGV4
Q29sdW1uID0gMTsKLSAgICBpZiAobG93ZXJCb3VuZCkKLSAgICAgICAgaW5kZXhDb2x1bW4gKz0g
cmFuZ2UtPmxvd2VyKCktPmJpbmQoKnF1ZXJ5LCBpbmRleENvbHVtbik7Ci0gICAgaWYgKHVwcGVy
Qm91bmQpCi0gICAgICAgIGluZGV4Q29sdW1uICs9IHJhbmdlLT51cHBlcigpLT5iaW5kKCpxdWVy
eSwgaW5kZXhDb2x1bW4pOwotICAgIHF1ZXJ5LT5iaW5kSW50NjQoaW5kZXhDb2x1bW4sIGluZGV4
LT5pZCgpKTsKLQotICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgeworCisg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisK
KyAgICBzd2l0Y2ggKGN1cnNvclR5cGUpIHsKKyAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OkluZGV4S2V5Q3Vyc29yOgorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRl
eC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+aWQoKSwgcmFuZ2Uu
Z2V0KCksIGRpcmVjdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5pZCgpLCByYW5n
ZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKKyAgICBjYXNlIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVD
dXJzb3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpudWxsVmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDgsNyArOTIs
NyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cgogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKGlu
ZGV4LT5tX3N0b3JlTmFtZSwgZWMpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZSAmJiAhZWMpOwog
Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpjcmVhdGUoaW5kZXgtPm1fYmFja2luZ1N0b3JlLmdldCgpLCByYW5nZSwg
ZGlyZWN0aW9uLCBxdWVyeS5yZWxlYXNlKCksIGN1cnNvclR5cGUsIHRyYW5zYWN0aW9uLmdldCgp
LCBvYmplY3RTdG9yZS5nZXQoKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vy
c29yLmdldCgpLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRyYW5zYWN0aW9uLmdldCgpLCBvYmpl
Y3RTdG9yZS5nZXQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2Uo
KSk7CiB9CiAKQEAgLTEzNCwyNyArMTE4LDIyIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6
b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zCiAK
IHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIGJvb2wgZ2V0T2JqZWN0LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogewotICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQotICAgICAgICAg
ICAgICAgICArIChnZXRPYmplY3QgPyAiT2JqZWN0U3RvcmVEYXRhLnZhbHVlICIgOiAiT2JqZWN0
U3RvcmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3Jl
RGF0YS5rZXlOdW1iZXIgIikKLSAgICAgICAgICAgICAgICAgKyAiRlJPTSBJbmRleERhdGEgSU5O
RVIgSk9JTiBPYmplY3RTdG9yZURhdGEgT04gSW5kZXhEYXRhLm9iamVjdFN0b3JlRGF0YUlkID0g
T2JqZWN0U3RvcmVEYXRhLmlkICIKLSAgICAgICAgICAgICAgICAgKyAiV0hFUkUgSW5kZXhEYXRh
LmluZGV4SWQgPSA/ICBBTkQgICIgKyBrZXktPndoZXJlU3ludGF4KCJJbmRleERhdGEuIikKLSAg
ICAgICAgICAgICAgICAgKyAiT1JERVIgQlkgSW5kZXhEYXRhLmlkIExJTUlUIDEiOyAvLyBPcmRl
ciBieSBpbnNlcnRpb24gb3JkZXIgd2hlbiBhbGwgZWxzZSBmYWlscy4KLSAgICBTUUxpdGVTdGF0
ZW1lbnQgcXVlcnkoaW5kZXgtPnNxbGl0ZURhdGFiYXNlKCksIHNxbCk7Ci0gICAgYm9vbCBvayA9
IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBxdWVyeS5iaW5kSW50
NjQoMSwgaW5kZXgtPmlkKCkpOwotICAgIGtleS0+YmluZChxdWVyeSwgMik7Ci0gICAgaWYgKHF1
ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXguIikpOwotICAgICAgICByZXR1
cm47CisgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVybmFsIGludG8gdHdvIGZ1bmN0aW9ucywg
Z2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgorICAgIGlmIChnZXRPYmplY3QpIHsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RWaWFJbmRl
eChpbmRleC0+aWQoKSwgKmtleSk7CisgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAg
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0
aGUgaW5kZXguIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
dmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQg
PSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+aWQo
KSwgKmtleSk7CisgICAgICAgIGlmICgha2V5UmVzdWx0KSB7CisgICAgICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleC4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3Moa2V5UmVzdWx0LmdldCgpKTsKICAgICB9Ci0KLSAgICBpZiAoZ2V0T2JqZWN0KQotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKHF1ZXJ5LmdldENvbHVtblRleHQoMCkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKElEQktleTo6ZnJvbVF1ZXJ5KHF1ZXJ5LCAwKSk7Ci0gICAgQVNTRVJUKHF1
ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpOwogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OmdldChQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE3NSwzNCArMTU0LDEyIEBAIHZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUjsKIH0KIAotc3RhdGljIFN0cmluZyB3aGVyZUNsYXVzZShJREJLZXkqIGtleSkKLXsK
LSAgICByZXR1cm4gIldIRVJFIGluZGV4SWQgPSA/ICBBTkQgICIgKyBrZXktPndoZXJlU3ludGF4
KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJpbmRXaGVyZUNsYXVzZShTUUxpdGVTdGF0ZW1lbnQmIHF1
ZXJ5LCBpbnQ2NF90IGlkLCBJREJLZXkqIGtleSkKLXsKLSAgICBxdWVyeS5iaW5kSW50NjQoMSwg
aWQpOwotICAgIGtleS0+YmluZChxdWVyeSwgMik7Ci19Ci0KIGJvb2wgSURCSW5kZXhCYWNrZW5k
SW1wbDo6YWRkaW5nS2V5QWxsb3dlZChJREJLZXkqIGtleSkKIHsKICAgICBpZiAoIW1fdW5pcXVl
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxp
dGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhICIgKyB3aGVyZUNsYXVzZShr
ZXkpKTsKLSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8K
LSAgICBiaW5kV2hlcmVDbGF1c2UocXVlcnksIG1faWQsIGtleSk7Ci0gICAgYm9vbCBleGlzdGlu
Z1ZhbHVlID0gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdzsKLQotICAgIHJldHVybiAhZXhp
c3RpbmdWYWx1ZTsKLX0KLQotU1FMaXRlRGF0YWJhc2UmIElEQkluZGV4QmFja2VuZEltcGw6OnNx
bGl0ZURhdGFiYXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmRiKCk7
CisgICAgcmV0dXJuICFtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5JbmRleChtX2lkLCAqa2V5
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCAyNDIwYTZkY2Y2M2I1ZGVjYzMxMWJlODA5YTI1
NGE3NTg0MDZmZTJkLi5jYTM4MGNmNTNhMzkyYzFhYjdkYWViMGVhNjQ4ZDBkNTZhNWI4YjE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtNzYs
OCArNzYsNiBAQCBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0
b3JlKiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3Jl
TmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSk7CiAgICAgSURCSW5kZXhC
YWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKTsKIAot
ICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIGNvbnN0OwotCiAgICAgc3RhdGlj
IHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5PiwgYm9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5LmNwcAppbmRleCA1ZjQ1NTQzNzNlNzJjMzYzMjUzYzJmNjJmMmU4
Zjg0MWNhNDA1MDI5Li5iY2JmM2RkMzZhNTYyM2MxNTgzZWQzNTQ5OTZkOGEyNWY1MzhiYTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBAIC0yOCw5ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgotI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IElEQktleTo6SURCS2V5KCkKQEAgLTQyLDI0ICszOSw3IEBAIElEQktleTo6fklEQktleSgpCiB7
CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJLZXk6OmZyb21RdWVyeShTUUxpdGVTdGF0ZW1l
bnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikKLXsKLSAgICBpZiAocXVlcnkuY29sdW1uQ291bnQo
KSA8PSBiYXNlQ29sdW1uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcXVlcnkuaXND
b2x1bW5OdWxsKGJhc2VDb2x1bW4pKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJp
bmcocXVlcnkuZ2V0Q29sdW1uVGV4dChiYXNlQ29sdW1uKSk7Ci0KLSAgICBpZiAoIXF1ZXJ5Lmlz
Q29sdW1uTnVsbChiYXNlQ29sdW1uICsgMSkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZURhdGUocXVlcnkuZ2V0Q29sdW1uRG91YmxlKGJhc2VDb2x1bW4gKyAxKSk7Ci0KLSAgICBpZiAo
IXF1ZXJ5LmlzQ29sdW1uTnVsbChiYXNlQ29sdW1uICsgMikpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihxdWVyeS5nZXRDb2x1bW5Eb3VibGUoYmFzZUNvbHVtbiArIDIpKTsK
LQotICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bGwoKTsKLX0KLQotYm9vbCBJREJLZXk6Omlz
RXF1YWwoSURCS2V5KiBvdGhlcikKK2Jvb2wgSURCS2V5Ojppc0VxdWFsKElEQktleSogb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlciB8fCBvdGhlci0+bV90eXBlICE9IG1fdHlwZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzksMTA4ICs1OSw2IEBAIGJvb2wgSURCS2V5Ojppc0Vx
dWFsKElEQktleSogb3RoZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgSURCS2V5
Ojp3aGVyZVN5bnRheChTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1lKSBjb25zdAotewotICAgIHN3
aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHJl
dHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nID0gPyAgQU5EICAiICsgcXVhbGlm
aWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVO
YW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBl
OgotICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxM
ICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICIg
KyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyID0gPyAgIjsKLSAgICBjYXNlIElEQktl
eTo6RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3Ry
aW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlID0gPyAg
QU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOwotICAg
IGNhc2UgSURCS2V5OjpOdWxsVHlwZToKLSAgICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFt
ZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJ
UyBOVUxMICAiOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biAiIjsKLX0KLQotU3RyaW5nIElEQktleTo6bG93ZXJDdXJzb3JXaGVyZUZyYWdtZW50KFN0cmlu
ZyBjb21wYXJpc29uT3BlcmF0b3IsIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5hbWUpCi17Ci0gICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIFN0cmluZ1R5cGU6Ci0gICAgICAgIHJldHVybiAi
PyAiICsgY29tcGFyaXNvbk9wZXJhdG9yICsgIiAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eVN0cmluZyAgQU5EICAiOwotICAgIGNhc2UgRGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiAiKD8g
IiArIGNvbXBhcmlzb25PcGVyYXRvciArICIgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlE
YXRlICBPUiBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCkg
IEFORCAgIjsKLSAgICBjYXNlIE51bWJlclR5cGU6Ci0gICAgICAgIHJldHVybiAiKD8gIiArIGNv
bXBhcmlzb25PcGVyYXRvciArICIgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIg
IE9SICBOT1QgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgT1Ig
IE5PVCAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCkgIEFORCAgIjsK
LSAgICBjYXNlIE51bGxUeXBlOgotICAgICAgICBpZiAoY29tcGFyaXNvbk9wZXJhdG9yID09ICI8
IikKLSAgICAgICAgICAgIHJldHVybiAiTk9UKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElT
IE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlOdW1iZXIgSVMgTlVMTCkg
IEFORCAgIjsKLSAgICAgICAgcmV0dXJuICIiOyAvLyBJZiBpdCdzID0sIHRoZSB1cHBlciBib3Vu
ZCBoYWxmIHdpbGwgZG8gdGhlIGNvbnN0cmFpbmluZy4gSWYgaXQncyA8PSwgdGhlbiB0aGF0J3Mg
YSBuby1vcC4KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICIi
OwotfQotCi1TdHJpbmcgSURCS2V5Ojp1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQoU3RyaW5nIGNv
bXBhcmlzb25PcGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFtZSkKLXsKLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgU3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuICIoIiAr
IHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgIiArIGNvbXBhcmlzb25PcGVyYXRvciAr
ICIgPyAgT1IgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwpICBB
TkQgICI7Ci0gICAgY2FzZSBEYXRlVHlwZToKLSAgICAgICAgcmV0dXJuICIoIiArIHF1YWxpZmll
ZFRhYmxlTmFtZSArICJrZXlEYXRlICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8gT1IgIiAr
IHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlEYXRlIElTIE5VTEwpICBBTkQgICIgKyBxdWFsaWZp
ZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIjsKLSAgICBjYXNlIE51bWJl
clR5cGU6Ci0gICAgICAgIHJldHVybiAiKCIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVt
YmVyICIgKyBjb21wYXJpc29uT3BlcmF0b3IgKyAiID8gT1IgIiArIHF1YWxpZmllZFRhYmxlTmFt
ZSArICJrZXlOdW1iZXIgSVMgTlVMTCkgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSArICJr
ZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUg
SVMgTlVMTCAgQU5EICAiOwotICAgIGNhc2UgTnVsbFR5cGU6Ci0gICAgICAgIGlmIChjb21wYXJp
c29uT3BlcmF0b3IgPT0gIjwiKQotICAgICAgICAgICAgcmV0dXJuICIwICE9IDAgIEFORCAgIjsK
LSAgICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAg
QU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsg
cXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICBBTkQgICI7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAiIjsKLX0KLQotLy8gUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGJvdW5kLgotaW50IElEQktleTo6YmluZChTUUxpdGVTdGF0
ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1uKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0KGNv
bHVtbiwgbV9zdHJpbmcpOwotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIElEQktleTo6RGF0
ZVR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBtX2RhdGUpOwotICAgICAg
ICByZXR1cm4gMTsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAgICAgICAgcXVlcnku
YmluZERvdWJsZShjb2x1bW4sIG1fbnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBJREJLZXk6Ok51bGxUeXBlOgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBJREJLZXk6OmJpbmRX
aXRoTnVsbHMoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGJhc2VDb2x1bW4pIGNvbnN0Ci17
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKLSAg
ICAgICAgcXVlcnkuYmluZFRleHQoYmFzZUNvbHVtbiArIDAsIG1fc3RyaW5nKTsKLSAgICAgICAg
cXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEpOwotICAgICAgICBxdWVyeS5iaW5kTnVsbChi
YXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCS2V5OjpEYXRlVHlw
ZToKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDApOwotICAgICAgICBxdWVy
eS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAxLCBtX2RhdGUpOwotICAgICAgICBxdWVyeS5iaW5k
TnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCS2V5OjpO
dW1iZXJUeXBlOgotICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMCk7Ci0gICAg
ICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsKLSAgICAgICAgcXVlcnkuYmluZERv
dWJsZShiYXNlQ29sdW1uICsgMiwgbV9udW1iZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElEQktleTo6TnVsbFR5cGU6Ci0gICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAw
KTsKLSAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEpOwotICAgICAgICBxdWVy
eS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCmluZGV4IDkxMTg3NDNm
YzRmMzcxYzk1YjBhYmQxMWM0Mjc5MGU3ZjZiMzA5NmUuLmVmZmIwMTI4YTZjYmMzNmJiNjBmNzA4
MDc5OWY5NTBhNmQ5YjA1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaApAQCAtOTksMTQgKzk5
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9udW1iZXI7CiAgICAgfQogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBmcm9tUXVlcnkoU1FMaXRlU3RhdGVtZW50JiBxdWVyeSwg
aW50IGJhc2VDb2x1bW4pOwotCi0gICAgYm9vbCBpc0VxdWFsKElEQktleSogb3RoZXIpOwotICAg
IFN0cmluZyB3aGVyZVN5bnRheChTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1lID0gIiIpIGNvbnN0
OwotICAgIFN0cmluZyBsb3dlckN1cnNvcldoZXJlRnJhZ21lbnQoU3RyaW5nIGNvbXBhcmlzb25P
cGVyYXRvciwgU3RyaW5nIHF1YWxpZmllZFRhYmxlTmFtZSA9ICIiKTsKLSAgICBTdHJpbmcgdXBw
ZXJDdXJzb3JXaGVyZUZyYWdtZW50KFN0cmluZyBjb21wYXJpc29uT3BlcmF0b3IsIFN0cmluZyBx
dWFsaWZpZWRUYWJsZU5hbWUgPSAiIik7Ci0gICAgaW50IGJpbmQoU1FMaXRlU3RhdGVtZW50JiBx
dWVyeSwgaW50IGNvbHVtbikgY29uc3Q7Ci0gICAgdm9pZCBiaW5kV2l0aE51bGxzKFNRTGl0ZVN0
YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwo
SURCS2V5KiBvdGhlcikgY29uc3Q7CiAKICAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElEQktl
eT46OnJlZjsKICAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElEQktleT46OmRlcmVmOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmNwcAppbmRleCAzNDY0Nzg1NzJjODA1ZDk4ZGE3
M2YyYTQ2ZTFhODJlYzViOTllYmRkLi40ZjQxNDRiZDJjYTViMGNmZjlhNjVjMTNhMTcwNzRhYmZl
NDE3ODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdlLmNwcApAQCAtNjEsMjIg
KzYxLDYgQEAgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6OmJvdW5kKFBhc3NS
ZWZQdHI8SURCS2V5PiBsb3dlciwgUGFzc1JlZlB0cjwKICAgICByZXR1cm4gSURCS2V5UmFuZ2U6
OmNyZWF0ZShsb3dlciwgdXBwZXIsIGxvd2VyT3BlbiwgdXBwZXJPcGVuKTsKIH0KIAotU3RyaW5n
IElEQktleVJhbmdlOjpsb3dlcldoZXJlQ2xhdXNlQ29tcGFyaXNvbk9wZXJhdG9yKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9sb3dlcik7Ci0gICAgaWYgKG1fbG93ZXJPcGVuKQotICAgICAgICBy
ZXR1cm4gIjwiOwotICAgIHJldHVybiAiPD0iOwotfQotCi1TdHJpbmcgSURCS2V5UmFuZ2U6OnVw
cGVyV2hlcmVDbGF1c2VDb21wYXJpc29uT3BlcmF0b3IoKSBjb25zdAotewotICAgIEFTU0VSVCht
X3VwcGVyKTsKLSAgICBpZiAobV91cHBlck9wZW4pCi0gICAgICAgIHJldHVybiAiPCI7Ci0gICAg
cmV0dXJuICI8PSI7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJLZXlSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oCmlu
ZGV4IDVhNjhiMTBiYTcyOTA1YjQyMjIzN2FjMjlhMzA2Mjc2OTJjNWE4YTYuLjYzNmE1YzE2NzE3
OGZiNjA1N2U4OWQ4NjI3ZjY1NDA2Zjk2MDc4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eVJhbmdlLmgKQEAgLTQzLDE1ICs0MywxMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5JREJLZXlS
YW5nZSgpIHsgfQogCi0KICAgICBQYXNzUmVmUHRyPElEQktleT4gbG93ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xvd2VyOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHVwcGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV91cHBlcjsgfQogICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9s
b3dlck9wZW47IH0KICAgICBib29sIHVwcGVyT3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fdXBwZXJP
cGVuOyB9CiAKLSAgICBTdHJpbmcgbG93ZXJXaGVyZUNsYXVzZUNvbXBhcmlzb25PcGVyYXRvcigp
IGNvbnN0OwotICAgIFN0cmluZyB1cHBlcldoZXJlQ2xhdXNlQ29tcGFyaXNvbk9wZXJhdG9yKCkg
Y29uc3Q7Ci0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gb25seShQYXNzUmVm
UHRyPElEQktleT4gdmFsdWUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBs
b3dlckJvdW5kKFBhc3NSZWZQdHI8SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuID0gZmFsc2UpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleVJhbmdlPiB1cHBlckJvdW5kKFBhc3NSZWZQdHI8
SURCS2V5PiBib3VuZCwgYm9vbCBvcGVuID0gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggZWM3MDA3ZTNk
MmM0ZmZiMmRlZTQ2NTIzNjU2MTkyM2UyZGNkZGUwNi4uMDQzM2VkNzU3OGEyY2RjYjZjNDg2Yzk1
ZjgxMjIxYzZkZjI5ZGNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC00Myw5ICs0Myw2IEBACiAjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU1FMaXRl
RGF0YWJhc2UuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJTUUxp
dGVUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgyLDE3ICs3OSw2
IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
aW5kZXhOYW1lcygpIGNvbnN0CiAgICAgcmV0dXJuIGluZGV4TmFtZXMucmVsZWFzZSgpOwogfQog
Ci1zdGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSoga2V5KQotewotICAgIHJldHVybiAi
V0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gIEFORCAgIiArIGtleS0+d2hlcmVTeW50YXgoKTsKLX0K
LQotc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xhdXNlKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGlu
dDY0X3QgaWQsIElEQktleSoga2V5KQotewotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7Ci0g
ICAga2V5LT5iaW5kKHF1ZXJ5LCAyKTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKQEAgLTI0MSwxMiArMjI3LDkgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgp
KTsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0UXVlcnkob2JqZWN0U3RvcmUtPnNx
bGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJl
Q2xhdXNlKGtleS5nZXQoKSkpOwotICAgIGJvb2wgb2sgPSBnZXRRdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPworICAgIGludDY0X3QgZGF0YVJvd0lkID0gSW52YWxpZElkOworICAg
IGJvb2wgaXNFeGlzdGluZ1ZhbHVlID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlF
eGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCBkYXRhUm93SWQpOwog
Ci0gICAgYmluZFdoZXJlQ2xhdXNlKGdldFF1ZXJ5LCBvYmplY3RTdG9yZS0+aWQoKSwga2V5Lmdl
dCgpKTsKLSAgICBib29sIGlzRXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSA9PSBTUUxS
ZXN1bHRSb3c7CiAgICAgaWYgKHB1dE1vZGUgPT0gQWRkT25seSAmJiBpc0V4aXN0aW5nVmFsdWUp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI1NCw3ICsyMzcs
NiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQs
IGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0
cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgaW50NjRfdCBkYXRhUm93SWQgPSBp
c0V4aXN0aW5nVmFsdWUgPyBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkgOiBJbnZhbGlkSWQ7CiAg
ICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dE9iamVjdFN0b3JlUmVjb3Jk
KG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIGRhdGFSb3dJ
ZCwgZGF0YVJvd0lkID09IEludmFsaWRJZCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRl
eGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRl
ZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVy
cm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CkBAIC0zMDEsMzUgKzI4Mywx
MyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCBpZFF1ZXJ5KG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNU
IGlkIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKLSAg
ICBib29sIG9rID0gaWRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotICAgIGJp
bmRXaGVyZUNsYXVzZShpZFF1ZXJ5LCBvYmplY3RTdG9yZS0+aWQoKSwga2V5LmdldCgpKTsKLSAg
ICBpZiAoaWRRdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgaW50NjRfdCBpZDsK
KyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RT
dG9yZShvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgaWQpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5P
VF9GT1VORF9FUlIsICJLZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQ2NF90IGlkID0gaWRRdWVyeS5nZXRD
b2x1bW5JbnQ2NCgwKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG9iamVjdFN0b3Jl
LT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIGlk
ID0gPyIpOwotICAgIG9rID0gb3NRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwot
Ci0gICAgb3NRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotCi0gICAgb2sgPSBvc1F1ZXJ5LnN0ZXAo
KSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIFNR
TGl0ZVN0YXRlbWVudCBpbmRleFF1ZXJ5KG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAi
REVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkID0gPyIpOwotICAg
IG9rID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VO
VVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgaW5k
ZXhRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotCi0gICAgb2sgPSBpbmRleFF1ZXJ5LnN0ZXAoKSA9
PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQorICAgIG9iamVj
dFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3Rv
cmUtPmlkKCksIGlkKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIApAQCAtNDg0LDQwICs0NDQsMTUgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHBycFJhbmdlLCB1bnMKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vy
c29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbikKIHsKLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93
ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKLQot
ICAgIC8vIFNldmVyYWwgZmlsZXMgZGVwZW5kIG9uIHRoaXMgb3JkZXIgb2Ygc2VsZWN0cy4KLSAg
ICBTdHJpbmcgc3FsID0gIlNFTEVDVCBpZCwga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIs
IHZhbHVlLCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSAiOwotICAgIGlmIChsb3dlckJvdW5kKQotICAgICAgICBzcWwgKz0gcmFuZ2UtPmxv
d2VyKCktPmxvd2VyQ3Vyc29yV2hlcmVGcmFnbWVudChyYW5nZS0+bG93ZXJXaGVyZUNsYXVzZUNv
bXBhcmlzb25PcGVyYXRvcigpKTsKLSAgICBpZiAodXBwZXJCb3VuZCkKLSAgICAgICAgc3FsICs9
IHJhbmdlLT51cHBlcigpLT51cHBlckN1cnNvcldoZXJlRnJhZ21lbnQocmFuZ2UtPnVwcGVyV2hl
cmVDbGF1c2VDb21wYXJpc29uT3BlcmF0b3IoKSk7Ci0gICAgc3FsICs9ICJvYmplY3RTdG9yZUlk
ID0gPyBPUkRFUiBCWSAiOwotCiAgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0g
c3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KHRtcERpcmVjdGlvbik7Ci0gICAgaWYg
KGRpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6
TkVYVF9OT19EVVBMSUNBVEUpCi0gICAgICAgIHNxbCArPSAia2V5U3RyaW5nLCBrZXlEYXRlLCBr
ZXlOdW1iZXIiOwotICAgIGVsc2UKLSAgICAgICAgc3FsICs9ICJrZXlTdHJpbmcgREVTQywga2V5
RGF0ZSBERVNDLCBrZXlOdW1iZXIgREVTQyI7Ci0KLSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50
PiBxdWVyeSA9IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQob2JqZWN0U3RvcmUtPnNxbGl0
ZURhdGFiYXNlKCksIHNxbCkpOwotICAgIGJvb2wgb2sgPSBxdWVyeS0+cHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KLQotICAgIGludCBjdXJyZW50Q29sdW1uID0gMTsKLSAgICBpZiAobG93
ZXJCb3VuZCkKLSAgICAgICAgY3VycmVudENvbHVtbiArPSByYW5nZS0+bG93ZXIoKS0+YmluZCgq
cXVlcnksIGN1cnJlbnRDb2x1bW4pOwotICAgIGlmICh1cHBlckJvdW5kKQotICAgICAgICBjdXJy
ZW50Q29sdW1uICs9IHJhbmdlLT51cHBlcigpLT5iaW5kKCpxdWVyeSwgY3VycmVudENvbHVtbik7
Ci0gICAgcXVlcnktPmJpbmRJbnQ2NChjdXJyZW50Q29sdW1uLCBvYmplY3RTdG9yZS0+aWQoKSk7
Ci0KLSAgICBpZiAocXVlcnktPnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKKworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3Rv
cmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPmlk
KCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
bnVsbFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVh
dGUob2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLmdldCgpLCByYW5nZSwgZGlyZWN0aW9uLCBx
dWVyeS5yZWxlYXNlKCksIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vy
c29yLCB0cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOworICAgIFJlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCksIGRpcmVjdGlvbiwgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IsIHRyYW5zYWN0aW9uLmdldCgpLCBv
YmplY3RTdG9yZS5nZXQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVh
c2UoKSk7CiB9CiAKQEAgLTUzNywxMSArNDcyLDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpsb2FkSW5kZXhlcygpCiAgICAgICAgIG1faW5kZXhlcy5zZXQobmFtZXNbaV0sIElE
QkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgaWRzW2ldLCBu
YW1lc1tpXSwgbV9uYW1lLCBrZXlQYXRoc1tpXSwgdW5pcXVlRmxhZ3NbaV0pKTsKIH0KIAotU1FM
aXRlRGF0YWJhc2UmIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNxbGl0ZURhdGFiYXNlKCkg
Y29uc3QgCi17Ci0gICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5kYigpOwotfQotCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKICAgICBBU1NF
UlQob2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+bmFtZSgpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmlu
ZGV4IGRjMGE5YTc2ODRmN2E0NGE4Zjg3Y2FhZDRmMjcwZGM4YWQ1MjU0M2UuLjRmZGRhYmRmZDJl
YzgxMDNiODMxZDUyNmNjNzdiODlmMTEzZTQ1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC04Miw3ICs4Miw2IEBAIHBy
aXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBTUUxpdGVEYXRhYmFzZSYgc3Fs
aXRlRGF0YWJhc2UoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0b0luY3Jl
bWVudEtleSgpOwogICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKSB7IG1fYXV0
b0luY3JlbWVudE51bWJlciA9IC0xOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBz
ZWxlY3RLZXlGb3JQdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIElEQktleSosIFB1dE1v
ZGUsIElEQkNhbGxiYWNrcyosIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jik7Cg==
</data>
<flag name="review"
          id="76390"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>