<?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>54889</bug_id>
          
          <creation_ts>2011-02-21 09:45:52 -0800</creation_ts>
          <short_desc>IndexedDB: Move some SQL code into IDBBackingStore</short_desc>
          <delta_ts>2011-02-23 07:11:03 -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>
          
          
          <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>354644</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-21 09:45:52 -0800</bug_when>
    <thetext>IndexedDB: Move some SQL code into IDBBackingStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354652</commentid>
    <comment_count>1</comment_count>
      <attachid>83176</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-21 09:56:49 -0800</bug_when>
    <thetext>Created attachment 83176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354654</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-21 10:00:22 -0800</bug_when>
    <thetext>Note: this patch is based on https://bugs.webkit.org/show_bug.cgi?id=54864, so it will not apply until that has landed. I expect the ews bots to fail.

I figured it might be a good idea to get it reviewed early, though.

It&apos;s a big patch, but most of it is just code being moved around. The main thing for a reviewer to look at would be the function names and signatures, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355246</commentid>
    <comment_count>3</comment_count>
      <attachid>83309</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-22 07:18:52 -0800</bug_when>
    <thetext>Created attachment 83309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355683</commentid>
    <comment_count>4</comment_count>
      <attachid>83309</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-22 16:20:59 -0800</bug_when>
    <thetext>Comment on attachment 83309
Patch

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

r=me

&gt; Source/WebCore/storage/IDBBackingStore.cpp:465
&gt; +double IDBBackingStore::autoIncrementNumber(int64_t objectStoreId)

nextAUtoIncrementNumber maybe?

&gt; Source/WebCore/storage/IDBBackingStore.h:63
&gt; +    void getIndexes(int64_t objectStoreId, Vector&lt;int64_t&gt;&amp; foundIds, Vector&lt;String&gt;&amp; foundNames, Vector&lt;String&gt;&amp; foundKeyPaths, Vector&lt;bool&gt;&amp; foundUniqueFlags);

maybe split out get/create/delete index like you did for object store?

maybe split out all the calls for puts and make it clear you need to manually call all applicable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356070</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-23 07:09:41 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 83309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83309&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.cpp:465
&gt; &gt; +double IDBBackingStore::autoIncrementNumber(int64_t objectStoreId)
&gt; 
&gt; nextAUtoIncrementNumber maybe?
Yes, that&apos;s better. Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.h:63
&gt; &gt; +    void getIndexes(int64_t objectStoreId, Vector&lt;int64_t&gt;&amp; foundIds, Vector&lt;String&gt;&amp; foundNames, Vector&lt;String&gt;&amp; foundKeyPaths, Vector&lt;bool&gt;&amp; foundUniqueFlags);
&gt; 
&gt; maybe split out get/create/delete index like you did for object store?
Done.

&gt; 
&gt; maybe split out all the calls for puts and make it clear you need to manually call all applicable?
I&apos;ve grouped the index and the object store stuff together, respectively. I think that makes more sense, but this is easy to change later if we want to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356071</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-23 07:11:03 -0800</bug_when>
    <thetext>Committed r79445: &lt;http://trac.webkit.org/changeset/79445&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83176</attachid>
            <date>2011-02-21 09:56:49 -0800</date>
            <delta_ts>2011-02-22 07:18:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54889-20110221175646.patch</filename>
            <type>text/plain</type>
            <size>52729</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5OWM2YjUwODFjMTM4ZDhhNGNkYjJkYThlMzg2OWZiNmZhNTg3YTE2Li5j
M2UyMzc2MWVjY2U4NjE5N2QwMTAwMGYxYWMxNTYzZjdlOGMxMTc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0y
LDYgKzIsNjIgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAg
ICAgICBJbmRleGVkREI6IE1vdmUgc29tZSBTUUwgY29kZSBpbnRvIElEQkJhY2tpbmdTdG9yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4ODkKKwor
ICAgICAgICBUaGUgaWRlYSBpcyB0byBnYXRoZXIgYWxsIHRoZSBTUUwgbG9naWMgaW50byBJREJC
YWNraW5nU3RvcmUuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJ1bkNvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRhYmxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZXRhRGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldERhdGFiYXNlU2NoZW1hVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjptaWdyYXRlRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpvcGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6ZG9EZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjp3aGVyZVN5
bnRheEZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpiaW5kS2V5VG9RdWVyeSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgICogc3RvcmFnZS9JREJC
YWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMpOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6YWRkSURCQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bik6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpwb3B1bGF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCk6CisKKzIw
MTEtMDItMjEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBJbmRleGVkREI6IFJlbmFtZSBJ
REJTUUxpdGVEYXRhYmFzZSB0byBJREJCYWNraW5nU3RvcmUKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODY0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA2ODhmZWI4YTBkNzFkZTBlMzgwOWRmZTFjZDMz
OTMzZGZhYTFlMmEzLi4yMTAzMzJhMmRmMzI0OTUxYjA3MGQ4ODJlZTMyZGRjNWNmZjBmMjg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yOCw3ICsy
OCwxMyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
SURCS2V5LmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArNDIsNyBA
QCBJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZShTdHJpbmcgaWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0bwogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CiAgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKIHsKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tp
bmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsKIH0KIAogSURCQmFja2luZ1N0b3JlOjp+SURCQmFj
a2luZ1N0b3JlKCkKQEAgLTQzLDYgKzUwLDQxMyBAQCBJREJCYWNraW5nU3RvcmU6On5JREJCYWNr
aW5nU3RvcmUoKQogICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRp
Zmllcik7CiB9CiAKK3N0YXRpYyBib29sIHJ1bkNvbW1hbmRzKFNRTGl0ZURhdGFiYXNlJiBzcWxp
dGVEYXRhYmFzZSwgY29uc3QgY2hhcioqIGNvbW1hbmRzLCBzaXplX3QgbnVtYmVyT2ZDb21tYW5k
cykKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSwg
ZmFsc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkNvbW1hbmRzOyArK2kpIHsKKyAgICAgICAgaWYgKCFzcWxpdGVEYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZChjb21tYW5kc1tpXSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9yIEluZGV4ZWREQjogJXMiLCBj
b21tYW5kc1tpXSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCit7Cisg
ICAgaWYgKHNxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKCJEYXRhYmFzZXMiKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7CisgICAg
ICAgICJDUkVBVEUgVEFCTEUgRGF0YWJhc2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1l
IFRFWFQgTk9UIE5VTEwsIGRlc2NyaXB0aW9uIFRFWFQgTk9UIE5VTEwsIHZlcnNpb24gVEVYVCBO
T1QgTlVMTCkiLAorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBEYXRhYmFzZXNfbmFtZSBP
TiBEYXRhYmFzZXMobmFtZSkiLAorCisgICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVz
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGtleVBhdGggVEVY
VCwgZG9BdXRvSW5jcmVtZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFiYXNlSWQgSU5URUdFUiBO
T1QgTlVMTCBSRUZFUkVOQ0VTIERhdGFiYXNlcyhpZCkpIiwKKyAgICAgICAgIkNSRUFURSBVTklR
VUUgSU5ERVggT2JqZWN0U3RvcmVzX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlcyhkYXRhYmFzZUlk
LCBuYW1lKSIsCisKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJbmRleGVzIChpZCBJTlRFR0VSIFBS
SU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmpl
Y3RTdG9yZShpZCksIG5hbWUgVEVYVCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJ
TlRFR0VSIE5PVCBOVUxMKSIsCisgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIEluZGV4ZXNf
Y29tcG9zaXQgT04gSW5kZXhlcyhvYmplY3RTdG9yZUlkLCBuYW1lKSIsCisKKyAgICAgICAgIkNS
RUFURSBUQUJMRSBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVj
dFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5
U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwga2V5TnVtYmVyIElOVEVHRVIsIHZhbHVlIFRF
WFQgTk9UIE5VTEwpIiwKKyAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVE
YXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51
bWJlciwgb2JqZWN0U3RvcmVJZCkiLAorCisgICAgICAgICJDUkVBVEUgVEFCTEUgSW5kZXhEYXRh
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRleElkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJF
TkNFUyBJbmRleGVzKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwga2V5TnVt
YmVyIElOVEVHRVIsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNF
UyBPYmplY3RTdG9yZURhdGEoaWQpKSIsCisgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRh
X2NvbXBvc2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5k
ZXhJZCkiLAorICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9vYmplY3RTdG9yZURhdGFJ
ZCBPTiBJbmRleERhdGEob2JqZWN0U3RvcmVEYXRhSWQpIiwKKyAgICAgICAgIkNSRUFURSBJTkRF
WCBJbmRleERhdGFfaW5kZXhJZCBPTiBJbmRleERhdGEoaW5kZXhJZCkiLAorICAgICAgICB9Owor
CisgICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5kcywgc2l6ZW9m
KGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpOworfQorCitzdGF0aWMgYm9vbCBjcmVh
dGVNZXRhRGF0YVRhYmxlKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSkKK3sKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKKyAgICAgICAgIkNSRUFURSBUQUJMRSBN
ZXRhRGF0YSAobmFtZSBURVhUIFBSSU1BUlkgS0VZLCB2YWx1ZSBOT05FKSIsCisgICAgICAgICJJ
TlNFUlQgSU5UTyBNZXRhRGF0YSBWQUxVRVMgKCd2ZXJzaW9uJywgMSkiLAorICAgIH07CisKKyAg
ICByZXR1cm4gcnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29t
bWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSk7Cit9CisKK3N0YXRpYyBib29sIGdldERhdGFi
YXNlU2NoZW1hVmVyc2lvbihTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGludCogZGF0
YWJhc2VWZXJzaW9uKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFz
ZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIE1ldGFEYXRhIFdIRVJFIG5hbWUgPSAndmVyc2lvbiciKTsK
KyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rIHx8IHF1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpkYXRhYmFzZVZl
cnNpb24gPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7CisgICAgcmV0dXJuIHF1ZXJ5LmZpbmFsaXpl
KCkgPT0gU1FMUmVzdWx0T2s7Cit9CisKK3N0YXRpYyBib29sIG1pZ3JhdGVEYXRhYmFzZShTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCit7CisgICAgaWYgKCFzcWxpdGVEYXRhYmFzZS50
YWJsZUV4aXN0cygiTWV0YURhdGEiKSkgeworICAgICAgICBpZiAoIWNyZWF0ZU1ldGFEYXRhVGFi
bGUoc3FsaXRlRGF0YWJhc2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCBkYXRhYmFzZVZlcnNpb247CisgICAgaWYgKCFnZXREYXRhYmFzZVNjaGVtYVZlcnNp
b24oc3FsaXRlRGF0YWJhc2UsICZkYXRhYmFzZVZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZGF0YWJhc2VWZXJzaW9uID09IDEpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElT
VFMgT2JqZWN0U3RvcmVEYXRhMiIsCisgICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0
b3JlRGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBO
T1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURh
dGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIHZhbHVlIFRFWFQgTk9UIE5VTEwpIiwKKyAgICAgICAg
ICAgICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEyIFNFTEVDVCAqIEZST00gT2JqZWN0U3Rv
cmVEYXRhIiwKKyAgICAgICAgICAgICJEUk9QIFRBQkxFIE9iamVjdFN0b3JlRGF0YSIsIC8vIFRo
aXMgZGVwZW5kcyBvbiBTUUxpdGUgbm90IGVuZm9yY2luZyByZWZlcmVudGlhbCBjb25zaXN0ZW5j
eS4KKyAgICAgICAgICAgICJBTFRFUiBUQUJMRSBPYmplY3RTdG9yZURhdGEyIFJFTkFNRSBUTyBP
YmplY3RTdG9yZURhdGEiLAorICAgICAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0
U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUs
IGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiLAorICAgICAgICAgICAgIkRST1AgVEFCTEUgSUYg
RVhJU1RTIEluZGV4RGF0YTIiLCAvLyBUaGlzIGRlcGVuZHMgb24gU1FMaXRlIG5vdCBlbmZvcmNp
bmcgcmVmZXJlbnRpYWwgY29uc2lzdGVuY3kuCisgICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIElu
ZGV4RGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGluZGV4SWQgSU5URUdFUiBOT1QgTlVM
TCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFMLCBr
ZXlOdW1iZXIgUkVBTCwgb2JqZWN0U3RvcmVEYXRhSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVO
Q0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwKKyAgICAgICAgICAgICJJTlNFUlQgSU5UTyBJbmRl
eERhdGEyIFNFTEVDVCAqIEZST00gSW5kZXhEYXRhIiwKKyAgICAgICAgICAgICJEUk9QIFRBQkxF
IEluZGV4RGF0YSIsCisgICAgICAgICAgICAiQUxURVIgVEFCTEUgSW5kZXhEYXRhMiBSRU5BTUUg
VE8gSW5kZXhEYXRhIiwKKyAgICAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2NvbXBv
c2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCki
LAorICAgICAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfb2JqZWN0U3RvcmVEYXRhSWQg
T04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIsCisgICAgICAgICAgICAiQ1JFQVRFIElO
REVYIEluZGV4RGF0YV9pbmRleElkIE9OIEluZGV4RGF0YShpbmRleElkKSIsCisgICAgICAgICAg
ICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDIgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIs
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwg
Y29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkYXRhYmFzZVZlcnNpb24gPSAyOworICAg
IH0KKworICAgIGlmIChkYXRhYmFzZVZlcnNpb24gPT0gMikgeworICAgICAgICAvLyBXZSBuZWVk
IHRvIG1ha2UgdGhlIE9iamVjdFN0b3JlRGF0YS52YWx1ZSBiZSBhIEJMT0IgaW5zdGVhZCBvZiBU
RVhULgorICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKKyAgICAgICAg
ICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGEiLCAvLyBUaGlzIGRyb3Bz
IGFzc29jaWF0ZWQgaW5kaWNlcy4KKyAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3Rv
cmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9U
IE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRl
IFJFQUwsIGtleU51bWJlciBSRUFMLCB2YWx1ZSBCTE9CIE5PVCBOVUxMKSIsCisgICAgICAgICAg
ICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0
U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIs
CisgICAgICAgICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDMgV0hFUkUgbmFtZSA9
ICd2ZXJzaW9uJyIsCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxp
dGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNb
MF0pKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkYXRhYmFzZVZlcnNp
b24gPSAzOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5
KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihu
ZXcgSURCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5KSkpOworCisgICAgU3Ry
aW5nIHBhdGggPSAiOm1lbW9yeToiOworICAgIGlmICghcGF0aEJhc2UuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBwb3NzaWJseSBkbyB0
byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIgdGhhbiBqdXN0IGVy
cm9yaW5nIG91dC4KKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9j
YWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKSArICIuaW5kZXhlZGRiIik7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmUtPm1f
ZGIub3BlbihwYXRoKSkgeworICAgICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYW55IG90aGVyIHRo
aW5nIHdlIGNvdWxkIHBvc3NpYmx5IGRvIHRvIHJlY292ZXIgYXQgdGhpcyBwb2ludD8gSWYgc28s
IGRvIGl0IHJhdGhlciB0aGFuIGp1c3QgZXJyb3Jpbmcgb3V0LgorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIEluZGV4ZWREQiIsIHBhdGgudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEZJWE1FOiBF
cnJvciBjaGVja2luZz8KKyAgICBiYWNraW5nU3RvcmUtPm1fZGIuc2V0TWF4aW11bVNpemUobWF4
aW11bVNpemUpOworICAgIGJhY2tpbmdTdG9yZS0+bV9kYi50dXJuT25JbmNyZW1lbnRhbEF1dG9W
YWN1dW0oKTsKKworICAgIGlmICghY3JlYXRlVGFibGVzKGJhY2tpbmdTdG9yZS0+bV9kYikpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghbWlncmF0ZURhdGFiYXNlKGJhY2tpbmdTdG9yZS0+
bV9kYikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxl
YXNlKCk7Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KG1fZGIsICJTRUxF
Q1QgaWQsIHZlcnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKKyAgICBpZiAo
ZGF0YWJhc2VRdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGF0YWJh
c2VRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkg
IT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZElkID0g
ZGF0YWJhc2VRdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICBmb3VuZFZlcnNpb24gPSBkYXRh
YmFzZVF1ZXJ5LmdldENvbHVtblRleHQoMSk7CisKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVw
KCkgPT0gU1FMUmVzdWx0Um93KQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qm
IHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkKK3sKKyAgICBBU1NFUlQoIW5hbWUuaXNOdWxsKCkp
OworICAgIEFTU0VSVCghdmVyc2lvbi5pc051bGwoKSk7CisKKyAgICBTdHJpbmcgc3FsID0gaW52
YWxpZFJvd0lkID8gIklOU0VSVCBJTlRPIERhdGFiYXNlcyAobmFtZSwgZGVzY3JpcHRpb24sIHZl
cnNpb24pIFZBTFVFUyAoPywgJycsID8pIiA6ICJVUERBVEUgRGF0YWJhc2VzIFNFVCBuYW1lID0g
PywgdmVyc2lvbiA9ID8gV0hFUkUgaWQgPSA/IjsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgc3FsKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcXVlcnkuYmluZFRleHQoMSwgbmFtZSk7CisgICAgcXVlcnkuYmluZFRleHQoMiwg
dmVyc2lvbik7CisgICAgaWYgKCFpbnZhbGlkUm93SWQpCisgICAgICAgIHF1ZXJ5LmJpbmRJbnQ2
NCgzLCByb3dJZCk7CisKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnZhbGlkUm93SWQpCisgICAgICAgIHJv
d0lkID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwg
VmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3Jl
bWVudEZsYWdzKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGlk
LCBuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUg
ZGF0YWJhc2VJZCA9ID8iKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJl
c3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KKworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBkYXRhYmFzZUlkKTsKKworICAg
IHdoaWxlIChxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGZvdW5kSWRz
LmFwcGVuZChxdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKSk7CisgICAgICAgIGZvdW5kTmFtZXMuYXBw
ZW5kKHF1ZXJ5LmdldENvbHVtblRleHQoMSkpOworICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVu
ZChxdWVyeS5nZXRDb2x1bW5UZXh0KDIpKTsKKyAgICAgICAgZm91bmRBdXRvSW5jcmVtZW50Rmxh
Z3MuYXBwZW5kKCEhcXVlcnkuZ2V0Q29sdW1uSW50KDMpKTsKKyAgICB9Cit9CisKK2Jvb2wgSURC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlcyAobmFtZSwga2V5UGF0aCwgZG9B
dXRvSW5jcmVtZW50LCBkYXRhYmFzZUlkKSBWQUxVRVMgKD8sID8sID8sID8pIik7CisgICAgaWYg
KHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcXVlcnkuYmluZFRleHQoMSwgbmFtZSk7CisgICAgcXVlcnkuYmluZFRleHQoMiwga2V5
UGF0aCk7CisgICAgcXVlcnkuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9JbmNyZW1l
bnQpKTsKKyAgICBxdWVyeS5iaW5kSW50NjQoNCwgZGF0YWJhc2VJZCk7CisKKyAgICBpZiAocXVl
cnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRvRGVsZXRlKFNRTGl0ZURhdGFiYXNlJiBkYiwg
Y29uc3QgY2hhciogc3FsLCBpbnQ2NF90IGlkKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxl
dGVRdWVyeShkYiwgc3FsKTsKKyAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09
IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRl
ciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgaWQpOworICAg
IG9rID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUX1VO
VVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorfQorCit2b2lk
IElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlk
KQoreworICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUg
aWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CisgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQp
OworICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJ
ZCBJTiAoU0VMRUNUIGlkIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBv
YmplY3RTdG9yZUlkKTsKKyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhlcyBX
SEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOworfQorCitzdGF0aWMgU3Ry
aW5nIHdoZXJlU3ludGF4Rm9yS2V5KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgcXVhbGlmaWVk
VGFibGVOYW1lID0gIiIpCit7CisgICAgc3dpdGNoIChrZXkudHlwZSgpKSB7CisgICAgY2FzZSBJ
REJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAi
a2V5U3RyaW5nID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMg
TlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAi
OworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5h
bWUgKyAia2V5RGF0ZSBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5
TnVtYmVyID0gPyAgIjsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHJldHVy
biBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxp
ZmllZFRhYmxlTmFtZSArICJrZXlEYXRlID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleU51bWJlciBJUyBOVUxMICAiOworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAg
ICAgICAgcmV0dXJuIHF1YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5E
ICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVh
bGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30KKworLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGl0ZW1zIGJvdW5kLgorc3RhdGljIGludCBiaW5kS2V5VG9RdWVyeShTUUxpdGVT
dGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgY29sdW1uLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBz
d2l0Y2ggKGtleS50eXBlKCkpIHsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAg
ICAgcXVlcnkuYmluZFRleHQoY29sdW1uLCBrZXkuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
MTsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmREb3VibGUo
Y29sdW1uLCBrZXkuZGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBJREJLZXk6
Ok51bWJlclR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBrZXkubnVtYmVy
KCkpOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitTdHJpbmcgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29y
ZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVt
YmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBB
TkQgIiArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVw
YXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhN
RTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPworCisgICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVj
dFN0b3JlSWQpOworICAgIGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOworICAgIGlmIChx
dWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8v
IE51bGwgU3RyaW5nIG1lYW5zIHJlY29yZCBub3QgZm91bmQuCisKKyAgICBBU1NFUlQoKGtleS50
eXBlKCkgPT0gSURCS2V5OjpTdHJpbmdUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMCkpOwor
ICAgIEFTU0VSVCgoa2V5LnR5cGUoKSA9PSBJREJLZXk6OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0Nv
bHVtbk51bGwoMSkpOworICAgIEFTU0VSVCgoa2V5LnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpICE9IHF1ZXJ5LmlzQ29sdW1uTnVsbCgyKSk7CisKKyAgICBTdHJpbmcgcmVjb3JkID0gcXVl
cnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDMpOworICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0g
U1FMUmVzdWx0Um93KTsKKworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK3N0YXRpYyB2b2lkIGJp
bmRLZXlUb1F1ZXJ5V2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29s
dW1uLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKKyAg
ICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcXVlcnkuYmluZFRleHQoYmFzZUNv
bHVtbiArIDAsIGtleS5zdHJpbmcoKSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1
bW4gKyAxKTsKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmRO
dWxsKGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVlcnkuYmluZERvdWJsZShiYXNlQ29sdW1u
ICsgMSwga2V5LmRhdGUoKSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAg
IHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVlcnkuYmluZE51bGwo
YmFzZUNvbHVtbiArIDEpOworICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAy
LCBrZXkubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5
cGU6CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVl
cnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEpOworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNl
Q29sdW1uICsgMik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkK
K3sKKyAgICBTdHJpbmcgc3FsID0gIWludmFsaWRSb3dJZCA/ICJVUERBVEUgT2JqZWN0U3RvcmVE
YXRhIFNFVCBrZXlTdHJpbmcgPSA/LCBrZXlEYXRlID0gPywga2V5TnVtYmVyID0gPywgdmFsdWUg
PSA/IFdIRVJFIGlkID0gPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNF
UlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2
YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRl
U3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmluZEtleVRvUXVlcnlX
aXRoTnVsbHMocXVlcnksIDEsIGtleSk7CisgICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUpOwor
ICAgIGlmICghaW52YWxpZFJvd0lkKQorICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgcm93SWQp
OworICAgIGVsc2UKKyAgICAgICAgcXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOwor
CisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaW52YWxpZFJvd0lkKQorICAgICAgICByb3dJZCA9IG1fZGIubGFz
dEluc2VydFJvd0lEKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlk
KQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhE
YXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkID0gPyIpOworICAgIGlmIChxdWVyeS5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHF1ZXJ5LmJp
bmRJbnQ2NCgxLCBvYmplY3RTdG9yZURhdGFJZCk7CisgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9
PSBTUUxSZXN1bHREb25lOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhSWQpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJJTlNF
UlQgSU5UTyBJbmRleERhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElk
LCBvYmplY3RTdG9yZURhdGFJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpOworICAgIGlmIChx
dWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOworICAgIHF1ZXJ5LmJp
bmRJbnQ2NCg0LCBpbmRleElkKTsKKyAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVE
YXRhSWQpOworCisgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworfQor
Citib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1
ZSwgaW50NjRfdCYgaW5kZXhJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwg
IklOU0VSVCBJTlRPIEluZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGlzVW5p
cXVlKSBWQUxVRVMgKD8sID8sID8sID8pIik7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcXVlcnkuYmluZEludDY0
KDEsIG9iamVjdFN0b3JlSWQpOworICAgIHF1ZXJ5LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHF1
ZXJ5LmJpbmRUZXh0KDMsIGtleVBhdGgpOworICAgIHF1ZXJ5LmJpbmRJbnQoNCwgc3RhdGljX2Nh
c3Q8aW50Pihpc1VuaXF1ZSkpOworCisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRE
b25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmRleElkID0gbV9kYi5sYXN0SW5z
ZXJ0Um93SUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBkb0RlbGV0ZShtX2RiLCAiREVM
RVRFIEZST00gSW5kZXhlcyBXSEVSRSBpZCA9ID8iLCBpbmRleElkKTsKKyAgICBkb0RlbGV0ZSht
X2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXhJZCk7
Cit9CisKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3sKKyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRh
IFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkIElOIChTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURh
dGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmVJZCk7CisgICAgZG9EZWxl
dGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlk
ID0gPyIsIG9iamVjdFN0b3JlSWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDdhYmIxMDJkYjBhYjc2MGZlNzQ2YjhhMWQzNjg1Mjk4OGNi
YjdkYzguLmU4ZWU2NzY1NDFmMGY3MjU2MGEyZmEyYjlmMDA0ODFmOTQwYjY5MTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtMzIsMTYgKzMyLDM0IEBACiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOworY2xhc3MgSURC
S2V5OworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlKFN0cmluZyBpZGVudGlmaWVyLCBJREJG
YWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJCYWNr
aW5nU3RvcmUoaWRlbnRpZmllciwgZmFjdG9yeSkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRo
QmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgfklEQkJhY2tpbmdTdG9yZSgpOwogCisgICAg
Ym9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmlu
ZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKKyAgICBib29sIHNldElEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGlu
dDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisKKyAgICB2b2lkIGdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncyk7CisgICAgYm9vbCBjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBh
dXRvSW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCk7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOworCisgICAgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGlu
dDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisgICAgYm9vbCBkZWxldGVJbmRleERh
dGFGb3JSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7CisgICAgYm9vbCBwdXRJbmRl
eERhdGFGb3JSZWNvcmQoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBpbnQ2NF90IG9i
amVjdFN0b3JlRGF0YUlkKTsKKyAgICBib29sIGNyZWF0ZUluZGV4KGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgaXNV
bmlxdWUsIGludDY0X3QmIGluZGV4SWQpOworICAgIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBp
bmRleElkKTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKKwogICAgIFNRTGl0ZURhdGFiYXNlJiBkYigpIHsgcmV0dXJuIG1fZGI7IH0KIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IDhhODkxZGI2M2FiMzMzYTFjZGE5ZWNlYTVjYWYxZDZjYjI0ZDAzZWUuLjlkMzQx
MWFiZjFiODI0MDMzNTg4NDI3ZTU0NzhmMTI0MTRhMjkyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzYsOCArMzYsNiBA
QAogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNRTGl0ZVRy
YW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTksNTIgKzU3LDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKLXN0
YXRpYyBib29sIGV4dHJhY3RNZXRhRGF0YShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0JiBmb3VuZElk
KQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KHNxbGl0ZURhdGFiYXNlLCAi
U0VMRUNUIGlkLCB2ZXJzaW9uIEZST00gRGF0YWJhc2VzIFdIRVJFIG5hbWUgPSA/Iik7Ci0gICAg
aWYgKGRhdGFiYXNlUXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGRh
dGFiYXNlUXVlcnkuYmluZFRleHQoMSwgbmFtZSk7Ci0gICAgaWYgKGRhdGFiYXNlUXVlcnkuc3Rl
cCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm91bmRJ
ZCA9IGRhdGFiYXNlUXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgZm91bmRWZXJzaW9uID0g
ZGF0YWJhc2VRdWVyeS5nZXRDb2x1bW5UZXh0KDEpOwotCi0gICAgaWYgKGRhdGFiYXNlUXVlcnku
c3RlcCgpID09IFNRTFJlc3VsdFJvdykKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHNldE1ldGFEYXRhKFNRTGl0ZURhdGFi
YXNlJiBzcWxpdGVEYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24sIGludDY0X3QmIHJvd0lkKQotewotICAgIEFTU0VSVCghbmFtZS5pc051bGwoKSk7Ci0g
ICAgQVNTRVJUKCF2ZXJzaW9uLmlzTnVsbCgpKTsKLQotICAgIFN0cmluZyBzcWwgPSByb3dJZCAh
PSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJbnZhbGlkSWQgPyAiVVBEQVRFIERhdGFiYXNlcyBT
RVQgbmFtZSA9ID8sIHZlcnNpb24gPSA/IFdIRVJFIGlkID0gPyIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIklOU0VSVCBJTlRP
IERhdGFiYXNlcyAobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNpb24pIFZBTFVFUyAoPywgJycsID8p
IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UsIHNxbCk7Ci0gICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHF1ZXJ5LmJp
bmRUZXh0KDEsIG5hbWUpOwotICAgIHF1ZXJ5LmJpbmRUZXh0KDIsIHZlcnNpb24pOwotICAgIGlm
IChyb3dJZCAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJbnZhbGlkSWQpCi0gICAgICAgIHF1
ZXJ5LmJpbmRJbnQ2NCgzLCByb3dJZCk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJl
c3VsdERvbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyb3dJZCA9PSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpJbnZhbGlkSWQpCi0gICAgICAgIHJvd0lkID0gc3FsaXRlRGF0
YWJhc2UubGFzdEluc2VydFJvd0lEKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25zdCBT
dHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpCiAgICAgLCBtX2lkKEludmFsaWRJZCkKQEAgLTExNyw5ICs2OSw5IEBAIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJCYWNraW5nU3RvCiB7CiAgICAgQVNTRVJUKCFtX25hbWUuaXNOdWxsKCkpOwogCi0gICAgYm9v
bCBzdWNjZXNzID0gZXh0cmFjdE1ldGFEYXRhKG1fYmFja2luZ1N0b3JlLT5kYigpLCBtX25hbWUs
IG1fdmVyc2lvbiwgbV9pZCk7CisgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPmV4
dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKTsKICAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxpZElkKSk7Ci0g
ICAgaWYgKCFzZXRNZXRhRGF0YShtX2JhY2tpbmdTdG9yZS0+ZGIoKSwgbV9uYW1lLCBtX3ZlcnNp
b24sIG1faWQpKQorICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnNldElEQkRhdGFiYXNlTWV0YURh
dGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQsIG1faWQgPT0gSW52YWxpZElkKSkKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGlu
Zy4KICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CiB9CkBAIC0xNjgsMjEgKzEyMCwxNCBAQCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdAogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2Vy
dChkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlcyAo
bmFtZSwga2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50LCBkYXRhYmFzZUlkKSBWQUxVRVMgKD8sID8s
ID8sID8pIik7Ci0gICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aW5zZXJ0LmJpbmRUZXh0KDEsIG9iamVjdFN0b3JlLT5uYW1lKCkpOwotICAgIGluc2VydC5iaW5k
VGV4dCgyLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpKTsKLSAgICBpbnNlcnQuYmluZEludCgzLCBz
dGF0aWNfY2FzdDxpbnQ+KG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkpKTsKLSAgICBpbnNl
cnQuYmluZEludDY0KDQsIGRhdGFiYXNlLT5pZCgpKTsKLSAgICBpZiAoaW5zZXJ0LnN0ZXAoKSAh
PSBTUUxSZXN1bHREb25lKSB7CisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkOworCisgICAgaWYg
KCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
LT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3JlLT5hdXRvSW5jcmVt
ZW50KCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZUlkKSkgewogICAgICAgICB0cmFuc2Fj
dGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbnQ2NF90IGlkID0g
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7Ci0gICAgb2JqZWN0
U3RvcmUtPnNldElkKGlkKTsKKworICAgIG9iamVjdFN0b3JlLT5zZXRJZChvYmplY3RTdG9yZUlk
KTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKQEAgLTE5
MSwxNiArMTM2LDYgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGMKICAgICByZXR1cm4gbV9vYmpl
Y3RTdG9yZXMuZ2V0KG5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRh
YmFzZSYgZGIsIGNvbnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKLXsKLSAgICBTUUxpdGVTdGF0
ZW1lbnQgZGVsZXRlUXVlcnkoZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IGRlbGV0ZVF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJ
WE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDEs
IGlkKTsKLSAgICBvayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4K
LX0KLQogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChuYW1lKTsKQEAgLTIy
MCwxMSArMTU1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KIAogdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgZG9E
ZWxldGUoZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9y
ZXMgV0hFUkUgaWQgPSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGRvRGVsZXRlKGRhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJF
IG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGRvRGVsZXRlKGRh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIGlu
ZGV4SWQgSU4gKFNFTEVDVCBpZCBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8p
Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGRvRGVsZXRlKGRhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9i
amVjdFN0b3JlLT5pZCgpKTsKLQorICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRl
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21w
bGV0ZVRhc2tFdmVudHMoKTsKIH0KIApAQCAtMjUzLDcgKzE4NCw3IEBAIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmCiB7CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UtPmlkKCk7CiAg
ICAgZGF0YWJhc2UtPm1fdmVyc2lvbiA9IHZlcnNpb247Ci0gICAgaWYgKCFzZXRNZXRhRGF0YShk
YXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRiKCksIGRhdGFiYXNlLT5tX25hbWUsIGRhdGFiYXNl
LT5tX3ZlcnNpb24sIGRhdGFiYXNlSWQpKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5n
U3RvcmUtPnNldElEQkRhdGFiYXNlTWV0YURhdGEoZGF0YWJhc2UtPm1fbmFtZSwgZGF0YWJhc2Ut
Pm1fdmVyc2lvbiwgZGF0YWJhc2VJZCwgZGF0YWJhc2VJZCA9PSBJbnZhbGlkSWQpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90
IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Uu
IikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKQEAgLTI5NywyMCArMjI4LDE4IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoKQogCiB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCBv
YmplY3RTdG9yZXNRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQ
YXRoLCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgZGF0YWJhc2VJZCA9
ID8iKTsKLSAgICBib29sIG9rID0gb2JqZWN0U3RvcmVzUXVlcnkucHJlcGFyZSgpID09IFNRTFJl
c3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KLQotICAgIG9iamVjdFN0b3Jlc1F1ZXJ5LmJpbmRJbnQ2NCgxLCBtX2lkKTsK
LQotICAgIHdoaWxlIChvYmplY3RTdG9yZXNRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7
Ci0gICAgICAgIGludDY0X3QgaWQgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5JbnQ2NCgw
KTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBvYmplY3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5UZXh0
KDEpOwotICAgICAgICBTdHJpbmcga2V5UGF0aCA9IG9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVt
blRleHQoMik7Ci0gICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9ICEhb2JqZWN0U3RvcmVzUXVl
cnkuZ2V0Q29sdW1uSW50KDMpOwotCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIGlk
LCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7Ci0gICAgfQorICAgIFZlY3RvcjxpbnQ2
NF90PiBpZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aHM7CisgICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRGbGFnczsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1faWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCBh
dXRvSW5jcmVtZW50RmxhZ3MpOworCisgICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBpZHMuc2l6
ZSgpKTsKKyAgICBBU1NFUlQoa2V5UGF0aHMuc2l6ZSgpID09IGlkcy5zaXplKCkpOworICAgIEFT
U0VSVChhdXRvSW5jcmVtZW50RmxhZ3Muc2l6ZSgpID09IGlkcy5zaXplKCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1fb2JqZWN0U3Rv
cmVzLnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFj
a2luZ1N0b3JlLmdldCgpLCBpZHNbaV0sIG5hbWVzW2ldLCBrZXlQYXRoc1tpXSwgYXV0b0luY3Jl
bWVudEZsYWdzW2ldKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDI4ZmVjNTUwN2NlNjA1OGYzYjNiNTI4OTIw
YzUzZmYyYzliZGMzMzkuLmNiNmMzMWE2NjYyZGFmOWNhMTNiZjNjYTMyZGYwNDE5NTUyNTI5Y2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAKQEAgLTMwLDEzICszMCwxMCBAQAogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgogCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KQEAgLTQ1LDExICs0MiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkZh
Y3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmRJbXBsKCkgCitJREJGYWN0b3J5QmFj
a2VuZEltcGw6OklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCiAgICAgOiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y3JlYXRlKCkpCiB7CiB9Ci0gCisK
IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCiB7CiB9CkBA
IC02MCwxNTEgKzU3LDE2IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJE
YXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmCiAgICAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZpZXIpOwogfQogCi12b2lkIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgdW5pcXVl
SWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVNYXAuY29udGFpbnModW5p
cXVlSWRlbnRpZmllcikpOwotICAgIG1fYmFja2luZ1N0b3JlTWFwLnJlbW92ZSh1bmlxdWVJZGVu
dGlmaWVyKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuU1FM
aXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcm
IHBhdGhCYXNlLCBpbnQ2NF90IG1heGltdW1TaXplLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlm
aWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi17Ci0gICAgU3RyaW5nIHBhdGgg
PSAiOm1lbW9yeToiOwotICAgIGlmICghcGF0aEJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlm
ICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBwb3NzaWJseSBkbyB0byByZWNvdmVy
IGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIgdGhhbiBqdXN0IGVycm9yaW5nIG91
dC4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdl
IGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5pbmRleGVkZGIiKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShmaWxlSWRlbnRpZmllciwgZmFjdG9y
eSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUtPmRiKCkub3BlbihwYXRoKSkgewotICAgICAgICAv
LyBGSVhNRTogSXMgdGhlcmUgYW55IG90aGVyIHRoaW5nIHdlIGNvdWxkIHBvc3NpYmx5IGRvIHRv
IHJlY292ZXIgYXQgdGhpcyBwb2ludD8gSWYgc28sIGRvIGl0IHJhdGhlciB0aGFuIGp1c3QgZXJy
b3Jpbmcgb3V0LgotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZp
bGUgJXMgZm9yIEluZGV4ZWREQiIsIHBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBFcnJvciBjaGVja2luZz8KLSAgICBiYWNraW5n
U3RvcmUtPmRiKCkuc2V0TWF4aW11bVNpemUobWF4aW11bVNpemUpOwotICAgIGJhY2tpbmdTdG9y
ZS0+ZGIoKS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKTsKLQotICAgIHJldHVybiBiYWNr
aW5nU3RvcmUucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgYm9vbCBydW5Db21tYW5kcyhTUUxpdGVE
YXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGNvbnN0IGNoYXIqKiBjb21tYW5kcywgc2l6ZV90IG51
bWJlck9mQ29tbWFuZHMpCi17Ci0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oc3Fs
aXRlRGF0YWJhc2UsIGZhbHNlKTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDb21tYW5kczsgKytpKSB7Ci0gICAgICAgIGlmICgh
c3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZHNbaV0pKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvciBJbmRl
eGVkREI6ICVzIiwgY29tbWFuZHNbaV0pOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVUYWJsZXMoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURh
dGFiYXNlKQotewotICAgIGlmIChzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cygiRGF0YWJhc2Vz
IikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5k
c1tdID0gewotICAgICAgICAiQ1JFQVRFIFRBQkxFIERhdGFiYXNlcyAoaWQgSU5URUdFUiBQUklN
QVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxMLCBkZXNjcmlwdGlvbiBURVhUIE5PVCBOVUxMLCB2
ZXJzaW9uIFRFWFQgTk9UIE5VTEwpIiwKLSAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggRGF0
YWJhc2VzX25hbWUgT04gRGF0YWJhc2VzKG5hbWUpIiwKLQotICAgICAgICAiQ1JFQVRFIFRBQkxF
IE9iamVjdFN0b3JlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBURVhUIE5PVCBOVUxM
LCBrZXlQYXRoIFRFWFQsIGRvQXV0b0luY3JlbWVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRhYmFz
ZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBEYXRhYmFzZXMoaWQpKSIsCi0gICAgICAg
ICJDUkVBVEUgVU5JUVVFIElOREVYIE9iamVjdFN0b3Jlc19jb21wb3NpdCBPTiBPYmplY3RTdG9y
ZXMoZGF0YWJhc2VJZCwgbmFtZSkiLAotCi0gICAgICAgICJDUkVBVEUgVEFCTEUgSW5kZXhlcyAo
aWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxMIFJF
RkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGtleVBhdGggVEVY
VCwgaXNVbmlxdWUgSU5URUdFUiBOT1QgTlVMTCkiLAotICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJbmRleGVzX2NvbXBvc2l0IE9OIEluZGV4ZXMob2JqZWN0U3RvcmVJZCwgbmFtZSkiLAot
Ci0gICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RT
dG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElOVEVHRVIsIGtleU51bWJlciBJTlRF
R0VSLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCi0gICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVY
IE9iamVjdFN0b3JlRGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBr
ZXlEYXRlLCBrZXlOdW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKLQotICAgICAgICAiQ1JFQVRFIFRB
QkxFIEluZGV4RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgaW5kZXhJZCBJTlRFR0VSIE5P
VCBOVUxMIFJFRkVSRU5DRVMgSW5kZXhlcyhpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIElO
VEVHRVIsIGtleU51bWJlciBJTlRFR0VSLCBvYmplY3RTdG9yZURhdGFJZCBJTlRFR0VSIE5PVCBO
VUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmVEYXRhKGlkKSkiLAotICAgICAgICAiQ1JFQVRFIElO
REVYIEluZGV4RGF0YV9jb21wb3NpdCBPTiBJbmRleERhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBr
ZXlOdW1iZXIsIGluZGV4SWQpIiwKLSAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfb2Jq
ZWN0U3RvcmVEYXRhSWQgT04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIsCi0gICAgICAg
ICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2luZGV4SWQgT04gSW5kZXhEYXRhKGluZGV4SWQpIiwK
LSAgICAgICAgfTsKLQotICAgIHJldHVybiBydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29t
bWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKTsKLX0KLQotc3Rh
dGljIGJvb2wgY3JlYXRlTWV0YURhdGFUYWJsZShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJh
c2UpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6YWRkSURCQmFja2luZ1N0b3JlKGNvbnN0
IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUp
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICJDUkVB
VEUgVEFCTEUgTWV0YURhdGEgKG5hbWUgVEVYVCBQUklNQVJZIEtFWSwgdmFsdWUgTk9ORSkiLAot
ICAgICAgICAiSU5TRVJUIElOVE8gTWV0YURhdGEgVkFMVUVTICgndmVyc2lvbicsIDEpIiwKLSAg
ICB9OwotCi0gICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5kcywg
c2l6ZW9mKGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpOworICAgIEFTU0VSVCghbV9i
YWNraW5nU3RvcmVNYXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOworICAgIG1fYmFja2lu
Z1N0b3JlTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBiYWNraW5nU3RvcmUpOwogfQogCi1zdGF0
aWMgYm9vbCBnZXREYXRhYmFzZVZlcnNpb24oU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNl
LCBpbnQqIGRhdGFiYXNlVmVyc2lvbikKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3Fs
aXRlRGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBNZXRhRGF0YSBXSEVSRSBuYW1lID0gJ3Zl
cnNpb24nIik7Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPayB8fCBxdWVy
eS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAq
ZGF0YWJhc2VWZXJzaW9uID0gcXVlcnkuZ2V0Q29sdW1uSW50KDApOwotICAgIHJldHVybiBxdWVy
eS5maW5hbGl6ZSgpID09IFNRTFJlc3VsdE9rOwotfQotCi1zdGF0aWMgYm9vbCBtaWdyYXRlRGF0
YWJhc2UoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQordm9pZCBJREJGYWN0b3J5QmFj
a2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIpCiB7Ci0gICAgaWYgKCFzcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cygiTWV0YURhdGEi
KSkgewotICAgICAgICBpZiAoIWNyZWF0ZU1ldGFEYXRhVGFibGUoc3FsaXRlRGF0YWJhc2UpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBkYXRhYmFzZVZlcnNp
b247Ci0gICAgaWYgKCFnZXREYXRhYmFzZVZlcnNpb24oc3FsaXRlRGF0YWJhc2UsICZkYXRhYmFz
ZVZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZGF0YWJhc2VWZXJz
aW9uID09IDEpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0g
ICAgICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhMiIsCi0gICAg
ICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0YTIgKGlkIElOVEVHRVIgUFJJTUFS
WSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0
b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIHZh
bHVlIFRFWFQgTk9UIE5VTEwpIiwKLSAgICAgICAgICAgICJJTlNFUlQgSU5UTyBPYmplY3RTdG9y
ZURhdGEyIFNFTEVDVCAqIEZST00gT2JqZWN0U3RvcmVEYXRhIiwKLSAgICAgICAgICAgICJEUk9Q
IFRBQkxFIE9iamVjdFN0b3JlRGF0YSIsIC8vIFRoaXMgZGVwZW5kcyBvbiBTUUxpdGUgbm90IGVu
Zm9yY2luZyByZWZlcmVudGlhbCBjb25zaXN0ZW5jeS4KLSAgICAgICAgICAgICJBTFRFUiBUQUJM
RSBPYmplY3RTdG9yZURhdGEyIFJFTkFNRSBUTyBPYmplY3RTdG9yZURhdGEiLAotICAgICAgICAg
ICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVj
dFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCki
LAotICAgICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZGV4RGF0YTIiLCAvLyBUaGlz
IGRlcGVuZHMgb24gU1FMaXRlIG5vdCBlbmZvcmNpbmcgcmVmZXJlbnRpYWwgY29uc2lzdGVuY3ku
Ci0gICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIEluZGV4RGF0YTIgKGlkIElOVEVHRVIgUFJJTUFS
WSBLRVksIGluZGV4SWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBr
ZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFMLCBrZXlOdW1iZXIgUkVBTCwgb2JqZWN0U3RvcmVE
YXRhSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwK
LSAgICAgICAgICAgICJJTlNFUlQgSU5UTyBJbmRleERhdGEyIFNFTEVDVCAqIEZST00gSW5kZXhE
YXRhIiwKLSAgICAgICAgICAgICJEUk9QIFRBQkxFIEluZGV4RGF0YSIsCi0gICAgICAgICAgICAi
QUxURVIgVEFCTEUgSW5kZXhEYXRhMiBSRU5BTUUgVE8gSW5kZXhEYXRhIiwKLSAgICAgICAgICAg
ICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2NvbXBvc2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcs
IGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCkiLAotICAgICAgICAgICAgIkNSRUFURSBJTkRF
WCBJbmRleERhdGFfb2JqZWN0U3RvcmVEYXRhSWQgT04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0
YUlkKSIsCi0gICAgICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9pbmRleElkIE9OIElu
ZGV4RGF0YShpbmRleElkKSIsCi0gICAgICAgICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1
ZSA9IDIgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIsCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYg
KCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykg
LyBzaXplb2YoY29tbWFuZHNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBkYXRhYmFzZVZlcnNpb24gPSAyOwotICAgIH0KLQotICAgIGlmIChkYXRhYmFzZVZlcnNp
b24gPT0gMikgewotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgdGhlIE9iamVjdFN0b3JlRGF0
YS52YWx1ZSBiZSBhIEJMT0IgaW5zdGVhZCBvZiBURVhULgotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBP
YmplY3RTdG9yZURhdGEiLCAvLyBUaGlzIGRyb3BzIGFzc29jaWF0ZWQgaW5kaWNlcy4KLSAgICAg
ICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkg
S0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9y
ZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIFJFQUwsIGtleU51bWJlciBSRUFMLCB2YWx1
ZSBCTE9CIE5PVCBOVUxMKSIsCi0gICAgICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmpl
Y3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0
ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIsCi0gICAgICAgICAgICAiVVBEQVRFIE1ldGFE
YXRhIFNFVCB2YWx1ZSA9IDMgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIsCi0gICAgICAgIH07Ci0K
LSAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVv
Zihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBkYXRhYmFzZVZlcnNpb24gPSAzOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZU1hcC5jb250YWlucyh1bmlxdWVJZGVu
dGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZpZXIp
OwogfQogCiB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwg
aW50NjRfdCBtYXhpbXVtU2l6ZSkKQEAgLTIyNSwxNCArODcsMTEgQEAgdm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2EKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQogICAgICAg
ICBiYWNraW5nU3RvcmUgPSBpdDItPnNlY29uZDsKICAgICBlbHNlIHsKLSAgICAgICAgYmFja2lu
Z1N0b3JlID0gb3BlblNRTGl0ZURhdGFiYXNlKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGly
LCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwotCi0gICAgICAgIGlmICghYmFj
a2luZ1N0b3JlIHx8ICFjcmVhdGVUYWJsZXMoYmFja2luZ1N0b3JlLT5kYigpKSB8fCAhbWlncmF0
ZURhdGFiYXNlKGJhY2tpbmdTdG9yZS0+ZGIoKSkpIHsKKyAgICAgICAgYmFja2luZ1N0b3JlID0g
SURCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhp
bXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworICAgICAgICBpZiAoIWJhY2tpbmdTdG9y
ZSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4i
KSk7Ci0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIDAp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fYmFja2luZ1N0b3Jl
TWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFja2luZ1N0b3JlLmdldCgpKTsKICAgICB9CiAKICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmluZGV4IDM3ZTZh
OWNhY2IwMDM5ZTdkNDBkZDQ0NmRkNDQwNDE3MGQ0ZjZlNWQuLjA3MWJjZjhkYTYxMGRmNWVlNzg3
YjkzNWNlZWYyYTg4N2ZhNjEwNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBO
b3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVycy4KICAgICB2b2lkIHJlbW92ZUlEQkRhdGFi
YXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIHZvaWQgYWRk
SURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURCQmFja2lu
Z1N0b3JlKik7CiAgICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKaW5kZXggYTIxNDZhNTIxZDJmYzYzNmIxNmVlNjIwMjNmZTExMGU2ZjA0MTNlNy4uYjI3
MGYzOWRiMjM3NjdlYzJjNGUyNWRhZjM1ZjRjMDY2YjM3YmJlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0xMDQs
MjIgKzEwNCwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbAogCiB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBxdWVyeShvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIlNF
TEVDVCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9y
ZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOwotICAgIGJvb2wgb2sgPSBxdWVyeS5w
cmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwotCi0gICAgYmluZFdoZXJlQ2xhdXNlKHF1ZXJ5
LCBvYmplY3RTdG9yZS0+aWQoKSwga2V5LmdldCgpKTsKLSAgICBpZiAocXVlcnkuc3RlcCgpICE9
IFNRTFJlc3VsdFJvdykgeworICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2Jh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksICprZXkp
OworICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKChrZXktPnR5cGUoKSA9PSBJREJLZXk6OlN0cmlu
Z1R5cGUpICE9IHF1ZXJ5LmlzQ29sdW1uTnVsbCgwKSk7Ci0gICAgQVNTRVJUKChrZXktPnR5cGUo
KSA9PSBJREJLZXk6OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMSkpOwotICAgIEFT
U0VSVCgoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSAhPSBxdWVyeS5pc0NvbHVt
bk51bGwoMikpOwotCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZShxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMykpKTsKLSAg
ICBBU1NFUlQocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdyk7CisgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkp
OwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQpAQCAtMTM5
LDUxICsxMzAsNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGlu
amVjdEtleUludG9LZXlQYXRoKFBhc3NSZWZQdHI8SURCS2V5PgogICAgIHJldHVybiBJREJLZXlQ
YXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1
ZSwga2V5UGF0aCk7CiB9CiAKLXN0YXRpYyBib29sIHB1dE9iamVjdFN0b3JlRGF0YShTUUxpdGVE
YXRhYmFzZSYgZGIsIElEQktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGRhdGFSb3dJZCkKLXsKLSAgICBTdHJpbmcg
c3FsID0gZGF0YVJvd0lkICE9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkludmFsaWRJZCA/
ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlTdHJpbmcgPSA/LCBrZXlEYXRlID0gPywg
a2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlkID0gPyIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNF
UlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2
YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7Ci0gICAgU1FMaXRl
U3RhdGVtZW50IHF1ZXJ5KGRiLCBzcWwpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FM
UmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBrZXktPmJpbmRXaXRoTnVsbHMo
cXVlcnksIDEpOwotICAgIHF1ZXJ5LmJpbmRCbG9iKDQsIHZhbHVlLT50b1dpcmVTdHJpbmcoKSk7
Ci0gICAgaWYgKGRhdGFSb3dJZCAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJbnZhbGlkSWQp
Ci0gICAgICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBkYXRhUm93SWQpOwotICAgIGVsc2UKLSAgICAg
ICAgcXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOwotCi0gICAgaWYgKHF1ZXJ5LnN0
ZXAoKSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
ZGF0YVJvd0lkID09IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkludmFsaWRJZCkKLSAgICAgICAg
ZGF0YVJvd0lkID0gZGIubGFzdEluc2VydFJvd0lEKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIGJvb2wgZGVsZXRlSW5kZXhEYXRhKFNRTGl0ZURhdGFiYXNlJiBkYiwgaW50NjRf
dCBvYmplY3RTdG9yZURhdGFJZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlUXVlcnko
ZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgPSA/Iik7
Ci0gICAgaWYgKGRlbGV0ZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZURh
dGFJZCk7Ci0KLSAgICByZXR1cm4gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7
Ci19Ci0KLXN0YXRpYyBib29sIHB1dEluZGV4RGF0YShTUUxpdGVEYXRhYmFzZSYgZGIsIElEQktl
eSoga2V5LCBpbnQ2NF90IGluZGV4SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpCi17Ci0g
ICAgU1FMaXRlU3RhdGVtZW50IHB1dFF1ZXJ5KGRiLCAiSU5TRVJUIElOVE8gSW5kZXhEYXRhIChr
ZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCwgb2JqZWN0U3RvcmVEYXRhSWQp
IFZBTFVFUyAoPywgPywgPywgPywgPykiKTsKLSAgICBpZiAocHV0UXVlcnkucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAga2V5LT5iaW5kV2l0aE51
bGxzKHB1dFF1ZXJ5LCAxKTsKLSAgICBwdXRRdWVyeS5iaW5kSW50NjQoNCwgaW5kZXhJZCk7Ci0g
ICAgcHV0UXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlRGF0YUlkKTsKLQotICAgIHJldHVy
biBwdXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLX0KLQogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBy
cFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICh0
cmFuc2FjdGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpIHsKQEAg
LTMwOSwxNCArMjU1LDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgLy8gQmVmb3Jl
IHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJv
bGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCiAgICAgaW50NjRfdCBk
YXRhUm93SWQgPSBpc0V4aXN0aW5nVmFsdWUgPyBnZXRRdWVyeS5nZXRDb2x1bW5JbnQoMCkgOiBJ
bnZhbGlkSWQ7Ci0gICAgaWYgKCFwdXRPYmplY3RTdG9yZURhdGEob2JqZWN0U3RvcmUtPnNxbGl0
ZURhdGFiYXNlKCksIGtleS5nZXQoKSwgdmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5pZCgpLCBk
YXRhUm93SWQpKSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dE9i
amVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3Ry
aW5nKCksIGRhdGFSb3dJZCwgZGF0YVJvd0lkID09IEludmFsaWRJZCkpIHsKICAgICAgICAgLy8g
RklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBh
biBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAg
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCFkZWxldGVJbmRleERhdGEob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksIGRh
dGFSb3dJZCkpIHsKKyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFSb3dJZCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBJ
bmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2Rl
IGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwg
IkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRyYW5z
YWN0aW9uLT5hYm9ydCgpOwpAQCAtMzI3LDcgKzI3Myw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8CiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRl
eGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsr
aSkgewogICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2Vz
IG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgotICAgICAgICBpZiAoIXB1dEluZGV4RGF0
YShvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgaW5kZXhLZXlzW2ldLmdldCgpLCBpdC0+
c2Vjb25kLT5pZCgpLCBkYXRhUm93SWQpKSB7CisgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1f
YmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JSZWNvcmQoaXQtPnNlY29uZC0+aWQoKSwgKmlu
ZGV4S2V5c1tpXSwgZGF0YVJvd0lkKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRl
eGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRl
ZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIs
ICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwogICAgICAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KCk7CkBAIC00MDEsMjUgKzM0NywxMyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQgogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7CiB9CiAKLXN0YXRpYyB2b2lkIGRvRGVsZXRlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29u
c3QgY2hhciogc3FsLCBpbnQ2NF90IGlkKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVR
dWVyeShkYiwgc3FsKTsKLSAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZy4KLSAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgaWQpOwotICAgIG9r
ID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci0gICAgQVNTRVJUX1VOVVNF
RChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgotfQotCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgZG9EZWxldGUob2Jq
ZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUg
b2JqZWN0U3RvcmVEYXRhSWQgSU4gKFNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVS
RSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgZG9EZWxldGUo
b2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZURh
dGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0KKyAgICBv
YmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUt
PmlkKCkpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
dW5kZWZpbmVkVmFsdWUoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoU1FMaXRl
RGF0YWJhc2UmIGRiLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgU3RyaW5nJiBpbmRleEtleVBhdGgpCitzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBTUUxpdGVEYXRhYmFzZSYgZGIsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIGluZGV4S2V5UGF0aCkK
IHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0KGRiLCAiU0VMRUNUIGlkLCB2YWx1ZSBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIpOwogICAgIGlmIChzZWxl
Y3QucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQpAQCAtNDMwLDcgKzM2NCw3IEBAIHN0YXRpYyBi
b29sIHBvcHVsYXRlSW5kZXgoU1FMaXRlRGF0YWJhc2UmIGRiLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kCiAgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQgPSBzZWxl
Y3QuZ2V0Q29sdW1uSW50NjQoMCk7CiAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG9iamVjdFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShz
ZWxlY3QuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKICAgICAgICAgUmVmUHRyPElEQktleT4g
aW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVlLmdldCgpLCBpbmRleEtl
eVBhdGgpOwotICAgICAgICBpZiAoIXB1dEluZGV4RGF0YShkYiwgaW5kZXhLZXkuZ2V0KCksIGlu
ZGV4SWQsIG9iamVjdFN0b3JlRGF0YUlkKSkKKyAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0
SW5kZXhEYXRhRm9yUmVjb3JkKGluZGV4SWQsICppbmRleEtleSwgb2JqZWN0U3RvcmVEYXRhSWQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDY1LDIzICszOTksMTUg
QEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChv
YmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIklOU0VSVCBJTlRPIEluZGV4ZXMgKG9iamVj
dFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8sID8sID8sID8pIik7
Ci0gICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW5zZXJ0LmJp
bmRJbnQ2NCgxLCBvYmplY3RTdG9yZS0+bV9pZCk7Ci0gICAgaW5zZXJ0LmJpbmRUZXh0KDIsIGlu
ZGV4LT5uYW1lKCkpOwotICAgIGluc2VydC5iaW5kVGV4dCgzLCBpbmRleC0+a2V5UGF0aCgpKTsK
LSAgICBpbnNlcnQuYmluZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KGluZGV4LT51bmlxdWUoKSkp
OwotICAgIGlmIChpbnNlcnQuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICBpbnQ2NF90
IGlkOworICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleChv
YmplY3RTdG9yZS0+bV9pZCwgaW5kZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwgaW5kZXgt
PnVuaXF1ZSgpLCBpZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaW50NjRfdCBpZCA9IG9iamVjdFN0b3JlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RJbnNlcnRSb3dJRCgpOworCiAgICAgaW5kZXgtPnNldElkKGlkKTsKIAotICAg
IGlmICghcG9wdWxhdGVJbmRleChvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgb2JqZWN0
U3RvcmUtPm1faWQsIGlkLCBpbmRleC0+a2V5UGF0aCgpKSkgeworICAgIGlmICghcG9wdWxhdGVJ
bmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+c3FsaXRlRGF0
YWJhc2UoKSwgb2JqZWN0U3RvcmUtPm1faWQsIGlkLCBpbmRleC0+a2V5UGF0aCgpKSkgewogICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUy
NCw5ICs0NTAsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogCiB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKIHsKLSAgICBkb0RlbGV0ZShvYmpl
Y3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMgV0hFUkUgaWQg
PSA/IiwgaW5kZXgtPmlkKCkpOwotICAgIGRvRGVsZXRlKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRh
YmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXgt
PmlkKCkpOwotCisgICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChp
bmRleC0+aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwog
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83309</attachid>
            <date>2011-02-22 07:18:52 -0800</date>
            <delta_ts>2011-02-22 16:20:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54889-20110222151850.patch</filename>
            <type>text/plain</type>
            <size>58450</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5OWM2YjUwODFjMTM4ZDhhNGNkYjJkYThlMzg2OWZiNmZhNTg3YTE2Li5j
M2UyMzc2MWVjY2U4NjE5N2QwMTAwMGYxYWMxNTYzZjdlOGMxMTc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0y
LDYgKzIsNjIgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAg
ICAgICBJbmRleGVkREI6IE1vdmUgc29tZSBTUUwgY29kZSBpbnRvIElEQkJhY2tpbmdTdG9yZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4ODkKKwor
ICAgICAgICBUaGUgaWRlYSBpcyB0byBnYXRoZXIgYWxsIHRoZSBTUUwgbG9naWMgaW50byBJREJC
YWNraW5nU3RvcmUuCisKKyAgICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJ1bkNvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRhYmxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZXRhRGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldERhdGFiYXNlU2NoZW1hVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjptaWdyYXRlRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpvcGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6ZG9EZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjp3aGVyZVN5
bnRheEZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpiaW5kS2V5VG9RdWVyeSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgICogc3RvcmFnZS9JREJC
YWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMpOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6SURCRmFjdG9yeUJhY2tlbmRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6YWRkSURCQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bik6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpwb3B1bGF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCk6CisKKzIw
MTEtMDItMjEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBJbmRleGVkREI6IFJlbmFtZSBJ
REJTUUxpdGVEYXRhYmFzZSB0byBJREJCYWNraW5nU3RvcmUKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODY0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA2ODhmZWI4YTBkNzFkZTBlMzgwOWRmZTFjZDMz
OTMzZGZhYTFlMmEzLi43YWNhZTViMTg1YzFkMjc3NjlmN2YyNTIzZjZmYzY2YTBkOGE2ZTUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yOCw3ICsy
OCwxMyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAi
SURCS2V5LmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArNDIsNyBA
QCBJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZShTdHJpbmcgaWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0bwogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CiAgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKIHsKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tp
bmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsKIH0KIAogSURCQmFja2luZ1N0b3JlOjp+SURCQmFj
a2luZ1N0b3JlKCkKQEAgLTQzLDYgKzUwLDQ3MSBAQCBJREJCYWNraW5nU3RvcmU6On5JREJCYWNr
aW5nU3RvcmUoKQogICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0b3JlKG1faWRlbnRp
Zmllcik7CiB9CiAKK3N0YXRpYyBib29sIHJ1bkNvbW1hbmRzKFNRTGl0ZURhdGFiYXNlJiBzcWxp
dGVEYXRhYmFzZSwgY29uc3QgY2hhcioqIGNvbW1hbmRzLCBzaXplX3QgbnVtYmVyT2ZDb21tYW5k
cykKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSwg
ZmFsc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkNvbW1hbmRzOyArK2kpIHsKKyAgICAgICAgaWYgKCFzcWxpdGVEYXRhYmFz
ZS5leGVjdXRlQ29tbWFuZChjb21tYW5kc1tpXSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZm9yIEluZGV4ZWREQjogJXMiLCBj
b21tYW5kc1tpXSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIGNyZWF0ZVRhYmxlcyhTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCit7Cisg
ICAgaWYgKHNxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKCJEYXRhYmFzZXMiKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7CisgICAg
ICAgICJDUkVBVEUgVEFCTEUgRGF0YWJhc2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1l
IFRFWFQgTk9UIE5VTEwsIGRlc2NyaXB0aW9uIFRFWFQgTk9UIE5VTEwsIHZlcnNpb24gVEVYVCBO
T1QgTlVMTCkiLAorICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBEYXRhYmFzZXNfbmFtZSBP
TiBEYXRhYmFzZXMobmFtZSkiLAorCisgICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVz
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQgTk9UIE5VTEwsIGtleVBhdGggVEVY
VCwgZG9BdXRvSW5jcmVtZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFiYXNlSWQgSU5URUdFUiBO
T1QgTlVMTCBSRUZFUkVOQ0VTIERhdGFiYXNlcyhpZCkpIiwKKyAgICAgICAgIkNSRUFURSBVTklR
VUUgSU5ERVggT2JqZWN0U3RvcmVzX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlcyhkYXRhYmFzZUlk
LCBuYW1lKSIsCisKKyAgICAgICAgIkNSRUFURSBUQUJMRSBJbmRleGVzIChpZCBJTlRFR0VSIFBS
SU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBPYmpl
Y3RTdG9yZShpZCksIG5hbWUgVEVYVCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBpc1VuaXF1ZSBJ
TlRFR0VSIE5PVCBOVUxMKSIsCisgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIEluZGV4ZXNf
Y29tcG9zaXQgT04gSW5kZXhlcyhvYmplY3RTdG9yZUlkLCBuYW1lKSIsCisKKyAgICAgICAgIkNS
RUFURSBUQUJMRSBPYmplY3RTdG9yZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVj
dFN0b3JlSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5
U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwga2V5TnVtYmVyIElOVEVHRVIsIHZhbHVlIFRF
WFQgTk9UIE5VTEwpIiwKKyAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVE
YXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51
bWJlciwgb2JqZWN0U3RvcmVJZCkiLAorCisgICAgICAgICJDUkVBVEUgVEFCTEUgSW5kZXhEYXRh
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRleElkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJF
TkNFUyBJbmRleGVzKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgSU5URUdFUiwga2V5TnVt
YmVyIElOVEVHRVIsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNF
UyBPYmplY3RTdG9yZURhdGEoaWQpKSIsCisgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRh
X2NvbXBvc2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5k
ZXhJZCkiLAorICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9vYmplY3RTdG9yZURhdGFJ
ZCBPTiBJbmRleERhdGEob2JqZWN0U3RvcmVEYXRhSWQpIiwKKyAgICAgICAgIkNSRUFURSBJTkRF
WCBJbmRleERhdGFfaW5kZXhJZCBPTiBJbmRleERhdGEoaW5kZXhJZCkiLAorICAgICAgICB9Owor
CisgICAgcmV0dXJuIHJ1bkNvbW1hbmRzKHNxbGl0ZURhdGFiYXNlLCBjb21tYW5kcywgc2l6ZW9m
KGNvbW1hbmRzKSAvIHNpemVvZihjb21tYW5kc1swXSkpOworfQorCitzdGF0aWMgYm9vbCBjcmVh
dGVNZXRhRGF0YVRhYmxlKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSkKK3sKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKKyAgICAgICAgIkNSRUFURSBUQUJMRSBN
ZXRhRGF0YSAobmFtZSBURVhUIFBSSU1BUlkgS0VZLCB2YWx1ZSBOT05FKSIsCisgICAgICAgICJJ
TlNFUlQgSU5UTyBNZXRhRGF0YSBWQUxVRVMgKCd2ZXJzaW9uJywgMSkiLAorICAgIH07CisKKyAg
ICByZXR1cm4gcnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29t
bWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSk7Cit9CisKK3N0YXRpYyBib29sIGdldERhdGFi
YXNlU2NoZW1hVmVyc2lvbihTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGludCogZGF0
YWJhc2VWZXJzaW9uKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShzcWxpdGVEYXRhYmFz
ZSwgIlNFTEVDVCB2YWx1ZSBGUk9NIE1ldGFEYXRhIFdIRVJFIG5hbWUgPSAndmVyc2lvbiciKTsK
KyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rIHx8IHF1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICpkYXRhYmFzZVZl
cnNpb24gPSBxdWVyeS5nZXRDb2x1bW5JbnQoMCk7CisgICAgcmV0dXJuIHF1ZXJ5LmZpbmFsaXpl
KCkgPT0gU1FMUmVzdWx0T2s7Cit9CisKK3N0YXRpYyBib29sIG1pZ3JhdGVEYXRhYmFzZShTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UpCit7CisgICAgaWYgKCFzcWxpdGVEYXRhYmFzZS50
YWJsZUV4aXN0cygiTWV0YURhdGEiKSkgeworICAgICAgICBpZiAoIWNyZWF0ZU1ldGFEYXRhVGFi
bGUoc3FsaXRlRGF0YWJhc2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCBkYXRhYmFzZVZlcnNpb247CisgICAgaWYgKCFnZXREYXRhYmFzZVNjaGVtYVZlcnNp
b24oc3FsaXRlRGF0YWJhc2UsICZkYXRhYmFzZVZlcnNpb24pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZGF0YWJhc2VWZXJzaW9uID09IDEpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElT
VFMgT2JqZWN0U3RvcmVEYXRhMiIsCisgICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0
b3JlRGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3JlSWQgSU5URUdFUiBO
T1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURh
dGUgUkVBTCwga2V5TnVtYmVyIFJFQUwsIHZhbHVlIFRFWFQgTk9UIE5VTEwpIiwKKyAgICAgICAg
ICAgICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEyIFNFTEVDVCAqIEZST00gT2JqZWN0U3Rv
cmVEYXRhIiwKKyAgICAgICAgICAgICJEUk9QIFRBQkxFIE9iamVjdFN0b3JlRGF0YSIsIC8vIFRo
aXMgZGVwZW5kcyBvbiBTUUxpdGUgbm90IGVuZm9yY2luZyByZWZlcmVudGlhbCBjb25zaXN0ZW5j
eS4KKyAgICAgICAgICAgICJBTFRFUiBUQUJMRSBPYmplY3RTdG9yZURhdGEyIFJFTkFNRSBUTyBP
YmplY3RTdG9yZURhdGEiLAorICAgICAgICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggT2JqZWN0
U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3JlRGF0YShrZXlTdHJpbmcsIGtleURhdGUs
IGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiLAorICAgICAgICAgICAgIkRST1AgVEFCTEUgSUYg
RVhJU1RTIEluZGV4RGF0YTIiLCAvLyBUaGlzIGRlcGVuZHMgb24gU1FMaXRlIG5vdCBlbmZvcmNp
bmcgcmVmZXJlbnRpYWwgY29uc2lzdGVuY3kuCisgICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIElu
ZGV4RGF0YTIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGluZGV4SWQgSU5URUdFUiBOT1QgTlVM
TCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFMLCBr
ZXlOdW1iZXIgUkVBTCwgb2JqZWN0U3RvcmVEYXRhSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVO
Q0VTIE9iamVjdFN0b3JlRGF0YShpZCkpIiwKKyAgICAgICAgICAgICJJTlNFUlQgSU5UTyBJbmRl
eERhdGEyIFNFTEVDVCAqIEZST00gSW5kZXhEYXRhIiwKKyAgICAgICAgICAgICJEUk9QIFRBQkxF
IEluZGV4RGF0YSIsCisgICAgICAgICAgICAiQUxURVIgVEFCTEUgSW5kZXhEYXRhMiBSRU5BTUUg
VE8gSW5kZXhEYXRhIiwKKyAgICAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX2NvbXBv
c2l0IE9OIEluZGV4RGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgaW5kZXhJZCki
LAorICAgICAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfb2JqZWN0U3RvcmVEYXRhSWQg
T04gSW5kZXhEYXRhKG9iamVjdFN0b3JlRGF0YUlkKSIsCisgICAgICAgICAgICAiQ1JFQVRFIElO
REVYIEluZGV4RGF0YV9pbmRleElkIE9OIEluZGV4RGF0YShpbmRleElkKSIsCisgICAgICAgICAg
ICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDIgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIs
CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxpdGVEYXRhYmFzZSwg
Y29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNbMF0pKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkYXRhYmFzZVZlcnNpb24gPSAyOworICAg
IH0KKworICAgIGlmIChkYXRhYmFzZVZlcnNpb24gPT0gMikgeworICAgICAgICAvLyBXZSBuZWVk
IHRvIG1ha2UgdGhlIE9iamVjdFN0b3JlRGF0YS52YWx1ZSBiZSBhIEJMT0IgaW5zdGVhZCBvZiBU
RVhULgorICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKKyAgICAgICAg
ICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBPYmplY3RTdG9yZURhdGEiLCAvLyBUaGlzIGRyb3Bz
IGFzc29jaWF0ZWQgaW5kaWNlcy4KKyAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgT2JqZWN0U3Rv
cmVEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9U
IE5VTEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRl
IFJFQUwsIGtleU51bWJlciBSRUFMLCB2YWx1ZSBCTE9CIE5PVCBOVUxMKSIsCisgICAgICAgICAg
ICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0
U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIs
CisgICAgICAgICAgICAiVVBEQVRFIE1ldGFEYXRhIFNFVCB2YWx1ZSA9IDMgV0hFUkUgbmFtZSA9
ICd2ZXJzaW9uJyIsCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFydW5Db21tYW5kcyhzcWxp
dGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNb
MF0pKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkYXRhYmFzZVZlcnNp
b24gPSAzOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5
KQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihu
ZXcgSURCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5KSkpOworCisgICAgU3Ry
aW5nIHBhdGggPSAiOm1lbW9yeToiOworICAgIGlmICghcGF0aEJhc2UuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBwb3NzaWJseSBkbyB0
byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIgdGhhbiBqdXN0IGVy
cm9yaW5nIG91dC4KKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9j
YWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKSArICIuaW5kZXhlZGRiIik7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmUtPm1f
ZGIub3BlbihwYXRoKSkgeworICAgICAgICAvLyBGSVhNRTogSXMgdGhlcmUgYW55IG90aGVyIHRo
aW5nIHdlIGNvdWxkIHBvc3NpYmx5IGRvIHRvIHJlY292ZXIgYXQgdGhpcyBwb2ludD8gSWYgc28s
IGRvIGl0IHJhdGhlciB0aGFuIGp1c3QgZXJyb3Jpbmcgb3V0LgorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIEluZGV4ZWREQiIsIHBhdGgudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEZJWE1FOiBF
cnJvciBjaGVja2luZz8KKyAgICBiYWNraW5nU3RvcmUtPm1fZGIuc2V0TWF4aW11bVNpemUobWF4
aW11bVNpemUpOworICAgIGJhY2tpbmdTdG9yZS0+bV9kYi50dXJuT25JbmNyZW1lbnRhbEF1dG9W
YWN1dW0oKTsKKworICAgIGlmICghY3JlYXRlVGFibGVzKGJhY2tpbmdTdG9yZS0+bV9kYikpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghbWlncmF0ZURhdGFiYXNlKGJhY2tpbmdTdG9yZS0+
bV9kYikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxl
YXNlKCk7Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhYmFzZVF1ZXJ5KG1fZGIsICJTRUxF
Q1QgaWQsIHZlcnNpb24gRlJPTSBEYXRhYmFzZXMgV0hFUkUgbmFtZSA9ID8iKTsKKyAgICBpZiAo
ZGF0YWJhc2VRdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGF0YWJh
c2VRdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkg
IT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZElkID0g
ZGF0YWJhc2VRdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICBmb3VuZFZlcnNpb24gPSBkYXRh
YmFzZVF1ZXJ5LmdldENvbHVtblRleHQoMSk7CisKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVw
KCkgPT0gU1FMUmVzdWx0Um93KQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qm
IHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkKK3sKKyAgICBBU1NFUlQoIW5hbWUuaXNOdWxsKCkp
OworICAgIEFTU0VSVCghdmVyc2lvbi5pc051bGwoKSk7CisKKyAgICBTdHJpbmcgc3FsID0gaW52
YWxpZFJvd0lkID8gIklOU0VSVCBJTlRPIERhdGFiYXNlcyAobmFtZSwgZGVzY3JpcHRpb24sIHZl
cnNpb24pIFZBTFVFUyAoPywgJycsID8pIiA6ICJVUERBVEUgRGF0YWJhc2VzIFNFVCBuYW1lID0g
PywgdmVyc2lvbiA9ID8gV0hFUkUgaWQgPSA/IjsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgc3FsKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcXVlcnkuYmluZFRleHQoMSwgbmFtZSk7CisgICAgcXVlcnkuYmluZFRleHQoMiwg
dmVyc2lvbik7CisgICAgaWYgKCFpbnZhbGlkUm93SWQpCisgICAgICAgIHF1ZXJ5LmJpbmRJbnQ2
NCgzLCByb3dJZCk7CisKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpbnZhbGlkUm93SWQpCisgICAgICAgIHJv
d0lkID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwg
VmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3Jl
bWVudEZsYWdzKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGlk
LCBuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUg
ZGF0YWJhc2VJZCA9ID8iKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJl
c3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJv
ciBoYW5kbGluZz8KKworICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOworICAgIEFTU0VS
VChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0aHMuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MuaXNFbXB0eSgpKTsKKwor
ICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBkYXRhYmFzZUlkKTsKKworICAgIHdoaWxlIChxdWVyeS5z
dGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIGZvdW5kSWRzLmFwcGVuZChxdWVyeS5n
ZXRDb2x1bW5JbnQ2NCgwKSk7CisgICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKHF1ZXJ5LmdldENv
bHVtblRleHQoMSkpOworICAgICAgICBmb3VuZEtleVBhdGhzLmFwcGVuZChxdWVyeS5nZXRDb2x1
bW5UZXh0KDIpKTsKKyAgICAgICAgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MuYXBwZW5kKCEhcXVl
cnkuZ2V0Q29sdW1uSW50KDMpKTsKKyAgICB9Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklO
U0VSVCBJTlRPIE9iamVjdFN0b3JlcyAobmFtZSwga2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50LCBk
YXRhYmFzZUlkKSBWQUxVRVMgKD8sID8sID8sID8pIik7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcXVlcnkuYmlu
ZFRleHQoMSwgbmFtZSk7CisgICAgcXVlcnkuYmluZFRleHQoMiwga2V5UGF0aCk7CisgICAgcXVl
cnkuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9JbmNyZW1lbnQpKTsKKyAgICBxdWVy
eS5iaW5kSW50NjQoNCwgZGF0YWJhc2VJZCk7CisKKyAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNR
TFJlc3VsdERvbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyB2b2lkIGRvRGVsZXRlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgY2hhciogc3Fs
LCBpbnQ2NF90IGlkKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShkYiwgc3Fs
KTsKKyAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwor
ICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGlu
Zy4KKyAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgaWQpOworICAgIG9rID0gZGVsZXRlUXVl
cnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAv
LyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorfQorCit2b2lkIElEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIGRvRGVs
ZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgaWQgPSA/Iiwgb2JqZWN0
U3RvcmVJZCk7CisgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOworICAgIGRvRGVsZXRl
KG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCBJTiAoU0VMRUNUIGlk
IEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZUlkKTsK
KyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOworfQorCitzdGF0aWMgU3RyaW5nIHdoZXJlU3ludGF4
Rm9yS2V5KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgcXVhbGlmaWVkVGFibGVOYW1lID0gIiIp
Cit7CisgICAgc3dpdGNoIChrZXkudHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5
cGU6CisgICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5U3RyaW5nID0gPyAg
QU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsg
cXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJUyBOVUxMICAiOworICAgIGNhc2UgSURC
S2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gcXVhbGlmaWVkVGFibGVOYW1lICsgImtl
eVN0cmluZyBJUyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5RGF0ZSBJ
UyBOVUxMICBBTkQgICIgKyBxdWFsaWZpZWRUYWJsZU5hbWUgKyAia2V5TnVtYmVyID0gPyAgIjsK
KyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHJldHVybiBxdWFsaWZpZWRUYWJs
ZU5hbWUgKyAia2V5U3RyaW5nIElTIE5VTEwgIEFORCAgIiArIHF1YWxpZmllZFRhYmxlTmFtZSAr
ICJrZXlEYXRlID0gPyAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1lICsgImtleU51bWJlciBJ
UyBOVUxMICAiOworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuIHF1
YWxpZmllZFRhYmxlTmFtZSArICJrZXlTdHJpbmcgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVk
VGFibGVOYW1lICsgImtleURhdGUgSVMgTlVMTCAgQU5EICAiICsgcXVhbGlmaWVkVGFibGVOYW1l
ICsgImtleU51bWJlciBJUyBOVUxMICAiOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAiIjsKK30KKworLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1z
IGJvdW5kLgorc3RhdGljIGludCBiaW5kS2V5VG9RdWVyeShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5
LCBpbnQgY29sdW1uLCBjb25zdCBJREJLZXkmIGtleSkKK3sKKyAgICBzd2l0Y2ggKGtleS50eXBl
KCkpIHsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcXVlcnkuYmluZFRl
eHQoY29sdW1uLCBrZXkuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIElE
QktleTo6RGF0ZVR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBrZXkuZGF0
ZSgpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Cisg
ICAgICAgIHF1ZXJ5LmJpbmREb3VibGUoY29sdW1uLCBrZXkubnVtYmVyKCkpOworICAgICAgICBy
ZXR1cm4gMTsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitT
dHJpbmcgSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RiLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQgIiArIHdoZXJlU3lu
dGF4Rm9yS2V5KGtleSkpOworICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVz
dWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nPworCisgICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQpOworICAg
IGJpbmRLZXlUb1F1ZXJ5KHF1ZXJ5LCAyLCBrZXkpOworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0g
U1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIE51bGwgU3RyaW5nIG1l
YW5zIHJlY29yZCBub3QgZm91bmQuCisKKyAgICBBU1NFUlQoKGtleS50eXBlKCkgPT0gSURCS2V5
OjpTdHJpbmdUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMCkpOworICAgIEFTU0VSVCgoa2V5
LnR5cGUoKSA9PSBJREJLZXk6OkRhdGVUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMSkpOwor
ICAgIEFTU0VSVCgoa2V5LnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpICE9IHF1ZXJ5Lmlz
Q29sdW1uTnVsbCgyKSk7CisKKyAgICBTdHJpbmcgcmVjb3JkID0gcXVlcnkuZ2V0Q29sdW1uQmxv
YkFzU3RyaW5nKDMpOworICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KTsK
KworICAgIHJldHVybiByZWNvcmQ7Cit9CisKK3N0YXRpYyB2b2lkIGJpbmRLZXlUb1F1ZXJ5V2l0
aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uLCBjb25zdCBJREJL
ZXkmIGtleSkKK3sKKyAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKKyAgICBjYXNlIElEQktleTo6
U3RyaW5nVHlwZToKKyAgICAgICAgcXVlcnkuYmluZFRleHQoYmFzZUNvbHVtbiArIDAsIGtleS5z
dHJpbmcoKSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAxKTsKKyAgICAg
ICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElEQktleTo6RGF0ZVR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4g
KyAwKTsKKyAgICAgICAgcXVlcnkuYmluZERvdWJsZShiYXNlQ29sdW1uICsgMSwga2V5LmRhdGUo
KSk7CisgICAgICAgIHF1ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIHF1ZXJ5LmJpbmROdWxs
KGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFzZUNvbHVtbiArIDEp
OworICAgICAgICBxdWVyeS5iaW5kRG91YmxlKGJhc2VDb2x1bW4gKyAyLCBrZXkubnVtYmVyKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHF1
ZXJ5LmJpbmROdWxsKGJhc2VDb2x1bW4gKyAwKTsKKyAgICAgICAgcXVlcnkuYmluZE51bGwoYmFz
ZUNvbHVtbiArIDEpOworICAgICAgICBxdWVyeS5iaW5kTnVsbChiYXNlQ29sdW1uICsgMik7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkKK3sKKyAgICBTdHJpbmcg
c3FsID0gIWludmFsaWRSb3dJZCA/ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlTdHJp
bmcgPSA/LCBrZXlEYXRlID0gPywga2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlkID0g
PyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNFUlQgSU5UTyBPYmplY3RT
dG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSwgb2JqZWN0U3Rv
cmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5
KG1fZGIsIHNxbCk7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmluZEtleVRvUXVlcnlXaXRoTnVsbHMocXVlcnks
IDEsIGtleSk7CisgICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUpOworICAgIGlmICghaW52YWxp
ZFJvd0lkKQorICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgcm93SWQpOworICAgIGVsc2UKKyAg
ICAgICAgcXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOworCisgICAgaWYgKHF1ZXJ5
LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoaW52YWxpZFJvd0lkKQorICAgICAgICByb3dJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUlu
ZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKQoreworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVj
dFN0b3JlRGF0YUlkID0gPyIpOworICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmpl
Y3RTdG9yZURhdGFJZCk7CisgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25l
OworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQp
Cit7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBJbmRleERh
dGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkLCBvYmplY3RTdG9yZURh
dGFJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpOworICAgIGlmIChxdWVyeS5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJpbmRLZXlUb1F1
ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCg0LCBpbmRl
eElkKTsKKyAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVEYXRhSWQpOworCisgICAg
cmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOworfQorCitib29sIElEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5k
ZXhJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIElu
ZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8s
ID8sID8sID8pIik7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3Jl
SWQpOworICAgIHF1ZXJ5LmJpbmRUZXh0KDIsIG5hbWUpOworICAgIHF1ZXJ5LmJpbmRUZXh0KDMs
IGtleVBhdGgpOworICAgIHF1ZXJ5LmJpbmRJbnQoNCwgc3RhdGljX2Nhc3Q8aW50Pihpc1VuaXF1
ZSkpOworCisgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpbmRleElkID0gbV9kYi5sYXN0SW5zZXJ0Um93SUQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGlu
dDY0X3QgaW5kZXhJZCkKK3sKKyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhl
cyBXSEVSRSBpZCA9ID8iLCBpbmRleElkKTsKKyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZS
T00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXhJZCk7Cit9CisKK3ZvaWQgSURC
QmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sK
KyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0
b3JlRGF0YUlkIElOIChTRUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0
U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmVJZCk7CisgICAgZG9EZWxldGUobV9kYiwgIkRFTEVU
RSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0
b3JlSWQpOworfQorCitkb3VibGUgSURCQmFja2luZ1N0b3JlOjphdXRvSW5jcmVtZW50TnVtYmVy
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
YiwgIlNFTEVDVCBtYXgoa2V5TnVtYmVyKSArIDEgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8gQU5EIGtleVN0cmluZyBJUyBOVUxMIEFORCBrZXlEYXRlIElTIE5V
TEwiKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RT
dG9yZUlkKTsKKworICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93IHx8IHF1ZXJ5
LmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gcXVlcnku
Z2V0Q29sdW1uRG91YmxlKDApOworfQorCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhl
cyhpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RiLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSBGUk9NIEluZGV4ZXMg
V0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iKTsKKyAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KKworICAgIEFTU0VSVChmb3VuZElkcy5pc0VtcHR5KCkpOwor
ICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKGZvdW5kS2V5UGF0
aHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZm91bmRVbmlxdWVGbGFncy5pc0VtcHR5KCkpOwor
CisgICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSWQpOworCisgICAgd2hpbGUgKHF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgZm91bmRJZHMuYXBwZW5kKHF1
ZXJ5LmdldENvbHVtbkludDY0KDApKTsKKyAgICAgICAgZm91bmROYW1lcy5hcHBlbmQocXVlcnku
Z2V0Q29sdW1uVGV4dCgxKSk7CisgICAgICAgIGZvdW5kS2V5UGF0aHMuYXBwZW5kKHF1ZXJ5Lmdl
dENvbHVtblRleHQoMikpOworICAgICAgICBmb3VuZFVuaXF1ZUZsYWdzLmFwcGVuZCghIXF1ZXJ5
LmdldENvbHVtbkludCgzKSk7CisgICAgfQorfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6Zm9y
RWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVS
ZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1f
ZGIsICJTRUxFQ1QgaWQsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0
b3JlSWQgPSA/Iik7CisgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3Jl
SWQpOworCisgICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAg
ICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCA9IHF1ZXJ5LmdldENvbHVtbkludDY0KDApOwor
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSk7Cisg
ICAgICAgIGlmICghY2FsbGJhY2suY2FsbGJhY2sob2JqZWN0U3RvcmVEYXRhSWQsIHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCA3YWJi
MTAyZGIwYWI3NjBmZTc0NmI4YTFkMzY4NTI5ODhjYmI3ZGM4Li5mNGJhNDc4Njk3YTlhYTQzZmM1
ZTdmZjkzZDE3MTQ2YWYxMWI3YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2lu
Z1N0b3JlLmgKQEAgLTMyLDE2ICszMiw0MyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDsKK2NsYXNzIElEQktleTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2lu
OwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNraW5n
U3RvcmU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGNyZWF0ZShTdHJpbmcgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgSURCQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIGZhY3Rv
cnkpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1
cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNpemUs
IGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwog
ICAgIH5JREJCYWNraW5nU3RvcmUoKTsKIAorICAgIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYg
Zm91bmRJZCk7CisgICAgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlk
Um93SWQpOworCisgICAgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBW
ZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVt
ZW50RmxhZ3MpOworICAgIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAgIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKworICAgIFN0cmluZyBnZXRPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAg
IGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlk
Um93SWQpOworICAgIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qgb2JqZWN0
U3RvcmVEYXRhSWQpOworICAgIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7CisgICAgYm9v
bCBjcmVhdGVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKTsK
KyAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCk7CisgICAgdm9pZCBjbGVhck9i
amVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgZG91YmxlIGF1dG9JbmNyZW1l
bnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIGdldEluZGV4ZXMoaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxi
b29sPiYgZm91bmRVbmlxdWVGbGFncyk7CisKKyAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZENh
bGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2soaW50
NjRfdCBvYmplY3RTdG9yZURhdGFJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOworICAgICAg
ICAgdmlydHVhbCB+T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjaygpIHt9OworICAgIH07CisgICAg
Ym9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrJik7CisKICAgICBTUUxpdGVEYXRhYmFzZSYgZGIoKSB7IHJl
dHVybiBtX2RiOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4YTg5MWRiNjNhYjMzM2ExY2RhOWVjZWE1
Y2FmMWQ2Y2IyNGQwM2VlLi45ZDM0MTFhYmYxYjgyNDAzMzU4ODQyN2U1NDc4ZjEyNDE0YTI5MmUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQu
aCIKLSNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTU5LDUyICs1Nyw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CiB9OwogCi1zdGF0aWMgYm9vbCBleHRyYWN0TWV0YURhdGEoU1FMaXRlRGF0
YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRW
ZXJzaW9uLCBpbnQ2NCYgZm91bmRJZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YWJhc2VR
dWVyeShzcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCBpZCwgdmVyc2lvbiBGUk9NIERhdGFiYXNlcyBX
SEVSRSBuYW1lID0gPyIpOwotICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBkYXRhYmFzZVF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOwotICAg
IGlmIChkYXRhYmFzZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGZvdW5kSWQgPSBkYXRhYmFzZVF1ZXJ5LmdldENvbHVtbkludDY0KDAp
OwotICAgIGZvdW5kVmVyc2lvbiA9IGRhdGFiYXNlUXVlcnkuZ2V0Q29sdW1uVGV4dCgxKTsKLQot
ICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBz
ZXRNZXRhRGF0YShTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKLXsKLSAgICBBU1NF
UlQoIW5hbWUuaXNOdWxsKCkpOwotICAgIEFTU0VSVCghdmVyc2lvbi5pc051bGwoKSk7Ci0KLSAg
ICBTdHJpbmcgc3FsID0gcm93SWQgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SW52YWxpZElk
ID8gIlVQREFURSBEYXRhYmFzZXMgU0VUIG5hbWUgPSA/LCB2ZXJzaW9uID0gPyBXSEVSRSBpZCA9
ID8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6ICJJTlNFUlQgSU5UTyBEYXRhYmFzZXMgKG5hbWUsIGRlc2NyaXB0aW9uLCB2ZXJz
aW9uKSBWQUxVRVMgKD8sICcnLCA/KSI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0
ZURhdGFiYXNlLCBzcWwpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBxdWVyeS5iaW5kVGV4dCgxLCBuYW1lKTsKLSAgICBxdWVyeS5iaW5kVGV4
dCgyLCB2ZXJzaW9uKTsKLSAgICBpZiAocm93SWQgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
SW52YWxpZElkKQotICAgICAgICBxdWVyeS5iaW5kSW50NjQoMywgcm93SWQpOwotCi0gICAgaWYg
KHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAocm93SWQgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SW52YWxpZElkKQotICAg
ICAgICByb3dJZCA9IHNxbGl0ZURhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQogICAgIDogbV9i
YWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICwgbV9pZChJbnZhbGlkSWQpCkBAIC0xMTcs
OSArNjksOSBAQCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogewogICAgIEFTU0VSVCghbV9uYW1l
LmlzTnVsbCgpKTsKIAotICAgIGJvb2wgc3VjY2VzcyA9IGV4dHJhY3RNZXRhRGF0YShtX2JhY2tp
bmdTdG9yZS0+ZGIoKSwgbV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOworICAgIGJvb2wgc3VjY2Vz
cyA9IG1fYmFja2luZ1N0b3JlLT5leHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUsIG1f
dmVyc2lvbiwgbV9pZCk7CiAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzID09ICht
X2lkICE9IEludmFsaWRJZCkpOwotICAgIGlmICghc2V0TWV0YURhdGEobV9iYWNraW5nU3RvcmUt
PmRiKCksIG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkKSkKKyAgICBpZiAoIW1fYmFja2luZ1N0b3Jl
LT5zZXRJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkLCBtX2lkID09
IEludmFsaWRJZCkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogTmVl
ZCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCiAgICAgbG9hZE9iamVjdFN0b3JlcygpOwogfQpAQCAt
MTY4LDIxICsxMjAsMTQgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+ICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3QKIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewotICAg
IFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQoZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksICJJTlNF
UlQgSU5UTyBPYmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCwgZGF0
YWJhc2VJZCkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOwotICAgIGlmIChpbnNlcnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGluc2VydC5iaW5kVGV4dCgxLCBvYmplY3RTdG9yZS0+bmFt
ZSgpKTsKLSAgICBpbnNlcnQuYmluZFRleHQoMiwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSk7Ci0g
ICAgaW5zZXJ0LmJpbmRJbnQoMywgc3RhdGljX2Nhc3Q8aW50PihvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpKSk7Ci0gICAgaW5zZXJ0LmJpbmRJbnQ2NCg0LCBkYXRhYmFzZS0+aWQoKSk7Ci0g
ICAgaWYgKGluc2VydC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZDsKKworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVP
YmplY3RTdG9yZShvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBv
YmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpLCBkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmVJ
ZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaW50NjRfdCBpZCA9IGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RJbnNl
cnRSb3dJRCgpOwotICAgIG9iamVjdFN0b3JlLT5zZXRJZChpZCk7CisKKyAgICBvYmplY3RTdG9y
ZS0+c2V0SWQob2JqZWN0U3RvcmVJZCk7CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFz
a0V2ZW50cygpOwogfQogCkBAIC0xOTEsMTYgKzEzNiw2IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9y
ZShjCiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChuYW1lKTsKIH0KIAotc3RhdGljIHZv
aWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3Qg
aWQpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KGRiLCBzcWwpOwotICAgIGJv
b2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGRl
bGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7Ci0gICAgb2sgPSBkZWxldGVRdWVyeS5zdGVwKCkg
PT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi19Ci0KIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0
b3Jlcy5nZXQobmFtZSk7CkBAIC0yMjAsMTEgKzE1NSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2Fj
dGlvCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKQogewotICAgIGRvRGVsZXRlKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAi
REVMRVRFIEZST00gT2JqZWN0U3RvcmVzIFdIRVJFIGlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgp
KTsKLSAgICBkb0RlbGV0ZShkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlLT5p
ZCgpKTsKLSAgICBkb0RlbGV0ZShkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBG
Uk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkIElOIChTRUxFQ1QgaWQgRlJPTSBJbmRleGVzIFdI
RVJFIG9iamVjdFN0b3JlSWQgPSA/KSIsIG9iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBkb0RlbGV0
ZShkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0KKyAgICBkYXRhYmFzZS0+
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5pZCgpKTsKICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKQEAgLTI1Myw3ICsx
ODQsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogewogICAgIGludDY0X3QgZGF0YWJhc2VJ
ZCA9IGRhdGFiYXNlLT5pZCgpOwogICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOwot
ICAgIGlmICghc2V0TWV0YURhdGEoZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kYigpLCBkYXRh
YmFzZS0+bV9uYW1lLCBkYXRhYmFzZS0+bV92ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAgIGlm
ICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5zZXRJREJEYXRhYmFzZU1ldGFEYXRhKGRhdGFi
YXNlLT5tX25hbWUsIGRhdGFiYXNlLT5tX3ZlcnNpb24sIGRhdGFiYXNlSWQsIGRhdGFiYXNlSWQg
PT0gSW52YWxpZElkKSkgewogICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ug
c3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkv
TyBlcnJvcnMuCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBk
YXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7
CkBAIC0yOTcsMjAgKzIyOCwxOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3Nl
KCkKIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKIHsK
LSAgICBTUUxpdGVTdGF0ZW1lbnQgb2JqZWN0U3RvcmVzUXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwg
IlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3Rv
cmVzIFdIRVJFIGRhdGFiYXNlSWQgPSA/Iik7Ci0gICAgYm9vbCBvayA9IG9iamVjdFN0b3Jlc1F1
ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/Ci0KLSAgICBvYmplY3RTdG9yZXNRdWVy
eS5iaW5kSW50NjQoMSwgbV9pZCk7Ci0KLSAgICB3aGlsZSAob2JqZWN0U3RvcmVzUXVlcnkuc3Rl
cCgpID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBpbnQ2NF90IGlkID0gb2JqZWN0U3RvcmVz
UXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gb2JqZWN0U3Rv
cmVzUXVlcnkuZ2V0Q29sdW1uVGV4dCgxKTsKLSAgICAgICAgU3RyaW5nIGtleVBhdGggPSBvYmpl
Y3RTdG9yZXNRdWVyeS5nZXRDb2x1bW5UZXh0KDIpOwotICAgICAgICBib29sIGF1dG9JbmNyZW1l
bnQgPSAhIW9iamVjdFN0b3Jlc1F1ZXJ5LmdldENvbHVtbkludCgzKTsKLQotICAgICAgICBtX29i
amVjdFN0b3Jlcy5zZXQobmFtZSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLmdldCgpLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwot
ICAgIH0KKyAgICBWZWN0b3I8aW50NjRfdD4gaWRzOworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVz
OworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhzOworICAgIFZlY3Rvcjxib29sPiBhdXRvSW5j
cmVtZW50RmxhZ3M7CisgICAgbV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlcyhtX2lkLCBp
ZHMsIG5hbWVzLCBrZXlQYXRocywgYXV0b0luY3JlbWVudEZsYWdzKTsKKworICAgIEFTU0VSVChu
YW1lcy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKGtleVBhdGhzLnNpemUoKSA9
PSBpZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoYXV0b0luY3JlbWVudEZsYWdzLnNpemUoKSA9PSBp
ZHMuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsr
KQorICAgICAgICBtX29iamVjdFN0b3Jlcy5zZXQobmFtZXNbaV0sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgaWRzW2ldLCBuYW1lc1tpXSwg
a2V5UGF0aHNbaV0sIGF1dG9JbmNyZW1lbnRGbGFnc1tpXSkpOwogfQogCiB2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCAyOGZl
YzU1MDdjZTYwNThmM2IzYjUyODkyMGM1M2ZmMmM5YmRjMzM5Li5jYjZjMzFhNjY2MmRhZjljYTEz
YmYzY2EzMmRmMDQxOTU1MjUyOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zMCwxMyArMzAsMTAgQEAKICNpbmNsdWRlICJJ
REJGYWN0b3J5QmFja2VuZEltcGwuaCIKIAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotI2luY2x1
ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC00NSwxMSArNDIsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1JREJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZhY3RvcnlCYWNrZW5k
SW1wbCgpIAorSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZEltcGwoKQog
ICAgIDogbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OmNyZWF0ZSgpKQogewogfQotIAorCiBJREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5
QmFja2VuZEltcGwoKQogewogfQpAQCAtNjAsMTUxICs1NywxNiBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVl
SWRlbnRpZgogICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVy
KTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9y
ZShjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZU1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gb3BlblNRTGl0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5
KQotewotICAgIFN0cmluZyBwYXRoID0gIjptZW1vcnk6IjsKLSAgICBpZiAoIXBhdGhCYXNlLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhbnkgb3RoZXIgdGhpbmcgd2UgY291bGQg
cG9zc2libHkgZG8gdG8gcmVjb3ZlciBhdCB0aGlzIHBvaW50PyBJZiBzbywgZG8gaXQgcmF0aGVy
IHRoYW4ganVzdCBlcnJvcmluZyBvdXQuCi0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQg
dG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5k
YXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiIik7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpjcmVhdGUo
ZmlsZUlkZW50aWZpZXIsIGZhY3RvcnkpOwotICAgIGlmICghYmFja2luZ1N0b3JlLT5kYigpLm9w
ZW4ocGF0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3
ZSBjb3VsZCBwb3NzaWJseSBkbyB0byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBp
dCByYXRoZXIgdGhhbiBqdXN0IGVycm9yaW5nIG91dC4KLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxlICVzIGZvciBJbmRleGVkREIiLCBwYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRXJyb3Ig
Y2hlY2tpbmc/Ci0gICAgYmFja2luZ1N0b3JlLT5kYigpLnNldE1heGltdW1TaXplKG1heGltdW1T
aXplKTsKLSAgICBiYWNraW5nU3RvcmUtPmRiKCkudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVt
KCk7Ci0KLSAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIGJv
b2wgcnVuQ29tbWFuZHMoU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlLCBjb25zdCBjaGFy
KiogY29tbWFuZHMsIHNpemVfdCBudW1iZXJPZkNvbW1hbmRzKQotewotICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKHNxbGl0ZURhdGFiYXNlLCBmYWxzZSk7Ci0gICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ29tbWFuZHM7
ICsraSkgewotICAgICAgICBpZiAoIXNxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNvbW1h
bmRzW2ldKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcnVuIHRoZSBmb2xs
b3dpbmcgY29tbWFuZCBmb3IgSW5kZXhlZERCOiAlcyIsIGNvbW1hbmRzW2ldKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgY3JlYXRlVGFibGVzKFNR
TGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSkKLXsKLSAgICBpZiAoc3FsaXRlRGF0YWJhc2Uu
dGFibGVFeGlzdHMoIkRhdGFiYXNlcyIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogY29tbWFuZHNbXSA9IHsKLSAgICAgICAgIkNSRUFURSBUQUJMRSBEYXRh
YmFzZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCBOT1QgTlVMTCwgZGVzY3Jp
cHRpb24gVEVYVCBOT1QgTlVMTCwgdmVyc2lvbiBURVhUIE5PVCBOVUxMKSIsCi0gICAgICAgICJD
UkVBVEUgVU5JUVVFIElOREVYIERhdGFiYXNlc19uYW1lIE9OIERhdGFiYXNlcyhuYW1lKSIsCi0K
LSAgICAgICAgIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVksIG5hbWUgVEVYVCBOT1QgTlVMTCwga2V5UGF0aCBURVhULCBkb0F1dG9JbmNyZW1lbnQgSU5U
RUdFUiBOT1QgTlVMTCwgZGF0YWJhc2VJZCBJTlRFR0VSIE5PVCBOVUxMIFJFRkVSRU5DRVMgRGF0
YWJhc2VzKGlkKSkiLAotICAgICAgICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZXNf
Y29tcG9zaXQgT04gT2JqZWN0U3RvcmVzKGRhdGFiYXNlSWQsIG5hbWUpIiwKLQotICAgICAgICAi
Q1JFQVRFIFRBQkxFIEluZGV4ZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG9iamVjdFN0b3Jl
SWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlKGlkKSwgbmFtZSBURVhU
IE5PVCBOVUxMLCBrZXlQYXRoIFRFWFQsIGlzVW5pcXVlIElOVEVHRVIgTk9UIE5VTEwpIiwKLSAg
ICAgICAgIkNSRUFURSBVTklRVUUgSU5ERVggSW5kZXhlc19jb21wb3NpdCBPTiBJbmRleGVzKG9i
amVjdFN0b3JlSWQsIG5hbWUpIiwKLQotICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0b3Jl
RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBO
VUxMIFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBJ
TlRFR0VSLCBrZXlOdW1iZXIgSU5URUdFUiwgdmFsdWUgVEVYVCBOT1QgTlVMTCkiLAotICAgICAg
ICAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBPYmplY3RTdG9yZURhdGFfY29tcG9zaXQgT04gT2JqZWN0
U3RvcmVEYXRhKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBvYmplY3RTdG9yZUlkKSIs
Ci0KLSAgICAgICAgIkNSRUFURSBUQUJMRSBJbmRleERhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVksIGluZGV4SWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIEluZGV4ZXMoaWQpLCBrZXlT
dHJpbmcgVEVYVCwga2V5RGF0ZSBJTlRFR0VSLCBrZXlOdW1iZXIgSU5URUdFUiwgb2JqZWN0U3Rv
cmVEYXRhSWQgSU5URUdFUiBOT1QgTlVMTCBSRUZFUkVOQ0VTIE9iamVjdFN0b3JlRGF0YShpZCkp
IiwKLSAgICAgICAgIkNSRUFURSBJTkRFWCBJbmRleERhdGFfY29tcG9zaXQgT04gSW5kZXhEYXRh
KGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkKSIsCi0gICAgICAgICJDUkVB
VEUgSU5ERVggSW5kZXhEYXRhX29iamVjdFN0b3JlRGF0YUlkIE9OIEluZGV4RGF0YShvYmplY3RT
dG9yZURhdGFJZCkiLAotICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9pbmRleElkIE9O
IEluZGV4RGF0YShpbmRleElkKSIsCi0gICAgICAgIH07Ci0KLSAgICByZXR1cm4gcnVuQ29tbWFu
ZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNv
bW1hbmRzWzBdKSk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZU1ldGFEYXRhVGFibGUoU1FMaXRl
RGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmFk
ZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkJhY2tp
bmdTdG9yZSogYmFja2luZ1N0b3JlKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5k
c1tdID0gewotICAgICAgICAiQ1JFQVRFIFRBQkxFIE1ldGFEYXRhIChuYW1lIFRFWFQgUFJJTUFS
WSBLRVksIHZhbHVlIE5PTkUpIiwKLSAgICAgICAgIklOU0VSVCBJTlRPIE1ldGFEYXRhIFZBTFVF
UyAoJ3ZlcnNpb24nLCAxKSIsCi0gICAgfTsKLQotICAgIHJldHVybiBydW5Db21tYW5kcyhzcWxp
dGVEYXRhYmFzZSwgY29tbWFuZHMsIHNpemVvZihjb21tYW5kcykgLyBzaXplb2YoY29tbWFuZHNb
MF0pKTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50
aWZpZXIpKTsKKyAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgYmFj
a2luZ1N0b3JlKTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0RGF0YWJhc2VWZXJzaW9uKFNRTGl0ZURh
dGFiYXNlJiBzcWxpdGVEYXRhYmFzZSwgaW50KiBkYXRhYmFzZVZlcnNpb24pCi17Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlLCAiU0VMRUNUIHZhbHVlIEZST00gTWV0
YURhdGEgV0hFUkUgbmFtZSA9ICd2ZXJzaW9uJyIpOwotICAgIGlmIChxdWVyeS5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2sgfHwgcXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgKmRhdGFiYXNlVmVyc2lvbiA9IHF1ZXJ5LmdldENvbHVtbklu
dCgwKTsKLSAgICByZXR1cm4gcXVlcnkuZmluYWxpemUoKSA9PSBTUUxSZXN1bHRPazsKLX0KLQot
c3RhdGljIGJvb2wgbWlncmF0ZURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFz
ZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNraW5nU3RvcmUoY29u
c3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQogewotICAgIGlmICghc3FsaXRlRGF0YWJhc2Uu
dGFibGVFeGlzdHMoIk1ldGFEYXRhIikpIHsKLSAgICAgICAgaWYgKCFjcmVhdGVNZXRhRGF0YVRh
YmxlKHNxbGl0ZURhdGFiYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpbnQgZGF0YWJhc2VWZXJzaW9uOwotICAgIGlmICghZ2V0RGF0YWJhc2VWZXJzaW9uKHNx
bGl0ZURhdGFiYXNlLCAmZGF0YWJhc2VWZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGRhdGFiYXNlVmVyc2lvbiA9PSAxKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb21tYW5kc1tdID0gewotICAgICAgICAgICAgIkRST1AgVEFCTEUgSUYgRVhJU1RTIE9i
amVjdFN0b3JlRGF0YTIiLAotICAgICAgICAgICAgIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZURh
dGEyIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBvYmplY3RTdG9yZUlkIElOVEVHRVIgTk9UIE5V
TEwgUkVGRVJFTkNFUyBPYmplY3RTdG9yZShpZCksIGtleVN0cmluZyBURVhULCBrZXlEYXRlIFJF
QUwsIGtleU51bWJlciBSRUFMLCB2YWx1ZSBURVhUIE5PVCBOVUxMKSIsCi0gICAgICAgICAgICAi
SU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhMiBTRUxFQ1QgKiBGUk9NIE9iamVjdFN0b3JlRGF0
YSIsCi0gICAgICAgICAgICAiRFJPUCBUQUJMRSBPYmplY3RTdG9yZURhdGEiLCAvLyBUaGlzIGRl
cGVuZHMgb24gU1FMaXRlIG5vdCBlbmZvcmNpbmcgcmVmZXJlbnRpYWwgY29uc2lzdGVuY3kuCi0g
ICAgICAgICAgICAiQUxURVIgVEFCTEUgT2JqZWN0U3RvcmVEYXRhMiBSRU5BTUUgVE8gT2JqZWN0
U3RvcmVEYXRhIiwKLSAgICAgICAgICAgICJDUkVBVEUgVU5JUVVFIElOREVYIE9iamVjdFN0b3Jl
RGF0YV9jb21wb3NpdCBPTiBPYmplY3RTdG9yZURhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlO
dW1iZXIsIG9iamVjdFN0b3JlSWQpIiwKLSAgICAgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNU
UyBJbmRleERhdGEyIiwgLy8gVGhpcyBkZXBlbmRzIG9uIFNRTGl0ZSBub3QgZW5mb3JjaW5nIHJl
ZmVyZW50aWFsIGNvbnNpc3RlbmN5LgotICAgICAgICAgICAgIkNSRUFURSBUQUJMRSBJbmRleERh
dGEyIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBpbmRleElkIElOVEVHRVIgTk9UIE5VTEwgUkVG
RVJFTkNFUyBJbmRleGVzKGlkKSwga2V5U3RyaW5nIFRFWFQsIGtleURhdGUgUkVBTCwga2V5TnVt
YmVyIFJFQUwsIG9iamVjdFN0b3JlRGF0YUlkIElOVEVHRVIgTk9UIE5VTEwgUkVGRVJFTkNFUyBP
YmplY3RTdG9yZURhdGEoaWQpKSIsCi0gICAgICAgICAgICAiSU5TRVJUIElOVE8gSW5kZXhEYXRh
MiBTRUxFQ1QgKiBGUk9NIEluZGV4RGF0YSIsCi0gICAgICAgICAgICAiRFJPUCBUQUJMRSBJbmRl
eERhdGEiLAotICAgICAgICAgICAgIkFMVEVSIFRBQkxFIEluZGV4RGF0YTIgUkVOQU1FIFRPIElu
ZGV4RGF0YSIsCi0gICAgICAgICAgICAiQ1JFQVRFIElOREVYIEluZGV4RGF0YV9jb21wb3NpdCBP
TiBJbmRleERhdGEoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIGluZGV4SWQpIiwKLSAg
ICAgICAgICAgICJDUkVBVEUgSU5ERVggSW5kZXhEYXRhX29iamVjdFN0b3JlRGF0YUlkIE9OIElu
ZGV4RGF0YShvYmplY3RTdG9yZURhdGFJZCkiLAotICAgICAgICAgICAgIkNSRUFURSBJTkRFWCBJ
bmRleERhdGFfaW5kZXhJZCBPTiBJbmRleERhdGEoaW5kZXhJZCkiLAotICAgICAgICAgICAgIlVQ
REFURSBNZXRhRGF0YSBTRVQgdmFsdWUgPSAyIFdIRVJFIG5hbWUgPSAndmVyc2lvbiciLAotICAg
ICAgICB9OwotCi0gICAgICAgIGlmICghcnVuQ29tbWFuZHMoc3FsaXRlRGF0YWJhc2UsIGNvbW1h
bmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZGF0YWJhc2VWZXJzaW9uID0gMjsKLSAgICB9Ci0K
LSAgICBpZiAoZGF0YWJhc2VWZXJzaW9uID09IDIpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBt
YWtlIHRoZSBPYmplY3RTdG9yZURhdGEudmFsdWUgYmUgYSBCTE9CIGluc3RlYWQgb2YgVEVYVC4K
LSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICAgICAi
RFJPUCBUQUJMRSBJRiBFWElTVFMgT2JqZWN0U3RvcmVEYXRhIiwgLy8gVGhpcyBkcm9wcyBhc3Nv
Y2lhdGVkIGluZGljZXMuCi0gICAgICAgICAgICAiQ1JFQVRFIFRBQkxFIE9iamVjdFN0b3JlRGF0
YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgb2JqZWN0U3RvcmVJZCBJTlRFR0VSIE5PVCBOVUxM
IFJFRkVSRU5DRVMgT2JqZWN0U3RvcmUoaWQpLCBrZXlTdHJpbmcgVEVYVCwga2V5RGF0ZSBSRUFM
LCBrZXlOdW1iZXIgUkVBTCwgdmFsdWUgQkxPQiBOT1QgTlVMTCkiLAotICAgICAgICAgICAgIkNS
RUFURSBVTklRVUUgSU5ERVggT2JqZWN0U3RvcmVEYXRhX2NvbXBvc2l0IE9OIE9iamVjdFN0b3Jl
RGF0YShrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgb2JqZWN0U3RvcmVJZCkiLAotICAg
ICAgICAgICAgIlVQREFURSBNZXRhRGF0YSBTRVQgdmFsdWUgPSAzIFdIRVJFIG5hbWUgPSAndmVy
c2lvbiciLAotICAgICAgICB9OwotCi0gICAgICAgIGlmICghcnVuQ29tbWFuZHMoc3FsaXRlRGF0
YWJhc2UsIGNvbW1hbmRzLCBzaXplb2YoY29tbWFuZHMpIC8gc2l6ZW9mKGNvbW1hbmRzWzBdKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZGF0YWJhc2VWZXJzaW9uID0g
MzsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVN
YXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOworICAgIG1fYmFja2luZ1N0b3JlTWFwLnJl
bW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUpCkBAIC0yMjUsMTQgKzg3
LDExIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdT
dG9yZU1hcC5lbmQoKSkKICAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT5zZWNvbmQ7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGJhY2tpbmdTdG9yZSA9IG9wZW5TUUxpdGVEYXRhYmFzZShzZWN1cml0
eU9yaWdpbi5nZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUsIGZpbGVJZGVudGlmaWVyLCB0aGlz
KTsKLQotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSB8fCAhY3JlYXRlVGFibGVzKGJhY2tpbmdT
dG9yZS0+ZGIoKSkgfHwgIW1pZ3JhdGVEYXRhYmFzZShiYWNraW5nU3RvcmUtPmRiKCkpKSB7Cisg
ICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdp
bi5nZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUsIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKKyAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwotICAgICAgICAgICAgbV9iYWNraW5nU3RvcmVNYXAu
c2V0KGZpbGVJZGVudGlmaWVyLCAwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJhY2tpbmdTdG9y
ZS5nZXQoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNr
aW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5p
cXVlSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuaAppbmRleCAzN2U2YTljYWNiMDAzOWU3ZDQwZGQ0NDZkZDQ0MDQxNzBkNGY2ZTVk
Li4wNzFiY2Y4ZGE2MTBkZjVlZTc4N2I5MzVjZWVmMmE4ODdmYTYxMDU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTUyLDYgKzUyLDcg
QEAgcHVibGljOgogCiAgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCiAg
ICAgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIHVuaXF1
ZUlkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSopOwogICAgIHZvaWQgcmVtb3ZlSURCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBp
bnQ2NF90IG1heGltdW1TaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGEyMTQ2YTUyMWQyZmM2MzZiMTZlZTYy
MDIzZmUxMTBlNmYwNDEzZTcuLmIyMjk4ODVmNWI5NDkxZWYzZmZhZDFhOTg5NTgxZmQ4ODczYWY0
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcApAQCAtMTA0LDIyICsxMDQsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJD
YWwKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkob2JqZWN0U3RvcmUt
PnNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIs
IHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsK
LSAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwotICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KLQotICAg
IGJpbmRXaGVyZUNsYXVzZShxdWVyeSwgb2JqZWN0U3RvcmUtPmlkKCksIGtleS5nZXQoKSk7Ci0g
ICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICBTdHJpbmcgd2lyZURh
dGEgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlUmVjb3JkKG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5KTsKKyAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKICAg
ICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmlu
ZWRWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVCgoa2V5LT50
eXBlKCkgPT0gSURCS2V5OjpTdHJpbmdUeXBlKSAhPSBxdWVyeS5pc0NvbHVtbk51bGwoMCkpOwot
ICAgIEFTU0VSVCgoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpEYXRlVHlwZSkgIT0gcXVlcnkuaXND
b2x1bW5OdWxsKDEpKTsKLSAgICBBU1NFUlQoKGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVy
VHlwZSkgIT0gcXVlcnkuaXNDb2x1bW5OdWxsKDIpKTsKLQotICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUocXVlcnkuZ2V0Q29sdW1u
QmxvYkFzU3RyaW5nKDMpKSk7Ci0gICAgQVNTRVJUKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRS
b3cpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBm
ZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCkKQEAgLTEzOSw1MSArMTMwLDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVmUHRyPElEQktl
eT4KICAgICByZXR1cm4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2Vy
aWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwogfQogCi1zdGF0aWMgYm9vbCBwdXRP
YmplY3RTdG9yZURhdGEoU1FMaXRlRGF0YWJhc2UmIGRiLCBJREJLZXkqIGtleSwgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiB2YWx1ZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBkYXRh
Um93SWQpCi17Ci0gICAgU3RyaW5nIHNxbCA9IGRhdGFSb3dJZCAhPSBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpJbnZhbGlkSWQgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3Ry
aW5nID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9
ID8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlTdHJpbmcs
IGtleURhdGUsIGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0b3JlSWQpIFZBTFVFUyAoPywgPywg
PywgPywgPykiOwotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShkYiwgc3FsKTsKLSAgICBpZiAo
cXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAga2V5LT5iaW5kV2l0aE51bGxzKHF1ZXJ5LCAxKTsKLSAgICBxdWVyeS5iaW5kQmxvYig0LCB2
YWx1ZS0+dG9XaXJlU3RyaW5nKCkpOwotICAgIGlmIChkYXRhUm93SWQgIT0gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6SW52YWxpZElkKQotICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgZGF0YVJv
d0lkKTsKLSAgICBlbHNlCi0gICAgICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBvYmplY3RTdG9yZUlk
KTsKLQotICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGRhdGFSb3dJZCA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpJbnZhbGlkSWQpCi0gICAgICAgIGRhdGFSb3dJZCA9IGRiLmxhc3RJbnNlcnRSb3dJRCgpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRlbGV0ZUluZGV4RGF0YShTUUxp
dGVEYXRhYmFzZSYgZGIsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpCi17Ci0gICAgU1FMaXRl
U3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KGRiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9i
amVjdFN0b3JlRGF0YUlkID0gPyIpOwotICAgIGlmIChkZWxldGVRdWVyeS5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWxldGVRdWVyeS5iaW5k
SW50NjQoMSwgb2JqZWN0U3RvcmVEYXRhSWQpOwotCi0gICAgcmV0dXJuIGRlbGV0ZVF1ZXJ5LnN0
ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotfQotCi1zdGF0aWMgYm9vbCBwdXRJbmRleERhdGEoU1FM
aXRlRGF0YWJhc2UmIGRiLCBJREJLZXkqIGtleSwgaW50NjRfdCBpbmRleElkLCBpbnQ2NF90IG9i
amVjdFN0b3JlRGF0YUlkKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBwdXRRdWVyeShkYiwgIklO
U0VSVCBJTlRPIEluZGV4RGF0YSAoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIGluZGV4
SWQsIG9iamVjdFN0b3JlRGF0YUlkKSBWQUxVRVMgKD8sID8sID8sID8sID8pIik7Ci0gICAgaWYg
KHB1dFF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGtleS0+YmluZFdpdGhOdWxscyhwdXRRdWVyeSwgMSk7Ci0gICAgcHV0UXVlcnkuYmlu
ZEludDY0KDQsIGluZGV4SWQpOwotICAgIHB1dFF1ZXJ5LmJpbmRJbnQ2NCg1LCBvYmplY3RTdG9y
ZURhdGFJZCk7Ci0KLSAgICByZXR1cm4gcHV0UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7
Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAodHJhbnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKSB7CkBAIC0zMDksMTQgKzI1NSwxNCBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24u
ICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBl
cnJvci4KIAogICAgIGludDY0X3QgZGF0YVJvd0lkID0gaXNFeGlzdGluZ1ZhbHVlID8gZ2V0UXVl
cnkuZ2V0Q29sdW1uSW50KDApIDogSW52YWxpZElkOwotICAgIGlmICghcHV0T2JqZWN0U3RvcmVE
YXRhKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCBrZXkuZ2V0KCksIHZhbHVlLmdldCgp
LCBvYmplY3RTdG9yZS0+aWQoKSwgZGF0YVJvd0lkKSkgeworICAgIGlmICghb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+aWQoKSwg
KmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCBkYXRhUm93SWQsIGRhdGFSb3dJZCA9PSBJbnZh
bGlkSWQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZp
Y2F0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9y
cy4KICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8g
c3RhYmxlIHN0b3JhZ2UuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZGVsZXRlSW5kZXhEYXRhKG9iamVjdFN0b3Jl
LT5zcWxpdGVEYXRhYmFzZSgpLCBkYXRhUm93SWQpKSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChkYXRhUm93SWQpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMg
bm90IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3Jh
Z2UuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKQEAgLTMyNyw3ICsyNzMsNyBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0LCArK2kpIHsKICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNW
YWxpZElkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMg
YmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KLSAg
ICAgICAgaWYgKCFwdXRJbmRleERhdGEob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksIGlu
ZGV4S2V5c1tpXS5nZXQoKSwgaXQtPnNlY29uZC0+aWQoKSwgZGF0YVJvd0lkKSkgeworICAgICAg
ICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KGl0LT5zZWNvbmQtPmlkKCksICppbmRleEtleXNbaV0sIGRhdGFSb3dJZCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90
IGhhdmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KICAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9y
YWdlLiIpKTsKICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwpAQCAtNDAxLDM5ICsz
NDcsNDUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogfQogCi1zdGF0aWMgdm9pZCBkb0RlbGV0ZShT
UUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKLXsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgZGVsZXRlUXVlcnkoZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IGRlbGV0
ZVF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgZGVsZXRlUXVlcnkuYmlu
ZEludDY0KDEsIGlkKTsKLSAgICBvayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRE
b25lOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBo
YW5kbGluZy4KLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogewotICAgIGRvRGVsZXRlKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRF
IEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0b3JlRGF0YUlkIElOIChTRUxFQ1QgaWQgRlJP
TSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmUt
PmlkKCkpOwotICAgIGRvRGVsZXRlKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVM
RVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0
U3RvcmUtPmlkKCkpOwotCisgICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jbGVhck9i
amVjdFN0b3JlKG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCi1zdGF0aWMgYm9v
bCBwb3B1bGF0ZUluZGV4KFNRTGl0ZURhdGFiYXNlJiBkYiwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQYXRoKQotewotICAgIFNR
TGl0ZVN0YXRlbWVudCBzZWxlY3QoZGIsICJTRUxFQ1QgaWQsIHZhbHVlIEZST00gT2JqZWN0U3Rv
cmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iik7Ci0gICAgaWYgKHNlbGVjdC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKK25hbWVzcGFjZSB7Citj
bGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJh
Y2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQ
YXRoLCBpbnQ2NF90IGluZGV4SWQpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0
b3JlKQorICAgICAgICAsIG1faW5kZXhLZXlQYXRoKGluZGV4S2V5UGF0aCkKKyAgICAgICAgLCBt
X2luZGV4SWQoaW5kZXhJZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNhbGxi
YWNrKGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOworICAgICAgICBSZWZQ
dHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0
KCksIG1faW5kZXhLZXlQYXRoKTsKIAotICAgIHNlbGVjdC5iaW5kSW50NjQoMSwgb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgd2hpbGUgKHNlbGVjdC5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAg
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQgPSBzZWxlY3QuZ2V0Q29sdW1uSW50NjQoMCk7
Ci0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShzZWxlY3QuZ2V0Q29sdW1uQmxvYkFz
U3RyaW5nKDEpKTsKLSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZy
b21LZXlQYXRoKG9iamVjdFZhbHVlLmdldCgpLCBpbmRleEtleVBhdGgpOwotICAgICAgICBpZiAo
IXB1dEluZGV4RGF0YShkYiwgaW5kZXhLZXkuZ2V0KCksIGluZGV4SWQsIG9iamVjdFN0b3JlRGF0
YUlkKSkKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQo
bV9pbmRleElkLCAqaW5kZXhLZXksIG9iamVjdFN0b3JlRGF0YUlkKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKK3ByaXZhdGU6Cisg
ICAgSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBTdHJpbmcmIG1f
aW5kZXhLZXlQYXRoOworICAgIGludDY0X3QgbV9pbmRleElkOworfTsKK30KKworc3RhdGljIGJv
b2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQYXRo
KQoreworICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGlu
ZGV4S2V5UGF0aCwgaW5kZXhJZCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUuZm9yRWFjaE9iamVj
dFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NjUsMjMgKzQxNywxNSBAQCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y3JlYXRlSW5kZXgoY29ucwogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0
ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0KG9iamVjdFN0b3Jl
LT5zcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gSW5kZXhlcyAob2JqZWN0U3RvcmVJZCwg
bmFtZSwga2V5UGF0aCwgaXNVbmlxdWUpIFZBTFVFUyAoPywgPywgPywgPykiKTsKLSAgICBpZiAo
aW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgIGludDY0X3QgaWQ7CisgICAg
aWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9iamVjdFN0b3Jl
LT5tX2lkLCBpbmRleC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCks
IGlkKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpbnNlcnQuYmluZEludDY0KDEsIG9iamVjdFN0b3JlLT5tX2lkKTsKLSAgICBp
bnNlcnQuYmluZFRleHQoMiwgaW5kZXgtPm5hbWUoKSk7Ci0gICAgaW5zZXJ0LmJpbmRUZXh0KDMs
IGluZGV4LT5rZXlQYXRoKCkpOwotICAgIGluc2VydC5iaW5kSW50KDQsIHN0YXRpY19jYXN0PGlu
dD4oaW5kZXgtPnVuaXF1ZSgpKSk7Ci0gICAgaWYgKGluc2VydC5zdGVwKCkgIT0gU1FMUmVzdWx0
RG9uZSkgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbnQ2NF90IGlkID0gb2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCkubGFz
dEluc2VydFJvd0lEKCk7CisKICAgICBpbmRleC0+c2V0SWQoaWQpOwogCi0gICAgaWYgKCFwb3B1
bGF0ZUluZGV4KG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCBvYmplY3RTdG9yZS0+bV9p
ZCwgaWQsIGluZGV4LT5rZXlQYXRoKCkpKSB7CisgICAgaWYgKCFwb3B1bGF0ZUluZGV4KCpvYmpl
Y3RTdG9yZS0+bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlLT5tX2lkLCBpZCwgaW5kZXgtPmtl
eVBhdGgoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC01MjQsOSArNDY4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmEKIAog
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0g
ICAgZG9EZWxldGUob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJ
bmRleGVzIFdIRVJFIGlkID0gPyIsIGluZGV4LT5pZCgpKTsKLSAgICBkb0RlbGV0ZShvYmplY3RT
dG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRl
eElkID0gPyIsIGluZGV4LT5pZCgpKTsKLQorICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlSW5kZXgoaW5kZXgtPmlkKCkpOwogICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0
ZVRhc2tFdmVudHMoKTsKIH0KIApAQCAtNTgxLDIwICs1MjMsMTggQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3MKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygp
CiB7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGluZGV4UXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNF
TEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgaXNVbmlxdWUgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVj
dFN0b3JlSWQgPSA/Iik7Ci0gICAgYm9vbCBvayA9IGluZGV4UXVlcnkucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZz8KLQotICAgIGluZGV4UXVlcnkuYmluZEludDY0KDEsIG1faWQpOworICAg
IFZlY3RvcjxpbnQ2NF90PiBpZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAgVmVj
dG9yPFN0cmluZz4ga2V5UGF0aHM7CisgICAgVmVjdG9yPGJvb2w+IHVuaXF1ZUZsYWdzOworICAg
IG1fYmFja2luZ1N0b3JlLT5nZXRJbmRleGVzKG1faWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCB1
bmlxdWVGbGFncyk7CiAKLSAgICB3aGlsZSAoaW5kZXhRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0
Um93KSB7Ci0gICAgICAgIGludDY0X3QgaWQgPSBpbmRleFF1ZXJ5LmdldENvbHVtbkludDY0KDAp
OwotICAgICAgICBTdHJpbmcgbmFtZSA9IGluZGV4UXVlcnkuZ2V0Q29sdW1uVGV4dCgxKTsKLSAg
ICAgICAgU3RyaW5nIGtleVBhdGggPSBpbmRleFF1ZXJ5LmdldENvbHVtblRleHQoMik7Ci0gICAg
ICAgIGJvb2wgdW5pcXVlID0gISFpbmRleFF1ZXJ5LmdldENvbHVtbkludCgzKTsKKyAgICBBU1NF
UlQobmFtZXMuc2l6ZSgpID09IGlkcy5zaXplKCkpOworICAgIEFTU0VSVChrZXlQYXRocy5zaXpl
KCkgPT0gaWRzLnNpemUoKSk7CisgICAgQVNTRVJUKHVuaXF1ZUZsYWdzLnNpemUoKSA9PSBpZHMu
c2l6ZSgpKTsKIAotICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIElEQkluZGV4QmFja2VuZElt
cGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgaWQsIG5hbWUsIG1fbmFtZSwga2V5UGF0
aCwgdW5pcXVlKSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUo
KTsgaSsrKQorICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWVzW2ldLCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIGlkc1tpXSwgbmFtZXNbaV0sIG1fbmFt
ZSwga2V5UGF0aHNbaV0sIHVuaXF1ZUZsYWdzW2ldKSk7CiB9CiAKIFNRTGl0ZURhdGFiYXNlJiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IApAQCAtNjIw
LDE5ICs1NjAsNyBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCiAgICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+
IDApCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnRO
dW1iZXIrKyk7CiAKLSAgICBTdHJpbmcgc3FsID0gIlNFTEVDVCBtYXgoa2V5TnVtYmVyKSArIDEg
RlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EIGtleVN0cmlu
ZyBJUyBOVUxMIEFORCBrZXlEYXRlIElTIE5VTEwiOwotCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KHNxbGl0ZURhdGFiYXNlKCksIHNxbCk7Ci0gICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUo
KSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBxdWVy
eS5iaW5kSW50NjQoMSwgaWQoKSk7Ci0KLSAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3Vs
dFJvdyB8fCBxdWVyeS5pc0NvbHVtbk51bGwoMCkpCi0gICAgICAgIG1fYXV0b0luY3JlbWVudE51
bWJlciA9IDE7Ci0gICAgZWxzZQotICAgICAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHF1ZXJ5LmdldENvbHVtbkRvdWJsZSgwKSk7Ci0KKyAgICBtX2F1dG9JbmNy
ZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fYmFja2luZ1N0b3JlLT5hdXRvSW5jcmVt
ZW50TnVtYmVyKGlkKCkpKTsKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRv
SW5jcmVtZW50TnVtYmVyKyspOwogfQogCg==
</data>
<flag name="review"
          id="75091"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>