<?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>226068</bug_id>
          
          <creation_ts>2021-05-20 23:10:43 -0700</creation_ts>
          <short_desc>Putting HashMap in a heap block hurts memory use, speed, code size</short_desc>
          <delta_ts>2021-05-23 23:10:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225840</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>226162</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jfernandez</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>rego</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762300</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-20 23:10:43 -0700</bug_when>
    <thetext>Putting HashMap in a heap block hurts memory use, speed, code size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762526</commentid>
    <comment_count>1</comment_count>
      <attachid>429326</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 12:51:13 -0700</bug_when>
    <thetext>Created attachment 429326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762528</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-21 12:52:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78323737&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762648</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 16:22:32 -0700</bug_when>
    <thetext>*** Bug 225984 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762765</commentid>
    <comment_count>4</comment_count>
      <attachid>429403</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 22:14:03 -0700</bug_when>
    <thetext>Created attachment 429403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762766</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-21 22:15:58 -0700</bug_when>
    <thetext>It’s possible that none of the memory savings here are enough to make a noticeable difference, but also possible that one of these might be common enough that we hit the jackpot. Might be less memory use or heap fragmentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763024</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 22:24:46 -0700</bug_when>
    <thetext>After studying test failures, I found one case that will be hard to do. I think I will make a first patch that does most of these in a separate bug and then come back to this bug later to finish the job.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429326</attachid>
            <date>2021-05-21 12:51:13 -0700</date>
            <delta_ts>2021-05-21 22:13:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226068-20210521125112.patch</filename>
            <type>text/plain</type>
            <size>281877</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2JjOGEyNmYyZWJmMDEwMjg2NTE1MzJkOGZmZjY4OGQ1MmVlMDc2Li45NzQxYzFjZjUxZjExOWQ5
NTAzZmQ1ZDM4ZDQwOTVmMjRmNTM1YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNl
LCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYwNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6
Ok9wYXF1ZUpTQ2xhc3MpOiBVcGRhdGUgc28gbV9zdGF0aWNWYWx1ZXMgYW5kCisgICAgICAgIG1f
c3RhdGljRnVuY3Rpb25zIGFyZSBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0ci4KKyAgICAgICAg
KE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKTogRGl0dG8uCisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6IERpdHRvLgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6c3RhdGljVmFsdWVzKTogRGl0dG8uCisgICAgICAgIChPcGFx
dWVKU0NsYXNzOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5oOiBEaXR0by4KKworICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyk6IFVwZGF0ZSBzbyBt
X2xhcmdlSW5kaWNlcworICAgICAgICBpcyBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0ci4KKyAg
ICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmg6IERpdHRvLgorCisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6
IFVwZGF0ZSB0byBub3QgcmV0dXJuCisgICAgICAgIGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKEpT
Qzo6SGVhcDo6b2JqZWN0VHlwZUNvdW50cyk6IERpdHRvLgorICAgICAgICAoSlNDOjpIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMpOiBVcGRhdGUgc2luY2UgbV9tYXJrTGlzdFNldCBpcworICAgICAg
ICBubyBsb25nZXIgYSB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBEaXR0by4K
KyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IERpdHRvLgorCisgICAgICAgICogaGVhcC9I
ZWFwVXRpbC5oOgorICAgICAgICAoSlNDOjpIZWFwVXRpbDo6aXNQb2ludGVyR0NPYmplY3RKU0Nl
bGwpOiBSZW1vdmVkIGNoZWNrIHRvIHNlZQorICAgICAgICBpZiBhIHNldCBpcyBlbXB0eSBiZWZv
cmUgY2FsbGluZyBjb250YWlucyBvbiBpdC4gVGhhdCdzIHVubmVlZGVkCisgICAgICAgIGV4dHJh
IGNvZGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW9uVHJhY2tpbmcpOiBVcGRhdGUgc2lu
Y2UKKyAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCBpcyBub3cgdXNpbmcgT3B0aW9uYWwg
aW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDogRGl0
dG8uCisKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIG1fdGVtcGxhdGVPYmplY3RNYXAgaXMgbm8gbG9uZ2VyIGEgdW5pcXVlX3B0
ci4KKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmg6IERpdHRvLgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25F
eGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOiBEaXR0by4KKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAgICAgICAgKiBydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0by4K
KyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogRGl0dG8u
CisgICAgICAgICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAgICAgICAg
KiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVj
dXRhYmxlOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6IENhbGwgdGhlIG5ldworICAgICAgICB0ZW1w
bGF0ZU9iamVjdE1hcCBpbnN0ZWFkIG9mIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwLgorICAgICAg
ICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp0ZW1wbGF0ZU9iamVjdE1h
cCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCBhbmQgZ290
IHJpZCBvZiB0aGUgVk0gYXJndW1lbnQuCisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmg6IERpdHRvLgorCiAyMDIxLTA1LTIxICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBl
cmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIGxhdGUt
aXNoIE1heSAyMDIxIGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZTAyZWRiOGM3NzEwNzRiMWM0ZDc2MmJkMGQ0ZGU3
MDBiNmZlZTM0Ni4uOWZhODUxYmE0MjM4M2JlZDMzNWJiYzc2N2RkOGIxZTQwNzRjNzBjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNCBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1v
cnkgdXNlLCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjYwNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBIYXNoTWFwLCBIYXNoU2V0LCBIYXNoQ291bnRlZFNldCwgTGlzdEhh
c2hTZXQsIGFuZCBXZWFrSGFzaFNldCBhbGwKKyAgICAgICAgY29udGFpbiBvbmx5IGEgc2luZ2xl
IHBvaW50ZXIgaW4gcHJvZHVjdGlvbiBidWlsZHMuIFB1dHRpbmcgb25lIGludG8KKyAgICAgICAg
YSBibG9jayBvbiB0aGUgaGVhcCBjb3N0cyBtZW1vcnkgKHRoZSBoZWFwIGJsb2NrKSwgc3BlZWQg
YW5kIGNvZGUgc2l6ZQorICAgICAgICAoY2hhc2luZyBvbmUgbW9yZSBwb2ludGVyLCBhZGRpdGlv
bmFsIG51bGwgY2hlY2tzKS4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRlZFNldC5oOiBSZW1v
dmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQuIFRoaXMgbWFrZXMgaXQKKyAgICAgICAgc28gaWYg
d2UgY2FsbCBtYWtlVW5pcXVlIHdlIHdpbGwgZ2V0IGEgY29tcGlsZSB0aW1lIGVycm9yLCB3aGlj
aCBjYW4KKyAgICAgICAgaGVscCByZW1pbmQgdXMgbm90IHRvIHB1dCB0aGlzIGludG8gYSBoZWFw
IGJsb2NrIGJ5IGl0c2VsZi4KKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOiBEaXR0by4KKyAgICAg
ICAgKiB3dGYvSGFzaFNldC5oOiBEaXR0by4KKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6IERp
dHRvLgorICAgICAgICAqIHd0Zi9MaXN0SGFzaFNldC5oOiBEaXR0by4KKyAgICAgICAgKiB3dGYv
V2Vha0hhc2hTZXQuaDogRGl0dG8uCisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgQ2hlY2tlZExvY2sgbW9yZSBpbiBjYXNlcyB3aGVy
ZSB3ZSB0cnktbG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVjZmQ2M2VkMDU1ZGMxYzc5YzllMDFlOWM3Yjdi
ZmJmMTE4NGZjZjEuLjRkZDFmOTU5MzExNzMyZTBmMzUxZDYxMzc4OTI2ZDFhNmZkNThlYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzNzMgQEAKKzIwMjEtMDUtMjEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBpbiBhIGhlYXAgYmxvY2sg
aHVydHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDbGVhcmVkKToK
KyAgICAgICAgU3RvcCB1c2luZyB1bmlxdWVfcHRyIGluIG1fb3JpZ2luYWxWYWx1ZXMgYW5kIG1f
Y2xlYXJlZEtleVZhbHVlTWFwcyBhbmQKKyAgICAgICAgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9m
IGEgS2V5VmFsdWVNYXAuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uOjpyZWNvcmRWYWx1ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0
KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uLmg6IERpdHRvLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmNvbnRhaW5zUmVjb3JkKTogU3RvcCB1c2luZworICAg
ICAgICB1bmlxdWVfcHRyIGZvciBtX2tleVZhbHVlU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpyZXBsYWNlS2V5VmFsdWVTdG9yZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRl
UmVjb3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVj
dFN0b3JlOjphZGRSZWNvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
TWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdSZWNvcmRzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjb3Vu
dEZvcktleVJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
Ok1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleSBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6dmFsdWVGb3JLZXlSYW5nZSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6bG93ZXN0S2V5V2l0aFJlY29yZEluUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDogRGl0dG8uCisK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9wZW5EYXRhYmFzZXMpOiBTdG9wIHVzaW5n
IHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLCBtX2JlaW5nQ3JlYXRl
ZCwgYW5kIG1fYmVpbmdEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjphZGRPcGVuRGF0YWJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y3JlYXRpbmdEYXRhYmFzZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZWNvcmREZWxldGluZ0RhdGFi
YXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmRvbmVEZWxl
dGluZ0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OmlzRGVsZXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
cmFja2VyOjpjYW5EZWxldGVPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMpOiBEaXR0by4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oOiBEaXR0by4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd1Byb3h5OjpXaW5kb3dQcm94eSk6IFN0b3AgdXNpbmcgVW5pcXVlUmVmIGZvcgor
ICAgICAgICBtX2pzV2luZG93UHJveGllcy4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5
Ojp+V2luZG93UHJveHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5Ojpk
ZXRhY2hGcm9tRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5Ojpk
ZXN0cm95SlNXaW5kb3dQcm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJv
eHk6OmNyZWF0ZUpTV2luZG93UHJveHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRv
d1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXNBc1ZlY3RvciBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6V2luZG93UHJveHk6OmNsZWFySlNXaW5kb3dQcm94aWVzTm90TWF0Y2hpbmdET01X
aW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5OjpzZXRET01XaW5k
b3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5OjphdHRhY2hEZWJ1Z2dl
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmpzV2luZG93UHJveGll
cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OnJlbGVhc2VK
U1dpbmRvd1Byb3hpZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5Ojpz
ZXRKU1dpbmRvd1Byb3hpZXMpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XaW5kb3dQ
cm94eS5oOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUpOiBVc2UgYSByZWZl
cmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIKKyAgICAgICAgZm9yIGNvdW50ZXJEaXJlY3RpdmVz
LgorCisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OndyYXBGb3JE
ZXByZWNhdGVkQ1NTT00pOgorICAgICAgICBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fY3Nz
b21WYWx1ZVdyYXBwZXJzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6ZGlkTXV0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVDU1NT
dHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg6IERpdHRvLgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleUNhY2hl
KTogVXNlIE9wdGlvbmFsIGluc3RlYWQgb2YKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgbV9hY2Nl
c3NLZXlDYWNoZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbnZhbGlkYXRlQWNjZXNz
S2V5Q2FjaGVTbG93Q2FzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondp
bGxCZVJlbW92ZWRGcm9tRnJhbWUpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9y
IG1fdG91Y2hFdmVudFRhcmdldHMgYW5kIG1fd2hlZWxFdmVudFRhcmdldHMuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRSZW1vdmVXaGVlbEV2ZW50SGFu
ZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndoZWVsRXZlbnRIYW5k
bGVyQ291bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRB
ZGRUb3VjaEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCBjb25zdCk6IERpdHRvLgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGRvbS9JZFRhcmdldE9i
c2VydmVyUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRUYXJnZXRPYnNlcnZlclJl
Z2lzdHJ5OjphZGRPYnNlcnZlcik6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3Ig
dGhlIHZhbHVlcyBpbiBtX3JlZ2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6SWRUYXJnZXRPYnNl
cnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnNlcnZlcnNJbnRlcm5hbCk6IERpdHRv
LgorICAgICAgICAqIGRvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaDogRGl0dG8uCisKKyAg
ICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRh
dGlvbk9ic2VydmVyOjpkZWxpdmVyKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvcgorICAgICAg
ICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zLgorICAgICAg
ICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om9ic2VydmVkU3VidHJlZU5vZGVXaWxs
RGV0YWNoKToKKyAgICAgICAgU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvciBtX3RyYW5zaWVudFJl
Z2lzdHJhdGlvbk5vZGVzLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpjcmVhdGVTYXZlZEZvcm1TdGF0ZU1h
cCk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBv
ZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OmZvcm1F
bGVtZW50c1N0YXRlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogaHRtbC9Gb3JtQ29udHJvbGxl
ci5oOiBEaXR0by4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1ZV9wdHIgZm9yIHRoZSBlbGVt
ZW50cyBvZiBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuaDogREl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnRyeUxvYWRp
bmdTdWJzdGl0dXRlRGF0YSk6IFVwZGF0ZSBzaW5jZQorICAgICAgICBzY2hlZHVsZWRSdW5Mb29w
UGFpcnMgbm93IHJldHVybnMgYSByZWZlcmVuY2UuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpsb2FkRGF0YVVS
TCk6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkb2N1bWVudERp
ZEZpbmlzaExvYWRFdmVudCk6IFN0b3AKKyAgICAgICAgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9w
cmVsb2Fkcy4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpwcmVsb2Fk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6d2FyblVu
dXNlZFByZWxvYWRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6aXNQcmVsb2FkZWQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlTG9hZGVyOjpjbGVhclByZWxvYWRzKTogRGl0dG8uCisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6IERpdHRvLgorCisgICAgICAgICogbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpz
ZXNzaW9uUmVzb3VyY2VNYXApOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9yIHRo
ZSB2YWx1ZXMgaW4gbV9hbGxSZXNvdXJjZXMgYW5kIG1fc2Vzc2lvblJlc291cmNlcy4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjplbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXApOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3RJbXBs
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Zm9yRWFjaFJlc291cmNl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Zm9yRWFjaFNlc3Npb25S
ZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnBydW5lRGVh
ZFJlc291cmNlc1RvU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OmxydUxpc3RGb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1v
dmVSZXNvdXJjZXNXaXRoT3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5Q2FjaGU6Om9yaWdpbnNXaXRoQ2FjaGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpkdW1wTFJVTGlzdHMgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaDogRGl0dG8uCisKKyAgICAgICAgKiBw
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xs
ZXI6OnNldElzVmlzaWJsZUFuZEFjdGl2ZUludGVybmFsKTogVXBkYXRlCisgICAgICAgIHNpbmNl
IHNjcm9sbGFibGVBcmVhcyByZXR1cm5zIGEgcmVmZXJlbmNlLgorCisgICAgICAgICogcGFnZS9G
cmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpkaWREZXN0cm95UmVu
ZGVyVHJlZSk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgbV9lbWJlZGRlZE9i
amVjdHNUb1VwZGF0ZSwgbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cywKKyAgICAgICAgYW5k
IG1fc2xvd1JlcGFpbnRPYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjppbnZh
bGlkYXRlU2Nyb2xsYmFyc0ZvckFsbFNjcm9sbGFibGVBcmVhcyk6IFN0b3AKKyAgICAgICAgdXNp
bmcgdW5pcXVlX3B0ciBmb3IgbV9zY3JvbGxhYmxlQXJlYXMuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmFkZEVtYmVkZGVkT2JqZWN0VG9VcGRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlRW1iZWRkZWRPYmplY3RUb1VwZGF0ZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRTbG93UmVwYWludE9iamVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVTbG93UmVwYWludE9iamVjdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0KTogRGl0dG8uIEFsc28gZ290CisgICAgICAgIHJpZCBvZiB1bm5lY2Vzc2FyeSBk
b3VibGUgaGFzaGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlVmlld3Bv
cnRDb25zdHJhaW5lZE9iamVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnJlcGFpbnRTbG93UmVwYWludE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUVtYmVkZGVkT2JqZWN0
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVw
Rm9yRml4ZWRDb250ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVw
ZGF0ZVNjcm9sbGFibGVBcmVhU2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQgY29uc3QpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRkU2Nyb2xsYWJsZUFyZWEpOiBEaXR0by4gQWxz
byB0YWtlIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVT
Y3JvbGxhYmxlQXJlYSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb250
YWluc1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmFkZENoaWxkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJl
bW92ZUNoaWxkKTogRGl0dG8uCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDogRGl0dG8uCisK
KyAgICAgICAgKiBwYWdlL01lbW9yeVJlbGVhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9n
TWVtb3J5U3RhdGlzdGljc0F0VGltZU9mRGVhdGgpOiBVcGRhdGVkIHNpbmNlCisgICAgICAgIG9i
amVjdFR5cGVDb3VudHMgbm8gbG9uZ2VyIHJldHVybnMgYSB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmxvY2tBbGxPdmVybGF5
U2Nyb2xsYmFyc1RvSGlkZGVuKTogVXBkYXRlZCBzaW5jZQorICAgICAgICBzY3JvbGxhYmxlQXJl
YXMgbm93IHJldHVybnMgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisKKyAgICAg
ICAgKiBwYWdlL1BhZ2UuaDogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvciBtX3NjaGVkdWxlZFJ1
bkxvb3BQYWlycy4KKworICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBlcmZvcm1hbmNlTG9nZ2luZzo6amF2YVNjcmlwdE9iamVjdENvdW50
cyk6IFVwZGF0ZWQKKyAgICAgICAgc2luY2Ugb2JqZWN0VHlwZUNvdW50cyBubyBsb25nZXIgcmV0
dXJucyBhIHVuaXF1ZV9wdHIuCisKKyAgICAgICAgKiBwYWdlL1ByaW50Q29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQcmludENvbnRleHQ6OmVuZCk6IFVzZSBPcHRpb25hbCBpbnN0ZWFk
IG9mIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9yIG1fbGlua2VkRGVzdGluYXRpb25zLgorICAgICAg
ICAoV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpvdXRwdXRMaW5rZWREZXN0aW5hdGlvbnMpOiBEaXR0
by4KKyAgICAgICAgKiBwYWdlL1ByaW50Q29udGV4dC5oOiBEaXR0by4KKworICAgICAgICAqIHBh
Z2UvbWFjL1BhZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjphZGRTY2hlZHVsZVBh
aXIpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIG1fc2NoZWR1bGVkUnVuTG9v
cFBhaXJzLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVtb3ZlU2NoZWR1bGVQYWlyKTogRGl0
dG8uCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6YWJzb2x1dGVFdmVudFRy
YWNraW5nUmVnaW9uc0ZvckZyYW1lIGNvbnN0KToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBzY3Jv
bGxhYmxlQXJlYXMgcmV0dXJucyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpoYXNWaXNpYmxlU2xvd1JlcGFpbnRWaWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0cyBjb25zdCk6CisgICAgICAgIFVwZGF0ZWQgc2luY2Ugdmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMgcmV0dXJucyBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoTWV0cmljc01hcC5oOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIKKyAgICAgICAgZm9y
IG1fcGFnZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0
Lmg6IFVwZGF0ZWQgc2NoZWR1bGVkUnVuTG9vcFBhaXJzCisgICAgICAgIHRvIHJldHVybiBhIGNv
bnN0IHBvaW50ZXIgdG8gdGhlIHNldC4KKworICAgICAgICAqIHJlbmRlcmluZy9HcmlkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6OnNldEF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpOiBTdG9w
IHVzaW5nIGEgdW5pcXVlX3B0cgorICAgICAgICBmb3IgbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5z
LgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6c2V0QXV0b1JlcGVhdEVtcHR5Um93cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6aGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmlkOjppc0VtcHR5QXV0b1JlcGVhdFRyYWNr
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmlkOjphdXRvUmVwZWF0RW1wdHlU
cmFja3MgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6OnNldE5lZWRzSXRl
bXNQbGFjZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZC5oOiBEaXR0by4K
KworICAgICAgICAqIHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlRmxleEZhY3Rv
clVuaXRTaXplIGNvbnN0KToKKyAgICAgICAgU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvciB0aGUg
YXJ1Z21lbnQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RM
b2NhdGlvbi5jcHA6IERlbGV0ZWQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IsCisgICAgICAgIGNv
cHkgY29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAg
ICAgICAqIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaDogVXNlIHRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uIGZvcgorICAgICAgICB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciwgY29weSBjb25z
dHJ1Y3RvciwgZGVzdHJ1Y3RvciwgYW5kCisgICAgICAgIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRUb05vZGVTZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6SGl0VGVzdFJlc3VsdCk6IERlbGV0ZWQgdGhlIGNvcHkKKyAgICAgICAgY29uc3RydWN0
b3IuIFdlIGNhbiB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gbm93IHRoYXQgd2UKKyAg
ICAgICAgc3RvcHBlZCB1c2luZyB1bmlxdWVfcHRyIGZvciBtX2xpc3RCYXNlZFRlc3RSZXN1bHQu
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOiBEZWxldGVkLiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb0xpc3RCYXNl
ZFRlc3RSZXN1bHRDb21tb24pOgorICAgICAgICBGYWN0b3JlZCBvdXQgYSBoZWxwZXIgZnVuY3Rp
b24gc28gdGhlcmUgaXMgbGVzcyB0ZW1wbGF0ZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6SGl0
VGVzdFJlc3VsdDo6YXBwZW5kKTogU2ltcGxpZmllZCB1c2luZyBhIG1vZGVybiBmb3IKKyAgICAg
ICAgbGxsb29wCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpsaXN0QmFzZWRUZXN0
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6
Om11dGFibGVMaXN0QmFzZWRUZXN0UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAp
OiBBZGRlZC4gUHV0IHRoZSBtYXAgaW50byBhCisgICAgICAgIGdsb2JhbCBpbnN0ZWFkIG9mIHVz
aW5nIGEgcG9pbnRlciBhbmQgdGhlIGhlYXAuCisgICAgICAgIChXZWJDb3JlOjpwZXJjZW50SGVp
Z2h0Q29udGFpbmVyTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJbnRvVHJh
Y2tlZFJlbmRlcmVyTWFwcyk6IFVwZGF0ZWQgZm9yIG1hcCBmdW5jdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OnJlbW92ZUZyb21UcmFja2VkUmVuZGVyZXJNYXBzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbmVkRGVzY2VuZGFudHNNYXA6OmFkZERlc2NlbmRhbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uZWREZXNjZW5kYW50c01hcDo6cmVtb3ZlRGVzY2Vu
ZGFudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25lZERlc2NlbmRhbnRzTWFw
OjpyZW1vdmVDb250YWluaW5nQmxvY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0
aW9uZWREZXNjZW5kYW50c01hcDo6cG9zaXRpb25lZFJlbmRlcmVycyBjb25zdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6cmVuZGVyQmxvY2tSYXJlRGF0YU1hcCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6cmVtb3ZlQmxvY2tGcm9tUGVyY2VudGFnZURlc2NlbmRhbnRBbmRDb250YWlu
ZXJNYXBzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6flJlbmRlckJs
b2NrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzUmFyZURhdGEg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldEJsb2NrUmFyZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZUJsb2NrUmFyZURhdGEpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21Qb3NpdGlvbmVkT2JqZWN0
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0
RnJvbVBlcmNlbnRhZ2VIZWlnaHREZXNjZW5kYW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250aW51YXRpb25PdXRsaW5lVGFibGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDb250aW51YXRpb25XaXRoT3V0
bGluZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50c0NvbnRp
bnVhdGlvbk91dGxpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
YWludENvbnRpbnVhdGlvbk91dGxpbmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjbGlw
T3V0UG9zaXRpb25lZE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpwb3NpdGlvbmVkT2JqZWN0cyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBlcmNlbnRIZWlnaHREZXNjZW5kYW50cyBjb25zdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWlnaHRDb250YWluZXJNYXAp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVpZ2h0
RGVzY2VuZGFudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92
ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpjbGVhclBlcmNlbnRIZWlnaHREZXNjZW5kYW50c0Zyb20pOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDogVXBkYXRlIHRvIHVzZSBjb25z
dCBwb2ludGVycyB3aGVuIGV4cG9zaW5nCisgICAgICAgIHNldHMgc28gdGhleSBjYW4gYmUgaXRl
cmF0ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwbGFuQ291bnRlcik6IFVwZGF0ZWQgc2luY2UgY291bnRlckRpcmVjdGl2ZXMg
aXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ291bnRlck5vZGUpOiBTdG9w
IHVzaW5nIHVuaXF1ZV9wdHIgaW4gY291bnRlck1hcHMuCisgICAgICAgIChXZWJDb3JlOjpkZXN0
cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVDb3VudGVycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWRTbG93Q2FzZSk6IERpdHRvLgorICAg
ICAgICAoc2hvd0NvdW50ZXJSZW5kZXJlclRyZWUpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVu
ZGVyZXJTdHlsZUNoYW5nZWQpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
cmFnbWVudGVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxv
dzo6aW52YWxpZGF0ZUZyYWdtZW50cyk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlLVB0ciBm
b3IgbV9saW5lVG9GcmFnbWVudE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50
ZWRGbG93OjpyZW1vdmVMaW5lRnJhZ21lbnRJbmZvKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y2hlY2tMaW5lc0NvbnNpc3RlbmN5IGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y2xlYXJMaW5lc1Rv
RnJhZ21lbnRNYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYWdtZW50ZWRG
bG93Ojpjb250YWluaW5nRnJhZ21lbnRNYXApOiBNb3ZlZCB0aGlzCisgICAgICAgIHRvIHRoZSBo
ZWFkZXIgc2luY2UgaXQncyBub3cgdHJpdmlhbC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RnJhZ21lbnRlZEZsb3cuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpndXR0ZXJzU2l6ZSBjb25zdCk6
IFN0b3AgdXNpbmcgdW5pcXVlX3B0cgorICAgICAgICBmb3IgT3JkZXJlZFRyYWNrSW5kZXhTZXQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21wdXRlRW1wdHlUcmFja3NGb3JBdXRv
UmVwZWF0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0cmFj
a1NpemVzRm9yQ29tcHV0ZWRTdHlsZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRpb25zRm9yRGlyZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpub25Db2xsYXBzZWRUcmFja3MgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5oOiBEaXR0by4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyk6IFVwZGF0
ZQorICAgICAgICBzaW5jZSB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyBpcyBhIHJlZmVyZW5j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hy
b25vdXNTY3JvbGxpbmdOb2Rlcyk6CisgICAgICAgIFVwZGF0ZSBzaW5jZSBzbG93UmVwYWludE9i
amVjdHMgaXMgYSByZWZlcmVuY2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjbGVhcik6IFBhc3MgcmVmZXJlbmNlIHRvCisgICAgICAgIGNvbnRhaW5zL2FkZC9y
ZW1vdmVTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6UmVuZGVyTGlzdEJveCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6d2lsbEJlRGVzdHJveWVkKTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5GbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1u
Rmxvdzo6UmVuZGVyTXVsdGlDb2x1bW5GbG93KTogTW92ZSBkYXRhCisgICAgICAgIG1lbWJlciBp
bml0aWFsaXphdGlvbiB0byB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck11bHRpQ29sdW1uRmxvdzo6ZmluZENvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBjb25z
dCk6CisgICAgICAgIFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9zcGFubmVyTWFwLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaDogRGl0dG8uCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVsYXlvdXRDZWxsSWZGbGV4ZWQpOiBVcGRhdGVkCisgICAg
ICAgIHNpbmNlIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cyByZXR1cm5zIGEgY29uc3QgcG9pbnRl
ci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d2lkZ2V0UmVuZGVyZXJNYXApOiBVc2UgTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCBvZgor
ICAgICAgICBwdXR0aW5nIHRoZSBtYXAgb24gdGhlIGhlYXAuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmNoYW5nZVJlcXVpcmVzTGF5b3V0IGNvbnN0KTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVf
cHRyIGZvciBjb3VudGVyRGlyZWN0aXZlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjphZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkpOiBTdG9wIHVzaW5nCisgICAgICAgIHVuaXF1
ZV9wdHIgZm9yIGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMuCisgICAgICAgIChXZWJDb3Jl
OjpjaGFuZ2VkQ3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclN0eWxlOjpjb3VudGVyRGlyZWN0aXZlcyBjb25zdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKTogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6IERpdHRvLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGE6Om9wZXJhdG9yPT0gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOiBEaXR0by4KKworICAgICAgICAqIHN0
eWxlL1N0eWxlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjp1cGRh
dGVBY3RpdmVTdHlsZVNoZWV0cyk6IFVzZSBPcHRpb25hbCBpbnN0ZWFkCisgICAgICAgIG9mIHVu
aXF1ZV9wdHIgZm9yIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNDb250
YWlucyBjb25zdCk6IERJdHRvLgorICAgICAgICAqIHN0eWxlL1N0eWxlU2NvcGUuaDogRGl0dG8u
CisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6Om51bWJlck9mU2Nyb2xsYWJsZUFyZWFzKTogVXBkYXRlIHNpbmNlCisgICAgICAg
IHNjcm9sbGFibGVBcmVhcyByZXR1cm5zIGEgcmVmZXJlbmNlLgorCiAyMDIxLTA1LTIxICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVXBk
YXRlIEF1ZGlvU2Vzc2lvbiBidWZmZXIgc2l6ZSBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2M2VkZWI0
ZjU4MzdhMjU3M2JjMWE3ZGJiYzRkNWY4ZDE1ZjAzNzU3Li4yN2JlNDA5Y2VlNTM5YWVjYWQ5YTA0
ZDZmZDExZDQ4ZWE5NDc4Yjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIxLTA1LTIx
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBQdXR0aW5nIEhhc2hN
YXAgaW4gYSBoZWFwIGJsb2NrIGh1cnRzIG1lbW9yeSB1c2UsIHNwZWVkLCBjb2RlIHNpemUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjA2OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
TG9hZFNjaGVkdWxlcjo6c2V0UmVzb3VyY2VMb2FkU2NoZWR1bGluZ01vZGUpOiBTdG9wIHVzaW5n
CisgICAgICAgIHVuaXF1ZV9wdHIgaW4gbV9wYWdlQ29udGV4dHMuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtMb2FkU2NoZWR1bGVyOjpjb250ZXh0Rm9yTG9hZCk6IERpdHRvLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmg6IERpdHRvLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlByZWZldGNoQ2FjaGU6OmNsZWFyKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGluIG1fc2Vz
c2lvblByZWZldGNoZXMuCisgICAgICAgIChXZWJLaXQ6OlByZWZldGNoQ2FjaGU6OnRha2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNoZTo6c3RvcmUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNoZTo6c3RvcmVSZWRpcmVjdCk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpQcmVmZXRjaENhY2hlOjpjbGVhckV4cGlyZWRFbnRyaWVzKTogRGl0dG8u
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oOiBEaXR0by4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJv
Y2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW06CisgICAgICAgIEFkZGVkIGFuIGluY2x1ZGUgbmVl
ZGVkIGJlY2F1c2Ugb2YgY2hhbmdlcyB0byBIaXRUZXN0UmVzdWx0LgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6dXBkYXRlU2Nyb2xsYmFycyk6IFVzZSByZWZlcmVuY2VzIHdoZW4gY2FsbGluZworICAg
ICAgICBhZGQvcmVtb3ZlU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6d2lsbERldGFjaFJlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6ZGVzdHJveSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZE92ZXJyaWRlczo6YWRkT3ZlcnJpZGUpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisg
ICAgICAgIG1fb3ZlcnJpZGVzTWFwLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3Zl
cnJpZGVzOjpyZW1vdmVPdmVycmlkZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92ZXJyaWRlIGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3Zl
cnJpZGVzLmg6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGUKKyAgICAgICAgc2NoZWR1bGVk
UnVuTG9vcFBhaXJzIHRvIHJldHVybiBhIGNvbnN0IHBvaW50ZXIuIEFsc28gbWFya2VkIGV2ZXJ5
dGhpbmcgZmluYWwKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
cGFnZUNvbnRhaW5zQW55SG9yaXpvbnRhbFNjcm9sbGJhcnMpOiBVcGRhdGVkIHNpbmNlIHNjcm9s
bGFibGVBcmVhcworICAgICAgICByZXR1cm5zIGEgcmVmZXJlbmNlLgorCiAyMDIxLTA1LTIxICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIENoZWNrZWRMb2Nr
IG1vcmUgaW4gY2FzZXMgd2hlcmUgd2UgdHJ5LWxvY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCBjMzkzOGZhN2RmMjJmMzhkZDQzNmQyYTdkZDJjNWFjMGY1MDI0ODFjLi5mYTg4Yzc4
MDllMTU5NjYxNzUwMjdhMDFlZDNiZmJiMDEzNDkzNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDUtMjEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBpbiBhIGhlYXAgYmxvY2sgaHVy
dHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIaXN0b3J5L1dlYkhpc3RvcnkubW06IFVzZSBjb25z
dGV4cHIgZm9yIHNvbWUgZmlsZS1sb2NhbCBjb25zdGFudHMuCisgICAgICAgIE1hcmsgdGhlIGNv
bnN0cnVjdG9yIG9mIFdlYkhpc3RvcnlXcml0ZXIgZXhwbGljaXQuIFVzZSBhIHJlZmVyZW5jZQor
ICAgICAgICBmb3IgdGhlIGFyZ3VtZW50IHRvIFdlYkhpc3RvcnlXcml0ZXIuIFN0b3JlIGRhdGUg
a2V5cyBhcworICAgICAgICBXZWJIaXN0b3J5RGF0ZUtleSBpbnN0ZWFkIG9mIG5hcnJvd2luZyB0
byBpbnQuCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIGluaXRdKTogU3RvcCB1c2luZyB1
bmlxdWVfcHRyIGZvciBfZW50cmllc0J5RGF0ZS4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZh
dGUgZmluZEtleTpmb3JEYXk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0
ZSBpbnNlcnRJdGVtOmZvckRhdGVLZXk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5
UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJIaXN0b3J5UHJpdmF0ZSBhZGRJdGVtVG9EYXRlQ2FjaGVzOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViSGlzdG9yeVByaXZhdGUgcmVidWlsZEhpc3RvcnlCeURheUlmTmVlZGVkOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVtb3ZlQWxsSXRlbXNdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQcml2YXRlIG9yZGVyZWRJdGVtc0xhc3RWaXNp
dGVkT25EYXk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBkYXRhXSk6
IERpdHRvLiBBbHNvIHJlbW92ZWQgYW4gaW5jb3JyZWN0IGJyaWRnaW5nCisgICAgICAgIGNhc3Qg
Y29tYmluZWQgd2l0aCByZXRhaW5QdHIvYXV0b3JlbGVhc2UgYW5kIHVzZWQgYnJpZGdpbmdBdXRv
cmVsZWFzZSBpbnN0ZWFkLgorICAgICAgICAoV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdy
aXRlcik6IFVwZGF0ZWQuCisgICAgICAgIChXZWJIaXN0b3J5V3JpdGVyOjp3cml0ZUhpc3RvcnlJ
dGVtcyk6IERpdHRvLgorCisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHNdKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
IG5vIGxvbmdlciByZXR1cm5zIGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKCtbV2ViQ29yZVN0YXRp
c3RpY3MgamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHNdKTogRGl0dG8sIGZvcgorICAgICAgICBv
YmplY3RUeXBlQ291bnRzLgorCisgICAgICAgICogTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5t
bTogQWRkZWQgYW4gaW5jbHVkZSBub3cgbmVlZGVkIGJlY2F1c2Ugb2YKKyAgICAgICAgY2hhbmdl
cyB0byBIaXRUZXN0UmVzdWx0LmguCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5oOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIHRpbWVycy4KKyAgICAgICAgKiBQ
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IHN0b3BUaW1lcnNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luVmlldyBzdGFydFRpbWVyc10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IHNjaGVkdWxlVGltZXJXaXRoSW50ZXJ2YWw6cmVwZWF0OnRpbWVyRnVuYzpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB1bnNjaGVkdWxlVGltZXI6XSk6
IERpdHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oOiBVcGRhdGUgc2NoZWR1bGVkUnVuTG9vcFBhaXJzCisgICAgICAgIHRvIHJldHVybiBh
IGNvbnN0IHBvaW50ZXIuIEFsc28gbWFya2VkIGV2ZXJ5dGhpbmcgZmluYWwuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1bkxvb3BQYWlycyBjb25zdCk6IERp
dHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKGNyZWF0
ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKGNvbW1hbmROYW1lRm9y
U2VsZWN0b3IpOiBVc2UgU29ydGVkQXJyYXlNYXAgZm9yIHRoZSBsaXN0IG9mIHNlbGVjdG9ycwor
ICAgICAgICB3aXRoZSBzcGVjaWFsIG5hbWVzLCByYXRoZXIgdGhhbiB1c2luZyBhIEhhc2hNYXAg
b24gdGhlIGhlYXAuCisKIDIwMjEtMDUtMjAgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hA
Z21haWwuY29tPgogCiAgICAgICAgIFtXZWJJRExdIFJlbW92ZSBbSW1wbGljaXRUaGlzXSBhbmQg
W0N1c3RvbVByb3h5VG9KU09iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKaW5kZXggMzc0MjUxYzJmMDg5ZDY0ZjA4ODdjOTZk
NDlmMTg3YjFkNzBjMThlYi4uNTIxZDhjNTg1MzBjMmM0NjM3NTQwZjcxNzc5N2E2N2MyY2VjODA3
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCkBAIC01NCwyMSAr
NTQsMTkgQEAgT3BhcXVlSlNDbGFzczo6T3BhcXVlSlNDbGFzcyhjb25zdCBKU0NsYXNzRGVmaW5p
dGlvbiogZGVmaW5pdGlvbiwgT3BhcXVlSlNDbGFzcyoKICAgICBKU0M6OmluaXRpYWxpemUoKTsK
IAogICAgIGlmIChjb25zdCBKU1N0YXRpY1ZhbHVlKiBzdGF0aWNWYWx1ZSA9IGRlZmluaXRpb24t
PnN0YXRpY1ZhbHVlcykgewotICAgICAgICBtX3N0YXRpY1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3Bh
cXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlPigpOwogICAgICAgICB3aGlsZSAoc3RhdGljVmFs
dWUtPm5hbWUpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZU5hbWUgPSBTdHJpbmc6OmZyb21V
VEY4KHN0YXRpY1ZhbHVlLT5uYW1lKTsKICAgICAgICAgICAgIGlmICghdmFsdWVOYW1lLmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGljVmFsdWVzLT5zZXQodmFsdWVOYW1lLmltcGwo
KSwgbWFrZVVuaXF1ZTxTdGF0aWNWYWx1ZUVudHJ5PihzdGF0aWNWYWx1ZS0+Z2V0UHJvcGVydHks
IHN0YXRpY1ZhbHVlLT5zZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUtPmF0dHJpYnV0ZXMsIHZhbHVl
TmFtZSkpOworICAgICAgICAgICAgICAgIG1fc3RhdGljVmFsdWVzLmFkZCh2YWx1ZU5hbWUuaW1w
bCgpLCBtYWtlVW5pcXVlPFN0YXRpY1ZhbHVlRW50cnk+KHN0YXRpY1ZhbHVlLT5nZXRQcm9wZXJ0
eSwgc3RhdGljVmFsdWUtPnNldFByb3BlcnR5LCBzdGF0aWNWYWx1ZS0+YXR0cmlidXRlcywgdmFs
dWVOYW1lKSk7CiAgICAgICAgICAgICArK3N0YXRpY1ZhbHVlOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKGNvbnN0IEpTU3RhdGljRnVuY3Rpb24qIHN0YXRpY0Z1bmN0aW9uID0gZGVmaW5p
dGlvbi0+c3RhdGljRnVuY3Rpb25zKSB7Ci0gICAgICAgIG1fc3RhdGljRnVuY3Rpb25zID0gbWFr
ZVVuaXF1ZTxPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU+KCk7CiAgICAgICAgIHdo
aWxlIChzdGF0aWNGdW5jdGlvbi0+bmFtZSkgewogICAgICAgICAgICAgU3RyaW5nIGZ1bmN0aW9u
TmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoc3RhdGljRnVuY3Rpb24tPm5hbWUpOwogICAgICAgICAg
ICAgaWYgKCFmdW5jdGlvbk5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0aWNG
dW5jdGlvbnMtPnNldChmdW5jdGlvbk5hbWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY0Z1bmN0
aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9uLT5jYWxsQXNGdW5jdGlvbiwgc3RhdGljRnVuY3Rpb24t
PmF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRpY0Z1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25OYW1lLmltcGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNGdW5jdGlvbkVudHJ5PihzdGF0aWNG
dW5jdGlvbi0+Y2FsbEFzRnVuY3Rpb24sIHN0YXRpY0Z1bmN0aW9uLT5hdHRyaWJ1dGVzKSk7CiAg
ICAgICAgICAgICArK3N0YXRpY0Z1bmN0aW9uOwogICAgICAgICB9CiAgICAgfQpAQCAtODIsMTgg
KzgwLDExIEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKICAgICAvLyBUaGUgZW1w
dHkgc3RyaW5nIGlzIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIGlzIGFuIGlkZW50aWZpZXIsIGlu
IGFsbCBvdGhlciBjYXNlcyB3ZSBzaG91bGQgaGF2ZSBkb25lIGEgZGVlcCBjb3B5IGluIGNsYXNz
TmFtZSgpLCBiZWxvdy4gCiAgICAgQVNTRVJUKCFtX2NsYXNzTmFtZS5sZW5ndGgoKSB8fCAhbV9j
bGFzc05hbWUuaW1wbCgpLT5pc0F0b20oKSk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKG1f
c3RhdGljVmFsdWVzKSB7Ci0gICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwotICAgICAgICBmb3Ig
KE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGljRnVuY3Rpb25z
KSB7Ci0gICAgICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1
ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRp
Y0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgQVNTRVJU
KCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0gICAgfQorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgZm9y
IChhdXRvJiBrZXkgOiBtX3N0YXRpY1ZhbHVlcy5rZXlzKCkpCisgICAgICAgIEFTU0VSVCgha2V5
LT5pc0F0b20oKSk7CisgICAgZm9yIChhdXRvJiBrZXkgOiBtX3N0YXRpY0Z1bmN0aW9ucy5rZXlz
KCkpCisgICAgICAgIEFTU0VSVCgha2V5LT5pc0F0b20oKSk7CiAjZW5kaWYKICAgICAKICAgICBp
ZiAocHJvdG90eXBlQ2xhc3MpCkBAIC0xMjIsMjMgKzExMywxNCBAQCBSZWY8T3BhcXVlSlNDbGFz
cz4gT3BhcXVlSlNDbGFzczo6Y3JlYXRlKGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uKiBjbGllbnRE
ZWZpbml0aQogT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOjpPcGFxdWVKU0NsYXNzQ29udGV4dERh
dGEoSlNDOjpWTSYsIE9wYXF1ZUpTQ2xhc3MqIGpzQ2xhc3MpCiAgICAgOiBtX2NsYXNzKGpzQ2xh
c3MpCiB7Ci0gICAgaWYgKGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzKSB7Ci0gICAgICAgIHN0YXRp
Y1ZhbHVlcyA9IG1ha2VVbmlxdWU8T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlPigpOwot
ICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGpzQ2xhc3MtPm1fc3RhdGljVmFsdWVzLT5lbmQoKTsKLSAgICAgICAgZm9yIChPcGFxdWVK
U0NsYXNzU3RhdGljVmFsdWVzVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9z
dGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNT
RVJUKCFpdC0+a2V5LT5pc0F0b20oKSk7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVOYW1lID0g
aXQtPmtleS0+aXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgICAgICBzdGF0aWNWYWx1ZXMtPmFkZCh2
YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY1ZhbHVlRW50cnk+KGl0LT52YWx1ZS0+
Z2V0UHJvcGVydHksIGl0LT52YWx1ZS0+c2V0UHJvcGVydHksIGl0LT52YWx1ZS0+YXR0cmlidXRl
cywgdmFsdWVOYW1lKSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0YXRpY1ZhbHVlIDog
anNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNWYWx1ZS5r
ZXktPmlzQXRvbSgpKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlTmFtZSA9IHN0YXRpY1ZhbHVlLmtl
eS0+aXNvbGF0ZWRDb3B5KCk7CisgICAgICAgIHN0YXRpY1ZhbHVlcy5zZXQodmFsdWVOYW1lLmlt
cGwoKSwgbWFrZVVuaXF1ZTxTdGF0aWNWYWx1ZUVudHJ5PihzdGF0aWNWYWx1ZS52YWx1ZS0+Z2V0
UHJvcGVydHksIHN0YXRpY1ZhbHVlLnZhbHVlLT5zZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUudmFs
dWUtPmF0dHJpYnV0ZXMsIHZhbHVlTmFtZSkpOwogICAgIH0KLQotICAgIGlmIChqc0NsYXNzLT5t
X3N0YXRpY0Z1bmN0aW9ucykgewotICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBtYWtlVW5pcXVl
PE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZT4oKTsKLSAgICAgICAgT3BhcXVlSlND
bGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNzLT5t
X3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVu
Y3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
aXQtPmtleS0+aXNBdG9tKCkpOwotICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoaXQt
PmtleS0+aXNvbGF0ZWRDb3B5KCksIG1ha2VVbmlxdWU8U3RhdGljRnVuY3Rpb25FbnRyeT4oaXQt
PnZhbHVlLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzKSk7Ci0gICAgICAg
IH0KKyAgICBmb3IgKGF1dG8mIHN0YXRpY0Z1bmN0aW9uIDoganNDbGFzcy0+bV9zdGF0aWNGdW5j
dGlvbnMpIHsKKyAgICAgICAgQVNTRVJUKCFzdGF0aWNGdW5jdGlvbi5rZXktPmlzQXRvbSgpKTsK
KyAgICAgICAgc3RhdGljRnVuY3Rpb25zLnNldChzdGF0aWNGdW5jdGlvbi5rZXktPmlzb2xhdGVk
Q29weSgpLCBtYWtlVW5pcXVlPFN0YXRpY0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9uLnZh
bHVlLT5jYWxsQXNGdW5jdGlvbiwgc3RhdGljRnVuY3Rpb24udmFsdWUtPmF0dHJpYnV0ZXMpKTsK
ICAgICB9CiB9CiAKQEAgLTE1OCwxMiArMTQwLDEyIEBAIFN0cmluZyBPcGFxdWVKU0NsYXNzOjpj
bGFzc05hbWUoKQogCiBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIE9wYXF1ZUpTQ2xh
c3M6OnN0YXRpY1ZhbHVlcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0g
ICAgcmV0dXJuIGNvbnRleHREYXRhKGdsb2JhbE9iamVjdCkuc3RhdGljVmFsdWVzLmdldCgpOwor
ICAgIHJldHVybiAmY29udGV4dERhdGEoZ2xvYmFsT2JqZWN0KS5zdGF0aWNWYWx1ZXM7CiB9CiAK
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogT3BhcXVlSlNDbGFzczo6c3RhdGlj
RnVuY3Rpb25zKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1
cm4gY29udGV4dERhdGEoZ2xvYmFsT2JqZWN0KS5zdGF0aWNGdW5jdGlvbnMuZ2V0KCk7CisgICAg
cmV0dXJuICZjb250ZXh0RGF0YShnbG9iYWxPYmplY3QpLnN0YXRpY0Z1bmN0aW9uczsKIH0KIAog
SlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVm
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAppbmRleCBhYTliNWRm
NjFjMGIzYzg5MWU4NzNlNzQ1NTcyMGI3ODlkY2MzMDA4Li5mZWQ0YmExOTg1NDY1YzdhYjQxOTYz
NWQ2NGE3MWQ4ZDU5YmY5ZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2xhc3NSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYu
aApAQCAtODIsOCArODIsOCBAQCBwdWJsaWM6CiAgICAgLy8gNC4gV2hlbiBpdCBpcyB1c2VkLCB0
aGUgb2xkIGNvbnRleHQgZGF0YSBpcyBmb3VuZCBpbiBWTSBhbmQgdXNlZC4KICAgICBSZWZQdHI8
T3BhcXVlSlNDbGFzcz4gbV9jbGFzczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGU+IHN0YXRpY1ZhbHVlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlPiBzdGF0aWNGdW5jdGlvbnM7CisgICAg
T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlIHN0YXRpY1ZhbHVlczsKKyAgICBPcGFxdWVK
U0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUgc3RhdGljRnVuY3Rpb25zOwogICAgIEpTQzo6V2Vh
azxKU0M6OkpTT2JqZWN0PiBjYWNoZWRQcm90b3R5cGU7CiB9OwogCkBAIC0xMjMsOCArMTIzLDgg
QEAgcHJpdmF0ZToKIAogICAgIC8vIFN0cmluZ3MgaW4gdGhlc2UgZGF0YSBtZW1iZXJzIHNob3Vs
ZCBub3QgYmUgcHV0IGludG8gYW55IEF0b21TdHJpbmdUYWJsZS4KICAgICBTdHJpbmcgbV9jbGFz
c05hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJs
ZT4gbV9zdGF0aWNWYWx1ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZT4gbV9zdGF0aWNGdW5jdGlvbnM7CisgICAgT3BhcXVlSlNDbGFzc1N0
YXRpY1ZhbHVlc1RhYmxlIG1fc3RhdGljVmFsdWVzOworICAgIE9wYXF1ZUpTQ2xhc3NTdGF0aWNG
dW5jdGlvbnNUYWJsZSBtX3N0YXRpY0Z1bmN0aW9uczsKIH07CiAKICNlbmRpZiAvLyBKU0NsYXNz
UmVmX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcApp
bmRleCAxNTMzNzFlZjc5MjI5MmNmY2U1MzMzOTgzZTU5N2FmZGM1YzhmZGU5Li5jMmRlYWU0M2Ni
MjQ0YmM3NTA3YTg3Y2I3N2VkZTFjNTkxN2M4NTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCkBAIC0xNTQsMTAgKzE1NCw3IEBAIGNvbnN0IEFi
c3RyYWN0SGVhcCYgSW5kZXhlZEFic3RyYWN0SGVhcDo6YXRTbG93KHB0cmRpZmZfdCBpbmRleCkK
IHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gbV9zbWFsbEluZGlj
ZXMuc2l6ZSgpKTsKICAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fbGFyZ2VJbmRpY2VzKSkKLSAg
ICAgICAgbV9sYXJnZUluZGljZXMgPSBtYWtlVW5pcXVlPE1hcFR5cGU+KCk7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWJzdHJhY3RIZWFwPiYgZmllbGQgPSBtX2xhcmdlSW5kaWNlcy0+YWRkKGlu
ZGV4LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFic3Ry
YWN0SGVhcD4mIGZpZWxkID0gbV9sYXJnZUluZGljZXMuYWRkKGluZGV4LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CiAgICAgaWYgKCFmaWVsZCkgewogICAgICAgICBmaWVsZCA9IG1ha2VVbmlx
dWU8QWJzdHJhY3RIZWFwPigpOwogICAgICAgICBpbml0aWFsaXplKCpmaWVsZCwgaW5kZXgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmgKaW5kZXggNjU4ZTJj
ZmM1ZWNlODIzNDk3NmI2MzRkZThlMzdmMjBkNmYwZmM4OS4uODc3ZWRmMjZhOGJkZDU3YTJkMDk0
OTM3YmIxNzEzZmVhMmExYmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcC5oCkBAIC0xNjAsNyArMTYwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5
cGVkZWYgSGFzaE1hcDxwdHJkaWZmX3QsIHN0ZDo6dW5pcXVlX3B0cjxBYnN0cmFjdEhlYXA+LCBX
VEY6OkludEhhc2g8cHRyZGlmZl90PiwgV2l0aG91dFplcm9Pck9uZUhhc2hUcmFpdHM+IE1hcFR5
cGU7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1hcFR5cGU+IG1fbGFyZ2VJbmRpY2VzOwor
ICAgIE1hcFR5cGUgbV9sYXJnZUluZGljZXM7CiAgICAgVmVjdG9yPENTdHJpbmcsIDE2PiBtX2xh
cmdlSW5kZXhOYW1lczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXgg
NGYxM2Y2MzczMTQxYTY2N2YxOTUzNDk0NWYxZjVjNGQ1NGMzMTA1Zi4uYjgyM2MwYmQ3YTY2ZGE3
ODYwZWJlYzgwZmFhZGMxOTI3YmVkMTUzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKQEAgLTg4MCwyNSArODgwLDI1IEBAIHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3Vu
dCgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNl
dD4gSGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpCitUeXBlQ291bnRTZXQgSGVhcDo6
cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVD
b3VudFNldD4gcmVzdWx0ID0gbWFrZVVuaXF1ZTxUeXBlQ291bnRTZXQ+KCk7CisgICAgVHlwZUNv
dW50U2V0IHJlc3VsdDsKICAgICBmb3JFYWNoUHJvdGVjdGVkQ2VsbCgKICAgICAgICAgWyZdIChK
U0NlbGwqIGNlbGwpIHsKLSAgICAgICAgICAgIHJlY29yZFR5cGUodm0oKSwgKnJlc3VsdCwgY2Vs
bCk7CisgICAgICAgICAgICByZWNvcmRUeXBlKHZtKCksIHJlc3VsdCwgY2VsbCk7CiAgICAgICAg
IH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRT
ZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQorVHlwZUNvdW50U2V0IEhlYXA6Om9iamVjdFR5
cGVDb3VudHMoKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHJlc3VsdCA9
IG1ha2VVbmlxdWU8VHlwZUNvdW50U2V0PigpOworICAgIFR5cGVDb3VudFNldCByZXN1bHQ7CiAg
ICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKCp0aGlzKTsKICAgICBtX29iamVj
dFNwYWNlLmZvckVhY2hMaXZlQ2VsbCgKICAgICAgICAgaXRlcmF0aW9uU2NvcGUsCiAgICAgICAg
IFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIC0+IEl0ZXJhdGlvblN0
YXR1cyB7CiAgICAgICAgICAgICBpZiAoaXNKU0NlbGxLaW5kKGtpbmQpKQotICAgICAgICAgICAg
ICAgIHJlY29yZFR5cGUodm0oKSwgKnJlc3VsdCwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkp
OworICAgICAgICAgICAgICAgIHJlY29yZFR5cGUodm0oKSwgcmVzdWx0LCBzdGF0aWNfY2FzdDxK
U0NlbGwqPihjZWxsKSk7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKICAgICAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI4MTAsOSArMjgxMCw5
IEBAIHZvaWQgSGVhcDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkKICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwYWlyLmtleSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQt
PnNpemUoKSkgeworICAgICAgICAgICAgaWYgKCFtX21hcmtMaXN0U2V0LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNjb3BlKHZpc2l0b3Is
IFJvb3RNYXJrUmVhc29uOjpDb25zZXJ2YXRpdmVTY2FuKTsKLSAgICAgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAg
ICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsIG1f
bWFya0xpc3RTZXQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggOTNhYTI4YmRiNzBmNjg4YmM5NTRmZTNmY2E3MzdjNDI3MjQz
MzYzZi4uODI5MDEyNGUxYTI4YzcxYTIwNzllM2FhOGY0YTc5YTFhMTk1ZDc5YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMjQyLDEwICsyNDIsMTAgQEAgcHVibGljOgogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHNpemVfdCBnbG9iYWxPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHNpemVfdCBwcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNv
dW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVHlwZUNv
dW50U2V0IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBUeXBlQ291bnRTZXQgb2JqZWN0VHlwZUNvdW50cygpOwogCi0gICAgSGFzaFNldDxNYXJrZWRB
cmd1bWVudEJ1ZmZlcio+JiBtYXJrTGlzdFNldCgpOworICAgIEhhc2hTZXQ8TWFya2VkQXJndW1l
bnRCdWZmZXIqPiYgbWFya0xpc3RTZXQoKSB7IHJldHVybiBtX21hcmtMaXN0U2V0OyB9CiAgICAg
dm9pZCBhZGRNYXJrZWRKU1ZhbHVlUmVmQXJyYXkoTWFya2VkSlNWYWx1ZVJlZkFycmF5Kik7CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUHJvdGVjdGVk
Q2VsbChjb25zdCBGdW5jdG9yJik7CkBAIC02MzEsNyArNjMxLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoU2V0PGNvbnN0IEpTQ2VsbCo+IG1fY29weWluZ1JlbWVtYmVyZWRTZXQ7CiAKICAgICBQcm90
ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hT
ZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPj4gbV9tYXJrTGlzdFNldDsKKyAgICBIYXNoU2V0PE1h
cmtlZEFyZ3VtZW50QnVmZmVyKj4gbV9tYXJrTGlzdFNldDsKICAgICBTZW50aW5lbExpbmtlZExp
c3Q8TWFya2VkSlNWYWx1ZVJlZkFycmF5LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxNYXJrZWRKU1Zh
bHVlUmVmQXJyYXk+PiBtX21hcmtlZEpTVmFsdWVSZWZBcnJheXM7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFjaGluZVRocmVhZHM+IG1fbWFjaGluZVRocmVhZHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAppbmRleCA0ZDNhOThiMjZhODcwODA3MDgyNzg4YTlhOWQy
MTlkYjAyNTZlODNiLi4xMmYxYzU2OWUxMzJhMDBlNGFmOGM1Yjc1MjA0ZWQxNjBjMTc5YmJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTIxNiwxMyArMjE2
LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVk
ZWQoKQogICAgIH0KIH0KIAotaW5saW5lIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPiYg
SGVhcDo6bWFya0xpc3RTZXQoKQotewotICAgIGlmICghbV9tYXJrTGlzdFNldCkKLSAgICAgICAg
bV9tYXJrTGlzdFNldCA9IG1ha2VVbmlxdWU8SGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
PigpOwotICAgIHJldHVybiAqbV9tYXJrTGlzdFNldDsKLX0KLQogaW5saW5lIHZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHNpemUg
PiBtaW5FeHRyYU1lbW9yeSkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVXRpbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAppbmRl
eCBkNmFhYzNlNDBiOTBmYTY3ZmMwNjUzMmNlZWIwZmJkNmI2M2EwOGZiLi5lMDNmODgzY2FkZjkz
MTQ4MGMxMWQyNDljMzBmOWQwY2VjYmM5NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVXRpbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBVdGlsLmgKQEAgLTE0MCw4ICsxNDAsNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChwb2ludGVy
LT5pc1ByZWNpc2VBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIGF1dG8qIHNldCA9IGhlYXAu
b2JqZWN0U3BhY2UoKS5wcmVjaXNlQWxsb2NhdGlvblNldCgpOwogICAgICAgICAgICAgQVNTRVJU
KHNldCk7Ci0gICAgICAgICAgICBpZiAoc2V0LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHNldC0+Y29udGFpbnMocG9pbnRlcik7
CiAgICAgICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAppbmRleCBjODIzZDllOTRkYjZmMjUwMjdlMmYyYjZiY2RkMzgxMzUxM2Y3ZjAzLi43ZWM2
MWMwNzc4YzY0M2EwNTI2ZDQ5NTdiN2I5N2I4OGU3NDI1MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBNYXJr
ZWRTcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogCiB2b2lkIE1hcmtlZFNwYWNlOjplbmFi
bGVQcmVjaXNlQWxsb2NhdGlvblRyYWNraW5nKCkKIHsKLSAgICBtX3ByZWNpc2VBbGxvY2F0aW9u
U2V0ID0gbWFrZVVuaXF1ZTxIYXNoU2V0PEhlYXBDZWxsKj4+KCk7CisgICAgbV9wcmVjaXNlQWxs
b2NhdGlvblNldCA9IEhhc2hTZXQ8SGVhcENlbGwqPiB7IH07CiAgICAgZm9yIChhdXRvKiBhbGxv
Y2F0aW9uIDogbV9wcmVjaXNlQWxsb2NhdGlvbnMpCiAgICAgICAgIG1fcHJlY2lzZUFsbG9jYXRp
b25TZXQtPmFkZChhbGxvY2F0aW9uLT5jZWxsKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgKaW5kZXggNWJlNTFkZTdlNGNmOTliM2Q2ZjQ3Nzc3ZjAwYjZkMmE5
N2FiODA0Zi4uZmUxNWMzZjVkOWU3M2U3Mzg3NmVmZDVkMjEwNWRiYTUyMzI4MjRhMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCkBAIC0xNTYsNyArMTU2LDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxQcmVjaXNlQWxsb2NhdGlvbio+JiBwcmVjaXNlQWxs
b2NhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uczsgfQogICAgIHVu
c2lnbmVkIHByZWNpc2VBbGxvY2F0aW9uc051cnNlcnlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3ByZWNpc2VBbGxvY2F0aW9uc051cnNlcnlPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBwcmVjaXNl
QWxsb2NhdGlvbnNPZmZzZXRGb3JUaGlzQ29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
Y2lzZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247IH0KLSAgICBIYXNoU2V0PEhl
YXBDZWxsKj4qIHByZWNpc2VBbGxvY2F0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNl
QWxsb2NhdGlvblNldC5nZXQoKTsgfQorICAgIEhhc2hTZXQ8SGVhcENlbGwqPiogcHJlY2lzZUFs
bG9jYXRpb25TZXQoKSB7IHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0ID8gJiptX3ByZWNp
c2VBbGxvY2F0aW9uU2V0IDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBlbmFibGVQcmVjaXNlQWxs
b2NhdGlvblRyYWNraW5nKCk7CiAgICAgCkBAIC0yMDAsNyArMjAwLDcgQEAgcHJpdmF0ZToKIAog
ICAgIFZlY3RvcjxTdWJzcGFjZSo+IG1fc3Vic3BhY2VzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEhhc2hTZXQ8SGVhcENlbGwqPj4gbV9wcmVjaXNlQWxsb2NhdGlvblNldDsKKyAgICBPcHRpb25h
bDxIYXNoU2V0PEhlYXBDZWxsKj4+IG1fcHJlY2lzZUFsbG9jYXRpb25TZXQ7CiAgICAgVmVjdG9y
PFByZWNpc2VBbGxvY2F0aW9uKj4gbV9wcmVjaXNlQWxsb2NhdGlvbnM7CiAgICAgdW5zaWduZWQg
bV9wcmVjaXNlQWxsb2NhdGlvbnNOdXJzZXJ5T2Zmc2V0IHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
cHJlY2lzZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb24geyAwIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5jcHAKaW5kZXggMjdj
NDg4MWVmYzNjYjcyZjFiMDgxODhjODA4ZWFlZTA1MWFlOWJhOS4uYjYwNDYzNWE2NmY5ZTViMDEw
ZTEyZjJkNzFmODY3NjhkZjgxMTU3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcApAQCAtNDUsMTEgKzQ1LDYgQEAgdm9pZCBFdmFsRXhl
Y3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1
dGFibGUqPihjZWxsKS0+RXZhbEV4ZWN1dGFibGU6On5FdmFsRXhlY3V0YWJsZSgpOwogfQogCi1h
dXRvIEV2YWxFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBs
YXRlT2JqZWN0TWFwJgotewotICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwo
bV90ZW1wbGF0ZU9iamVjdE1hcCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2
b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiB7CkBAIC01OCwxMCArNTMsMTAgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fZXZhbENvZGVCbG9jayk7Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFwLmdldCgpKSB7CisgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2NrKCkpOwotICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKGVu
dHJ5LnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVt
cGxhdGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FdmFsRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4
ZWN1dGFibGUuaAppbmRleCAwNjk1ODZmMjE0ZTQzMzYzZDI0NzJiNDMzMzA1YTRhMWQ4YjBkNWU1
Li4zZjNhYWUwYzU2YWU2NGNkODMzODczZGY0OTg4MDAxYTlmYzE0MTZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKQEAgLTY4LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dEaXJlY3RFdmFsQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+YWxsb3dEaXJlY3RFdmFsQ2FjaGUoKTsgfQogICAg
IE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI+KG1f
bmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOyB9CiAgICAgUHJpdmF0ZUJyYW5kUmVxdWlyZW1l
bnQgcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQ
cml2YXRlQnJhbmRSZXF1aXJlbWVudD4obV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCk7IH0KLSAg
ICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKTsKKyAgICBU
ZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRl
T2JqZWN0TWFwOyB9CiAKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJh
c2U7CkBAIC04NCw3ICs4NCw3IEBAIHByb3RlY3RlZDoKIAogICAgIFdyaXRlQmFycmllcjxFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlPiBtX2V2YWxDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVy
PFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2s7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRlT2JqZWN0TWFwOworICAg
IFRlbXBsYXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVPYmplY3RNYXA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCmluZGV4IDk2NDU1MTkwOGFkOWFmM2VmNzBkNjE0MWQ2YTM3N2M1Njhm
YzAyNTQuLjhmZTZjNDRmZTZjODc3ODBmODFhZTE2OWMxYmZhYTM1ZGI2OTBkYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cApAQCAtNzksMTAgKzc5LDEwIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwogICAgIGlmIChSYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLmdldCgpKSB7CiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHJhcmVEYXRhLT5tX2NhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSk7Ci0gICAgICAg
IGlmIChUZW1wbGF0ZU9iamVjdE1hcCogbWFwID0gcmFyZURhdGEtPm1fdGVtcGxhdGVPYmplY3RN
YXAuZ2V0KCkpIHsKKyAgICAgICAgaWYgKCFyYXJlRGF0YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVj
dC0+Y2VsbExvY2soKSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeS52YWx1ZSk7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIHZhbHVlIDogcmFyZURhdGEtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkp
CisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFsdWUpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMTI3LDEwICsxMjcsOSBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b3ZlcnJp
ZGVJbmZvKGNvbnN0IEZ1bmN0aW9uT3ZlcnJpZGVJbmZvJiBvdmVycmlkZUluZm8pCiAgICAgcmFy
ZURhdGEubV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gb3ZlcnJpZGVJbmZvLnR5cGVQcm9maWxp
bmdFbmRPZmZzZXQ7CiB9CiAKLWF1dG8gRnVuY3Rpb25FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0
ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgorYXV0byBGdW5jdGlvbkV4ZWN1
dGFibGU6OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCiB7Ci0gICAg
UmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFyZURhdGEoKTsKLSAgICByZXR1cm4gZW5zdXJl
VGVtcGxhdGVPYmplY3RNYXBJbXBsKHJhcmVEYXRhLm1fdGVtcGxhdGVPYmplY3RNYXApOworICAg
IHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLm1fdGVtcGxhdGVPYmplY3RNYXA7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAppbmRleCBiYWRjYjc4NTBmYjZmOTM2NTU2Y2U0OWMyNjE2MDJjNTk1
OWQ0ZmRhLi5mMjY0NWExNDVjMTc4ZTc0MjhkODBkZmUzZTQxNDhkNWYxZGEzMjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaApA
QCAtMjgxLDcgKzI4MSw3IEBAIHB1YmxpYzoKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExl
dmVsRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGV2ZWxFeGVjdXRhYmxlLmdldCgp
OyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0m
KTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAoKTsKIAogICAgIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIApAQCAtMzAyLDcgKzMwMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0IHsgMCB9Owog
ICAgICAgICB1bnNpZ25lZCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCB7IFVJTlRfTUFYIH07
CiAgICAgICAgIHVuc2lnbmVkIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCB7IFVJTlRfTUFYIH07
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9iamVjdE1hcD4gbV90ZW1wbGF0ZU9i
amVjdE1hcDsKKyAgICAgICAgVGVtcGxhdGVPYmplY3RNYXAgbV90ZW1wbGF0ZU9iamVjdE1hcDsK
ICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1
cmU7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGQ3OTRjZTZiYjRkMjJkOTk5NTEy
MDI4YTQzY2VlYmI0ODNmYTk2MDUuLmUwNzUzOWM0Y2I4YzA4NWU4YWVjYjkyYmZjYjgxNTJhNmJj
YTQyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTc0LDExICs3NCw2IEBAIHZvaWQgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCktPk1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
Ojp+TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUoKTsKIH0KIAotYXV0byBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mKSAtPiBUZW1wbGF0ZU9iamVjdE1h
cCYKLXsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKG1fdGVtcGxhdGVP
YmplY3RNYXApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBNb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogewpAQCAtODgsMTAgKzgzLDEwIEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVs
ZVByb2dyYW1Db2RlQmxvY2spOwotICAgIGlmIChUZW1wbGF0ZU9iamVjdE1hcCogbWFwID0gdGhp
c09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkgeworICAgIGlmICghdGhpc09iamVj
dC0+bV90ZW1wbGF0ZU9iamVjdE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayh0aGlzT2JqZWN0LT5jZWxsTG9jaygpKTsKLSAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6ICptYXApCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChlbnRyeS52YWx1ZSk7Cisg
ICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFw
LnZhbHVlcygpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQodmFsdWUpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmgKaW5kZXggOTYzNDc5MDQ0MDZmZWYyZDljM2RmNWU3MDA1YThiNDFjODcx
OTNjNy4uZTI5ZTg5YWMwNDQ1NzAzMjAyZjlkMTRmM2UzN2U2YTQ0NGM4NzA0MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN5bWJvbFRhYmxlKiBtb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbV9tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlLmdldCgpOyB9CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RN
YXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9t
b2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRlT2JqZWN0TWFwOworICAgIFRlbXBs
YXRlT2JqZWN0TWFwIG1fdGVtcGxhdGVPYmplY3RNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVj
dXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRh
YmxlLmNwcAppbmRleCBkYzQ1YzJjY2E4YzY5NmJlMzlhOGFjOTg3MWFlNGU3NmI2MWRhNWVlLi42
NzE2MmFkMDQzYmM3YjM4ZGFlZjY3MWI3ZTU3MTMzZThhMjFhYzk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCkBAIC0yMDUs
MTEgKzIwNSw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUdsb2Jh
bFByb3BlcnRpZXMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCoKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotYXV0byBQcm9ncmFtRXhlY3V0YWJsZTo6ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAoVk0m
KSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKLXsKLSAgICByZXR1cm4gZW5zdXJlVGVtcGxhdGVPYmpl
Y3RNYXBJbXBsKG1fdGVtcGxhdGVPYmplY3RNYXApOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aXNpdG9yPgogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxs
KiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogewpAQCAtMjE4LDEwICsyMTMsMTAgQEAgdm9pZCBQ
cm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9y
JiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jayk7
Ci0gICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3RlbXBsYXRl
T2JqZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2JqZWN0
TWFwLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmpl
Y3QtPmNlbGxMb2NrKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiB2
YWx1ZSA6IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAppbmRleCA3ZjVhMTEzM2Iz
ZjMxNTViYjY1OWZkZDQ4Y2M3YzM1MjVlNWRjM2JkLi5iNDYzNWIyZWE0Y2Q3YTA5MjZjYjcwMDZk
ZDEyM2Q5NzE5MmQ0ZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb2dyYW1FeGVjdXRhYmxlLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RN
YXAoKSB7IHJldHVybiBtX3RlbXBsYXRlT2JqZWN0TWFwOyB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+
IG1fcHJvZ3JhbUNvZGVCbG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RN
YXA+IG1fdGVtcGxhdGVPYmplY3RNYXA7CisgICAgVGVtcGxhdGVPYmplY3RNYXAgbV90ZW1wbGF0
ZU9iamVjdE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAppbmRleCA5ZGU5N2U3Y2U4
ZmM4OGQ2ZmQzYTE3NTRlZmI5ZGM1MDcyNzg0ZTMzLi5mNGMxNmVkZTNjYzYzMmI0OTVlM2M3NDhm
Njk3MGIzNGFmZGUyZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcApAQCAtNDUyLDcgKzQ1Miw3IEBAIEpTQXJyYXkqIFNjcmlw
dEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFRlbXBsYXRlT2JqZWN0TWFwJiB0
ZW1wbGF0ZU9iamVjdE1hcCA9IGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZtKTsKKyAgICBUZW1w
bGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAgPSB0aGlzLT50ZW1wbGF0ZU9iamVjdE1h
cCgpOwogICAgIFRlbXBsYXRlT2JqZWN0TWFwOjpBZGRSZXN1bHQgcmVzdWx0OwogICAgIHsKICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKQEAgLTQ2NiwyOSArNDY2
LDE5IEBAIEpTQXJyYXkqIFNjcmlwdEV4ZWN1dGFibGU6OmNyZWF0ZVRlbXBsYXRlT2JqZWN0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIHRlbXBsYXRlT2JqZWN0
OwogfQogCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1w
bChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+JiBkZXN0KSAtPiBUZW1wbGF0ZU9i
amVjdE1hcCYKLXsKLSAgICBpZiAoZGVzdCkKLSAgICAgICAgcmV0dXJuICpkZXN0OwotICAgIGF1
dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxUZW1wbGF0ZU9iamVjdE1hcD4oKTsKLSAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgIGRlc3QgPSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJu
ICpkZXN0OwotfQotCi1hdXRvIFNjcmlwdEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0
TWFwKFZNJiB2bSkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCithdXRvIFNjcmlwdEV4ZWN1dGFibGU6
OnRlbXBsYXRlT2JqZWN0TWFwKCkgLT4gVGVtcGxhdGVPYmplY3RNYXAmCiB7CiAgICAgc3dpdGNo
ICh0eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVtcGxh
dGVPYmplY3RNYXAodm0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4odGhpcyktPnRlbXBsYXRlT2JqZWN0TWFwKCk7CiAgICAgY2FzZSBFdmFsRXhlY3V0
YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRo
aXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0ZU9iamVjdE1hcCgpOwogICAgIGNh
c2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+ZW5zdXJlVGVtcGxhdGVPYmplY3RNYXAodm0pOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+dGVtcGxh
dGVPYmplY3RNYXAoKTsKICAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlwZToKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQodHlwZSgpID09IE1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlVHlwZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSo+KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT50ZW1wbGF0ZU9i
amVjdE1hcCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5oCmluZGV4IGQwZjFmY2RkZGE3MTk5MTg1ZTgzZjQxOGVkYzJk
ZGE3MDkwZjhkNWQuLjdhMTk2NzNlNTc2Y2ZjMDdkNjg5YWRjYzk4NjdhYzUzNWVkZDM5MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgK
QEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNDbGVhcmFibGVDb2Rl
KFZNJikgY29uc3Q7CiAKLSAgICBUZW1wbGF0ZU9iamVjdE1hcCYgZW5zdXJlVGVtcGxhdGVPYmpl
Y3RNYXAoVk0mKTsKKyAgICBUZW1wbGF0ZU9iamVjdE1hcCYgdGVtcGxhdGVPYmplY3RNYXAoKTsK
IAogcHJvdGVjdGVkOgogICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiwgVk0mLCBjb25z
dCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBl
LCBib29sIGlzSW5BcnJvd0Z1bmN0aW9uQ29udGV4dCwgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVu
Y3Rpb24sIEV2YWxDb250ZXh0VHlwZSwgSW50cmluc2ljKTsKQEAgLTEzNiw4ICsxMzYsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSBoYXNDYXB0dXJlZFZh
cmlhYmxlczsKICAgICB9CiAKLSAgICBzdGF0aWMgVGVtcGxhdGVPYmplY3RNYXAmIGVuc3VyZVRl
bXBsYXRlT2JqZWN0TWFwSW1wbChzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+JiBk
ZXN0KTsKLQogICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgSW50cmluc2ljIG1faW50cmlu
c2ljIHsgTm9JbnRyaW5zaWMgfTsKICAgICBib29sIG1fZGlkVHJ5VG9FbnRlckluTG9vcCB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oIGIvU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAppbmRleCAwZDExODc3MDM1Yjc3YzE0ZjJkZDA3
YTc4YTdhZmU4NjY3NjRmNTk3Li4zZTI3YTNiMDFjNTNmMTA4NWQxZDY3MzAyNGZkYzBmNzJmZWU4
N2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKQEAgLTMwLDcgKzMwLDYgQEAgbmFtZXNwYWNl
IFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHM+CiBjbGFzcyBIYXNoQ291bnRlZFNldCBmaW5hbCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIHVzaW5nIEltcGxUeXBlID0gSGFz
aE1hcDxWYWx1ZSwgdW5zaWduZWQsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz47CiBwdWJsaWM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNo
TWFwLmgKaW5kZXggMTRlMmJjMzg5NzIxMzBiYzgzMmFjOWE1OGI3ZDVkZTlmNGY3YmRmNi4uYjk4
NzMyOTY3NWViOTk0NzRjMmMxMTJmMTVkNDUwNjczNGMzOTQxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaApAQCAtMzMs
NyArMzMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQYWlyS2V5RXh0
cmFjdG9yIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcs
IHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVk
VHJhaXRzQXJnLCB0eXBlbmFtZSBUYWJsZVRyYWl0c0FyZz4KIGNsYXNzIEhhc2hNYXAgZmluYWwg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKICAgICB1c2luZyBLZXlU
cmFpdHMgPSBLZXlUcmFpdHNBcmc7CiAgICAgdXNpbmcgTWFwcGVkVHJhaXRzID0gTWFwcGVkVHJh
aXRzQXJnOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFNldC5oCmluZGV4IGE0MDJjZTI3Mzc1YWNlYjBjZWIwNGY5ZWI1YTFlNDFhZDJj
NjlmMzMuLmM5YTZlY2RiYWZhMDc2NDlkYmQwYjc4MGM2NjEwODMwOWNiYmRhMDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0
LmgKQEAgLTI5LDcgKzI5LDYgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmcsIHR5cGVuYW1l
IFRhYmxlVHJhaXRzQXJnPgogY2xhc3MgSGFzaFNldCBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJn
OwogICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gVHJhaXRzQXJnOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvSGFzaFRhYmxlLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAppbmRleCA2
MzI2MjUyYzE4OTg1ZDYxODk2YjAwZDE2MjFmM2I4MDFmM2E1YzNmLi44YTNiYjNlMjkwZGFkMDFh
NTRiYmNjZTJhNDhkM2ZkYTVkYWEwNTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
VGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaApAQCAtMTEwLDcgKzExMCw2
IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hUYWJsZSk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVGFibGUsIHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgY2xhc3MgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcs
IFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgY29uc3QgVmFsdWUqLCBjb25zdCBWYWx1ZSY+IHsKLSAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdXNp
bmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVJ
dGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKQEAgLTIyMCw3ICsyMTksNiBAQCBERUNM
QVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogI2VuZGlmCiAg
ICAgICAgIH0KIAotCiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogICAgICAgICB2b2lk
IGNoZWNrVmFsaWRpdHkoY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAogICAgICAg
ICB7CkBAIC0yNDcsNyArMjQ1LDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSGFzaFRhYmxlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBj
bGFzcyBIYXNoVGFibGVJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2Fy
ZF9pdGVyYXRvcl90YWcsIFZhbHVlLCBzdGQ6OnB0cmRpZmZfdCwgVmFsdWUqLCBWYWx1ZSY+IHsK
LSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
dXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJsZTsKICAgICAgICAgdHlwZWRlZiBIYXNoVGFi
bGVJdGVyYXRvcjxIYXNoVGFibGVUeXBlLCBLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBpdGVyYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0xpc3RIYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaXN0SGFzaFNldC5oCmluZGV4
IGQ4MjBhMDkwZTg2N2FjOTQwY2JiMzMxYWE2OGM2MWMwYzQ1ZWY0OTYuLjJjZmQyMzgxZmNlZTFj
ZjBmODM2YzJmMjVjZjNhOGM2ZTNlMDFlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xp
c3RIYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaApAQCAtNTQsNyAr
NTQsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERl
ZmF1bHRIYXNoPFZhbHVlQXJnPj4gY2xhc3MgTGlzdAogICAgIDogcHVibGljIENhbk1ha2VXZWFr
UHRyPExpc3RIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnPiwgV2Vha1B0ckZhY3RvcnlJbml0aWFs
aXphdGlvbjo6RWFnZXI+CiAjZW5kaWYKIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldE5vZGU8VmFsdWVBcmc+IE5vZGU7CiAK
QEAgLTE5Niw3ICsxOTUsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoQXJnPiBzdHJ1Y3QgTGlz
dEhhc2hTZXROb2RlSGFzaEZ1bmN0aW9ucyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZz4gY2xhc3MgTGlzdEhhc2hTZXRJdGVyYXRvciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgogICAgIHR5cGVkZWYgTGlzdEhhc2hT
ZXQ8VmFsdWVBcmcsIEhhc2hBcmc+IExpc3RIYXNoU2V0VHlwZTsKICAgICB0eXBlZGVmIExpc3RI
YXNoU2V0SXRlcmF0b3I8VmFsdWVBcmcsIEhhc2hBcmc+IGl0ZXJhdG9yOwpAQCAtMjQ0LDcgKzI0
Miw2IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgSGFzaEFyZz4gY2xhc3MgTGlzdEhhc2hTZXRDb25zdEl0ZXJhdG9yIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxWYWx1
ZUFyZywgSGFzaEFyZz4gTGlzdEhhc2hTZXRUeXBlOwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRJ
dGVyYXRvcjxWYWx1ZUFyZywgSGFzaEFyZz4gaXRlcmF0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9XZWFrSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvV2Vha0hhc2hTZXQuaAppbmRl
eCAyZjNkMGEzNWRkZGIwOWRhZTAyOTk0MjY3ZjY5MzZkZGQ2YjMwZWYwLi4xM2MwMmEzYjJhZjFj
YzAxMzc4OTQ5NzdhNzhiNTM0MTA1MmEzZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
ZWFrSGFzaFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoU2V0LmgKQEAgLTQxLDcg
KzQxLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ291bnRlcj4gc3RydWN0IEhhc2hUcmFpdHM8UmVm
PFdlYWtQdHJJbXBsPENvdW50ZXI+Pj4gOiBSZWZIYXMKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQ291bnRlciA9IEVtcHR5Q291bnRlcj4KIGNsYXNzIFdlYWtIYXNoU2V0IGZpbmFs
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhh
c2hTZXQ8UmVmPFdlYWtQdHJJbXBsPENvdW50ZXI+Pj4gV2Vha1B0ckltcGxTZXQ7CiAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBXZWFrUHRySW1wbFNldDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDhkOTU3YWY2
OTg2Njc0Yzg0NGEyYzU0MDcxNzc3ZjU5ZjY5MjZjZjIuLjQ0MjkzODExNmZhNmE4MTYxYTI2YTAx
ODlhOTc1MGZjYTAwNDYwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uLmNwcApAQCAtMTMyLDE4ICsxMzIsMTYgQEAgdm9pZCBNZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVEZWxldGVkKFJlZjxNZW1vcnlPYmplY3RTdG9yZT4m
JgogICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShvYmplY3RTdG9y
ZSk7CiB9CiAKLXZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Om9iamVjdFN0b3Jl
Q2xlYXJlZChNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIHN0ZDo6dW5pcXVlX3B0cjxL
ZXlWYWx1ZU1hcD4mJiBrZXlWYWx1ZU1hcCwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+
JiYgb3JkZXJlZEtleXMpCit2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpvYmpl
Y3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBLZXlWYWx1ZU1h
cCYmIGtleVZhbHVlTWFwLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJiBvcmRlcmVk
S2V5cykKIHsKICAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMoJm9iamVjdFN0b3Jl
KSk7CiAKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xlYXJlZEtleVZhbHVlTWFwcy5hZGQoJm9i
amVjdFN0b3JlLCBudWxscHRyKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2xlYXJlZEtleVZh
bHVlTWFwcy5hZGQoJm9iamVjdFN0b3JlLCBXVEZNb3ZlKGtleVZhbHVlTWFwKSk7CiAKICAgICAv
LyBJZiB0aGlzIG9iamVjdCBzdG9yZSBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQgZHVyaW5nIHRo
aXMgdHJhbnNhY3Rpb24sIHdlIHNob3VsZG4ndCByZW1lbWJlciB0aGlzIGNsZWFyaW5nLgogICAg
IGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3ZlKGtleVZhbHVlTWFwKTsKLQogICAgIEFTU0VS
VCghbV9jbGVhcmVkT3JkZXJlZEtleXMuY29udGFpbnMoJm9iamVjdFN0b3JlKSk7CiAgICAgbV9j
bGVhcmVkT3JkZXJlZEtleXMuYWRkKCZvYmplY3RTdG9yZSwgV1RGTW92ZShvcmRlcmVkS2V5cykp
OwogfQpAQCAtMTkxLDE3ICsxODksOCBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uOjpyZWNvcmRWYWx1ZUNoYW5nZWQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdAogICAgIGlm
IChtX2NsZWFyZWRLZXlWYWx1ZU1hcHMuY29udGFpbnMoJm9iamVjdFN0b3JlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBvcmlnaW5hbEFkZFJlc3VsdCA9IG1fb3JpZ2luYWxWYWx1ZXMu
YWRkKCZvYmplY3RTdG9yZSwgbnVsbHB0cik7Ci0gICAgaWYgKG9yaWdpbmFsQWRkUmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgIG9yaWdpbmFsQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1h
a2VVbmlxdWU8S2V5VmFsdWVNYXA+KCk7Ci0KLSAgICBhdXRvKiBtYXAgPSBvcmlnaW5hbEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0KLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC0+
YWRkKGtleSwgVGhyZWFkU2FmZURhdGFCdWZmZXIoKSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHZhbHVlKQorICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9vcmlnaW5hbFZhbHVlcy5hZGQoJm9iamVjdFN0b3JlLCBLZXlWYWx1ZU1hcCB7
IH0pLml0ZXJhdG9yLT52YWx1ZS5hZGQoa2V5LCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB7IH0pOwor
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiB2YWx1ZSkKICAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9ICp2YWx1ZTsKIH0KIApAQCAtMjQ2LDE2ICsyMzUsMTIgQEAgdm9p
ZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgICAgICBvYmplY3RT
dG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobV9vcmlnaW5hbEtleUdlbmVyYXRvcnMuZ2V0KG9i
amVjdFN0b3JlLmdldCgpKSk7CiAKICAgICAgICAgYXV0byBjbGVhcmVkS2V5VmFsdWVNYXAgPSBt
X2NsZWFyZWRLZXlWYWx1ZU1hcHMudGFrZShvYmplY3RTdG9yZS5nZXQoKSk7Ci0gICAgICAgIGlm
IChjbGVhcmVkS2V5VmFsdWVNYXApIHsKKyAgICAgICAgaWYgKCFjbGVhcmVkS2V5VmFsdWVNYXAu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9jbGVhcmVkT3JkZXJlZEtleXMuY29u
dGFpbnMob2JqZWN0U3RvcmUuZ2V0KCkpKTsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXBs
YWNlS2V5VmFsdWVTdG9yZShXVEZNb3ZlKGNsZWFyZWRLZXlWYWx1ZU1hcCksIG1fY2xlYXJlZE9y
ZGVyZWRLZXlzLnRha2Uob2JqZWN0U3RvcmUuZ2V0KCkpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGF1dG8ga2V5VmFsdWVNYXAgPSBtX29yaWdpbmFsVmFsdWVzLnRha2Uob2JqZWN0U3RvcmUuZ2V0
KCkpOwotICAgICAgICBpZiAoIWtleVZhbHVlTWFwKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6ICprZXlWYWx1ZU1hcCkgeworICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9vcmlnaW5hbFZhbHVlcy50YWtlKG9iamVjdFN0b3JlLmdl
dCgpKSkgewogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRlbGV0ZVJlY29yZChlbnRyeS5rZXkp
OwogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZFJlY29yZCgqdGhpcywgZW50cnkua2V5LCB7
IGVudHJ5LnZhbHVlIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi5oCmluZGV4IDJjMGFhMjdkODM0ZjZmOTM1MGVjNmMwMDdmOWVlNzFhZGI3
YTA0YTUuLjUwNzM3NzQ3ZGEzZTE0NzVjOWU2NGQ0OTRiZWNiNzJkNWI5NmJiYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oCkBAIC02MSw3ICs2MSw3IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlY29yZFZhbHVlQ2hhbmdlZChNZW1vcnlPYmplY3RT
dG9yZSYsIGNvbnN0IElEQktleURhdGEmLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciopOwogICAgIHZv
aWQgb2JqZWN0U3RvcmVEZWxldGVkKFJlZjxNZW1vcnlPYmplY3RTdG9yZT4mJik7Ci0gICAgdm9p
ZCBvYmplY3RTdG9yZUNsZWFyZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBzdGQ6OnVuaXF1ZV9wdHI8
S2V5VmFsdWVNYXA+JiYsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmKTsKKyAgICB2
b2lkIG9iamVjdFN0b3JlQ2xlYXJlZChNZW1vcnlPYmplY3RTdG9yZSYsIEtleVZhbHVlTWFwJiYs
IHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmKTsKICAgICB2b2lkIG9iamVjdFN0b3Jl
UmVuYW1lZChNZW1vcnlPYmplY3RTdG9yZSYsIGNvbnN0IFN0cmluZyYgb2xkTmFtZSk7CiAgICAg
dm9pZCBpbmRleFJlbmFtZWQoTWVtb3J5SW5kZXgmLCBjb25zdCBTdHJpbmcmIG9sZE5hbWUpOwog
ICAgIHZvaWQgaW5kZXhDbGVhcmVkKE1lbW9yeUluZGV4Jiwgc3RkOjp1bmlxdWVfcHRyPEluZGV4
VmFsdWVTdG9yZT4mJik7CkBAIC05Miw4ICs5Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxN
ZW1vcnlPYmplY3RTdG9yZSosIHVpbnQ2NF90PiBtX29yaWdpbmFsS2V5R2VuZXJhdG9yczsKICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lbW9yeU9iamVjdFN0b3JlPj4gbV9kZWxldGVkT2Jq
ZWN0U3RvcmVzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVtb3J5SW5kZXg+PiBtX2Rl
bGV0ZWRJbmRleGVzOwotICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBzdGQ6OnVuaXF1
ZV9wdHI8S2V5VmFsdWVNYXA+PiBtX29yaWdpbmFsVmFsdWVzOwotICAgIEhhc2hNYXA8TWVtb3J5
T2JqZWN0U3RvcmUqLCBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+PiBtX2NsZWFyZWRLZXlW
YWx1ZU1hcHM7CisgICAgSGFzaE1hcDxNZW1vcnlPYmplY3RTdG9yZSosIEtleVZhbHVlTWFwPiBt
X29yaWdpbmFsVmFsdWVzOworICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBLZXlWYWx1
ZU1hcD4gbV9jbGVhcmVkS2V5VmFsdWVNYXBzOwogICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3Rv
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4+IG1fY2xlYXJlZE9yZGVyZWRLZXlz
OwogICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBTdHJpbmc+IG1fb3JpZ2luYWxPYmpl
Y3RTdG9yZU5hbWVzOwogICAgIEhhc2hNYXA8TWVtb3J5SW5kZXgqLCBTdHJpbmc+IG1fb3JpZ2lu
YWxJbmRleE5hbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKaW5kZXggMDNjMzExZGZmN2Iy
YzI0MzQ5ZDI3Y2E4NjM0N2VjOWRiZmRlN2U5Yi4uMzA3MzRmZDRkOWZkMTUyNTM1ODIwZTFmMjli
YTIxM2E2NTJkMDNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCkBAIC0xNzAsMTAgKzE3
MCw3IEBAIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZUFsbEluZGV4ZXMoTWVtb3J5QmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIGJvb2wgTWVtb3J5T2JqZWN0U3RvcmU6
OmNvbnRhaW5zUmVjb3JkKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsKLSAgICBpZiAoIW1fa2V5
VmFsdWVTdG9yZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fa2V5VmFs
dWVTdG9yZS0+Y29udGFpbnMoa2V5KTsKKyAgICByZXR1cm4gbV9rZXlWYWx1ZVN0b3JlLmNvbnRh
aW5zKGtleSk7CiB9CiAKIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmNsZWFyKCkKQEAgLTE4OSw3
ICsxODYsNyBAQCB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpjbGVhcigpCiAgICAgICAgIGN1cnNv
ci0+b2JqZWN0U3RvcmVDbGVhcmVkKCk7CiB9CiAKLXZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OnJl
cGxhY2VLZXlWYWx1ZVN0b3JlKHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4mJiBzdG9yZSwg
c3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+JiYgb3JkZXJlZEtleXMpCit2b2lkIE1lbW9y
eU9iamVjdFN0b3JlOjpyZXBsYWNlS2V5VmFsdWVTdG9yZShLZXlWYWx1ZU1hcCYmIHN0b3JlLCBz
dGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJiBvcmRlcmVkS2V5cykKIHsKICAgICBBU1NF
UlQobV93cml0ZVRyYW5zYWN0aW9uKTsKICAgICBBU1NFUlQobV93cml0ZVRyYW5zYWN0aW9uLT5p
c0Fib3J0aW5nKCkpOwpAQCAtMjAyLDIzICsxOTksMTQgQEAgdm9pZCBNZW1vcnlPYmplY3RTdG9y
ZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURhdGEmIGtleSkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgQVNTRVJUKG1f
d3JpdGVUcmFuc2FjdGlvbik7Ci0KLSAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkgewotICAgICAg
ICBtX3dyaXRlVHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hhbmdlZCgqdGhpcywga2V5LCBudWxs
cHRyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX29yZGVyZWRLZXlz
KTsKLQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2tleVZhbHVlU3RvcmUtPmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9rZXlWYWx1ZVN0b3JlLT5lbmQoKSkgeworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2tleVZhbHVlU3RvcmUuZmluZChrZXkpOworICAgIGlmIChpdGVyYXRvciA9PSBt
X2tleVZhbHVlU3RvcmUuZW5kKCkpIHsKICAgICAgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNv
cmRWYWx1ZUNoYW5nZWQoKnRoaXMsIGtleSwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBtX3dyaXRlVHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hhbmdlZCgqdGhpcywg
a2V5LCAmaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBtX2tleVZhbHVlU3RvcmUtPnJlbW92ZShpdGVy
YXRvcik7CisgICAgbV9rZXlWYWx1ZVN0b3JlLnJlbW92ZShpdGVyYXRvcik7CiAgICAgbV9vcmRl
cmVkS2V5cy0+ZXJhc2Uoa2V5KTsKIAogICAgIHVwZGF0ZUluZGV4ZXNGb3JEZWxldGVSZWNvcmQo
a2V5KTsKQEAgLTI2MSwxNiArMjQ5LDEzIEBAIElEQkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjph
ZGRSZWNvcmQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uCiAKICAg
ICBBU1NFUlQobV93cml0ZVRyYW5zYWN0aW9uKTsKICAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0
aW9uLCBtX3dyaXRlVHJhbnNhY3Rpb24gPT0gJnRyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1f
a2V5VmFsdWVTdG9yZSB8fCAhbV9rZXlWYWx1ZVN0b3JlLT5jb250YWlucyhrZXlEYXRhKSk7Cisg
ICAgQVNTRVJUKCFtX2tleVZhbHVlU3RvcmUuY29udGFpbnMoa2V5RGF0YSkpOwogICAgIEFTU0VS
VCghbV9vcmRlcmVkS2V5cyB8fCBtX29yZGVyZWRLZXlzLT5maW5kKGtleURhdGEpID09IG1fb3Jk
ZXJlZEtleXMtPmVuZCgpKTsKIAotICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKSB7Ci0gICAgICAg
IEFTU0VSVCghbV9vcmRlcmVkS2V5cyk7Ci0gICAgICAgIG1fa2V5VmFsdWVTdG9yZSA9IG1ha2VV
bmlxdWU8S2V5VmFsdWVNYXA+KCk7CisgICAgaWYgKCFtX29yZGVyZWRLZXlzKQogICAgICAgICBt
X29yZGVyZWRLZXlzID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8SURCS2V5RGF0
YVNldD4oKTsKLSAgICB9CiAKLSAgICBhdXRvIG1hcFJlc3VsdCA9IG1fa2V5VmFsdWVTdG9yZS0+
c2V0KGtleURhdGEsIHZhbHVlLmRhdGEoKSk7CisgICAgYXV0byBtYXBSZXN1bHQgPSBtX2tleVZh
bHVlU3RvcmUuc2V0KGtleURhdGEsIHZhbHVlLmRhdGEoKSk7CiAgICAgQVNTRVJUKG1hcFJlc3Vs
dC5pc05ld0VudHJ5KTsKICAgICBhdXRvIGxpc3RSZXN1bHQgPSBtX29yZGVyZWRLZXlzLT5pbnNl
cnQoa2V5RGF0YSk7CiAgICAgQVNTRVJUKGxpc3RSZXN1bHQuc2Vjb25kKTsKQEAgLTI3OCw3ICsy
NjMsNyBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6YWRkUmVjb3JkKE1lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbgogICAgIC8vIElmIHRoZXJlIHdhcyBhbiBl
cnJvciBpbmRleGluZyB0aGlzIGFkZGl0aW9uLCB0aGVuIHJldmVydCBpdC4KICAgICBhdXRvIGVy
cm9yID0gdXBkYXRlSW5kZXhlc0ZvclB1dFJlY29yZChrZXlEYXRhLCBpbmRleEtleXMpOwogICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9rZXlWYWx1ZVN0b3JlLT5yZW1vdmUo
bWFwUmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgbV9rZXlWYWx1ZVN0b3JlLnJlbW92ZShtYXBS
ZXN1bHQuaXRlcmF0b3IpOwogICAgICAgICBtX29yZGVyZWRLZXlzLT5lcmFzZShsaXN0UmVzdWx0
LmZpcnN0KTsKICAgICB9IGVsc2UKICAgICAgICAgdXBkYXRlQ3Vyc29yc0ZvclB1dFJlY29yZChs
aXN0UmVzdWx0LmZpcnN0KTsKQEAgLTMzNSwxMiArMzIwLDkgQEAgSURCRXJyb3IgTWVtb3J5T2Jq
ZWN0U3RvcmU6OnVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5
LCBjb24KIAogSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhp
c3RpbmdSZWNvcmRzKE1lbW9yeUluZGV4JiBpbmRleCkKIHsKLSAgICBpZiAoIW1fa2V5VmFsdWVT
dG9yZSkKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKLQogICAgIEpTTG9ja0hvbGRlciBs
b2NrZXIobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+dm0oKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0ZXJhdG9yIDogKm1fa2V5VmFsdWVTdG9yZSkgeworICAgIGZvciAoY29uc3QgYXV0byYg
aXRlcmF0b3IgOiBtX2tleVZhbHVlU3RvcmUpIHsKICAgICAgICAgYXV0byBqc1ZhbHVlID0gZGVz
ZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShtX3NlcmlhbGl6YXRpb25Db250ZXh0LT5nbG9iYWxP
YmplY3QoKSwgaXRlcmF0b3IudmFsdWUpOwogICAgICAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKQEAgLTM2OSw3ICsz
NTEsNyBAQCB1aW50NjRfdCBNZW1vcnlPYmplY3RTdG9yZTo6Y291bnRGb3JLZXlSYW5nZSh1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQgogICAgICAgICByZXR1cm4gaW5kZXgtPmNv
dW50Rm9yS2V5UmFuZ2UoaW5SYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKCFtX2tleVZhbHVlU3Rv
cmUpCisgICAgaWYgKG1fa2V5VmFsdWVTdG9yZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgdWludDY0X3QgY291bnQgPSAwOwpAQCAtMzg5LDEwICszNzEsNyBAQCB1aW50NjRf
dCBNZW1vcnlPYmplY3RTdG9yZTo6Y291bnRGb3JLZXlSYW5nZSh1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IElEQgogCiBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBNZW1vcnlPYmplY3RTdG9y
ZTo6dmFsdWVGb3JLZXkoY29uc3QgSURCS2V5RGF0YSYga2V5KSBjb25zdAogewotICAgIGlmICgh
bV9rZXlWYWx1ZVN0b3JlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIG1fa2V5
VmFsdWVTdG9yZS0+Z2V0KGtleSk7CisgICAgcmV0dXJuIG1fa2V5VmFsdWVTdG9yZS5nZXQoa2V5
KTsKIH0KIAogVGhyZWFkU2FmZURhdGFCdWZmZXIgTWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9y
S2V5UmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpIGNvbnN0CkBAIC00
MDMsOCArMzgyLDcgQEAgVGhyZWFkU2FmZURhdGFCdWZmZXIgTWVtb3J5T2JqZWN0U3RvcmU6OnZh
bHVlRm9yS2V5UmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJgogICAgIGlmIChrZXkuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOwogCi0gICAgQVNTRVJU
KG1fa2V5VmFsdWVTdG9yZSk7Ci0gICAgcmV0dXJuIG1fa2V5VmFsdWVTdG9yZS0+Z2V0KGtleSk7
CisgICAgcmV0dXJuIG1fa2V5VmFsdWVTdG9yZS5nZXQoa2V5KTsKIH0KIAogdm9pZCBNZW1vcnlP
YmplY3RTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdl
RGF0YSwgT3B0aW9uYWw8dWludDMyX3Q+IGNvdW50LCBJbmRleGVkREI6OkdldEFsbFR5cGUgdHlw
ZSwgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIGNvbnN0CkBAIC00NDUsMTAgKzQyMywxMCBAQCBJ
REJHZXRSZXN1bHQgTWVtb3J5T2JqZWN0U3RvcmU6OmluZGV4VmFsdWVGb3JLZXlSYW5nZSh1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsCiAKIElEQktleURhdGEgTWVtb3J5T2JqZWN0U3RvcmU6Omxv
d2VzdEtleVdpdGhSZWNvcmRJblJhbmdlKGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhKSBjb25zdAogewotICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQorICAgIGlmIChtX2tleVZh
bHVlU3RvcmUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGtleVJh
bmdlRGF0YS5pc0V4YWN0bHlPbmVLZXkoKSAmJiBtX2tleVZhbHVlU3RvcmUtPmNvbnRhaW5zKGtl
eVJhbmdlRGF0YS5sb3dlcktleSkpCisgICAgaWYgKGtleVJhbmdlRGF0YS5pc0V4YWN0bHlPbmVL
ZXkoKSAmJiBtX2tleVZhbHVlU3RvcmUuY29udGFpbnMoa2V5UmFuZ2VEYXRhLmxvd2VyS2V5KSkK
ICAgICAgICAgcmV0dXJuIGtleVJhbmdlRGF0YS5sb3dlcktleTsKIAogICAgIEFTU0VSVChtX29y
ZGVyZWRLZXlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKaW5kZXggNDM0OTlkNWJjYmVjNjI2YWQx
MWM0NTgyYjZhYjY2NGRhMjZkZDAxOC4uNDNhNTNlZTk2ZmI3NjU1ODJkNTJiY2FhZTlkN2VkMjNj
MDA1OTM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeU9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0S2V5R2VuZXJhdG9yVmFsdWUodWludDY0X3QgdmFsdWUpIHsgbV9rZXlH
ZW5lcmF0b3JWYWx1ZSA9IHZhbHVlOyB9CiAKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBy
ZXBsYWNlS2V5VmFsdWVTdG9yZShzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+JiYsIHN0ZDo6
dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmKTsKKyAgICB2b2lkIHJlcGxhY2VLZXlWYWx1ZVN0
b3JlKEtleVZhbHVlTWFwJiYsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmKTsKIAog
ICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIHZhbHVlRm9yS2V5KGNvbnN0IElEQktleURhdGEmKSBj
b25zdDsKICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUZvcktleVJhbmdlKGNvbnN0IElE
QktleVJhbmdlRGF0YSYpIGNvbnN0OwpAQCAtMTI2LDcgKzEyNiw3IEBAIHByaXZhdGU6CiAgICAg
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24qIG1fd3JpdGVUcmFuc2FjdGlvbiB7IG51bGxw
dHIgfTsKICAgICB1aW50NjRfdCBtX2tleUdlbmVyYXRvclZhbHVlIHsgMSB9OwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPiBtX2tleVZhbHVlU3RvcmU7CisgICAgS2V5VmFsdWVN
YXAgbV9rZXlWYWx1ZVN0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiBt
X29yZGVyZWRLZXlzOwogCiAgICAgdm9pZCB1bnJlZ2lzdGVySW5kZXgoTWVtb3J5SW5kZXgmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcAppbmRleCAyOTEwODNiMWYzOTcyZDI2OTdiOTViZjVkNGRlNzFmYTk5MTEyMDNh
Li4xMzY3ZDE2N2QxZTUwZWZmZGZhNWU4MTE5NjQzMzk3ODYzNzNiNTlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3Bw
CkBAIC01MjksMTIgKzUyOSwxMCBAQCBWZWN0b3I8UmVmPERhdGFiYXNlPj4gRGF0YWJhc2VUcmFj
a2VyOjpvcGVuRGF0YWJhc2VzKCkKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgb3BlbkRhdGFi
YXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKIAotICAgICAgICBpZiAobV9vcGVu
RGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbmFtZU1hcCA6IG1fb3BlbkRh
dGFiYXNlTWFwLT52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2V0IDog
bmFtZU1hcC0+dmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRh
YmFzZSA6ICpzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFwcGVu
ZCgqZGF0YWJhc2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBuYW1l
TWFwIDogbV9vcGVuRGF0YWJhc2VNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgc2V0IDogbmFtZU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBzZXQpCisgICAgICAgICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYXBwZW5k
KCpkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NDUsMjUg
KzU0MywxNCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNl
JiBkYXRhYmFzZSkKIHsKICAgICBMb2NrSG9sZGVyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVu
RGF0YWJhc2VNYXBHdWFyZCk7CiAKLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAgICAg
ICBtX29wZW5EYXRhYmFzZU1hcCA9IG1ha2VVbmlxdWU8RGF0YWJhc2VPcmlnaW5NYXA+KCk7Ci0K
ICAgICBhdXRvIG9yaWdpbiA9IGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICBhdXRv
KiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChvcmlnaW4pOwotICAgIGlmICghbmFt
ZU1hcCkgewotICAgICAgICBuYW1lTWFwID0gbmV3IERhdGFiYXNlTmFtZU1hcDsKLSAgICAgICAg
bV9vcGVuRGF0YWJhc2VNYXAtPmFkZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCksIG5hbWVNYXApOwot
ICAgIH0KLQotICAgIFN0cmluZyBuYW1lID0gZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xh
dGVkQ29weSgpOwotICAgIGF1dG8qIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwot
ICAgIGlmICghZGF0YWJhc2VTZXQpIHsKLSAgICAgICAgZGF0YWJhc2VTZXQgPSBuZXcgRGF0YWJh
c2VTZXQ7Ci0gICAgICAgIG5hbWVNYXAtPnNldChuYW1lLmlzb2xhdGVkQ29weSgpLCBkYXRhYmFz
ZVNldCk7Ci0gICAgfQorICAgIC8vIFdlIHVzZSBmaW5kIGJlZm9yZSBhZGQgaGVyZSB0byBhdm9p
ZCBtYWtpbmcgYW4gaXNvbGF0ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUuCisgICAg
YXV0byBpdGVyYXRvciA9IG1fb3BlbkRhdGFiYXNlTWFwLmZpbmQob3JpZ2luKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9vcGVuRGF0YWJhc2VNYXAuZW5kKCkpCisgICAgICAgIGl0ZXJhdG9yID0g
bV9vcGVuRGF0YWJhc2VNYXAuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgRGF0YWJhc2VOYW1l
TWFwIHsgfSkuaXRlcmF0b3I7CiAKLSAgICBkYXRhYmFzZVNldC0+YWRkKCZkYXRhYmFzZSk7Cisg
ICAgaXRlcmF0b3ItPnZhbHVlLmFkZChkYXRhYmFzZS5zdHJpbmdJZGVudGlmaWVySXNvbGF0ZWRD
b3B5KCksIERhdGFiYXNlU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZCgmZGF0YWJhc2UpOwog
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJBZGRlZCBvcGVuIERhdGFiYXNlICVzICglcClcbiIsIGRh
dGFiYXNlLnN0cmluZ0lkZW50aWZpZXJJc29sYXRlZENvcHkoKS51dGY4KCkuZGF0YSgpLCAmZGF0
YWJhc2UpOwogfQpAQCAtNTcyLDM5ICs1NTksMzAgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJl
bW92ZU9wZW5EYXRhYmFzZShEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAgICAgTG9ja0hvbGRlciBv
cGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCi0gICAgaWYgKCFt
X29wZW5EYXRhYmFzZU1hcCkgeworICAgIGF1dG8gaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFzZU1h
cC5maW5kKGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmIChpdGVyYXRvciA9PSBt
X29wZW5EYXRhYmFzZU1hcC5lbmQoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9
IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2Uuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAg
aWYgKCFuYW1lTWFwKSB7CisgICAgYXV0byBpbm5lckl0ZXJhdG9yID0gaXRlcmF0b3ItPnZhbHVl
LmZpbmQoZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpKTsKKyAgICBpZiAo
aW5uZXJJdGVyYXRvciA9PSBpdGVyYXRvci0+dmFsdWUuZW5kKCkpIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgbmFt
ZSA9IGRhdGFiYXNlLnN0cmluZ0lkZW50aWZpZXJJc29sYXRlZENvcHkoKTsKLSAgICBhdXRvKiBk
YXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZGF0YWJhc2VTZXQtPnJlbW92ZSgmZGF0YWJhc2UpOworICAgIGlubmVySXRlcmF0b3It
PnZhbHVlLnJlbW92ZSgmZGF0YWJhc2UpOwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJSZW1vdmVk
IG9wZW4gRGF0YWJhc2UgJXMgKCVwKVxuIiwgZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xh
dGVkQ29weSgpLnV0ZjgoKS5kYXRhKCksICZkYXRhYmFzZSk7CiAKLSAgICBpZiAoIWRhdGFiYXNl
U2V0LT5pc0VtcHR5KCkpCisgICAgaWYgKCFpbm5lckl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG5hbWVNYXAtPnJlbW92ZShuYW1lKTsKLSAgICBkZWxl
dGUgZGF0YWJhc2VTZXQ7Ci0KLSAgICBpZiAoIW5hbWVNYXAtPmlzRW1wdHkoKSkKKyAgICBpdGVy
YXRvci0+dmFsdWUucmVtb3ZlKGlubmVySXRlcmF0b3IpOworICAgIGlmICghaXRlcmF0b3ItPnZh
bHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9vcGVuRGF0YWJhc2VNYXAt
PnJlbW92ZShkYXRhYmFzZS5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBkZWxldGUgbmFtZU1hcDsK
KyAgICBtX29wZW5EYXRhYmFzZU1hcC5yZW1vdmUoaXRlcmF0b3IpOwogfQogCiBSZWZQdHI8T3Jp
Z2luTG9jaz4gRGF0YWJhc2VUcmFja2VyOjpvcmlnaW5Mb2NrRm9yKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3JpZ2luKQpAQCAtOTU1LDE0ICs5MzMsMTEgQEAgdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmln
aW4sIGMKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwogCi0gICAg
Ly8gV2UgZG9uJ3QgdXNlIEhhc2hNYXA6OmVuc3VyZSBoZXJlIHRvIGF2b2lkIG1ha2luZyBhbiBp
c29sYXRlZCBjb3B5IG9mIHRoZSBvcmlnaW4gZXZlcnkgdGltZS4KLSAgICBhdXRvKiBuYW1lU2V0
ID0gbV9iZWluZ0NyZWF0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgaWYgKCFuYW1lU2V0KSB7Ci0gICAg
ICAgIGF1dG8gb3duZWRTZXQgPSBtYWtlVW5pcXVlPEhhc2hDb3VudGVkU2V0PFN0cmluZz4+KCk7
Ci0gICAgICAgIG5hbWVTZXQgPSBvd25lZFNldC5nZXQoKTsKLSAgICAgICAgbV9iZWluZ0NyZWF0
ZWQuYWRkKG9yaWdpbi5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShvd25lZFNldCkpOwotICAgIH0K
LSAgICBuYW1lU2V0LT5hZGQobmFtZS5pc29sYXRlZENvcHkoKSk7CisgICAgLy8gV2UgdXNlIGZp
bmQgYmVmb3JlIGFkZCBoZXJlIHRvIGF2b2lkIG1ha2luZyBhbiBpc29sYXRlZCBjb3B5IG9mIHRo
ZSBvcmlnaW4gZXZlcnkgdGltZS4KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9iZWluZ0NyZWF0ZWQu
ZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyYXRvciA9PSBtX2JlaW5nQ3JlYXRlZC5lbmQoKSkK
KyAgICAgICAgaXRlcmF0b3IgPSBtX2JlaW5nQ3JlYXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+IHsgfSkuaXRlcmF0b3I7CisgICAgaXRlcmF0b3It
PnZhbHVlLmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNr
ZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC05NzUsNyArOTUwLDcgQEAgdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OmRvbmVDcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3Jp
Z2luLCBjb24KICAgICBpZiAoaXRlcmF0b3IgPT0gbV9iZWluZ0NyZWF0ZWQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8mIGNvdW50ZWRTZXQgPSAqaXRlcmF0b3ItPnZhbHVlOwor
ICAgIGF1dG8mIGNvdW50ZWRTZXQgPSBpdGVyYXRvci0+dmFsdWU7CiAgICAgQVNTRVJUKGNvdW50
ZWRTZXQuY29udGFpbnMobmFtZSkpOwogCiAgICAgaWYgKGNvdW50ZWRTZXQucmVtb3ZlKG5hbWUp
ICYmIGNvdW50ZWRTZXQuaXNFbXB0eSgpKQpAQCAtOTg3LDcgKzk2Miw3IEBAIGJvb2wgRGF0YWJh
c2VUcmFja2VyOjpjcmVhdGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3Jp
Z2luLCBjb25zdCBTCiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKIAog
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7Ci0gICAgcmV0
dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdDcmVhdGVkLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+
Y29udGFpbnMobmFtZSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdDcmVhdGVkLmVu
ZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9vbCBEYXRhYmFz
ZVRyYWNrZXI6OmNhbkRlbGV0ZURhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMDAxLDE1ICs5NzYsMTIgQEAgdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OnJlY29yZERlbGV0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5E
YXRhJiBvcmlnaW4sIGMKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwog
ICAgIEFTU0VSVChjYW5EZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpKTsKIAotICAgIC8vIFdl
IGRvbid0IHVzZSBIYXNoTWFwOjplbnN1cmUgaGVyZSB0byBhdm9pZCBtYWtpbmcgYW4gaXNvbGF0
ZWQgY29weSBvZiB0aGUgb3JpZ2luIGV2ZXJ5IHRpbWUuCi0gICAgYXV0byogbmFtZVNldCA9IG1f
YmVpbmdEZWxldGVkLmdldChvcmlnaW4pOwotICAgIGlmICghbmFtZVNldCkgewotICAgICAgICBh
dXRvIG93bmVkU2V0ID0gbWFrZVVuaXF1ZTxIYXNoU2V0PFN0cmluZz4+KCk7Ci0gICAgICAgIG5h
bWVTZXQgPSBvd25lZFNldC5nZXQoKTsKLSAgICAgICAgbV9iZWluZ0RlbGV0ZWQuYWRkKG9yaWdp
bi5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShvd25lZFNldCkpOwotICAgIH0KLSAgICBBU1NFUlQo
IW5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpKTsKLSAgICBuYW1lU2V0LT5hZGQobmFtZS5pc29sYXRl
ZENvcHkoKSk7CisgICAgLy8gV2UgdXNlIGZpbmQgYmVmb3JlIGFkZCBoZXJlIHRvIGF2b2lkIG1h
a2luZyBhbiBpc29sYXRlZCBjb3B5IG9mIHRoZSBvcmlnaW4gZXZlcnkgdGltZS4KKyAgICBhdXRv
IGl0ZXJhdG9yID0gbV9iZWluZ0RlbGV0ZWQuZmluZChvcmlnaW4pOworICAgIGlmIChpdGVyYXRv
ciA9PSBtX2JlaW5nRGVsZXRlZC5lbmQoKSkKKyAgICAgICAgaXRlcmF0b3IgPSBtX2JlaW5nRGVs
ZXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpLCBIYXNoU2V0PFN0cmluZz4geyB9KS5pdGVy
YXRvcjsKKyAgICBBU1NFUlQoIWl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKSk7CisgICAg
aXRlcmF0b3ItPnZhbHVlLmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKIH0KIAogdm9pZCBEYXRh
YmFzZVRyYWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMDIxLDIzICs5OTMsMjMgQEAgdm9p
ZCBEYXRhYmFzZVRyYWNrZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3JpZ2luLCBjb24KICAgICBpZiAoaXRlcmF0b3IgPT0gbV9iZWluZ0RlbGV0ZWQu
ZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpdGVyYXRvci0+dmFsdWUtPmNv
bnRhaW5zKG5hbWUpKTsKLSAgICBpdGVyYXRvci0+dmFsdWUtPnJlbW92ZShuYW1lKTsKLSAgICBp
ZiAoaXRlcmF0b3ItPnZhbHVlLT5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGl0ZXJhdG9yLT52YWx1
ZS5jb250YWlucyhuYW1lKSk7CisgICAgaXRlcmF0b3ItPnZhbHVlLnJlbW92ZShuYW1lKTsKKyAg
ICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgbV9iZWluZ0RlbGV0ZWQu
cmVtb3ZlKGl0ZXJhdG9yKTsKIH0KIAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmlzRGVsZXRpbmdE
YXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRyeUxvY2soKSk7Ci0gICAgYXV0
byogbmFtZVNldCA9IG1fYmVpbmdEZWxldGVkLmdldChvcmlnaW4pOwotICAgIHJldHVybiBuYW1l
U2V0ICYmIG5hbWVTZXQtPmNvbnRhaW5zKG5hbWUpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Jl
aW5nRGVsZXRlZC5maW5kKG9yaWdpbik7CisgICAgcmV0dXJuIGl0ZXJhdG9yICE9IG1fYmVpbmdE
ZWxldGVkLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS5jb250YWlucyhuYW1lKTsKIH0KIAogYm9v
bCBEYXRhYmFzZVRyYWNrZXI6OmNhbkRlbGV0ZU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmIG9yaWdpbikKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFyZC50cnlMb2NrKCkpOwot
ICAgIHJldHVybiAhKGlzRGVsZXRpbmdPcmlnaW4ob3JpZ2luKSB8fCBtX2JlaW5nQ3JlYXRlZC5n
ZXQob3JpZ2luKSk7CisgICAgcmV0dXJuICEoaXNEZWxldGluZ09yaWdpbihvcmlnaW4pIHx8IG1f
YmVpbmdDcmVhdGVkLmNvbnRhaW5zKG9yaWdpbikpOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tl
cjo6aXNEZWxldGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbikKQEAg
LTExMzMsMTIgKzExMDUsMTAgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNl
RmlsZShjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgY29uc3QKICAgICAvLyBkdXJp
bmcgdGhlIHN5bmNocm9ub3VzIERhdGFiYXNlVGhyZWFkIGNhbGwgaXQgdHJpZ2dlcnMuCiAgICAg
ewogICAgICAgICBMb2NrSG9sZGVyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VN
YXBHdWFyZCk7Ci0gICAgICAgIGlmIChtX29wZW5EYXRhYmFzZU1hcCkgewotICAgICAgICAgICAg
aWYgKGF1dG8qIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdpbikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYXV0byogZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6ICpkYXRhYmFzZVNl
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCpkYXRh
YmFzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1f
b3BlbkRhdGFiYXNlTWFwLmZpbmQob3JpZ2luKTsgaXRlcmF0b3IgIT0gbV9vcGVuRGF0YWJhc2VN
YXAuYmVnaW4oKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gaW5uZXJJdGVyYXRvciA9IGl0ZXJh
dG9yLT52YWx1ZS5maW5kKG5hbWUpOyBpbm5lckl0ZXJhdG9yICE9IGl0ZXJhdG9yLT52YWx1ZS5l
bmQoKSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBpbm5lckl0ZXJh
dG9yLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNlcy5hcHBlbmQo
KmRhdGFiYXNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTExOTAsNDYg
KzExNjAsMzcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRh
YmFzZXMoKQogICAgIC8vIGR1cmluZyB0aGUgc3luY2hyb25vdXMgRGF0YWJhc2VUaHJlYWQgY2Fs
bCBpdCB0cmlnZ2Vycy4KICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgb3BlbkRhdGFiYXNlTWFw
TG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICAgICAgaWYgKG1fb3BlbkRhdGFiYXNl
TWFwKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9wZW5EYXRhYmFzZSA6ICptX29wZW5EYXRh
YmFzZU1hcCkgewotICAgICAgICAgICAgICAgIGF1dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5r
ZXk7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBv
cGVuRGF0YWJhc2UudmFsdWU7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZGVsZXRl
ZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luOwotCi0gICAgICAgICAgICAgICAgLy8gTG9vcCB0
aHJvdWdoIGFsbCBvcGVuZWQgZGF0YWJhc2VzIGluIHRoaXMgb3JpZ2luLiAgR2V0IHRoZSBjdXJy
ZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNoIGRhdGFiYXNlIGFuZCBzZWUgaWYKLSAgICAg
ICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRjaGVzIHRoZSBwYXRoIHN0b3JlZCBpbiB0aGUgb3Bl
bmVkIGRhdGFiYXNlIG9iamVjdC4KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNl
cyA6ICpkYXRhYmFzZU5hbWVNYXApIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFi
YXNlTmFtZSA9IGRhdGFiYXNlcy5rZXk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRh
YmFzZUZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBzdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2VzIFdI
RVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Il9zKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkYXRhYmFzZU5hbWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZERlbGV0ZWREYXRhYmFz
ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRiIDogKmRhdGFiYXNl
cy52YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvbmUgaWYgdGhp
cyBkYXRhYmFzZSBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBkZWxldGVkLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGRiLT5kZWxldGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgZGF0YWJhc2UgaGFzIGJlZW4gZGVsZXRlZCBvciBpZiBpdHMg
ZGF0YWJhc2UgZmlsZSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB2ZXJzaW9uLCB0aGlz
IGRhdGFiYXNlIGlzIG5vIGxvbmdlciB2YWxpZCBhbmQgaXQgc2hvdWxkIGJlIG1hcmtlZCBhcyBk
ZWxldGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlRmlsZU5hbWUuaXNO
dWxsKCkgfHwgZGF0YWJhc2VGaWxlTmFtZSAhPSBGaWxlU3lzdGVtOjpwYXRoRmlsZU5hbWUoZGIt
PmZpbGVOYW1lSXNvbGF0ZWRDb3B5KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlZERhdGFiYXNlcy5hcHBlbmQoZGIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvdW5kRGVsZXRlZERhdGFiYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIG5vIGxvbmdlciBleGlzdHMsIHdlIHNob3VsZCBy
ZW1lbWJlciB0byBzZW5kIHRoYXQgaW5mb3JtYXRpb24gdG8gdGhlIGNsaWVudCBsYXRlci4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIGZvdW5kRGVsZXRlZERhdGFiYXNlICYm
IGRhdGFiYXNlRmlsZU5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBwZW5kKGRhdGFiYXNlTmFtZSk7CisgICAg
ICAgIGZvciAoYXV0byYgb3BlbkRhdGFiYXNlIDogbV9vcGVuRGF0YWJhc2VNYXApIHsKKyAgICAg
ICAgICAgIGF1dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICBEYXV0
byYgZGF0YWJhc2VOYW1lTWFwID0gb3BlbkRhdGFiYXNlLnZhbHVlOworICAgICAgICAgICAgVmVj
dG9yPFN0cmluZz4gZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luOworCisgICAgICAg
ICAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9wZW5lZCBkYXRhYmFzZXMgaW4gdGhpcyBvcmlnaW4u
IEdldCB0aGUgY3VycmVudCBkYXRhYmFzZSBmaWxlIHBhdGggb2YgZWFjaCBkYXRhYmFzZSBhbmQg
c2VlIGlmCisgICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRjaGVzIHRoZSBwYXRoIHN0b3JlZCBp
biB0aGUgb3BlbmVkIGRhdGFiYXNlIG9iamVjdC4KKyAgICAgICAgICAgIGZvciAoYXV0byYgZGF0
YWJhc2VzIDogZGF0YWJhc2VOYW1lTWFwKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFi
YXNlTmFtZSA9IGRhdGFiYXNlcy5rZXk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNl
RmlsZU5hbWU7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmln
aW49PyBBTkQgbmFtZT0/OyJfcykpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGRhdGFiYXNl
IGhhcyBiZWVuIGRlbGV0ZWQgb3IgaWYgaXRzIGRhdGFiYXNlIGZpbGUgbm8gbG9uZ2VyIG1hdGNo
ZXMgdGhlIGN1cnJlbnQgdmVyc2lvbiwgdGhpcyBkYXRhYmFzZSBpcyBubyBsb25nZXIgdmFsaWQg
YW5kIGl0IHNob3VsZCBiZSBtYXJrZWQgYXMgZGVsZXRlZC4KKyAgICAgICAgICAgICAgICBpZiAo
ZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSB8fCBkYXRhYmFzZUZpbGVOYW1lICE9IEZpbGVTeXN0
ZW06OnBhdGhGaWxlTmFtZShkYi0+ZmlsZU5hbWVJc29sYXRlZENvcHkoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNlcy5hcHBlbmQoZGIpOworICAgICAgICAgICAgICAg
ICAgICBmb3VuZERlbGV0ZWREYXRhYmFzZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghZGVsZXRlZERhdGFiYXNlTmFtZXNG
b3JUaGlzT3JpZ2luLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFi
YXNlTmFtZXMuYXBwZW5kKHsgb3JpZ2luLCBXVEZNb3ZlKGRlbGV0ZWREYXRhYmFzZU5hbWVzRm9y
VGhpc09yaWdpbikgfSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBk
YXRhYmFzZSBubyBsb25nZXIgZXhpc3RzLCB3ZSBzaG91bGQgcmVtZW1iZXIgdG8gc2VuZCB0aGF0
IGluZm9ybWF0aW9uIHRvIHRoZSBjbGllbnQgbGF0ZXIuCisgICAgICAgICAgICBpZiAobV9jbGll
bnQgJiYgZm91bmREZWxldGVkRGF0YWJhc2UgJiYgZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBwZW5k
KGRhdGFiYXNlTmFtZSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIWRlbGV0ZWREYXRhYmFz
ZU5hbWVzRm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBkZWxldGVkRGF0YWJh
c2VOYW1lcy5hcHBlbmQoeyBvcmlnaW4sIFdURk1vdmUoZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JU
aGlzT3JpZ2luKSB9KTsKICAgICB9CiAgICAgCiAgICAgZm9yIChhdXRvJiBkZWxldGVkRGF0YWJh
c2UgOiBkZWxldGVkRGF0YWJhc2VzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgKaW5kZXggM2NhMGE0NjU1MDE0NWQwMGIyMjI1
MTBhNjE5M2I1ODBhOTllMzc5MS4uMWYyNGNlZDhjYThmYmExMjNiMzJlYzBhY2UxYjcxNGM4NDQx
ODU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5oCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGVsZXRlT3JpZ2luTG9ja0Zvcihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmKTsKIAogICAgIHVz
aW5nIERhdGFiYXNlU2V0ID0gSGFzaFNldDxEYXRhYmFzZSo+OwotICAgIHVzaW5nIERhdGFiYXNl
TmFtZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldCo+OwotICAgIHVzaW5nIERhdGFi
YXNlT3JpZ2luTWFwID0gSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIERhdGFiYXNlTmFtZU1h
cCo+OworICAgIHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFz
ZVNldD47CisgICAgdXNpbmcgRGF0YWJhc2VPcmlnaW5NYXAgPSBIYXNoTWFwPFNlY3VyaXR5T3Jp
Z2luRGF0YSwgRGF0YWJhc2VOYW1lTWFwPjsKIAogICAgIExvY2sgbV9vcGVuRGF0YWJhc2VNYXBH
dWFyZDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZU9yaWdpbk1hcD4gbV9v
cGVuRGF0YWJhc2VNYXA7CisgICAgbXV0YWJsZSBEYXRhYmFzZU9yaWdpbk1hcCBtX29wZW5EYXRh
YmFzZU1hcDsKIAogICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyBtX2RhdGFiYXNlLCBtX29yaWdp
bkxvY2tNYXAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQs
IG1fYmVpbmdDcmVhdGVkLCBhbmQgbV9iZWluZ0RlbGV0ZWQuCiAgICAgTG9jayBtX2RhdGFiYXNl
R3VhcmQ7CkBAIC0xNzUsOCArMTc1LDggQEAgcHJpdmF0ZToKIAogICAgIERhdGFiYXNlTWFuYWdl
ckNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAKLSAgICBIYXNoTWFwPFNlY3VyaXR5T3Jp
Z2luRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhhc2hDb3VudGVkU2V0PFN0cmluZz4+PiBtX2JlaW5n
Q3JlYXRlZDsKLSAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RkOjp1bmlxdWVfcHRy
PEhhc2hTZXQ8U3RyaW5nPj4+IG1fYmVpbmdEZWxldGVkOworICAgIEhhc2hNYXA8U2VjdXJpdHlP
cmlnaW5EYXRhLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+PiBtX2JlaW5nQ3JlYXRlZDsKKyAgICBI
YXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgSGFzaFNldDxTdHJpbmc+PiBtX2JlaW5nRGVsZXRl
ZDsKICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0YT4gbV9vcmlnaW5zQmVpbmdEZWxldGVk
OwogICAgIGJvb2wgaXNEZWxldGluZ0RhdGFiYXNlT3JPcmlnaW5Gb3IoY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIHJlY29yZENyZWF0aW5n
RGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcAppbmRleCA1YzFkZjNm
YjhkNDQ4YmJiMGM2YTFjYTAzYzZiZjM5N2I4YmM2NmMxLi5iMzEzMGI3NzQ2MWM4NWNmOWU4YjRm
NDJjZDgwZDgzMjE0OTAyZTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XaW5kb3dQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93
UHJveHkuY3BwCkBAIC01NCwxNCArNTQsMTMgQEAgc3RhdGljIHZvaWQgY29sbGVjdEdhcmJhZ2VB
ZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rpb24oKQogCiBXaW5kb3dQcm94eTo6V2luZG93UHJveHko
QWJzdHJhY3RGcmFtZSYgZnJhbWUpCiAgICAgOiBtX2ZyYW1lKG1ha2VXZWFrUHRyKGZyYW1lKSkK
LSAgICAsIG1fanNXaW5kb3dQcm94aWVzKG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KCkpCiB7CiB9
CiAKIFdpbmRvd1Byb3h5Ojp+V2luZG93UHJveHkoKQogewogICAgIEFTU0VSVCghbV9mcmFtZSk7
Ci0gICAgQVNTRVJUKG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpOwogfQogCiBBYnN0cmFjdEZyYW1lKiBXaW5kb3dQ
cm94eTo6ZnJhbWUoKSBjb25zdApAQCAtNzYsOSArNzUsOSBAQCB2b2lkIFdpbmRvd1Byb3h5Ojpk
ZXRhY2hGcm9tRnJhbWUoKQogICAgIG1fZnJhbWUgPSBudWxscHRyOwogCiAgICAgLy8gSXQncyBs
aWtlbHkgdGhhdCBkZXN0cm95aW5nIHdpbmRvd1Byb3hpZXMgd2lsbCBjcmVhdGUgYSBsb3Qgb2Yg
Z2FyYmFnZS4KLSAgICBpZiAoIW1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIGl0ID0gbV9qc1dpbmRvd1Byb3hpZXMtPmJlZ2luKCk7CisgICAgaWYgKCFtX2pzV2luZG93
UHJveGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSBtX2pzV2luZG93UHJveGllcy5iZWdp
bigpOwogICAgICAgICAgICAgaXQtPnZhbHVlLT53aW5kb3coKS0+c2V0Q29uc29sZUNsaWVudChu
dWxscHRyKTsKICAgICAgICAgICAgIGRlc3Ryb3lKU1dpbmRvd1Byb3h5KCppdC0+a2V5KTsKICAg
ICAgICAgfQpAQCAtODgsOCArODcsOCBAQCB2b2lkIFdpbmRvd1Byb3h5OjpkZXRhY2hGcm9tRnJh
bWUoKQogCiB2b2lkIFdpbmRvd1Byb3h5OjpkZXN0cm95SlNXaW5kb3dQcm94eShET01XcmFwcGVy
V29ybGQmIHdvcmxkKQogewotICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy0+Y29udGFpbnMo
JndvcmxkKSk7Ci0gICAgbV9qc1dpbmRvd1Byb3hpZXMtPnJlbW92ZSgmd29ybGQpOworICAgIEFT
U0VSVChtX2pzV2luZG93UHJveGllcy5jb250YWlucygmd29ybGQpKTsKKyAgICBtX2pzV2luZG93
UHJveGllcy5yZW1vdmUoJndvcmxkKTsKICAgICB3b3JsZC5kaWREZXN0cm95V2luZG93UHJveHko
dGhpcyk7CiB9CiAKQEAgLTk3LDIwICs5NiwyMCBAQCBKU1dpbmRvd1Byb3h5JiBXaW5kb3dQcm94
eTo6Y3JlYXRlSlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewogICAgIEFT
U0VSVChtX2ZyYW1lKTsKIAotICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMtPmNvbnRhaW5z
KCZ3b3JsZCkpOworICAgIEFTU0VSVCghbV9qc1dpbmRvd1Byb3hpZXMuY29udGFpbnMoJndvcmxk
KSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPndpbmRvdygpKTsKIAogICAgIFZNJiB2bSA9IHdvcmxk
LnZtKCk7CiAKICAgICBTdHJvbmc8SlNXaW5kb3dQcm94eT4ganNXaW5kb3dQcm94eSh2bSwgJkpT
V2luZG93UHJveHk6OmNyZWF0ZSh2bSwgKm1fZnJhbWUtPndpbmRvdygpLCB3b3JsZCkpOwotICAg
IG1fanNXaW5kb3dQcm94aWVzLT5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKKyAgICBtX2pz
V2luZG93UHJveGllcy5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKICAgICB3b3JsZC5kaWRD
cmVhdGVXaW5kb3dQcm94eSh0aGlzKTsKICAgICByZXR1cm4gKmpzV2luZG93UHJveHkuZ2V0KCk7
CiB9CiAKIFZlY3RvcjxKU0M6OlN0cm9uZzxKU1dpbmRvd1Byb3h5Pj4gV2luZG93UHJveHk6Ompz
V2luZG93UHJveGllc0FzVmVjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29weVRvVmVjdG9y
KG1fanNXaW5kb3dQcm94aWVzLT52YWx1ZXMoKSk7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3Rvciht
X2pzV2luZG93UHJveGllcy52YWx1ZXMoKSk7CiB9CiAKIEpTRE9NR2xvYmFsT2JqZWN0KiBXaW5k
b3dQcm94eTo6Z2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCkBAIC0xMzMsNyAr
MTMyLDcgQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJveHk6OmNyZWF0ZUpTV2luZG93UHJveHlX
aXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlclcKIAogdm9pZCBXaW5kb3dQcm94eTo6Y2xl
YXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdpbmRvdyhBYnN0cmFjdERPTVdpbmRvdyog
bmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b0JhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYg
KG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpCisgICAgaWYgKG1fanNXaW5kb3dQcm94aWVz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29t
bW9uVk0oKSk7CkBAIC0xNTksNyArMTU4LDcgQEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0RE9NV2lu
ZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiB7CiAgICAgQVNTRVJUKG5ld0RP
TVdpbmRvdyk7CiAKLSAgICBpZiAobV9qc1dpbmRvd1Byb3hpZXMtPmlzRW1wdHkoKSkKKyAgICBp
ZiAobV9qc1dpbmRvd1Byb3hpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQobV9mcmFtZSk7CkBAIC0xOTQsNyArMTkzLDcgQEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0
RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5kb3cpCiAKIHZvaWQgV2luZG93
UHJveHk6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogewotICAgIGZv
ciAoYXV0byYgd2luZG93UHJveHkgOiBtX2pzV2luZG93UHJveGllcy0+dmFsdWVzKCkpCisgICAg
Zm9yIChhdXRvJiB3aW5kb3dQcm94eSA6IG1fanNXaW5kb3dQcm94aWVzLnZhbHVlcygpKQogICAg
ICAgICB3aW5kb3dQcm94eS0+YXR0YWNoRGVidWdnZXIoZGVidWdnZXIpOwogfQogCkBAIC0yMDUs
MTcgKzIwNCwxNyBAQCBBYnN0cmFjdERPTVdpbmRvdyogV2luZG93UHJveHk6OndpbmRvdygpIGNv
bnN0CiAKIFdpbmRvd1Byb3h5OjpQcm94eU1hcDo6VmFsdWVzQ29uc3RJdGVyYXRvclJhbmdlIFdp
bmRvd1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2pzV2lu
ZG93UHJveGllcy0+dmFsdWVzKCk7CisgICAgcmV0dXJuIG1fanNXaW5kb3dQcm94aWVzLnZhbHVl
cygpOwogfQogCiBXaW5kb3dQcm94eTo6UHJveHlNYXAgV2luZG93UHJveHk6OnJlbGVhc2VKU1dp
bmRvd1Byb3hpZXMoKQogewotICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fanNXaW5kb3dQcm94
aWVzLCBtYWtlVW5pcXVlUmVmPFByb3h5TWFwPigpKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2pzV2luZG93UHJveGllcywgeyB9KTsKIH0KIAogdm9pZCBXaW5kb3dQcm94eTo6c2V0SlNX
aW5kb3dQcm94aWVzKFByb3h5TWFwJiYgd2luZG93UHJveGllcykKIHsKLSAgICBtX2pzV2luZG93
UHJveGllcyA9IG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+KFdURk1vdmUod2luZG93UHJveGllcykp
OworICAgIG1fanNXaW5kb3dQcm94aWVzID0gV1RGTW92ZSh3aW5kb3dQcm94aWVzKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2luZG93UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRvd1By
b3h5LmgKaW5kZXggMTE4MTc3YzVlNDQ3M2Y3Y2NmNzZiMTVhMGI1NWQ0YTRkMTcyMWQ2Zi4uZGIw
MzQ3NDQyZWZkNTlkMzQxOGE5OGI4N2ZhMGJhMmRjNzcyM2JlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc0LDggKzczLDggQEAgcHVi
bGljOgogCiAgICAgSlNXaW5kb3dQcm94eSogZXhpc3RpbmdKU1dpbmRvd1Byb3h5KERPTVdyYXBw
ZXJXb3JsZCYgd29ybGQpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGl0ID0gbV9qc1dpbmRv
d1Byb3hpZXMtPmZpbmQoJndvcmxkKTsKLSAgICAgICAgcmV0dXJuIChpdCAhPSBtX2pzV2luZG93
UHJveGllcy0+ZW5kKCkpID8gaXQtPnZhbHVlLmdldCgpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0
byBpdCA9IG1fanNXaW5kb3dQcm94aWVzLmZpbmQoJndvcmxkKTsKKyAgICAgICAgcmV0dXJuIGl0
ICE9IG1fanNXaW5kb3dQcm94aWVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogbnVsbHB0cjsK
ICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtOTYsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIFdF
QkNPUkVfRVhQT1JUIEpTV2luZG93UHJveHkmIGNyZWF0ZUpTV2luZG93UHJveHlXaXRoSW5pdGlh
bGl6ZWRTY3JpcHQoRE9NV3JhcHBlcldvcmxkJik7CiAKICAgICBXZWFrUHRyPEFic3RyYWN0RnJh
bWU+IG1fZnJhbWU7Ci0gICAgVW5pcXVlUmVmPFByb3h5TWFwPiBtX2pzV2luZG93UHJveGllczsK
KyAgICBQcm94eU1hcCBtX2pzV2luZG93UHJveGllczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKaW5kZXggYmFjNTI5ODQxMDJlYjAwNDVkYzY1MzVhZTY4ZTY4YjliNDY2OGQwMy4u
ZWMzNWM0MDIyZjUzZTgyNzNmMzU4M2QxYzY2MzBkODQyMDU3Yzg4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTE3NTQs
MTMgKzE3NTQsMTMgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGNvbnRlbnRUb0NTU1ZhbHVl
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gY291bnRl
clRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCiB7Ci0gICAgYXV0byogbWFwID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKTsKLSAg
ICBpZiAoIW1hcCkKKyAgICBhdXRvJiBtYXAgPSBzdHlsZS5jb3VudGVyRGlyZWN0aXZlcygpOwor
ICAgIGlmIChtYXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgIGF1dG8m
IGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgYXV0byBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgIGZvciAoYXV0byYg
a2V5VmFsdWUgOiAqbWFwKSB7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1hcCkgewogICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGtleVZhbHVlLmtleSwg
Q1NTVW5pdFR5cGU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgZG91YmxlIG51bWJlciA9IChwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3JlbWVudCA/IGtleVZhbHVlLnZhbHVlLmlu
Y3JlbWVudFZhbHVlIDoga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZSkudmFsdWVPcigwKTsKICAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShudW1iZXIsIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDA2YzEzNDg5NjAxYTgyYjI3ZTJl
YjQ3ZTM0MWM3YjQzZWJlN2IyZTcuLjdhZmRkZDk4MWE3ODRiNDY3Y2VjMjhjYzI3ODVjYTZjOTc1
ZTQ4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zMzMsMTAgKzMzMyw3IEBAIFJlZlB0cjxEZXByZWNhdGVk
Q1NTT01WYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjp3cmFwRm9yRGVwcmVj
YXRlZENTCiAKICAgICAvLyBUaGUgbWFwIGlzIGhlcmUgdG8gbWFpbnRhaW4gdGhlIG9iamVjdCBp
ZGVudGl0eSBvZiB0aGUgQ1NTVmFsdWVzIG92ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMuCiAgICAg
Ly8gRklYTUU6IEl0IGlzIGxpa2VseSB0aGF0IHRoZSBpZGVudGl0eSBpcyBub3QgaW1wb3J0YW50
IGZvciB3ZWIgY29tcGF0aWJpbGl0eSBhbmQgdGhpcyBjb2RlIHNob3VsZCBiZSByZW1vdmVkLgot
ICAgIGlmICghbV9jc3NvbVZhbHVlV3JhcHBlcnMpCi0gICAgICAgIG1fY3Nzb21WYWx1ZVdyYXBw
ZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NT
T01WYWx1ZT4+PigpOwotICAgIAotICAgIGF1dG8mIGNsb25lZFZhbHVlID0gbV9jc3NvbVZhbHVl
V3JhcHBlcnMtPmFkZChpbnRlcm5hbFZhbHVlLCBXZWFrUHRyPERlcHJlY2F0ZWRDU1NPTVZhbHVl
PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgY2xvbmVkVmFsdWUgPSBtX2Nzc29tVmFs
dWVXcmFwcGVycy5hZGQoaW50ZXJuYWxWYWx1ZSwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1
ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChjbG9uZWRWYWx1ZSkKICAgICAgICAgcmV0
dXJuIGNsb25lZFZhbHVlLmdldCgpOwogCkBAIC00MDAsNyArMzk3LDcgQEAgdm9pZCBTdHlsZVJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUoTXV0YXRpb25UeXBlIHR5cGUpCiAgICAg
QVNTRVJUKG1fcGFyZW50UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpKTsKIAogICAgIGlmICh0eXBl
ID09IFByb3BlcnR5Q2hhbmdlZCkKLSAgICAgICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMgPSBudWxs
cHRyOworICAgICAgICBtX2Nzc29tVmFsdWVXcmFwcGVycy5jbGVhcigpOwogCiAgICAgLy8gU3R5
bGUgc2hlZXQgbXV0YXRpb24gbmVlZHMgdG8gYmUgc2lnbmFsZWQgZXZlbiBpZiB0aGUgY2hhbmdl
IGZhaWxlZC4gd2lsbE11dGF0ZSovZGlkTXV0YXRlKiBtdXN0IHBhaXIuCiAgICAgbV9wYXJlbnRS
dWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmRpZE11dGF0ZVJ1bGVGcm9tQ1NTU3R5bGVEZWNsYXJh
dGlvbigpOwpAQCAtNDQzLDcgKzQ0MCw3IEBAIHZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6ZGlkTXV0YXRlKE11dGF0aW9uVHlwZSB0eXBlKQogICAgIGlmICh0eXBlID09IE5vQ2hhbmdl
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jc3NvbVZhbHVlV3JhcHBlcnMgPSBudWxscHRy
OworICAgIG1fY3Nzb21WYWx1ZVdyYXBwZXJzLmNsZWFyKCk7CiAKICAgICBpZiAoIW1fcGFyZW50
RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IDYyYThmOTg5YThmYTJjMWVjMGNk
MmZlZjE3ODJiMmIxZTM3M2RhN2QuLjU3OTU5YTMyNzkwNDljMmJlNzIwNzI0ZWUzMzExNmFiZTAy
Mzc2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Q1NTUGFyc2VyQ29udGV4dCBjc3NQYXJzZXJDb250ZXh0KCkgY29uc3Q7CiAKICAgICBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzKiBtX3Byb3BlcnR5U2V0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNo
TWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4+PiBtX2Nzc29tVmFs
dWVXcmFwcGVyczsKKyAgICBIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NT
T01WYWx1ZT4+IG1fY3Nzb21WYWx1ZVdyYXBwZXJzOwogCiBwcml2YXRlOgogICAgIHZvaWQgcmVm
KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAwNDdiZWRiZDM1NDM3MzQ4
OTlkMmI4OWMwZWQ5YzBkMmJhNTYwODcwLi4yNjYxMDI2NzQ3YzU1ZDc1M2MwM2QxYzI1NjJmY2Fl
MTYzNGIzMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg4Nyw3ICs4ODcsNyBAQCBF
bGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZvckFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkK
IAogdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlDYWNoZSgpCiB7Ci0gICAgbV9hY2Nlc3NL
ZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJpbmcsIEVsZW1lbnQqLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+PihbdGhpc10geworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBbdGhpc10g
ewogICAgICAgICBIYXNoTWFwPFN0cmluZywgRWxlbWVudCosIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb21wb3NlZFRyZWVEZXNjZW5k
YW50cygqdGhpcykpIHsKICAgICAgICAgICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCkBAIC04
OTksMTIgKzg5OSwxMiBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleUNhY2hlKCkKICAg
ICAgICAgICAgIG1hcC5hZGQoa2V5LCAmZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG1hcDsKLSAgICB9KCkpOworICAgIH0oKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6aW52YWxp
ZGF0ZUFjY2Vzc0tleUNhY2hlU2xvd0Nhc2UoKQogewotICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBu
dWxscHRyOworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIEV4Y2Vw
dGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0cmluZyhj
b25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQpAQCAtMjYzMSwxMSArMjYzMSwxMSBAQCB2b2lk
IERvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCkKICAgICBjb21tb25UZWFyZG93bigp
OwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0
cyAmJiBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkgJiYgcGFyZW50RG9jdW1lbnQoKSkKKyAg
ICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuaXNFbXB0eSgpICYmIHBhcmVudERvY3VtZW50KCkp
CiAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhp
cyk7CiAjZW5kaWYKIAotICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzICYmIG1fd2hlZWxFdmVu
dFRhcmdldHMtPnNpemUoKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgIGlmICghbV93aGVlbEV2
ZW50VGFyZ2V0cy5pc0VtcHR5KCkgJiYgcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAgcGFyZW50
RG9jdW1lbnQoKS0+ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKIAogICAgIGlmICht
X21lZGlhUXVlcnlNYXRjaGVyKQpAQCAtMjY4Nyw5ICsyNjg3LDkgQEAgdm9pZCBEb2N1bWVudDo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogICAgICAgICBub2RlLT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBtX3RvdWNoRXZlbnRU
YXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3RvdWNoRXZlbnRUYXJnZXRzLmNsZWFyKCk7CiAjZW5k
aWYKLSAgICBtX3doZWVsRXZlbnRUYXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3doZWVsRXZlbnRU
YXJnZXRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN1c3BlbmREZXZpY2VNb3Rpb25B
bmRPcmllbnRhdGlvblVwZGF0ZXMoKQpAQCAtNjgxOCwxNiArNjgxOCwxMyBAQCB2b2lkIERvY3Vt
ZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKE5vZGUqIG5vZGUpCiAgICAgVU5VU0VEX1BB
UkFNKG5vZGUpOwogI2VuZGlmCiAKLSAgICBib29sIGhhdmVIYW5kbGVycyA9IG1fd2hlZWxFdmVu
dFRhcmdldHMgJiYgIW1fd2hlZWxFdmVudFRhcmdldHMtPmlzRW1wdHkoKTsKKyAgICBib29sIGhh
dmVIYW5kbGVycyA9ICFtX3doZWVsRXZlbnRUYXJnZXRzLmlzRW1wdHkoKTsKICAgICBwYWdlLT5j
aHJvbWUoKS5jbGllbnQoKS53aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGhhdmVIYW5kbGVycyk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUmIG5vZGUp
CiB7Ci0gICAgaWYgKCFtX3doZWVsRXZlbnRUYXJnZXRzKQotICAgICAgICBtX3doZWVsRXZlbnRU
YXJnZXRzID0gbWFrZVVuaXF1ZTxFdmVudFRhcmdldFNldD4oKTsKLQotICAgIG1fd2hlZWxFdmVu
dFRhcmdldHMtPmFkZCgmbm9kZSk7CisgICAgbV93aGVlbEV2ZW50VGFyZ2V0cy5hZGQoJm5vZGUp
OwogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoJm5vZGUpOwogCiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCkBAIC02ODU2LDQyICs2ODUzLDI3IEBAIHN0YXRpYyBi
b29sIHJlbW92ZUhhbmRsZXJGcm9tU2V0KEV2ZW50VGFyZ2V0U2V0JiBoYW5kbGVyU2V0LCBOb2Rl
JiBub2RlLCBFdmVudEhhCiAKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5k
bGVyKE5vZGUmIG5vZGUsIEV2ZW50SGFuZGxlclJlbW92YWwgcmVtb3ZhbCkKIHsKLSAgICBpZiAo
IW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVtb3Zl
SGFuZGxlckZyb21TZXQoKm1fd2hlZWxFdmVudFRhcmdldHMsIG5vZGUsIHJlbW92YWwpKQorICAg
IGlmICghcmVtb3ZlSGFuZGxlckZyb21TZXQobV93aGVlbEV2ZW50VGFyZ2V0cywgbm9kZSwgcmVt
b3ZhbCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQo
Jm5vZGUpOwotCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCiAgICAgICAg
IERlYnVnUGFnZU92ZXJsYXlzOjpkaWRDaGFuZ2VFdmVudEhhbmRsZXJzKCpmcmFtZSk7CiB9CiAK
IHVuc2lnbmVkIERvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlckNvdW50KCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3doZWVsRXZlbnRU
YXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fd2hlZWxFdmVudFRhcmdldHMpCiAg
ICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291bnQ7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIpCiB7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMp
Ci0gICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBtYWtlVW5pcXVlPEV2ZW50VGFyZ2V0U2V0
PigpOwotCi0gICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+YWRkKCZoYW5kbGVyKTsKLQotICAgIGlm
IChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkgeworICAgIG1fdG91Y2hFdmVu
dFRhcmdldHMuYWRkKCZoYW5kbGVyKTsKKyAgICBpZiAoYXV0byBwYXJlbnQgPSBwYXJlbnREb2N1
bWVudCgpKQogICAgICAgICBwYXJlbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCp0aGlzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
OwogI2VuZGlmCkBAIC02OTAwLDEyICs2ODgyLDkgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91
Y2hFdmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlcikKIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVRv
dWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIsIEV2ZW50SGFuZGxlclJlbW92YWwgcmVtb3Zh
bCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmICghbV90b3VjaEV2ZW50VGFy
Z2V0cykKKyAgICBpZiAoIXJlbW92ZUhhbmRsZXJGcm9tU2V0KG1fdG91Y2hFdmVudFRhcmdldHMs
IGhhbmRsZXIsIHJlbW92YWwpKQogICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVIYW5kbGVy
RnJvbVNldCgqbV90b3VjaEV2ZW50VGFyZ2V0cywgaGFuZGxlciwgcmVtb3ZhbCk7Ci0KLSAgICBp
ZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3VtZW50KCkpCisgICAgaWYgKGF1dG8gcGFy
ZW50ID0gcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAgcGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2
ZW50SGFuZGxlcigqdGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKQEAg
LTY5MTYsMzAgKzY4OTUsMjEgQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSYgaGFuZGxlciwgRXZlbnRIYW5kbGVyUmVtb3ZhbCByZW0KIHZvaWQgRG9jdW1l
bnQ6OmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShOb2RlJiBoYW5kbGVyKQogewogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fdG91Y2hFdmVudFRhcmdldHMpIHsKLSAgICAgICAg
bV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlQWxsKCZoYW5kbGVyKTsKLSAgICAgICAgaWYgKCgm
aGFuZGxlciA9PSB0aGlzIHx8IG1fdG91Y2hFdmVudFRhcmdldHMtPmlzRW1wdHkoKSkgJiYgcGFy
ZW50RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2
ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7Ci0gICAgfQorICAgIG1fdG91Y2hFdmVudFRhcmdldHMucmVt
b3ZlQWxsKCZoYW5kbGVyKTsKKyAgICBpZiAoKCZoYW5kbGVyID09IHRoaXMgfHwgbV90b3VjaEV2
ZW50VGFyZ2V0cy5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50KCkpCisgICAgICAgIHBhcmVu
dERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CiAjZW5kaWYKLQot
ICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzKSB7Ci0gICAgICAgIG1fd2hlZWxFdmVudFRhcmdl
dHMtPnJlbW92ZUFsbCgmaGFuZGxlcik7Ci0gICAgICAgIGlmICgoJmhhbmRsZXIgPT0gdGhpcyB8
fCBtX3doZWVsRXZlbnRUYXJnZXRzLT5pc0VtcHR5KCkpICYmIHBhcmVudERvY3VtZW50KCkpCi0g
ICAgICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRo
aXMpOwotICAgIH0KKyAgICBtX3doZWVsRXZlbnRUYXJnZXRzLnJlbW92ZUFsbCgmaGFuZGxlcik7
CisgICAgaWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1fd2hlZWxFdmVudFRhcmdldHMuaXNFbXB0
eSgpKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRS
ZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwogfQogCiB1bnNpZ25lZCBEb2N1bWVudDo6dG91
Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAg
dW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYgaGFuZGxlciA6ICptX3RvdWNoRXZl
bnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fdG91Y2hFdmVudFRhcmdldHMp
CiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0KICAgICByZXR1cm4gY291bnQ7CiAj
ZWxzZQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4NGZkMjFhNjZkNzhh
NGY0Mjg2N2YxZjRkMDU0NGI0NjY5ODUzMjA3Li5jY2VhNGExOTEwZDU5NmU1YjE4ZTU0NmRlMjlk
MzhhZDlkNmYwYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTI0Myw4ICsxMjQzLDggQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHN0eWxlUmVjYWxjQ291bnQoKSBj
b25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYXNUb3VjaEV2ZW50
SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpID8gbV90
b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7IH0KLSAgICBib29sIHRvdWNoRXZlbnRU
YXJnZXRzQ29udGFpbihOb2RlJiBub2RlKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRUYXJn
ZXRzID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFpbnMoJm5vZGUpIDogZmFsc2U7IH0KKyAg
ICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuICFtX3RvdWNoRXZl
bnRUYXJnZXRzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdG91Y2hFdmVudFRhcmdldHNDb250YWlu
KE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1fdG91Y2hFdmVudFRhcmdldHMuY29udGFpbnMo
Jm5vZGUpOyB9CiAjZWxzZQogICAgIGJvb2wgaGFzVG91Y2hFdmVudEhhbmRsZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHRvdWNoRXZlbnRUYXJnZXRzQ29udGFpbihOb2Rl
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEyNjksMTQgKzEyNjksMTQgQEAgcHVibGlj
OgogICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0KiB0b3VjaEV2ZW50VGFyZ2V0cygpIGNvbnN0CiAg
ICAgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgICAgIHJldHVybiBtX3RvdWNoRXZl
bnRUYXJnZXRzLmdldCgpOworICAgICAgICByZXR1cm4gJm1fdG91Y2hFdmVudFRhcmdldHM7CiAj
ZWxzZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRpZgogICAgIH0KIAotICAgIGJvb2wg
aGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGFyZ2V0
cy5nZXQoKSA/IG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSA6IGZhbHNlOyB9Ci0gICAgY29u
c3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV93
aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorICAgIGJvb2wgaGFzV2hlZWxFdmVudEhhbmRsZXJz
KCkgY29uc3QgeyByZXR1cm4gIW1fd2hlZWxFdmVudFRhcmdldHMuaXNFbXB0eSgpOyB9CisgICAg
Y29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
Jm1fd2hlZWxFdmVudFRhcmdldHM7IH0KIAogICAgIHVzaW5nIFJlZ2lvbkZpeGVkUGFpciA9IHN0
ZDo6cGFpcjxSZWdpb24sIGJvb2w+OwogICAgIFJlZ2lvbkZpeGVkUGFpciBhYnNvbHV0ZUV2ZW50
UmVnaW9uRm9yTm9kZShOb2RlJik7CkBAIC0xODgyLDcgKzE4ODIsNyBAQCBwcml2YXRlOgogCiAg
ICAgSGFzaFNldDxWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kj4gbV92aXNpYmlsaXR5U3RhdGVDYWxs
YmFja0NsaWVudHM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIEVsZW1l
bnQqLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtX2FjY2Vzc0tleUNhY2hlOworICAgIE9w
dGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBFbGVtZW50KiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
Pj4gbV9hY2Nlc3NLZXlDYWNoZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdGFudFByb3Bl
cnR5TWFwPiBtX2NvbnN0YW50UHJvcGVydHlNYXA7CiAKQEAgLTE5MjMsNyArMTkyMyw3IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiBtX21lZGlhUXVlcnlNYXRjaGVy
OwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEV2
ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRzOworICAgIEV2ZW50VGFyZ2V0U2V0IG1f
dG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfQUNUSU9OX1JFR0lP
TlMpCiAgICAgYm9vbCBtX21heUhhdmVFbGVtZW50c1dpdGhOb25BdXRvVG91Y2hBY3Rpb24geyBm
YWxzZSB9OwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9tYXlI
YXZlUmVuZGVyZWRTVkdGb3JlaWduT2JqZWN0cyB7IGZhbHNlIH07CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8RXZlbnRUYXJnZXRTZXQ+IG1fd2hlZWxFdmVudFRhcmdldHM7CisgICAgRXZlbnRUYXJn
ZXRTZXQgbV93aGVlbEV2ZW50VGFyZ2V0czsKIAogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0SGFu
ZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wOwogICAgIE1vbm90b25pY1RpbWUgbV91c2VyQWN0aXZh
dGVkTWVkaWFGaW5pc2hlZFBsYXlpbmdUaW1lc3RhbXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCmluZGV4IDk0MGVmY2FlZDgzMDkxYzI1ODNm
YTllMzM2ZWYzZDc4YzU0YWEzZGMuLmZjYjMwZDU0Y2E4OTQ4NzJiMTI0MjkyNjM1YmQ3NjJmOTk0
ZjQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVn
aXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0
cnkuY3BwCkBAIC0zNCwzNSArMzQsMzIgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6
OmFkZE9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBJZFRhcmdldE9ic2VydmUKIHsKICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSWRUb09ic2Vy
dmVyU2V0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9yZWdpc3RyeS5hZGQoaWQuaW1wbCgpLCBu
dWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE9ic2VydmVyU2V0PigpOwotCi0gICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+YWRkKG9ic2VydmVyKTsKKyAgICBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBs
KCksIE9ic2VydmVyU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZChvYnNlcnZlcik7CiB9CiAK
IHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcihjb25zdCBBdG9t
U3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAgaWYgKGlkLmlz
RW1wdHkoKSB8fCBtX3JlZ2lzdHJ5LmlzRW1wdHkoKSkKKyAgICBpZiAoaWQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0KLSAgICBJZFRvT2JzZXJ2ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKLQotICAgIE9ic2VydmVyU2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS5nZXQoKTsKLSAgICBzZXQtPnJlbW92ZShvYnNlcnZlcik7Ci0gICAgaWYgKHNl
dC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQotICAgICAg
ICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWdpc3Ry
eS5maW5kKGlkLmltcGwoKSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVnaXN0cnkuZW5kKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgYXV0byYgc2V0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIHNldC5yZW1vdmUob2JzZXJ2
ZXIpOworICAgIGlmIChzZXQuaXNFbXB0eSgpICYmICZzZXQgIT0gbV9ub3RpZnlpbmdPYnNlcnZl
cnNJblNldCkKKyAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRlcmF0b3IpOwogfQogCiB2b2lk
IElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJzSW50ZXJuYWwoY29uc3Qg
QXRvbVN0cmluZ0ltcGwmIGlkKQogewotICAgIEFTU0VSVCghbV9yZWdpc3RyeS5pc0VtcHR5KCkp
OwotCi0gICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9IG1fcmVnaXN0cnkuZ2V0KCZpZCk7
Ci0gICAgaWYgKCFtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KQorICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3JlZ2lzdHJ5LmZpbmQoJmlkKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWdpc3RyeS5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9
ICZpdGVyYXRvci0+dmFsdWU7CisKICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVj
dG9yKCptX25vdGlmeWluZ09ic2VydmVyc0luU2V0KSkgewogICAgICAgICBpZiAobV9ub3RpZnlp
bmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMob2JzZXJ2ZXIpKQogICAgICAgICAgICAgb2JzZXJ2
ZXItPmlkVGFyZ2V0Q2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2Jz
ZXJ2ZXJSZWdpc3RyeS5oCmluZGV4IGExZTYzYWNlMTNmMzAzM2M0MzFhODg5ZjdhNmQyMGQ1OWFh
N2NmMmEuLmJlNWEzZTU2MTVlYWY5YTljMjM5ODc1YTk2YjYxN2ZkMGFlMDE0NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgKQEAgLTQ5LDggKzQ5
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcm
IGlkLCBJZFRhcmdldE9ic2VydmVyKik7CiAgICAgdm9pZCBub3RpZnlPYnNlcnZlcnNJbnRlcm5h
bChjb25zdCBBdG9tU3RyaW5nSW1wbCYgaWQpOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PElkVGFy
Z2V0T2JzZXJ2ZXIqPiBPYnNlcnZlclNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQXRv
bVN0cmluZ0ltcGwqLCBzdGQ6OnVuaXF1ZV9wdHI8T2JzZXJ2ZXJTZXQ+PiBJZFRvT2JzZXJ2ZXJT
ZXRNYXA7CisgICAgdXNpbmcgT2JzZXJ2ZXJTZXQgPSBIYXNoU2V0PElkVGFyZ2V0T2JzZXJ2ZXIq
PjsKKyAgICB1c2luZyBJZFRvT2JzZXJ2ZXJTZXRNYXAgPSBIYXNoTWFwPGNvbnN0IEF0b21TdHJp
bmdJbXBsKiwgT2JzZXJ2ZXJTZXQ+OwogICAgIElkVG9PYnNlcnZlclNldE1hcCBtX3JlZ2lzdHJ5
OwogICAgIE9ic2VydmVyU2V0KiBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0IHsgbnVsbHB0ciB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAppbmRleCA4YjNhMjVm
OTVjOWY5YmM0YTYxNzllYzJiMDE1OGJhNmY4OTk4OTAyLi42MTM3MzFmNjhmZDQ0M2RjNWZhM2M2
YzY2NGE3ODRhMmViMzI2N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIu
Y3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKCkK
ICAgICAvLyBDYWxsaW5nIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY2FuIG1vZGlmeSBt
X3JlZ2lzdHJhdGlvbnMsIHNvIGl0J3MgbmVjZXNzYXJ5CiAgICAgLy8gdG8gbWFrZSBhIGNvcHkg
b2YgdGhlIHRyYW5zaWVudCByZWdpc3RyYXRpb25zIGJlZm9yZSBvcGVyYXRpbmcgb24gdGhlbS4K
ICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiosIDE+IHRyYW5zaWVudFJl
Z2lzdHJhdGlvbnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hh
YmxlUmVmPE5vZGU+Pj4sIDE+IG5vZGVzVG9LZWVwQWxpdmU7CisgICAgVmVjdG9yPEhhc2hTZXQ8
R0NSZWFjaGFibGVSZWY8Tm9kZT4+LCAxPiBub2Rlc1RvS2VlcEFsaXZlOwogICAgIEhhc2hTZXQ8
R0NSZWFjaGFibGVSZWY8Tm9kZT4+IHBlbmRpbmdUYXJnZXRzOwogICAgIHBlbmRpbmdUYXJnZXRz
LnN3YXAobV9wZW5kaW5nVGFyZ2V0cyk7CiAgICAgZm9yIChhdXRvKiByZWdpc3RyYXRpb24gOiBt
X3JlZ2lzdHJhdGlvbnMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmNwcAppbmRleCBjNmYxZmIxNWRmZjhkNWViZmYyZjVjNWI3Yjdl
ZGUzYWUzZDBlYjc5Li44OTRlNDZjOGU1NDFiYzY5ZjM4NjhkZTAwNzgyNzJjODFkMWYyNTEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24uY3BwCkBAIC02OCwzMSArNjgsMjcgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaChOb2RlJiBub2RlKQogICAgIG5vZGUu
cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKICAgICBtX29ic2VydmVy
LT5zZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24obm9kZS5kb2N1bWVudCgpKTsKIAotICAgIGlm
ICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgewotICAgICAgICBtX3RyYW5zaWVudFJl
Z2lzdHJhdGlvbk5vZGVzID0gbWFrZVVuaXF1ZTxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+
Pj4oKTsKLQorICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7CiAgICAgICAgIG1fbm9kZUtlcHRB
bGl2ZSA9ICZtX25vZGU7IC8vIEJhbGFuY2VkIGluIHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25z
LgogICAgIH0KLSAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLT5hZGQobm9kZSk7Cisg
ICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5hZGQobm9kZSk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQorSGFzaFNldDxHQ1JlYWNo
YWJsZVJlZjxOb2RlPj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVu
dFJlZ2lzdHJhdGlvbnMoKQogewotICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rl
cykgeworICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLmlzRW1wdHkoKSkgewog
ICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGZvciAoYXV0byYgbm9kZSA6ICpt
X3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQorICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIG5vZGUtPnVucmVnaXN0ZXJUcmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKIAotICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBXVEZN
b3ZlKG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpOwotCiAgICAgQVNTRVJUKG1fbm9kZUtl
cHRBbGl2ZSk7CiAgICAgbV9ub2RlS2VwdEFsaXZlID0gbnVsbHB0cjsgLy8gQmFsYW5jZWQgaW4g
b2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4KIAotICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
KyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLCB7
IH0pOwogfQogCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2Vp
dmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBl
IHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CkBAIC0xMTgs
MTAgKzExNCw3IEBAIGJvb2wgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNsb3RWCiAgICAgaWYgKHZpc2l0b3IuY29u
dGFpbnNPcGFxdWVSb290KHJvb3QobV9ub2RlKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBmb3IgKGF1dG8mIG5vZGUgOiAqbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rl
cykgeworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMp
IHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qobm9kZSkpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKaW5kZXggNzUzZGJmN2FkMzg5MGYwNzNl
YzBlYTZhZTZiZDdiMTU2YmQ5NDRjNC4uYzQ4NWRlOWJhNGU3Y2U4YjdlMGJkZDAyN2NkOTZmYzgz
NDM2MmE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5oCkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRP
YnNlcnZhdGlvbihNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9tU3Ry
aW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lkIG9ic2VydmVkU3VidHJlZU5vZGVXaWxs
RGV0YWNoKE5vZGUmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJl
ZjxOb2RlPj4+IHRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7Ci0gICAgYm9vbCBoYXNUcmFu
c2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+aXNFbXB0eSgpOyB9Cisg
ICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlv
bnMoKTsKKyAgICBib29sIGhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5pc0VtcHR5KCk7IH0KIAogICAgIGJvb2wg
c2hvdWxkUmVjZWl2ZU11dGF0aW9uRnJvbShOb2RlJiwgTXV0YXRpb25PYnNlcnZlcjo6TXV0YXRp
b25UeXBlLCBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKSBjb25zdDsKICAgICBi
b29sIGlzU3VidHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2
ZXI6OlN1YnRyZWU7IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8TXV0YXRp
b25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKICAgICBOb2RlJiBtX25vZGU7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZUtlcHRBbGl2ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNo
YWJsZVJlZjxOb2RlPj4+IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CisgICAgSGFzaFNl
dDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlczsKICAg
ICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgSGFzaFNldDxBdG9tU3Ry
aW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDZhNDRkNzI3MjZhOTg3NTg0MjY5MTRmOWM3NzNjMTFmZDViNzA4YmMuLjc5
OTRhNGQ4NDg5YWYyMjhmOWUzOWU2NzZlOGNjMTdhMDg4Yjc5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0zNjMsMjggKzM2MywyNyBAQCBzdGF0aWMgU3RyaW5n
IGZvcm1TdGF0ZVNpZ25hdHVyZSgpCiAgICAgcmV0dXJuIHNpZ25hdHVyZTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xs
ZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKGNvbnN0IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQm
IGNvbnRyb2xMaXN0KQorYXV0byBGb3JtQ29udHJvbGxlcjo6Y3JlYXRlU2F2ZWRGb3JtU3RhdGVN
YXAoY29uc3QgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCYgY29udHJvbExpc3QpIC0+IFNhdmVkRm9y
bVN0YXRlTWFwCiB7CisgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIEZvcm1LZXlHZW5l
cmF0b3Iga2V5R2VuZXJhdG9yOwotICAgIGF1dG8gc3RhdGVNYXAgPSBtYWtlVW5pcXVlPFNhdmVk
Rm9ybVN0YXRlTWFwPigpOwogICAgIGZvciAoYXV0byYgY29udHJvbCA6IGNvbnRyb2xMaXN0KSB7
CiAgICAgICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0
YXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgZm9ybVN0YXRlID0g
c3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3IuZm9ybUtleSgqY29udHJvbCkuaW1wbCgpLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8mIGZvcm1TdGF0ZSA9IG1hcC5hZGQo
a2V5R2VuZXJhdG9yLmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOwogICAgICAgICBpZiAoIWZvcm1TdGF0ZSkKICAgICAgICAgICAgIGZvcm1TdGF0ZSA9
IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGU+KCk7CiAgICAgICAgIGZvcm1TdGF0ZS0+YXBwZW5k
Q29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29udHJvbC0+dHlwZSgpLCBjb250cm9sLT5z
YXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlTWFwOworICAg
IHJldHVybiBtYXA7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpmb3JtRWxl
bWVudHNTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRl
TWFwPiBzdGF0ZU1hcCA9IGNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKG1fZm9ybUVsZW1lbnRzV2l0
aFN0YXRlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKICAgICBzdGF0ZVZlY3Rv
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAq
IDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7Ci0gICAg
Zm9yIChhdXRvJiBzdGF0ZSA6ICpzdGF0ZU1hcCkgeworICAgIGZvciAoYXV0byYgc3RhdGUgOiBj
cmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZSkpIHsKICAgICAg
ICAgc3RhdGVWZWN0b3IuYXBwZW5kKHN0YXRlLmtleS5nZXQoKSk7CiAgICAgICAgIHN0YXRlLnZh
bHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
Q29udHJvbGxlci5oCmluZGV4IGExMzUyZjU4NmJlZmFhMWY2YjA3MTJiOTBlYmZkZmFiZjNjMGFj
ODYuLjE4N2I2NjNhNzUwYmJjZjMyMWM0YjJkMTBmNDhkNGRjYWNmMzgxYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Db250cm9sbGVyLmgKQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHJlZmVyZW5jZWRGaWxlUGF0aHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKTsKIAogcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPj4g
Rm9ybUVsZW1lbnRMaXN0SGFzaFNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21T
dHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlPj4gU2F2ZWRGb3JtU3Rh
dGVNYXA7CisgICAgdXNpbmcgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCA9IExpc3RIYXNoU2V0PFJl
ZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlPj47CisgICAgdXNpbmcgU2F2ZWRG
b3JtU3RhdGVNYXAgPSBIYXNoTWFwPFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVl
X3B0cjxTYXZlZEZvcm1TdGF0ZT4+OwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTYXZl
ZEZvcm1TdGF0ZU1hcD4gY3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAoY29uc3QgRm9ybUVsZW1lbnRM
aXN0SGFzaFNldCYpOworICAgIHN0YXRpYyBTYXZlZEZvcm1TdGF0ZU1hcCBjcmVhdGVTYXZlZEZv
cm1TdGF0ZU1hcChjb25zdCBGb3JtRWxlbWVudExpc3RIYXNoU2V0Jik7CiAgICAgRm9ybUNvbnRy
b2xTdGF0ZSB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlJik7CiAgICAgc3RhdGljIHZvaWQgZm9ybVN0YXRlc0Zyb21TdGF0ZVZlY3Rv
cihjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFNhdmVkRm9ybVN0YXRlTWFwJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAK
aW5kZXggMDBjNGRiM2Q2ZTdkOTk0OTQ5ZmI5MGNlZGMxYmM5N2MyZjE5NzhiZS4uZWQzN2E0NzAx
MGU5YmY3NjUwZTQwMDJkNWMwOGRjZmM2YTliY2IyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTY3MSwxMSAr
NjcxLDkgQEAgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclMKICAgICAgICAgTm9kZSogcGFyZW50ID0g
aW5uZXJQYXJlbnROb2RlKG5vZGUpOwogICAgICAgICBpZiAoIXBhcmVudCkgewogICAgICAgICAg
ICAgLy8gTm9kZSBiZWluZyBwdXNoZWQgaXMgZGV0YWNoZWQgLT4gcHVzaCBzdWJ0cmVlIHJvb3Qu
Ci0gICAgICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8Tm9kZVRvSWRNYXA+KCk7Ci0g
ICAgICAgICAgICBkYW5nbGluZ01hcCA9IG5ld01hcC5nZXQoKTsKLSAgICAgICAgICAgIG1fZGFu
Z2xpbmdOb2RlVG9JZE1hcHMuYXBwZW5kKG5ld01hcC5yZWxlYXNlKCkpOworICAgICAgICAgICAg
bV9kYW5nbGluZ05vZGVUb0lkTWFwcy5hcHBlbmQoeyB9KTsKICAgICAgICAgICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBk
YW5nbGluZ01hcCkpOworICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JOb2RlKG5vZGUsIDAsICZtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmxhc3QoKSkpOwogICAgICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGls
ZHJlbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXgg
ZmQ0ZWEyNWQ1MjBmNDExYzhhODBkZGMzOTFmYzFhM2FjZjI1OWM3ZS4uMDI0YWY0YTYxYjMwNzg4
ZGQ0MmEyNDViYmFlMWJiZWYwZTNlOGY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMjQ5LDcgKzI0OSw3IEBAIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVybGF5IHsgbnVsbHB0ciB9OwogICAg
IE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKICAgICAvLyBPd25zIG5vZGUgbWFw
cGluZ3MgZm9yIGRhbmdsaW5nIG5vZGVzLgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Tm9k
ZVRvSWRNYXA+PiBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzOworICAgIFZlY3RvcjxOb2RlVG9JZE1h
cD4gbV9kYW5nbGluZ05vZGVUb0lkTWFwczsKICAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkLCBOb2RlKj4gbV9pZFRvTm9kZTsKICAgICBIYXNoTWFwPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVzTWFwOwog
ICAgIEhhc2hTZXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IG1fY2hpbGRyZW5S
ZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCA0
YzY3YjYzODIzZmY2YTQ5N2E2MTJkNmQ2M2FlNDVhNmQ4ZGIwYTA1Li5iNzU3MTliYzYxZDdmZTNk
MmM2ZjMzMmJmNmY2MWY3ZTU1ZGUwMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKQEAgLTc2Miw3ICs3NjIsNyBAQCBib29sIERvY3VtZW50TG9hZGVyOjp0cnlM
b2FkaW5nU3Vic3RpdHV0ZURhdGEoKQogICAgICAgICB9OwogCiAjaWYgVVNFKENPQ09BX0VWRU5U
X0xPT1ApCi0gICAgICAgIFJ1bkxvb3A6OmRpc3BhdGNoKCptX2ZyYW1lLT5wYWdlKCktPnNjaGVk
dWxlZFJ1bkxvb3BQYWlycygpLCBXVEZNb3ZlKGxvYWREYXRhKSk7CisgICAgICAgIFJ1bkxvb3A6
OmRpc3BhdGNoKG1fZnJhbWUtPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCksIFdURk1v
dmUobG9hZERhdGEpKTsKICNlbHNlCiAgICAgICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRj
aChXVEZNb3ZlKGxvYWREYXRhKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDc1ODU4M2RhYTVkNjIyYTE5Yzg5ZTRjN2Q2ZTE3ODgwZThlNzcx
MTIuLmMwNTA3NDU4MjNmZTJmOTJiNWNkYjJjNzkzMjJhNGI0MjJlNzU3ZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkZXI6OmxvYWREYXRhVVJMKCkKICAgICBEYXRhVVJMRGVjb2Rlcjo6U2NoZWR1
bGVDb250ZXh0IHNjaGVkdWxlQ29udGV4dDsKICNpZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKICAg
ICBpZiAoYXV0byBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBzY2hlZHVsZUNvbnRl
eHQuc2NoZWR1bGVkUGFpcnMgPSAqcGFnZS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CisgICAg
ICAgIHNjaGVkdWxlQ29udGV4dC5zY2hlZHVsZWRQYWlycyA9IHBhZ2UtPnNjaGVkdWxlZFJ1bkxv
b3BQYWlycygpOwogI2VuZGlmCiAgICAgYXV0byBtb2RlID0gRGF0YVVSTERlY29kZXI6Ok1vZGU6
OkxlZ2FjeTsKICAgICBpZiAobV9yZXF1ZXN0LnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVz
dDo6UmVxdWVzdGVyOjpGZXRjaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDI2ZmZkYmZiYzlkMTM2OGNmYmIxYTQ5
NGY3ZjZlNmFjZTU0MDU2OWQuLmMwNjNjMzI1NmM5YmM5OWFjY2NjM2E3NjFiM2UzY2E4OGY5OTYz
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcApAQCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQoKQogCiAgICAgLy8gSWYgbV9wcmVsb2Fk
cyBpcyBub3QgZW1wdHkgaGVyZSwgaXQncyBmdWxsIG9mIGxpbmsgcHJlbG9hZHMsCiAgICAgLy8g
YXMgc3BlY3VsYXRpdmUgcHJlbG9hZHMgd2VyZSBjbGVhcmVkIGF0IERDTC4KLSAgICBpZiAobV9w
cmVsb2FkcyAmJiBtX3ByZWxvYWRzLT5zaXplKCkgJiYgIW1fdW51c2VkUHJlbG9hZHNUaW1lci5p
c0FjdGl2ZSgpKQorICAgIGlmICghbV9wcmVsb2Fkcy5pc0VtcHR5KCkgJiYgIW1fdW51c2VkUHJl
bG9hZHNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3VudXNlZFByZWxvYWRzVGltZXIuc3Rh
cnRPbmVTaG90KHVudXNlZFByZWxvYWRUaW1lb3V0KTsKIH0KIApAQCAtMTUwNCwyNSArMTUwNCwy
MSBAQCBSZXNvdXJjZUVycm9yT3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+
PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbAogICAgICAgICByZXF1ZXN0LnNldENoYXJzZXQo
bV9kb2N1bWVudC0+Y2hhcnNldCgpKTsKIAogICAgIGF1dG8gcmVzb3VyY2UgPSByZXF1ZXN0UmVz
b3VyY2UodHlwZSwgV1RGTW92ZShyZXF1ZXN0KSwgRm9yUHJlbG9hZDo6WWVzKTsKLSAgICBpZiAo
cmVzb3VyY2UgJiYgKCFtX3ByZWxvYWRzIHx8ICFtX3ByZWxvYWRzLT5jb250YWlucyhyZXNvdXJj
ZS52YWx1ZSgpLmdldCgpKSkpIHsKKyAgICBpZiAocmVzb3VyY2UgJiYgIW1fcHJlbG9hZHMuY29u
dGFpbnMocmVzb3VyY2UudmFsdWUoKS5nZXQoKSkpIHsKICAgICAgICAgYXV0byByZXNvdXJjZVZh
bHVlID0gcmVzb3VyY2UudmFsdWUoKTsKICAgICAgICAgLy8gRm9udHMgbmVlZCBzcGVjaWFsIHRy
ZWF0bWVudCBzaW5jZSBqdXN0IGNyZWF0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IHRyaWdnZXIg
YSBsb2FkLgogICAgICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6Rm9udFJl
c291cmNlKQogICAgICAgICAgICAgZG93bmNhc3Q8Q2FjaGVkRm9udD4ocmVzb3VyY2VWYWx1ZS5n
ZXQoKSktPmJlZ2luTG9hZElmTmVlZGVkKCp0aGlzKTsKICAgICAgICAgcmVzb3VyY2VWYWx1ZS0+
aW5jcmVhc2VQcmVsb2FkQ291bnQoKTsKIAotICAgICAgICBpZiAoIW1fcHJlbG9hZHMpCi0gICAg
ICAgICAgICBtX3ByZWxvYWRzID0gbWFrZVVuaXF1ZTxMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJj
ZSo+PigpOwotICAgICAgICBtX3ByZWxvYWRzLT5hZGQocmVzb3VyY2VWYWx1ZS5nZXQoKSk7Cisg
ICAgICAgIG1fcHJlbG9hZHMuYWRkKHJlc291cmNlVmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzb3VyY2U7CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVz
ZWRQcmVsb2FkcygpCiB7Ci0gICAgaWYgKCFtX3ByZWxvYWRzKQotICAgICAgICByZXR1cm47Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7CisgICAgZm9yIChh
dXRvKiByZXNvdXJjZSA6IG1fcHJlbG9hZHMpIHsKICAgICAgICAgaWYgKHJlc291cmNlICYmIHJl
c291cmNlLT5pc0xpbmtQcmVsb2FkKCkgJiYgcmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBD
YWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlc3VsdDo6UHJlbG9hZE5vdFJlZmVyZW5jZWQgJiYgZG9j
dW1lbnQoKSkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywKICAgICAgICAgICAgICAg
ICAiVGhlIHJlc291cmNlICIgKyByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkgKwpAQCAtMTUzNCwy
OCArMTUzMCwyMCBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjp3YXJuVW51c2VkUHJlbG9h
ZHMoKQogYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6aXNQcmVsb2FkZWQoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpIGNvbnN0CiB7CiAgICAgY29uc3QgVVJMJiB1cmwgPSBtX2RvY3VtZW50LT5j
b21wbGV0ZVVSTCh1cmxTdHJpbmcpOwotCi0gICAgaWYgKG1fcHJlbG9hZHMpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocmVz
b3VyY2UtPnVybCgpID09IHVybCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQorICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX3ByZWxvYWRzKSB7CisgICAgICAgIGlm
IChyZXNvdXJjZS0+dXJsKCkgPT0gdXJsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xl
YXJQcmVsb2FkcyhDbGVhclByZWxvYWRzTW9kZSBtb2RlKQogewotICAgIGlmICghbV9wcmVsb2Fk
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PENh
Y2hlZFJlc291cmNlKj4+IHJlbWFpbmluZ0xpbmtQcmVsb2FkczsKLSAgICBmb3IgKGF1dG8qIHJl
c291cmNlIDogKm1fcHJlbG9hZHMpIHsKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+
IHJlbWFpbmluZ0xpbmtQcmVsb2FkczsKKyAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogbV9wcmVs
b2FkcykgewogICAgICAgICBBU1NFUlQocmVzb3VyY2UpOwogICAgICAgICBpZiAobW9kZSA9PSBD
bGVhclByZWxvYWRzTW9kZTo6Q2xlYXJTcGVjdWxhdGl2ZVByZWxvYWRzICYmIHJlc291cmNlLT5p
c0xpbmtQcmVsb2FkKCkpIHsKLSAgICAgICAgICAgIGlmICghcmVtYWluaW5nTGlua1ByZWxvYWRz
KQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ0xpbmtQcmVsb2FkcyA9IG1ha2VVbmlxdWU8TGlz
dEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPj4oKTsKLSAgICAgICAgICAgIHJlbWFpbmluZ0xpbmtQ
cmVsb2Fkcy0+YWRkKHJlc291cmNlKTsKKyAgICAgICAgICAgIHJlbWFpbmluZ0xpbmtQcmVsb2Fk
cy5hZGQocmVzb3VyY2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgcmVzb3VyY2UtPmRlY3JlYXNlUHJlbG9hZENvdW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCmluZGV4IGU0NWMwOTU5MzEx
ZDY1NmFmMjcxMzIxOTUzMDY2ZjNlNGJkNTM0YzkuLjQ5MTkwZjdmNWQ4MmJiZDA5NmE1YmIyZThm
OWRkMzc3MzUxMTUxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5oCkBAIC0yMDksNyArMjA5LDcgQEAgcHJpdmF0ZToKIAogICAg
IGludCBtX3JlcXVlc3RDb3VudCB7IDAgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFz
aFNldDxDYWNoZWRSZXNvdXJjZSo+PiBtX3ByZWxvYWRzOworICAgIExpc3RIYXNoU2V0PENhY2hl
ZFJlc291cmNlKj4gbV9wcmVsb2FkczsKICAgICBUaW1lciBtX3VudXNlZFByZWxvYWRzVGltZXI7
CiAKICAgICBUaW1lciBtX2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDk1YjUyYWEz
YWQyOTE3ZmViOGUzNTFhZTExODU2MmY0Y2MzNzE1NTcuLjljZjYyOGU5OTkyYzhlNGEyNWViOGVk
ZDc4MTVkOTVjZTYxZmM0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmNwcApAQCAtNzUsMTkgKzc1LDE3IEBAIE1lbW9yeUNhY2hlOjpNZW1vcnlDYWNoZSgp
CiAgICAgfSk7CiB9CiAKLWF1dG8gTWVtb3J5Q2FjaGU6OnNlc3Npb25SZXNvdXJjZU1hcChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNvbnN0IC0+IENhY2hlZFJlc291cmNlTWFwKgorYXV0byBN
ZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkg
LT4gQ2FjaGVkUmVzb3VyY2VNYXAqCiB7CiAgICAgQVNTRVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkp
OwotICAgIHJldHVybiBtX3Nlc3Npb25SZXNvdXJjZXMuZ2V0KHNlc3Npb25JRCk7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fc2Vzc2lvblJlc291cmNlcy5maW5kKHNlc3Npb25JRCk7CisgICAgcmV0
dXJuIGl0ZXJhdG9yID09IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRl
cmF0b3ItPnZhbHVlOwogfQogCiBhdXRvIE1lbW9yeUNhY2hlOjplbnN1cmVTZXNzaW9uUmVzb3Vy
Y2VNYXAoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNvdXJjZU1hcCYKIHsK
ICAgICBBU1NFUlQoc2Vzc2lvbklELmlzVmFsaWQoKSk7Ci0gICAgYXV0byYgbWFwID0gbV9zZXNz
aW9uUmVzb3VyY2VzLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICBpZiAoIW1hcCkKLSAgICAgICAgbWFwID0gbWFrZVVuaXF1ZTxDYWNoZWRSZXNvdXJjZU1hcD4o
KTsKLSAgICByZXR1cm4gKm1hcDsKKyAgICByZXR1cm4gbV9zZXNzaW9uUmVzb3VyY2VzLmFkZChz
ZXNzaW9uSUQsIENhY2hlZFJlc291cmNlTWFwIHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBi
b29sIE1lbW9yeUNhY2hlOjpzaG91bGRSZW1vdmVGcmFnbWVudElkZW50aWZpZXIoY29uc3QgVVJM
JiBvcmlnaW5hbFVSTCkKQEAgLTE4MCw3ICsxNzgsNyBAQCBDYWNoZWRSZXNvdXJjZSogTWVtb3J5
Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
CiAgICAgcmV0dXJuIHJlc291cmNlRm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcyk7
CiB9CiAKLUNhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1w
bChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlTWFwJiByZXNv
dXJjZXMpCitDYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdElt
cGwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZWRSZXNvdXJjZU1h
cCYgcmVzb3VyY2VzKQogewogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKICAgICBV
UkwgdXJsID0gcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC51cmwoKSk7
CkBAIC0yMTgsNyArMjE2LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2Vz
KGJvb2wgc2hvdWxkRGVzdHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc28KIHZvaWQgTWVtb3J5
Q2FjaGU6OmZvckVhY2hSZXNvdXJjZShjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FjaGVkUmVz
b3VyY2UmKT4mIGZ1bmN0aW9uKQogewogICAgIGZvciAoYXV0byYgdW5wcm90ZWN0ZWRMUlVMaXN0
IDogbV9hbGxSZXNvdXJjZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNvcHlU
b1ZlY3RvcigqdW5wcm90ZWN0ZWRMUlVMaXN0KSkKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJj
ZSA6IGNvcHlUb1ZlY3Rvcih1bnByb3RlY3RlZExSVUxpc3QpKQogICAgICAgICAgICAgZnVuY3Rp
b24oKnJlc291cmNlKTsKICAgICB9CiB9CkBAIC0yMjksNyArMjI3LDcgQEAgdm9pZCBNZW1vcnlD
YWNoZTo6Zm9yRWFjaFNlc3Npb25SZXNvdXJjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFdURjo6RnUKICAgICBpZiAoaXQgPT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVjdG9yKGl0
LT52YWx1ZS0+dmFsdWVzKCkpKQorICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBjb3B5VG9WZWN0
b3IoaXQtPnZhbHVlLnZhbHVlcygpKSkKICAgICAgICAgZnVuY3Rpb24oKnJlc291cmNlKTsKIH0K
IApAQCAtMzI2LDcgKzMyNCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNl
c1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgIGZvciAoaW50IGkgPSBtX2FsbFJlc291
cmNlcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAvLyBNYWtlIGEgY29weSBv
ZiB0aGUgTFJVTGlzdCBmaXJzdCAoYW5kIHJlZiB0aGUgcmVzb3VyY2VzKSBhcyBjYWxsaW5nCiAg
ICAgICAgIC8vIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGNhbiBhbHRlciB0aGUgTFJVTGlzdC4KLSAg
ICAgICAgYXV0byBscnVMaXN0ID0gY29weVRvVmVjdG9yKCptX2FsbFJlc291cmNlc1tpXSk7Cisg
ICAgICAgIGF1dG8gbHJ1TGlzdCA9IGNvcHlUb1ZlY3RvcihtX2FsbFJlc291cmNlc1tpXSk7CiAK
ICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIiBscnUgbGlzdCAoc2l6ZSAlbHUpIC0gZmx1
c2hpbmcgc3RhZ2UiLCBscnVMaXN0LnNpemUoKSk7CiAKQEAgLTM2OSw3ICszNjcsNyBAQCB2b2lk
IE1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6
ZSkKICAgICAgICAgICAgIAogICAgICAgICAvLyBTaHJpbmsgdGhlIHZlY3RvciBiYWNrIGRvd24g
c28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBpbnNwZWN0aW5nCiAgICAgICAgIC8vIGVtcHR5IExSVSBs
aXN0cyBvbiBmdXR1cmUgcHJ1bmVzLgotICAgICAgICBpZiAoIW1fYWxsUmVzb3VyY2VzW2ldLT5p
c0VtcHR5KCkpCisgICAgICAgIGlmICghbV9hbGxSZXNvdXJjZXNbaV0uaXNFbXB0eSgpKQogICAg
ICAgICAgICAgY2FuU2hyaW5rTFJVTGlzdHMgPSBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAoY2Fu
U2hyaW5rTFJVTGlzdHMpCiAgICAgICAgICAgICBtX2FsbFJlc291cmNlcy5zaHJpbmsoaSk7CkBA
IC00MjYsMTEgKzQyNCw5IEBAIGF1dG8gTWVtb3J5Q2FjaGU6OmxydUxpc3RGb3IoQ2FjaGVkUmVz
b3VyY2UmIHJlc291cmNlKSAtPiBMUlVMaXN0JgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgcmVz
b3VyY2UubV9scnVJbmRleCA9IHF1ZXVlSW5kZXg7CiAjZW5kaWYKLQotICAgIG1fYWxsUmVzb3Vy
Y2VzLnJlc2VydmVDYXBhY2l0eShxdWV1ZUluZGV4ICsgMSk7Ci0gICAgd2hpbGUgKG1fYWxsUmVz
b3VyY2VzLnNpemUoKSA8PSBxdWV1ZUluZGV4KQotICAgICAgICBtX2FsbFJlc291cmNlcy51bmNo
ZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxMUlVMaXN0PigpKTsKLSAgICByZXR1cm4gKm1fYWxsUmVz
b3VyY2VzW3F1ZXVlSW5kZXhdOworICAgIGlmIChtX2FsbFJlc291cmNlcy5zaXplKCkgPD0gcXVl
dWVJbmRleCkKKyAgICAgICAgbV9hbGxSZXNvdXJjZXMuZ3JvdyhxdWV1ZUluZGV4ICsgMSk7Cisg
ICAgcmV0dXJuIG1fYWxsUmVzb3VyY2VzW3F1ZXVlSW5kZXhdOwogfQogCiB2b2lkIE1lbW9yeUNh
Y2hlOjpyZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCkBAIC00ODYs
NyArNDgyLDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luKQogCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVz
b3VyY2VzV2l0aE9yaWdpbjsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJl
c291cmNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291
cmNlcykgeworICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogcmVzb3VyY2VzKSB7CiAgICAg
ICAgICAgICBhdXRvJiByZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAgICAgIGF1
dG8mIHBhcnRpdGlvbk5hbWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYg
KHBhcnRpdGlvbk5hbWUgPT0gb3JpZ2luUGFydGl0aW9uKSB7CkBAIC01MzMsNyArNTI5LDcgQEAg
dm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbnMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBIYXMKIHZvaWQgTWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRo
Q2FjaGUoU2VjdXJpdHlPcmlnaW5TZXQmIG9yaWdpbnMpCiB7CiAgICAgZm9yIChhdXRvJiByZXNv
dXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRv
JiBrZXlWYWx1ZSA6ICpyZXNvdXJjZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6
IHJlc291cmNlcykgewogICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFs
dWU7CiAgICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29u
ZDsKICAgICAgICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0VtcHR5KCkpCkBAIC01NTAsNyAr
NTQ2LDcgQEAgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBNZW1vcnlDYWNoZTo6b3Jp
Z2luc1dpdGhDYWNoZShQQUw6OlNlc3Npb25JRCBzZXMKIAogICAgIGF1dG8gaXQgPSBtX3Nlc3Np
b25SZXNvdXJjZXMuZmluZChzZXNzaW9uSUQpOwogICAgIGlmIChpdCAhPSBtX3Nlc3Npb25SZXNv
dXJjZXMuZW5kKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICppdC0+dmFsdWUp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGl0LT52YWx1ZSkgewogICAgICAgICAg
ICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7CiAgICAgICAgICAgICBhdXRvJiBw
YXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAgIGlmICghcGFy
dGl0aW9uTmFtZS5pc0VtcHR5KCkpCkBAIC02MDksNyArNjA1LDcgQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6cmVtb3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQKIAogICAgIGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRv
bigpOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VzIDogbWVtb3J5Q2FjaGUubV9zZXNzaW9uUmVz
b3VyY2VzKSB7Ci0gICAgICAgIGlmIChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlD
YWNoZS5yZXNvdXJjZUZvclJlcXVlc3RJbXBsKHJlcXVlc3QsICpyZXNvdXJjZXMudmFsdWUpKQor
ICAgICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbWVtb3J5Q2FjaGUucmVzb3Vy
Y2VGb3JSZXF1ZXN0SW1wbChyZXF1ZXN0LCByZXNvdXJjZXMudmFsdWUpKQogICAgICAgICAgICAg
bWVtb3J5Q2FjaGUucmVtb3ZlKCpyZXNvdXJjZSk7CiAgICAgfQogfQpAQCAtNjI3LDcgKzYyMyw3
IEBAIE1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkK
ICAgICBTdGF0aXN0aWNzIHN0YXRzOwogCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nl
c3Npb25SZXNvdXJjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6
IHJlc291cmNlcy0+dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IHJl
c291cmNlcy52YWx1ZXMoKSkgewogICAgICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUeXBlOjpJbWFnZVJlc291cmNl
OgogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwpA
QCAtNjYyLDcgKzY1OCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdoaWxlICghbV9zZXNzaW9uUmVzb3VyY2Vz
LmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXNvdXJjZXMgPSAqbV9zZXNzaW9uUmVzb3Vy
Y2VzLmJlZ2luKCktPnZhbHVlOworICAgICAgICBhdXRvJiByZXNvdXJjZXMgPSBtX3Nlc3Npb25S
ZXNvdXJjZXMuYmVnaW4oKS0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghcmVzb3VyY2VzLmlzRW1w
dHkoKSk7CiAgICAgICAgIHJlbW92ZSgqcmVzb3VyY2VzLmJlZ2luKCktPnZhbHVlKTsKICAgICB9
CkBAIC03NDYsNyArNzQyLDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wg
aW5jbHVkZUxpdmUpIGNvbnN0CiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7
CiAgICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICBXVEZM
b2dBbHdheXMoIlxuTGlzdCAlZDpcbiIsIGkpOwotICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNl
IDogKm1fYWxsUmVzb3VyY2VzW2ldKSB7CisgICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiBt
X2FsbFJlc291cmNlc1tpXSkgewogICAgICAgICAgICAgaWYgKGluY2x1ZGVMaXZlIHx8ICFyZXNv
dXJjZS0+aGFzQ2xpZW50cygpKQogICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiICAlcCAl
LjI1NXMgJS4xZkssICUuMWZLLCBhY2Nlc3NlczogJXUsIGNsaWVudHM6ICVkXG4iLCByZXNvdXJj
ZSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlc291cmNlLT5kZWNv
ZGVkU2l6ZSgpIC8gMTAyNC4wZiwgKHJlc291cmNlLT5lbmNvZGVkU2l6ZSgpICsgcmVzb3VyY2Ut
Pm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQuMGYsIHJlc291cmNlLT5hY2Nlc3NDb3VudCgpLCByZXNv
dXJjZS0+bnVtYmVyT2ZDbGllbnRzKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5oCmluZGV4IDU3NDQ3ZmYxYWYwNDZjNjQ4ZTg0ZDk3NmFiZjAw
NjEwYmYwMDI4ZGIuLmIwYTdiOTU3MWFjZDg2YWZiYmVlZDI1MGQ1ZTNkZGIyZGIxNjc5MTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCkBAIC0xNTAsNyArMTUw
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSYp
OwogICAgIGJvb2wgaW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJl
c291cmNlKSBjb25zdCB7IHJldHVybiBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5zKCZy
ZXNvdXJjZSk7IH0KIAotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
PiBTZWN1cml0eU9yaWdpblNldDsKKyAgICB1c2luZyBTZWN1cml0eU9yaWdpblNldCA9IEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVSZXNvdXJjZXNXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lucyhQQUw6OlNlc3Npb25JRCwgY29uc3Qg
SGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZ2V0T3JpZ2luc1dpdGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucyk7CkBAIC0x
NjUsMTEgKzE2NSwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZUxp
dmVSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95
RGVjb2RlZERhdGFGb3JBbGxMaXZlUmVzb3VyY2VzID0gZmFsc2UpOwogCiBwcml2YXRlOgotICAg
IHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8VVJMLCBTdHJpbmcgLyogcGFydGl0aW9uTmFtZSAq
Lz4sIENhY2hlZFJlc291cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0gICAgdHlwZWRlZiBMaXN0
SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IExSVUxpc3Q7CisgICAgdXNpbmcgQ2FjaGVkUmVzb3Vy
Y2VNYXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25OYW1lICov
PiwgQ2FjaGVkUmVzb3VyY2UqPjsKKyAgICB1c2luZyBMUlVMaXN0ID0gTGlzdEhhc2hTZXQ8Q2Fj
aGVkUmVzb3VyY2UqPjsKIAogICAgIE1lbW9yeUNhY2hlKCk7Ci0gICAgfk1lbW9yeUNhY2hlKCk7
IC8vIE5vdCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxs
cyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KKyAgICB+TWVt
b3J5Q2FjaGUoKSA9IGRlbGV0ZTsKIAogICAgIExSVUxpc3QmIGxydUxpc3RGb3IoQ2FjaGVkUmVz
b3VyY2UmKTsKIApAQCAtMTgwLDEwICsxODAsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBk
ZWFkQ2FwYWNpdHkoKSBjb25zdDsKICAgICBib29sIG5lZWRzUHJ1bmluZygpIGNvbnN0OwogCi0g
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgQ2FjaGVkUmVzb3VyY2VNYXAmKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBDYWNoZWRSZXNv
dXJjZU1hcCYpOwogCiAgICAgQ2FjaGVkUmVzb3VyY2VNYXAmIGVuc3VyZVNlc3Npb25SZXNvdXJj
ZU1hcChQQUw6OlNlc3Npb25JRCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VNYXAqIHNlc3Npb25SZXNv
dXJjZU1hcChQQUw6OlNlc3Npb25JRCkgY29uc3Q7CisgICAgQ2FjaGVkUmVzb3VyY2VNYXAqIHNl
c3Npb25SZXNvdXJjZU1hcChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIG1fZGlzYWJsZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9pblBydW5lUmVzb3VyY2VzIHsgZmFsc2UgfTsKQEAgLTE5
OSwxNCArMTk5LDE0IEBAIHByaXZhdGU6CiAgICAgLy8gU2l6ZS1hZGp1c3RlZCBhbmQgcG9wdWxh
cml0eS1hd2FyZSBMUlUgbGlzdCBjb2xsZWN0aW9uIGZvciBjYWNoZSBvYmplY3RzLiAgVGhpcyBj
b2xsZWN0aW9uIGNhbiBob2xkCiAgICAgLy8gbW9yZSByZXNvdXJjZXMgdGhhbiB0aGUgY2FjaGVk
IHJlc291cmNlIG1hcCwgc2luY2UgaXQgY2FuIGFsc28gaG9sZCAic3RhbGUiIG11bHRpcGxlIHZl
cnNpb25zIG9mIG9iamVjdHMgdGhhdCBhcmUKICAgICAvLyB3YWl0aW5nIHRvIGRpZSB3aGVuIHRo
ZSBjbGllbnRzIHJlZmVyZW5jaW5nIHRoZW0gZ28gYXdheS4KLSAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPExSVUxpc3Q+LCAzMj4gbV9hbGxSZXNvdXJjZXM7CisgICAgVmVjdG9yPExSVUxpc3Qs
IDMyPiBtX2FsbFJlc291cmNlczsKICAgICAKICAgICAvLyBMaXN0IGp1c3QgZm9yIGxpdmUgcmVz
b3VyY2VzIHdpdGggZGVjb2RlZCBkYXRhLiAgQWNjZXNzIHRvIHRoaXMgbGlzdCBpcyBiYXNlZCBv
ZmYgb2YgcGFpbnRpbmcgdGhlIHJlc291cmNlLgogICAgIExSVUxpc3QgbV9saXZlRGVjb2RlZFJl
c291cmNlczsKICAgICAKICAgICAvLyBBIFVSTC1iYXNlZCBtYXAgb2YgYWxsIHJlc291cmNlcyB0
aGF0IGFyZSBpbiB0aGUgY2FjaGUgKGluY2x1ZGluZyB0aGUgZnJlc2hlc3QgdmVyc2lvbiBvZiBv
YmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyAKICAgICAvLyByZWZlcmVuY2VkIGJ5IGEg
V2ViIHBhZ2UpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlx
dWVfcHRyPENhY2hlZFJlc291cmNlTWFwPj4gU2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwOworICAg
IHVzaW5nIFNlc3Npb25DYWNoZWRSZXNvdXJjZU1hcCA9IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQs
IENhY2hlZFJlc291cmNlTWFwPjsKICAgICBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXAgbV9zZXNz
aW9uUmVzb3VyY2VzOwogCiAgICAgVGltZXIgbV9wcnVuZVRpbWVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IGJmYmJhZGVhNzJlMTRjOWJjNzYwN2VhZTllM2Uw
M2Y5NTA5ZjJiZDcuLjljZTI2MzQ1MjY5ZDM1MzBlNDQwNzJmYjQyYTJlNjA0NWE4YWNjZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTk0MiwxMSArOTQyLDcg
QEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJsZUFuZEFjdGl2ZUludGVybmFsKGJv
b2wgY29udGVudElzVmlzaWJsZSkKICAgICAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBjb25zdCBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj4qIHNj
cm9sbGFibGVBcmVhcyA9IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCk7Ci0gICAgICAgIGlm
ICghc2Nyb2xsYWJsZUFyZWFzKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9y
IChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6ICpzY3JvbGxhYmxlQXJlYXMpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgfHwgbV9wYWdlLnNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucygpKTsKIAogICAg
ICAgICAgICAgY29udGVudEFyZWFEaWRTaG93T3JIaWRlKHNjcm9sbGFibGVBcmVhLCBjb250ZW50
SXNWaXNpYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NTgzYzM2OWZkYTFj
MDZkOTQzNzVjY2RjMjNmYzhiNzIyMzBiZjVhLi5hOTM5NzVlNjRkMjZkMDdhZjAxZmFkYzkwZDRh
MTBlNWE5NTVjODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC01NzMsMTAgKzU3
MywxMCBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUoKQogCiAgICAgLy8g
SWYgdGhlIHJlbmRlciB0cmVlIGlzIGRlc3Ryb3llZCBiZWxvdyBGcmFtZVZpZXc6OnVwZGF0ZUVt
YmVkZGVkT2JqZWN0cygpLCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgbnVsbCBzZW50aW5lbCBpbiB0
aGUgc2V0LgogICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgaGF2ZSByZW1vdmVkIGl0c2Vs
ZiBhcyB0aGUgdHJlZSB3YXMgZmVsbGVkLgotICAgIEFTU0VSVCghbV9lbWJlZGRlZE9iamVjdHNU
b1VwZGF0ZSB8fCBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCkgfHwgKG1fZW1i
ZWRkZWRPYmplY3RzVG9VcGRhdGUtPnNpemUoKSA9PSAxICYmIG1fZW1iZWRkZWRPYmplY3RzVG9V
cGRhdGUtPmZpcnN0KCkgPT0gbnVsbHB0cikpOworICAgIEFTU0VSVChtX2VtYmVkZGVkT2JqZWN0
c1RvVXBkYXRlLmlzRW1wdHkoKSB8fCAobV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5zaXplKCkg
PT0gMSAmJiBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmZpcnN0KCkgPT0gbnVsbHB0cikpOwog
Ci0gICAgQVNTRVJUKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8IG1fdmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3Nsb3dS
ZXBhaW50T2JqZWN0cyB8fCBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5jb21wdXRlc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX3Nsb3dSZXBhaW50T2JqZWN0cy5jb21wdXRlc0VtcHR5KCkpOwogfQog
CiB2b2lkIEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBA
IC04MTgsMTAgKzgxOCw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyTGF5b3V0KCkKIAogdm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJzRm9y
QWxsU2Nyb2xsYWJsZUFyZWFzKCkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWFzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8qIHNjcm9sbGFibGVBcmVhIDogKm1fc2Nyb2xs
YWJsZUFyZWFzKQorICAgIGZvciAoYXV0byogc2Nyb2xsYWJsZUFyZWEgOiBtX3Njcm9sbGFibGVB
cmVhcykKICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmludmFsaWRhdGVTY3JvbGxiYXJzKCk7CiB9
CiAKQEAgLTEzNDIsMjIgKzEzMzksMTYgQEAgUmVuZGVyQm94KiBGcmFtZVZpZXc6OmVtYmVkZGVk
Q29udGVudEJveCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3OjphZGRFbWJlZGRlZE9iamVjdFRv
VXBkYXRlKFJlbmRlckVtYmVkZGVkT2JqZWN0JiBlbWJlZGRlZE9iamVjdCkKIHsKLSAgICBpZiAo
IW1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUpCi0gICAgICAgIG1fZW1iZWRkZWRPYmplY3RzVG9V
cGRhdGUgPSBtYWtlVW5pcXVlPExpc3RIYXNoU2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0Kj4+KCk7
Ci0KICAgICBhdXRvJiBlbGVtZW50ID0gZW1iZWRkZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQo
KTsKICAgICBpZiAoaXM8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAg
IGRvd25jYXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KGVsZW1lbnQpLnNldE5lZWRzV2lkZ2V0
VXBkYXRlKHRydWUpOwogCi0gICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+YWRkKCZlbWJl
ZGRlZE9iamVjdCk7CisgICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5hZGQoJmVtYmVkZGVk
T2JqZWN0KTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnJlbW92ZUVtYmVkZGVkT2JqZWN0VG9VcGRh
dGUoUmVuZGVyRW1iZWRkZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogewotICAgIGlmICghbV9l
bWJlZGRlZE9iamVjdHNUb1VwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9lbWJlZGRl
ZE9iamVjdHNUb1VwZGF0ZS0+cmVtb3ZlKCZlbWJlZGRlZE9iamVjdCk7CisgICAgbV9lbWJlZGRl
ZE9iamVjdHNUb1VwZGF0ZS5yZW1vdmUoJmVtYmVkZGVkT2JqZWN0KTsKIH0KIAogdm9pZCBGcmFt
ZVZpZXc6OnNldE1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKQEAgLTE1MTEsMTEg
KzE1MDIsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkU2xvd1JlcGFpbnRPYmplY3QoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIpCiB7CiAgICAgYm9vbCBoYWRTbG93UmVwYWludE9iamVjdHMgPSBoYXNT
bG93UmVwYWludE9iamVjdHMoKTsKIAotICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMpCi0g
ICAgICAgIG1fc2xvd1JlcGFpbnRPYmplY3RzID0gbWFrZVVuaXF1ZTxXZWFrSGFzaFNldDxSZW5k
ZXJFbGVtZW50Pj4oKTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zbG93UmVwYWludE9iamVj
dHMtPmFkZChyZW5kZXJlcik7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAg
aWYgKG1fc2xvd1JlcGFpbnRPYmplY3RzLmFkZChyZW5kZXJlcikuaXNOZXdFbnRyeSkgewogICAg
ICAgICBpZiAoYXV0byBsYXllciA9IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCkpCiAgICAgICAg
ICAgICBsYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CiAgICAgCkBAIC0xNTMx
LDEwICsxNTE4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFNsb3dSZXBhaW50T2JqZWN0KFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQogCiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlU2xvd1JlcGFpbnRP
YmplY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFtX3Nsb3dSZXBhaW50
T2JqZWN0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZW1vdmVkID0gbV9zbG93UmVw
YWludE9iamVjdHMtPnJlbW92ZShyZW5kZXJlcik7CisgICAgYm9vbCByZW1vdmVkID0gbV9zbG93
UmVwYWludE9iamVjdHMucmVtb3ZlKHJlbmRlcmVyKTsKICAgICBpZiAocmVtb3ZlZCkgewogICAg
ICAgICBpZiAoYXV0byBsYXllciA9IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCkpCiAgICAgICAg
ICAgICBsYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CkBAIC0xNTQzLDIwICsx
NTI3LDE2IEBAIHZvaWQgRnJhbWVWaWV3OjpyZW1vdmVTbG93UmVwYWludE9iamVjdChSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zbG93
UmVwYWludE9iamVjdHNEaWRDaGFuZ2UoKnRoaXMpOwogICAgIH0KIAotICAgIGlmICghbV9zbG93
UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSkKKyAgICBpZiAoIW1fc2xvd1JlcGFpbnRP
YmplY3RzLmNvbXB1dGVzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zbG93UmVw
YWludE9iamVjdHMgPSBudWxscHRyOworICAgIG1fc2xvd1JlcGFpbnRPYmplY3RzLmNsZWFyKCk7
CiAgICAgdXBkYXRlQ2FuQmxpdE9uU2Nyb2xsUmVjdXJzaXZlbHkoKTsKIH0KIAogdm9pZCBGcmFt
ZVZpZXc6OmFkZFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgb2JqZWN0KQogewotICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykKLSAg
ICAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyA9IG1ha2VVbmlxdWU8V2Vha0hhc2hT
ZXQ8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4+KCk7Ci0KLSAgICBpZiAoIW1fdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMtPmNvbnRhaW5zKG9iamVjdCkpIHsKLSAgICAgICAgbV92aWV3cG9ydENv
bnN0cmFpbmVkT2JqZWN0cy0+YWRkKG9iamVjdCk7CisgICAgaWYgKG1fdmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMuYWRkKG9iamVjdCkuaXNOZXdFbnRyeSkgewogICAgICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkKICAgICAgICAgICAgIHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5
KCk7CiAKQEAgLTE1NjcsNyArMTU0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGRWaWV3cG9ydENv
bnN0cmFpbmVkT2JqZWN0KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIG9iamVjdCkKIAogdm9pZCBG
cmFtZVZpZXc6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCYgb2JqZWN0KQogewotICAgIGlmIChtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Rz
ICYmIG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPnJlbW92ZShvYmplY3QpKSB7CisgICAg
aWYgKG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMucmVtb3ZlKG9iamVjdCkpIHsKICAgICAg
ICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld0ZpeGVk
T2JqZWN0c0RpZENoYW5nZSgqdGhpcyk7CiAKQEAgLTIxMDIsNyArMjA4Miw3IEBAIE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPiBGcmFtZVZpZXc6OnN0eWxlQ29sb3JPcHRpb25zKCkgY29u
c3QKIAogYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7Ci0gICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8
IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSkgeworICAgIGlm
IChtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSkgewogICAgICAg
ICBmcmFtZSgpLnBhZ2UoKS0+Y2hyb21lKCkuc2Nyb2xsKHNjcm9sbERlbHRhLCByZWN0VG9TY3Jv
bGwsIGNsaXBSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjExMSw3ICsy
MDkxLDcgQEAgYm9vbCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50
U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QKIAogICAgIC8vIEdldCB0aGUgcmVjdHMg
b2YgdGhlIGZpeGVkIG9iamVjdHMgdmlzaWJsZSBpbiB0aGUgcmVjdFRvU2Nyb2xsCiAgICAgUmVn
aW9uIHJlZ2lvblRvVXBkYXRlOwotICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cykgeworICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3ZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5o
YXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAocmVuZGVyZXIuaXNDb21wb3NpdGVkKCkpCkBAIC0yMTgxLDEyICsyMTYxLDkg
QEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCkKIAogdm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRTbG93UmVwYWludE9iamVjdHMo
KQogewotICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIC8vIFJlbmRlcmVycyB3aXRoIGZpeGVkIGJhY2tncm91bmRzIG1heSBiZSBpbiBjb21wb3Np
dGluZyBsYXllcnMsIHNvIHdlIG5lZWQgdG8gZXhwbGljaXRseQogICAgIC8vIHJlcGFpbnQgdGhl
bSBhZnRlciBzY3JvbGxpbmcuCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3Nsb3dSZXBh
aW50T2JqZWN0cykKKyAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogbV9zbG93UmVwYWludE9iamVj
dHMpCiAgICAgICAgIHJlbmRlcmVyLnJlcGFpbnRTbG93UmVwYWludE9iamVjdCgpOwogfQogCkBA
IC0yNDY4LDcgKzI0NDUsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHNOZWVkTGF5b3V0KCkKICAgICBpZiAoIWhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqbV92
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykgeworICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBt
X3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKSB7CiAgICAgICAgIHJlbmRlcmVyLnNldE5lZWRz
TGF5b3V0KCk7CiAgICAgICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7CiAgICAgICAgICAg
ICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlciku
bGF5ZXIoKTsKQEAgLTMyNTksMjMgKzMyMzYsMjMgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUVt
YmVkZGVkT2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0JiBlbWJlZGRlZE9iamVjdCkKIGJvb2wg
RnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdHMoKQogewogICAgIFNldEZvclNjb3BlPGJv
b2w+IGluVXBkYXRlRW1iZWRkZWRPYmplY3RzKG1faW5VcGRhdGVFbWJlZGRlZE9iamVjdHMsIHRy
dWUpOwotICAgIGlmIChsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSB8fCAhbV9lbWJl
ZGRlZE9iamVjdHNUb1VwZGF0ZSB8fCBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5
KCkpCisgICAgaWYgKGxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpIHx8IG1fZW1iZWRk
ZWRPYmplY3RzVG9VcGRhdGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVuZFdpZGdldEhpZXJh
cmNoeVVwZGF0ZXM7CiAKICAgICAvLyBJbnNlcnQgYSBtYXJrZXIgZm9yIHdoZXJlIHdlIHNob3Vs
ZCBzdG9wLgotICAgIEFTU0VSVCghbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+Y29udGFpbnMo
bnVsbHB0cikpOwotICAgIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmFkZChudWxscHRyKTsK
KyAgICBBU1NFUlQoIW1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUuY29udGFpbnMobnVsbHB0cikp
OworICAgIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUuYWRkKG51bGxwdHIpOwogCi0gICAgd2hp
bGUgKCFtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0
byBlbWJlZGRlZE9iamVjdCA9IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPnRha2VGaXJzdCgp
OworICAgIHdoaWxlICghbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgYXV0byBlbWJlZGRlZE9iamVjdCA9IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUudGFr
ZUZpcnN0KCk7CiAgICAgICAgIGlmICghZW1iZWRkZWRPYmplY3QpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgdXBkYXRlRW1iZWRkZWRPYmplY3QoKmVtYmVkZGVkT2JqZWN0KTsKICAgICB9
CiAKLSAgICByZXR1cm4gbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+aXNFbXB0eSgpOworICAg
IHJldHVybiBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZUVtYmVkZGVkT2JqZWN0c1RpbWVyRmlyZWQoKQpAQCAtMzc4Miw3ICsz
NzU5LDcgQEAgZmxvYXQgRnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50
KGZsb2F0IHN0ZXAsIFNjcm9sbGJhck9yaWVudGF0aW8KICAgICBpZiAoZ3JhbnVsYXJpdHkgIT0g
U2Nyb2xsQnlQYWdlIHx8IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCiAgICAg
ICAgIHJldHVybiBzdGVwOwogCi0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0
aW9uZWRPYmplY3RzID0gbnVsbHB0cjsKKyAgICBjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFz
aFNldCogcG9zaXRpb25lZE9iamVjdHMgPSBudWxscHRyOwogICAgIGlmIChSZW5kZXJWaWV3KiBy
b290ID0gZnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoIXJvb3QtPmhh
c1Bvc2l0aW9uZWRPYmplY3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RlcDsKQEAgLTM5NDUs
MTEgKzM5MjIsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc1Njcm9sbGFibGUoKSkgewotICAgICAgICBw
YXJlbnRGcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBwYXJl
bnRGcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHBhcmVudEZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisgICAgcGFyZW50RnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiB9CiAKIGJv
b2wgRnJhbWVWaWV3OjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0CkBAIC0z
OTc2LDEwICszOTUzLDcgQEAgdm9pZCBGcmFtZVZpZXc6Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFy
ZWFXaWxsUGFpbnQoKSBjb25zdAogCiAgICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKIAotICAg
IGlmICghbV9zY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0
byYgc2Nyb2xsYWJsZUFyZWEgOiAqbV9zY3JvbGxhYmxlQXJlYXMpCisgICAgZm9yIChhdXRvJiBz
Y3JvbGxhYmxlQXJlYSA6IG1fc2Nyb2xsYWJsZUFyZWFzKQogICAgICAgICBzY3JvbGxhYmxlQXJl
YS0+Y29udGVudEFyZWFXaWxsUGFpbnQoKTsKIH0KIApAQCAtNTA4MCwxMiArNTA1NCw5IEBAIFN0
cmluZyBGcmFtZVZpZXc6OnRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQoKSBjb25zdAogICAgIHJl
dHVybiB0cy5yZWxlYXNlKCk7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJl
YShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCitib29sIEZyYW1lVmlldzo6YWRkU2Ny
b2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewotICAgIGlmICgh
bV9zY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFzID0gbWFrZVVuaXF1
ZTxTY3JvbGxhYmxlQXJlYVNldD4oKTsKLSAgICAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYXMt
PmFkZChzY3JvbGxhYmxlQXJlYSkuaXNOZXdFbnRyeSkgeworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhcy5hZGQoJnNjcm9sbGFibGVBcmVhKS5pc05ld0VudHJ5KSB7CiAgICAgICAgIHNjcm9sbGFi
bGVBcmVhU2V0Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MDkz
LDE4ICs1MDY0LDE4IEBAIGJvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZy
YW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVB
cmVhKQorYm9vbCBGcmFtZVZpZXc6OnJlbW92ZVNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVh
JiBzY3JvbGxhYmxlQXJlYSkKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYXMgJiYgbV9zY3Jv
bGxhYmxlQXJlYXMtPnJlbW92ZShzY3JvbGxhYmxlQXJlYSkpIHsKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYXMucmVtb3ZlKCZzY3JvbGxhYmxlQXJlYSkpIHsKICAgICAgICAgc2Nyb2xsYWJsZUFy
ZWFTZXRDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVWaWV3Ojpjb250YWluc1Njcm9sbGFibGVBcmVhKFNjcm9s
bGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkgY29uc3QKK2Jvb2wgRnJhbWVWaWV3Ojpjb250YWlu
c1Njcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXMgJiYgbV9zY3JvbGxhYmxlQXJlYXMtPmNvbnRh
aW5zKHNjcm9sbGFibGVBcmVhKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXMuY29udGFp
bnMoJnNjcm9sbGFibGVBcmVhKTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVh
U2V0Q2hhbmdlZCgpCkBAIC01MTI0LDcgKzUwOTUsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkQ2hp
bGQoV2lkZ2V0JiB3aWRnZXQpCiAgICAgaWYgKGlzPEZyYW1lVmlldz4od2lkZ2V0KSkgewogICAg
ICAgICBhdXRvJiBjaGlsZEZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KTsK
ICAgICAgICAgaWYgKGNoaWxkRnJhbWVWaWV3LmlzU2Nyb2xsYWJsZSgpKQotICAgICAgICAgICAg
YWRkU2Nyb2xsYWJsZUFyZWEoJmNoaWxkRnJhbWVWaWV3KTsKKyAgICAgICAgICAgIGFkZFNjcm9s
bGFibGVBcmVhKGNoaWxkRnJhbWVWaWV3KTsKICAgICB9CiAKICAgICBTY3JvbGxWaWV3OjphZGRD
aGlsZCh3aWRnZXQpOwpAQCAtNTEzMyw3ICs1MTA0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZENo
aWxkKFdpZGdldCYgd2lkZ2V0KQogdm9pZCBGcmFtZVZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCYg
d2lkZ2V0KQogewogICAgIGlmIChpczxGcmFtZVZpZXc+KHdpZGdldCkpCi0gICAgICAgIHJlbW92
ZVNjcm9sbGFibGVBcmVhKCZkb3duY2FzdDxGcmFtZVZpZXc+KHdpZGdldCkpOworICAgICAgICBy
ZW1vdmVTY3JvbGxhYmxlQXJlYShkb3duY2FzdDxGcmFtZVZpZXc+KHdpZGdldCkpOwogCiAgICAg
U2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQod2lkZ2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CmluZGV4IDllZDFjNzIzZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLmFiZmU3YWMz
MDJkZTZhZWE5NWQ5OGRhNTNmZjA3NDhmZmE5YjYzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aApAQCAtMzA1LDE1ICszMDUsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRTbG93UmVwYWlu
dE9iamVjdChSZW5kZXJFbGVtZW50Jik7CiAgICAgdm9pZCByZW1vdmVTbG93UmVwYWludE9iamVj
dChSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBoYXNTbG93UmVwYWludE9iamVjdChjb25zdCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJlcikgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9iamVj
dHMgJiYgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbnRhaW5zKHJlbmRlcmVyKTsgfQotICAgIGJv
b2wgaGFzU2xvd1JlcGFpbnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9i
amVjdHMgJiYgIW1fc2xvd1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCk7IH0KLSAgICBX
ZWFrSGFzaFNldDxSZW5kZXJFbGVtZW50Piogc2xvd1JlcGFpbnRPYmplY3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zbG93UmVwYWludE9iamVjdHMuZ2V0KCk7IH0KKyAgICBib29sIGhhc1Nsb3dSZXBh
aW50T2JqZWN0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSBjb25zdCB7IHJldHVybiBt
X3Nsb3dSZXBhaW50T2JqZWN0cy5jb250YWlucyhyZW5kZXJlcik7IH0KKyAgICBib29sIGhhc1Ns
b3dSZXBhaW50T2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuICFtX3Nsb3dSZXBhaW50T2JqZWN0cy5j
b21wdXRlc0VtcHR5KCk7IH0KKyAgICBjb25zdCBXZWFrSGFzaFNldDxSZW5kZXJFbGVtZW50PiYg
c2xvd1JlcGFpbnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9iamVjdHM7
IH0KIAogICAgIC8vIEluY2x1ZGVzIGZpeGVkLSBhbmQgc3RpY2t5LXBvc2l0aW9uIG9iamVjdHMu
CiAgICAgdm9pZCBhZGRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KFJlbmRlckxheWVyTW9kZWxP
YmplY3QmKTsKICAgICB2b2lkIHJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYpOwotICAgIGNvbnN0IFdlYWtIYXNoU2V0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMuZ2V0KCk7IH0KLSAgICBib29sIGhhc1ZpZXdwb3J0
Q29uc3RyYWluZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0cyAmJiAhbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgp
OyB9CisgICAgY29uc3QgV2Vha0hhc2hTZXQ8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4mIHZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0czsgfQorICAgIGJvb2wgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSBj
b25zdCB7IHJldHVybiAhbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5jb21wdXRlc0VtcHR5
KCk7IH0KICAgICAKICAgICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKQEAgLTU1
MywxMyArNTUzLDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdHJh
Y2tlZFJlcGFpbnRSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tlZFJlcGFpbnRSZWN0czsg
fQogICAgIFN0cmluZyB0cmFja2VkUmVwYWludFJlY3RzQXNUZXh0KCkgY29uc3Q7CiAKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiBTY3JvbGxhYmxlQXJlYVNldDsKICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNjcm9sbGFibGUgYXJlYSBoYXMganVzdCBiZWVuIG5ld2x5
IGFkZGVkLgotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xs
YWJsZUFyZWEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFkZFNjcm9sbGFibGVBcmVhKFNj
cm9sbGFibGVBcmVhJik7CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzY3JvbGxhYmxlIGFy
ZWEgaGFzIGp1c3QgYmVlbiByZW1vdmVkLgotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVtb3Zl
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKTsKLSAgICBib29sIGNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKSBjb25zdDsKLSAgICBjb25zdCBTY3JvbGxhYmxlQXJl
YVNldCogc2Nyb2xsYWJsZUFyZWFzKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXMu
Z2V0KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHJlbW92ZVNjcm9sbGFibGVBcmVhKFNj
cm9sbGFibGVBcmVhJik7CisgICAgYm9vbCBjb250YWluc1Njcm9sbGFibGVBcmVhKFNjcm9sbGFi
bGVBcmVhJikgY29uc3Q7CisgICAgdXNpbmcgU2Nyb2xsYWJsZUFyZWFTZXQgPSBIYXNoU2V0PFNj
cm9sbGFibGVBcmVhKj47CisgICAgY29uc3QgU2Nyb2xsYWJsZUFyZWFTZXQmIHNjcm9sbGFibGVB
cmVhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFzOyB9CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFkZENoaWxkKFdpZGdldCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlQ2hpbGQoV2lkZ2V0JikgZmluYWw7CkBAIC04NjYsOCArODY2LDggQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgSGFzaFNldDxXaWRnZXQqPiBtX3dpZGdldHNJblJlbmRlclRy
ZWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0
Kj4+IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYWtI
YXNoU2V0PFJlbmRlckVsZW1lbnQ+PiBtX3Nsb3dSZXBhaW50T2JqZWN0czsKKyAgICBMaXN0SGFz
aFNldDxSZW5kZXJFbWJlZGRlZE9iamVjdCo+IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGU7Cisg
ICAgV2Vha0hhc2hTZXQ8UmVuZGVyRWxlbWVudD4gbV9zbG93UmVwYWludE9iamVjdHM7CiAKICAg
ICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yOwog
ICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0RyYXc7CkBAIC05MjcsOCArOTI3LDggQEAgcHJpdmF0
ZToKICAgICAvLyBUaGUgaW50cmluc2ljIGNvbnRlbnQgc2l6ZSBkZWNpZGVkIGJ5IGF1dG9zaXpp
bmcuCiAgICAgSW50U2l6ZSBtX2F1dG9TaXplQ29udGVudFNpemU7CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2Nyb2xsYWJsZUFyZWFTZXQ+IG1fc2Nyb2xsYWJsZUFyZWFzOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWFrSGFzaFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0Pj4gbV92aWV3cG9ydENv
bnN0cmFpbmVkT2JqZWN0czsKKyAgICBTY3JvbGxhYmxlQXJlYVNldCBtX3Njcm9sbGFibGVBcmVh
czsKKyAgICBXZWFrSGFzaFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PiBtX3ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzOwogCiAgICAgT3B0aW9uU2V0PExheW91dE1pbGVzdG9uZT4gbV9taWxl
c3RvbmVzUGVuZGluZ1BhaW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
bW9yeVJlbGVhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcApp
bmRleCA2ZGU2YzBlMjYzMzMyYmUxZDY3MGUxYTY5YWZlM2M4NjdiNGYzMDk3Li45Y2IwYmE0ZmRi
MTBjNzZkYjY0MTc0OTM1NDI1NmNkY2ZlNGQwZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5
UmVsZWFzZS5jcHAKQEAgLTIxNyw4ICsyMTcsNyBAQCB2b2lkIGxvZ01lbW9yeVN0YXRpc3RpY3NB
dFRpbWVPZkRlYXRoKCkKICAgICBSRUxFQVNFX0xPRyhNZW1vcnlQcmVzc3VyZSwgIlBhZ2UgY291
bnQ6ICV1IiwgcGFnZUNvdW50KCkpOwogICAgIFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAi
RG9jdW1lbnQgY291bnQ6ICV1IiwgRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpLnNpemUoKSk7CiAg
ICAgUkVMRUFTRV9MT0coTWVtb3J5UHJlc3N1cmUsICJMaXZlIEphdmFTY3JpcHQgb2JqZWN0czoi
KTsKLSAgICBhdXRvIHR5cGVDb3VudHMgPSB2bS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKTsKLSAg
ICBmb3IgKGF1dG8mIGl0IDogKnR5cGVDb3VudHMpCisgICAgZm9yIChhdXRvJiBpdCA6IHZtLmhl
YXAub2JqZWN0VHlwZUNvdW50cygpKQogICAgICAgICBSRUxFQVNFX0xPRyhNZW1vcnlQcmVzc3Vy
ZSwgIiAgJXM6ICVkIiwgaXQua2V5LCBpdC52YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IDYxZGQ4NjA1OGU3YTFlNzIzMGVkZDY3ODZjZTg0ZTE0MzRmY2NkYmUuLmM4MGZl
MTBkNDZiZmM0MmJjNDI2NzYwYzgyNzM4OWE2MmE5YmYyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtMTM0NSwyMCArMTM0NSwxNCBAQCB2b2lkIFBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xsYmFy
c1RvSGlkZGVuKGJvb2wgbG9ja092ZXJsYXlTY3JvbGxiYXJzKQogCiAgICAgdmlldy0+bG9ja092
ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAg
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBmcmFtZS0+dmlldygpOwotICAgICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Ny
b2xsYWJsZUFyZWFzID0gZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKTsKLSAgICAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3Ig
KGF1dG8mIHNjcm9sbGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykKLSAgICAgICAgICAgIHNj
cm9sbGFibGVBcmVhLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4obG9ja092ZXJs
YXlTY3JvbGxiYXJzKTsKKyAgICBmb3IgKGF1dG8gZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKGF1
dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBz
Y3JvbGxhYmxlQXJlYSA6IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpCisgICAgICAgICAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihs
b2NrT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAgICB9CiAgICAgfQogfQotICAgIAorCiB2b2lk
IFBhZ2U6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5IGVsYXN0
aWNpdHkpCiB7CiAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID09IGVsYXN0aWNp
dHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCmluZGV4IDkxN2ExYWQ3NjlkOTRjYjBlYzM1MTY5YzFkZjA5MGQ3Njk1
NGEzOTIuLmNiMmIxNTVmYmUyMTFjZTE5ZjJmYzAyNGE3NDkyMjM3OTkyZDUwNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM3NCw5ICszNzQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFNj
aGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVNjaGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmKTsKLSAgICBTY2hlZHVsZVBh
aXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSB7IHJldHVybiBtX3NjaGVkdWxlZFJ1
bkxvb3BQYWlycy5nZXQoKTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlUGFpckhh
c2hTZXQ+IG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzOworICAgIGNvbnN0IFNjaGVkdWxlUGFpckhh
c2hTZXQmIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0IHsgcmV0dXJuIG1fc2NoZWR1bGVk
UnVuTG9vcFBhaXJzOyB9CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0OwpAQCAtMTE3NCw2ICsxMTcyLDEwIEBAIHBy
aXZhdGU6CiAKICAgICBjb25zdCBib29sIG1faHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsK
ICAgICBtdXRhYmxlIE1lZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmllciBtX21lZGlhU2Vzc2lvbkdy
b3VwSWRlbnRpZmllcjsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFNjaGVkdWxlUGFpckhh
c2hTZXQgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnM7CisjZW5kaWYKIH07CiAKIGlubGluZSBQYWdl
R3JvdXAmIFBhZ2U6Omdyb3VwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2VMb2dnaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dn
aW5nLmNwcAppbmRleCBjNjg0OTQ1YTgwZTA0MGE2N2Y0MTMwMjg3NDIwNjcxODE3NGNkZmQwLi4z
ODNkZDU1NGZiMzlmNzVlN2QxZTBmNTczYTRkZjJlYjkyMDYxMjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZUxvZ2dpbmcuY3BwCkBAIC04MCw3ICs4MCw3IEBAIEhhc2hNYXA8
Y29uc3QgY2hhciosIHNpemVfdD4gUGVyZm9ybWFuY2VMb2dnaW5nOjptZW1vcnlVc2FnZVN0YXRp
c3RpY3MoU2hvdWxkSW5jCiAKIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBQZXJmb3JtYW5j
ZUxvZ2dpbmc6OmphdmFTY3JpcHRPYmplY3RDb3VudHMoKQogewotICAgIHJldHVybiBXVEZNb3Zl
KCpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICByZXR1cm4gY29tbW9u
Vk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKTsKIH0KIAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQ
ZXJmb3JtYW5jZUxvZ2dpbmcoUGFnZSYgcGFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUHJpbnRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0
LmNwcAppbmRleCAwYzk2MzJlMmZmM2E0OWEwZjI2M2ViZmJmMzlmMWY4NzA5YmIyZjAzLi4zY2Vm
MzM3MzFjZGVkM2Y2YzRhYjlmYTAyY2YzMmQ3YTg1MWU3OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
cmludENvbnRleHQuY3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmVu
ZCgpCiAgICAgQVNTRVJUKG1faXNQcmludGluZyk7CiAgICAgbV9pc1ByaW50aW5nID0gZmFsc2U7
CiAgICAgZnJhbWUuc2V0UHJpbnRpbmcoZmFsc2UsIEZsb2F0U2l6ZSgpLCBGbG9hdFNpemUoKSwg
MCwgQWRqdXN0Vmlld1NpemUpOwotICAgIG1fbGlua2VkRGVzdGluYXRpb25zID0gbnVsbHB0cjsK
KyAgICBtX2xpbmtlZERlc3RpbmF0aW9ucyA9IFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIGlu
bGluZSBSZW5kZXJCb3hNb2RlbE9iamVjdCogZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIpCkBAIC0zMjcsMTIgKzMyNywxMiBAQCB2b2lkIFByaW50Q29udGV4
dDo6b3V0cHV0TGlua2VkRGVzdGluYXRpb25zKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBEbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fbGlua2VkRGVzdGluYXRpb25z
KSB7Ci0gICAgICAgIG1fbGlua2VkRGVzdGluYXRpb25zID0gbWFrZVVuaXF1ZTxIYXNoTWFwPFN0
cmluZywgUmVmPEVsZW1lbnQ+Pj4oKTsKKyAgICAgICAgbV9saW5rZWREZXN0aW5hdGlvbnMgPSBI
YXNoTWFwPFN0cmluZywgUmVmPEVsZW1lbnQ+PigpOwogICAgICAgICBjb2xsZWN0TGlua2VkRGVz
dGluYXRpb25zKGRvY3VtZW50KTsKICAgICB9CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDog
Km1fbGlua2VkRGVzdGluYXRpb25zKSB7Ci0gICAgICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
ID0gaXQudmFsdWUtPnJlbmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBkZXN0aW5hdGlvbiA6ICpt
X2xpbmtlZERlc3RpbmF0aW9ucykgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gZGVzdGluYXRp
b24udmFsdWUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpvdXRw
dXRMaW5rZWREZXN0aW5hdGlvbnMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIERv
CiAgICAgICAgIGlmICghcGFnZVJlY3QuY29udGFpbnMocm91bmRlZEludFBvaW50KHBvaW50KSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBncmFwaGljc0NvbnRleHQuYWRkRGVz
dGluYXRpb25BdFBvaW50KGl0LmtleSwgcG9pbnQpOworICAgICAgICBncmFwaGljc0NvbnRleHQu
YWRkRGVzdGluYXRpb25BdFBvaW50KGRlc3RpbmF0aW9uLmtleSwgcG9pbnQpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKaW5kZXggMTgyN2ExM2RkYzFiNWUyMWEyNWVm
NWY0N2NmMGVlNmI4ODUwMWZhZC4uMGJhZGNhOTZkMDhhZDQ3ZDgzOGI3YzA4YzVhN2Q5OGNiY2Zk
ZjYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCkBAIC0xMTAsNyArMTEwLDcgQEAg
cHJpdmF0ZToKICAgICAvLyBVc2VkIHRvIHByZXZlbnQgbWlzdXNlcyBvZiBiZWdpbigpIGFuZCBl
bmQoKSAoZS5nLiwgY2FsbCBlbmQgd2l0aG91dCBiZWdpbikuCiAgICAgYm9vbCBtX2lzUHJpbnRp
bmcgeyBmYWxzZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBSZWY8
RWxlbWVudD4+PiBtX2xpbmtlZERlc3RpbmF0aW9uczsKKyAgICBPcHRpb25hbDxIYXNoTWFwPFN0
cmluZywgUmVmPEVsZW1lbnQ+Pj4gbV9saW5rZWREZXN0aW5hdGlvbnM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5tbQppbmRleCA3OGZlYzNl
NjkxNTU3YzE2N2FjYThmNzhkMTM5YzM1M2FjNjA1YmUzLi4xNDVlNjRlNTBlYjI2OGYzZWRjY2Ji
ZmU4YzJkMWY3ZDRlYWU3N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9Q
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0KQEAgLTg4
LDE1ICs4OCwxMyBAQCB2b2lkIFBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAKIHZvaWQgUGFn
ZTo6YWRkU2NoZWR1bGVQYWlyKFJlZjxTY2hlZHVsZVBhaXI+JiYgcGFpcikKIHsKLSAgICBpZiAo
IW1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzKQotICAgICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWly
cyA9IG1ha2VVbmlxdWU8U2NoZWR1bGVQYWlySGFzaFNldD4oKTsKLSAgICBtX3NjaGVkdWxlZFJ1
bkxvb3BQYWlycy0+YWRkKHBhaXIucHRyKCkpOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXItPnNjaGVkdWxlKHBhaXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zY2hlZHVsZShwYWlyKTsKKyAgICBtX3NjaGVkdWxl
ZFJ1bkxvb3BQYWlycy5hZGQocGFpci5wdHIoKSk7CisKKyAgICBmb3IgKGF1dG8gZnJhbWUgPSBt
X21haW5GcmFtZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICBpZiAoYXV0byBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKSkKKyAgICAgICAgICAgIGxvYWRlci0+c2NoZWR1bGUocGFpcik7CisgICAgICAg
IGlmIChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyKCkpCisgICAgICAgICAgICBsb2FkZXItPnNjaGVkdWxlKHBhaXIpOwogICAgIH0KIAogICAg
IC8vIEZJWE1FOiBtYWtlIFNoYXJlZFRpbWVyTWFjIHVzZSB0aGVzZSBTY2hlZHVsZVBhaXJzLgpA
QCAtMTA0LDE3ICsxMDIsMTMgQEAgdm9pZCBQYWdlOjphZGRTY2hlZHVsZVBhaXIoUmVmPFNjaGVk
dWxlUGFpcj4mJiBwYWlyKQogCiB2b2lkIFBhZ2U6OnJlbW92ZVNjaGVkdWxlUGFpcihSZWY8U2No
ZWR1bGVQYWlyPiYmIHBhaXIpCiB7Ci0gICAgQVNTRVJUKG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJz
KTsKLSAgICBpZiAoIW1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy0+cmVtb3ZlKHBhaXIucHRyKCkpOworICAgIG1f
c2NoZWR1bGVkUnVuTG9vcFBhaXJzLnJlbW92ZShwYWlyLnB0cigpKTsKIAotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAg
IGRvY3VtZW50TG9hZGVyLT51bnNjaGVkdWxlKHBhaXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT51bnNjaGVkdWxlKHBhaXIp
OworICAgIGZvciAoYXV0byBmcmFtZSA9IG1fbWFpbkZyYW1lLnB0cigpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChhdXRvIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgbG9hZGVy
LT51bnNjaGVkdWxlKHBhaXIpOworICAgICAgICBpZiAoYXV0byBsb2FkZXIgPSBmcmFtZS0+bG9h
ZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgbG9hZGVyLT51
bnNjaGVkdWxlKHBhaXIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDliNjI5ZDBlNTkz
MTg5YmQ5M2Q1OWZlNzMwNjdhODRlOTc3NTMzODAuLjdmMmJiM2E0NTE1NDM1MGFkYzgwYTQxMTRh
YjhkNmY3OTJmOTJlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTEyMywxOSArMTIzLDE3IEBAIEV2ZW50
VHJhY2tpbmdSZWdpb25zIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphYnNvbHV0ZUV2ZW50VHJhY2tp
bmdSZWdpb25zRm9yRnJhbWUoCiAgICAgLy8gRklYTUU6IHNob3VsZCBBU1NFUlQoIWZyYW1lVmll
dy0+bmVlZHNMYXlvdXQoKSkgaGVyZSwgYnV0IG5lZWQgdG8gZml4IERlYnVnUGFnZU92ZXJsYXlz
CiAgICAgLy8gdG8gbm90IGFzayBmb3IgcmVnaW9ucyBhdCBiYWQgdGltZXMuCiAKLSAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUFyZWFzID0gZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykgewot
ICAgICAgICAgICAgLy8gQ29tcG9zaXRlZCBzY3JvbGxhYmxlIGFyZWFzIGNhbiBiZSBzY3JvbGxl
ZCBvZmYgdGhlIG1haW4gdGhyZWFkLgotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhLT51
c2VzQXN5bmNTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgYm9vbCBpc0luc2lkZUZpeGVkOwotICAgICAgICAgICAgSW50UmVjdCBib3ggPSBzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgmaXNJbnNpZGVGaXhlZCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnNpZGVGaXhlZCkKLSAgICAgICAgICAgICAgICBib3ggPSBJbnRS
ZWN0KGZyYW1lVmlldy0+Zml4ZWRTY3JvbGxhYmxlQXJlYUJvdW5kc0luZmxhdGVkRm9yU2Nyb2xs
aW5nKExheW91dFJlY3QoYm94KSkpOwotCi0gICAgICAgICAgICBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbi51bml0ZShib3gpOwotICAgICAgICB9CisgICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJl
YSA6IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpIHsKKyAgICAgICAgLy8gQ29tcG9zaXRl
ZCBzY3JvbGxhYmxlIGFyZWFzIGNhbiBiZSBzY3JvbGxlZCBvZmYgdGhlIG1haW4gdGhyZWFkLgor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnVzZXNBc3luY1Njcm9sbGluZygpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBpc0luc2lkZUZpeGVkOworICAgICAgICBJ
bnRSZWN0IGJveCA9IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCZp
c0luc2lkZUZpeGVkKTsKKyAgICAgICAgaWYgKGlzSW5zaWRlRml4ZWQpCisgICAgICAgICAgICBi
b3ggPSBJbnRSZWN0KGZyYW1lVmlldy0+Zml4ZWRTY3JvbGxhYmxlQXJlYUJvdW5kc0luZmxhdGVk
Rm9yU2Nyb2xsaW5nKExheW91dFJlY3QoYm94KSkpOworCisgICAgICAgIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uLnVuaXRlKGJveCk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB3aWRnZXQgOiBm
cmFtZVZpZXctPndpZGdldHNJblJlbmRlclRyZWUoKSkgewpAQCAtMjk4LDExICsyOTYsNyBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJh
bWVWaWV3JiBmcmFtZVZpZXcpCiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc1Zpc2li
bGVTbG93UmVwYWludFZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKGNvbnN0IEZyYW1lVmlldyYg
ZnJhbWVWaWV3KSBjb25zdAogewotICAgIGF1dG8qIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Rz
ID0gZnJhbWVWaWV3LnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCk7Ci0gICAgaWYgKCF2aWV3
cG9ydENvbnN0cmFpbmVkT2JqZWN0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9y
IChhdXRvJiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0IDogKnZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKSB7CisgICAgZm9yIChhdXRvJiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0IDogZnJh
bWVWaWV3LnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKCFpczxS
ZW5kZXJCb3hNb2RlbE9iamVjdD4odmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCkgfHwgIXZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3QuaGFzTGF5ZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBhdXRvJiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4o
dmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCkubGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKaW5kZXggNzllMmY1Mzg4YzQ2
ZTU4OTIzMDE2MWM0NzQ1MjU0MTkyNDdlODJhYi4uYTRkYTkzZGU2YmZlNjg5NzBlNTM5ZDQzNmVk
NmVjNTJjNjhlZTk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhNZXRyaWNzTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhNZXRyaWNzTWFwLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlIHsgZmFsc2UgfTsKICAgICBHbHlwaE1ldHJpY3NQYWdl
IG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5z
IGdseXBoIGluZGljZXMgMC0yNTUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8aW50LCBz
dGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRyaWNzUGFnZT4+PiBtX3BhZ2VzOworICAgIEhhc2hNYXA8
aW50LCBzdGQ6OnVuaXF1ZV9wdHI8R2x5cGhNZXRyaWNzUGFnZT4+IG1fcGFnZXM7CiB9OwogCiB0
ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+Ojp1bmtub3duTWV0
cmljcygpCkBAIC0xMjksMTMgKzEyOSw5IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IHR5cGVuYW1lIEds
eXBoTWV0cmljc01hcDxUPjo6R2x5cGhNZXRyaWNzUGFnZSYgR2x5cGhNZXRyaWNzTWFwCiAgICAg
ICAgIHJldHVybiBtX3ByaW1hcnlQYWdlOwogICAgIH0KIAotICAgIGlmICghbV9wYWdlcykKLSAg
ICAgICAgbV9wYWdlcyA9IG1ha2VVbmlxdWU8SGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxH
bHlwaE1ldHJpY3NQYWdlPj4+KCk7Ci0KLSAgICBhdXRvJiBwYWdlID0gbV9wYWdlcy0+ZW5zdXJl
KHBhZ2VOdW1iZXIsIFtdIHsKKyAgICByZXR1cm4gKm1fcGFnZXMuZW5zdXJlKHBhZ2VOdW1iZXIs
IFtdIHsKICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R2x5cGhNZXRyaWNzUGFnZT4odW5rbm93
bk1ldHJpY3MoKSk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIHJldHVybiAqcGFnZTsK
IH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAppbmRleCAzM2EyMTc0YTk5YjE3
YmIxNmI4NTcxNTdlMTdiOGNmMmViNjFlYjlkLi5iMDBlMDNkZmZiNjk5NTUwMjRjY2U2ZTIwYjBk
NmJkMTE4MWQ0NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L05ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JraW5nQ29udGV4dC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdF
bmFibGVkKCkgY29uc3QgPSAwOyAvLyBGSVhNRTogUmVjb25jaWxlIHdpdGggUmVzb3VyY2VIYW5k
bGU6OmZvcmNlQ29udGVudFNuaWZmaW5nKCkuCi0gICAgdmlydHVhbCBTY2hlZHVsZVBhaXJIYXNo
U2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBjb25zdCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3Vy
Y2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0ID0gMDsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCmluZGV4IDkxZDlmYjAwYjM4MzZiMWI1Nzdm
YjFmMDg1NWZlNDNhZjgxMmE1ZmQuLjM3MTIxNzUxNTFhZDY2YTllYzU3NGUwNWUwNGU3MDY5ODJl
NDIzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKQEAgLTEwOSwzMyArMTA5LDMzIEBA
IHVuc2lnbmVkIEdyaWQ6OmF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbikgY29uc3QKICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvclJvd3MgPyBtX2F1
dG9SZXBlYXRSb3dzIDogbV9hdXRvUmVwZWF0Q29sdW1uczsKIH0KIAotdm9pZCBHcmlkOjpzZXRB
dXRvUmVwZWF0RW1wdHlDb2x1bW5zKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNl
dD4gYXV0b1JlcGVhdEVtcHR5Q29sdW1ucykKK3ZvaWQgR3JpZDo6c2V0QXV0b1JlcGVhdEVtcHR5
Q29sdW1ucyhPcmRlcmVkVHJhY2tJbmRleFNldCYmIGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMpCiB7
Ci0gICAgQVNTRVJUKCFhdXRvUmVwZWF0RW1wdHlDb2x1bW5zIHx8IChhdXRvUmVwZWF0RW1wdHlD
b2x1bW5zLT5zaXplKCkgPD0gbV9hdXRvUmVwZWF0Q29sdW1ucykpOworICAgIEFTU0VSVChhdXRv
UmVwZWF0RW1wdHlDb2x1bW5zLnNpemUoKSA8PSBtX2F1dG9SZXBlYXRDb2x1bW5zKTsKICAgICBt
X2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMgPSBXVEZNb3ZlKGF1dG9SZXBlYXRFbXB0eUNvbHVtbnMp
OwogfQogCi12b2lkIEdyaWQ6OnNldEF1dG9SZXBlYXRFbXB0eVJvd3Moc3RkOjp1bmlxdWVfcHRy
PE9yZGVyZWRUcmFja0luZGV4U2V0PiBhdXRvUmVwZWF0RW1wdHlSb3dzKQordm9pZCBHcmlkOjpz
ZXRBdXRvUmVwZWF0RW1wdHlSb3dzKE9yZGVyZWRUcmFja0luZGV4U2V0JiYgYXV0b1JlcGVhdEVt
cHR5Um93cykKIHsKLSAgICBBU1NFUlQoIWF1dG9SZXBlYXRFbXB0eVJvd3MgfHwgKGF1dG9SZXBl
YXRFbXB0eVJvd3MtPnNpemUoKSA8PSBtX2F1dG9SZXBlYXRSb3dzKSk7CisgICAgQVNTRVJUKGF1
dG9SZXBlYXRFbXB0eVJvd3Muc2l6ZSgpIDw9IG1fYXV0b1JlcGVhdFJvd3MpOwogICAgIG1fYXV0
b1JlcGVhdEVtcHR5Um93cyA9IFdURk1vdmUoYXV0b1JlcGVhdEVtcHR5Um93cyk7CiB9CiAKIGJv
b2wgR3JpZDo6aGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBkaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5z
ID8gISFtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMgOiAhIW1fYXV0b1JlcGVhdEVtcHR5Um93czsK
KyAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyAhbV9hdXRvUmVwZWF0RW1wdHlD
b2x1bW5zLmlzRW1wdHkoKSA6ICFtX2F1dG9SZXBlYXRFbXB0eVJvd3MuaXNFbXB0eSgpOwogfQog
CiBib29sIEdyaWQ6OmlzRW1wdHlBdXRvUmVwZWF0VHJhY2soR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbGluZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzQXV0
b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikpOwotICAgIHJldHVybiBhdXRvUmVwZWF0RW1w
dHlUcmFja3MoZGlyZWN0aW9uKS0+Y29udGFpbnMobGluZSk7CisgICAgcmV0dXJuIGF1dG9SZXBl
YXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLmNvbnRhaW5zKGxpbmUpOwogfQogCi1PcmRlcmVkVHJh
Y2tJbmRleFNldCogR3JpZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Citjb25zdCBPcmRlcmVkVHJhY2tJbmRleFNldCYgR3Jp
ZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rp
b24pKTsKLSAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBtX2F1dG9SZXBlYXRF
bXB0eUNvbHVtbnMuZ2V0KCkgOiBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuZ2V0KCk7CisgICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zIDog
bV9hdXRvUmVwZWF0RW1wdHlSb3dzOwogfQogCiBHcmlkU3BhbiBHcmlkOjpncmlkSXRlbVNwYW4o
Y29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbikgY29uc3QKQEAgLTE1Nyw4ICsxNTcsOCBAQCB2b2lkIEdyaWQ6OnNldE5lZWRzSXRlbXNQ
bGFjZW1lbnQoYm9vbCBuZWVkc0l0ZW1zUGxhY2VtZW50KQogICAgIG1fZ3JpZEl0ZW1BcmVhLmNs
ZWFyKCk7CiAgICAgbV9leHBsaWNpdFJvd1N0YXJ0ID0gMDsKICAgICBtX2V4cGxpY2l0Q29sdW1u
U3RhcnQgPSAwOwotICAgIG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyA9IG51bGxwdHI7Ci0gICAg
bV9hdXRvUmVwZWF0RW1wdHlSb3dzID0gbnVsbHB0cjsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eUNv
bHVtbnMuY2xlYXIoKTsKKyAgICBtX2F1dG9SZXBlYXRFbXB0eVJvd3MuY2xlYXIoKTsKICAgICBt
X2F1dG9SZXBlYXRDb2x1bW5zID0gMDsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gMDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvR3JpZC5oCmluZGV4IDcyY2FkZjY4ZWY0ZDMyNjZjZTFmOGNlZWJkYzlhNDlk
ZjJiYzgxMWIuLmFkMjgwNDEyNzMyOTAxYjNjMjJlNzIyN2ZhMTdhMDRhZjZjODk2N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWQuaApAQCAtNjcsMTQgKzY3LDE0IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBhdXRvUmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAg
ICAgdm9pZCBzZXRBdXRvUmVwZWF0VHJhY2tzKHVuc2lnbmVkIGF1dG9SZXBlYXRSb3dzLCB1bnNp
Z25lZCBhdXRvUmVwZWF0Q29sdW1ucyk7CiAKLSAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eUNv
bHVtbnMoc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0Pik7Ci0gICAgdm9pZCBz
ZXRBdXRvUmVwZWF0RW1wdHlSb3dzKHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNl
dD4pOworICAgIHZvaWQgc2V0QXV0b1JlcGVhdEVtcHR5Q29sdW1ucyhPcmRlcmVkVHJhY2tJbmRl
eFNldCYmKTsKKyAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eVJvd3MoT3JkZXJlZFRyYWNrSW5k
ZXhTZXQmJik7CiAKICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0RW1wdHlUcmFja3NDb3VudChHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIGJvb2wgaGFzQXV0b1JlcGVhdEVtcHR5
VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5
QXV0b1JlcGVhdFRyYWNrKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQpIGNvbnN0
OwogCi0gICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQqIGF1dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGNvbnN0IE9yZGVyZWRUcmFja0luZGV4
U2V0JiBhdXRvUmVwZWF0RW1wdHlUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25z
dDsKIAogICAgIE9yZGVySXRlcmF0b3ImIG9yZGVySXRlcmF0b3IoKSB7IHJldHVybiBtX29yZGVy
SXRlcmF0b3I7IH0KIApAQCAtOTgsOCArOTgsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxj
b25zdCBSZW5kZXJCb3gqLCBHcmlkQXJlYT4gbV9ncmlkSXRlbUFyZWE7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1uczsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVt
cHR5Um93czsKKyAgICBPcmRlcmVkVHJhY2tJbmRleFNldCBtX2F1dG9SZXBlYXRFbXB0eUNvbHVt
bnM7CisgICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQgbV9hdXRvUmVwZWF0RW1wdHlSb3dzOwogfTsK
IAogY2xhc3MgR3JpZEl0ZXJhdG9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXggYTI3MGRiOGJkNmY4NGNkNzkw
ZGFmMjExNzY2OGY1ZWMyZGQyNjZmZS4uYzA5NzE5N2E4N2ViM2I5YTAyMWFlMzk2Y2MwZWNiYWUw
OTY0ZmIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFj
a1NpemluZ0FsZ29yaXRobS5jcHAKQEAgLTY2MSw3ICs2NjEsNyBAQCBHcmlkVHJhY2tTaXplIEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobTo6Y2FsY3VsYXRlR3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tT
aXppbmdEaQogICAgIHJldHVybiBHcmlkVHJhY2tTaXplKG1pblRyYWNrQnJlYWR0aCwgbWF4VHJh
Y2tCcmVhZHRoKTsKIH0KIAotZG91YmxlIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6Y29tcHV0
ZUZsZXhGYWN0b3JVbml0U2l6ZShjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzLCBkb3Vi
bGUgZmxleEZhY3RvclN1bSwgTGF5b3V0VW5pdCYgbGVmdE92ZXJTcGFjZSwgY29uc3QgVmVjdG9y
PHVuc2lnbmVkLCA4PiYgZmxleGlibGVUcmFja3NJbmRleGVzLCBzdGQ6OnVuaXF1ZV9wdHI8VHJh
Y2tJbmRleFNldD4gdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSkgY29uc3QKK2RvdWJsZSBHcmlk
VHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVj
dG9yPEdyaWRUcmFjaz4mIHRyYWNrcywgZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQm
IGxlZnRPdmVyU3BhY2UsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tz
SW5kZXhlcywgVHJhY2tJbmRleFNldCYmIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUpIGNvbnN0
CiB7CiAgICAgLy8gV2Ugd2FudCB0byBhdm9pZCB0aGUgZWZmZWN0IG9mIGZsZXggZmFjdG9ycyBz
dW0gYmVsb3cgMSBtYWtpbmcgdGhlIGZhY3RvciB1bml0IHNpemUgdG8gZ3JvdyBleHBvbmVudGlh
bGx5LgogICAgIGRvdWJsZSBoeXBvdGhldGljYWxGYWN0b3JVbml0U2l6ZSA9IGxlZnRPdmVyU3Bh
Y2UgLyBzdGQ6Om1heDxkb3VibGU+KDEsIGZsZXhGYWN0b3JTdW0pOwpAQCAtNjY5LDcgKzY2OSw3
IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4RmFjdG9yVW5p
dFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgLy8gcHJvZHVjdCBvZiB0aGUgaHlwb3Ro
ZXRpY2FsICJmbGV4IGZhY3RvciB1bml0IiBhbmQgYW55IGZsZXhpYmxlIHRyYWNrJ3MgImZsZXgg
ZmFjdG9yIiBtdXN0IGJlIGdyYXRlciB0aGFuIHN1Y2ggdHJhY2sncyAiYmFzZSBzaXplIi4KICAg
ICBib29sIHZhbGlkRmxleEZhY3RvclVuaXQgPSB0cnVlOwogICAgIGZvciAoYXV0byBpbmRleCA6
IGZsZXhpYmxlVHJhY2tzSW5kZXhlcykgewotICAgICAgICBpZiAodHJhY2tzVG9UcmVhdEFzSW5m
bGV4aWJsZSAmJiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLT5jb250YWlucyhpbmRleCkpCisg
ICAgICAgIGlmICh0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLmNvbnRhaW5zKGluZGV4KSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBMYXlvdXRVbml0IGJhc2VTaXplID0gdHJhY2tz
W2luZGV4XS5iYXNlU2l6ZSgpOwogICAgICAgICBkb3VibGUgZmxleEZhY3RvciA9IHRyYWNrc1tp
bmRleF0uY2FjaGVkVHJhY2tTaXplKCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpOwpAQCAtNjc3
LDkgKzY3Nyw3IEBAIGRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4
RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjCiAgICAgICAgIGlmIChiYXNlU2l6
ZSA+IGh5cG90aGV0aWNhbEZhY3RvclVuaXRTaXplICogZmxleEZhY3RvcikgewogICAgICAgICAg
ICAgbGVmdE92ZXJTcGFjZSAtPSBiYXNlU2l6ZTsKICAgICAgICAgICAgIGZsZXhGYWN0b3JTdW0g
LT0gZmxleEZhY3RvcjsKLSAgICAgICAgICAgIGlmICghdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJs
ZSkKLSAgICAgICAgICAgICAgICB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbWFrZVVuaXF1
ZTxUcmFja0luZGV4U2V0PigpOwotICAgICAgICAgICAgdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJs
ZS0+YWRkKGluZGV4KTsKKyAgICAgICAgICAgIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUuYWRk
KGluZGV4KTsKICAgICAgICAgICAgIHZhbGlkRmxleEZhY3RvclVuaXQgPSBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uaAppbmRleCA2Yjc5N2VhODc4NTQwOWRkZWIxOGEwNTlmNDE2MGQ1NWQ2
NWQ1OGZmLi43N2Y5MGU1YjQ4NWZlMDdhYzkyZGZkZWFjNzA4MDI4YzliNzEyNjYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5o
CkBAIC0xNzEsNyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZv
ciBzdGVwIDQuIFN0cmVjaCBmbGV4aWJsZSB0cmFja3MuCiAgICAgdHlwZWRlZiBIYXNoU2V0PHVu
c2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dW5zaWduZWQ+PiBUcmFja0luZGV4U2V0OwotICAgIGRvdWJsZSBjb21wdXRlRmxl
eEZhY3RvclVuaXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFja3MsIGRvdWJsZSBm
bGV4RmFjdG9yU3VtLCBMYXlvdXRVbml0JiBsZWZ0T3ZlclNwYWNlLCBjb25zdCBWZWN0b3I8dW5z
aWduZWQsIDg+JiBmbGV4aWJsZVRyYWNrc0luZGV4ZXMsIHN0ZDo6dW5pcXVlX3B0cjxUcmFja0lu
ZGV4U2V0PiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0gbnVsbHB0cikgY29uc3Q7CisgICAg
ZG91YmxlIGNvbXB1dGVGbGV4RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4m
IHRyYWNrcywgZG91YmxlIGZsZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxlZnRPdmVyU3BhY2Us
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5kZXhlcywgVHJhY2tJ
bmRleFNldCYmIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUgPSB7IH0pIGNvbnN0OwogICAgIHZv
aWQgY29tcHV0ZUZsZXhTaXplZFRyYWNrc0dyb3d0aChkb3VibGUgZmxleEZyYWN0aW9uLCBWZWN0
b3I8TGF5b3V0VW5pdD4mIGluY3JlbWVudHMsIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25z
dDsKICAgICBkb3VibGUgZmluZEZyVW5pdFNpemUoY29uc3QgR3JpZFNwYW4mIHRyYWNrc1NwYW4s
IExheW91dFVuaXQgbGVmdE92ZXJTcGFjZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKaW5kZXggMTYxZjIyOTVlMTgzOTQ1ZDZhOTg2OGNk
NGJkNWNhZjc1YWIzMzEwMi4uN2FmZDUxZjJhZDYyZDdhOGE0Zjc0YTRkN2U5MDA2MmY5ZDJkOTY4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKQEAg
LTI0LDggKzI0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1IaXRUZXN0TG9jYXRpb246
OkhpdFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKLQogSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0
TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkK
ICAgICAsIG1fYm91bmRpbmdCb3gocmVjdEZvclBvaW50KHBvaW50LCAwLCAwLCAwLCAwKSkKQEAg
LTc4LDMwICs3Niw2IEBAIEhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmCiAgICAgbW92ZShvZmZzZXQp
OwogfQogCi1IaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9j
YXRpb24mIG90aGVyKQotICAgIDogbV9wb2ludChvdGhlci5tX3BvaW50KQotICAgICwgbV9ib3Vu
ZGluZ0JveChvdGhlci5tX2JvdW5kaW5nQm94KQotICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90
aGVyLm1fdHJhbnNmb3JtZWRQb2ludCkKLSAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG90aGVyLm1f
dHJhbnNmb3JtZWRSZWN0KQotICAgICwgbV9pc1JlY3RCYXNlZChvdGhlci5tX2lzUmVjdEJhc2Vk
KQotICAgICwgbV9pc1JlY3RpbGluZWFyKG90aGVyLm1faXNSZWN0aWxpbmVhcikKLXsKLX0KLQot
SGl0VGVzdExvY2F0aW9uOjp+SGl0VGVzdExvY2F0aW9uKCkgPSBkZWZhdWx0OwotCi1IaXRUZXN0
TG9jYXRpb24mIEhpdFRlc3RMb2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgb3RoZXIpCi17Ci0gICAgbV9wb2ludCA9IG90aGVyLm1fcG9pbnQ7Ci0gICAgbV9ib3VuZGlu
Z0JveCA9IG90aGVyLm1fYm91bmRpbmdCb3g7Ci0gICAgbV90cmFuc2Zvcm1lZFBvaW50ID0gb3Ro
ZXIubV90cmFuc2Zvcm1lZFBvaW50OwotICAgIG1fdHJhbnNmb3JtZWRSZWN0ID0gb3RoZXIubV90
cmFuc2Zvcm1lZFJlY3Q7Ci0gICAgbV9pc1JlY3RCYXNlZCA9IG90aGVyLm1faXNSZWN0QmFzZWQ7
Ci0gICAgbV9pc1JlY3RpbGluZWFyID0gb3RoZXIubV9pc1JlY3RpbGluZWFyOwotCi0gICAgcmV0
dXJuICp0aGlzOwotfQotCiB2b2lkIEhpdFRlc3RMb2NhdGlvbjo6bW92ZShjb25zdCBMYXlvdXRT
aXplJiBvZmZzZXQpCiB7CiAgICAgbV9wb2ludC5tb3ZlKG9mZnNldCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKaW5kZXggMDIzMDM1ZjRiOWE1YzMzNTIyMDcx
OWQ0NTFmYzA0NTU1N2ZlZTAzOC4uMDU4NmQ0NTA3YzVjMGFiYWVhZWUyNzEyNzE2NzUyNzJkNzVh
NWM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIaXRUZXN0TG9jYXRpb24gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JU
IEhpdFRlc3RMb2NhdGlvbigpOworICAgIEhpdFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKICAg
ICBIaXRUZXN0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogICAgIEhpdFRlc3RMb2NhdGlv
bihjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRRdWFkJik7CkBAIC0zNyw5ICszNyw2IEBA
IHB1YmxpYzoKIAogICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0TG9jYXRpb24gaW4gYSBu
ZXcgcmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2ludCBhbmQg
YXJlYS4KICAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2Zmc2V0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBIaXRUZXN0TG9jYXRpb24o
Y29uc3QgSGl0VGVzdExvY2F0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkhpdFRlc3RMb2Nh
dGlvbigpOwotICAgIEhpdFRlc3RMb2NhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYpOwogCiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludDsgfQogICAgIEludFBvaW50IHJvdW5kZWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHJv
dW5kZWRJbnRQb2ludChtX3BvaW50KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCmluZGV4IDkwZDA3NWY4OWQwNTBjMDM1NDdiNWJlMzZhOTY5OTQ2M2ExMzFj
NTMuLjViZmJlNTM2Y2FhOTIzZTBlZmZiZTBjMjM1NTY5NTE4ZjYwMmI0ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTU1LDEyICs1NSw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGFwcGVuZFRvTm9kZVNldChjb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0
JiBzb3VyY2UsIEhpdFRlc3RSZXN1bHQ6Ok5vZGVTZXQmIGRlc3RpbmF0aW9uKQotewotICAgIGZv
ciAoYXV0byYgbm9kZSA6IHNvdXJjZSkKLSAgICAgICAgZGVzdGluYXRpb24uYWRkKG5vZGUuY29w
eVJlZigpKTsKLX0KLQogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpID0gZGVmYXVsdDsK
IAogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQp
CkBAIC04Nyw0NSArODEsOCBAQCBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgb3RoZXIpCiB7CiB9CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1
bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCi0gICAgOiBtX2hpdFRlc3RMb2NhdGlvbihv
dGhlci5tX2hpdFRlc3RMb2NhdGlvbikKLSAgICAsIG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9k
ZSgpKQotICAgICwgbV9pbm5lck5vblNoYXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2Rl
KCkpCi0gICAgLCBtX3BvaW50SW5Jbm5lck5vZGVGcmFtZShvdGhlci5tX3BvaW50SW5Jbm5lck5v
ZGVGcmFtZSkKLSAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCi0gICAgLCBt
X2lubmVyVVJMRWxlbWVudChvdGhlci5VUkxFbGVtZW50KCkpCi0gICAgLCBtX3Njcm9sbGJhcihv
dGhlci5zY3JvbGxiYXIoKSkKLSAgICAsIG1faXNPdmVyV2lkZ2V0KG90aGVyLmlzT3ZlcldpZGdl
dCgpKQotewotICAgIC8vIE9ubHkgY29weSB0aGUgTm9kZVNldCBpbiBjYXNlIG9mIGxpc3QgaGl0
IHRlc3QuCi0gICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkgewotICAgICAgICBt
X2xpc3RCYXNlZFRlc3RSZXN1bHQgPSBtYWtlVW5pcXVlPE5vZGVTZXQ+KCk7Ci0gICAgICAgIGFw
cGVuZFRvTm9kZVNldCgqb3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0LCAqbV9saXN0QmFzZWRU
ZXN0UmVzdWx0KTsKLSAgICB9Ci19Ci0KIEhpdFRlc3RSZXN1bHQ6On5IaXRUZXN0UmVzdWx0KCkg
PSBkZWZhdWx0OwogCi1IaXRUZXN0UmVzdWx0JiBIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29u
c3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCi17Ci0gICAgbV9oaXRUZXN0TG9jYXRpb24gPSBvdGhl
ci5tX2hpdFRlc3RMb2NhdGlvbjsKLSAgICBtX2lubmVyTm9kZSA9IG90aGVyLmlubmVyTm9kZSgp
OwotICAgIG1faW5uZXJOb25TaGFyZWROb2RlID0gb3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCk7
Ci0gICAgbV9wb2ludEluSW5uZXJOb2RlRnJhbWUgPSBvdGhlci5tX3BvaW50SW5Jbm5lck5vZGVG
cmFtZTsKLSAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7Ci0gICAgbV9pbm5l
clVSTEVsZW1lbnQgPSBvdGhlci5VUkxFbGVtZW50KCk7Ci0gICAgbV9zY3JvbGxiYXIgPSBvdGhl
ci5zY3JvbGxiYXIoKTsKLSAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgp
OwotCi0gICAgLy8gT25seSBjb3B5IHRoZSBOb2RlU2V0IGluIGNhc2Ugb2YgbGlzdCBoaXQgdGVz
dC4KLSAgICBpZiAob3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0KSB7Ci0gICAgICAgIG1fbGlz
dEJhc2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICAgICAgYXBwZW5k
VG9Ob2RlU2V0KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsICptX2xpc3RCYXNlZFRlc3RS
ZXN1bHQpOwotICAgIH0KLQotICAgIHJldHVybiAqdGhpczsKLX0KLQogc3RhdGljIE5vZGUqIG1v
dmVPdXRPZlVzZXJBZ2VudFNoYWRvd1RyZWUoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobm9kZS5p
c0luU2hhZG93VHJlZSgpKSB7CkBAIC02NDQsOCArNjAxLDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0
Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWRO
b2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBl
PgotaW5saW5lIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFz
ZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IFJl
Y3RUeXBlJiByZWN0KQoraW5saW5lIE9wdGlvbmFsPEhpdFRlc3RQcm9ncmVzcz4gSGl0VGVzdFJl
c3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiBub2RlLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBJZiBpdCBpcyBub3QgYSBsaXN0
LWJhc2VkIGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCiAgICAgaWYgKCFy
ZXF1ZXN0LnJlc3VsdElzRWxlbWVudExpc3QoKSkgewpAQCAtNjYwLDEzICs2MTYsMTkgQEAgaW5s
aW5lIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0
UmVzdWx0Q29tbW9uKE5vZGUqIG4KICAgICAgICAgfHwgKHJlcXVlc3QuZGlzYWxsb3dzVXNlckFn
ZW50U2hhZG93Q29udGVudEV4Y2VwdEZvckltYWdlT3ZlcmxheXMoKSAmJiAhSFRNTEVsZW1lbnQ6
OmlzSW5zaWRlSW1hZ2VPdmVybGF5KCpub2RlKSAmJiBub2RlLT5pc0luVXNlckFnZW50U2hhZG93
VHJlZSgpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPmRvY3VtZW50KCkuYW5jZXN0b3JOb2RlSW5U
aGlzU2NvcGUobm9kZSk7CiAKLSAgICBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLmFkZCgq
bm9kZSk7CisgICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0LmFkZCgqbm9kZSk7CiAKICAgICBpZiAo
cmVxdWVzdC5pbmNsdWRlc0FsbEVsZW1lbnRzVW5kZXJQb2ludCgpKQogICAgICAgICByZXR1cm4g
SGl0VGVzdFByb2dyZXNzOjpDb250aW51ZTsKIAotICAgIGJvb2wgcmVnaW9uRmlsbGVkID0gcmVj
dC5jb250YWlucyhsb2NhdGlvbkluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVy
biByZWdpb25GaWxsZWQgPyBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3AgOiBIaXRUZXN0UHJvZ3Jlc3M6
OkNvbnRpbnVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFJlY3RUeXBlPiBpbmxpbmUgSGl0VGVzdFByb2dyZXNzIEhpdFRlc3RSZXN1bHQ6OmFkZE5v
ZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHRDb21tb24oTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgUmVjdFR5cGUmIHJlY3QpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gYWRkTm9k
ZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihub2RlLCByZXF1ZXN0KSkKKyAgICAgICAgcmV0
dXJuICpyZXN1bHQ7CisgICAgcmV0dXJuIHJlY3QuY29udGFpbnMobG9jYXRpb25JbkNvbnRhaW5l
ci5ib3VuZGluZ0JveCgpKSA/IEhpdFRlc3RQcm9ncmVzczo6U3RvcCA6IEhpdFRlc3RQcm9ncmVz
czo6Q29udGludWU7CiB9CiAKIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2Rl
VG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFJlY3QmIHJlY3QpCkBAIC02OTMsMjIgKzY1NSw4IEBAIHZvaWQgSGl0VGVzdFJlc3Vs
dDo6YXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxCiAgICAgICAgIG1faXNPdmVyV2lkZ2V0ID0gb3RoZXIuaXNPdmVyV2lkZ2V0KCk7CiAg
ICAgfQogCi0gICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkKLSAgICAgICAgYXBw
ZW5kVG9Ob2RlU2V0KCpvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQsIG11dGFibGVMaXN0QmFz
ZWRUZXN0UmVzdWx0KCkpOwotfQotCi1jb25zdCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBIaXRU
ZXN0UmVzdWx0OjpsaXN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbGlz
dEJhc2VkVGVzdFJlc3VsdCkKLSAgICAgICAgbV9saXN0QmFzZWRUZXN0UmVzdWx0ID0gbWFrZVVu
aXF1ZTxOb2RlU2V0PigpOwotICAgIHJldHVybiAqbV9saXN0QmFzZWRUZXN0UmVzdWx0OwotfQot
Ci1IaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2Vk
VGVzdFJlc3VsdCgpCi17Ci0gICAgaWYgKCFtX2xpc3RCYXNlZFRlc3RSZXN1bHQpCi0gICAgICAg
IG1fbGlzdEJhc2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8Tm9kZVNldD4oKTsKLSAgICByZXR1
cm4gKm1fbGlzdEJhc2VkVGVzdFJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBvdGhlci5t
X2xpc3RCYXNlZFRlc3RSZXN1bHQpCisgICAgICAgIG1fbGlzdEJhc2VkVGVzdFJlc3VsdC5hZGQo
bm9kZSk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IEhpdFRlc3RSZXN1bHQ6OmRpY3RhdGlvbkFsdGVy
bmF0aXZlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApp
bmRleCA1ZWM5MmJmMTFkMGM5MmQyMTA2Mjk3YmNmNDhkZTM3ZGM4NjM0MGY5Li4zN2QxZmZiYjYx
MWQzNGRkODU0NWM3NThmMmZjYzlhODk1MDM3MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmgKQEAgLTQ0LDE2ICs0NCwxMSBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBIaXRUZXN0UmVzdWx0KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgSGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgSGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2ln
bmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFk
ZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGlj
aXQgSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB+SGl0VGVzdFJlc3VsdCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSGl0VGVzdFJlc3Vs
dCYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SW5uZXJOb2RlKE5vZGUqKTsKICAgICBOb2RlKiBpbm5lck5vZGUoKSBjb25zdCB7
IHJldHVybiBtX2lubmVyTm9kZS5nZXQoKTsgfQogCkBAIC03Myw3ICs2OCw2IEBAIHB1YmxpYzoK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBsaW5rU3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25z
dDsKIAotICAgIC8vIEZvcndhcmRlZCBmcm9tIEhpdFRlc3RMb2NhdGlvbgogICAgIGJvb2wgaXNS
ZWN0QmFzZWRUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0TG9jYXRpb24uaXNSZWN0QmFz
ZWRUZXN0KCk7IH0KIAogICAgIC8vIFRoZSBoaXQtdGVzdGVkIHBvaW50IGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgbWFpbiBmcmFtZS4KQEAgLTEzNiwxMCArMTMwLDcgQEAgcHVibGljOgogICAg
IEhpdFRlc3RQcm9ncmVzcyBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jik7CiAKLSAgICAvLyBJZiBtX2xpc3RCYXNlZFRlc3RS
ZXN1bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1fbGlzdEJh
c2VkVGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCi0gICAgLy8gc2Vuc2UgYmVjYXVz
ZSB0aGUgTm9kZVNldCBpcyBzZWxkb20gbmVjZXNzYXJ5LCBhbmQgaXQncyBzb21ld2hhdCBleHBl
bnNpdmUgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUuIFRoaXMgbWV0aG9kIGRvZXMKLSAgICAv
LyB0aGUgc2FtZSB0aGluZyBhcyBtdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCgpLCBidXQgaGVy
ZSB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbnN0LgotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IE5v
ZGVTZXQmIGxpc3RCYXNlZFRlc3RSZXN1bHQoKSBjb25zdDsKKyAgICBjb25zdCBOb2RlU2V0JiBs
aXN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0QmFzZWRUZXN0UmVzdWx0
OyB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMoKSBjb25zdDsK
IApAQCAtMTQ3LDggKzEzOCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50
KiB0YXJnZXRFbGVtZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgTm9kZVNldCYgbXV0YWJs
ZUxpc3RCYXNlZFRlc3RSZXN1bHQoKTsgLy8gU2VlIGFib3ZlLgotCisgICAgT3B0aW9uYWw8SGl0
VGVzdFByb2dyZXNzPiBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqLCBj
b25zdCBIaXRUZXN0UmVxdWVzdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJlY3RUeXBlPiBI
aXRUZXN0UHJvZ3Jlc3MgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBSZWN0
VHlwZSYpOwogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGVGb3JJbWFnZURhdGEoKSBjb25zdDsKQEAg
LTE1Niw2ICsxNDYsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKICAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSBjb25zdDsKICNlbmRpZgorCiAgICAgSGl0VGVzdExv
Y2F0aW9uIG1faGl0VGVzdExvY2F0aW9uOwogCiAgICAgUmVmUHRyPE5vZGU+IG1faW5uZXJOb2Rl
OwpAQCAtMTY3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9z
Y3JvbGxiYXI7CiAgICAgYm9vbCBtX2lzT3ZlcldpZGdldCB7IGZhbHNlIH07IC8vIFJldHVybnMg
dHJ1ZSBpZiB3ZSBhcmUgb3ZlciBhIHdpZGdldCAoYW5kIG5vdCBpbiB0aGUgYm9yZGVyL3BhZGRp
bmcgYXJlYSBvZiBhIFJlbmRlcldpZGdldCBmb3IgZXhhbXBsZSkuCiAKLSAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxOb2RlU2V0PiBtX2xpc3RCYXNlZFRlc3RSZXN1bHQ7CisgICAgTm9kZVNl
dCBtX2xpc3RCYXNlZFRlc3RSZXN1bHQ7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZGlz
cGxheVN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA3ZmZmZTZiYzBiYTJmMzViM2ExNTkzOGVlNWU5
ZDVlZDQxMTAyZWQ1Li45ZTFlYzVjMmY5OWU2ZGQyZjI0NWNlMmZhZGQwNmVmYzM4ZjMxMmZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTIsNyArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC05Niw2MSArOTYsNTQgQEAgc3RydWN0IFNhbWVTaXplQXNSZW5k
ZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCb3ggewogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVu
ZGVyQmxvY2spID09IHNpemVvZihTYW1lU2l6ZUFzUmVuZGVyQmxvY2spLCBSZW5kZXJCbG9ja19z
aG91bGRfc3RheV9zbWFsbCk7CiAKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldD4+IFRyYWNrZWREZXNj
ZW5kYW50c01hcDsKLXR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1
ZV9wdHI8SGFzaFNldDxjb25zdCBSZW5kZXJCbG9jayo+Pj4gVHJhY2tlZENvbnRhaW5lck1hcDsK
K3VzaW5nIFRyYWNrZWREZXNjZW5kYW50c01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sq
LCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldD47Cit1c2luZyBUcmFja2VkQ29udGFpbmVyTWFw
ID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrKj4+
OwogCi1zdGF0aWMgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiBwZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dHNNYXA7Ci1zdGF0aWMgVHJhY2tlZENvbnRhaW5lck1hcCogcGVyY2VudEhlaWdodENvbnRhaW5l
ck1hcDsKK3N0YXRpYyBUcmFja2VkRGVzY2VuZGFudHNNYXAmIHBlcmNlbnRIZWlnaHREZXNjZW5k
YW50c01hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRyYWNrZWREZXNjZW5kYW50
c01hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBUcmFja2VkQ29udGFpbmVy
TWFwJiBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VHJhY2tlZENvbnRhaW5lck1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CiAKIHN0
YXRpYyB2b2lkIGluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKGNvbnN0IFJlbmRlckJsb2Nr
JiBjb250YWluZXIsIFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHsKLSAgICBpZiAoIXBlcmNlbnRI
ZWlnaHREZXNjZW5kYW50c01hcCkgewotICAgICAgICBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNN
YXAgPSBuZXcgVHJhY2tlZERlc2NlbmRhbnRzTWFwOwotICAgICAgICBwZXJjZW50SGVpZ2h0Q29u
dGFpbmVyTWFwID0gbmV3IFRyYWNrZWRDb250YWluZXJNYXA7Ci0gICAgfQotICAgIAotICAgIGF1
dG8mIGRlc2NlbmRhbnRTZXQgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmVuc3VyZSgm
Y29udGFpbmVyLCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFRyYWNrZWRSZW5kZXJl
ckxpc3RIYXNoU2V0PigpOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBkZXNj
ZW5kYW50U2V0ID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKCkuYWRkKCZjb250YWluZXIs
IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
Ym9vbCBhZGRlZCA9IGRlc2NlbmRhbnRTZXQtPmFkZCgmZGVzY2VuZGFudCkuaXNOZXdFbnRyeTsK
KyAgICBib29sIGFkZGVkID0gZGVzY2VuZGFudFNldC5hZGQoJmRlc2NlbmRhbnQpLmlzTmV3RW50
cnk7CiAgICAgaWYgKCFhZGRlZCkgewotICAgICAgICBBU1NFUlQocGVyY2VudEhlaWdodENvbnRh
aW5lck1hcC0+Z2V0KCZkZXNjZW5kYW50KSk7Ci0gICAgICAgIEFTU0VSVChwZXJjZW50SGVpZ2h0
Q29udGFpbmVyTWFwLT5nZXQoJmRlc2NlbmRhbnQpLT5jb250YWlucygmY29udGFpbmVyKSk7Cisg
ICAgICAgIEFTU0VSVChwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkuY29udGFpbnMoJmRlc2Nl
bmRhbnQpKTsKKyAgICAgICAgQVNTRVJUKHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5maW5k
KCZkZXNjZW5kYW50KS0+dmFsdWUuY29udGFpbnMoJmNvbnRhaW5lcikpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGF1dG8mIGNvbnRhaW5lclNldCA9IHBlcmNlbnRIZWlnaHRD
b250YWluZXJNYXAtPmVuc3VyZSgmZGVzY2VuZGFudCwgW10gewotICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrKj4+KCk7Ci0gICAgfSkuaXRlcmF0b3It
PnZhbHVlOworICAgIGF1dG8mIGNvbnRhaW5lclNldCA9IHBlcmNlbnRIZWlnaHRDb250YWluZXJN
YXAoKS5hZGQoJmRlc2NlbmRhbnQsIEhhc2hTZXQ8Y29uc3QgUmVuZGVyQmxvY2sqPiB7IH0pLml0
ZXJhdG9yLT52YWx1ZTsKIAotICAgIEFTU0VSVCghY29udGFpbmVyU2V0LT5jb250YWlucygmY29u
dGFpbmVyKSk7Ci0gICAgY29udGFpbmVyU2V0LT5hZGQoJmNvbnRhaW5lcik7CisgICAgQVNTRVJU
KCFjb250YWluZXJTZXQuY29udGFpbnMoJmNvbnRhaW5lcikpOworICAgIGNvbnRhaW5lclNldC5h
ZGQoJmNvbnRhaW5lcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZUZyb21UcmFja2VkUmVuZGVy
ZXJNYXBzKFJlbmRlckJveCYgZGVzY2VuZGFudCkKIHsKLSAgICBpZiAoIXBlcmNlbnRIZWlnaHRE
ZXNjZW5kYW50c01hcCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrKj4+IGNvbnRhaW5lclNldCA9IHBlcmNlbnRIZWln
aHRDb250YWluZXJNYXAtPnRha2UoJmRlc2NlbmRhbnQpOwotICAgIGlmICghY29udGFpbmVyU2V0
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZm9yIChhdXRvKiBjb250YWluZXIgOiAqY29u
dGFpbmVyU2V0KSB7CisgICAgZm9yIChhdXRvKiBjb250YWluZXIgOiBwZXJjZW50SGVpZ2h0Q29u
dGFpbmVyTWFwKCkudGFrZSgmZGVzY2VuZGFudCkpIHsKICAgICAgICAgLy8gRklYTUU6IERpc2Fi
bGluZyB0aGlzIGFzc2VydCB0ZW1wb3JhcmlseSB1bnRpbCB3ZSBmaXggdGhlIGxheW91dAogICAg
ICAgICAvLyBidWdzIGFzc29jaWF0ZWQgd2l0aCBwb3NpdGlvbmVkIG9iamVjdHMgbm90IHByb3Bl
cmx5IGNsZWFyZWQgZnJvbQogICAgICAgICAvLyB0aGVpciBhbmNlc3RvciBjaGFpbiBiZWZvcmUg
YmVpbmcgbW92ZWQuIFNlZSB3ZWJraXQgYnVnIDkzNzY2LgogICAgICAgICAvLyBBU1NFUlQoZGVz
Y2VuZGFudC0+aXNEZXNjZW5kYW50T2YoY29udGFpbmVyKSk7Ci0gICAgICAgIGF1dG8gZGVzY2Vu
ZGFudHNNYXBJdGVyYXRvciA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcC0+ZmluZChjb250
YWluZXIpOwotICAgICAgICBBU1NFUlQoZGVzY2VuZGFudHNNYXBJdGVyYXRvciAhPSBwZXJjZW50
SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmVuZCgpKTsKLSAgICAgICAgaWYgKGRlc2NlbmRhbnRzTWFw
SXRlcmF0b3IgPT0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT5lbmQoKSkKKyAgICAgICAg
YXV0byBkZXNjZW5kYW50c01hcEl0ZXJhdG9yID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFw
KCkuZmluZChjb250YWluZXIpOworICAgICAgICBBU1NFUlQoZGVzY2VuZGFudHNNYXBJdGVyYXRv
ciAhPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5lbmQoKSk7CisgICAgICAgIGlmIChk
ZXNjZW5kYW50c01hcEl0ZXJhdG9yID09IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmVu
ZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGF1dG8mIGRlc2NlbmRhbnRTZXQg
PSBkZXNjZW5kYW50c01hcEl0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgQVNTRVJUKGRlc2NlbmRh
bnRTZXQtPmNvbnRhaW5zKCZkZXNjZW5kYW50KSk7Ci0gICAgICAgIGRlc2NlbmRhbnRTZXQtPnJl
bW92ZSgmZGVzY2VuZGFudCk7Ci0gICAgICAgIGlmIChkZXNjZW5kYW50U2V0LT5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAtPnJlbW92ZShkZXNjZW5k
YW50c01hcEl0ZXJhdG9yKTsKKyAgICAgICAgQVNTRVJUKGRlc2NlbmRhbnRTZXQuY29udGFpbnMo
JmRlc2NlbmRhbnQpKTsKKyAgICAgICAgZGVzY2VuZGFudFNldC5yZW1vdmUoJmRlc2NlbmRhbnQp
OworICAgICAgICBpZiAoZGVzY2VuZGFudFNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBwZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5yZW1vdmUoZGVzY2VuZGFudHNNYXBJdGVyYXRvcik7
CiAgICAgfQogfQogCkBAIC0xNjIsMTYgKzE1NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFBy
b3RlY3QgYWdhaW5zdCBkb3VibGUgaW5zZXJ0IHdoZXJlIGEgZGVzY2VuZGFudCB3b3VsZCBlbmQg
dXAgd2l0aCBtdWx0aXBsZSBjb250YWluaW5nIGJsb2Nrcy4KICAgICAgICAgYXV0byogcHJldmlv
dXNDb250YWluaW5nQmxvY2sgPSBtX2NvbnRhaW5lck1hcC5nZXQoJnBvc2l0aW9uZWREZXNjZW5k
YW50KTsKICAgICAgICAgaWYgKHByZXZpb3VzQ29udGFpbmluZ0Jsb2NrICYmIHByZXZpb3VzQ29u
dGFpbmluZ0Jsb2NrICE9ICZjb250YWluaW5nQmxvY2spIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBkZXNjZW5kYW50cyA9IG1fZGVzY2VuZGFudHNNYXAuZ2V0KHByZXZpb3VzQ29udGFpbmluZ0Js
b2NrKSkKLSAgICAgICAgICAgICAgICBkZXNjZW5kYW50cy0+cmVtb3ZlKCZwb3NpdGlvbmVkRGVz
Y2VuZGFudCk7CisgICAgICAgICAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fZGVzY2VuZGFudHNN
YXAuZmluZChwcmV2aW91c0NvbnRhaW5pbmdCbG9jayk7IGl0ZXJhdG9yICE9IG1fZGVzY2VuZGFu
dHNNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLnJlbW92ZSgmcG9z
aXRpb25lZERlc2NlbmRhbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgZGVzY2VuZGFu
dHMgPSBtX2Rlc2NlbmRhbnRzTWFwLmVuc3VyZSgmY29udGFpbmluZ0Jsb2NrLCBbXSB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldD4oKTsK
LSAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvJiBkZXNjZW5kYW50cyA9
IG1fZGVzY2VuZGFudHNNYXAuYWRkKCZjb250YWluaW5nQmxvY2ssIFRyYWNrZWRSZW5kZXJlckxp
c3RIYXNoU2V0IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgICAgIGJvb2wgaXNOZXdFbnRy
eSA9IG1vdmVEZXNjZW5kYW50VG9FbmQgPT0gTW92ZURlc2NlbmRhbnRUb0VuZDo6WWVzID8gZGVz
Y2VuZGFudHMtPmFwcGVuZE9yTW92ZVRvTGFzdCgmcG9zaXRpb25lZERlc2NlbmRhbnQpLmlzTmV3
RW50cnkKLSAgICAgICAgICAgIDogZGVzY2VuZGFudHMtPmFkZCgmcG9zaXRpb25lZERlc2NlbmRh
bnQpLmlzTmV3RW50cnk7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1vdmVEZXNjZW5kYW50
VG9FbmQgPT0gTW92ZURlc2NlbmRhbnRUb0VuZDo6WWVzCisgICAgICAgICAgICA/IGRlc2NlbmRh
bnRzLmFwcGVuZE9yTW92ZVRvTGFzdCgmcG9zaXRpb25lZERlc2NlbmRhbnQpLmlzTmV3RW50cnkK
KyAgICAgICAgICAgIDogZGVzY2VuZGFudHMuYWRkKCZwb3NpdGlvbmVkRGVzY2VuZGFudCkuaXNO
ZXdFbnRyeTsKICAgICAgICAgaWYgKCFpc05ld0VudHJ5KSB7CiAgICAgICAgICAgICBBU1NFUlQo
bV9jb250YWluZXJNYXAuY29udGFpbnMoJnBvc2l0aW9uZWREZXNjZW5kYW50KSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xOTEsMzAgKzE4MywyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgYXV0byYgZGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c0l0ZXJhdG9y
LT52YWx1ZTsKLSAgICAgICAgQVNTRVJUKGRlc2NlbmRhbnRzLT5jb250YWlucyhjb25zdF9jYXN0
PFJlbmRlckJveCo+KCZwb3NpdGlvbmVkRGVzY2VuZGFudCkpKTsKKyAgICAgICAgQVNTRVJUKGRl
c2NlbmRhbnRzLmNvbnRhaW5zKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4oJnBvc2l0aW9uZWREZXNj
ZW5kYW50KSkpOwogCi0gICAgICAgIGRlc2NlbmRhbnRzLT5yZW1vdmUoY29uc3RfY2FzdDxSZW5k
ZXJCb3gqPigmcG9zaXRpb25lZERlc2NlbmRhbnQpKTsKLSAgICAgICAgaWYgKGRlc2NlbmRhbnRz
LT5pc0VtcHR5KCkpCisgICAgICAgIGRlc2NlbmRhbnRzLnJlbW92ZShjb25zdF9jYXN0PFJlbmRl
ckJveCo+KCZwb3NpdGlvbmVkRGVzY2VuZGFudCkpOworICAgICAgICBpZiAoZGVzY2VuZGFudHMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kZXNjZW5kYW50c01hcC5yZW1vdmUoZGVzY2VuZGFu
dHNJdGVyYXRvcik7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlQ29udGFpbmluZ0Jsb2Nr
KGNvbnN0IFJlbmRlckJsb2NrJiBjb250YWluaW5nQmxvY2spCiAgICAgewotICAgICAgICBhdXRv
IGRlc2NlbmRhbnRzID0gbV9kZXNjZW5kYW50c01hcC50YWtlKCZjb250YWluaW5nQmxvY2spOwot
ICAgICAgICBpZiAoIWRlc2NlbmRhbnRzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGZvciAoYXV0byogcmVuZGVyZXIgOiAqZGVzY2VuZGFudHMpCisgICAgICAgIGZvciAoYXV0byog
cmVuZGVyZXIgOiBtX2Rlc2NlbmRhbnRzTWFwLnRha2UoJmNvbnRhaW5pbmdCbG9jaykpCiAgICAg
ICAgICAgICBtX2NvbnRhaW5lck1hcC5yZW1vdmUocmVuZGVyZXIpOwogICAgIH0KICAgICAKLSAg
ICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZFJlbmRlcmVycyhjb25zdCBS
ZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrKSBjb25zdAorICAgIGNvbnN0IFRyYWNrZWRSZW5k
ZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkUmVuZGVyZXJzKGNvbnN0IFJlbmRlckJsb2NrJiBj
b250YWluaW5nQmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9kZXNjZW5kYW50
c01hcC5nZXQoJmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Rl
c2NlbmRhbnRzTWFwLmZpbmQoJmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgIHJldHVybiBpdGVy
YXRvciA9PSBtX2Rlc2NlbmRhbnRzTWFwLmVuZCgpID8gbnVsbHB0ciA6ICZpdGVyYXRvci0+dmFs
dWU7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHVzaW5nIERlc2NlbmRhbnRzTWFwID0gSGFzaE1h
cDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxUcmFja2VkUmVuZGVyZXJMaXN0
SGFzaFNldD4+OworICAgIHVzaW5nIERlc2NlbmRhbnRzTWFwID0gSGFzaE1hcDxjb25zdCBSZW5k
ZXJCbG9jayosIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0PjsKICAgICB1c2luZyBDb250YWlu
ZXJNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIGNvbnN0IFJlbmRlckJsb2NrKj47CiAg
ICAgCiAgICAgRGVzY2VuZGFudHNNYXAgbV9kZXNjZW5kYW50c01hcDsKQEAgLTIyNyw3ICsyMTYs
NyBAQCBzdGF0aWMgUG9zaXRpb25lZERlc2NlbmRhbnRzTWFwJiBwb3NpdGlvbmVkRGVzY2VuZGFu
dHNNYXAoKQogICAgIHJldHVybiBtYXBGb3JQb3NpdGlvbmVkRGVzY2VuZGFudHM7CiB9CiAKLXR5
cGVkZWYgSGFzaE1hcDxSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxS
ZW5kZXJJbmxpbmUqPj4+IENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcDsKK3VzaW5nIENvbnRp
bnVhdGlvbk91dGxpbmVUYWJsZU1hcCA9IEhhc2hNYXA8UmVuZGVyQmxvY2sqLCBMaXN0SGFzaFNl
dDxSZW5kZXJJbmxpbmUqPj47CiAKIHN0cnVjdCBVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRU
cmFuc2FjdGlvbiB7CiAgICAgVXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24o
Y29uc3QgUmVuZGVyVmlldyYgdmlldykKQEAgLTI0MSw3ICsyMzAsOCBAQCBzdHJ1Y3QgVXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24gewogICAgIEhhc2hTZXQ8UmVuZGVyQmxv
Y2sqPiBibG9ja3M7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
YXlvdXRUcmFuc2FjdGlvbj4gRGVsYXllZFVwZGF0ZVNjcm9sbEluZm9TdGFjazsKK3VzaW5nIERl
bGF5ZWRVcGRhdGVTY3JvbGxJbmZvU3RhY2sgPSBWZWN0b3I8VXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0VHJhbnNhY3Rpb24+OworCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlbGF5ZWRVcGRh
dGVTY3JvbGxJbmZvU3RhY2s+JiB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlv
blN0YWNrKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPERl
bGF5ZWRVcGRhdGVTY3JvbGxJbmZvU3RhY2s+PiBkZWxheWVkVXBkYXRlZFNjcm9sbEluZm9TdGFj
azsKQEAgLTI2NCw4ICsyNTQsMTMgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPFdlYWtQdHI8UmVu
ZGVyRnJhZ21lbnRlZEZsb3c+PiBtX2VuY2xvc2luZ0ZyYWdtZW50ZWRGbG93OwogfTsKIAotdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJs
b2NrUmFyZURhdGE+PiBSZW5kZXJCbG9ja1JhcmVEYXRhTWFwOwotc3RhdGljIFJlbmRlckJsb2Nr
UmFyZURhdGFNYXAqIGdSYXJlRGF0YU1hcDsKK3VzaW5nIFJlbmRlckJsb2NrUmFyZURhdGFNYXAg
PSBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2Nr
UmFyZURhdGE+PjsKKworc3RhdGljIFJlbmRlckJsb2NrUmFyZURhdGFNYXAmIHJlbmRlckJsb2Nr
UmFyZURhdGFNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZW5kZXJCbG9ja1Jh
cmVEYXRhTWFwPiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KIAogLy8gVGhpcyBjbGFzcyBoZWxw
cyBkaXNwYXRjaGluZyB0aGUgJ292ZXJmbG93JyBldmVudCBvbiBsYXlvdXQgY2hhbmdlLiBvdmVy
ZmxvdyBjYW4gYmUgc2V0IG9uIFJlbmRlckJveGVzLCB5ZXQgdGhlIGV4aXN0aW5nIGNvZGUKIC8v
IG9ubHkgd29ya3Mgb24gUmVuZGVyQmxvY2tzLiBJZiB0aGlzIGNoYW5nZSwgdGhpcyBjbGFzcyBz
aG91bGQgYmUgc2hhcmVkIHdpdGggb3RoZXIgUmVuZGVyQm94ZXMuCkBAIC0zMjEsMzAgKzMxNiwy
MyBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJT
dHlsZSYmIHN0eWxlLCBCYXNlVHlwZUZsYWdzCiAKIHN0YXRpYyB2b2lkIHJlbW92ZUJsb2NrRnJv
bVBlcmNlbnRhZ2VEZXNjZW5kYW50QW5kQ29udGFpbmVyTWFwcyhSZW5kZXJCbG9jayogYmxvY2sp
CiB7Ci0gICAgaWYgKCFwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXApCi0gICAgICAgIHJldHVy
bjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ+IGRlc2Nl
bmRhbnRTZXQgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAtPnRha2UoYmxvY2spOwotICAg
IGlmICghZGVzY2VuZGFudFNldCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoYXV0
byogZGVzY2VuZGFudCA6ICpkZXNjZW5kYW50U2V0KSB7Ci0gICAgICAgIGF1dG8gaXQgPSBwZXJj
ZW50SGVpZ2h0Q29udGFpbmVyTWFwLT5maW5kKGRlc2NlbmRhbnQpOwotICAgICAgICBBU1NFUlQo
aXQgIT0gcGVyY2VudEhlaWdodENvbnRhaW5lck1hcC0+ZW5kKCkpOwotICAgICAgICBpZiAoaXQg
PT0gcGVyY2VudEhlaWdodENvbnRhaW5lck1hcC0+ZW5kKCkpCisgICAgZm9yIChhdXRvKiBkZXNj
ZW5kYW50IDogcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKCkudGFrZShibG9jaykpIHsKKyAg
ICAgICAgYXV0byBpdCA9IHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5maW5kKGRlc2NlbmRh
bnQpOworICAgICAgICBBU1NFUlQoaXQgIT0gcGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpLmVu
ZCgpKTsKKyAgICAgICAgaWYgKGl0ID09IHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5lbmQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvKiBjb250YWluZXJTZXQgPSBp
dC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChjb250YWluZXJTZXQtPmNvbnRhaW5zKGJs
b2NrKSk7Ci0gICAgICAgIGNvbnRhaW5lclNldC0+cmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgaWYg
KGNvbnRhaW5lclNldC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcGVyY2VudEhlaWdodENvbnRh
aW5lck1hcC0+cmVtb3ZlKGl0KTsKKyAgICAgICAgYXV0byYgY29udGFpbmVyU2V0ID0gaXQtPnZh
bHVlOworICAgICAgICBBU1NFUlQoY29udGFpbmVyU2V0LmNvbnRhaW5zKGJsb2NrKSk7CisgICAg
ICAgIGNvbnRhaW5lclNldC5yZW1vdmUoYmxvY2spOworICAgICAgICBpZiAoY29udGFpbmVyU2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5yZW1v
dmUoaXQpOwogICAgIH0KIH0KIAogUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7Ci0gICAg
Ly8gQmxvY2tzIGNhbiBiZSBhZGRlZCB0byBnUmFyZURhdGFNYXAgZHVyaW5nIHdpbGxCZURlc3Ry
b3llZCgpLCBzbyB0aGlzIGNvZGUgY2FuJ3QgbW92ZSB0aGVyZS4KLSAgICBpZiAoZ1JhcmVEYXRh
TWFwKQotICAgICAgICBnUmFyZURhdGFNYXAtPnJlbW92ZSh0aGlzKTsKKyAgICAvLyBCbG9ja3Mg
Y2FuIGJlIGFkZGVkIHRvIHRoZSBtYXAgZHVyaW5nIHdpbGxCZURlc3Ryb3llZCgpLCBzbyB0aGlz
IGNvZGUgY2FuJ3QgbW92ZSB0aGVyZS4KKyAgICByZW5kZXJCbG9ja1JhcmVEYXRhTWFwKCkucmVt
b3ZlKHRoaXMpOwogCiAgICAgLy8gRG8gbm90IGFkZCBhbnkgbW9yZSBjb2RlIGhlcmUuIEFkZCBp
dCB0byB3aWxsQmVEZXN0cm95ZWQoKSBpbnN0ZWFkLgogfQpAQCAtMzcyLDcgKzM2MCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmJsb2NrV2lsbEJlRGVzdHJveWVkKCkKIAogYm9vbCBSZW5kZXJCbG9j
azo6aGFzUmFyZURhdGEoKSBjb25zdAogewotICAgIHJldHVybiBnUmFyZURhdGFNYXAgPyBnUmFy
ZURhdGFNYXAtPmNvbnRhaW5zKHRoaXMpIDogZmFsc2U7CisgICAgcmV0dXJuIHJlbmRlckJsb2Nr
UmFyZURhdGFNYXAoKS5jb250YWlucyh0aGlzKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cmVt
b3ZlUG9zaXRpb25lZE9iamVjdHNJZk5lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKQEAgLTYwOSwxOCArNTk3LDE0IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dCgpCiAKIHN0YXRpYyBSZW5kZXJCbG9ja1JhcmVEYXRhKiBnZXRC
bG9ja1JhcmVEYXRhKGNvbnN0IFJlbmRlckJsb2NrJiBibG9jaykKIHsKLSAgICByZXR1cm4gZ1Jh
cmVEYXRhTWFwID8gZ1JhcmVEYXRhTWFwLT5nZXQoJmJsb2NrKSA6IG51bGxwdHI7CisgICAgcmV0
dXJuIHJlbmRlckJsb2NrUmFyZURhdGFNYXAoKS5nZXQoJmJsb2NrKTsKIH0KIAogc3RhdGljIFJl
bmRlckJsb2NrUmFyZURhdGEmIGVuc3VyZUJsb2NrUmFyZURhdGEoY29uc3QgUmVuZGVyQmxvY2sm
IGJsb2NrKQogewotICAgIGlmICghZ1JhcmVEYXRhTWFwKQotICAgICAgICBnUmFyZURhdGFNYXAg
PSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YU1hcDsKLSAgICAKLSAgICBhdXRvJiByYXJlRGF0YSA9
IGdSYXJlRGF0YU1hcC0+YWRkKCZibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAg
IGlmICghcmFyZURhdGEpCi0gICAgICAgIHJhcmVEYXRhID0gbWFrZVVuaXF1ZTxSZW5kZXJCbG9j
a1JhcmVEYXRhPigpOwotICAgIHJldHVybiAqcmFyZURhdGEuZ2V0KCk7CisgICAgcmV0dXJuICpy
ZW5kZXJCbG9ja1JhcmVEYXRhTWFwKCkuZW5zdXJlKCZibG9jaywgW10geworICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxSZW5kZXJCbG9ja1JhcmVEYXRhPigpOworICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cHJlcGFyZVBhZ2luYXRpb25CZWZvcmVCbG9j
a0xheW91dChib29sJiByZWxheW91dENoaWxkcmVuKQpAQCAtNzM5LDcgKzcyMyw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUJsb2NrQ2hpbGRyZW4oKQogCiB2b2lkIFJlbmRl
ckJsb2NrOjphZGRPdmVyZmxvd0Zyb21Qb3NpdGlvbmVkT2JqZWN0cygpCiB7Ci0gICAgVHJhY2tl
ZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9uZWRP
YmplY3RzKCk7CisgICAgYXV0byBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2Jq
ZWN0cygpOwogICAgIGlmICghcG9zaXRpb25lZERlc2NlbmRhbnRzKQogICAgICAgICByZXR1cm47
CiAKQEAgLTgzMiwxOCArODE2LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUJsb2NrQ2hp
bGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQoYm9vbCByZWxheW91dENoaWxkcmVuLCBSCiAKIHZvaWQg
UmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmNlbnRhZ2VIZWlnaHREZXNjZW5kYW50
cygpCiB7Ci0gICAgaWYgKCFwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBkZXNjZW5kYW50cyA9IHBl
cmNlbnRIZWlnaHREZXNjZW5kYW50c01hcC0+Z2V0KHRoaXMpOwotICAgIGlmICghZGVzY2VuZGFu
dHMpCisgICAgYXV0byBpdGVyYXRvciA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmZp
bmQodGhpcyk7CisgICAgaWYgKGl0ZXJhdG9yID09IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01h
cCgpLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5k
YW50cy0+YmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSAqaXQ7CisgICAgZm9yIChhdXRv
KiBib3ggOiBpdGVyYXRvci0+dmFsdWUpIHsKICAgICAgICAgLy8gTGV0J3Mgbm90IGRpcnR5IHRo
ZSBoZWlnaHQgcGVyZWNlbnRhZ2UgZGVzY2VuZGFudCB3aGVuIGl0IGhhcyBhbiBhYnNvbHV0ZWx5
IHBvc2l0aW9uZWQgY29udGFpbmluZyBibG9jayBhbmNlc3Rvci4gV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZGlydHkgc3VjaCBib3hlcyB0aHJvdWdoIHRoZSByZWd1bGFyIGludmFsaWRhdGlvbiBsb2dp
Yy4KICAgICAgICAgYm9vbCBkZXNjZW5kYW50TmVlZHNMYXlvdXQgPSB0cnVlOwotICAgICAgICBm
b3IgKGF1dG8qIGFuY2VzdG9yID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOyBhbmNlc3Rv
ciAmJiBhbmNlc3RvciAhPSB0aGlzOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxv
Y2soKSkgeworICAgICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gYm94LT5jb250YWluaW5nQmxv
Y2soKTsgYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT0gdGhpczsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICBkZXNjZW5kYW50TmVlZHNMYXlvdXQg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg1Miw3ICs4MzIsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpkaXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFu
dHMoKQogICAgICAgICBpZiAoIWRlc2NlbmRhbnROZWVkc0xheW91dCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIHdoaWxlIChyZW5kZXJlciAhPSB0aGlzKSB7CisgICAgICAgIGZv
ciAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBib3g7IHJlbmRlcmVyICE9IHRoaXM7ICkgewog
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZW5kZXJlci0+c2V0Q2hpbGROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOwpAQCAtMTA4MCwxOSArMTA2MCwyMCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgciwgYm9vbCByZWxheW91dENo
aWxkcmVuLCBibwogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIGJvb2wgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KQogewot
ICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBw
b3NpdGlvbmVkT2JqZWN0cygpOworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9z
aXRpb25lZE9iamVjdHMoKTsKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIC8vIERvIG5vdCBjYWNoZSBwb3NpdGlvbmVkRGVzY2VuZGFu
dHMtPmVuZCgpIGluIGEgbG9jYWwgdmFyaWFibGUsIHNpbmNlIHxwb3NpdGlvbmVkRGVzY2VuZGFu
dHN8IGNhbiBiZSBtdXRhdGVkCiAgICAgLy8gYXMgaXQgaXMgd2Fsa2VkLiBXZSBhbHdheXMgbmVl
ZCB0byBmZXRjaCB0aGUgbmV3IGVuZCgpIHZhbHVlIGR5bmFtaWNhbGx5LgorICAgIC8vIEZJWE1F
OiBUaGUgYWJvdmUgdGVjaG5pcXVlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgd29yazsgY2Fubm90IG1h
a2UgaXQgc2FmZSB0byBtb2RpZnkgYSBzZXQgd2hpbGUgaXRlcmF0aW5nIGV2ZW4gaWYgd2Uga2Vl
cCBjYWxsaW5nICJlbmQoKSIuCiAgICAgZm9yIChhdXRvIGl0ID0gcG9zaXRpb25lZERlc2NlbmRh
bnRzLT5iZWdpbigpOyBpdCAhPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmVuZCgpOyArK2l0KQog
ICAgICAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KCoqaXQsIHJlbGF5b3V0Q2hpbGRyZW4sIGZp
eGVkUG9zaXRpb25PYmplY3RzT25seSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtQb3Np
dGlvbmVkT2JqZWN0c0ZvckxheW91dCgpCiB7Ci0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hT
ZXQqIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9uZWRPYmplY3RzKCk7CisgICAgYXV0
byBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2JqZWN0cygpOwogICAgIGlmICgh
cG9zaXRpb25lZERlc2NlbmRhbnRzKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzNzYsMTAgKzEz
NTcsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICB9CiB9CiAKLXN0YXRpYyBDb250
aW51YXRpb25PdXRsaW5lVGFibGVNYXAqIGNvbnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpCitzdGF0
aWMgQ29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwJiBjb250aW51YXRpb25PdXRsaW5lVGFibGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250aW51YXRpb25PdXRsaW5lVGFibGVN
YXA+IHRhYmxlOwotICAgIHJldHVybiAmdGFibGUuZ2V0KCk7CisgICAgcmV0dXJuIHRhYmxlOwog
fQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRDb250aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJJ
bmxpbmUqIGZsb3cpCkBAIC0xMzg4LDQ1ICsxMzY5LDIzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKFJlbmRlcklubGluZSogZmxvdykKICAgICAvLyB3YXkg
b2YgcGFpbnRpbmcuCiAgICAgQVNTRVJUKCFmbG93LT5sYXllcigpICYmICFmbG93LT5pc0NvbnRp
bnVhdGlvbigpKTsKICAgICAKLSAgICBDb250aW51YXRpb25PdXRsaW5lVGFibGVNYXAqIHRhYmxl
ID0gY29udGludWF0aW9uT3V0bGluZVRhYmxlKCk7Ci0gICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5s
aW5lKj4qIGNvbnRpbnVhdGlvbnMgPSB0YWJsZS0+Z2V0KHRoaXMpOwotICAgIGlmICghY29udGlu
dWF0aW9ucykgewotICAgICAgICBjb250aW51YXRpb25zID0gbmV3IExpc3RIYXNoU2V0PFJlbmRl
cklubGluZSo+OwotICAgICAgICB0YWJsZS0+c2V0KHRoaXMsIHN0ZDo6dW5pcXVlX3B0cjxMaXN0
SGFzaFNldDxSZW5kZXJJbmxpbmUqPj4oY29udGludWF0aW9ucykpOwotICAgIH0KLSAgICAKLSAg
ICBjb250aW51YXRpb25zLT5hZGQoZmxvdyk7CisgICAgY29udGludWF0aW9uT3V0bGluZVRhYmxl
KCkuYWRkKHRoaXMsIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+IHsgfSkuaXRlcmF0b3ItPnZh
bHVlLmFkZChmbG93KTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6cGFpbnRzQ29udGludWF0aW9u
T3V0bGluZShSZW5kZXJJbmxpbmUqIGZsb3cpCiB7Ci0gICAgQ29udGludWF0aW9uT3V0bGluZVRh
YmxlTWFwKiB0YWJsZSA9IGNvbnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpOwotICAgIGlmICh0YWJs
ZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIExpc3RI
YXNoU2V0PFJlbmRlcklubGluZSo+KiBjb250aW51YXRpb25zID0gdGFibGUtPmdldCh0aGlzKTsK
LSAgICBpZiAoIWNvbnRpbnVhdGlvbnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjb250aW51YXRpb25zLT5jb250YWlucyhmbG93KTsKKyAgICBhdXRvJiB0YWJsZSA9IGNv
bnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSB0YWJsZS5maW5k
KHRoaXMpOworICAgIHJldHVybiBpdGVyYXRvciAhPSB0YWJsZS5lbmQoKSAmJiBpdGVyYXRvci0+
dmFsdWUuY29udGFpbnMoZmxvdyk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGlu
dWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiB7Ci0gICAgQ29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwKiB0YWJsZSA9IGNvbnRp
bnVhdGlvbk91dGxpbmVUYWJsZSgpOwotICAgIGlmICh0YWJsZS0+aXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxSZW5k
ZXJJbmxpbmUqPj4gY29udGludWF0aW9ucyA9IHRhYmxlLT50YWtlKHRoaXMpOwotICAgIGlmICgh
Y29udGludWF0aW9ucykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgTGF5b3V0UG9pbnQgYWNjdW11
bGF0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OworCiAgICAgLy8gUGFpbnQgZWFjaCBjb250
aW51YXRpb24gb3V0bGluZS4KLSAgICBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPjo6aXRlcmF0
b3IgZW5kID0gY29udGludWF0aW9ucy0+ZW5kKCk7Ci0gICAgZm9yIChMaXN0SGFzaFNldDxSZW5k
ZXJJbmxpbmUqPjo6aXRlcmF0b3IgaXQgPSBjb250aW51YXRpb25zLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8qIGZsb3cgOiBjb250aW51YXRpb25PdXRsaW5lVGFi
bGUoKS50YWtlKHRoaXMpKSB7CiAgICAgICAgIC8vIE5lZWQgdG8gYWRkIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgaW50ZXJ2ZW5pbmcgYmxvY2tzLgotICAgICAgICBSZW5kZXJJbmxpbmUqIGZs
b3cgPSAqaXQ7CiAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGZsb3ctPmNvbnRhaW5pbmdC
bG9jaygpOwogICAgICAgICBmb3IgKCA7IGJsb2NrICYmIGJsb2NrICE9IHRoaXM7IGJsb2NrID0g
YmxvY2stPmNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgYWNjdW11bGF0ZWRQYWludE9m
ZnNldC5tb3ZlQnkoYmxvY2stPmxvY2F0aW9uKCkpOwpAQCAtMTUxOCw3ICsxNDc3LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE8KICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9z
aXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBvZmZzZXQsIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0
cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCwgY29uc3QgVHJhY2tlZFJlbmRl
cmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzKQogewogICAgIGlmICghcG9zaXRpb25l
ZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKQEAgLTE3ODMsNyArMTc0Miw3IEBAIExheW91dFVu
aXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYg
cm9vdEJsb2NrLCBMYXlvCiAgICAgcmV0dXJuIGxvZ2ljYWxSaWdodDsKIH0KIAotVHJhY2tlZFJl
bmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRlckJsb2NrOjpwb3NpdGlvbmVkT2JqZWN0cygpIGNvbnN0
Citjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogUmVuZGVyQmxvY2s6OnBvc2l0aW9u
ZWRPYmplY3RzKCkgY29uc3QKIHsKICAgICByZXR1cm4gcG9zaXRpb25lZERlc2NlbmRhbnRzTWFw
KCkucG9zaXRpb25lZFJlbmRlcmVycygqdGhpcyk7CiB9CkBAIC0xODU4LDIzICsxODE3LDIwIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJv
eCYgZGVzY2VuZGFudCkKICAgICByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFwcyhkZXNjZW5k
YW50KTsKIH0KIAotVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRlckJsb2NrOjpwZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHMoKSBjb25zdAorY29uc3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhh
c2hTZXQqIFJlbmRlckJsb2NrOjpwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMoKSBjb25zdAogewot
ICAgIHJldHVybiBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAgPyBwZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudHNNYXAtPmdldCh0aGlzKSA6IG51bGxwdHI7CisgICAgYXV0byBpdGVyYXRvciA9IHBl
cmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmZpbmQodGhpcyk7CisgICAgcmV0dXJuIGl0ZXJh
dG9yID09IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmVuZCgpID8gbnVsbHB0ciA6ICZp
dGVyYXRvci0+dmFsdWU7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWlnaHRD
b250YWluZXJNYXAoKQogewotICAgIHJldHVybiBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwOwor
ICAgIHJldHVybiAhcGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpLmlzRW1wdHkoKTsKIH0KIAog
Ym9vbCBSZW5kZXJCbG9jazo6aGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94JiBk
ZXNjZW5kYW50KQogewotICAgIC8vIFdlIGRvbid0IG51bGwgY2hlY2sgcGVyY2VudEhlaWdodENv
bnRhaW5lck1hcCBzaW5jZSB0aGUgY2FsbGVyCi0gICAgLy8gYWxyZWFkeSBlbnN1cmVzIHRoaXMg
YW5kIHdlIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG9uIGV2ZXJ5Ci0gICAgLy8gZGVzY2Vu
ZGFudCBpbiBjbGVhclBlcmNlbnRIZWlnaHREZXNjZW5kYW50c0Zyb20oKS4KLSAgICBBU1NFUlQo
cGVyY2VudEhlaWdodENvbnRhaW5lck1hcCk7Ci0gICAgcmV0dXJuIHBlcmNlbnRIZWlnaHRDb250
YWluZXJNYXAtPmNvbnRhaW5zKCZkZXNjZW5kYW50KTsKKyAgICByZXR1cm4gcGVyY2VudEhlaWdo
dENvbnRhaW5lck1hcCgpLmNvbnRhaW5zKCZkZXNjZW5kYW50KTsKIH0KIAogdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnRJZk5lZWRlZChSZW5kZXJCb3gmIGRl
c2NlbmRhbnQpCkBAIC0xODgyLDI3ICsxODM4LDIwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92
ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQoUmVuZGVyQm94JiBkZXNjZW5kYW50KQog
ICAgIC8vIFdlIHF1ZXJ5IHRoZSBtYXAgZGlyZWN0bHksIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQg
c3R5bGUncwogICAgIC8vIGxvZ2ljYWxIZWlnaHQoKS9sb2dpY2FsTWluSGVpZ2h0KCkvbG9naWNh
bE1heEhlaWdodCgpIHNpbmNlIHRob3NlCiAgICAgLy8gY2FuIGNoYW5nZSB3aXRoIHdyaXRpbmcg
bW9kZS9kaXJlY3Rpb25hbCBjaGFuZ2VzLgotICAgIGlmICghaGFzUGVyY2VudEhlaWdodENvbnRh
aW5lck1hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWhhc1BlcmNlbnRIZWlnaHRE
ZXNjZW5kYW50KGRlc2NlbmRhbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW1vdmVQZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudChkZXNjZW5kYW50KTsKKyAgICBpZiAoaGFzUGVyY2VudEhlaWdo
dERlc2NlbmRhbnQoZGVzY2VuZGFudCkpCisgICAgICAgIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNj
ZW5kYW50KGRlc2NlbmRhbnQpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpjbGVhclBlcmNlbnRI
ZWlnaHREZXNjZW5kYW50c0Zyb20oUmVuZGVyQm94JiBwYXJlbnQpCiB7Ci0gICAgQVNTRVJUKHBl
cmNlbnRIZWlnaHRDb250YWluZXJNYXApOworICAgIEFTU0VSVChoYXNQZXJjZW50SGVpZ2h0Q29u
dGFpbmVyTWFwKCkpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHBhcmVudC5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0SW5QcmVPcmRlcigmcGFyZW50KSkg
ewogICAgICAgICBpZiAoIWlzPFJlbmRlckJveD4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogIAogICAgICAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCk7
Ci0gICAgICAgIGlmICghaGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQoYm94KSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGJv
eCk7CisgICAgICAgIGlmIChoYXNQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChib3gpKQorICAgICAg
ICAgICAgcmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnQoYm94KTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggZWZjMDE1NGRiODY4NzlkZjMz
NzBhZjk3M2Y2MjllMDRmODViNjg2MS4uMmMzMWNlOTFhNGE3ZDg1MzNkOTRhNzI2OGE3NDgxNGYz
MTc0YWU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTgwLDE5
ICs4MCwxOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVj
dChjb25zdCBSZW5kZXJCb3gmKTsKICAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKGNv
bnN0IFJlbmRlckJsb2NrKiwgQ29udGFpbmluZ0Jsb2NrU3RhdGUgPSBTYW1lQ29udGFpbmluZ0Js
b2NrKTsKIAotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0
cygpIGNvbnN0OworICAgIGNvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlv
bmVkT2JqZWN0cygpIGNvbnN0OwogICAgIGJvb2wgaGFzUG9zaXRpb25lZE9iamVjdHMoKSBjb25z
dAogICAgIHsKLSAgICAgICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIG9iamVjdHMgPSBw
b3NpdGlvbmVkT2JqZWN0cygpOworICAgICAgICBhdXRvIG9iamVjdHMgPSBwb3NpdGlvbmVkT2Jq
ZWN0cygpOwogICAgICAgICByZXR1cm4gb2JqZWN0cyAmJiAhb2JqZWN0cy0+aXNFbXB0eSgpOwog
ICAgIH0KIAogICAgIHZvaWQgYWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94Jik7
CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94
Jik7Ci0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBlcmNlbnRIZWlnaHREZXNjZW5k
YW50cygpIGNvbnN0OworICAgIGNvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHMoKSBjb25zdDsKICAgICBib29sIGhhc1BlcmNlbnRIZWlnaHRE
ZXNjZW5kYW50cygpIGNvbnN0CiAgICAgewotICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFz
aFNldCogb2JqZWN0cyA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cygpOworICAgICAgICBhdXRv
IG9iamVjdHMgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMoKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdHMgJiYgIW9iamVjdHMtPmlzRW1wdHkoKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFz
UGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCmluZGV4IDQzNjk5ZmVhZDlmNjVjNTk3MmJmZGQ0MjljNzdhZWExMDE2
YTY5OTAuLjMzOTM0YjkyNzQ1Njk5YTNkZDJmZTUzMmNiNjQ2NjY4ZTc3NTMyZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChS
ZW5kZXJDb3VudGVyKTsKIAogdXNpbmcgQ291bnRlck1hcCA9IEhhc2hNYXA8QXRvbVN0cmluZywg
UmVmPENvdW50ZXJOb2RlPj47Ci11c2luZyBDb3VudGVyTWFwcyA9IEhhc2hNYXA8Y29uc3QgUmVu
ZGVyRWxlbWVudCosIHN0ZDo6dW5pcXVlX3B0cjxDb3VudGVyTWFwPj47Cit1c2luZyBDb3VudGVy
TWFwcyA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyRWxlbWVudCosIENvdW50ZXJNYXA+OwogCiBzdGF0
aWMgQ291bnRlck5vZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiwgY29uc3QgQXRv
bVN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBhbHdheXNDcmVhdGVDb3VudGVyKTsKIApAQCAtMTcz
LDEwICsxNzMsNyBAQCBzdGF0aWMgT3B0aW9uYWw8Q291bnRlclBsYW4+IHBsYW5Db3VudGVyKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9tU3RyaQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OyAvLyBDb3VudGVycyBhcmUgZm9yYmlkZGVuIGZyb20gYWxsIG90aGVyIHBzZXVk
byBlbGVtZW50cy4KICAgICB9CiAKLSAgICBDb3VudGVyRGlyZWN0aXZlcyBkaXJlY3RpdmVzOwot
Ci0gICAgaWYgKGF1dG8gbWFwID0gc3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkKLSAgICAgICAg
ZGlyZWN0aXZlcyA9IG1hcC0+Z2V0KGlkZW50aWZpZXIpOworICAgIGF1dG8gZGlyZWN0aXZlcyA9
IHN0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkuZ2V0KGlkZW50aWZpZXIpOwogCiAgICAgaWYgKGlk
ZW50aWZpZXIgPT0gImxpc3QtaXRlbSIpIHsKICAgICAgICAgYXV0byBpdGVtRGlyZWN0aXZlcyA9
IGxpc3RJdGVtQ291bnRlckRpcmVjdGl2ZXMocmVuZGVyZXIpOwpAQCAtMzE2LDcgKzMxMyw3IEBA
IHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBBdG9tU3RyaW5nJiBpCiB7CiAgICAgaWYgKHJlbmRlcmVyLmhhc0NvdW50ZXJO
b2RlTWFwKCkpIHsKICAgICAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuY29udGFpbnMoJnJlbmRl
cmVyKSk7Ci0gICAgICAgIGlmIChhdXRvKiBub2RlID0gY291bnRlck1hcHMoKS5maW5kKCZyZW5k
ZXJlciktPnZhbHVlLT5nZXQoaWRlbnRpZmllcikpCisgICAgICAgIGlmIChhdXRvKiBub2RlID0g
Y291bnRlck1hcHMoKS5maW5kKCZyZW5kZXJlciktPnZhbHVlLmdldChpZGVudGlmaWVyKSkKICAg
ICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIApAQCAtMzMyLDcgKzMyOSw3IEBAIHN0YXRp
YyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBBdG9tU3RyaW5nJiBpCiAgICAgaWYgKHBsYWNlLnBhcmVudCkKICAgICAgICAgcGxhY2Uu
cGFyZW50LT5pbnNlcnRBZnRlcihuZXdOb2RlLCBwbGFjZS5wcmV2aW91c1NpYmxpbmcuZ2V0KCks
IGlkZW50aWZpZXIpOwogCi0gICAgbWFwcy5hZGQoJnJlbmRlcmVyLCBtYWtlVW5pcXVlPENvdW50
ZXJNYXA+KCkpLml0ZXJhdG9yLT52YWx1ZS0+YWRkKGlkZW50aWZpZXIsIG5ld05vZGUuY29weVJl
ZigpKTsKKyAgICBtYXBzLmFkZCgmcmVuZGVyZXIsIENvdW50ZXJNYXAgeyB9KS5pdGVyYXRvci0+
dmFsdWUuYWRkKGlkZW50aWZpZXIsIG5ld05vZGUpOwogICAgIHJlbmRlcmVyLnNldEhhc0NvdW50
ZXJOb2RlTWFwKHRydWUpOwogCiAgICAgaWYgKG5ld05vZGUtPnBhcmVudCgpKQpAQCAtMzQ2LDcg
KzM0Myw3IEBAIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAgICAgIHNraXBEZXNjZW5kYW50
cyA9IGZhbHNlOwogICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aGFzQ291bnRlck5vZGVN
YXAoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvKiBjdXJyZW50Q291bnRl
ciA9IG1hcHMuZmluZChjdXJyZW50UmVuZGVyZXIpLT52YWx1ZS0+Z2V0KGlkZW50aWZpZXIpOwor
ICAgICAgICBhdXRvKiBjdXJyZW50Q291bnRlciA9IG1hcHMuZmluZChjdXJyZW50UmVuZGVyZXIp
LT52YWx1ZS5nZXQoaWRlbnRpZmllcik7CiAgICAgICAgIGlmICghY3VycmVudENvdW50ZXIpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc2tpcERlc2NlbmRhbnRzID0gdHJ1ZTsKQEAg
LTQ1NCw4ICs0NTEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFw
UmVtb3ZhbChjb25zdCBBdG9tU3RyaW5nJiBpZGVudGlmaWVyLCBDbwogICAgIGZvciAoUmVmUHRy
PENvdW50ZXJOb2RlPiBjaGlsZCA9IG5vZGUubGFzdERlc2NlbmRhbnQoKTsgY2hpbGQgJiYgY2hp
bGQgIT0gJm5vZGU7IGNoaWxkID0gV1RGTW92ZShwcmV2aW91cykpIHsKICAgICAgICAgcHJldmlv
dXMgPSBjaGlsZC0+cHJldmlvdXNJblByZU9yZGVyKCk7CiAgICAgICAgIGNoaWxkLT5wYXJlbnQo
KS0+cmVtb3ZlQ2hpbGQoKmNoaWxkKTsKLSAgICAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuZmlu
ZCgmY2hpbGQtPm93bmVyKCkpLT52YWx1ZS0+Z2V0KGlkZW50aWZpZXIpID09IGNoaWxkKTsKLSAg
ICAgICAgY291bnRlck1hcHMoKS5maW5kKCZjaGlsZC0+b3duZXIoKSktPnZhbHVlLT5yZW1vdmUo
aWRlbnRpZmllcik7CisgICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmZpbmQoJmNoaWxkLT5v
d25lcigpKS0+dmFsdWUuZ2V0KGlkZW50aWZpZXIpID09IGNoaWxkKTsKKyAgICAgICAgY291bnRl
ck1hcHMoKS5maW5kKCZjaGlsZC0+b3duZXIoKSktPnZhbHVlLnJlbW92ZShpZGVudGlmaWVyKTsK
ICAgICB9CiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IG5vZGUucGFyZW50KCkpCiAgICAgICAgIHBh
cmVudC0+cmVtb3ZlQ2hpbGQobm9kZSk7CkBAIC00NjQsMTAgKzQ2MSw4IEBAIHN0YXRpYyB2b2lk
IGRlc3Ryb3lDb3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGNvbnN0IEF0b21TdHJpbmcmIGlk
ZW50aWZpZXIsIENvCiB2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMoUmVu
ZGVyRWxlbWVudCYgb3duZXIpCiB7CiAgICAgQVNTRVJUKG93bmVyLmhhc0NvdW50ZXJOb2RlTWFw
KCkpOwotICAgIGF1dG8mIG1hcHMgPSBjb3VudGVyTWFwcygpOwotICAgIEFTU0VSVChtYXBzLmNv
bnRhaW5zKCZvd25lcikpOwotICAgIGF1dG8gY291bnRlck1hcCA9IG1hcHMudGFrZSgmb3duZXIp
OwotICAgIGZvciAoYXV0byYgY291bnRlck1hcEVudHJ5IDogKmNvdW50ZXJNYXApCisgICAgQVNT
RVJUKGNvdW50ZXJNYXBzKCkuY29udGFpbnMoJm93bmVyKSk7CisgICAgZm9yIChhdXRvJiBjb3Vu
dGVyTWFwRW50cnkgOiBjb3VudGVyTWFwcygpLnRha2UoJm93bmVyKSkKICAgICAgICAgZGVzdHJv
eUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92YWwoY291bnRlck1hcEVudHJ5LmtleSwgY291bnRl
ck1hcEVudHJ5LnZhbHVlKTsKICAgICBvd25lci5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxzZSk7
CiB9CkBAIC00NzcsNyArNDcyLDcgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGUoUmVuZGVyRWxlbWVudCYgb3duZXIsIGNvbnN0IEF0b21TdHJpbmcmIGkKICAgICBhdXRv
IG1hcCA9IGNvdW50ZXJNYXBzKCkuZmluZCgmb3duZXIpOwogICAgIGlmIChtYXAgPT0gY291bnRl
ck1hcHMoKS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gbm9kZSA9IG1hcC0+dmFs
dWUtPnRha2UoaWRlbnRpZmllcik7CisgICAgYXV0byBub2RlID0gbWFwLT52YWx1ZS50YWtlKGlk
ZW50aWZpZXIpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGRlc3Ryb3lD
b3VudGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGlkZW50aWZpZXIsICpub2RlKTsKQEAgLTUwOSwy
NCArNTA0LDIyIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIGF1dG8qIGRpcmVjdGl2ZU1hcCA9IHJlbmRl
cmVyLnN0eWxlKCkuY291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICBpZiAoIWRpcmVjdGl2ZU1hcCkK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGRpcmVjdGl2ZU1hcCA9IHJlbmRlcmVyLnN0eWxl
KCkuY291bnRlckRpcmVjdGl2ZXMoKTsKICAgICBpZiAoIXJlbmRlcmVyLmhhc0NvdW50ZXJOb2Rl
TWFwKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAtPmtleXMoKSkK
KyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAua2V5cygpKQogICAgICAgICAg
ICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBrZXksIGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBBU1NFUlQoY291bnRlck1hcHMoKS5jb250YWlucygmcmVuZGVyZXIpKTsK
LSAgICBhdXRvKiBjb3VudGVyTWFwID0gY291bnRlck1hcHMoKS5maW5kKCZyZW5kZXJlciktPnZh
bHVlLmdldCgpOwotICAgIGZvciAoYXV0byYga2V5IDogZGlyZWN0aXZlTWFwLT5rZXlzKCkpIHsK
LSAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC0+Z2V0KGtleSk7
CisgICAgYXV0byYgY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZmluZCgmcmVuZGVyZXIpLT52
YWx1ZTsKKyAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC5rZXlzKCkpIHsKKyAgICAg
ICAgUmVmUHRyPENvdW50ZXJOb2RlPiBub2RlID0gY291bnRlck1hcC5nZXQoa2V5KTsKICAgICAg
ICAgaWYgKCFub2RlKSB7CiAgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtl
eSwgZmFsc2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgYXV0
byBwbGFjZSA9IGZpbmRQbGFjZUZvckNvdW50ZXIocmVuZGVyZXIsIGtleSwgbm9kZS0+aGFzUmVz
ZXRUeXBlKCkpOwotICAgICAgICBpZiAobm9kZSAhPSBjb3VudGVyTWFwLT5nZXQoa2V5KSkKKyAg
ICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC5nZXQoa2V5KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBDb3VudGVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50KCk7CiAgICAg
ICAgIGlmIChwbGFjZS5wYXJlbnQgPT0gcGFyZW50ICYmIHBsYWNlLnByZXZpb3VzU2libGluZyA9
PSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKQEAgLTU2MSwzOSArNTU0LDI1IEBAIHZvaWQgUmVu
ZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWRTbG93Q2FzZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QKICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybjsgLy8gY2Fubm90IGhhdmUgZ2VuZXJhdGVkIGNvbnRlbnQgb3IgaWYg
aXQgY2FuIGhhdmUsIGl0IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgYXR0YWNoaW5nCiAKLSAgICBj
b25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBvbGRDb3VudGVyRGlyZWN0aXZlczsKLSAgICBpZiAo
b2xkU3R5bGUgJiYgKG9sZENvdW50ZXJEaXJlY3RpdmVzID0gb2xkU3R5bGUtPmNvdW50ZXJEaXJl
Y3RpdmVzKCkpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXdDb3VudGVyRGlyZWN0aXZlcyA9IG5l
d1N0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5
VmFsdWUgOiAqbmV3Q291bnRlckRpcmVjdGl2ZXMpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGV4
aXN0aW5nRW50cnkgPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZmluZChrZXlWYWx1ZS5rZXkpOwot
ICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0VudHJ5ICE9IG9sZENvdW50ZXJEaXJlY3RpdmVz
LT5lbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeS0+dmFsdWUg
PT0ga2V5VmFsdWUudmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBrZXlWYWx1ZS5rZXkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAv
LyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2Rl
IG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAv
LyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBh
bmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKLSAgICAgICAgICAgICAgICAv
LyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAg
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBrZXlWYWx1ZS5rZXksIGZhbHNl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIERlc3Ryb3lpbmcgb2xkIGNvdW50ZXJz
IHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSBuZXcgY291bnRlckRpcmVjdGl2ZSBtYXAuCi0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5rZXlzKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVzLT5jb250YWlucyhrZXkp
KQotICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUo
cmVuZGVyZXIsIGtleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAocmVuZGVyZXIuaGFzQ291bnRlck5vZGVNYXAoKSkKLSAgICAgICAgICAgICAgICBS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKHJlbmRlcmVyKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXdDb3VudGVyRGlyZWN0aXZlcyA9IG5l
d1N0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5
IDogbmV3Q291bnRlckRpcmVjdGl2ZXMtPmtleXMoKSkgewotICAgICAgICAgICAgICAgIC8vIFdl
IG11c3QgY3JlYXRlIHRoaXMgbm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBhZGRlZCBub2RlIG1heSBi
ZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKLSAgICAgICAgICAgICAgICAvLyBhcyB0
aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhl
IHJlLWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBub3Qg
Y2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAg
ICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBrZXksIGZhbHNlKTsKLSAgICAgICAgICAg
IH0KKyAgICBDb3VudGVyRGlyZWN0aXZlTWFwIGVtcHR5TWFwOworICAgIGF1dG8mIG9sZENvdW50
ZXJEaXJlY3RpdmVzID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+Y291bnRlckRpcmVjdGl2ZXMoKSA6
IGVtcHR5TWFwOworICAgIGF1dG8mIG5ld0NvdW50ZXJEaXJlY3RpdmVzID0gbmV3U3R5bGUuY291
bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbmV3Q291bnRlckRp
cmVjdGl2ZXMpIHsKKyAgICAgICAgYXV0byBleGlzdGluZ0VudHJ5ID0gb2xkQ291bnRlckRpcmVj
dGl2ZXMuZmluZChrZXlWYWx1ZS5rZXkpOworICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeSAhPSBv
bGRDb3VudGVyRGlyZWN0aXZlcy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50
cnktPnZhbHVlID09IGtleVZhbHVlLnZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBr
ZXlWYWx1ZS5rZXkpOwogICAgICAgICB9CisgICAgICAgIC8vIFdlIG11c3QgY3JlYXRlIHRoaXMg
bm9kZSBoZXJlLCBiZWNhdXNlIHRoZSBjaGFuZ2VkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRoIG5v
IGRpc3BsYXkgc3VjaCBhcworICAgICAgICAvLyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNy
ZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBhbmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFw
cGVuIHdpbGwKKyAgICAgICAgLy8gbm90IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFk
IG5vIGNoaWxkcmVuLgorICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGtleVZhbHVl
LmtleSwgZmFsc2UpOworICAgIH0KKyAgICAvLyBEZXN0cm95IG9sZCBjb3VudGVycyB0aGF0IGRv
IG5vdCBleGlzdCBpbiB0aGUgbmV3IG1hcC4KKyAgICBmb3IgKGF1dG8mIGtleSA6IG9sZENvdW50
ZXJEaXJlY3RpdmVzLmtleXMoKSkgeworICAgICAgICBpZiAoIW5ld0NvdW50ZXJEaXJlY3RpdmVz
LmNvbnRhaW5zKGtleSkpCisgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRl
ck5vZGUocmVuZGVyZXIsIGtleSk7CiAgICAgfQogfQogCkBAIC02MTksNyArNTk4LDcgQEAgdm9p
ZCBzaG93Q291bnRlclJlbmRlcmVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBjaGFyKgogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIE46JXAgUDol
cCBQUzolcCBOUzolcCBDOiVwXG4iLAogICAgICAgICAgICAgY3VycmVudCwgY3VycmVudC0+bm9k
ZSgpLCBjdXJyZW50LT5wYXJlbnQoKSwgY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCksCiAgICAg
ICAgICAgICBjdXJyZW50LT5uZXh0U2libGluZygpLCBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJF
bGVtZW50PigqY3VycmVudCkuaGFzQ291bnRlck5vZGVNYXAoKSA/Ci0gICAgICAgICAgICBjb3Vu
dGVyTmFtZSA/IFdlYkNvcmU6OmNvdW50ZXJNYXBzKCkuZmluZChkb3duY2FzdDxXZWJDb3JlOjpS
ZW5kZXJFbGVtZW50PihjdXJyZW50KSktPnZhbHVlLT5nZXQoaWRlbnRpZmllcikgOiAoV2ViQ29y
ZTo6Q291bnRlck5vZGUqKTEgOiAoV2ViQ29yZTo6Q291bnRlck5vZGUqKTApOworICAgICAgICAg
ICAgY291bnRlck5hbWUgPyBXZWJDb3JlOjpjb3VudGVyTWFwcygpLmZpbmQoZG93bmNhc3Q8V2Vi
Q29yZTo6UmVuZGVyRWxlbWVudD4oY3VycmVudCkpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikgOiAo
V2ViQ29yZTo6Q291bnRlck5vZGUqKTEgOiAoV2ViQ29yZTo6Q291bnRlck5vZGUqKTApOwogICAg
IH0KICAgICBmZmx1c2goc3RkZXJyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5oCmluZGV4IGI1MzU2NjNhZmM4MTQ0ODlhMjgxMTUyNjEzYTk2NGIxMzIzODQxNWQu
LjI4ZjBkNzg2ZmUzN2Q1MmE4NTQ4YWU0MWJmZjM0YTcxZmYyMjEyMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaApAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgog
CiBpbmxpbmUgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZChSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgaWYgKCghb2xkU3R5bGUgfHwgIW9sZFN0eWxlLT5j
b3VudGVyRGlyZWN0aXZlcygpKSAmJiAhbmV3U3R5bGUuY291bnRlckRpcmVjdGl2ZXMoKSkKKyAg
ICBpZiAoKCFvbGRTdHlsZSB8fCBvbGRTdHlsZS0+Y291bnRlckRpcmVjdGl2ZXMoKS5pc0VtcHR5
KCkpICYmIG5ld1N0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICByZW5kZXJlclN0eWxlQ2hhbmdlZFNsb3dDYXNlKHJlbmRlcmVyLCBvbGRT
dHlsZSwgbmV3U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50ZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFnbWVudGVkRmxvdy5jcHAKaW5kZXggNDJkYzE5MjA1M2JmZTdmOWZkMzczMGE1MTQ4MjY5MjJi
ZmU1ZjdkMC4uNzg1MTNlMTcwODkzZWM2NmZlZTYzNmM0NDY1ZDc1NTU5YTFlZDIyZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwCkBA
IC05NSw4ICs5NSw3IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmludmFsaWRhdGVGcmFn
bWVudHMoTWFya2luZ0JlaGF2aW9yIG1hcmtpbmdQYXJlbnRzKQogICAgIG1fZnJhZ21lbnRSYW5n
ZU1hcC5jbGVhcigpOwogICAgIG1fYnJlYWtCZWZvcmVUb0ZyYWdtZW50TWFwLmNsZWFyKCk7CiAg
ICAgbV9icmVha0FmdGVyVG9GcmFnbWVudE1hcC5jbGVhcigpOwotICAgIGlmIChtX2xpbmVUb0Zy
YWdtZW50TWFwKQotICAgICAgICBtX2xpbmVUb0ZyYWdtZW50TWFwLT5jbGVhcigpOworICAgIG1f
bGluZVRvRnJhZ21lbnRNYXAuY2xlYXIoKTsKICAgICBzZXROZWVkc0xheW91dChtYXJraW5nUGFy
ZW50cyk7CiAKICAgICBtX2ZyYWdtZW50c0ludmFsaWRhdGVkID0gdHJ1ZTsKQEAgLTQ1MCwxMSAr
NDQ5LDggQEAgdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlUmVuZGVyQm94RnJhZ21l
bnRJbmZvKFJlbmRlckJveCYgYm94KQogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpyZW1v
dmVMaW5lRnJhZ21lbnRJbmZvKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewot
ICAgIGlmICghbV9saW5lVG9GcmFnbWVudE1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9y
IChhdXRvKiBjdXJyID0gYmxvY2tGbG93LmZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dFJvb3RCb3goKSkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcC0+cmVtb3ZlKGN1
cnIpOworICAgIGZvciAoYXV0byogYm94ID0gYmxvY2tGbG93LmZpcnN0Um9vdEJveCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkKKyAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcC5y
ZW1vdmUoYm94KTsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNoZWNr
TGluZXNDb25zaXN0ZW5jeShibG9ja0Zsb3cpKTsKIH0KQEAgLTc2MCwxMCArNzU2LDcgQEAgYm9v
bCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6b2JqZWN0SW5GbG93RnJhZ21lbnQoY29uc3QgUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnMKICNpZiAhQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T05fRElTQUJMRUQKIGJvb2wgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNoZWNrTGluZXNDb25zaXN0
ZW5jeShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHJlbW92ZWRCbG9jaykgY29uc3QKIHsKLSAgICBp
ZiAoIW1fbGluZVRvRnJhZ21lbnRNYXApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9y
IChhdXRvJiBsaW5lUGFpciA6ICptX2xpbmVUb0ZyYWdtZW50TWFwLmdldCgpKSB7CisgICAgZm9y
IChhdXRvJiBsaW5lUGFpciA6IG1fbGluZVRvRnJhZ21lbnRNYXApIHsKICAgICAgICAgY29uc3Qg
Um9vdElubGluZUJveCogbGluZSA9IGxpbmVQYWlyLmtleTsKICAgICAgICAgUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqIGZyYWdtZW50ID0gbGluZVBhaXIudmFsdWU7CiAgICAgICAgIGlmICgmbGlu
ZS0+YmxvY2tGbG93KCkgPT0gJnJlbW92ZWRCbG9jaykKQEAgLTc4MCw4ICs3NzMsNyBAQCBib29s
IFJlbmRlckZyYWdtZW50ZWRGbG93OjpjaGVja0xpbmVzQ29uc2lzdGVuY3koY29uc3QgUmVuZGVy
QmxvY2tGbG93JiByZW1vdmVkQgogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpjbGVhckxp
bmVzVG9GcmFnbWVudE1hcCgpCiB7Ci0gICAgaWYgKG1fbGluZVRvRnJhZ21lbnRNYXApCi0gICAg
ICAgIG1fbGluZVRvRnJhZ21lbnRNYXAtPmNsZWFyKCk7CisgICAgbV9saW5lVG9GcmFnbWVudE1h
cC5jbGVhcigpOwogfQogCiB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjpkZWxldGVMaW5lcygp
CkBAIC0xMTMxLDEzICsxMTIzLDQgQEAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIFJlbmRlckZy
YWdtZW50ZWRGbG93OjpjdXJyZW50RnJhZ21lbnQoKSBjb25zdAogICAgIHJldHVybiBtX2N1cnJl
bnRGcmFnbWVudE1haW50YWluZXIgPyAmbV9jdXJyZW50RnJhZ21lbnRNYWludGFpbmVyLT5mcmFn
bWVudCgpIDogbnVsbHB0cjsKIH0KIAotQ29udGFpbmluZ0ZyYWdtZW50TWFwJiBSZW5kZXJGcmFn
bWVudGVkRmxvdzo6Y29udGFpbmluZ0ZyYWdtZW50TWFwKCkKLXsKLSAgICBpZiAoIW1fbGluZVRv
RnJhZ21lbnRNYXApCi0gICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAgPSBtYWtlVW5pcXVlPENv
bnRhaW5pbmdGcmFnbWVudE1hcD4oKTsKLQotICAgIHJldHVybiAqbV9saW5lVG9GcmFnbWVudE1h
cC5nZXQoKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5oCmluZGV4IGI3M2JlMmIxYjBlNDgy
N2VkYWU2MDI3YWE2ZTM1ZmNiMTcxZDYzNjEuLjAzYmIxN2I3ZDBhNDFlNDllNDBiYmIyYzI3ZTI5
M2I0MmZmOTc3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFnbWVudGVkRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFn
bWVudGVkRmxvdy5oCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vy
cmVudEZyYWdtZW50TWFpbnRhaW5lcihDdXJyZW50UmVuZGVyRnJhZ21lbnRDb250YWluZXJNYWlu
dGFpbmVyKiBjdXJyZW50RnJhZ21lbnRNYWludGFpbmVyKSB7IG1fY3VycmVudEZyYWdtZW50TWFp
bnRhaW5lciA9IGN1cnJlbnRGcmFnbWVudE1haW50YWluZXI7IH0KICAgICBSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciogY3VycmVudEZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICBDb250YWluaW5nRnJh
Z21lbnRNYXAmIGNvbnRhaW5pbmdGcmFnbWVudE1hcCgpOworICAgIENvbnRhaW5pbmdGcmFnbWVu
dE1hcCYgY29udGFpbmluZ0ZyYWdtZW50TWFwKCkgeyByZXR1cm4gbV9saW5lVG9GcmFnbWVudE1h
cDsgfQogCiAgICAgYm9vbCBjYWNoZWRFbmNsb3NpbmdGcmFnbWVudGVkRmxvd05lZWRzVXBkYXRl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMjM2LDcgKzIzNiw3IEBA
IHByb3RlY3RlZDoKICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lckxpc3QgbV9mcmFnbWVudExp
c3Q7CiAKICAgICAvLyBNYXAgYSBsaW5lIHRvIGl0cyBjb250YWluaW5nIGZyYWdtZW50LgotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDb250YWluaW5nRnJhZ21lbnRNYXA+IG1fbGluZVRvRnJhZ21lbnRN
YXA7CisgICAgQ29udGFpbmluZ0ZyYWdtZW50TWFwIG1fbGluZVRvRnJhZ21lbnRNYXA7CiAKICAg
ICAvLyBNYXAgYSBib3ggdG8gdGhlIGxpc3Qgb2YgZnJhZ21lbnRzIGluIHdoaWNoIHRoZSBib3gg
aXMgcmVuZGVyZWQuCiAgICAgdXNpbmcgUmVuZGVyRnJhZ21lbnRDb250YWluZXJSYW5nZU1hcCA9
IEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXJSYW5nZT47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggNjZiZWVkZDIxMWRi
MDM2YzRiMDM5M2FkMmU2NjU2NWM3MGZmNGFlOC4uNzM3MTZkMjlkMWNkMGFhZTJiNDVkOGRmYjA1
NzY3NDdhZGM1MTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApA
QCAtMzcyLDcgKzM3Miw3IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Z3V0dGVyc1NpemUoY29u
c3QgR3JpZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpCiAgICAgc2l6ZV90IG5v
bkVtcHR5VHJhY2tzQmVmb3JlU3RhcnRMaW5lID0gMDsKICAgICBpZiAoc3RhcnRMaW5lICYmIGdy
aWQuaXNFbXB0eUF1dG9SZXBlYXRUcmFjayhkaXJlY3Rpb24sIHN0YXJ0TGluZSkpIHsKICAgICAg
ICAgbm9uRW1wdHlUcmFja3NCZWZvcmVTdGFydExpbmUgPSBzdGFydExpbmU7Ci0gICAgICAgIGF1
dG8gYmVnaW4gPSBncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLT5iZWdpbigp
OworICAgICAgICBhdXRvIGJlZ2luID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0
aW9uKS5iZWdpbigpOwogICAgICAgICBmb3IgKGF1dG8gaXQgPSBiZWdpbjsgKml0ICE9IHN0YXJ0
TGluZTsgKytpdCkgewogICAgICAgICAgICAgQVNTRVJUKG5vbkVtcHR5VHJhY2tzQmVmb3JlU3Rh
cnRMaW5lKTsKICAgICAgICAgICAgIC0tbm9uRW1wdHlUcmFja3NCZWZvcmVTdGFydExpbmU7CkBA
IC0zODUsOCArMzg1LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpndXR0ZXJzU2l6ZShjb25z
dCBHcmlkJiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGkKICAgICAvLyBjb2xsYXBz
ZWQgdHJhY2suIElmIHdlIGZpbmQgYSBub24gY29sbGFwc2VkIHRyYWNrIHdlIG5lZWQgdG8gYWRk
IHRoYXQgZ2FwLgogICAgIGlmIChncmlkLmlzRW1wdHlBdXRvUmVwZWF0VHJhY2soZGlyZWN0aW9u
LCBlbmRMaW5lIC0gMSkpIHsKICAgICAgICAgdW5zaWduZWQgbm9uRW1wdHlUcmFja3NBZnRlckVu
ZExpbmUgPSBncmlkLm51bVRyYWNrcyhkaXJlY3Rpb24pIC0gZW5kTGluZTsKLSAgICAgICAgYXV0
byBjdXJyZW50RW1wdHlUcmFjayA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlv
biktPmZpbmQoZW5kTGluZSAtIDEpOwotICAgICAgICBhdXRvIGVuZEVtcHR5VHJhY2sgPSBncmlk
LmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLT5lbmQoKTsKKyAgICAgICAgYXV0byBj
dXJyZW50RW1wdHlUcmFjayA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiku
ZmluZChlbmRMaW5lIC0gMSk7CisgICAgICAgIGF1dG8gZW5kRW1wdHlUcmFjayA9IGdyaWQuYXV0
b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikuZW5kKCk7CiAgICAgICAgIC8vIEhhc2hTZXQg
aXRlcmF0b3JzIGRvIG5vdCBpbXBsZW1lbnQgb3BlcmF0b3ItIHNvIHdlIGhhdmUgdG8gbWFudWFs
bHkgaXRlcmF0ZSB0byBrbm93IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGVtcHR5IHRyYWNrcy4K
ICAgICAgICAgZm9yIChhdXRvIGl0ID0gKytjdXJyZW50RW1wdHlUcmFjazsgaXQgIT0gZW5kRW1w
dHlUcmFjazsgKytpdCkgewogICAgICAgICAgICAgQVNTRVJUKG5vbkVtcHR5VHJhY2tzQWZ0ZXJF
bmRMaW5lID49IDEpOwpAQCAtNTQyLDMwICs1NDIsMjYgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6
Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWMKIH0KIAogCi1zdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IFJlbmRlckdy
aWQ6OmNvbXB1dGVFbXB0eVRyYWNrc0ZvckF1dG9SZXBlYXQoR3JpZCYgZ3JpZCwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK09yZGVyZWRUcmFja0luZGV4U2V0IFJl
bmRlckdyaWQ6OmNvbXB1dGVFbXB0eVRyYWNrc0ZvckF1dG9SZXBlYXQoR3JpZCYgZ3JpZCwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAgICBib29sIGlzUm93
QXhpcyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOwogICAgIGlmICgoaXNSb3dBeGlzICYmIHN0
eWxlKCkuZ3JpZEF1dG9SZXBlYXRDb2x1bW5zVHlwZSgpICE9IEF1dG9SZXBlYXRUeXBlOjpGaXQp
CiAgICAgICAgIHx8ICghaXNSb3dBeGlzICYmIHN0eWxlKCkuZ3JpZEF1dG9SZXBlYXRSb3dzVHlw
ZSgpICE9IEF1dG9SZXBlYXRUeXBlOjpGaXQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRl
eFNldD4gZW1wdHlUcmFja0luZGV4ZXM7CisgICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQgZW1wdHlU
cmFja0luZGV4ZXM7CiAgICAgdW5zaWduZWQgaW5zZXJ0aW9uUG9pbnQgPSBpc1Jvd0F4aXMgPyBz
dHlsZSgpLmdyaWRBdXRvUmVwZWF0Q29sdW1uc0luc2VydGlvblBvaW50KCkgOiBzdHlsZSgpLmdy
aWRBdXRvUmVwZWF0Um93c0luc2VydGlvblBvaW50KCk7CiAgICAgdW5zaWduZWQgZmlyc3RBdXRv
UmVwZWF0VHJhY2sgPSBpbnNlcnRpb25Qb2ludCArIGdyaWQuZXhwbGljaXRHcmlkU3RhcnQoZGly
ZWN0aW9uKTsKICAgICB1bnNpZ25lZCBsYXN0QXV0b1JlcGVhdFRyYWNrID0gZmlyc3RBdXRvUmVw
ZWF0VHJhY2sgKyBncmlkLmF1dG9SZXBlYXRUcmFja3MoZGlyZWN0aW9uKTsKIAogICAgIGlmICgh
Z3JpZC5oYXNHcmlkSXRlbXMoKSB8fCBzaG91bGRBcHBseVNpemVDb250YWlubWVudCgqdGhpcykp
IHsKLSAgICAgICAgZW1wdHlUcmFja0luZGV4ZXMgPSBtYWtlVW5pcXVlPE9yZGVyZWRUcmFja0lu
ZGV4U2V0PigpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRyYWNrSW5kZXggPSBmaXJzdEF1dG9S
ZXBlYXRUcmFjazsgdHJhY2tJbmRleCA8IGxhc3RBdXRvUmVwZWF0VHJhY2s7ICsrdHJhY2tJbmRl
eCkKLSAgICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLT5hZGQodHJhY2tJbmRleCk7CisgICAg
ICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcy5hZGQodHJhY2tJbmRleCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCB0cmFja0luZGV4ID0gZmlyc3RBdXRvUmVwZWF0VHJhY2s7
IHRyYWNrSW5kZXggPCBsYXN0QXV0b1JlcGVhdFRyYWNrOyArK3RyYWNrSW5kZXgpIHsKICAgICAg
ICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihncmlkLCBkaXJlY3Rpb24sIHRyYWNrSW5kZXgp
OwotICAgICAgICAgICAgaWYgKCFpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgewotICAgICAgICAg
ICAgICAgIGlmICghZW1wdHlUcmFja0luZGV4ZXMpCi0gICAgICAgICAgICAgICAgICAgIGVtcHR5
VHJhY2tJbmRleGVzID0gbWFrZVVuaXF1ZTxPcmRlcmVkVHJhY2tJbmRleFNldD4oKTsKLSAgICAg
ICAgICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcy0+YWRkKHRyYWNrSW5kZXgpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkKKyAgICAgICAg
ICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcy5hZGQodHJhY2tJbmRleCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGVtcHR5VHJhY2tJbmRleGVzOwpAQCAtODg1LDcgKzg4MSw3IEBAIFZl
Y3RvcjxMYXlvdXRVbml0PiBSZW5kZXJHcmlkOjp0cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZShH
cmlkVHJhY2tTaXppbmdEaXJlY3RpCiAgICAgaWYgKCFoYXNDb2xsYXBzZWRUcmFja3MpCiAgICAg
ICAgIHJldHVybiB0cmFja3M7CiAKLSAgICBzaXplX3QgcmVtYWluaW5nRW1wdHlUcmFja3MgPSBt
X2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiktPnNpemUoKTsKKyAgICBzaXpl
X3QgcmVtYWluaW5nRW1wdHlUcmFja3MgPSBtX2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRp
cmVjdGlvbikuc2l6ZSgpOwogICAgIHNpemVfdCBsYXN0TGluZSA9IHRyYWNrcy5zaXplKCk7CiAg
ICAgZ2FwID0gZ3JpZEdhcChkaXJlY3Rpb24pOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
bGFzdExpbmU7ICsraSkgewpAQCAtMTAzOSw3ICsxMDM1LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpw
b3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJlY3Rpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmUKICAgICB1bnNpZ25lZCBudW1iZXJPZkxpbmVzID0gbnVtYmVyT2ZUcmFja3MgKyAxOwog
ICAgIHVuc2lnbmVkIGxhc3RMaW5lID0gbnVtYmVyT2ZMaW5lcyAtIDE7CiAgICAgYm9vbCBoYXND
b2xsYXBzZWRUcmFja3MgPSBtX2dyaWQuaGFzQXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlv
bik7Ci0gICAgc2l6ZV90IG51bWJlck9mQ29sbGFwc2VkVHJhY2tzID0gaGFzQ29sbGFwc2VkVHJh
Y2tzID8gbV9ncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLT5zaXplKCkgOiAw
OworICAgIHNpemVfdCBudW1iZXJPZkNvbGxhcHNlZFRyYWNrcyA9IGhhc0NvbGxhcHNlZFRyYWNr
cyA/IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS5zaXplKCkgOiAwOwog
ICAgIGNvbnN0IGF1dG8mIG9mZnNldCA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9vZmZz
ZXRCZXR3ZWVuQ29sdW1ucyA6IG1fb2Zmc2V0QmV0d2VlblJvd3M7CiAgICAgYXV0byYgcG9zaXRp
b25zID0gaXNSb3dBeGlzID8gbV9jb2x1bW5Qb3NpdGlvbnMgOiBtX3Jvd1Bvc2l0aW9uczsKICAg
ICBwb3NpdGlvbnMucmVzaXplKG51bWJlck9mTGluZXMpOwpAQCAtMTgyNSw3ICsxODIxLDcgQEAg
dW5zaWduZWQgUmVuZGVyR3JpZDo6bm9uQ29sbGFwc2VkVHJhY2tzKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24pIGNvbnMKICAgICBhdXRvJiB0cmFja3MgPSBtX3RyYWNrU2l6aW5n
QWxnb3JpdGhtLnRyYWNrcyhkaXJlY3Rpb24pOwogICAgIHNpemVfdCBudW1iZXJPZlRyYWNrcyA9
IHRyYWNrcy5zaXplKCk7CiAgICAgYm9vbCBoYXNDb2xsYXBzZWRUcmFja3MgPSBtX2dyaWQuaGFz
QXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgc2l6ZV90IG51bWJlck9mQ29s
bGFwc2VkVHJhY2tzID0gaGFzQ29sbGFwc2VkVHJhY2tzID8gbV9ncmlkLmF1dG9SZXBlYXRFbXB0
eVRyYWNrcyhkaXJlY3Rpb24pLT5zaXplKCkgOiAwOworICAgIHNpemVfdCBudW1iZXJPZkNvbGxh
cHNlZFRyYWNrcyA9IGhhc0NvbGxhcHNlZFRyYWNrcyA/IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlU
cmFja3MoZGlyZWN0aW9uKS5zaXplKCkgOiAwOwogICAgIHJldHVybiBudW1iZXJPZlRyYWNrcyAt
IG51bWJlck9mQ29sbGFwc2VkVHJhY2tzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaAppbmRleCBlZmIxMDY0MzNiNDczNTBmMWIzMTljODNmMDZhZjRkNGYyMGVhYzg5Li41
ZGFkMjJhODkwY2EwNGI0ZDllYmMzNTc2ZTM1YmIzOGRlNWVhYjgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgY2xhbXBBdXRvUmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwg
dW5zaWduZWQgYXV0b1JlcGVhdFRyYWNrcykgY29uc3Q7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IGNvbXB1dGVFbXB0eVRyYWNrc0ZvckF1dG9SZXBlYXQoR3Jp
ZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CisgICAgT3JkZXJlZFRyYWNrSW5k
ZXhTZXQgY29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91
dChjb25zdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0ZTc3
ODQ1OTkyMzE0MmE4OTZhOTk3ZWI3ZWNiYzk1YmI4YmU4ZDhlLi5iY2UwZWEzM2IyZjg4YjdjNzA3
Y2UwMDkyZDQzNWE0YTA0YmRiMWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNzkyLDExICs3OTIsOSBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdV
cGRhdGVUeXBlIHVwZGF0ZQogICAgIGlmICh1cGRhdGVUeXBlID09IENvbXBvc2l0aW5nVXBkYXRl
VHlwZTo6T25TY3JvbGwgfHwgdXBkYXRlVHlwZSA9PSBDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9u
Q29tcG9zaXRlZFNjcm9sbCkgewogICAgICAgICAvLyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGRp
ZG4ndCBzY3JvbGwgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHNvIHRoaXMgdXBkYXRlIG5lZWRz
IHRvIHJlLXBvc2l0aW9uIHZpZXdwb3J0LWNvbnN0cmFpbmVkIGxheWVycy4KICAgICAgICAgaWYg
KG1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCgpICYmIGlzUGFnZVNjcm9sbCkgewotICAgICAgICAgICAgaWYgKGF1dG8q
IHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJlbmRlcmVyIDogKnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBsYXllciA9IHJlbmRlcmVyLmxheWVyKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsYXllci0+c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IG1fcmVu
ZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gcmVuZGVyZXIubGF5ZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQ4ODQsMTIgKzQ4ODIsNiBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2RlcygpCiAg
ICAgICAgIH0KICAgICB9OwogICAgIAotICAgIGF1dG8gc2xvd1JlcGFpbnRPYmplY3RzID0gbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLnNsb3dSZXBhaW50T2JqZWN0cygpOwotICAgIGlmICghc2xv
d1JlcGFpbnRPYmplY3RzKSB7Ci0gICAgICAgIGNsZWFyU3luY2hyb25vdXNSZWFzb25zT25Ob2Rl
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byByZWxldmFudFNjcm9sbGlu
Z1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyKSB7CiAgICAgICAgIGlmICgmbGF5ZXIucmVuZGVyZXIoKSA9PSAmcmVuZGVyZXIp
CiAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKTsKQEAgLTQ4OTgs
NyArNDg5MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91
c1Njcm9sbGluZ05vZGVzKCkKIAogICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Njb3BlID0gbV9yZW5k
ZXJWaWV3LmxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKIAotICAgIGZvciAoYXV0
byYgcmVuZGVyZXIgOiAqc2xvd1JlcGFpbnRPYmplY3RzKSB7CisgICAgZm9yIChhdXRvJiByZW5k
ZXJlciA6IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zbG93UmVwYWludE9iamVjdHMoKSkgewog
ICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAg
aWYgKCFsYXllcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDkxNCw3ICs0OTA2LDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nTm9k
ZXMoKQogICAgICAgICAgICAgbm9kZXNUb0NsZWFyLnJlbW92ZShlbmNsb3NpbmdTY3JvbGxpbmdO
b2RlSUQpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgY2xlYXJTeW5jaHJvbm91c1Jl
YXNvbnNPbk5vZGVzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAppbmRleCBkZTJiY2U1MWZhOWI4ZDExYTBl
NDllOTFmNGZhOWZkMWQ1MDU4NTgzLi5kNjVmOWZkM2FmMTZhMTNjNDkzYWI1ZjBmMDMwMzUxMTA4
NzQxMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC04MiwxMCArODIsMTAgQEAgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQogdm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjbGVhcigpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7Ci0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsK
KyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygp
LmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoKnRoaXMpKTsKIAogICAgIGlmICht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIudmlldygpLmZyYW1l
VmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogCiAjaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7CkBAIC0xNTk4LDE1ICsxNTk4LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKICAg
ICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsK
ICAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CiAKLSAgICBBU1NFUlQobV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhp
cykpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcu
Y29udGFpbnNTY3JvbGxhYmxlQXJlYSgqdGhpcykpOwogCiAgICAgaWYgKGlzU2Nyb2xsYWJsZSkg
ewogICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAg
ICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAg
ICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKCp0
aGlzKTsKICAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVB
cmVhKCp0aGlzKTsKICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRl
eCA5ZGFkNTE3MTA3OGZjNjIzZWQ4Y2IxYWYwYWM2NGNiY2E0M2VjOTkzLi5iNTIyZGYzMjA0MmYx
MTljYWZmYjUxOWQ1MzQwMTY4OTRkZDlkZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCkBAIC05Niw3ICs5Niw3IEBAIFJlbmRlckxpc3RCb3g6OlJlbmRl
ckxpc3RCb3goSFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUp
CiAgICAgLCBtX29wdGlvbnNXaWR0aCgwKQogICAgICwgbV9pbmRleE9mZnNldCgwKQogewotICAg
IHZpZXcoKS5mcmFtZVZpZXcoKS5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB2aWV3KCku
ZnJhbWVWaWV3KCkuYWRkU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogfQogCiBSZW5kZXJMaXN0Qm94
Ojp+UmVuZGVyTGlzdEJveCgpCkBAIC0xMDcsNyArMTA3LDcgQEAgUmVuZGVyTGlzdEJveDo6flJl
bmRlckxpc3RCb3goKQogdm9pZCBSZW5kZXJMaXN0Qm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogewog
ICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKLSAgICB2aWV3KCkuZnJhbWVWaWV3
KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgdmlldygpLmZyYW1lVmlldygpLnJl
bW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZURl
c3Ryb3llZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkZsb3cuY3BwCmluZGV4IGJkYmU0YTcxNGQwYzZjN2E2M2RjY2M4MzU3MmJiMWY4
NzA4ZTZhMGQuLjkwNGNhNDFkZmMyMWQ1ZjJiODRmYjg1ZmZkMTMyMjdlYjgzMGVjMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3Bw
CkBAIC00MiwxNiArNDIsNiBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyTXVs
dGlDb2x1bW5GbG93KTsKIAogUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpSZW5kZXJNdWx0aUNvbHVt
bkZsb3coRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVu
ZGVyRnJhZ21lbnRlZEZsb3coZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQotICAgICwgbV9zcGFu
bmVyTWFwKG1ha2VVbmlxdWU8U3Bhbm5lck1hcD4oKSkKLSAgICAsIG1fbGFzdFNldFdvcmtlZE9u
KG51bGxwdHIpCi0gICAgLCBtX2NvbHVtbkNvdW50KDEpCi0gICAgLCBtX2NvbHVtbldpZHRoKDAp
Ci0gICAgLCBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZSgwKQotICAgICwgbV9pbkxheW91dChmYWxz
ZSkKLSAgICAsIG1faW5CYWxhbmNpbmdQYXNzKGZhbHNlKQotICAgICwgbV9uZWVkc0hlaWdodHNS
ZWNhbGN1bGF0aW9uKGZhbHNlKQotICAgICwgbV9wcm9ncmVzc2lvbklzSW5saW5lKGZhbHNlKQot
ICAgICwgbV9wcm9ncmVzc2lvbklzUmV2ZXJzZWQoZmFsc2UpCiB7CiAgICAgc2V0RnJhZ21lbnRl
ZEZsb3dTdGF0ZShJbnNpZGVJbkZyYWdtZW50ZWRGbG93KTsKIH0KQEAgLTExMSw3ICsxMDEsNyBA
QCBSZW5kZXJCb3gqIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cHJldmlvdXNDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YoY29uc3QgUmVuZAogCiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlciogUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpmaW5kQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyKFJlbmRlckJveCogc3Bhbm5lcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zcGFubmVyTWFw
LT5nZXQoc3Bhbm5lcikuZ2V0KCk7CisgICAgcmV0dXJuIG1fc3Bhbm5lck1hcC5nZXQoc3Bhbm5l
cikuZ2V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpsYXlvdXQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5oCmluZGV4
IGViNmYwODg3OTQ1ODVlODI1NWRiN2MwYzg1ODhkMDJkYzFhNWVmOTYuLjg2NzhhZDYyY2JjOWZl
ZTk4N2IzZjUwZWIzOGU0ZDc0MDcyYTRiZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBmaXJzdE11bHRpQ29sdW1uU2V0KCkgY29uc3Q7CiAg
ICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIGxhc3RNdWx0aUNvbHVtblNldCgpIGNvbnN0OwogICAg
IFJlbmRlckJveCogZmlyc3RDb2x1bW5TZXRPclNwYW5uZXIoKSBjb25zdDsKLSAgICBib29sIGhh
c0NvbHVtblNwYW5uZXIoKSBjb25zdCB7IHJldHVybiAhbV9zcGFubmVyTWFwLT5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGhhc0NvbHVtblNwYW5uZXIoKSBjb25zdCB7IHJldHVybiAhbV9zcGFubmVy
TWFwLmlzRW1wdHkoKTsgfQogICAgIHN0YXRpYyBSZW5kZXJCb3gqIG5leHRDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YoY29uc3QgUmVuZGVyQm94Kik7CiAgICAgc3RhdGljIFJlbmRlckJveCog
cHJldmlvdXNDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YoY29uc3QgUmVuZGVyQm94Kik7CiAK
QEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2hvdWxkQ2hlY2tDb2x1bW5CcmVh
a3MoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3gqLCBX
ZWFrUHRyPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPj4gU3Bhbm5lck1hcDsK
LSAgICBTcGFubmVyTWFwJiBzcGFubmVyTWFwKCkgeyByZXR1cm4gKm1fc3Bhbm5lck1hcDsgfQor
ICAgIFNwYW5uZXJNYXAmIHNwYW5uZXJNYXAoKSB7IHJldHVybiBtX3NwYW5uZXJNYXA7IH0KIAog
cHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTXVsdGlDb2x1bW5GbG93KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTE1LDIzICsxMTUsMjMgQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzUGFnZUxvZ2ljYWxIZWlnaHRLbm93bigpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRl
OgotICAgIHN0ZDo6dW5pcXVlX3B0cjxTcGFubmVyTWFwPiBtX3NwYW5uZXJNYXA7CisgICAgU3Bh
bm5lck1hcCBtX3NwYW5uZXJNYXA7CiAKICAgICAvLyBUaGUgbGFzdCBzZXQgd2Ugd29ya2VkIG9u
LiBJdCdzIG5vdCB0byBiZSB1c2VkIGFzIHRoZSAiY3VycmVudCBzZXQiLiBUaGUgY29uY2VwdCBv
ZiBhCiAgICAgLy8gImN1cnJlbnQgc2V0IiBpcyBkaWZmaWN1bHQsIHNpbmNlIGxheW91dCBtYXkg
anVtcCBiYWNrIGFuZCBmb3J0aCBpbiB0aGUgdHJlZSwgZHVlIHRvIHdyb25nCiAgICAgLy8gdG9w
IGxvY2F0aW9uIGVzdGltYXRlcyAoZHVlIHRvIGUuZy4gbWFyZ2luIGNvbGxhcHNpbmcpLCBhbmQg
cG9zc2libHkgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIG1f
bGFzdFNldFdvcmtlZE9uOworICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBtX2xhc3RTZXRXb3Jr
ZWRPbiB7IG51bGxwdHIgfTsKIAotICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7IC8vIFRoZSBk
ZWZhdWx0IGNvbHVtbiBjb3VudC93aWR0aCB0aGF0IGFyZSBiYXNlZCBvZmYgb3VyIGNvbnRhaW5p
bmcgYmxvY2sgd2lkdGguIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgb25seSB0aGUgZGVmYXVsdCwK
KyAgICB1bnNpZ25lZCBtX2NvbHVtbkNvdW50IHsgMSB9OyAvLyBUaGUgZGVmYXVsdCBjb2x1bW4g
Y291bnQvd2lkdGggdGhhdCBhcmUgYmFzZWQgb2ZmIG91ciBjb250YWluaW5nIGJsb2NrIHdpZHRo
LiBUaGVzZSB2YWx1ZXMgcmVwcmVzZW50IG9ubHkgdGhlIGRlZmF1bHQsCiAgICAgTGF5b3V0VW5p
dCBtX2NvbHVtbldpZHRoOyAvLyBBIG11bHRpLWNvbHVtbiBibG9jayB0aGF0IGlzIHNwbGl0IGFj
cm9zcyB2YXJpYWJsZSB3aWR0aCBwYWdlcyBvciBmcmFnbWVudHMgd2lsbCBoYXZlIGRpZmZlcmVu
dCBjb2x1bW4gY291bnRzIGFuZCB3aWR0aHMgaW4gZWFjaC4gVGhlc2UgdmFsdWVzIHdpbGwgYmUg
Y2FjaGVkIChldmVudHVhbGx5KSBmb3IgbXVsdGktY29sdW1uIGJsb2Nrcy4KIAogICAgIExheW91
dFVuaXQgbV9jb2x1bW5IZWlnaHRBdmFpbGFibGU7IC8vIFRvdGFsIGhlaWdodCBhdmFpbGFibGUg
dG8gY29sdW1ucywgb3IgMCBpZiBhdXRvLgotICAgIGJvb2wgbV9pbkxheW91dDsgLy8gU2V0IHdo
aWxlIHdlJ3JlIGxheWluZyBvdXQgdGhlIGZsb3cgdGhyZWFkLCBkdXJpbmcgd2hpY2ggY29sdW0g
c2V0IGhlaWdodHMgYXJlIHVua25vd24uCi0gICAgYm9vbCBtX2luQmFsYW5jaW5nUGFzczsgLy8g
R3VhcmQgdG8gYXZvaWQgcmUtZW50ZXJpbmcgY29sdW1uIGJhbGFuY2luZy4KLSAgICBib29sIG1f
bmVlZHNIZWlnaHRzUmVjYWxjdWxhdGlvbjsKKyAgICBib29sIG1faW5MYXlvdXQgeyBmYWxzZSB9
OyAvLyBTZXQgd2hpbGUgd2UncmUgbGF5aW5nIG91dCB0aGUgZmxvdyB0aHJlYWQsIGR1cmluZyB3
aGljaCBjb2x1bSBzZXQgaGVpZ2h0cyBhcmUgdW5rbm93bi4KKyAgICBib29sIG1faW5CYWxhbmNp
bmdQYXNzIHsgZmFsc2UgfTsgLy8gR3VhcmQgdG8gYXZvaWQgcmUtZW50ZXJpbmcgY29sdW1uIGJh
bGFuY2luZy4KKyAgICBib29sIG1fbmVlZHNIZWlnaHRzUmVjYWxjdWxhdGlvbiB7IGZhbHNlIH07
CiAgICAgCi0gICAgYm9vbCBtX3Byb2dyZXNzaW9uSXNJbmxpbmU7Ci0gICAgYm9vbCBtX3Byb2dy
ZXNzaW9uSXNSZXZlcnNlZDsKKyAgICBib29sIG1fcHJvZ3Jlc3Npb25Jc0lubGluZSB7IGZhbHNl
IH07CisgICAgYm9vbCBtX3Byb2dyZXNzaW9uSXNSZXZlcnNlZCB7IGZhbHNlIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGNiNDY0MWVmZmQxYzYzMmFiMTlmOTE1OTUyOGViOTdk
ZTA5NzgxMmIuLmNjNDFjODAzOWQ2YjhhZjIyMDAxNDZlNzgyZTJhMGU2NjJhN2M5ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC01
MDUsNyArNTA1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbGF5b3V0Q2VsbElmRmxl
eGVkKFJlbmRlclRhYmxlQ2VsbCYgY2VsbCwgaW50IHJvd0luZGUKICAgICB9CiAKICAgICBpZiAo
IWNlbGxDaGlsZHJlbkZsZXgpIHsKLSAgICAgICAgaWYgKFRyYWNrZWRSZW5kZXJlckxpc3RIYXNo
U2V0KiBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMgPSBjZWxsLnBlcmNlbnRIZWlnaHREZXNjZW5k
YW50cygpKSB7CisgICAgICAgIGlmIChhdXRvIHBlcmNlbnRIZWlnaHREZXNjZW5kYW50cyA9IGNl
bGwucGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byog
ZGVzY2VuZGFudCA6ICpwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMpIHsKICAgICAgICAgICAgICAg
ICBpZiAoZmxleEFsbENoaWxkcmVuIHx8IHNob3VsZEZsZXhDZWxsQ2hpbGQoY2VsbCwgKmRlc2Nl
bmRhbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNlbGxDaGlsZHJlbkZsZXggPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBhZjA0MTljZjZj
NDkyNWQxYzk0NDcyNzNhNzEwNWQxYzRiOTg1YTE3Li5iNDMwMmQ2M2RlODQ3MDRhNGMyMDg4YWU4
NzgzNDMyZWU0M2NlNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcApAQCAtNDMsOCArNDMsOCBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVy
V2lkZ2V0KTsKIAogc3RhdGljIEhhc2hNYXA8Y29uc3QgV2lkZ2V0KiwgUmVuZGVyV2lkZ2V0Kj4m
IHdpZGdldFJlbmRlcmVyTWFwKCkKIHsKLSAgICBzdGF0aWMgSGFzaE1hcDxjb25zdCBXaWRnZXQq
LCBSZW5kZXJXaWRnZXQqPiogc3RhdGljV2lkZ2V0UmVuZGVyZXJNYXAgPSBuZXcgSGFzaE1hcDxj
b25zdCBXaWRnZXQqLCBSZW5kZXJXaWRnZXQqPjsKLSAgICByZXR1cm4gKnN0YXRpY1dpZGdldFJl
bmRlcmVyTWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPGNvbnN0IFdpZGdl
dCosIFJlbmRlcldpZGdldCo+PiBzdGF0aWNXaWRnZXRSZW5kZXJlck1hcDsKKyAgICByZXR1cm4g
c3RhdGljV2lkZ2V0UmVuZGVyZXJNYXA7CiB9CiAKIHVuc2lnbmVkIFdpZGdldEhpZXJhcmNoeVVw
ZGF0ZXNTdXNwZW5zaW9uU2NvcGU6OnNfd2lkZ2V0SGllcmFyY2h5VXBkYXRlU3VzcGVuZENvdW50
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CmluZGV4IGM0MjEzZTc4MGJlMTA3MWQyNTJlN2FhMmY5ODU3NDNkZTM3NjA2OWYuLjE0NDBkM2M3
ZjZmZDkxNmQ0YjA3MDQ4NDBhMTJkNTE0YmI5OTQ0ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtOTE3LDcgKzkxNyw3IEBAIGJvb2wg
UmVuZGVyU3R5bGU6OmNoYW5nZVJlcXVpcmVzTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhl
ciwgT3B0aW9uU2V0PFN0eWxlCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgdGhl
IGNvdW50ZXIgZGlyZWN0aXZlcyBjaGFuZ2UsIHRyaWdnZXIgYSByZWxheW91dCB0byByZS1jYWxj
dWxhdGUgY291bnRlciB2YWx1ZXMgYW5kIHJlYnVpbGQgdGhlIGNvdW50ZXIgbm9kZSB0cmVlLgot
ICAgIGlmICghYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5j
b3VudGVyRGlyZWN0aXZlcywgb3RoZXIubV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+Y291bnRlckRp
cmVjdGl2ZXMpKQorICAgIGlmIChtX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5jb3VudGVyRGlyZWN0
aXZlcyAhPSBvdGhlci5tX3JhcmVOb25Jbmhlcml0ZWREYXRhLT5jb3VudGVyRGlyZWN0aXZlcykK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoKHZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpDb2xsYXBzZSkgIT0gKG90aGVyLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpDb2xs
YXBzZSkpCkBAIC0xMDY0LDI4ICsxMDY0LDIzIEBAIHN0YXRpYyBib29sIHJhcmVJbmhlcml0ZWRE
YXRhQ2hhbmdlUmVxdWlyZXNSZXBhaW50KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmCiB9
CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5HX0FQSSkKKwogdm9pZCBSZW5kZXJTdHlsZTo6YWRk
Q3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBhdXRv
JiBkYXRhID0gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKTsKLSAgICBpZiAoIWRhdGEu
Y3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcykKLSAgICAgICAgZGF0YS5jdXN0b21QYWludFdh
dGNoZWRQcm9wZXJ0aWVzID0gbWFrZVVuaXF1ZTxIYXNoU2V0PFN0cmluZz4+KCk7Ci0gICAgZGF0
YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzLT5hZGQobmFtZSk7CisgICAgbV9yYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzLmFkZChu
YW1lKTsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGNoYW5nZWRDdXN0b21QYWludFdhdGNoZWRQ
cm9wZXJ0eShjb25zdCBSZW5kZXJTdHlsZSYgYSwgY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YSYgYURhdGEsIGNvbnN0IFJlbmRlclN0eWxlJiBiLCBjb25zdCBTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhJiBiRGF0YSkKIHsKLSAgICBhdXRvKiBwcm9wZXJ0aWVzQSA9IGFEYXRhLmN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnRpZXMuZ2V0KCk7Ci0gICAgYXV0byogcHJvcGVydGllc0IgPSBi
RGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzLmdldCgpOworICAgIGF1dG8mIHByb3Bl
cnRpZXNBID0gYURhdGEuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllczsKKyAgICBhdXRvJiBw
cm9wZXJ0aWVzQiA9IGJEYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7CiAKLSAgICBp
ZiAoVU5MSUtFTFkocHJvcGVydGllc0EgfHwgcHJvcGVydGllc0IpKSB7CisgICAgaWYgKFVOTElL
RUxZKCFwcm9wZXJ0aWVzQS5pc0VtcHR5KCkgfHwgIXByb3BlcnRpZXNCLmlzRW1wdHkoKSkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byB1c2UgQ29tcHV0ZWRTdHls
ZUV4dHJhY3RvciBoZXJlLgogICAgICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGV4dHJhY3Rv
cigoRWxlbWVudCopIG51bGxwdHIpOwogCi0gICAgICAgIGZvciAoYXV0byogd2F0Y2hQcm9wZXJ0
aWVzTWFwIDogeyBwcm9wZXJ0aWVzQSwgcHJvcGVydGllc0IgfSkgewotICAgICAgICAgICAgaWYg
KCF3YXRjaFByb3BlcnRpZXNNYXApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIGZvciAoYXV0byYgbmFtZSA6ICp3YXRjaFByb3BlcnRpZXNNYXApIHsKKyAgICAgICAg
Zm9yIChhdXRvJiB3YXRjaFByb3BlcnRpZXNNYXAgOiB7IHByb3BlcnRpZXNBLCBwcm9wZXJ0aWVz
QiB9KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiB3YXRjaFByb3BlcnRpZXNNYXAp
IHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlQTsKICAgICAgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlQjsKICAgICAgICAgICAgICAgICBpZiAoaXNDdXN0
b21Qcm9wZXJ0eU5hbWUobmFtZSkpIHsKQEAgLTExMTUsNiArMTExMCw3IEBAIGlubGluZSBzdGF0
aWMgYm9vbCBjaGFuZ2VkQ3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydHkoY29uc3QgUmVuZGVyU3R5
bGUmIGEsIGNvbnN0CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CisKICNlbmRpZgogCiBib29sIFJl
bmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc1JlcGFpbnQoY29uc3QgUmVuZGVyU3R5bGUmIG90aGVy
LCBPcHRpb25TZXQ8U3R5bGVEaWZmZXJlbmNlQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5PiYgY2hh
bmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdApAQCAtMTU4NSwxNyArMTU4MSwx
NCBAQCBib29sIFJlbmRlclN0eWxlOjpoYXNFbnRpcmVseUZpeGVkQmFja2dyb3VuZCgpIGNvbnN0
CiAgICAgcmV0dXJuIGFsbExheWVyc0FyZUZpeGVkKGJhY2tncm91bmRMYXllcnMoKSk7CiB9CiAK
LWNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIFJlbmRlclN0eWxlOjpjb3VudGVyRGlyZWN0aXZl
cygpIGNvbnN0Citjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwJiBSZW5kZXJTdHlsZTo6Y291bnRl
ckRpcmVjdGl2ZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRh
LT5jb3VudGVyRGlyZWN0aXZlcy5nZXQoKTsKKyAgICByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+Y291bnRlckRpcmVjdGl2ZXM7CiB9CiAKIENvdW50ZXJEaXJlY3RpdmVNYXAmIFJlbmRl
clN0eWxlOjphY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpCiB7Ci0gICAgYXV0byYgbWFwID0gbV9y
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5jb3VudGVyRGlyZWN0aXZlczsKLSAgICBpZiAo
IW1hcCkKLSAgICAgICAgbWFwID0gbWFrZVVuaXF1ZTxDb3VudGVyRGlyZWN0aXZlTWFwPigpOwot
ICAgIHJldHVybiAqbWFwOworICAgIHJldHVybiBtX3JhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vz
cygpLmNvdW50ZXJEaXJlY3RpdmVzOwogfQogCiBjb25zdCBBdG9tU3RyaW5nJiBSZW5kZXJTdHls
ZTo6aHlwaGVuU3RyaW5nKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgKaW5kZXggN2M4N2NiMTNiYWUyZWJiYzY1MWUyMjg5YzhmYzc2ZGI3NjU3
YTUxZS4uZDBjMGY0YTUzNzg2YzZjYjAyY2IxNTMyMTFiMTY2YjcwODgxZWE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTE0NzIsNyArMTQ3
Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0F0dHJDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+aGFzQXR0ckNvbnRlbnQ7IH0KICAgICB2b2lkIHNldEhh
c0F0dHJDb250ZW50KCk7CiAKLSAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBjb3VudGVy
RGlyZWN0aXZlcygpIGNvbnN0OworICAgIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAmIGNvdW50
ZXJEaXJlY3RpdmVzKCkgY29uc3Q7CiAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgYWNjZXNzQ291
bnRlckRpcmVjdGl2ZXMoKTsKIAogICAgIFF1b3Rlc0RhdGEqIHF1b3RlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuY3BwCmluZGV4IDg5ZDEwMmUyY2Y5OWE1OTkwYTc0Y2U2OWUzMjVkNDlkNmYwZmMyYjAuLjYz
M2Y5NjgwZWZmNTMxMmY2ODZkM2NiNTAwYjdlNTg5YjlhZDBmODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YS5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCBpbmxpbmUgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZVJhcmVOb25JbgogICAg
ICwgb3ZlcnNjcm9sbEJlaGF2aW9yWChvLm92ZXJzY3JvbGxCZWhhdmlvclgpCiAgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JZKG8ub3ZlcnNjcm9sbEJlaGF2aW9yWSkKICAgICAsIGNvbnRlbnQoby5j
b250ZW50ID8gby5jb250ZW50LT5jbG9uZSgpIDogbnVsbHB0cikKLSAgICAsIGNvdW50ZXJEaXJl
Y3RpdmVzKG8uY291bnRlckRpcmVjdGl2ZXMgPyBtYWtlVW5pcXVlPENvdW50ZXJEaXJlY3RpdmVN
YXA+KCpvLmNvdW50ZXJEaXJlY3RpdmVzKSA6IG51bGxwdHIpCisgICAgLCBjb3VudGVyRGlyZWN0
aXZlcyhvLmNvdW50ZXJEaXJlY3RpdmVzKQogICAgICwgYWx0VGV4dChvLmFsdFRleHQpCiAgICAg
LCBib3hTaGFkb3coby5ib3hTaGFkb3cgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpvLmJveFNo
YWRvdykgOiBudWxscHRyKQogICAgICwgd2lsbENoYW5nZShvLndpbGxDaGFuZ2UpCkBAIC0xNzks
NyArMTc5LDcgQEAgaW5saW5lIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEoY29uc3QgU3R5bGVSYXJlTm9uSW4KICAgICAsIGp1c3RpZnlJdGVtcyhv
Lmp1c3RpZnlJdGVtcykKICAgICAsIGp1c3RpZnlTZWxmKG8uanVzdGlmeVNlbGYpCiAgICAgLCBj
dXN0b21Qcm9wZXJ0aWVzKG8uY3VzdG9tUHJvcGVydGllcykKLSAgICAsIGN1c3RvbVBhaW50V2F0
Y2hlZFByb3BlcnRpZXMoby5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzID8gbWFrZVVuaXF1
ZTxIYXNoU2V0PFN0cmluZz4+KCpvLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMpIDogbnVs
bHB0cikKKyAgICAsIGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMoby5jdXN0b21QYWludFdh
dGNoZWRQcm9wZXJ0aWVzKQogICAgICwgcm90YXRlKG8ucm90YXRlKQogICAgICwgc2NhbGUoby5z
Y2FsZSkKICAgICAsIHRyYW5zbGF0ZShvLnRyYW5zbGF0ZSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBi
b29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YSYgbykgYwogICAgICAgICAmJiBvdmVyc2Nyb2xsQmVoYXZpb3JYID09
IG8ub3ZlcnNjcm9sbEJlaGF2aW9yWAogICAgICAgICAmJiBvdmVyc2Nyb2xsQmVoYXZpb3JZID09
IG8ub3ZlcnNjcm9sbEJlaGF2aW9yWQogICAgICAgICAmJiBjb250ZW50RGF0YUVxdWl2YWxlbnQo
bykKLSAgICAgICAgJiYgYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShjb3VudGVyRGlyZWN0aXZlcywg
by5jb3VudGVyRGlyZWN0aXZlcykKKyAgICAgICAgJiYgY291bnRlckRpcmVjdGl2ZXMgPT0gby5j
b3VudGVyRGlyZWN0aXZlcwogICAgICAgICAmJiBhbHRUZXh0ID09IG8uYWx0VGV4dAogICAgICAg
ICAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGJveFNoYWRvdywgby5ib3hTaGFkb3cpCiAgICAg
ICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEod2lsbENoYW5nZSwgby53aWxsQ2hhbmdlKQpA
QCAtMjg3LDggKzI4Nyw3IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0
b3I9PShjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjCiAgICAgICAgICYmIGp1
c3RpZnlJdGVtcyA9PSBvLmp1c3RpZnlJdGVtcwogICAgICAgICAmJiBqdXN0aWZ5U2VsZiA9PSBv
Lmp1c3RpZnlTZWxmCiAgICAgICAgICYmIGN1c3RvbVByb3BlcnRpZXMgPT0gby5jdXN0b21Qcm9w
ZXJ0aWVzCi0gICAgICAgICYmICgoY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyAmJiBvLmN1
c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgJiYgKmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRp
ZXMgPT0gKm8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcykKLSAgICAgICAgICAgIHx8ICgh
Y3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyAmJiAhby5jdXN0b21QYWludFdhdGNoZWRQcm9w
ZXJ0aWVzKSkKKyAgICAgICAgJiYgY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyA9PSBvLmN1
c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMKICAgICAgICAgJiYgcGFnZVNpemVUeXBlID09IG8u
cGFnZVNpemVUeXBlCiAgICAgICAgICYmIHRyYW5zZm9ybVN0eWxlM0QgPT0gby50cmFuc2Zvcm1T
dHlsZTNECiAgICAgICAgICYmIGJhY2tmYWNlVmlzaWJpbGl0eSA9PSBvLmJhY2tmYWNlVmlzaWJp
bGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKaW5kZXggNzdiYWI5NTA4MzdjNzQ5OGIxMTFiZjk2OGRh
MjRhZjhhYmJlMWIxYS4uOTI0NDJhYzkwMWIxNWJlMTM2NWE0ZjFjNWUzODIxNTM5OTk2ODNkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5oCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIG92ZXJzY3JvbGxCZWhhdmlvclkgOiAyOyAvLyBPdmVyc2Nyb2xsQmVoYXZpb3IKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RGF0YT4gY29udGVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q291bnRlckRpcmVjdGl2ZU1hcD4gY291bnRlckRpcmVjdGl2ZXM7CisgICAgQ291bnRl
ckRpcmVjdGl2ZU1hcCBjb3VudGVyRGlyZWN0aXZlczsKICAgICBTdHJpbmcgYWx0VGV4dDsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBib3hTaGFkb3c7IC8vIEZvciBib3gtc2hh
ZG93IGRlY29yYXRpb25zLgpAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVNl
bGZBbGlnbm1lbnREYXRhIGp1c3RpZnlTZWxmOwogCiAgICAgRGF0YVJlZjxTdHlsZUN1c3RvbVBy
b3BlcnR5RGF0YT4gY3VzdG9tUHJvcGVydGllczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNl
dDxTdHJpbmc+PiBjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8U3Ry
aW5nPiBjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzOwogCiAgICAgUmVmUHRyPFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbj4gcm90YXRlOwogICAgIFJlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbj4gc2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IGJhZmNlYjgw
ZjljZDNhMjczMWQ0MjcwOGZjZmIxNTJjNGUyYzNhNmYuLmU1ODY0ZDRiZDhjMWMzZmNkZGEzYTdm
MzJjNjQ3YjEwYmYwMDlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCkBAIC00
OTEsNyArNDkxLDcgQEAgdm9pZCBTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRl
VHlwZSB1cGRhdGVUeXBlKQogCiAgICAgdXBkYXRlUmVzb2x2ZXIoYWN0aXZlQ1NTU3R5bGVTaGVl
dHMsIHN0eWxlU2hlZXRDaGFuZ2UucmVzb2x2ZXJVcGRhdGVUeXBlKTsKIAotICAgIG1fd2Vha0Nv
cHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IG51bGxwdHI7CisgICAgbV93
ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gV1RGOjpudWxsb3B0
OwogICAgIG1fYWN0aXZlU3R5bGVTaGVldHMuc3dhcChhY3RpdmVDU1NTdHlsZVNoZWV0cyk7CiAg
ICAgbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0LnN3YXAoYWN0aXZlU3R5bGVTaGVldHMp
OwogCkBAIC01NzQsNyArNTc0LDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0
Pj4gU2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkKIGJvb2wgU2NvcGU6OmFj
dGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29r
dXApIHsKLSAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9v
a3VwID0gbWFrZVVuaXF1ZTxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKKyAgICAg
ICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gSGFzaFNl
dDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4geyB9OwogICAgICAgICBmb3IgKGF1dG8mIGFjdGl2ZVN0
eWxlU2hlZXQgOiBtX2FjdGl2ZVN0eWxlU2hlZXRzKQogICAgICAgICAgICAgbV93ZWFrQ29weU9m
QWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5hZGQoYWN0aXZlU3R5bGVTaGVldC5n
ZXQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5oCmluZGV4IGJhNzY3MmRkMDg0
MDdmNGQ1ZGI4NWYzYTQyNjdjY2Q0NjIwMjA2YTAuLjI3MWJhMDFiNDhiZTFiZjU2YjMxMDM5ODMz
YjVlNjIzNzBmMGQ4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2Nv
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgKQEAgLTE2OCw3ICsx
NjgsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVT
aGVldHNGb3JTdHlsZVNoZWV0TGlzdDsKICAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiBtX2FjdGl2ZVN0eWxlU2hlZXRzOwogCi0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFz
aFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cDsKKyAgICBtdXRhYmxlIE9wdGlvbmFsPEhhc2hTZXQ8Y29uc3QgQ1NT
U3R5bGVTaGVldCo+PiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29r
dXA7CiAKICAgICAvLyBUcmFjayB0aGUgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxldmVsIHN0eWxl
c2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgogICAgIC8vIFNoZWV0cyBsb2FkZWQgdXNpbmcg
dGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBjb3VudC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA0MjJjZTU1ZDgxNTI2OGVhYzY3ZmIy
MDVlZmRiMjI1ZGEwNWE4ZWVmLi5iYTY2NWYzYWNiNzgzMzYzODZlOTQxMzU2NzQ4ZDM2ZTI2ZWQ0
OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yNzYzLDEyICsyNzYz
LDExIEBAIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZTY3JvbGxhYmxlQXJlYXMoKQogCiAg
ICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOwotICAgIGlmIChmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKSkKLSAgICAgICAg
Y291bnQgKz0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCktPnNpemUoKTsKLQorICAg
IGlmIChmcmFtZS0+dmlldygpKQorICAgICAgICBjb3VudCArPSBmcmFtZS0+dmlldygpLT5zY3Jv
bGxhYmxlQXJlYXMoKS5zaXplKCk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+dmlldygpICYmIGNoaWxkLT52aWV3KCktPnNjcm9s
bGFibGVBcmVhcygpKQotICAgICAgICAgICAgY291bnQgKz0gY2hpbGQtPnZpZXcoKS0+c2Nyb2xs
YWJsZUFyZWFzKCktPnNpemUoKTsKKyAgICAgICAgaWYgKGNoaWxkLT52aWV3KCkpCisgICAgICAg
ICAgICBjb3VudCArPSBjaGlsZC0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKS5zaXplKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmNwcAppbmRleCAxZTQ4MGY1NGEyYWU2OTcz
MWU3NTM2MzdiZjA4ZDMwMTQyM2M3MmVmLi5jYjYzNDM5Y2YyNGUzYWJmMWYyZDM5OTI5MTU1YTBm
ZmJiYzExOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkU2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkU2NoZWR1bGVyLmNwcApAQCAtMTM3LDkgKzEzNyw3IEBAIHZvaWQgTmV0d29ya0xv
YWRTY2hlZHVsZXI6OnNldFJlc291cmNlTG9hZFNjaGVkdWxpbmdNb2RlKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpMb2Fk
U2NoZWR1bGluZ01vZGU6OlByaW9yaXRpemVkOgotICAgICAgICBtX3BhZ2VDb250ZXh0cy5lbnN1
cmUocGFnZUlkZW50aWZpZXIsIFsmXSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxQ
YWdlQ29udGV4dD4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIG1fcGFnZUNvbnRleHRzLmFkZChw
YWdlSWRlbnRpZmllciwgUGFnZUNvbnRleHQgeyB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXZWJDb3JlOjpMb2FkU2NoZWR1bGluZ01vZGU6OkRpcmVjdDoKICAgICAgICAgbV9wYWdlQ29u
dGV4dHMucmVtb3ZlKHBhZ2VJZGVudGlmaWVyKTsKQEAgLTE2NSwxMiArMTYzLDEyIEBAIGF1dG8g
TmV0d29ya0xvYWRTY2hlZHVsZXI6OmNvbnRleHRGb3JMb2FkKGNvbnN0IE5ldHdvcmtMb2FkJiBs
b2FkKSAtPiBIb3N0Q29udGV4CiAgICAgaWYgKCFsb2FkLnVybCgpLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvKiBwYWdlQ29udGV4
dCA9IG1fcGFnZUNvbnRleHRzLmdldChsb2FkLnBhcmFtZXRlcnMoKS53ZWJQYWdlSUQpOwotICAg
IGlmICghcGFnZUNvbnRleHQpCisgICAgYXV0byBpdGVyYXRvciA9IG1fcGFnZUNvbnRleHRzLmZp
bmQobG9hZC5wYXJhbWV0ZXJzKCkud2ViUGFnZUlEKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9w
YWdlQ29udGV4dHMuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBo
b3N0ID0gbG9hZC51cmwoKS5ob3N0KCkudG9TdHJpbmcoKTsKLSAgICByZXR1cm4gcGFnZUNvbnRl
eHQtPmVuc3VyZShob3N0LCBbJl0geworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZW5zdXJl
KGhvc3QsIFsmXSB7CiAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEhvc3RDb250ZXh0PigpOwog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuaAppbmRleCAyOTljODFhYzMyODlm
ODlmNzU0YTZjNmQxOTMzMTk3OGMyYjI2NzkyLi4xOGJiNGFhNGI2NTUyZWIzMWE1MGUzYzU0Y2E2
NjcwYmE5OTY3NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkU2NoZWR1bGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrTG9hZFNjaGVkdWxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgSG9z
dENvbnRleHQqIGNvbnRleHRGb3JMb2FkKGNvbnN0IE5ldHdvcmtMb2FkJik7CiAKICAgICB1c2lu
ZyBQYWdlQ29udGV4dCA9IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SG9zdENvbnRl
eHQ+PjsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9w
dHI8UGFnZUNvbnRleHQ+PiBtX3BhZ2VDb250ZXh0czsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyLCBQYWdlQ29udGV4dD4gbV9wYWdlQ29udGV4dHM7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmNw
cAppbmRleCA1ZTJlMDJlMmZiYTBiNGEwYzAzYjVkM2U2NmI5N2Y3YmNjYzc5NThiLi42N2Y4OWE4
Y2ZmYTcwNDBmYTY4ZTc3MWZkZTY4NDVjNDdkYWEzODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5jcHAKQEAgLTUzLDQ1ICs1
MywzOSBAQCB2b2lkIFByZWZldGNoQ2FjaGU6OmNsZWFyKCkKIHsKICAgICBtX2V4cGlyYXRpb25U
aW1lci5zdG9wKCk7CiAgICAgbV9zZXNzaW9uRXhwaXJhdGlvbkxpc3QuY2xlYXIoKTsKLSAgICBp
ZiAobV9zZXNzaW9uUHJlZmV0Y2hlcykKLSAgICAgICAgbV9zZXNzaW9uUHJlZmV0Y2hlcy0+Y2xl
YXIoKTsKKyAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLmNsZWFyKCk7CiB9CiAKIHN0ZDo6dW5pcXVl
X3B0cjxQcmVmZXRjaENhY2hlOjpFbnRyeT4gUHJlZmV0Y2hDYWNoZTo6dGFrZShjb25zdCBVUkwm
IHVybCkKIHsKLSAgICBhdXRvKiByZXNvdXJjZXMgPSBtX3Nlc3Npb25QcmVmZXRjaGVzLmdldCgp
OwotICAgIGlmICghcmVzb3VyY2VzKQorICAgIGlmIChtX3Nlc3Npb25QcmVmZXRjaGVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgbV9zZXNzaW9uRXhwaXJhdGlvbkxp
c3QucmVtb3ZlQWxsTWF0Y2hpbmcoWyZ1cmxdIChjb25zdCBhdXRvJiB0dXBsZSkgewogICAgICAg
ICByZXR1cm4gc3RkOjpnZXQ8MD4odHVwbGUpID09IHVybDsKICAgICB9KTsKLSAgICBhdXRvIGVu
dHJ5ID0gcmVzb3VyY2VzLT50YWtlKHVybCk7CisgICAgYXV0byBlbnRyeSA9IG1fc2Vzc2lvblBy
ZWZldGNoZXMudGFrZSh1cmwpOwogICAgIEFTU0VSVCghZW50cnkgfHwgIWVudHJ5LT5yZXNwb25z
ZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkpLmNvbnRhaW5z
KCJDb29raWUiKSk7CiAgICAgcmV0dXJuIGVudHJ5OwogfQogCiBzdGF0aWMgY29uc3QgU2Vjb25k
cyBleHBpcmF0aW9uVGltZW91dCB7IDVfcyB9OwogCi12b2lkIFByZWZldGNoQ2FjaGU6OnN0b3Jl
KGNvbnN0IFVSTCYgcmVxdWVzdFVybCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3Bv
bnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3ZvaWQgUHJlZmV0
Y2hDYWNoZTo6c3RvcmUoY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
KQogewotICAgIGlmICghbV9zZXNzaW9uUHJlZmV0Y2hlcykKLSAgICAgICAgbV9zZXNzaW9uUHJl
ZmV0Y2hlcyA9IG1ha2VVbmlxdWU8UHJlZmV0Y2hFbnRyaWVzTWFwPigpOwotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9zZXNzaW9uUHJlZmV0Y2hlcy0+YWRkKHJlcXVlc3RVcmwsIG1ha2VVbmlxdWU8
UHJlZmV0Y2hDYWNoZTo6RW50cnk+KFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKGJ1ZmZlcikp
KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc2Vzc2lvblByZWZldGNoZXMuYWRkKHJlcXVlc3RV
UkwsIG1ha2VVbmlxdWU8UHJlZmV0Y2hDYWNoZTo6RW50cnk+KFdURk1vdmUocmVzcG9uc2UpLCBX
VEZNb3ZlKGJ1ZmZlcikpKTsKICAgICAvLyBMaW1pdCBwcmVmZXRjaGVzIGZvciBzYW1lIHVybCB0
byAxLgogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlcXVlc3RV
cmwsIFdhbGxUaW1lOjpub3coKSkpOworICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmFwcGVu
ZChzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdFVSTCwgV2FsbFRpbWU6Om5vdygpKSk7CiAgICAgaWYg
KCFtX2V4cGlyYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2V4cGlyYXRpb25UaW1l
ci5zdGFydE9uZVNob3QoZXhwaXJhdGlvblRpbWVvdXQpOwogfQogCi12b2lkIFByZWZldGNoQ2Fj
aGU6OnN0b3JlUmVkaXJlY3QoY29uc3QgVVJMJiByZXF1ZXN0VXJsLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYg
cmVkaXJlY3RSZXF1ZXN0KQordm9pZCBQcmVmZXRjaENhY2hlOjpzdG9yZVJlZGlyZWN0KGNvbnN0
IFVSTCYgcmVxdWVzdFVSTCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVz
cG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGlyZWN0UmVxdWVzdCkKIHsKLSAg
ICBpZiAoIW1fc2Vzc2lvblByZWZldGNoZXMpCi0gICAgICAgIG1fc2Vzc2lvblByZWZldGNoZXMg
PSBtYWtlVW5pcXVlPFByZWZldGNoRW50cmllc01hcD4oKTsKICAgICByZWRpcmVjdFJlcXVlc3Qu
Y2xlYXJQdXJwb3NlKCk7Ci0gICAgbV9zZXNzaW9uUHJlZmV0Y2hlcy0+c2V0KHJlcXVlc3RVcmws
IG1ha2VVbmlxdWU8UHJlZmV0Y2hDYWNoZTo6RW50cnk+KFdURk1vdmUocmVkaXJlY3RSZXNwb25z
ZSksIFdURk1vdmUocmVkaXJlY3RSZXF1ZXN0KSkpOwotICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25M
aXN0LmFwcGVuZChzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdFVybCwgV2FsbFRpbWU6Om5vdygpKSk7
CisgICAgbV9zZXNzaW9uUHJlZmV0Y2hlcy5zZXQocmVxdWVzdFVSTCwgbWFrZVVuaXF1ZTxQcmVm
ZXRjaENhY2hlOjpFbnRyeT4oV1RGTW92ZShyZWRpcmVjdFJlc3BvbnNlKSwgV1RGTW92ZShyZWRp
cmVjdFJlcXVlc3QpKSk7CisgICAgbV9zZXNzaW9uRXhwaXJhdGlvbkxpc3QuYXBwZW5kKHN0ZDo6
bWFrZV90dXBsZShyZXF1ZXN0VVJMLCBXYWxsVGltZTo6bm93KCkpKTsKICAgICBpZiAoIW1fZXhw
aXJhdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fZXhwaXJhdGlvblRpbWVyLnN0YXJ0
T25lU2hvdChleHBpcmF0aW9uVGltZW91dCk7CiB9CkBAIC0xMDAsMTMgKzk0LDExIEBAIHZvaWQg
UHJlZmV0Y2hDYWNoZTo6Y2xlYXJFeHBpcmVkRW50cmllcygpCiB7CiAgICAgYXV0byB0aW1lb3V0
ID0gV2FsbFRpbWU6Om5vdygpOwogICAgIHdoaWxlICghbV9zZXNzaW9uRXhwaXJhdGlvbkxpc3Qu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3JlcXVlc3RVcmwsIHRpbWVzdGFtcF0gPSBtX3Nl
c3Npb25FeHBpcmF0aW9uTGlzdC5maXJzdCgpOwotICAgICAgICBhdXRvKiByZXNvdXJjZXMgPSBt
X3Nlc3Npb25QcmVmZXRjaGVzLmdldCgpOwotICAgICAgICBBU1NFUlQocmVzb3VyY2VzKTsKLSAg
ICAgICAgQVNTRVJUKHJlc291cmNlcy0+Y29udGFpbnMocmVxdWVzdFVybCkpOworICAgICAgICBh
dXRvIFtyZXF1ZXN0VVJMLCB0aW1lc3RhbXBdID0gbV9zZXNzaW9uRXhwaXJhdGlvbkxpc3QuZmly
c3QoKTsKKyAgICAgICAgQVNTRVJUKG1fc2Vzc2lvblByZWZldGNoZXMuY29udGFpbnMocmVxdWVz
dFVSTCkpOwogICAgICAgICBhdXRvIGVsYXBzZWQgPSB0aW1lb3V0IC0gdGltZXN0YW1wOwogICAg
ICAgICBpZiAoZWxhcHNlZCA+IGV4cGlyYXRpb25UaW1lb3V0KSB7Ci0gICAgICAgICAgICByZXNv
dXJjZXMtPnJlbW92ZShyZXF1ZXN0VXJsKTsKKyAgICAgICAgICAgIG1fc2Vzc2lvblByZWZldGNo
ZXMucmVtb3ZlKHJlcXVlc3RVUkwpOwogICAgICAgICAgICAgbV9zZXNzaW9uRXhwaXJhdGlvbkxp
c3QucmVtb3ZlRmlyc3QoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fZXhwaXJh
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChleHBpcmF0aW9uVGltZW91dCAtIGVsYXBzZWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hl
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUuaApp
bmRleCBhMjUxNTIwYjMxZWFjOTIxYzIyZDMxMTUxZDZkMjMxYTFiZWQxMzhjLi42NDI3NjU3YTJi
NDVlMWQ4NDY0MzM0MzRjNzMzOTY5MmZhMjdmOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUuaApAQCAtNjUsNyArNjUsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgY2xlYXJFeHBpcmVkRW50cmllcygpOwogCiAgICAgdXNpbmcgUHJl
ZmV0Y2hFbnRyaWVzTWFwID0gSGFzaE1hcDxVUkwsIHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4+Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVmZXRjaEVudHJpZXNNYXA+IG1fc2Vzc2lvblByZWZldGNo
ZXM7CisgICAgUHJlZmV0Y2hFbnRyaWVzTWFwIG1fc2Vzc2lvblByZWZldGNoZXM7CiAKICAgICB1
c2luZyBTZXNzaW9uUHJlZmV0Y2hFeHBpcmF0aW9uTGlzdCA9IERlcXVlPHN0ZDo6dHVwbGU8VVJM
LCBXYWxsVGltZT4+OwogICAgIFNlc3Npb25QcmVmZXRjaEV4cGlyYXRpb25MaXN0IG1fc2Vzc2lv
bkV4cGlyYXRpb25MaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0Lm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dl
YlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0Lm1tCmluZGV4IDkwYTEzYzg1NTAzN2U3MTYyYTIx
ZTVjMzk4ZTljYTE1ZmFmNTk0NjguLmQ3NWRlMmRjYTc1Mjk4MTVlMmI3ZmJkOGVkZjhiN2I5OTM3
ZDhmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vz
c1BsdWdJbkhpdFRlc3RSZXN1bHQubW0KQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIldLV2Vi
UHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJXS1dlYlBy
b2Nlc3NQbHVnSW5Ob2RlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xs
YmFyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IGYyMzQ4Zjg1
MjRlOTYzZjNiODI1ODRiNDVhMjdhODI3NmI0NTBiN2IuLjQ0Y2NhZTc4OTYyNjEwZjU5OTZjYjQx
YmRlNzgzN2FjNzk4OGZiNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMTMxMyw5ICsxMzEzLDkgQEAgdm9pZCBQREZQbHVn
aW46OnVwZGF0ZVNjcm9sbGJhcnMoKQogICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwogICAgIGlmIChoYWRTY3JvbGxi
YXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKICAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0gICAg
ICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAg
ZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAg
ICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIAogICAgICAgICBmcmFt
ZVZpZXctPnNldE5lZWRzTGF5b3V0QWZ0ZXJWaWV3Q29uZmlndXJhdGlvbkNoYW5nZSgpOwogICAg
IH0KQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgUERGUGx1Z2luOjp3aWxsRGV0YWNoUmVuZGVy
ZXIoKQogICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+Y29yZUZyYW1lKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkt
PnZpZXcoKSkKLSAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsK
KyAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiB9CiAKIHZv
aWQgUERGUGx1Z2luOjpkZXN0cm95KCkKQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgUERGUGx1
Z2luOjpkZXN0cm95KCkKICAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9
IDA7CiAKICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZSAmJiBtX2ZyYW1lLT5jb3Jl
RnJhbWUoKSA/IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkgOiBudWxscHRyKQotICAgICAg
ICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBmcmFtZVZp
ZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIAogICAgIG1fYWN0aXZlQW5ub3RhdGlv
biA9IG51bGxwdHI7CiAgICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyID0gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAppbmRleCA2OWYwYWU4Mjc5NTA3YjcyOTY1ZjY1
YzIxNjg3M2M0ODFhZGY0ZDYwLi5lYjY5NDZlNjc5NzNkODU3YmFjMmRlNzg5ZjFmZjFhY2NhYjU1
NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCkBAIC00MiwxNCArNDIs
NyBAQCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzKCkKIAog
dm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjphZGRPdmVycmlkZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fb3ZlcnJpZGVzTWFwLmFkZChwYXN0ZWJv
YXJkTmFtZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PiB0
eXBlTWFwID0gbWFrZVVuaXF1ZTxIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+Pj4oKTsK
LSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUodHlwZU1hcCk7Ci0g
ICAgfQotCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2V0KHR5cGUsIGRhdGEpOwor
ICAgIG1fb3ZlcnJpZGVzTWFwLmFkZChwYXN0ZWJvYXJkTmFtZSwgSGFzaE1hcDxTdHJpbmcsIFZl
Y3Rvcjx1aW50OF90Pj4geyB9KS5pdGVyYXRvci0+dmFsdWUuc2V0KHR5cGUsIGRhdGEpOwogfQog
CiB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTU4LDI5ICs1MSwyMCBA
QCB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaXQtPnZhbHVlKTsKLQotICAgIGl0
LT52YWx1ZS0+cmVtb3ZlKHR5cGUpOworICAgIGl0LT52YWx1ZS5yZW1vdmUodHlwZSk7CiAKICAg
ICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBvdmVycmlkZSBmb3IgdGhpcyBwYXN0ZWJvYXJkLCBy
ZW1vdmUgaXRzIHJlY29yZCBjb21wbGV0ZWx5LgotICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHko
KSkKKyAgICBpZiAoaXQtPnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgbV9vdmVycmlkZXNNYXAu
cmVtb3ZlKGl0KTsKIH0KIAogVmVjdG9yPFN0cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6
b3ZlcnJpZGRlblR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OwotCiAgICAgYXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQo
cGFzdGVib2FyZE5hbWUpOwogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEFTU0VSVChpdC0+dmFsdWUpOwotCi0gICAgZm9y
IChTdHJpbmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIGNvcHlUb1ZlY3RvcihpdC0+dmFsdWUua2V5cygpKTsKIH0KIAogYm9vbCBXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIGNvbnN0
CkBAIC04OSw4ICs3Myw4IEBAIGJvb2wgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZv
ck92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvCiAgICAgaWYgKHBhc3Rl
Ym9hcmRJdGVyYXRvciA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byB0eXBlSXRlcmF0b3IgPSBwYXN0ZWJvYXJkSXRlcmF0b3ItPnZhbHVl
LT5maW5kKHR5cGUpOwotICAgIGlmICh0eXBlSXRlcmF0b3IgPT0gcGFzdGVib2FyZEl0ZXJhdG9y
LT52YWx1ZS0+ZW5kKCkpCisgICAgYXV0byB0eXBlSXRlcmF0b3IgPSBwYXN0ZWJvYXJkSXRlcmF0
b3ItPnZhbHVlLmZpbmQodHlwZSk7CisgICAgaWYgKHR5cGVJdGVyYXRvciA9PSBwYXN0ZWJvYXJk
SXRlcmF0b3ItPnZhbHVlLmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkYXRh
ID0gdHlwZUl0ZXJhdG9yLT52YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oCmlu
ZGV4IGVjMDkzM2U1MTI1ZTc5NjA0NGNiODJjMzhiMjRjNWIyMmVkZWI2YzcuLjU4ODNlNTgwNDk1
YTU0ZmRhMDNkNmU0NDY3OTAzM2NmNzVhZWMxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuaApAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIG1fb3ZlcnJp
ZGVzTWFwIG1hcHMgc3RyaW5nIHBhc3RlYm9hcmQgbmFtZXMgdG8gcGFzdGVib2FyZCBlbnRyaWVz
LgogICAgIC8vIEVhY2ggcGFzdGVib2FyZCBlbnRyeSBpcyBhIG1hcCBvZiBhIHN0cmluZyB0eXBl
IHRvIGEgZGF0YSBidWZmZXIuCi0gICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxI
YXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+Pj4+IG1fb3ZlcnJpZGVzTWFwOworICAgIEhh
c2hNYXA8U3RyaW5nLCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+Pj4gbV9vdmVycmlk
ZXNNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKaW5kZXggOWJmNTg3ZmUwNmQxNjUzMmY3YjQ3ZjhmY2Ez
Mjk1ZWIzMWQ3MzQ1Mi4uNzY1ZDU1ZjI0YTE2ZTFiMzA1NmVjZWJmYzFhZGRhMDg0M2RjZTJiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKQEAgLTMyLDcg
KzMyLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVyczsKIAotY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCA6IHB1YmxpYyBXZWJD
b3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKK2NsYXNzIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGUo
V2ViRnJhbWUqIGZyYW1lKQogICAgIHsKQEAgLTUwLDEyICs1MCwxMiBAQCBwcml2YXRlOgogICAg
IHsKICAgICB9CiAKLSAgICBib29sIGxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29w
UGFpcnMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VB
cHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBzb3VyY2VB
cHBsaWNhdGlvbklkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBj
b25zdCBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24qIHN0b3Jh
Z2VTZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wg
bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0
IFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0IGZpbmFs
OworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIHNvdXJjZUFwcGxpY2F0aW9uSWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IGZpbmFsOworICAgIFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQubW0KaW5kZXggZmQyYzkyNzhjMzVhNWQ2Y2M3NjU2ZDlhZjA2YWJkOThhMDMyNDJh
MS4uMWViZmY4NTk5N2UwY2IxYmNjN2QzZTA0YjIyOWMxZGY2MDgyZjM4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNDcsMTEgKzQ3LDExIEBA
IGJvb2wgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQ29udGVudFNuaWZmaW5n
RW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3Mo
KS5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCk7CiB9CiAKLVNjaGVkdWxlUGFpckhh
c2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1bkxvb3BQYWlycygp
IGNvbnN0Citjb25zdCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdAogewogICAgIGlmICghZnJhbWUoKSB8
fCAhZnJhbWUoKS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
ZnJhbWUoKS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKKyAgICByZXR1cm4gJmZy
YW1lKCktPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CiB9CiAKIFJldGFpblB0cjxD
RkRhdGFSZWY+IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNvdXJjZUFwcGxpY2F0aW9uQXVk
aXREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKaW5kZXggYjE3YTc0YTQzNmFlM2RlNGZiNTJmOGY1NTNjZjgxMTU4MDdkMDkwNy4uNTZk
ZDMxYjY3OWU2ZWJjODI4ZDI0M2E0ODMxMGU1ZThiMDdjZDk2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU1OTIsMTIgKzU1OTIsNyBAQCBz
dGF0aWMgYm9vbCBwYWdlQ29udGFpbnNBbnlIb3Jpem9udGFsU2Nyb2xsYmFycyhGcmFtZSogbWFp
bkZyYW1lKQogICAgICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Nyb2xsYWJsZUFyZWFz
ID0gZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxhYmxl
QXJlYXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKEhhc2hTZXQ8U2Ny
b2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMtPmJlZ2lu
KCksIGVuZCA9IHNjcm9sbGFibGVBcmVhcy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gKml0OworICAgICAgICBm
b3IgKGF1dG8qIHNjcm9sbGFibGVBcmVhIDogZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkg
ewogICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQppbmRleCBmMDQ2YTE5MzA5YmUyZjRiMjNmNjljYzdh
MGJkMzc1YzFjNTdkMThhLi43NDlkZTI5MTlmZTgzMTBkMzQxODMzNTEzNjIyZWU0ZGYwMzVkMzE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3Rvcnku
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCkBA
IC00MSw4ICs0MSw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+
CiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KIHR5cGVkZWYgaW50NjRfdCBX
ZWJIaXN0b3J5RGF0ZUtleTsKIHR5cGVkZWYgSGFzaE1hcDxXZWJIaXN0b3J5RGF0ZUtleSwgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5Pj4gRGF0ZVRvRW50cmllc01hcDsKIApAQCAtNjAsMjAgKzU4
LDIwIEBAIHN0YXRpYyBSZXRhaW5QdHI8V2ViSGlzdG9yeT4mIHNoYXJlZEhpc3RvcnkoKQogICAg
IHJldHVybiBfc2hhcmVkSGlzdG9yeTsKIH0KIAotTlNTdHJpbmcgKkZpbGVWZXJzaW9uS2V5ID0g
QCJXZWJIaXN0b3J5RmlsZVZlcnNpb24iOwotTlNTdHJpbmcgKkRhdGVzQXJyYXlLZXkgPSBAIldl
Ykhpc3RvcnlEYXRlcyI7Citjb25zdGV4cHIgTlNTdHJpbmcgKkZpbGVWZXJzaW9uS2V5ID0gQCJX
ZWJIaXN0b3J5RmlsZVZlcnNpb24iOworY29uc3RleHByIE5TU3RyaW5nICpEYXRlc0FycmF5S2V5
ID0gQCJXZWJIaXN0b3J5RGF0ZXMiOwogCi0jZGVmaW5lIGN1cnJlbnRGaWxlVmVyc2lvbiAxCitj
b25zdGV4cHIgaW50IGN1cnJlbnRGaWxlVmVyc2lvbiA9IDE7CiAKIGNsYXNzIFdlYkhpc3RvcnlX
cml0ZXIgOiBwdWJsaWMgSGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlciB7CiBwdWJsaWM6Ci0gICAg
V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRyaWVzTWFwKik7CisgICAgZXhwbGljaXQgV2ViSGlz
dG9yeVdyaXRlcihEYXRlVG9FbnRyaWVzTWFwJik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHdyaXRlSGlzdG9yeUl0ZW1zKEJpbmFyeVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbSYpOwog
Ci0gICAgRGF0ZVRvRW50cmllc01hcCogbV9lbnRyaWVzQnlEYXRlOwotICAgIFZlY3RvcjxpbnQ+
IG1fZGF0ZUtleXM7CisgICAgRGF0ZVRvRW50cmllc01hcCYgbV9lbnRyaWVzQnlEYXRlOworICAg
IFZlY3RvcjxXZWJIaXN0b3J5RGF0ZUtleT4gbV9kYXRlS2V5czsKIH07CiAKIEBpbnRlcmZhY2Ug
V2ViSGlzdG9yeSAoKQpAQCAtODMsNyArODEsNyBAQCBAZW5kCiBAaW50ZXJmYWNlIFdlYkhpc3Rv
cnlQcml2YXRlIDogTlNPYmplY3QgewogQHByaXZhdGUKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
RGljdGlvbmFyeT4gX2VudHJpZXNCeVVSTDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0ZVRvRW50
cmllc01hcD4gX2VudHJpZXNCeURhdGU7CisgICAgRGF0ZVRvRW50cmllc01hcCBfZW50cmllc0J5
RGF0ZTsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IF9vcmRlcmVkTGFzdFZpc2l0ZWRE
YXlzOwogICAgIEJPT0wgaXRlbUxpbWl0U2V0OwogICAgIGludCBpdGVtTGltaXQ7CkBAIC0xMzUs
OCArMTMzLDYgQEAgLSAoaWQpaW5pdAogICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIF9l
bnRyaWVzQnlVUkwgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF0p
OwotICAgIF9lbnRyaWVzQnlEYXRlID0gbWFrZVVuaXF1ZTxEYXRlVG9FbnRyaWVzTWFwPigpOwot
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTE3OSwxNSArMTc1LDE1IEBAIC0gKEJPT0wpZmlu
ZEtleTooV2ViSGlzdG9yeURhdGVLZXkqKWtleSBmb3JEYXk6KE5TVGltZUludGVydmFsKWRhdGUK
IHsKICAgICBBU1NFUlRfQVJHKGtleSwga2V5KTsKICAgICAqa2V5ID0gZGF0ZUtleShkYXRlKTsK
LSAgICByZXR1cm4gX2VudHJpZXNCeURhdGUtPmNvbnRhaW5zKCprZXkpOworICAgIHJldHVybiBf
ZW50cmllc0J5RGF0ZS5jb250YWlucygqa2V5KTsKIH0KIAogLSAodm9pZClpbnNlcnRJdGVtOihX
ZWJIaXN0b3J5SXRlbSAqKWVudHJ5IGZvckRhdGVLZXk6KFdlYkhpc3RvcnlEYXRlS2V5KWRhdGVL
ZXkKIHsKICAgICBBU1NFUlRfQVJHKGVudHJ5LCBlbnRyeSAhPSBuaWwpOwotICAgIEFTU0VSVChf
ZW50cmllc0J5RGF0ZS0+Y29udGFpbnMoZGF0ZUtleSkpOworICAgIEFTU0VSVChfZW50cmllc0J5
RGF0ZS5jb250YWlucyhkYXRlS2V5KSk7CiAKLSAgICBOU011dGFibGVBcnJheSAqZW50cmllc0Zv
ckRhdGUgPSBfZW50cmllc0J5RGF0ZS0+Z2V0KGRhdGVLZXkpLmdldCgpOworICAgIE5TTXV0YWJs
ZUFycmF5ICplbnRyaWVzRm9yRGF0ZSA9IF9lbnRyaWVzQnlEYXRlLmdldChkYXRlS2V5KS5nZXQo
KTsKICAgICBOU1RpbWVJbnRlcnZhbCBlbnRyeURhdGUgPSBbZW50cnkgbGFzdFZpc2l0ZWRUaW1l
SW50ZXJ2YWxdOwogCiAgICAgdW5zaWduZWQgY291bnQgPSBbZW50cmllc0ZvckRhdGUgY291bnRd
OwpAQCAtMjI2LDEzICsyMjIsMTMgQEAgLSAoQk9PTClyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXM6
KFdlYkhpc3RvcnlJdGVtICopZW50cnkKICAgICBpZiAoIWZvdW5kRGF0ZSkKICAgICAgICAgcmV0
dXJuIE5POwogCi0gICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgaXQgPSBfZW50cmllc0J5
RGF0ZS0+ZmluZChkYXRlS2V5KTsKKyAgICBhdXRvIGl0ID0gX2VudHJpZXNCeURhdGUuZmluZChk
YXRlS2V5KTsKICAgICBOU011dGFibGVBcnJheSAqZW50cmllc0ZvckRhdGUgPSBpdC0+dmFsdWUu
Z2V0KCk7CiAgICAgW2VudHJpZXNGb3JEYXRlIHJlbW92ZU9iamVjdElkZW50aWNhbFRvOmVudHJ5
XTsKICAgICAKICAgICAvLyByZW1vdmUgdGhpcyBkYXRlIGVudGlyZWx5IGlmIHRoZXJlIGFyZSBu
byBvdGhlciBlbnRyaWVzIG9uIGl0CiAgICAgaWYgKFtlbnRyaWVzRm9yRGF0ZSBjb3VudF0gPT0g
MCkgewotICAgICAgICBfZW50cmllc0J5RGF0ZS0+cmVtb3ZlKGl0KTsKKyAgICAgICAgX2VudHJp
ZXNCeURhdGUucmVtb3ZlKGl0KTsKICAgICAgICAgLy8gQ2xlYXIgX29yZGVyZWRMYXN0VmlzaXRl
ZERheXMgc28gaXQgd2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgogICAg
ICAgICBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyA9IG5pbDsKICAgICB9CkBAIC0yNzAsNyArMjY2
LDcgQEAgLSAodm9pZClhZGRJdGVtVG9EYXRlQ2FjaGVzOihXZWJIaXN0b3J5SXRlbSAqKWVudHJ5
CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIG5vIG90aGVyIGVudHJpZXMgZXhpc3QgZm9yIHRoaXMg
ZGF0ZQogICAgICAgICBhdXRvIGVudHJpZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czomZW50cnkgY291bnQ6MV0pOwotICAgICAgICBfZW50cmllc0J5
RGF0ZS0+c2V0KGRhdGVLZXksIGVudHJpZXMuZ2V0KCkpOworICAgICAgICBfZW50cmllc0J5RGF0
ZS5zZXQoZGF0ZUtleSwgZW50cmllcy5nZXQoKSk7CiAgICAgICAgIC8vIENsZWFyIF9vcmRlcmVk
TGFzdFZpc2l0ZWREYXlzIHNvIGl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2hlbiBuZXh0IHJlcXVl
c3RlZC4KICAgICAgICAgX29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBuaWw7CiAgICAgfQpAQCAt
MzQ2LDggKzM0Miw4IEBAIC0gKHZvaWQpcmVidWlsZEhpc3RvcnlCeURheUlmTmVlZGVkOihXZWJI
aXN0b3J5ICopd2ViSGlzdG9yeQogewogICAgIC8vIFdlIGNsZWFyIGFsbCB0aGUgdmFsdWVzIHRv
IHByZXNlbnQgYSBjb25zaXN0ZW50IHN0YXRlIHdoZW4gc2VuZGluZyB0aGUgbm90aWZpY2F0aW9u
cy4KICAgICAvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBlbnRyaWVzIGZvciByZWJ1aWxk
aW5nIHRoZSBoaXN0b3J5IGFmdGVyIHRoZSBub3RpZmljYXRpb24uCi0gICAgYXV0byBlbnRyeUFy
cmF5cyA9IGNvcHlUb1ZlY3RvcihfZW50cmllc0J5RGF0ZS0+dmFsdWVzKCkpOwotICAgIF9lbnRy
aWVzQnlEYXRlLT5jbGVhcigpOworICAgIGF1dG8gZW50cnlBcnJheXMgPSBjb3B5VG9WZWN0b3Io
X2VudHJpZXNCeURhdGUudmFsdWVzKCkpOworICAgIF9lbnRyaWVzQnlEYXRlLmNsZWFyKCk7CiAg
ICAgCiAgICAgYXV0byBlbnRyaWVzQnlVUkwgPSBzdGQ6OmV4Y2hhbmdlKF9lbnRyaWVzQnlVUkws
IG5pbCk7CiAgICAgCkBAIC0zOTUsMTAgKzM5MSwxMCBAQCAtIChCT09MKXJlbW92ZUl0ZW1zOihO
U0FycmF5ICopZW50cmllcwogCiAtIChCT09MKXJlbW92ZUFsbEl0ZW1zCiB7Ci0gICAgaWYgKF9l
bnRyaWVzQnlEYXRlLT5pc0VtcHR5KCkpCisgICAgaWYgKF9lbnRyaWVzQnlEYXRlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgX2VudHJpZXNCeURhdGUtPmNsZWFyKCk7Cisg
ICAgX2VudHJpZXNCeURhdGUuY2xlYXIoKTsKICAgICBbX2VudHJpZXNCeVVSTCByZW1vdmVBbGxP
YmplY3RzXTsKIAogICAgIC8vIENsZWFyIF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzIHNvIGl0IHdp
bGwgYmUgcmVnZW5lcmF0ZWQgd2hlbiBuZXh0IHJlcXVlc3RlZC4KQEAgLTQyOCwxMiArNDI0LDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIC0gKE5TQXJyYXkgKilvcmRl
cmVkTGFzdFZpc2l0ZWREYXlzCiB7CiAgICAgaWYgKCFfb3JkZXJlZExhc3RWaXNpdGVkRGF5cykg
ewotICAgICAgICBWZWN0b3I8aW50PiBkYXlzQXNUaW1lSW50ZXJ2YWxzOwotICAgICAgICBkYXlz
QXNUaW1lSW50ZXJ2YWxzLnJlc2VydmVDYXBhY2l0eShfZW50cmllc0J5RGF0ZS0+c2l6ZSgpKTsK
LSAgICAgICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gX2VudHJpZXNC
eURhdGUtPmVuZCgpOwotICAgICAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gX2VudHJpZXNCeURhdGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGRheXNBc1RpbWVJbnRlcnZhbHMuYXBwZW5kKGl0LT5rZXkpOwotCisgICAgICAgIGF1
dG8gZGF5c0FzVGltZUludGVydmFscyA9IGNvcHlUb1ZlY3RvcihfZW50cmllc0J5RGF0ZS5rZXlz
KCkpOwogICAgICAgICBzdGQ6OnNvcnQoZGF5c0FzVGltZUludGVydmFscy5iZWdpbigpLCBkYXlz
QXNUaW1lSW50ZXJ2YWxzLmVuZCgpKTsKICAgICAgICAgc2l6ZV90IGNvdW50ID0gZGF5c0FzVGlt
ZUludGVydmFscy5zaXplKCk7CiAgICAgICAgIF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvdW50XSk7CkBA
IC00NTEsNyArNDQyLDcgQEAgLSAoTlNBcnJheSAqKW9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25E
YXk6KE5TQ2FsZW5kYXJEYXRlICopZGF0ZQogICAgIFdlYkhpc3RvcnlEYXRlS2V5IGRhdGVLZXk7
CiAgICAgaWYgKCFbc2VsZiBmaW5kS2V5OiZkYXRlS2V5IGZvckRheTpbZGF0ZSB0aW1lSW50ZXJ2
YWxTaW5jZVJlZmVyZW5jZURhdGVdXSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
X2VudHJpZXNCeURhdGUtPmdldChkYXRlS2V5KS5nZXQoKTsKKyAgICByZXR1cm4gX2VudHJpZXNC
eURhdGUuZ2V0KGRhdGVLZXkpLmdldCgpOwogfQogCiBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKQEAgLTYxNCwxNiArNjA1LDE2IEBAIC0gKEJPT0wpbG9hZEZyb21VUkw6KE5TVVJM
ICopVVJMIGNvbGxlY3REaXNjYXJkZWRJdGVtc0ludG86KE5TTXV0YWJsZUFycmF5ICopZGlzCiAK
IC0gKE5TRGF0YSAqKWRhdGEKIHsKLSAgICBpZiAoX2VudHJpZXNCeURhdGUtPmlzRW1wdHkoKSkg
eworICAgIGlmIChfZW50cmllc0J5RGF0ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgc3RhdGljIE5T
RGF0YSAqZW1wdHlIaXN0b3J5RGF0YSA9IFtbTlNEYXRhIGFsbG9jXSBpbml0XTsKICAgICAgICAg
cmV0dXJuIGVtcHR5SGlzdG9yeURhdGE7CiAgICAgfQogCiAgICAgLy8gSWdub3JlcyB0aGUgZGF0
ZSBhbmQgaXRlbSBjb3VudCBsaW1pdHM7IHRoZXNlIGFyZSByZXNwZWN0ZWQgd2hlbiBsb2FkaW5n
IGluc3RlYWQgb2Ygd2hlbiBzYXZpbmcsIHNvCiAgICAgLy8gdGhhdCBjbGllbnRzIGNhbiBsZWFy
biBvZiBkaXNjYXJkZWQgaXRlbXMgYnkgbGlzdGVuaW5nIHRvIFdlYkhpc3RvcnlJdGVtc0Rpc2Nh
cmRlZFdoaWxlTG9hZGluZ05vdGlmaWNhdGlvbi4KLSAgICBXZWJIaXN0b3J5V3JpdGVyIHdyaXRl
cihfZW50cmllc0J5RGF0ZS5nZXQoKSk7CisgICAgV2ViSGlzdG9yeVdyaXRlciB3cml0ZXIoX2Vu
dHJpZXNCeURhdGUpOwogICAgIHdyaXRlci53cml0ZVByb3BlcnR5TGlzdCgpOwotICAgIHJldHVy
biByZXRhaW5QdHIoKE5TRGF0YSAqKXdyaXRlci5yZWxlYXNlRGF0YSgpLmdldCgpKS5hdXRvcmVs
ZWFzZSgpOworICAgIHJldHVybiB3cml0ZXIucmVsZWFzZURhdGEoKS5icmlkZ2luZ0F1dG9yZWxl
YXNlKCk7CiB9CiAKIC0gKEJPT0wpc2F2ZVRvVVJMOihOU1VSTCAqKVVSTCBlcnJvcjooTlNFcnJv
ciAqKillcnJvcgpAQCAtODUxLDcgKzg0Miw3IEBAIC0gKHZvaWQpX3Zpc2l0ZWRVUkw6KE5TVVJM
ICopdXJsIHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSBtZXRob2Q6KE5TU3RyaW5nICopCiB7
CiAgICAgV2ViSGlzdG9yeUl0ZW0gKmVudHJ5ID0gW19oaXN0b3J5UHJpdmF0ZSB2aXNpdGVkVVJM
OnVybCB3aXRoVGl0bGU6dGl0bGVdOwogCi0gICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKGVu
dHJ5KTsKKyAgICBhdXRvIGl0ZW0gPSBjb3JlKGVudHJ5KTsKICAgICBpdGVtLT5zZXRMYXN0Vmlz
aXRXYXNGYWlsdXJlKHdhc0ZhaWx1cmUpOwogCiAgICAgZW50cnktPl9wcml2YXRlLT5fcmVkaXJl
Y3RVUkxzID0gbnVsbHB0cjsKQEAgLTg2NSwyMCArODU2LDE3IEBAIC0gKHZvaWQpX2FkZFZpc2l0
ZWRMaW5rc1RvVmlzaXRlZExpbmtTdG9yZTooV2ViVmlzaXRlZExpbmtTdG9yZSAmKXZpc2l0ZWRM
aW5rU3RvCiB9CiBAZW5kCiAKLVdlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0
ZVRvRW50cmllc01hcCogZW50cmllc0J5RGF0ZSkKLSAgICA6IG1fZW50cmllc0J5RGF0ZShlbnRy
aWVzQnlEYXRlKQorV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcihEYXRlVG9FbnRy
aWVzTWFwJiBlbnRyaWVzQnlEYXRlKQorICAgIDogbV9lbnRyaWVzQnlEYXRlIHsgZW50cmllc0J5
RGF0ZSB9CisgICAgLCBtX2RhdGVLZXlzIHsgY29weVRvVmVjdG9yKG1fZW50cmllc0J5RGF0ZS5r
ZXlzKCkpIH0KIHsKLSAgICBtX2RhdGVLZXlzLnJlc2VydmVDYXBhY2l0eShtX2VudHJpZXNCeURh
dGUtPnNpemUoKSk7Ci0gICAgRGF0ZVRvRW50cmllc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9lbnRyaWVzQnlEYXRlLT5lbmQoKTsKLSAgICBmb3IgKERhdGVUb0VudHJpZXNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIG1fZGF0ZUtleXMuYXBwZW5kKGl0LT5rZXkpOwogICAgIHN0ZDo6c29ydChtX2Rh
dGVLZXlzLmJlZ2luKCksIG1fZGF0ZUtleXMuZW5kKCkpOwogfQogCiB2b2lkIFdlYkhpc3RvcnlX
cml0ZXI6OndyaXRlSGlzdG9yeUl0ZW1zKEJpbmFyeVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbSYg
c3RyZWFtKQogewogICAgIGZvciAoaW50IGRhdGVJbmRleCA9IG1fZGF0ZUtleXMuc2l6ZSgpIC0g
MTsgZGF0ZUluZGV4ID49IDA7IGRhdGVJbmRleC0tKSB7Ci0gICAgICAgIE5TQXJyYXkgKmVudHJp
ZXMgPSBtX2VudHJpZXNCeURhdGUtPmdldChtX2RhdGVLZXlzW2RhdGVJbmRleF0pLmdldCgpOwor
ICAgICAgICBOU0FycmF5ICplbnRyaWVzID0gbV9lbnRyaWVzQnlEYXRlLmdldChtX2RhdGVLZXlz
W2RhdGVJbmRleF0pLmdldCgpOwogICAgICAgICBOU1VJbnRlZ2VyIGVudHJ5Q291bnQgPSBbZW50
cmllcyBjb3VudF07CiAgICAgICAgIGZvciAoTlNVSW50ZWdlciBlbnRyeUluZGV4ID0gMDsgZW50
cnlJbmRleCA8IGVudHJ5Q291bnQ7ICsrZW50cnlJbmRleCkKICAgICAgICAgICAgIHdyaXRlSGlz
dG9yeUl0ZW0oc3RyZWFtLCBbZW50cmllcyBvYmplY3RBdEluZGV4OmVudHJ5SW5kZXhdKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmlu
ZGV4IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLmM4NTczYjBkMDk4
YzIwNTAwMmVhM2M0N2FiZTQ4ZTY1MWRlYzJlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtOTQsMTMgKzk0LDEzIEBAIHN0
YXRpYyBSZXRhaW5QdHI8TlNDb3VudGVkU2V0PiBjcmVhdGVOU0NvdW50ZWRTZXQoY29uc3QgSGFz
aENvdW50ZWRTZXQ8Y29uc3QgY2hhCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVj
dGVkT2JqZWN0VHlwZUNvdW50cwogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkp
OwotICAgIHJldHVybiBjcmVhdGVOU0NvdW50ZWRTZXQoKmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0
ZWRPYmplY3RUeXBlQ291bnRzKCkpLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5T
Q291bnRlZFNldChjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKS5h
dXRvcmVsZWFzZSgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlw
ZUNvdW50cwogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwotICAgIHJldHVy
biBjcmVhdGVOU0NvdW50ZWRTZXQoKmNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291bnRzKCkp
LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQ291bnRlZFNldChjb21tb25WTSgp
LmhlYXAub2JqZWN0VHlwZUNvdW50cygpKS5hdXRvcmVsZWFzZSgpOwogfQogCiArICh2b2lkKWdh
cmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViRWxlbWVudERpY3Rpb25hcnkubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCmluZGV4IGFlYjRkOGYxNmZkZGIw
MjU1MTA4YjJhMDBlYjlmNjcyMTVmMTc2NDIuLjc5NmZjOGUxOGJiNGZhZDY0M2MxMGYyNDVkNTM1
NGY1MThiN2FiOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2Vi
RWxlbWVudERpY3Rpb25hcnkubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJFbGVtZW50RGljdGlvbmFyeS5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlSklUT3BlcmF0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
T2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUNvcmUuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmll
dy5oCmluZGV4IDNhYjkxNDJhOTM1NDE5MGY4NTc2ZmI5YjE0OGVlMGQ5NTE2ZTA1YTAuLmVjYzAw
NTE5MDdkNjRmNGNiYmE1ZjE0NDUxOTU5MWZhMzRjZTViMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaApAQCAt
NzcsNyArNzcsNyBAQCB0eXBlZGVmIHVuaW9uIFBsdWdpblBvcnQgewogICAgIEJPT0wgc2hvdWxk
U3RvcFNvb247CiAKICAgICB1aW50MzJfdCBjdXJyZW50VGltZXJJRDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblRpbWVyPj4+IHRp
bWVyczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luVGltZXI+
PiB0aW1lcnM7CiAKICAgICB1bnNpZ25lZCBwbHVnaW5GdW5jdGlvbkNhbGxEZXB0aDsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblZpZXcubW0KaW5kZXggOGZmZjI0NWUxNjhkMzRhZGJlZGIwMmQ0NzQ4ZjljYjg3MTEw
NzdiNi4uNzFjZDFmNmM2MjMyNzgyMjhiNGFkZTdiYThkYjhhNTBkYWU1MTAxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcubW0KQEAgLTM5OCwxMSArMzk4LDggQEAgLSAodm9pZClzdG9wVGltZXJzCiAgICAgaWYg
KF9ldmVudEhhbmRsZXIpCiAgICAgICAgIF9ldmVudEhhbmRsZXItPnN0b3BUaW1lcnMoKTsKICAg
ICAKLSAgICBpZiAoIXRpbWVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBp
dDogdGltZXJzLT52YWx1ZXMoKSkKLSAgICAgICAgaXQtPnN0b3AoKTsKKyAgICBmb3IgKGF1dG8m
IHRpbWVyIDogdGltZXJzLnZhbHVlcygpKQorICAgICAgICB0aW1lci0+c3RvcCgpOwogfQogCiAt
ICh2b2lkKXN0YXJ0VGltZXJzCkBAIC00MTMsMTIgKzQxMCw5IEBAIC0gKHZvaWQpc3RhcnRUaW1l
cnMKICAgICAvLyBzZW5kIG51bGwgZXZlbnRzIGF0IGEgcmVkdWNlZCByYXRlLgogICAgIF9ldmVu
dEhhbmRsZXItPnN0YXJ0VGltZXJzKF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CiAgICAgCi0gICAg
aWYgKCF0aW1lcnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGl0OiB0
aW1lcnMtPnZhbHVlcygpKSB7Ci0gICAgICAgIEFTU0VSVCghaXQtPmlzQWN0aXZlKCkpOwotICAg
ICAgICBpdC0+c3RhcnQoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKKyAgICBmb3IgKGF1dG8mIHRp
bWVyIDogdGltZXJzLnZhbHVlcygpKSB7CisgICAgICAgIEFTU0VSVCghdGltZXItPmlzQWN0aXZl
KCkpOworICAgICAgICB0aW1lci0+c3RhcnQoX2lzQ29tcGxldGVseU9ic2N1cmVkKTsKICAgICB9
ICAgIAogfQogCkBAIC0xNjQ3LDE0ICsxNjQxLDExIEBAIC0gKHVpbnQzMl90KXNjaGVkdWxlVGlt
ZXJXaXRoSW50ZXJ2YWw6KHVpbnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0
CiAgICAgaWYgKCF0aW1lckZ1bmMpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGlmICgh
dGltZXJzKQotICAgICAgICB0aW1lcnMgPSBtYWtlVW5pcXVlPEhhc2hNYXA8dWludDMyX3QsIHN0
ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+PigpOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBs
dWdpblRpbWVyPiogc2xvdCA9IG51bGxwdHI7CiAgICAgdWludDMyX3QgdGltZXJJRDsKLSAgICBk
bworICAgIGRvIHsKICAgICAgICAgdGltZXJJRCA9ICsrY3VycmVudFRpbWVySUQ7Ci0gICAgd2hp
bGUgKCF0aW1lcnMtPmlzVmFsaWRLZXkodGltZXJJRCkgfHwgKihzbG90ID0gJnRpbWVycy0+YWRk
KHRpbWVySUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZSkpOworICAgIH0gd2hpbGUgKCF0aW1l
cnMuaXNWYWxpZEtleSh0aW1lcklEKSB8fCAqKHNsb3QgPSAmdGltZXJzLmFkZCh0aW1lcklELCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWUpKTsKIAogICAgIGF1dG8gdGltZXIgPSBtYWtlVW5pcXVl
PFBsdWdpblRpbWVyPihwbHVnaW4sIHRpbWVySUQsIGludGVydmFsLCByZXBlYXQsIHRpbWVyRnVu
Yyk7CiAKQEAgLTE2NjgsMTAgKzE2NTksNyBAQCAtICh1aW50MzJfdClzY2hlZHVsZVRpbWVyV2l0
aEludGVydmFsOih1aW50MzJfdClpbnRlcnZhbCByZXBlYXQ6KE5QQm9vbClyZXBlYXQgdAogCiAt
ICh2b2lkKXVuc2NoZWR1bGVUaW1lcjoodWludDMyX3QpdGltZXJJRAogewotICAgIGlmICghdGlt
ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdGltZXJzLT5yZW1vdmUodGltZXJJRCk7
CisgICAgdGltZXJzLnJlbW92ZSh0aW1lcklEKTsKIH0KIAogLSAoTlBFcnJvcilwb3BVcENvbnRl
eHRNZW51OihOUE1lbnUgKiltZW51CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgK
aW5kZXggNjY4YjkzMjYyMGE4ZTBkMTM2OGVlN2IwZDBlM2MxYjMzMDA1MzNjNS4uMmE3MTNiOWRi
ZjcyMmFmZjVlNmE4M2NhNjkzYzNlMzBmNmNkODI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZU5ldHdvcmtpbmdDb250ZXh0Lmg+CiAKLWNsYXNzIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQg
OiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CitjbGFzcyBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICB7CkBAIC0zOCwxNiArMzgs
MTUgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKCk7CiAKIHByaXZhdGU6Ci0KICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSkKICAgICAgICAgOiBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250
ZXh0KGZyYW1lKQogICAgIHsKICAgICB9CiAKLSAgICBib29sIGxvY2FsRmlsZUNvbnRlbnRTbmlm
ZmluZ0VuYWJsZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTY2hlZHVsZVBhaXJIYXNoU2V0KiBz
Y2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFN0cmluZyBzb3VyY2VBcHBsaWNhdGlvbklkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBsb2Nh
bEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgZmluYWw7CisgICAgY29uc3QgU2No
ZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgZmluYWw7Cisg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25z
dCBmaW5hbDsKKyAgICBTdHJpbmcgc291cmNlQXBwbGljYXRpb25JZGVudGlmaWVyKCkgY29uc3Qg
ZmluYWw7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgZmluYWw7CisgICAgV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0IGZpbmFsOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IDBhMDZlYTNmOTc2NzdkZjUzMTRk
YTEwNzAwN2YyYTViMGQwN2ZmZjcuLjZiYTBiYmFjNGYxMjE4NTQ1NzUzOGEwM2UyN2ZkNDEwY2Q5
NDliMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNjIsMTEg
KzYyLDExIEBAIGJvb2wgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6bG9jYWxGaWxlQ29udGVu
dFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGZyYW1lKCkgJiYgZnJhbWUoKS0+
c2V0dGluZ3MoKS5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCk7CiB9CiAKLVNjaGVk
dWxlUGFpckhhc2hTZXQqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1bkxv
b3BQYWlycygpIGNvbnN0Citjb25zdCBTY2hlZHVsZVBhaXJIYXNoU2V0KiBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdAogewogICAgIGlmICgh
ZnJhbWUoKSB8fCAhZnJhbWUoKS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZnJhbWUoKS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMoKTsKKyAgICBy
ZXR1cm4gJmZyYW1lKCktPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CiB9CiAKIFJl
dGFpblB0cjxDRkRhdGFSZWY+IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNvdXJjZUFwcGxp
Y2F0aW9uQXVkaXREYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDYxZDZmNGU4NjU5NGRjYWI3ZTYxNzkwNzA0YjcwOWVm
NWNjYzJiZTAuLjNjYzM5MmIwMWI0ZGU0NTZjZjFkNzFmNDFmOTNkZTIyZmY0ZDE5YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtMTUw
LDYgKzE1MCw3IEBACiAjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KICNpbXBvcnQgPHd0Zi9PYmpD
UnVudGltZUV4dHJhcy5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgPHd0Zi9T
b3J0ZWRBcnJheU1hcC5oPgogI2ltcG9ydCA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KICNpbXBvcnQg
PHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CkBA
IC0yNjQyLDM3ICsyNjQzLDI2IEBAIC0gKEJPT0wpY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxl
Y3RvcklmTmVlZGVkOihTRUwpc2VsZWN0b3IKICAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5n
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNl
bGVjdG9yXTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPFNFTCwgU3RyaW5nPiBTZWxlY3Rvck5hbWVN
YXA7Ci0KLS8vIE1hcCBzZWxlY3RvcnMgaW50byBFZGl0b3IgY29tbWFuZCBuYW1lcy4KLS8vIFRo
aXMgaXMgbm90IG5lZWRlZCBmb3IgYW55IHNlbGVjdG9ycyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFt
ZSBhcyB0aGUgRWRpdG9yIGNvbW1hbmQuCi1zdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBj
cmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpCi17Ci0gICAgU2VsZWN0b3JOYW1lTWFwKiBtYXAg
PSBuZXcgSGFzaE1hcDxTRUwsIFN0cmluZz47Ci0KLSAgICBtYXAtPmFkZChAc2VsZWN0b3IoaW5z
ZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSwgIkluc2VydE5ld2xpbmUiKTsKLSAgICBt
YXAtPmFkZChAc2VsZWN0b3IoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOiksICJJbnNlcnROZXds
aW5lIik7Ci0gICAgbWFwLT5hZGQoQHNlbGVjdG9yKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0
b3I6KSwgIkluc2VydFRhYiIpOwotICAgIG1hcC0+YWRkKEBzZWxlY3RvcihwYWdlRG93bjopLCAi
TW92ZVBhZ2VEb3duIik7Ci0gICAgbWFwLT5hZGQoQHNlbGVjdG9yKHBhZ2VEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uOiksICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iKTsKLSAgICBtYXAt
PmFkZChAc2VsZWN0b3IocGFnZVVwOiksICJNb3ZlUGFnZVVwIik7Ci0gICAgbWFwLT5hZGQoQHNl
bGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjopLCAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNl
bGVjdGlvbiIpOwotCi0gICAgcmV0dXJuIG1hcDsKLX0KLQogc3RhdGljIFN0cmluZyBjb21tYW5k
TmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKIHsKKyAgICBjb25zdCBjaGFyKiBzZWxlY3Rv
ck5hbWUgPSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7CisKICAgICAvLyBDaGVjayB0aGUgZXhjZXB0
aW9uIG1hcCBmaXJzdC4KLSAgICBzdGF0aWMgY29uc3QgU2VsZWN0b3JOYW1lTWFwKiBleGNlcHRp
b25NYXAgPSBjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCgpOwotICAgIFNlbGVjdG9yTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBleGNlcHRpb25NYXAtPmZpbmQoc2VsZWN0b3IpOwotICAg
IGlmIChpdCAhPSBleGNlcHRpb25NYXAtPmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnZhbHVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENvbXBhcmFibGVBU0NJSUxpdGVyYWws
IEFTQ0lJTGl0ZXJhbD4gZXhjZXB0aW9uQXJyYXlbXSA9IHsKKyAgICAgICAgeyAiaW5zZXJ0TmV3
bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6IiwgIkluc2VydE5ld2xpbmUiX3MgfSwKKyAgICAgICAg
eyAiaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOiIsICJJbnNlcnROZXdsaW5lIl9zIH0sCisgICAg
ICAgIHsgImluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3I6IiwgIkluc2VydFRhYiJfcyB9LAor
ICAgICAgICB7ICJwYWdlRG93bjoiLCAiTW92ZVBhZ2VEb3duIl9zIH0sCisgICAgICAgIHsgInBh
Z2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOiIsICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rp
b24iX3MgfSwKKyAgICAgICAgeyAicGFnZVVwOiIsICJNb3ZlUGFnZVVwIl9zIH0sCisgICAgICAg
IHsgInBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjoiLCAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVj
dGlvbiJfcyB9LAorICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcCBl
eGNlcHRpb25NYXAgeyBleGNlcHRpb25BcnJheSB9OworICAgIGlmIChhdXRvIGNvbW1hbmROYW1l
ID0gZXhjZXB0aW9uTWFwLnRyeUdldChzZWxlY3Rvck5hbWUpKQorICAgICAgICByZXR1cm4gKmNv
bW1hbmROYW1lOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KLSAgICAvLyBO
byBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFu
ZCBuYW1lcyBhcmUKLSAgICAvLyBub3QgY2FzZSBzZW5zaXRpdmUuCi0gICAgY29uc3QgY2hhciog
c2VsZWN0b3JOYW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOworICAgIC8vIE5vIG5lZWQgdG8g
Y2FwaXRhbGl6ZSB0aGUgY29tbWFuZCBuYW1lIHNpbmNlIEVkaXRvciBjb21tYW5kIG5hbWVzIGFy
ZSBub3QgY2FzZSBzZW5zaXRpdmUuCiAgICAgc2l6ZV90IHNlbGVjdG9yTmFtZUxlbmd0aCA9IHN0
cmxlbihzZWxlY3Rvck5hbWUpOwogICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAyIHx8IHNl
bGVjdG9yTmFtZVtzZWxlY3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429403</attachid>
            <date>2021-05-21 22:14:03 -0700</date>
            <delta_ts>2021-05-23 22:25:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226068-20210521221402.patch</filename>
            <type>text/plain</type>
            <size>288564</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZWI0ZmJjYWNhMTU4YTdjN2NhOTFjNDVlODIxYmIzNjNjMzU1NmE1Li5mYzA0YmNlMDEyYWU3MzNh
ODkyMDI4NTA1YTBmNTg1ZDkzZDM0MTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAyMS0wNS0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNl
LCBzcGVlZCwgY29kZSBzaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYwNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6
Ok9wYXF1ZUpTQ2xhc3MpOiBVcGRhdGUgc28gbV9zdGF0aWNWYWx1ZXMgYW5kCisgICAgICAgIG1f
c3RhdGljRnVuY3Rpb25zIGFyZSBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0ci4KKyAgICAgICAg
KE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKTogRGl0dG8uCisgICAgICAgIChPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSk6IERpdHRvLgorICAg
ICAgICAoT3BhcXVlSlNDbGFzczo6c3RhdGljVmFsdWVzKTogRGl0dG8uCisgICAgICAgIChPcGFx
dWVKU0NsYXNzOjpzdGF0aWNGdW5jdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5oOiBEaXR0by4KKworICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkluZGV4ZWRBYnN0cmFjdEhlYXA6OmF0U2xvdyk6IFVwZGF0ZSBzbyBt
X2xhcmdlSW5kaWNlcworICAgICAgICBpcyBubyBsb25nZXIgdXNpbmcgdW5pcXVlX3B0ci4KKyAg
ICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmg6IERpdHRvLgorCisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6
IFVwZGF0ZSB0byBub3QgcmV0dXJuCisgICAgICAgIGEgdW5pcXVlX3B0ci4KKyAgICAgICAgKEpT
Qzo6SGVhcDo6b2JqZWN0VHlwZUNvdW50cyk6IERpdHRvLgorICAgICAgICAoSlNDOjpIZWFwOjph
ZGRDb3JlQ29uc3RyYWludHMpOiBVcGRhdGUgc2luY2UgbV9tYXJrTGlzdFNldCBpcworICAgICAg
ICBubyBsb25nZXIgYSB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBEaXR0by4K
KyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6IERpdHRvLgorCisgICAgICAgICogaGVhcC9I
ZWFwVXRpbC5oOgorICAgICAgICAoSlNDOjpIZWFwVXRpbDo6aXNQb2ludGVyR0NPYmplY3RKU0Nl
bGwpOiBSZW1vdmVkIGNoZWNrIHRvIHNlZQorICAgICAgICBpZiBhIHNldCBpcyBlbXB0eSBiZWZv
cmUgY2FsbGluZyBjb250YWlucyBvbiBpdC4gVGhhdCdzIHVubmVlZGVkCisgICAgICAgIGV4dHJh
IGNvZGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VBbGxvY2F0aW9uVHJhY2tpbmcpOiBVcGRhdGUgc2lu
Y2UKKyAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldCBpcyBub3cgdXNpbmcgT3B0aW9uYWwg
aW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDogRGl0
dG8uCisKKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogVXBkYXRlIHNp
bmNlCisgICAgICAgIG1fdGVtcGxhdGVPYmplY3RNYXAgaXMgbm8gbG9uZ2VyIGEgdW5pcXVlX3B0
ci4KKyAgICAgICAgKiBydW50aW1lL0V2YWxFeGVjdXRhYmxlLmg6IERpdHRvLgorICAgICAgICAq
IHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25F
eGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbkltcGwpOiBEaXR0by4KKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAgICAgICAgKiBydW50
aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogRGl0
dG8uCisgICAgICAgICogcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0by4K
KyAgICAgICAgKiBydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKTogRGl0dG8u
CisgICAgICAgICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOiBEaXR0by4KKyAgICAgICAg
KiBydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVj
dXRhYmxlOjpjcmVhdGVUZW1wbGF0ZU9iamVjdCk6IENhbGwgdGhlIG5ldworICAgICAgICB0ZW1w
bGF0ZU9iamVjdE1hcCBpbnN0ZWFkIG9mIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwLgorICAgICAg
ICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp0ZW1wbGF0ZU9iamVjdE1h
cCk6IFJlbmFtZWQgZnJvbQorICAgICAgICBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCBhbmQgZ290
IHJpZCBvZiB0aGUgVk0gYXJndW1lbnQuCisgICAgICAgICogcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmg6IERpdHRvLgorCiAyMDIxLTA1LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgU3RvcCB1c2luZyBob2xkTG9jaygpIGluIEpTQyBhcyBpdCBpcyBub3Qg
Y29tcGF0aWJsZSB3aXRoIENsYW5nIHRocmVhZCBzYWZldHkgYW5hbHlzaXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZDA1M2Iz
ODRhMGNkZmMzY2E2YzAwMzYwNTgzZTczYWI5ZTRlYTc3Zi4uZjg3NWUwNmVhYzIxNTdmNzFkYmEx
NWFlMGE3OWJmM2M5ZDJiZDI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0wNS0yMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHV0dGluZyBIYXNoTWFwIGlu
IGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNlLCBzcGVlZCwgY29kZSBzaXplCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYwNjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXNoTWFwLCBIYXNoU2V0
LCBIYXNoQ291bnRlZFNldCwgTGlzdEhhc2hTZXQsIGFuZCBXZWFrSGFzaFNldCBhbGwKKyAgICAg
ICAgY29udGFpbiBvbmx5IGEgc2luZ2xlIHBvaW50ZXIgaW4gcHJvZHVjdGlvbiBidWlsZHMuIFB1
dHRpbmcgb25lIGludG8KKyAgICAgICAgYSBibG9jayBvbiB0aGUgaGVhcCBjb3N0cyBtZW1vcnkg
KHRoZSBoZWFwIGJsb2NrKSwgc3BlZWQgYW5kIGNvZGUgc2l6ZQorICAgICAgICAoY2hhc2luZyBv
bmUgbW9yZSBwb2ludGVyLCBhZGRpdGlvbmFsIG51bGwgY2hlY2tzKS4KKworICAgICAgICAqIHd0
Zi9IYXNoQ291bnRlZFNldC5oOiBSZW1vdmUgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQuIFRoaXMg
bWFrZXMgaXQKKyAgICAgICAgc28gaWYgd2UgY2FsbCBtYWtlVW5pcXVlIHdlIHdpbGwgZ2V0IGEg
Y29tcGlsZSB0aW1lIGVycm9yLCB3aGljaCBjYW4KKyAgICAgICAgaGVscCByZW1pbmQgdXMgbm90
IHRvIHB1dCB0aGlzIGludG8gYSBoZWFwIGJsb2NrIGJ5IGl0c2VsZi4KKyAgICAgICAgKiB3dGYv
SGFzaE1hcC5oOiBEaXR0by4KKyAgICAgICAgKiB3dGYvSGFzaFNldC5oOiBEaXR0by4KKyAgICAg
ICAgKiB3dGYvSGFzaFRhYmxlLmg6IERpdHRvLgorICAgICAgICAqIHd0Zi9MaXN0SGFzaFNldC5o
OiBEaXR0by4KKyAgICAgICAgKiB3dGYvV2Vha0hhc2hTZXQuaDogRGl0dG8uCisKIDIwMjEtMDUt
MjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgQ2hlY2tl
ZENvbmRpdGlvbiBpbiBtb3JlIHBsYWNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU5Y2MxZWEzMmRkZjhiYmVj
MzlmZTMzNTM2MzE3NzU3YjBhZTJmYzAuLmQ4MWY4YTEzODlhMDc1MjQ5MGNlYjZiMTlmZWZkYjE0
ZTE5MjZmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODMgQEAKKzIwMjEtMDUtMjEgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBpbiBh
IGhlYXAgYmxvY2sgaHVydHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MDY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6b2JqZWN0U3Rv
cmVDbGVhcmVkKToKKyAgICAgICAgU3RvcCB1c2luZyB1bmlxdWVfcHRyIGluIG1fb3JpZ2luYWxW
YWx1ZXMgYW5kIG1fY2xlYXJlZEtleVZhbHVlTWFwcyBhbmQKKyAgICAgICAgdG8gdHJhbnNmZXIg
b3duZXJzaGlwIG9mIGEgS2V5VmFsdWVNYXAuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
Ok1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpyZWNvcmRWYWx1ZUNoYW5nZWQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb246OmFib3J0KTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmg6IERpdHRvLgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OmNvbnRhaW5zUmVjb3JkKTogU3Rv
cCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciBtX2tleVZhbHVlU3RvcmUuCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpyZXBsYWNlS2V5VmFsdWVT
dG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6ZGVsZXRlUmVjb3JkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
Ok1lbW9yeU9iamVjdFN0b3JlOjphZGRSZWNvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdS
ZWNvcmRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVj
dFN0b3JlOjpjb3VudEZvcktleVJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RTdG9yZTo6dmFsdWVG
b3JLZXlSYW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpN
ZW1vcnlPYmplY3RTdG9yZTo6bG93ZXN0S2V5V2l0aFJlY29yZEluUmFuZ2UgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUu
aDogRGl0dG8uCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Om9wZW5EYXRhYmFzZXMp
OiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIgZm9yCisgICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwLCBt
X2JlaW5nQ3JlYXRlZCwgYW5kIG1fYmVpbmdEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlY29yZENyZWF0aW5nRGF0YWJhc2UpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2Up
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Y3JlYXRpbmdEYXRh
YmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpyZWNvcmRE
ZWxldGluZ0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OmRvbmVEZWxldGluZ0RhdGFiYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmlzRGVsZXRpbmdEYXRhYmFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5EZWxldGVPcmlnaW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFz
ZXMpOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tl
ci5oOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5OjpXaW5kb3dQcm94eSk6IFN0b3AgdXNpbmcgVW5p
cXVlUmVmIGZvcgorICAgICAgICBtX2pzV2luZG93UHJveGllcy4KKyAgICAgICAgKFdlYkNvcmU6
OldpbmRvd1Byb3h5Ojp+V2luZG93UHJveHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldp
bmRvd1Byb3h5OjpkZXRhY2hGcm9tRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldp
bmRvd1Byb3h5OjpkZXN0cm95SlNXaW5kb3dQcm94eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6V2luZG93UHJveHk6OmNyZWF0ZUpTV2luZG93UHJveHkpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldpbmRvd1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXNBc1ZlY3RvciBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6OmNsZWFySlNXaW5kb3dQcm94aWVzTm90
TWF0Y2hpbmdET01XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5
OjpzZXRET01XaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd1Byb3h5Ojph
dHRhY2hEZWJ1Z2dlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJveHk6Ompz
V2luZG93UHJveGllcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2luZG93UHJv
eHk6OnJlbGVhc2VKU1dpbmRvd1Byb3hpZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldp
bmRvd1Byb3h5OjpzZXRKU1dpbmRvd1Byb3hpZXMpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9XaW5kb3dQcm94eS5oOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUp
OiBVc2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIKKyAgICAgICAgZm9yIGNvdW50
ZXJEaXJlY3RpdmVzLgorCisgICAgICAgICogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OndyYXBGb3JEZXByZWNhdGVkQ1NTT00pOgorICAgICAgICBTdG9wIHVzaW5nIHVuaXF1ZV9w
dHIgZm9yIG1fY3Nzb21WYWx1ZVdyYXBwZXJzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUpOiBEaXR0by4KKyAgICAgICAg
KiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg6IERpdHRvLgorCisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFj
Y2Vzc0tleUNhY2hlKTogVXNlIE9wdGlvbmFsIGluc3RlYWQgb2YKKyAgICAgICAgdW5pcXVlX3B0
ciBmb3IgbV9hY2Nlc3NLZXlDYWNoZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbnZh
bGlkYXRlQWNjZXNzS2V5Q2FjaGVTbG93Q2FzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIK
KyAgICAgICAgZm9yIG1fdG91Y2hFdmVudFRhcmdldHMgYW5kIG1fd2hlZWxFdmVudFRhcmdldHMu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFu
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQWRkV2hlZWxFdmVu
dEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRSZW1vdmVX
aGVlbEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Ondo
ZWVsRXZlbnRIYW5kbGVyQ291bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpkaWRBZGRUb3VjaEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCBjb25zdCk6
IERpdHRvLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGRv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5OjphZGRPYnNlcnZlcik6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5p
cXVlX3B0ciBmb3IgdGhlIHZhbHVlcyBpbiBtX3JlZ2lzdHJ5LgorICAgICAgICAoV2ViQ29yZTo6
SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnNlcnZlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnNlcnZlcnNJbnRl
cm5hbCk6IERpdHRvLgorICAgICAgICAqIGRvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaDog
RGl0dG8uCisKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKTogU3RvcCB1c2luZyB1bmlxdWVfcHRy
IGZvcgorICAgICAgICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRha2VUcmFuc2llbnRSZWdpc3RyYXRp
b25zLgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om9ic2VydmVkU3Vi
dHJlZU5vZGVXaWxsRGV0YWNoKToKKyAgICAgICAgU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvciBt
X3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzLgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9tL011dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24uaDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0Zvcm1Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpjcmVhdGVTYXZl
ZEZvcm1TdGF0ZU1hcCk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgdGhlIHJl
dHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRy
b2xsZXI6OmZvcm1FbGVtZW50c1N0YXRlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogaHRtbC9G
b3JtQ29udHJvbGxlci5oOiBEaXR0by4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQpOiBVc2UgYSBzdHJ1Y3QKKyAgICAgICAgbmFtZWQgSGVh
cE5vZGVUb0lkTWFwIGZvciB0aGUgb2RkIGNhc2UgaGVyZSB3aGVyZSBhbGxvY2F0aW5nIHRoZSBt
YXAKKyAgICAgICAgb24gdGhlIGhlYXAgaXMgbmVjZXNzYXJ5OyB3ZSBjYW4ndCBoYXZlIHRoZSBt
YXAgbW92aW5nIGFyb3VuZCB3aGVuCisgICAgICAgIHdlIGFwcGVuZCBlbGVtZW50cyB0byB0aGUg
bV9kYW5nbGluZ05vZGVUb0lkTWFwcyB2ZWN0b3IuIERvIGl0IHRoaXMKKyAgICAgICAgd2F5IHRv
IHNpZGVzdGVwIHRoZSBtZWFzdXJlcyB3ZSB0YWtlIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gZG9p
bmcKKyAgICAgICAgdGhpcyBpbiBhbGwgdGhlIG90aGVyIGNhc2VzIHdoZXJlIGl0IGlzIG5vdCBh
IGdvb2QgaWRlYS4KKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
Lmg6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjp0cnlMb2FkaW5nU3Vic3RpdHV0ZURhdGEpOiBV
cGRhdGUgc2luY2UKKyAgICAgICAgc2NoZWR1bGVkUnVuTG9vcFBhaXJzIG5vdyByZXR1cm5zIGEg
cmVmZXJlbmNlLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6bG9hZERhdGFVUkwpOiBEaXR0by4KKworICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQpOiBT
dG9wCisgICAgICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1fcHJlbG9hZHMuCisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2Fkcyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmlzUHJlbG9hZGVkIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xl
YXJQcmVsb2Fkcyk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5oOiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2Vzc2lvblJlc291cmNlTWFwKTog
U3RvcCB1c2luZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciB0aGUgdmFsdWVzIGluIG1fYWxsUmVz
b3VyY2VzIGFuZCBtX3Nlc3Npb25SZXNvdXJjZXMuCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6ZW5zdXJlU2Vzc2lvblJlc291cmNlTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmZvckVhY2hSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmZvckVhY2hTZXNzaW9uUmVzb3VyY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXNUb1NpemUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpscnVMaXN0Rm9yKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdp
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRo
Q2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpvcmlnaW5zV2l0
aENhY2hlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVt
b3ZlUmVxdWVzdEZyb21TZXNzaW9uQ2FjaGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
ZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVt
b3J5Q2FjaGU6OnNldERpc2FibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlD
YWNoZTo6ZHVtcExSVUxpc3RzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL2NhY2hl
L01lbW9yeUNhY2hlLmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRJc1Zpc2libGVBbmRB
Y3RpdmVJbnRlcm5hbCk6IFVwZGF0ZQorICAgICAgICBzaW5jZSBzY3JvbGxhYmxlQXJlYXMgcmV0
dXJucyBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUpOiBTdG9wIHVzaW5n
CisgICAgICAgIHVuaXF1ZV9wdHIgZm9yIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUsIG1fdmll
d3BvcnRDb25zdHJhaW5lZE9iamVjdHMsCisgICAgICAgIGFuZCBtX3Nsb3dSZXBhaW50T2JqZWN0
cy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JB
bGxTY3JvbGxhYmxlQXJlYXMpOiBTdG9wCisgICAgICAgIHVzaW5nIHVuaXF1ZV9wdHIgZm9yIG1f
c2Nyb2xsYWJsZUFyZWFzLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRFbWJlZGRl
ZE9iamVjdFRvVXBkYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJl
bW92ZUVtYmVkZGVkT2JqZWN0VG9VcGRhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6YWRkU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6cmVtb3ZlU2xvd1JlcGFpbnRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6YWRkVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCk6IERpdHRvLiBB
bHNvIGdvdAorICAgICAgICByaWQgb2YgdW5uZWNlc3NhcnkgZG91YmxlIGhhc2hpbmcuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29udGVudHNGYXN0
UGF0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXBhaW50U2xvd1Jl
cGFpbnRPYmplY3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzTmVlZExheW91dCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVFbWJlZGRlZE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0U2Nyb2xsU3RlcEZvckZpeGVkQ29udGVudCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVTY3JvbGxhYmxlQXJlYVNl
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpub3RpZnlQYWdlVGhhdENv
bnRlbnRBcmVhV2lsbFBhaW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OmFkZFNjcm9sbGFibGVBcmVhKTogRGl0dG8uIEFsc28gdGFrZSBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVtb3ZlU2Nyb2xsYWJsZUFyZWEpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udGFpbnNTY3JvbGxhYmxlQXJlYSBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGRDaGlsZCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZW1vdmVDaGlsZCk6IERpdHRvLgor
ICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6IERpdHRvLgorCisgICAgICAgICogcGFnZS9NZW1v
cnlSZWxlYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ01lbW9yeVN0YXRpc3RpY3NBdFRp
bWVPZkRlYXRoKTogVXBkYXRlZCBzaW5jZQorICAgICAgICBvYmplY3RUeXBlQ291bnRzIG5vIGxv
bmdlciByZXR1cm5zIGEgdW5pcXVlX3B0ci4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbik6
IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWFzIG5vdyByZXR1cm5zIGEgcmVm
ZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogcGFnZS9QYWdlLmg6IFN0
b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMuCisKKyAgICAg
ICAgKiBwYWdlL1BlcmZvcm1hbmNlTG9nZ2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZXJm
b3JtYW5jZUxvZ2dpbmc6OmphdmFTY3JpcHRPYmplY3RDb3VudHMpOiBVcGRhdGVkCisgICAgICAg
IHNpbmNlIG9iamVjdFR5cGVDb3VudHMgbm8gbG9uZ2VyIHJldHVybnMgYSB1bmlxdWVfcHRyLgor
CisgICAgICAgICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJp
bnRDb250ZXh0OjplbmQpOiBVc2UgT3B0aW9uYWwgaW5zdGVhZCBvZiB1bmlxdWVfcHRyCisgICAg
ICAgIGZvciBtX2xpbmtlZERlc3RpbmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29u
dGV4dDo6b3V0cHV0TGlua2VkRGVzdGluYXRpb25zKTogRGl0dG8uCisgICAgICAgICogcGFnZS9Q
cmludENvbnRleHQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6YWRkU2NoZWR1bGVQYWlyKTogU3RvcCB1c2luZyB1bmlx
dWVfcHRyIGZvcgorICAgICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy4KKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnJlbW92ZVNjaGVkdWxlUGFpcik6IERpdHRvLgorCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmFic29sdXRlRXZlbnRUcmFja2luZ1JlZ2lvbnNGb3JGcmFt
ZSBjb25zdCk6CisgICAgICAgIFVwZGF0ZWQgc2luY2Ugc2Nyb2xsYWJsZUFyZWFzIHJldHVybnMg
YSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFz
VmlzaWJsZVNsb3dSZXBhaW50Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgY29uc3QpOgorICAg
ICAgICBVcGRhdGVkIHNpbmNlIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHJldHVybnMgYSBy
ZWZlcmVuY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAu
aDogU3RvcCB1c2luZyB1bmlxdWVfcHRyCisgICAgICAgIGZvciBtX3BhZ2VzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6IFN0
b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgbV9uYW1lSGFzaE1hcEZvclNoYWRlcnMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21waWxlU2hhZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGVkIHNjaGVkdWxlZFJ1bkxvb3BQ
YWlycworICAgICAgICB0byByZXR1cm4gYSBjb25zdCBwb2ludGVyIHRvIHRoZSBzZXQuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXRB
dXRvUmVwZWF0RW1wdHlDb2x1bW5zKTogU3RvcCB1c2luZyBhIHVuaXF1ZV9wdHIKKyAgICAgICAg
Zm9yIG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucy4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6OnNl
dEF1dG9SZXBlYXRFbXB0eVJvd3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyaWQ6Omhh
c0F1dG9SZXBlYXRFbXB0eVRyYWNrcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
R3JpZDo6aXNFbXB0eUF1dG9SZXBlYXRUcmFjayBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6R3JpZDo6YXV0b1JlcGVhdEVtcHR5VHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpHcmlkOjpzZXROZWVkc0l0ZW1zUGxhY2VtZW50KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL0dyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobTo6Y29tcHV0ZUZsZXhGYWN0b3JVbml0U2l6ZSBjb25zdCk6CisgICAgICAgIFN0
b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IgdGhlIGFydWdtZW50IHRvIHRoaXMgZnVuY3Rpb24uCisg
ICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOiBEaXR0by4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwOiBEZWxldGVkIHRoZSBkZWZh
dWx0IGNvbnN0cnVjdG9yLAorICAgICAgICBjb3B5IGNvbnN0cnVjdG9yLCBkZXN0cnVjdG9yLCBh
bmQgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdExvY2F0
aW9uLmg6IFVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgdGhlIGRl
ZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IsIGRlc3RydWN0b3IsIGFuZAorICAg
ICAgICBhc3NpZ25tZW50IG9wZXJhdG9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kVG9Ob2RlU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQpOiBEZWxldGVk
IHRoZSBjb3B5CisgICAgICAgIGNvbnN0cnVjdG9yLiBXZSBjYW4gdXNlIHRoZSBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIG5vdyB0aGF0IHdlCisgICAgICAgIHN0b3BwZWQgdXNpbmcgdW5pcXVlX3B0
ciBmb3IgbV9saXN0QmFzZWRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJl
c3VsdDo6b3BlcmF0b3I9KTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKToKKyAgICAgICAg
RmFjdG9yZWQgb3V0IGEgaGVscGVyIGZ1bmN0aW9uIHNvIHRoZXJlIGlzIGxlc3MgdGVtcGxhdGUg
Y29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFwcGVuZCk6IFNpbXBsaWZp
ZWQgdXNpbmcgYSBtb2Rlcm4gZm9yCisgICAgICAgIGxsbG9vcAorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6bGlzdEJhc2VkVGVzdFJlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjptdXRhYmxlTGlzdEJhc2VkVGVzdFJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaDogRGl0dG8uCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKTogQWRkZWQuIFB1dCB0aGUgbWFwIGludG8gYQor
ICAgICAgICBnbG9iYWwgaW5zdGVhZCBvZiB1c2luZyBhIHBvaW50ZXIgYW5kIHRoZSBoZWFwLgor
ICAgICAgICAoV2ViQ29yZTo6cGVyY2VudEhlaWdodENvbnRhaW5lck1hcCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6aW5zZXJ0SW50b1RyYWNrZWRSZW5kZXJlck1hcHMpOiBVcGRhdGVkIGZv
ciBtYXAgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVGcm9tVHJhY2tlZFJlbmRl
cmVyTWFwcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25lZERlc2NlbmRhbnRz
TWFwOjphZGREZXNjZW5kYW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbmVk
RGVzY2VuZGFudHNNYXA6OnJlbW92ZURlc2NlbmRhbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBvc2l0aW9uZWREZXNjZW5kYW50c01hcDo6cmVtb3ZlQ29udGFpbmluZ0Jsb2NrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbmVkRGVzY2VuZGFudHNNYXA6OnBvc2l0aW9u
ZWRSZW5kZXJlcnMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlckJsb2Nr
UmFyZURhdGFNYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUJsb2NrRnJvbVBl
cmNlbnRhZ2VEZXNjZW5kYW50QW5kQ29udGFpbmVyTWFwcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Omhhc1JhcmVEYXRhIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpnZXRCbG9ja1JhcmVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjplbnN1cmVC
bG9ja1JhcmVEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRk
T3ZlcmZsb3dGcm9tUG9zaXRpb25lZE9iamVjdHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpkaXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFu
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmtQ
b3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGludWF0aW9uT3V0bGluZVRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludHNDb250aW51YXRpb25PdXRsaW5lKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25lZE9iamVjdHMgY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwZXJjZW50SGVpZ2h0RGVz
Y2VuZGFudHMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
YXNQZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6aGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVl
ZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudHNGcm9tKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmg6IFVwZGF0ZSB0byB1c2UgY29uc3QgcG9pbnRlcnMgd2hlbiBleHBvc2luZworICAg
ICAgICBzZXRzIHNvIHRoZXkgY2FuIGJlIGl0ZXJhdGVkLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGxhbkNvdW50ZXIpOiBVcGRh
dGVkIHNpbmNlIGNvdW50ZXJEaXJlY3RpdmVzIGlzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZUNvdW50ZXJOb2RlKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGluIGNvdW50ZXJN
YXBzLgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92
YWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3Vu
dGVyTm9kZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRlc3Ry
b3lDb3VudGVyTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVD
aGFuZ2VkU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKHNob3dDb3VudGVyUmVuZGVyZXJUcmVl
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKTogRGl0dG8uCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmludmFsaWRhdGVGcmFnbWVudHMpOiBTdG9w
IHVzaW5nCisgICAgICAgIHVuaXF1ZS1QdHIgZm9yIG1fbGluZVRvRnJhZ21lbnRNYXAuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlTGluZUZyYWdtZW50SW5m
byk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmNoZWNr
TGluZXNDb25zaXN0ZW5jeSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RnJhZ21lbnRlZEZsb3c6OmNsZWFyTGluZXNUb0ZyYWdtZW50TWFwKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y29udGFpbmluZ0ZyYWdtZW50TWFwKTog
TW92ZWQgdGhpcworICAgICAgICB0byB0aGUgaGVhZGVyIHNpbmNlIGl0J3Mgbm93IHRyaXZpYWwu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93Lmg6IERpdHRvLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6Z3V0dGVyc1NpemUgY29uc3QpOiBTdG9wIHVzaW5nIHVuaXF1ZV9wdHIKKyAgICAg
ICAgZm9yIE9yZGVyZWRUcmFja0luZGV4U2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdCBjb25zdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUgY29uc3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0
aW9uc0ZvckRpcmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
bm9uQ29sbGFwc2VkVHJhY2tzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckdyaWQuaDogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMpOiBVcGRhdGUKKyAgICAgICAgc2luY2Ugdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMgaXMgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nTm9kZXMpOgorICAgICAg
ICBVcGRhdGUgc2luY2Ugc2xvd1JlcGFpbnRPYmplY3RzIGlzIGEgcmVmZXJlbmNlLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXIpOiBQYXNzIHJlZmVyZW5j
ZSB0bworICAgICAgICBjb250YWlucy9hZGQvcmVtb3ZlU2Nyb2xsYWJsZUFyZWEuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJl
YVNldCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OlJlbmRlckxpc3RCb3gpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OndpbGxCZURlc3Ryb3llZCk6IERpdHRvLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OlJlbmRlck11bHRpQ29sdW1uRmxvdyk6
IE1vdmUgZGF0YQorICAgICAgICBtZW1iZXIgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGNsYXNzIGRl
ZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmZpbmRD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIgY29uc3QpOgorICAgICAgICBTdG9wIHVzaW5nIHVuaXF1
ZV9wdHIgZm9yIG1fc3Bhbm5lck1hcC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93Lmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlbGF5b3V0
Q2VsbElmRmxleGVkKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBwZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudHMgcmV0dXJucyBhIGNvbnN0IHBvaW50ZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpZGdldFJlbmRlcmVyTWFwKTogVXNl
IE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YKKyAgICAgICAgcHV0dGluZyB0aGUgbWFwIG9uIHRo
ZSBoZWFwLgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dCBjb25zdCk6
IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBmb3IgY291bnRlckRpcmVjdGl2ZXMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5
KTogU3RvcCB1c2luZworICAgICAgICB1bmlxdWVfcHRyIGZvciBjdXN0b21QYWludFdhdGNoZWRQ
cm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6Y2hhbmdlZEN1c3RvbVBhaW50V2F0Y2hlZFBy
b3BlcnR5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y291bnRlckRp
cmVjdGl2ZXMgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjph
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09IGNvbnN0KTog
RGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGEuaDogRGl0dG8uCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMpOiBVc2UgT3B0
aW9uYWwgaW5zdGVhZAorICAgICAgICBvZiB1bmlxdWVfcHRyIGZvciBtX3dlYWtDb3B5T2ZBY3Rp
dmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
U2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMgY29uc3QpOiBESXR0by4KKyAgICAgICAg
KiBzdHlsZS9TdHlsZVNjb3BlLmg6IERpdHRvLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZlNjcm9sbGFibGVB
cmVhcyk6IFVwZGF0ZSBzaW5jZQorICAgICAgICBzY3JvbGxhYmxlQXJlYXMgcmV0dXJucyBhIHJl
ZmVyZW5jZS4KKwogMjAyMS0wNS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCBsb2NraW5nIGlzc3VlIGZvciBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6Om1f
aXNQbGF5aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlMWEyOGJkNDliMjI0MThlMzFjZDk3ZWYzZDFiZjc2OWNh
ZjZkZDUuLmJkOTJkZmNkMzUyOGUzMjk3YTI4NTk4YWFiNjdkM2U5ZjQyMzBmNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTAgQEAKKzIwMjEtMDUtMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFB1dHRpbmcgSGFzaE1hcCBpbiBhIGhlYXAgYmxvY2sgaHVydHMgbWVt
b3J5IHVzZSwgc3BlZWQsIGNvZGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkU2NoZWR1bGVyOjpzZXRSZXNvdXJjZUxv
YWRTY2hlZHVsaW5nTW9kZSk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBpbiBtX3Bh
Z2VDb250ZXh0cy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWRTY2hlZHVsZXI6OmNvbnRl
eHRGb3JMb2FkKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRT
Y2hlZHVsZXIuaDogRGl0dG8uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVm
ZXRjaENhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UHJlZmV0Y2hDYWNoZTo6Y2xlYXIpOiBT
dG9wIHVzaW5nIHVuaXF1ZV9wdHIgaW4gbV9zZXNzaW9uUHJlZmV0Y2hlcy4KKyAgICAgICAgKFdl
YktpdDo6UHJlZmV0Y2hDYWNoZTo6dGFrZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQcmVm
ZXRjaENhY2hlOjpzdG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpQcmVmZXRjaENhY2hl
OjpzdG9yZVJlZGlyZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlByZWZldGNoQ2FjaGU6
OmNsZWFyRXhwaXJlZEVudHJpZXMpOiBEaXR0by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9QcmVmZXRjaENhY2hlLmg6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbToK
KyAgICAgICAgQWRkZWQgYW4gaW5jbHVkZSBuZWVkZWQgYmVjYXVzZSBvZiBjaGFuZ2VzIHRvIEhp
dFRlc3RSZXN1bHQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1cGRhdGVTY3JvbGxiYXJzKTogVXNl
IHJlZmVyZW5jZXMgd2hlbiBjYWxsaW5nCisgICAgICAgIGFkZC9yZW1vdmVTY3JvbGxhYmxlQXJl
YS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp3aWxsRGV0YWNoUmVuZGVyZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95KTogRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjphZGRPdmVycmlkZSk6
IFN0b3AgdXNpbmcgdW5pcXVlX3B0ciBmb3IKKyAgICAgICAgbV9vdmVycmlkZXNNYXAuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5U
eXBlcyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpn
ZXREYXRhRm9yT3ZlcnJpZGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaDogRGl0dG8uCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lmg6IFVwZGF0ZQorICAgICAgICBzY2hlZHVsZWRSdW5Mb29wUGFpcnMgdG8gcmV0dXJuIGEgY29u
c3QgcG9pbnRlci4gQWxzbyBtYXJrZWQgZXZlcnl0aGluZyBmaW5hbAorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZFJ1bkxv
b3BQYWlycyBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpwYWdlQ29udGFpbnNBbnlIb3Jpem9udGFsU2Ny
b2xsYmFycyk6IFVwZGF0ZWQgc2luY2Ugc2Nyb2xsYWJsZUFyZWFzCisgICAgICAgIHJldHVybnMg
YSByZWZlcmVuY2UuCisKIDIwMjEtMDUtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBTdG9wIHVzaW5nIGhvbGRMb2NrKCkgaW4gV2ViS2l0L1dlYktpdExlZ2Fj
eS9Ub29scyBhcyBpdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIENsYW5nIHRocmVhZCBzYWZldHkg
YW5hbHlzaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAxZjU1Mjc1MTVlOTBmMGIw
YThmMDFlOTNmMzQzZjUyOTAwOTVjMTI3Li4wMzNlMzVkZDZkMDNjMzBmZDBjNTZhODdjMTZmZDcz
ODc5NmExNDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMjEtMDUtMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFB1
dHRpbmcgSGFzaE1hcCBpbiBhIGhlYXAgYmxvY2sgaHVydHMgbWVtb3J5IHVzZSwgc3BlZWQsIGNv
ZGUgc2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBIaXN0b3J5L1dlYkhpc3RvcnkubW06IFVzZSBjb25zdGV4cHIgZm9yIHNvbWUgZmlsZS1sb2Nh
bCBjb25zdGFudHMuCisgICAgICAgIE1hcmsgdGhlIGNvbnN0cnVjdG9yIG9mIFdlYkhpc3RvcnlX
cml0ZXIgZXhwbGljaXQuIFVzZSBhIHJlZmVyZW5jZQorICAgICAgICBmb3IgdGhlIGFyZ3VtZW50
IHRvIFdlYkhpc3RvcnlXcml0ZXIuIFN0b3JlIGRhdGUga2V5cyBhcworICAgICAgICBXZWJIaXN0
b3J5RGF0ZUtleSBpbnN0ZWFkIG9mIG5hcnJvd2luZyB0byBpbnQuCisgICAgICAgICgtW1dlYkhp
c3RvcnlQcml2YXRlIGluaXRdKTogU3RvcCB1c2luZyB1bmlxdWVfcHRyIGZvciBfZW50cmllc0J5
RGF0ZS4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgZmluZEtleTpmb3JEYXk6XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBpbnNlcnRJdGVtOmZvckRhdGVLZXk6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSByZW1vdmVJdGVtRnJvbURh
dGVDYWNoZXM6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBhZGRJdGVt
VG9EYXRlQ2FjaGVzOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9yeVByaXZhdGUgcmVi
dWlsZEhpc3RvcnlCeURheUlmTmVlZGVkOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSGlzdG9y
eVByaXZhdGUgcmVtb3ZlQWxsSXRlbXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhpc3RvcnlQ
cml2YXRlIG9yZGVyZWRMYXN0VmlzaXRlZERheXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhp
c3RvcnlQcml2YXRlIG9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXk6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJIaXN0b3J5UHJpdmF0ZSBkYXRhXSk6IERpdHRvLiBBbHNvIHJlbW92ZWQgYW4g
aW5jb3JyZWN0IGJyaWRnaW5nCisgICAgICAgIGNhc3QgY29tYmluZWQgd2l0aCByZXRhaW5QdHIv
YXV0b3JlbGVhc2UgYW5kIHVzZWQgYnJpZGdpbmdBdXRvcmVsZWFzZSBpbnN0ZWFkLgorICAgICAg
ICAoV2ViSGlzdG9yeVdyaXRlcjo6V2ViSGlzdG9yeVdyaXRlcik6IFVwZGF0ZWQuCisgICAgICAg
IChXZWJIaXN0b3J5V3JpdGVyOjp3cml0ZUhpc3RvcnlJdGVtcyk6IERpdHRvLgorCisgICAgICAg
ICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3Rp
Y3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHNdKTogVXBkYXRlZAorICAgICAg
ICBzaW5jZSBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzIG5vIGxvbmdlciByZXR1cm5zIGEgdW5p
cXVlX3B0ci4KKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdFR5
cGVDb3VudHNdKTogRGl0dG8sIGZvcgorICAgICAgICBvYmplY3RUeXBlQ291bnRzLgorCisgICAg
ICAgICogTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbTogQWRkZWQgYW4gaW5jbHVkZSBub3cg
bmVlZGVkIGJlY2F1c2Ugb2YKKyAgICAgICAgY2hhbmdlcyB0byBIaXRUZXN0UmVzdWx0LmguCisK
KyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oOiBTdG9wIHVzaW5nIHVu
aXF1ZV9wdHIgZm9yIHRpbWVycy4KKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHN0b3BUaW1lcnNdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzdGFydFRpbWVyc10pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNjaGVkdWxlVGltZXJXaXRo
SW50ZXJ2YWw6cmVwZWF0OnRpbWVyRnVuYzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYk5ldHNj
YXBlUGx1Z2luVmlldyB1bnNjaGVkdWxlVGltZXI6XSk6IERpdHRvLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOiBVcGRhdGUgc2NoZWR1bGVk
UnVuTG9vcFBhaXJzCisgICAgICAgIHRvIHJldHVybiBhIGNvbnN0IHBvaW50ZXIuIEFsc28gbWFy
a2VkIGV2ZXJ5dGhpbmcgZmluYWwuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OnNjaGVkdWxlZFJ1bkxvb3BQYWlycyBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogV2ViVmll
dy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKGNvbW1hbmROYW1lRm9yU2VsZWN0b3IpOiBVc2UgU29ydGVkQXJy
YXlNYXAgZm9yIHRoZSBsaXN0IG9mIHNlbGVjdG9ycworICAgICAgICB3aXRoZSBzcGVjaWFsIG5h
bWVzLCByYXRoZXIgdGhhbiB1c2luZyBhIEhhc2hNYXAgb24gdGhlIGhlYXAuCisKIDIwMjEtMDUt
MjEgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21h
Y09TXSBBZG9wdCBRTEl0ZW0gaW4gV0tJbWFnZUV4dHJhY3Rpb25QcmV2aWV3Q29udHJvbGxlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGJkMGFhODBiNTAyZWNhZmM1Y2YyMjlkNTUx
ZDcwYTVhMWUzNDQ1MTEuLjk4OWVlMzNkNDkyZmViNzU0NWE3MmJjODMzMDdhMTQ0ZDRiNjBiN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0y
MSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHV0dGluZyBIYXNo
TWFwIGluIGEgaGVhcCBibG9jayBodXJ0cyBtZW1vcnkgdXNlLCBzcGVlZCwgY29kZSBzaXplCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYwNjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6IFN0b3AgdXNpbmcKKyAgICAgICAgdW5pcXVlX3B0ciBm
b3IgcHJvdGVjdGVkT2JlamN0VHlwZUNvdW50cy4KKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNz
OjpqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cyk6IERpdHRvLgorCiAyMDIxLTA1LTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgU3RvcCB1c2luZyBob2xkTG9j
aygpIGluIFdlYktpdC9XZWJLaXRMZWdhY3kvVG9vbHMgYXMgaXQgaXMgbm90IGNvbXBhdGlibGUg
d2l0aCBDbGFuZyB0aHJlYWQgc2FmZXR5IGFuYWx5c2lzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcAppbmRleCAzNzQyNTFjMmYwODlkNjRmMDg4N2M5NmQ0OWYxODdiMWQ3
MGMxOGViLi41MjFkOGM1ODUzMGMyYzQ2Mzc1NDBmNzE3Nzk3YTY3YzJjZWM4MDc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKQEAgLTU0LDIxICs1NCwxOSBAQCBP
cGFxdWVKU0NsYXNzOjpPcGFxdWVKU0NsYXNzKGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uKiBkZWZp
bml0aW9uLCBPcGFxdWVKU0NsYXNzKgogICAgIEpTQzo6aW5pdGlhbGl6ZSgpOwogCiAgICAgaWYg
KGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlID0gZGVmaW5pdGlvbi0+c3RhdGljVmFs
dWVzKSB7Ci0gICAgICAgIG1fc3RhdGljVmFsdWVzID0gbWFrZVVuaXF1ZTxPcGFxdWVKU0NsYXNz
U3RhdGljVmFsdWVzVGFibGU+KCk7CiAgICAgICAgIHdoaWxlIChzdGF0aWNWYWx1ZS0+bmFtZSkg
ewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoc3RhdGlj
VmFsdWUtPm5hbWUpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZU5hbWUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgbV9zdGF0aWNWYWx1ZXMtPnNldCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtlVW5p
cXVlPFN0YXRpY1ZhbHVlRW50cnk+KHN0YXRpY1ZhbHVlLT5nZXRQcm9wZXJ0eSwgc3RhdGljVmFs
dWUtPnNldFByb3BlcnR5LCBzdGF0aWNWYWx1ZS0+YXR0cmlidXRlcywgdmFsdWVOYW1lKSk7Cisg
ICAgICAgICAgICAgICAgbV9zdGF0aWNWYWx1ZXMuYWRkKHZhbHVlTmFtZS5pbXBsKCksIG1ha2VV
bmlxdWU8U3RhdGljVmFsdWVFbnRyeT4oc3RhdGljVmFsdWUtPmdldFByb3BlcnR5LCBzdGF0aWNW
YWx1ZS0+c2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLT5hdHRyaWJ1dGVzLCB2YWx1ZU5hbWUpKTsK
ICAgICAgICAgICAgICsrc3RhdGljVmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAo
Y29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb24gPSBkZWZpbml0aW9uLT5zdGF0
aWNGdW5jdGlvbnMpIHsKLSAgICAgICAgbV9zdGF0aWNGdW5jdGlvbnMgPSBtYWtlVW5pcXVlPE9w
YXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZT4oKTsKICAgICAgICAgd2hpbGUgKHN0YXRp
Y0Z1bmN0aW9uLT5uYW1lKSB7CiAgICAgICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gU3Ry
aW5nOjpmcm9tVVRGOChzdGF0aWNGdW5jdGlvbi0+bmFtZSk7CiAgICAgICAgICAgICBpZiAoIWZ1
bmN0aW9uTmFtZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRpY0Z1bmN0aW9ucy0+
c2V0KGZ1bmN0aW9uTmFtZS5pbXBsKCksIG1ha2VVbmlxdWU8U3RhdGljRnVuY3Rpb25FbnRyeT4o
c3RhdGljRnVuY3Rpb24tPmNhbGxBc0Z1bmN0aW9uLCBzdGF0aWNGdW5jdGlvbi0+YXR0cmlidXRl
cykpOworICAgICAgICAgICAgICAgIG1fc3RhdGljRnVuY3Rpb25zLmFkZChmdW5jdGlvbk5hbWUu
aW1wbCgpLCBtYWtlVW5pcXVlPFN0YXRpY0Z1bmN0aW9uRW50cnk+KHN0YXRpY0Z1bmN0aW9uLT5j
YWxsQXNGdW5jdGlvbiwgc3RhdGljRnVuY3Rpb24tPmF0dHJpYnV0ZXMpKTsKICAgICAgICAgICAg
ICsrc3RhdGljRnVuY3Rpb247CiAgICAgICAgIH0KICAgICB9CkBAIC04MiwxOCArODAsMTEgQEAg
T3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MoKQogICAgIC8vIFRoZSBlbXB0eSBzdHJpbmcg
aXMgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgaXMgYW4gaWRlbnRpZmllciwgaW4gYWxsIG90aGVy
IGNhc2VzIHdlIHNob3VsZCBoYXZlIGRvbmUgYSBkZWVwIGNvcHkgaW4gY2xhc3NOYW1lKCksIGJl
bG93LiAKICAgICBBU1NFUlQoIW1fY2xhc3NOYW1lLmxlbmd0aCgpIHx8ICFtX2NsYXNzTmFtZS5p
bXBsKCktPmlzQXRvbSgpKTsKIAotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAobV9zdGF0aWNWYWx1
ZXMpIHsKLSAgICAgICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3N0YXRpY1ZhbHVlcy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoT3BhcXVlSlND
bGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGljVmFsdWVz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXkt
PmlzQXRvbSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdGF0aWNGdW5jdGlvbnMpIHsKLSAgICAg
ICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0
YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGljRnVuY3Rpb25z
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBBU1NFUlQoIWl0LT5rZXkt
PmlzQXRvbSgpKTsKLSAgICB9CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBmb3IgKGF1dG8mIGtl
eSA6IG1fc3RhdGljVmFsdWVzLmtleXMoKSkKKyAgICAgICAgQVNTRVJUKCFrZXktPmlzQXRvbSgp
KTsKKyAgICBmb3IgKGF1dG8mIGtleSA6IG1fc3RhdGljRnVuY3Rpb25zLmtleXMoKSkKKyAgICAg
ICAgQVNTRVJUKCFrZXktPmlzQXRvbSgpKTsKICNlbmRpZgogICAgIAogICAgIGlmIChwcm90b3R5
cGVDbGFzcykKQEAgLTEyMiwyMyArMTEzLDE0IEBAIFJlZjxPcGFxdWVKU0NsYXNzPiBPcGFxdWVK
U0NsYXNzOjpjcmVhdGUoY29uc3QgSlNDbGFzc0RlZmluaXRpb24qIGNsaWVudERlZmluaXRpCiBP
cGFxdWVKU0NsYXNzQ29udGV4dERhdGE6Ok9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShKU0M6OlZN
JiwgT3BhcXVlSlNDbGFzcyoganNDbGFzcykKICAgICA6IG1fY2xhc3MoanNDbGFzcykKIHsKLSAg
ICBpZiAoanNDbGFzcy0+bV9zdGF0aWNWYWx1ZXMpIHsKLSAgICAgICAgc3RhdGljVmFsdWVzID0g
bWFrZVVuaXF1ZTxPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU+KCk7Ci0gICAgICAgIE9w
YXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0ganNDbGFz
cy0+bV9zdGF0aWNWYWx1ZXMtPmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0
aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVl
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0LT5r
ZXktPmlzQXRvbSgpKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZU5hbWUgPSBpdC0+a2V5LT5p
c29sYXRlZENvcHkoKTsKLSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKHZhbHVlTmFtZS5p
bXBsKCksIG1ha2VVbmlxdWU8U3RhdGljVmFsdWVFbnRyeT4oaXQtPnZhbHVlLT5nZXRQcm9wZXJ0
eSwgaXQtPnZhbHVlLT5zZXRQcm9wZXJ0eSwgaXQtPnZhbHVlLT5hdHRyaWJ1dGVzLCB2YWx1ZU5h
bWUpKTsKLSAgICAgICAgfQorICAgIGZvciAoYXV0byYgc3RhdGljVmFsdWUgOiBqc0NsYXNzLT5t
X3N0YXRpY1ZhbHVlcykgeworICAgICAgICBBU1NFUlQoIXN0YXRpY1ZhbHVlLmtleS0+aXNBdG9t
KCkpOworICAgICAgICBTdHJpbmcgdmFsdWVOYW1lID0gc3RhdGljVmFsdWUua2V5LT5pc29sYXRl
ZENvcHkoKTsKKyAgICAgICAgc3RhdGljVmFsdWVzLnNldCh2YWx1ZU5hbWUuaW1wbCgpLCBtYWtl
VW5pcXVlPFN0YXRpY1ZhbHVlRW50cnk+KHN0YXRpY1ZhbHVlLnZhbHVlLT5nZXRQcm9wZXJ0eSwg
c3RhdGljVmFsdWUudmFsdWUtPnNldFByb3BlcnR5LCBzdGF0aWNWYWx1ZS52YWx1ZS0+YXR0cmli
dXRlcywgdmFsdWVOYW1lKSk7CiAgICAgfQotCi0gICAgaWYgKGpzQ2xhc3MtPm1fc3RhdGljRnVu
Y3Rpb25zKSB7Ci0gICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IG1ha2VVbmlxdWU8T3BhcXVlSlND
bGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlPigpOwotICAgICAgICBPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGpzQ2xhc3MtPm1fc3RhdGljRnVu
Y3Rpb25zLT5lbmQoKTsKLSAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25z
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0ganNDbGFzcy0+bV9zdGF0aWNGdW5jdGlvbnMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUKCFpdC0+a2V5LT5p
c0F0b20oKSk7Ci0gICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChpdC0+a2V5LT5pc29s
YXRlZENvcHkoKSwgbWFrZVVuaXF1ZTxTdGF0aWNGdW5jdGlvbkVudHJ5PihpdC0+dmFsdWUtPmNh
bGxBc0Z1bmN0aW9uLCBpdC0+dmFsdWUtPmF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQorICAgIGZv
ciAoYXV0byYgc3RhdGljRnVuY3Rpb24gOiBqc0NsYXNzLT5tX3N0YXRpY0Z1bmN0aW9ucykgewor
ICAgICAgICBBU1NFUlQoIXN0YXRpY0Z1bmN0aW9uLmtleS0+aXNBdG9tKCkpOworICAgICAgICBz
dGF0aWNGdW5jdGlvbnMuc2V0KHN0YXRpY0Z1bmN0aW9uLmtleS0+aXNvbGF0ZWRDb3B5KCksIG1h
a2VVbmlxdWU8U3RhdGljRnVuY3Rpb25FbnRyeT4oc3RhdGljRnVuY3Rpb24udmFsdWUtPmNhbGxB
c0Z1bmN0aW9uLCBzdGF0aWNGdW5jdGlvbi52YWx1ZS0+YXR0cmlidXRlcykpOwogICAgIH0KIH0K
IApAQCAtMTU4LDEyICsxNDAsMTIgQEAgU3RyaW5nIE9wYXF1ZUpTQ2xhc3M6OmNsYXNzTmFtZSgp
CiAKIE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSogT3BhcXVlSlNDbGFzczo6c3RhdGlj
VmFsdWVzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICByZXR1cm4g
Y29udGV4dERhdGEoZ2xvYmFsT2JqZWN0KS5zdGF0aWNWYWx1ZXMuZ2V0KCk7CisgICAgcmV0dXJu
ICZjb250ZXh0RGF0YShnbG9iYWxPYmplY3QpLnN0YXRpY1ZhbHVlczsKIH0KIAogT3BhcXVlSlND
bGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBPcGFxdWVKU0NsYXNzOjpzdGF0aWNGdW5jdGlvbnMo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHJldHVybiBjb250ZXh0
RGF0YShnbG9iYWxPYmplY3QpLnN0YXRpY0Z1bmN0aW9ucy5nZXQoKTsKKyAgICByZXR1cm4gJmNv
bnRleHREYXRhKGdsb2JhbE9iamVjdCkuc3RhdGljRnVuY3Rpb25zOwogfQogCiBKU09iamVjdCog
T3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCmluZGV4IGFhOWI1ZGY2MWMwYjNjODkx
ZTg3M2U3NDU1NzIwYjc4OWRjYzMwMDguLmZlZDRiYTE5ODU0NjVjN2FiNDE5NjM1ZDY0YTcxZDhk
NTliZjllNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCkBAIC04Miw4
ICs4Miw4IEBAIHB1YmxpYzoKICAgICAvLyA0LiBXaGVuIGl0IGlzIHVzZWQsIHRoZSBvbGQgY29u
dGV4dCBkYXRhIGlzIGZvdW5kIGluIFZNIGFuZCB1c2VkLgogICAgIFJlZlB0cjxPcGFxdWVKU0Ns
YXNzPiBtX2NsYXNzOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNW
YWx1ZXNUYWJsZT4gc3RhdGljVmFsdWVzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVKU0Ns
YXNzU3RhdGljRnVuY3Rpb25zVGFibGU+IHN0YXRpY0Z1bmN0aW9uczsKKyAgICBPcGFxdWVKU0Ns
YXNzU3RhdGljVmFsdWVzVGFibGUgc3RhdGljVmFsdWVzOworICAgIE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZSBzdGF0aWNGdW5jdGlvbnM7CiAgICAgSlNDOjpXZWFrPEpTQzo6SlNP
YmplY3Q+IGNhY2hlZFByb3RvdHlwZTsKIH07CiAKQEAgLTEyMyw4ICsxMjMsOCBAQCBwcml2YXRl
OgogCiAgICAgLy8gU3RyaW5ncyBpbiB0aGVzZSBkYXRhIG1lbWJlcnMgc2hvdWxkIG5vdCBiZSBw
dXQgaW50byBhbnkgQXRvbVN0cmluZ1RhYmxlLgogICAgIFN0cmluZyBtX2NsYXNzTmFtZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlPiBtX3N0YXRp
Y1ZhbHVlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9u
c1RhYmxlPiBtX3N0YXRpY0Z1bmN0aW9uczsKKyAgICBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVz
VGFibGUgbV9zdGF0aWNWYWx1ZXM7CisgICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1Rh
YmxlIG1fc3RhdGljRnVuY3Rpb25zOwogfTsKIAogI2VuZGlmIC8vIEpTQ2xhc3NSZWZfaApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCmluZGV4IDE1MzM3
MWVmNzkyMjkyY2ZjZTUzMzM5ODNlNTk3YWZkYzVjOGZkZTkuLmMyZGVhZTQzY2IyNDRiYzc1MDdh
ODdjYjc3ZWRlMWM1OTE3Yzg1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcC5jcHAKQEAgLTE1NCwxMCArMTU0LDcgQEAgY29uc3QgQWJzdHJhY3RIZWFw
JiBJbmRleGVkQWJzdHJhY3RIZWFwOjphdFNsb3cocHRyZGlmZl90IGluZGV4KQogewogICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA+PSBtX3NtYWxsSW5kaWNlcy5zaXplKCkp
OwogICAgIAotICAgIGlmIChVTkxJS0VMWSghbV9sYXJnZUluZGljZXMpKQotICAgICAgICBtX2xh
cmdlSW5kaWNlcyA9IG1ha2VVbmlxdWU8TWFwVHlwZT4oKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBYnN0cmFjdEhlYXA+JiBmaWVsZCA9IG1fbGFyZ2VJbmRpY2VzLT5hZGQoaW5kZXgsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWJzdHJhY3RIZWFwPiYg
ZmllbGQgPSBtX2xhcmdlSW5kaWNlcy5hZGQoaW5kZXgsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIWZpZWxkKSB7CiAgICAgICAgIGZpZWxkID0gbWFrZVVuaXF1ZTxBYnN0cmFj
dEhlYXA+KCk7CiAgICAgICAgIGluaXRpYWxpemUoKmZpZWxkLCBpbmRleCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAppbmRleCA2NThlMmNmYzVlY2U4MjM0
OTc2YjYzNGRlOGUzN2YyMGQ2ZjBmYzg5Li44NzdlZGYyNmE4YmRkNTdhMmQwOTQ5MzdiYjE3MTNm
ZWEyYTFiZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
LmgKQEAgLTE2MCw3ICsxNjAsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBIYXNo
TWFwPHB0cmRpZmZfdCwgc3RkOjp1bmlxdWVfcHRyPEFic3RyYWN0SGVhcD4sIFdURjo6SW50SGFz
aDxwdHJkaWZmX3Q+LCBXaXRob3V0WmVyb09yT25lSGFzaFRyYWl0cz4gTWFwVHlwZTsKICAgICAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFwVHlwZT4gbV9sYXJnZUluZGljZXM7CisgICAgTWFwVHlw
ZSBtX2xhcmdlSW5kaWNlczsKICAgICBWZWN0b3I8Q1N0cmluZywgMTY+IG1fbGFyZ2VJbmRleE5h
bWVzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCA2MWQyYjJkMmIx
MDFjMzgyMjU5ZDY5OGRiZTJmNzVjMTZjMzE5MWYzLi42MWQ5NDM5OGFiYTFhMDJhYzliZWMxMmUy
MDE5YjVjOWUxNzgwOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtODgw
LDI1ICs4ODAsMjUgQEAgc2l6ZV90IEhlYXA6OnByb3RlY3RlZE9iamVjdENvdW50KCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBIZWFwOjpw
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkKK1R5cGVDb3VudFNldCBIZWFwOjpwcm90ZWN0ZWRP
YmplY3RUeXBlQ291bnRzKCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBy
ZXN1bHQgPSBtYWtlVW5pcXVlPFR5cGVDb3VudFNldD4oKTsKKyAgICBUeXBlQ291bnRTZXQgcmVz
dWx0OwogICAgIGZvckVhY2hQcm90ZWN0ZWRDZWxsKAogICAgICAgICBbJl0gKEpTQ2VsbCogY2Vs
bCkgewotICAgICAgICAgICAgcmVjb3JkVHlwZSh2bSgpLCAqcmVzdWx0LCBjZWxsKTsKKyAgICAg
ICAgICAgIHJlY29yZFR5cGUodm0oKSwgcmVzdWx0LCBjZWxsKTsKICAgICAgICAgfSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gSGVhcDo6
b2JqZWN0VHlwZUNvdW50cygpCitUeXBlQ291bnRTZXQgSGVhcDo6b2JqZWN0VHlwZUNvdW50cygp
CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcmVzdWx0ID0gbWFrZVVuaXF1
ZTxUeXBlQ291bnRTZXQ+KCk7CisgICAgVHlwZUNvdW50U2V0IHJlc3VsdDsKICAgICBIZWFwSXRl
cmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKnRoaXMpOwogICAgIG1fb2JqZWN0U3BhY2UuZm9y
RWFjaExpdmVDZWxsKAogICAgICAgICBpdGVyYXRpb25TY29wZSwKICAgICAgICAgWyZdIChIZWFw
Q2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQga2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAg
ICAgICAgICAgIGlmIChpc0pTQ2VsbEtpbmQoa2luZCkpCi0gICAgICAgICAgICAgICAgcmVjb3Jk
VHlwZSh2bSgpLCAqcmVzdWx0LCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgICAg
ICAgICAgICAgcmVjb3JkVHlwZSh2bSgpLCByZXN1bHQsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNl
bGwpKTsKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAg
ICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjgxMCw5ICsyODEwLDkgQEAgdm9pZCBI
ZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKQogICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKHBhaXIua2V5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKSB7
CisgICAgICAgICAgICBpZiAoIW1fbWFya0xpc3RTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgU2V0Um9vdE1hcmtSZWFzb25TY29wZSByb290U2NvcGUodmlzaXRvciwgUm9vdE1hcmtS
ZWFzb246OkNvbnNlcnZhdGl2ZVNjYW4pOwotICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAg
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgbV9tYXJrTGlzdFNl
dCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAppbmRleCA5M2FhMjhiZGI3MGY2ODhiYzk1NGZlM2ZjYTczN2M0MjcyNDMzNjNmLi44Mjkw
MTI0ZTFhMjhjNzFhMjA3OWUzYWE4ZjRhNzlhMWExOTVkNzlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCkBAIC0yNDIsMTAgKzI0MiwxMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc2l6ZV90IGdsb2JhbE9iamVjdENvdW50KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IHByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gcHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IG9i
amVjdFR5cGVDb3VudHMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlQ291bnRTZXQgcHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5cGVDb3Vu
dFNldCBvYmplY3RUeXBlQ291bnRzKCk7CiAKLSAgICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVm
ZmVyKj4mIG1hcmtMaXN0U2V0KCk7CisgICAgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+
JiBtYXJrTGlzdFNldCgpIHsgcmV0dXJuIG1fbWFya0xpc3RTZXQ7IH0KICAgICB2b2lkIGFkZE1h
cmtlZEpTVmFsdWVSZWZBcnJheShNYXJrZWRKU1ZhbHVlUmVmQXJyYXkqKTsKICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hQcm90ZWN0ZWRDZWxsKGNvbnN0
IEZ1bmN0b3ImKTsKQEAgLTYzMSw3ICs2MzEsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8Y29u
c3QgSlNDZWxsKj4gbV9jb3B5aW5nUmVtZW1iZXJlZFNldDsKIAogICAgIFByb3RlY3RDb3VudFNl
dCBtX3Byb3RlY3RlZFZhbHVlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxNYXJrZWRB
cmd1bWVudEJ1ZmZlcio+PiBtX21hcmtMaXN0U2V0OworICAgIEhhc2hTZXQ8TWFya2VkQXJndW1l
bnRCdWZmZXIqPiBtX21hcmtMaXN0U2V0OwogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxNYXJrZWRK
U1ZhbHVlUmVmQXJyYXksIEJhc2ljUmF3U2VudGluZWxOb2RlPE1hcmtlZEpTVmFsdWVSZWZBcnJh
eT4+IG1fbWFya2VkSlNWYWx1ZVJlZkFycmF5czsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxNYWNo
aW5lVGhyZWFkcz4gbV9tYWNoaW5lVGhyZWFkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCmluZGV4IDRkM2E5OGIyNmE4NzA4MDcwODI3ODhhOWE5ZDIxOWRiMDI1NmU4
M2IuLjEyZjFjNTY5ZTEzMmEwMGU0YWY4YzViNzUyMDRlZDE2MGMxNzliYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaApAQCAtMjE2LDEzICsyMTYsNiBAQCBpbmxp
bmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCiAgICAg
fQogfQogCi1pbmxpbmUgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1ZmZlcio+JiBIZWFwOjptYXJr
TGlzdFNldCgpCi17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0KQotICAgICAgICBtX21hcmtMaXN0
U2V0ID0gbWFrZVVuaXF1ZTxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4+KCk7Ci0gICAg
cmV0dXJuICptX21hcmtMaXN0U2V0OwotfQotCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA+IG1pbkV4dHJh
TWVtb3J5KSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGls
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCmluZGV4IGQ2YWFjM2U0
MGI5MGZhNjdmYzA2NTMyY2VlYjBmYmQ2YjYzYTA4ZmIuLmUwM2Y4ODNjYWRmOTMxNDgwYzExZDI0
OWMzMGY5ZDBjZWNiYzk0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBVdGlsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaApA
QCAtMTQwLDggKzE0MCw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHBvaW50ZXItPmlzUHJlY2lz
ZUFsbG9jYXRpb24oKSkgewogICAgICAgICAgICAgYXV0byogc2V0ID0gaGVhcC5vYmplY3RTcGFj
ZSgpLnByZWNpc2VBbGxvY2F0aW9uU2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQoc2V0KTsKLSAg
ICAgICAgICAgIGlmIChzZXQtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICByZXR1cm4gc2V0LT5jb250YWlucyhwb2ludGVyKTsKICAgICAgICAg
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCmluZGV4
IGM4MjNkOWU5NGRiNmYyNTAyN2UyZjJiNmJjZGQzODEzNTEzZjdmMDMuLjdlYzYxYzA3NzhjNjQz
YTA1MjZkNDk1N2I3Yjk3Yjg4ZTc0MjUyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpw
cmVwYXJlRm9yQWxsb2NhdGlvbigpCiAKIHZvaWQgTWFya2VkU3BhY2U6OmVuYWJsZVByZWNpc2VB
bGxvY2F0aW9uVHJhY2tpbmcoKQogewotICAgIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQgPSBtYWtl
VW5pcXVlPEhhc2hTZXQ8SGVhcENlbGwqPj4oKTsKKyAgICBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0
ID0gSGFzaFNldDxIZWFwQ2VsbCo+IHsgfTsKICAgICBmb3IgKGF1dG8qIGFsbG9jYXRpb24gOiBt
X3ByZWNpc2VBbGxvY2F0aW9ucykKICAgICAgICAgbV9wcmVjaXNlQWxsb2NhdGlvblNldC0+YWRk
KGFsbG9jYXRpb24tPmNlbGwoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAppbmRleCA1YmU1MWRlN2U0Y2Y5OWIzZDZmNDc3NzdmMDBiNmQyYTk3YWI4MDRmLi5m
ZTE1YzNmNWQ5ZTczZTczODc2ZWZkNWQyMTA1ZGJhNTIzMjgyNGEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVmVjdG9yPFByZWNpc2VBbGxvY2F0aW9uKj4mIHByZWNpc2VBbGxvY2F0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25zOyB9CiAgICAgdW5zaWduZWQgcHJl
Y2lzZUFsbG9jYXRpb25zTnVyc2VyeU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlY2lzZUFs
bG9jYXRpb25zTnVyc2VyeU9mZnNldDsgfQogICAgIHVuc2lnbmVkIHByZWNpc2VBbGxvY2F0aW9u
c09mZnNldEZvclRoaXNDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNlQWxsb2Nh
dGlvbnNPZmZzZXRGb3JUaGlzQ29sbGVjdGlvbjsgfQotICAgIEhhc2hTZXQ8SGVhcENlbGwqPiog
cHJlY2lzZUFsbG9jYXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX3ByZWNpc2VBbGxvY2F0aW9u
U2V0LmdldCgpOyB9CisgICAgSGFzaFNldDxIZWFwQ2VsbCo+KiBwcmVjaXNlQWxsb2NhdGlvblNl
dCgpIHsgcmV0dXJuIG1fcHJlY2lzZUFsbG9jYXRpb25TZXQgPyAmKm1fcHJlY2lzZUFsbG9jYXRp
b25TZXQgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIGVuYWJsZVByZWNpc2VBbGxvY2F0aW9uVHJh
Y2tpbmcoKTsKICAgICAKQEAgLTIwMCw3ICsyMDAsNyBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9y
PFN1YnNwYWNlKj4gbV9zdWJzcGFjZXM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxI
ZWFwQ2VsbCo+PiBtX3ByZWNpc2VBbGxvY2F0aW9uU2V0OworICAgIE9wdGlvbmFsPEhhc2hTZXQ8
SGVhcENlbGwqPj4gbV9wcmVjaXNlQWxsb2NhdGlvblNldDsKICAgICBWZWN0b3I8UHJlY2lzZUFs
bG9jYXRpb24qPiBtX3ByZWNpc2VBbGxvY2F0aW9uczsKICAgICB1bnNpZ25lZCBtX3ByZWNpc2VB
bGxvY2F0aW9uc051cnNlcnlPZmZzZXQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9wcmVjaXNlQWxs
b2NhdGlvbnNPZmZzZXRGb3JUaGlzQ29sbGVjdGlvbiB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmNwcAppbmRleCAxYjJmNGY1MmFiN2Jm
Y2UzNDBiM2MzOTUyOWUxODA1NzJjZDE2NDQzLi45NTc2MWMxMzI3OGEwNGUwYTJkZjlhMzQzYWIy
OGQ5NjkyMTRkY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
dmFsRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZh
bEV4ZWN1dGFibGUuY3BwCkBAIC00NSwxMSArNDUsNiBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNl
bGwpLT5FdmFsRXhlY3V0YWJsZTo6fkV2YWxFeGVjdXRhYmxlKCk7CiB9CiAKLWF1dG8gRXZhbEV4
ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKFZNJikgLT4gVGVtcGxhdGVPYmplY3RN
YXAmCi17Ci0gICAgcmV0dXJuIGVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwSW1wbChtX3RlbXBsYXRl
T2JqZWN0TWFwKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgRXZhbEV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRv
cikKIHsKQEAgLTU4LDEwICs1MywxMCBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3VubGlua2VkRXZhbENvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09i
amVjdC0+bV9ldmFsQ29kZUJsb2NrKTsKLSAgICBpZiAoVGVtcGxhdGVPYmplY3RNYXAqIG1hcCA9
IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAuZ2V0KCkpIHsKKyAgICBpZiAoIXRoaXNP
YmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgIExvY2tlciBs
b2NrZXIgeyB0aGlzT2JqZWN0LT5jZWxsTG9jaygpIH07Ci0gICAgICAgIGZvciAoYXV0byYgZW50
cnkgOiAqbWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkudmFsdWUpOworICAg
ICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVjdE1hcC52
YWx1ZXMoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCmluZGV4
IDA2OTU4NmYyMTRlNDMzNjNkMjQ3MmI0MzMzMDVhNGExZDhiMGQ1ZTUuLjNmM2FhZTBjNTZhZTY0
Y2Q4MzM4NzNkZjQ5ODgwMDFhOWZjMTQxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhbGxvd0RpcmVjdEV2YWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFdmFs
Q29kZUJsb2NrLT5hbGxvd0RpcmVjdEV2YWxDYWNoZSgpOyB9CiAgICAgTmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcj4obV9uZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplcik7IH0KICAgICBQcml2YXRlQnJhbmRSZXF1aXJlbWVudCBwcml2YXRlQnJhbmRS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByaXZhdGVCcmFuZFJlcXVp
cmVtZW50PihtX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50KTsgfQotICAgIFRlbXBsYXRlT2JqZWN0
TWFwJiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpOworICAgIFRlbXBsYXRlT2JqZWN0TWFw
JiB0ZW1wbGF0ZU9iamVjdE1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVPYmplY3RNYXA7IH0KIAog
cHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKQEAgLTg0LDcgKzg0
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2U+IG1fZXZhbENvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRFdmFsQ29k
ZUJsb2NrPiBtX3VubGlua2VkRXZhbENvZGVCbG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVt
cGxhdGVPYmplY3RNYXA+IG1fdGVtcGxhdGVPYmplY3RNYXA7CisgICAgVGVtcGxhdGVPYmplY3RN
YXAgbV90ZW1wbGF0ZU9iamVjdE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAK
aW5kZXggMTg2ZmIyNGZhYmEwYzQ2Y2ViZTAyN2VhNTZjMDcyYTc1YzljYWNiOC4uZDI1NjcxZTRh
YzkxZTU5M2M1Yzc0NTY3YmEwYWYzZjY1NzI1Yjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC03OSwxMCArNzks
MTAgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCog
Y2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5t
X3VubGlua2VkRXhlY3V0YWJsZSk7CiAgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXNP
YmplY3QtPm1fcmFyZURhdGEuZ2V0KCkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmQocmFyZURh
dGEtPm1fY2FjaGVkUG9seVByb3RvU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFRlbXBsYXRlT2Jq
ZWN0TWFwKiBtYXAgPSByYXJlRGF0YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC5nZXQoKSkgeworICAg
ICAgICBpZiAoIXJhcmVEYXRhLT5tX3RlbXBsYXRlT2JqZWN0TWFwLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHRoaXNPYmplY3QtPmNlbGxMb2NrKCkgfTsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqbWFwKQotICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiByYXJl
RGF0YS0+bV90ZW1wbGF0ZU9iamVjdE1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMjcsMTAgKzEyNyw5
IEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpvdmVycmlkZUluZm8oY29uc3QgRnVuY3Rpb25P
dmVycmlkZUluZm8mIG92ZXJyaWRlSW5mbykKICAgICByYXJlRGF0YS5tX3R5cGVQcm9maWxpbmdF
bmRPZmZzZXQgPSBvdmVycmlkZUluZm8udHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKIH0KIAotYXV0
byBGdW5jdGlvbkV4ZWN1dGFibGU6OmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKFZNJikgLT4gVGVt
cGxhdGVPYmplY3RNYXAmCithdXRvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dGVtcGxhdGVPYmplY3RN
YXAoKSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKIHsKLSAgICBSYXJlRGF0YSYgcmFyZURhdGEgPSBl
bnN1cmVSYXJlRGF0YSgpOwotICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwo
cmFyZURhdGEubV90ZW1wbGF0ZU9iamVjdE1hcCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCkubV90ZW1wbGF0ZU9iamVjdE1hcDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4
IGJhZGNiNzg1MGZiNmY5MzY1NTZjZTQ5YzI2MTYwMmM1OTU5ZDRmZGEuLmYyNjQ1YTE0NWMxNzhl
NzQyOGQ4MGRmZTNlNDE0OGQ1ZjFkYTMyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCkBAIC0yODEsNyArMjgxLDcgQEAgcHVi
bGljOgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV90b3BMZXZlbEV4ZWN1dGFibGUuZ2V0KCk7IH0KIAotICAgIFRlbXBsYXRlT2Jq
ZWN0TWFwJiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpOworICAgIFRlbXBsYXRlT2JqZWN0
TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCgpOwogCiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShWTSYpOwogCkBAIC0zMDIsNyArMzAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWdu
ZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgeyAwIH07CiAgICAgICAgIHVuc2lnbmVkIG1fdHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV90
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0IHsgVUlOVF9NQVggfTsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFRlbXBsYXRlT2JqZWN0TWFwPiBtX3RlbXBsYXRlT2JqZWN0TWFwOworICAgICAgICBUZW1w
bGF0ZU9iamVjdE1hcCBtX3RlbXBsYXRlT2JqZWN0TWFwOwogICAgICAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2NhY2hlZFBvbHlQcm90b1N0cnVjdHVyZTsKICAgICB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZS5jcHAKaW5kZXggZGVmMDczYzA1MGIwZGVjODAzNTMyMDM1NGVlMmNjMDZjNmY0YzQ3OC4u
NmRmMGMxYWVjZGRmNzIzOWY3NGE0NWFiYTRiNDNjM2NmMGQxNzAwNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxl
LmNwcApAQCAtNzQsMTEgKzc0LDYgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqPihjZWxsKS0+TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6On5Nb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSgpOwogfQogCi1hdXRvIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjplbnN1cmVUZW1wbGF0
ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgotewotICAgIHJldHVybiBlbnN1
cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1hcCk7Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CkBAIC04OCwx
MCArODMsMTAgQEAgdm9pZCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbklt
cGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayk7Ci0g
ICAgaWYgKFRlbXBsYXRlT2JqZWN0TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2Jq
ZWN0TWFwLmdldCgpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5tX3RlbXBsYXRlT2JqZWN0TWFw
LmlzRW1wdHkoKSkgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgdGhpc09iamVjdC0+Y2VsbExv
Y2soKSB9OwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1hcCkKLSAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKGVudHJ5LnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHRo
aXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAudmFsdWVzKCkpCisgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCh2YWx1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAppbmRleCA5NjM0Nzkw
NDQwNmZlZjJkOWMzZGY1ZTcwMDVhOGI0MWM4NzE5M2M3Li5lMjllODlhYzA0NDU3MDMyMDJmOWQx
NGYzZTM3ZTZhNDQ0Yzg3MDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVi
bGljOgogCiAgICAgU3ltYm9sVGFibGUqIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKSB7
IHJldHVybiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuZ2V0KCk7IH0KIAotICAgIFRl
bXBsYXRlT2JqZWN0TWFwJiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpOworICAgIFRlbXBs
YXRlT2JqZWN0TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVPYmpl
Y3RNYXA7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkBA
IC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiAgICAg
V3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGU7
CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U+IG1fbW9kdWxlUHJv
Z3JhbUNvZGVCbG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVtcGxhdGVPYmplY3RNYXA+IG1f
dGVtcGxhdGVPYmplY3RNYXA7CisgICAgVGVtcGxhdGVPYmplY3RNYXAgbV90ZW1wbGF0ZU9iamVj
dE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuY3BwCmluZGV4IGVhYmZhODVhY2EzN2Vm
MGFhN2M3ZGY4OTVlYWU0MTczOWQxNTQ5MGUuLjZkN2Y2ZTVjYWRkZjgxYzlkMzIyYTg1ZDRmNzIx
NWRlNDhlNDM3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b2dyYW1FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9ncmFtRXhlY3V0YWJsZS5jcHAKQEAgLTIwNSwxMSArMjA1LDYgQEAgSlNPYmplY3QqIFByb2dy
YW1FeGVjdXRhYmxlOjppbml0aWFsaXplR2xvYmFsUHJvcGVydGllcyhWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1hdXRvIFByb2dyYW1FeGVjdXRhYmxl
OjplbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgotewot
ICAgIHJldHVybiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcEltcGwobV90ZW1wbGF0ZU9iamVjdE1h
cCk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7
CkBAIC0yMTgsMTAgKzIxMywxMCBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBpZiAoVGVtcGxhdGVPYmplY3RNYXAq
IG1hcCA9IHRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAuZ2V0KCkpIHsKKyAgICBpZiAo
IXRoaXNPYmplY3QtPm1fdGVtcGxhdGVPYmplY3RNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgIExv
Y2tlciBsb2NrZXIgeyB0aGlzT2JqZWN0LT5jZWxsTG9jaygpIH07Ci0gICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiAqbWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoZW50cnkudmFsdWUp
OworICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdGhpc09iamVjdC0+bV90ZW1wbGF0ZU9iamVj
dE1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHZhbHVlKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1F
eGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0
YWJsZS5oCmluZGV4IDdmNWExMTMzYjNmMzE1NWJiNjU5ZmRkNDhjYzdjMzUyNWU1ZGMzYmQuLmI0
NjM1YjJlYTRjZDdhMDkyNmNiNzAwNmRkMTIzZDk3MTkyZDRkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaApAQCAtNzEsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIFRlbXBsYXRl
T2JqZWN0TWFwJiBlbnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpOworICAgIFRlbXBsYXRlT2Jq
ZWN0TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVPYmplY3RNYXA7
IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkBAIC04Myw3
ICs4Myw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8RXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZT4gbV9wcm9ncmFtQ29kZUJsb2NrOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZW1wbGF0ZU9iamVjdE1hcD4gbV90ZW1wbGF0ZU9iamVjdE1hcDsKKyAgICBUZW1w
bGF0ZU9iamVjdE1hcCBtX3RlbXBsYXRlT2JqZWN0TWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVj
dXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCmluZGV4IDI3MDY1NWU5YzMxMDllMTJkYzUzZjM4MmJjMzRjMjQ4OGJhMjNjYjEuLmVm
MTgzZGEyZDA2MzBlOWRlMDUyODZhNjExNDk5MzA1ZTU4ZTk3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCkBAIC00NTIsNyAr
NDUyLDcgQEAgSlNBcnJheSogU2NyaXB0RXhlY3V0YWJsZTo6Y3JlYXRlVGVtcGxhdGVPYmplY3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgVGVtcGxhdGVPYmplY3RNYXAmIHRlbXBsYXRlT2JqZWN0TWFwID0gZW5zdXJlVGVtcGxhdGVP
YmplY3RNYXAodm0pOworICAgIFRlbXBsYXRlT2JqZWN0TWFwJiB0ZW1wbGF0ZU9iamVjdE1hcCA9
IHRoaXMtPnRlbXBsYXRlT2JqZWN0TWFwKCk7CiAgICAgVGVtcGxhdGVPYmplY3RNYXA6OkFkZFJl
c3VsdCByZXN1bHQ7CiAgICAgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgY2VsbExvY2soKSB9
OwpAQCAtNDY2LDI5ICs0NjYsMTkgQEAgSlNBcnJheSogU2NyaXB0RXhlY3V0YWJsZTo6Y3JlYXRl
VGVtcGxhdGVPYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICByZXR1
cm4gdGVtcGxhdGVPYmplY3Q7CiB9CiAKLWF1dG8gU2NyaXB0RXhlY3V0YWJsZTo6ZW5zdXJlVGVt
cGxhdGVPYmplY3RNYXBJbXBsKHN0ZDo6dW5pcXVlX3B0cjxUZW1wbGF0ZU9iamVjdE1hcD4mIGRl
c3QpIC0+IFRlbXBsYXRlT2JqZWN0TWFwJgotewotICAgIGlmIChkZXN0KQotICAgICAgICByZXR1
cm4gKmRlc3Q7Ci0gICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPFRlbXBsYXRlT2JqZWN0TWFw
PigpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgZGVzdCA9IFdURk1vdmUocmVz
dWx0KTsKLSAgICByZXR1cm4gKmRlc3Q7Ci19Ci0KLWF1dG8gU2NyaXB0RXhlY3V0YWJsZTo6ZW5z
dXJlVGVtcGxhdGVPYmplY3RNYXAoVk0mIHZtKSAtPiBUZW1wbGF0ZU9iamVjdE1hcCYKK2F1dG8g
U2NyaXB0RXhlY3V0YWJsZTo6dGVtcGxhdGVPYmplY3RNYXAoKSAtPiBUZW1wbGF0ZU9iamVjdE1h
cCYKIHsKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxl
VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRo
aXMpLT5lbnN1cmVUZW1wbGF0ZU9iamVjdE1hcCh2bSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+dGVtcGxhdGVPYmplY3RNYXAoKTsKICAg
ICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2
YWxFeGVjdXRhYmxlKj4odGhpcyktPmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZtKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPnRlbXBsYXRlT2Jq
ZWN0TWFwKCk7CiAgICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5lbnN1cmVUZW1wbGF0ZU9i
amVjdE1hcCh2bSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpLT50ZW1wbGF0ZU9iamVjdE1hcCgpOwogICAgIGNhc2UgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGVUeXBlOgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGVUeXBlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPmVuc3VyZVRlbXBsYXRlT2JqZWN0TWFwKHZt
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
dGhpcyktPnRlbXBsYXRlT2JqZWN0TWFwKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmgKaW5kZXggZDBmMWZjZGRkYTcx
OTkxODVlODNmNDE4ZWRjMmRkYTcwOTBmOGQ1ZC4uN2ExOTY3M2U1NzZjZmMwN2Q2ODlhZGNjOTg2
N2FjNTM1ZWRkMzkyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuaApAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IGhhc0NsZWFyYWJsZUNvZGUoVk0mKSBjb25zdDsKIAotICAgIFRlbXBsYXRlT2JqZWN0TWFwJiBl
bnN1cmVUZW1wbGF0ZU9iamVjdE1hcChWTSYpOworICAgIFRlbXBsYXRlT2JqZWN0TWFwJiB0ZW1w
bGF0ZU9iamVjdE1hcCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgU2NyaXB0RXhlY3V0YWJsZShTdHJ1
Y3R1cmUqLCBWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBE
ZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNJbkFycm93RnVuY3Rpb25Db250ZXh0LCBib29sIGlz
SW5zaWRlT3JkaW5hcnlGdW5jdGlvbiwgRXZhbENvbnRleHRUeXBlLCBJbnRyaW5zaWMpOwpAQCAt
MTM2LDggKzEzNiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyA9IGhhc0NhcHR1cmVkVmFyaWFibGVzOwogICAgIH0KIAotICAgIHN0YXRpYyBUZW1wbGF0ZU9i
amVjdE1hcCYgZW5zdXJlVGVtcGxhdGVPYmplY3RNYXBJbXBsKHN0ZDo6dW5pcXVlX3B0cjxUZW1w
bGF0ZU9iamVjdE1hcD4mIGRlc3QpOwotCiAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICBJ
bnRyaW5zaWMgbV9pbnRyaW5zaWMgeyBOb0ludHJpbnNpYyB9OwogICAgIGJvb2wgbV9kaWRUcnlU
b0VudGVySW5Mb29wIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hD
b3VudGVkU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCmluZGV4IDBkMTE4
NzcwMzViNzdjMTRmMmRkMDdhNzhhN2FmZTg2Njc2NGY1OTcuLjNlMjdhM2IwMWM1M2YxMDg1ZDFk
NjczMDI0ZmRjMGY3MmZlZTg3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hDb3Vu
dGVkU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaApAQCAtMzAsNyAr
MzAsNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KIGNsYXNzIEhhc2hDb3VudGVkU2V0
IGZpbmFsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAgdXNp
bmcgSW1wbFR5cGUgPSBIYXNoTWFwPFZhbHVlLCB1bnNpZ25lZCwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hNYXAuaCBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hNYXAuaAppbmRleCAxNGUyYmMzODk3MjEzMGJjODMyYWM5YTU4Yjdk
NWRlOWY0ZjdiZGY2Li5iOTg3MzI5Njc1ZWI5OTQ3NGMyYzExMmYxNWQ0NTA2NzM0YzM5NDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKKysrIGIvU291cmNlL1dURi93dGYv
SGFzaE1hcC5oCkBAIC0zMyw3ICszMyw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBL
ZXlWYWx1ZVBhaXJLZXlFeHRyYWN0b3IgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJn
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHNBcmcsIHR5cGVuYW1lIFRhYmxlVHJhaXRzQXJnPgogY2xh
c3MgSGFzaE1hcCBmaW5hbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRl
OgogICAgIHVzaW5nIEtleVRyYWl0cyA9IEtleVRyYWl0c0FyZzsKICAgICB1c2luZyBNYXBwZWRU
cmFpdHMgPSBNYXBwZWRUcmFpdHNBcmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggYTQwMmNlMjczNzVhY2ViMGNl
YjA0ZjllYjVhMWU0MWFkMmM2OWYzMy4uYzlhNmVjZGJhZmEwNzY0OWRiZDBiNzgwYzY2MTA4MzA5
Y2JiZGEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaApAQCAtMjksNyArMjksNiBAQCBuYW1lc3BhY2UgV1RGIHsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRy
YWl0c0FyZywgdHlwZW5hbWUgVGFibGVUcmFpdHNBcmc+CiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAgdXNpbmcgSGFzaEZ1
bmN0aW9ucyA9IEhhc2hBcmc7CiAgICAgdXNpbmcgVmFsdWVUcmFpdHMgPSBUcmFpdHNBcmc7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCmluZGV4IGJlN2VjZDlmYjc2YmIxMWVlODMwNDFmYjQ3NDVlY2MzZTQ5YTA3YzYu
LjcyYTE4ZWY4ZTQzNTY5YmRlMjc0ZmZhNWNlYmI3NjQyZDY2ZWZhNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5o
CkBAIC0xMTAsNyArMTEwLDYgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSGFzaFRhYmxlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUYWJsZSwgdHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBjbGFz
cyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBjb25zdCBWYWx1ZSosIGNv
bnN0IFZhbHVlJj4gewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwcml2
YXRlOgogICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOwogICAgICAgICB0
eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwpAQCAtMjIw
LDcgKzIxOSw2IEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEhhc2hU
YWJsZSk7CiAjZW5kaWYKICAgICAgICAgfQogCi0KICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFU
T1JTCiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShjb25zdCBjb25zdF9pdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CiAgICAgICAgIHsKQEAgLTI0Nyw3ICsyNDUsNiBAQCBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihIYXNoVGFibGUpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSGFzaFRhYmxlLCB0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRl
cmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVmFsdWUsIHN0ZDo6cHRyZGlmZl90LCBW
YWx1ZSosIFZhbHVlJj4gewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBw
cml2YXRlOgogICAgICAgICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlOwogICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPEhhc2hUYWJsZVR5cGUsIEtleSwgVmFsdWUsIEV4
dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJhdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0xp
c3RIYXNoU2V0LmgKaW5kZXggZDgyMGEwOTBlODY3YWM5NDBjYmIzMzFhYTY4YzYxYzBjNDVlZjQ5
Ni4uMmNmZDIzODFmY2VlMWNmMGY4MzZjMmYyNWNmM2E4YzZlM2UwMWU2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MaXN0SGFz
aFNldC5oCkBAIC01NCw3ICs1NCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8VmFsdWVBcmc+PiBjbGFzcyBMaXN0CiAgICAgOiBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8TGlzdEhhc2hTZXQ8VmFsdWVBcmcsIEhhc2hBcmc+LCBXZWFr
UHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4KICNlbmRpZgogewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0Tm9kZTxW
YWx1ZUFyZz4gTm9kZTsKIApAQCAtMTk2LDcgKzE5NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hBcmc+IHN0cnVjdCBMaXN0SGFzaFNldE5vZGVIYXNoRnVuY3Rpb25zIHsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnPiBjbGFzcyBMaXN0SGFzaFNl
dEl0ZXJhdG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxWYWx1ZUFyZywgSGFzaEFyZz4gTGlzdEhhc2hTZXRUeXBlOwog
ICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRJdGVyYXRvcjxWYWx1ZUFyZywgSGFzaEFyZz4gaXRlcmF0
b3I7CkBAIC0yNDQsNyArMjQyLDYgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnPiBjbGFzcyBMaXN0SGFzaFNldENvbnN0SXRlcmF0
b3IgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKICAgICB0eXBlZGVm
IExpc3RIYXNoU2V0PFZhbHVlQXJnLCBIYXNoQXJnPiBMaXN0SGFzaFNldFR5cGU7CiAgICAgdHlw
ZWRlZiBMaXN0SGFzaFNldEl0ZXJhdG9yPFZhbHVlQXJnLCBIYXNoQXJnPiBpdGVyYXRvcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9X
ZWFrSGFzaFNldC5oCmluZGV4IDJmM2QwYTM1ZGRkYjA5ZGFlMDI5OTQyNjdmNjkzNmRkZDZiMzBl
ZjAuLjEzYzAyYTNiMmFmMWNjMDEzNzg5NDk3N2E3OGI1MzQxMDUyYTNkMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvV2Vha0hh
c2hTZXQuaApAQCAtNDEsNyArNDEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb3VudGVyPiBzdHJ1
Y3QgSGFzaFRyYWl0czxSZWY8V2Vha1B0ckltcGw8Q291bnRlcj4+PiA6IFJlZkhhcwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb3VudGVyID0gRW1wdHlDb3VudGVyPgogY2xhc3Mg
V2Vha0hhc2hTZXQgZmluYWwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIHR5cGVkZWYgSGFzaFNldDxSZWY8V2Vha1B0ckltcGw8Q291bnRlcj4+PiBXZWFrUHRy
SW1wbFNldDsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFdlYWtQdHJJbXBsU2V0OjpBZGRSZXN1bHQg
QWRkUmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5j
cHAKaW5kZXggOGQ5NTdhZjY5ODY2NzRjODQ0YTJjNTQwNzE3NzdmNTlmNjkyNmNmMi4uNDQyOTM4
MTE2ZmE2YTgxNjFhMjZhMDE4OWE5NzUwZmNhMDA0NjAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCkBAIC0xMzIsMTggKzEzMiwxNiBAQCB2b2lk
IE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZURlbGV0ZWQoUmVmPE1l
bW9yeU9iamVjdFN0b3JlPiYmCiAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBX
VEZNb3ZlKG9iamVjdFN0b3JlKTsKIH0KIAotdm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwg
c3RkOjp1bmlxdWVfcHRyPEtleVZhbHVlTWFwPiYmIGtleVZhbHVlTWFwLCBzdGQ6OnVuaXF1ZV9w
dHI8SURCS2V5RGF0YVNldD4mJiBvcmRlcmVkS2V5cykKK3ZvaWQgTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ2xlYXJlZChNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0
U3RvcmUsIEtleVZhbHVlTWFwJiYga2V5VmFsdWVNYXAsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlE
YXRhU2V0PiYmIG9yZGVyZWRLZXlzKQogewogICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250
YWlucygmb2JqZWN0U3RvcmUpKTsKIAotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jbGVhcmVkS2V5
VmFsdWVNYXBzLmFkZCgmb2JqZWN0U3RvcmUsIG51bGxwdHIpOworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9jbGVhcmVkS2V5VmFsdWVNYXBzLmFkZCgmb2JqZWN0U3RvcmUsIFdURk1vdmUoa2V5VmFs
dWVNYXApKTsKIAogICAgIC8vIElmIHRoaXMgb2JqZWN0IHN0b3JlIGhhcyBhbHJlYWR5IGJlZW4g
Y2xlYXJlZCBkdXJpbmcgdGhpcyB0cmFuc2FjdGlvbiwgd2Ugc2hvdWxkbid0IHJlbWVtYmVyIHRo
aXMgY2xlYXJpbmcuCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUoa2V5VmFsdWVN
YXApOwotCiAgICAgQVNTRVJUKCFtX2NsZWFyZWRPcmRlcmVkS2V5cy5jb250YWlucygmb2JqZWN0
U3RvcmUpKTsKICAgICBtX2NsZWFyZWRPcmRlcmVkS2V5cy5hZGQoJm9iamVjdFN0b3JlLCBXVEZN
b3ZlKG9yZGVyZWRLZXlzKSk7CiB9CkBAIC0xOTEsMTcgKzE4OSw4IEBAIHZvaWQgTWVtb3J5QmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb246OnJlY29yZFZhbHVlQ2hhbmdlZChNZW1vcnlPYmplY3RTdG9y
ZSYgb2JqZWN0CiAgICAgaWYgKG1fY2xlYXJlZEtleVZhbHVlTWFwcy5jb250YWlucygmb2JqZWN0
U3RvcmUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG9yaWdpbmFsQWRkUmVzdWx0ID0g
bV9vcmlnaW5hbFZhbHVlcy5hZGQoJm9iamVjdFN0b3JlLCBudWxscHRyKTsKLSAgICBpZiAob3Jp
Z2luYWxBZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgb3JpZ2luYWxBZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gbWFrZVVuaXF1ZTxLZXlWYWx1ZU1hcD4oKTsKLQotICAgIGF1dG8qIG1h
cCA9IG9yaWdpbmFsQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIGF1dG8g
YWRkUmVzdWx0ID0gbWFwLT5hZGQoa2V5LCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpKTsKLSAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodmFs
dWUpCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX29yaWdpbmFsVmFsdWVzLmFkZCgmb2JqZWN0U3Rv
cmUsIEtleVZhbHVlTWFwIHsgfSkuaXRlcmF0b3ItPnZhbHVlLmFkZChrZXksIFRocmVhZFNhZmVE
YXRhQnVmZmVyIHsgfSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIHZhbHVlKQog
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gKnZhbHVlOwogfQogCkBAIC0yNDYs
MTYgKzIzNSwxMiBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphYm9ydCgp
CiAgICAgICAgIG9iamVjdFN0b3JlLT5zZXRLZXlHZW5lcmF0b3JWYWx1ZShtX29yaWdpbmFsS2V5
R2VuZXJhdG9ycy5nZXQob2JqZWN0U3RvcmUuZ2V0KCkpKTsKIAogICAgICAgICBhdXRvIGNsZWFy
ZWRLZXlWYWx1ZU1hcCA9IG1fY2xlYXJlZEtleVZhbHVlTWFwcy50YWtlKG9iamVjdFN0b3JlLmdl
dCgpKTsKLSAgICAgICAgaWYgKGNsZWFyZWRLZXlWYWx1ZU1hcCkgeworICAgICAgICBpZiAoIWNs
ZWFyZWRLZXlWYWx1ZU1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX2NsZWFy
ZWRPcmRlcmVkS2V5cy5jb250YWlucyhvYmplY3RTdG9yZS5nZXQoKSkpOwogICAgICAgICAgICAg
b2JqZWN0U3RvcmUtPnJlcGxhY2VLZXlWYWx1ZVN0b3JlKFdURk1vdmUoY2xlYXJlZEtleVZhbHVl
TWFwKSwgbV9jbGVhcmVkT3JkZXJlZEtleXMudGFrZShvYmplY3RTdG9yZS5nZXQoKSkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYXV0byBrZXlWYWx1ZU1hcCA9IG1fb3JpZ2luYWxWYWx1ZXMudGFr
ZShvYmplY3RTdG9yZS5nZXQoKSk7Ci0gICAgICAgIGlmICgha2V5VmFsdWVNYXApCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogKmtleVZh
bHVlTWFwKSB7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX29yaWdpbmFsVmFsdWVzLnRh
a2Uob2JqZWN0U3RvcmUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBvYmplY3RTdG9yZS0+ZGVsZXRl
UmVjb3JkKGVudHJ5LmtleSk7CiAgICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkUmVjb3JkKCp0
aGlzLCBlbnRyeS5rZXksIHsgZW50cnkudmFsdWUgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgKaW5kZXggMmMwYWEyN2Q4MzRmNmY5MzUw
ZWM2YzAwN2Y5ZWU3MWFkYjdhMDRhNS4uNTA3Mzc3NDdkYTNlMTQ3NWM5ZTY0ZDQ5NGJlY2I3MmQ1
Yjk2YmJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgK
QEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVjb3JkVmFsdWVDaGFu
Z2VkKE1lbW9yeU9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5RGF0YSYsIFRocmVhZFNhZmVEYXRh
QnVmZmVyKik7CiAgICAgdm9pZCBvYmplY3RTdG9yZURlbGV0ZWQoUmVmPE1lbW9yeU9iamVjdFN0
b3JlPiYmKTsKLSAgICB2b2lkIG9iamVjdFN0b3JlQ2xlYXJlZChNZW1vcnlPYmplY3RTdG9yZSYs
IHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPElEQktleURh
dGFTZXQ+JiYpOworICAgIHZvaWQgb2JqZWN0U3RvcmVDbGVhcmVkKE1lbW9yeU9iamVjdFN0b3Jl
JiwgS2V5VmFsdWVNYXAmJiwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+JiYpOwogICAg
IHZvaWQgb2JqZWN0U3RvcmVSZW5hbWVkKE1lbW9yeU9iamVjdFN0b3JlJiwgY29uc3QgU3RyaW5n
JiBvbGROYW1lKTsKICAgICB2b2lkIGluZGV4UmVuYW1lZChNZW1vcnlJbmRleCYsIGNvbnN0IFN0
cmluZyYgb2xkTmFtZSk7CiAgICAgdm9pZCBpbmRleENsZWFyZWQoTWVtb3J5SW5kZXgmLCBzdGQ6
OnVuaXF1ZV9wdHI8SW5kZXhWYWx1ZVN0b3JlPiYmKTsKQEAgLTkyLDggKzkyLDggQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgdWludDY0X3Q+IG1fb3JpZ2luYWxL
ZXlHZW5lcmF0b3JzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVtb3J5T2JqZWN0U3Rv
cmU+PiBtX2RlbGV0ZWRPYmplY3RTdG9yZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxN
ZW1vcnlJbmRleD4+IG1fZGVsZXRlZEluZGV4ZXM7Ci0gICAgSGFzaE1hcDxNZW1vcnlPYmplY3RT
dG9yZSosIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4+IG1fb3JpZ2luYWxWYWx1ZXM7Ci0g
ICAgSGFzaE1hcDxNZW1vcnlPYmplY3RTdG9yZSosIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1h
cD4+IG1fY2xlYXJlZEtleVZhbHVlTWFwczsKKyAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3Jl
KiwgS2V5VmFsdWVNYXA+IG1fb3JpZ2luYWxWYWx1ZXM7CisgICAgSGFzaE1hcDxNZW1vcnlPYmpl
Y3RTdG9yZSosIEtleVZhbHVlTWFwPiBtX2NsZWFyZWRLZXlWYWx1ZU1hcHM7CiAgICAgSGFzaE1h
cDxNZW1vcnlPYmplY3RTdG9yZSosIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0Pj4gbV9j
bGVhcmVkT3JkZXJlZEtleXM7CiAgICAgSGFzaE1hcDxNZW1vcnlPYmplY3RTdG9yZSosIFN0cmlu
Zz4gbV9vcmlnaW5hbE9iamVjdFN0b3JlTmFtZXM7CiAgICAgSGFzaE1hcDxNZW1vcnlJbmRleCos
IFN0cmluZz4gbV9vcmlnaW5hbEluZGV4TmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcApp
bmRleCAwM2MzMTFkZmY3YjJjMjQzNDlkMjdjYTg2MzQ3ZWM5ZGJmZGU3ZTliLi4zMDczNGZkNGQ5
ZmQxNTI1MzU4MjBlMWYyOWJhMjEzYTY1MmQwM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5j
cHAKQEAgLTE3MCwxMCArMTcwLDcgQEAgdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRlQWxs
SW5kZXhlcyhNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogYm9vbCBN
ZW1vcnlPYmplY3RTdG9yZTo6Y29udGFpbnNSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5KQog
ewotICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gbV9rZXlWYWx1ZVN0b3JlLT5jb250YWlucyhrZXkpOworICAgIHJldHVybiBtX2tl
eVZhbHVlU3RvcmUuY29udGFpbnMoa2V5KTsKIH0KIAogdm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6
Y2xlYXIoKQpAQCAtMTg5LDcgKzE4Niw3IEBAIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmNsZWFy
KCkKICAgICAgICAgY3Vyc29yLT5vYmplY3RTdG9yZUNsZWFyZWQoKTsKIH0KIAotdm9pZCBNZW1v
cnlPYmplY3RTdG9yZTo6cmVwbGFjZUtleVZhbHVlU3RvcmUoc3RkOjp1bmlxdWVfcHRyPEtleVZh
bHVlTWFwPiYmIHN0b3JlLCBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YVNldD4mJiBvcmRlcmVk
S2V5cykKK3ZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OnJlcGxhY2VLZXlWYWx1ZVN0b3JlKEtleVZh
bHVlTWFwJiYgc3RvcmUsIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhU2V0PiYmIG9yZGVyZWRL
ZXlzKQogewogICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rpb24pOwogICAgIEFTU0VSVChtX3dy
aXRlVHJhbnNhY3Rpb24tPmlzQWJvcnRpbmcoKSk7CkBAIC0yMDIsMjMgKzE5OSwxNCBAQCB2b2lk
IE1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5KQog
ewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6ZGVsZXRlUmVjb3JkIik7
CiAKLSAgICBBU1NFUlQobV93cml0ZVRyYW5zYWN0aW9uKTsKLQotICAgIGlmICghbV9rZXlWYWx1
ZVN0b3JlKSB7Ci0gICAgICAgIG1fd3JpdGVUcmFuc2FjdGlvbi0+cmVjb3JkVmFsdWVDaGFuZ2Vk
KCp0aGlzLCBrZXksIG51bGxwdHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKG1fb3JkZXJlZEtleXMpOwotCi0gICAgYXV0byBpdGVyYXRvciA9IG1fa2V5VmFsdWVTdG9y
ZS0+ZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2tleVZhbHVlU3RvcmUtPmVuZCgp
KSB7CisgICAgYXV0byBpdGVyYXRvciA9IG1fa2V5VmFsdWVTdG9yZS5maW5kKGtleSk7CisgICAg
aWYgKGl0ZXJhdG9yID09IG1fa2V5VmFsdWVTdG9yZS5lbmQoKSkgewogICAgICAgICBtX3dyaXRl
VHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hhbmdlZCgqdGhpcywga2V5LCBudWxscHRyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fd3JpdGVUcmFuc2FjdGlvbi0+cmVjb3JkVmFs
dWVDaGFuZ2VkKCp0aGlzLCBrZXksICZpdGVyYXRvci0+dmFsdWUpOwotICAgIG1fa2V5VmFsdWVT
dG9yZS0+cmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBtX2tleVZhbHVlU3RvcmUucmVtb3ZlKGl0ZXJh
dG9yKTsKICAgICBtX29yZGVyZWRLZXlzLT5lcmFzZShrZXkpOwogCiAgICAgdXBkYXRlSW5kZXhl
c0ZvckRlbGV0ZVJlY29yZChrZXkpOwpAQCAtMjYxLDE2ICsyNDksMTMgQEAgSURCRXJyb3IgTWVt
b3J5T2JqZWN0U3RvcmU6OmFkZFJlY29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24KIAogICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rpb24pOwogICAgIEFTU0VS
VF9VTlVTRUQodHJhbnNhY3Rpb24sIG1fd3JpdGVUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24p
OwotICAgIEFTU0VSVCghbV9rZXlWYWx1ZVN0b3JlIHx8ICFtX2tleVZhbHVlU3RvcmUtPmNvbnRh
aW5zKGtleURhdGEpKTsKKyAgICBBU1NFUlQoIW1fa2V5VmFsdWVTdG9yZS5jb250YWlucyhrZXlE
YXRhKSk7CiAgICAgQVNTRVJUKCFtX29yZGVyZWRLZXlzIHx8IG1fb3JkZXJlZEtleXMtPmZpbmQo
a2V5RGF0YSkgPT0gbV9vcmRlcmVkS2V5cy0+ZW5kKCkpOwogCi0gICAgaWYgKCFtX2tleVZhbHVl
U3RvcmUpIHsKLSAgICAgICAgQVNTRVJUKCFtX29yZGVyZWRLZXlzKTsKLSAgICAgICAgbV9rZXlW
YWx1ZVN0b3JlID0gbWFrZVVuaXF1ZTxLZXlWYWx1ZU1hcD4oKTsKKyAgICBpZiAoIW1fb3JkZXJl
ZEtleXMpCiAgICAgICAgIG1fb3JkZXJlZEtleXMgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxs
b2NDaGVjazxJREJLZXlEYXRhU2V0PigpOwotICAgIH0KIAotICAgIGF1dG8gbWFwUmVzdWx0ID0g
bV9rZXlWYWx1ZVN0b3JlLT5zZXQoa2V5RGF0YSwgdmFsdWUuZGF0YSgpKTsKKyAgICBhdXRvIG1h
cFJlc3VsdCA9IG1fa2V5VmFsdWVTdG9yZS5zZXQoa2V5RGF0YSwgdmFsdWUuZGF0YSgpKTsKICAg
ICBBU1NFUlQobWFwUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIGF1dG8gbGlzdFJlc3VsdCA9IG1f
b3JkZXJlZEtleXMtPmluc2VydChrZXlEYXRhKTsKICAgICBBU1NFUlQobGlzdFJlc3VsdC5zZWNv
bmQpOwpAQCAtMjc4LDcgKzI2Myw3IEBAIElEQkVycm9yIE1lbW9yeU9iamVjdFN0b3JlOjphZGRS
ZWNvcmQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uCiAgICAgLy8g
SWYgdGhlcmUgd2FzIGFuIGVycm9yIGluZGV4aW5nIHRoaXMgYWRkaXRpb24sIHRoZW4gcmV2ZXJ0
IGl0LgogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKGtleURhdGEs
IGluZGV4S2V5cyk7CiAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBtX2tleVZh
bHVlU3RvcmUtPnJlbW92ZShtYXBSZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBtX2tleVZhbHVl
U3RvcmUucmVtb3ZlKG1hcFJlc3VsdC5pdGVyYXRvcik7CiAgICAgICAgIG1fb3JkZXJlZEtleXMt
PmVyYXNlKGxpc3RSZXN1bHQuZmlyc3QpOwogICAgIH0gZWxzZQogICAgICAgICB1cGRhdGVDdXJz
b3JzRm9yUHV0UmVjb3JkKGxpc3RSZXN1bHQuZmlyc3QpOwpAQCAtMzM1LDEyICszMjAsOSBAQCBJ
REJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6dXBkYXRlSW5kZXhlc0ZvclB1dFJlY29yZChjb25z
dCBJREJLZXlEYXRhJiBrZXksIGNvbgogCiBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6cG9w
dWxhdGVJbmRleFdpdGhFeGlzdGluZ1JlY29yZHMoTWVtb3J5SW5kZXgmIGluZGV4KQogewotICAg
IGlmICghbV9rZXlWYWx1ZVN0b3JlKQotICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwotCiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3NlcmlhbGl6YXRpb25Db250ZXh0LT52bSgpKTsKIAot
ICAgIGZvciAoY29uc3QgYXV0byYgaXRlcmF0b3IgOiAqbV9rZXlWYWx1ZVN0b3JlKSB7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBpdGVyYXRvciA6IG1fa2V5VmFsdWVTdG9yZSkgewogICAgICAgICBh
dXRvIGpzVmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKG1fc2VyaWFsaXphdGlv
bkNvbnRleHQtPmdsb2JhbE9iamVjdCgpLCBpdGVyYXRvci52YWx1ZSk7CiAgICAgICAgIGlmIChq
c1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OwpAQCAtMzY5LDcgKzM1MSw3IEBAIHVpbnQ2NF90IE1lbW9yeU9iamVjdFN0b3JlOjpjb3Vu
dEZvcktleVJhbmdlKHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCCiAgICAgICAg
IHJldHVybiBpbmRleC0+Y291bnRGb3JLZXlSYW5nZShpblJhbmdlKTsKICAgICB9CiAKLSAgICBp
ZiAoIW1fa2V5VmFsdWVTdG9yZSkKKyAgICBpZiAobV9rZXlWYWx1ZVN0b3JlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICB1aW50NjRfdCBjb3VudCA9IDA7CkBAIC0zODksMTAg
KzM3MSw3IEBAIHVpbnQ2NF90IE1lbW9yeU9iamVjdFN0b3JlOjpjb3VudEZvcktleVJhbmdlKHVp
bnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCCiAKIFRocmVhZFNhZmVEYXRhQnVmZmVy
IE1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleShjb25zdCBJREJLZXlEYXRhJiBrZXkpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICByZXR1cm4gbV9rZXlWYWx1ZVN0b3JlLT5nZXQoa2V5KTsKKyAgICByZXR1cm4gbV9rZXlW
YWx1ZVN0b3JlLmdldChrZXkpOwogfQogCiBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBNZW1vcnlPYmpl
Y3RTdG9yZTo6dmFsdWVGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdl
RGF0YSkgY29uc3QKQEAgLTQwMyw4ICszODIsNyBAQCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBNZW1v
cnlPYmplY3RTdG9yZTo6dmFsdWVGb3JLZXlSYW5nZShjb25zdCBJREJLZXlSYW5nZURhdGEmCiAg
ICAgaWYgKGtleS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFRocmVhZFNhZmVEYXRhQnVmZmVy
KCk7CiAKLSAgICBBU1NFUlQobV9rZXlWYWx1ZVN0b3JlKTsKLSAgICByZXR1cm4gbV9rZXlWYWx1
ZVN0b3JlLT5nZXQoa2V5KTsKKyAgICByZXR1cm4gbV9rZXlWYWx1ZVN0b3JlLmdldChrZXkpOwog
fQogCiB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQktleVJh
bmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBPcHRpb25hbDx1aW50MzJfdD4gY291bnQsIEluZGV4ZWRE
Qjo6R2V0QWxsVHlwZSB0eXBlLCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgY29uc3QKQEAgLTQ0
NSwxMCArNDIzLDEwIEBAIElEQkdldFJlc3VsdCBNZW1vcnlPYmplY3RTdG9yZTo6aW5kZXhWYWx1
ZUZvcktleVJhbmdlKHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwKIAogSURCS2V5RGF0YSBNZW1v
cnlPYmplY3RTdG9yZTo6bG93ZXN0S2V5V2l0aFJlY29yZEluUmFuZ2UoY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2tleVZhbHVlU3RvcmUp
CisgICAgaWYgKG1fa2V5VmFsdWVTdG9yZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBpZiAoa2V5UmFuZ2VEYXRhLmlzRXhhY3RseU9uZUtleSgpICYmIG1fa2V5VmFsdWVT
dG9yZS0+Y29udGFpbnMoa2V5UmFuZ2VEYXRhLmxvd2VyS2V5KSkKKyAgICBpZiAoa2V5UmFuZ2VE
YXRhLmlzRXhhY3RseU9uZUtleSgpICYmIG1fa2V5VmFsdWVTdG9yZS5jb250YWlucyhrZXlSYW5n
ZURhdGEubG93ZXJLZXkpKQogICAgICAgICByZXR1cm4ga2V5UmFuZ2VEYXRhLmxvd2VyS2V5Owog
CiAgICAgQVNTRVJUKG1fb3JkZXJlZEtleXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAppbmRleCA0
MzQ5OWQ1YmNiZWM2MjZhZDExYzQ1ODJiNmFiNjY0ZGEyNmRkMDE4Li40M2E1M2VlOTZmYjc2NTU4
MmQ1MmJjYWFlOWQ3ZWQyM2MwMDU5MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaApAQCAtODUs
NyArODUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRLZXlHZW5lcmF0b3JWYWx1ZSh1aW50NjRf
dCB2YWx1ZSkgeyBtX2tleUdlbmVyYXRvclZhbHVlID0gdmFsdWU7IH0KIAogICAgIHZvaWQgY2xl
YXIoKTsKLSAgICB2b2lkIHJlcGxhY2VLZXlWYWx1ZVN0b3JlKHN0ZDo6dW5pcXVlX3B0cjxLZXlW
YWx1ZU1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPElEQktleURhdGFTZXQ+JiYpOworICAgIHZvaWQg
cmVwbGFjZUtleVZhbHVlU3RvcmUoS2V5VmFsdWVNYXAmJiwgc3RkOjp1bmlxdWVfcHRyPElEQktl
eURhdGFTZXQ+JiYpOwogCiAgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JLZXkoY29u
c3QgSURCS2V5RGF0YSYpIGNvbnN0OwogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIHZhbHVlRm9y
S2V5UmFuZ2UoY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgY29uc3Q7CkBAIC0xMjYsNyArMTI2LDcg
QEAgcHJpdmF0ZToKICAgICBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiogbV93cml0ZVRy
YW5zYWN0aW9uIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fa2V5R2VuZXJhdG9yVmFsdWUg
eyAxIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+IG1fa2V5VmFsdWVTdG9y
ZTsKKyAgICBLZXlWYWx1ZU1hcCBtX2tleVZhbHVlU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElEQktleURhdGFTZXQ+IG1fb3JkZXJlZEtleXM7CiAKICAgICB2b2lkIHVucmVnaXN0ZXJJbmRl
eChNZW1vcnlJbmRleCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCmluZGV4IGEwMzgyMzRiNzU1NmJjYjVlYmUzNzFi
M2M1ODJhNjg1NThhYmI1OTguLjBmNDQ0ZDk5Yjg1MGQ0M2YzOGU1NTIxYTljYzk3NzUxODVlZjY4
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHAKQEAgLTUyOSwxMiArNTI5LDEwIEBAIFZlY3RvcjxSZWY8RGF0YWJh
c2U+PiBEYXRhYmFzZVRyYWNrZXI6Om9wZW5EYXRhYmFzZXMoKQogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogCi0g
ICAgICAgIGlmIChtX29wZW5EYXRhYmFzZU1hcCkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBu
YW1lTWFwIDogbV9vcGVuRGF0YWJhc2VNYXAtPnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBzZXQgOiBuYW1lTWFwLT52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogKnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZW5EYXRhYmFzZXMuYXBwZW5kKCpkYXRhYmFzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICBmb3IgKGF1dG8mIG5hbWVNYXAgOiBtX29wZW5EYXRhYmFzZU1hcC52YWx1ZXMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiBzZXQgOiBuYW1lTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IHNldCkKKyAgICAgICAgICAgICAgICAgICAgb3Bl
bkRhdGFiYXNlcy5hcHBlbmQoKmRhdGFiYXNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTU0NSwyNSArNTQzLDE0IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVu
RGF0YWJhc2UoRGF0YWJhc2UmIGRhdGFiYXNlKQogewogICAgIExvY2tIb2xkZXIgb3BlbkRhdGFi
YXNlTWFwTG9jayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKIAotICAgIGlmICghbV9vcGVuRGF0
YWJhc2VNYXApCi0gICAgICAgIG1fb3BlbkRhdGFiYXNlTWFwID0gbWFrZVVuaXF1ZTxEYXRhYmFz
ZU9yaWdpbk1hcD4oKTsKLQogICAgIGF1dG8gb3JpZ2luID0gZGF0YWJhc2Uuc2VjdXJpdHlPcmln
aW4oKTsKIAotICAgIGF1dG8qIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdp
bik7Ci0gICAgaWYgKCFuYW1lTWFwKSB7Ci0gICAgICAgIG5hbWVNYXAgPSBuZXcgRGF0YWJhc2VO
YW1lTWFwOwotICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+YWRkKG9yaWdpbi5pc29sYXRlZENv
cHkoKSwgbmFtZU1hcCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG5hbWUgPSBkYXRhYmFzZS5zdHJp
bmdJZGVudGlmaWVySXNvbGF0ZWRDb3B5KCk7Ci0gICAgYXV0byogZGF0YWJhc2VTZXQgPSBuYW1l
TWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFzZVNldCkgewotICAgICAgICBkYXRhYmFz
ZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKLSAgICAgICAgbmFtZU1hcC0+c2V0KG5hbWUuaXNvbGF0
ZWRDb3B5KCksIGRhdGFiYXNlU2V0KTsKLSAgICB9CisgICAgLy8gV2UgdXNlIGZpbmQgYmVmb3Jl
IGFkZCBoZXJlIHRvIGF2b2lkIG1ha2luZyBhbiBpc29sYXRlZCBjb3B5IG9mIHRoZSBvcmlnaW4g
ZXZlcnkgdGltZS4KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9vcGVuRGF0YWJhc2VNYXAuZmluZChv
cmlnaW4pOworICAgIGlmIChpdGVyYXRvciA9PSBtX29wZW5EYXRhYmFzZU1hcC5lbmQoKSkKKyAg
ICAgICAgaXRlcmF0b3IgPSBtX29wZW5EYXRhYmFzZU1hcC5hZGQob3JpZ2luLmlzb2xhdGVkQ29w
eSgpLCBEYXRhYmFzZU5hbWVNYXAgeyB9KS5pdGVyYXRvcjsKIAotICAgIGRhdGFiYXNlU2V0LT5h
ZGQoJmRhdGFiYXNlKTsKKyAgICBpdGVyYXRvci0+dmFsdWUuYWRkKGRhdGFiYXNlLnN0cmluZ0lk
ZW50aWZpZXJJc29sYXRlZENvcHkoKSwgRGF0YWJhc2VTZXQgeyB9KS5pdGVyYXRvci0+dmFsdWUu
YWRkKCZkYXRhYmFzZSk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJh
c2UgJXMgKCVwKVxuIiwgZGF0YWJhc2Uuc3RyaW5nSWRlbnRpZmllcklzb2xhdGVkQ29weSgpLnV0
ZjgoKS5kYXRhKCksICZkYXRhYmFzZSk7CiB9CkBAIC01NzIsMzkgKzU1OSwzMCBAQCB2b2lkIERh
dGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlJiBkYXRhYmFzZSkKIHsK
ICAgICBMb2NrSG9sZGVyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFy
ZCk7CiAKLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRGF0YWJhc2VOYW1lTWFw
KiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VNYXAtPmdldChkYXRhYmFzZS5zZWN1cml0eU9yaWdp
bigpKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9vcGVuRGF0
YWJhc2VNYXAuZmluZChkYXRhYmFzZS5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBpZiAoaXRlcmF0
b3IgPT0gbV9vcGVuRGF0YWJhc2VNYXAuZW5kKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgbmFtZSA9IGRhdGFi
YXNlLnN0cmluZ0lkZW50aWZpZXJJc29sYXRlZENvcHkoKTsKLSAgICBhdXRvKiBkYXRhYmFzZVNl
dCA9IG5hbWVNYXAtPmdldChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KSB7CisgICAgYXV0
byBpbm5lckl0ZXJhdG9yID0gaXRlcmF0b3ItPnZhbHVlLmZpbmQoZGF0YWJhc2Uuc3RyaW5nSWRl
bnRpZmllcklzb2xhdGVkQ29weSgpKTsKKyAgICBpZiAoaW5uZXJJdGVyYXRvciA9PSBpdGVyYXRv
ci0+dmFsdWUuZW5kKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBkYXRhYmFzZVNldC0+cmVtb3ZlKCZkYXRhYmFzZSk7Cisg
ICAgaW5uZXJJdGVyYXRvci0+dmFsdWUucmVtb3ZlKCZkYXRhYmFzZSk7CiAKICAgICBMT0coU3Rv
cmFnZUFQSSwgIlJlbW92ZWQgb3BlbiBEYXRhYmFzZSAlcyAoJXApXG4iLCBkYXRhYmFzZS5zdHJp
bmdJZGVudGlmaWVySXNvbGF0ZWRDb3B5KCkudXRmOCgpLmRhdGEoKSwgJmRhdGFiYXNlKTsKIAot
ICAgIGlmICghZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkKKyAgICBpZiAoIWlubmVySXRlcmF0b3It
PnZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbmFtZU1hcC0+cmVtb3Zl
KG5hbWUpOwotICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKLQotICAgIGlmICghbmFtZU1hcC0+aXNF
bXB0eSgpKQorICAgIGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoaW5uZXJJdGVyYXRvcik7CisgICAg
aWYgKCFpdGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X29wZW5EYXRhYmFzZU1hcC0+cmVtb3ZlKGRhdGFiYXNlLnNlY3VyaXR5T3JpZ2luKCkpOwotICAg
IGRlbGV0ZSBuYW1lTWFwOworICAgIG1fb3BlbkRhdGFiYXNlTWFwLnJlbW92ZShpdGVyYXRvcik7
CiB9CiAKIFJlZlB0cjxPcmlnaW5Mb2NrPiBEYXRhYmFzZVRyYWNrZXI6Om9yaWdpbkxvY2tGb3Io
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4pCkBAIC05NTUsMTQgKzkzMywxMSBAQCB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVjb3JkQ3JlYXRpbmdEYXRhYmFzZShjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmIG9yaWdpbiwgYwogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1YXJkLnRy
eUxvY2soKSk7CiAKLSAgICAvLyBXZSBkb24ndCB1c2UgSGFzaE1hcDo6ZW5zdXJlIGhlcmUgdG8g
YXZvaWQgbWFraW5nIGFuIGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgot
ICAgIGF1dG8qIG5hbWVTZXQgPSBtX2JlaW5nQ3JlYXRlZC5nZXQob3JpZ2luKTsKLSAgICBpZiAo
IW5hbWVTZXQpIHsKLSAgICAgICAgYXV0byBvd25lZFNldCA9IG1ha2VVbmlxdWU8SGFzaENvdW50
ZWRTZXQ8U3RyaW5nPj4oKTsKLSAgICAgICAgbmFtZVNldCA9IG93bmVkU2V0LmdldCgpOwotICAg
ICAgICBtX2JlaW5nQ3JlYXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKG93
bmVkU2V0KSk7Ci0gICAgfQotICAgIG5hbWVTZXQtPmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsK
KyAgICAvLyBXZSB1c2UgZmluZCBiZWZvcmUgYWRkIGhlcmUgdG8gYXZvaWQgbWFraW5nIGFuIGlz
b2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVyeSB0aW1lLgorICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2JlaW5nQ3JlYXRlZC5maW5kKG9yaWdpbik7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVp
bmdDcmVhdGVkLmVuZCgpKQorICAgICAgICBpdGVyYXRvciA9IG1fYmVpbmdDcmVhdGVkLmFkZChv
cmlnaW4uaXNvbGF0ZWRDb3B5KCksIEhhc2hDb3VudGVkU2V0PFN0cmluZz4geyB9KS5pdGVyYXRv
cjsKKyAgICBpdGVyYXRvci0+dmFsdWUuYWRkKG5hbWUuaXNvbGF0ZWRDb3B5KCkpOwogfQogCiB2
b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTk3NSw3ICs5NTAsNyBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZUNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbgogICAgIGlmIChpdGVyYXRvciA9PSBtX2JlaW5nQ3Jl
YXRlZC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgY291bnRlZFNldCA9ICpp
dGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgY291bnRlZFNldCA9IGl0ZXJhdG9yLT52YWx1ZTsK
ICAgICBBU1NFUlQoY291bnRlZFNldC5jb250YWlucyhuYW1lKSk7CiAKICAgICBpZiAoY291bnRl
ZFNldC5yZW1vdmUobmFtZSkgJiYgY291bnRlZFNldC5pc0VtcHR5KCkpCkBAIC05ODcsNyArOTYy
LDcgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmNyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFMKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VHdWFy
ZC50cnlMb2NrKCkpOwogCiAgICAgYXV0byBpdGVyYXRvciA9IG1fYmVpbmdDcmVhdGVkLmZpbmQo
b3JpZ2luKTsKLSAgICByZXR1cm4gaXRlcmF0b3IgIT0gbV9iZWluZ0NyZWF0ZWQuZW5kKCkgJiYg
aXRlcmF0b3ItPnZhbHVlLT5jb250YWlucyhuYW1lKTsKKyAgICByZXR1cm4gaXRlcmF0b3IgIT0g
bV9iZWluZ0NyZWF0ZWQuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKG5hbWUpOwog
fQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRGVsZXRlRGF0YWJhc2UoY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTEwMDEsMTUgKzk3
NiwxMiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVjb3JkRGVsZXRpbmdEYXRhYmFzZShjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbiwgYwogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1
YXJkLnRyeUxvY2soKSk7CiAgICAgQVNTRVJUKGNhbkRlbGV0ZURhdGFiYXNlKG9yaWdpbiwgbmFt
ZSkpOwogCi0gICAgLy8gV2UgZG9uJ3QgdXNlIEhhc2hNYXA6OmVuc3VyZSBoZXJlIHRvIGF2b2lk
IG1ha2luZyBhbiBpc29sYXRlZCBjb3B5IG9mIHRoZSBvcmlnaW4gZXZlcnkgdGltZS4KLSAgICBh
dXRvKiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7Ci0gICAgaWYgKCFuYW1l
U2V0KSB7Ci0gICAgICAgIGF1dG8gb3duZWRTZXQgPSBtYWtlVW5pcXVlPEhhc2hTZXQ8U3RyaW5n
Pj4oKTsKLSAgICAgICAgbmFtZVNldCA9IG93bmVkU2V0LmdldCgpOwotICAgICAgICBtX2JlaW5n
RGVsZXRlZC5hZGQob3JpZ2luLmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKG93bmVkU2V0KSk7Ci0g
ICAgfQotICAgIEFTU0VSVCghbmFtZVNldC0+Y29udGFpbnMobmFtZSkpOwotICAgIG5hbWVTZXQt
PmFkZChuYW1lLmlzb2xhdGVkQ29weSgpKTsKKyAgICAvLyBXZSB1c2UgZmluZCBiZWZvcmUgYWRk
IGhlcmUgdG8gYXZvaWQgbWFraW5nIGFuIGlzb2xhdGVkIGNvcHkgb2YgdGhlIG9yaWdpbiBldmVy
eSB0aW1lLgorICAgIGF1dG8gaXRlcmF0b3IgPSBtX2JlaW5nRGVsZXRlZC5maW5kKG9yaWdpbik7
CisgICAgaWYgKGl0ZXJhdG9yID09IG1fYmVpbmdEZWxldGVkLmVuZCgpKQorICAgICAgICBpdGVy
YXRvciA9IG1fYmVpbmdEZWxldGVkLmFkZChvcmlnaW4uaXNvbGF0ZWRDb3B5KCksIEhhc2hTZXQ8
U3RyaW5nPiB7IH0pLml0ZXJhdG9yOworICAgIEFTU0VSVCghaXRlcmF0b3ItPnZhbHVlLmNvbnRh
aW5zKG5hbWUpKTsKKyAgICBpdGVyYXRvci0+dmFsdWUuYWRkKG5hbWUuaXNvbGF0ZWRDb3B5KCkp
OwogfQogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nRGF0YWJhc2UoY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTEwMjEs
MjMgKzk5MywyMyBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZG9uZURlbGV0aW5nRGF0YWJhc2Uo
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIGNvbgogICAgIGlmIChpdGVyYXRvciA9
PSBtX2JlaW5nRGVsZXRlZC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGl0
ZXJhdG9yLT52YWx1ZS0+Y29udGFpbnMobmFtZSkpOwotICAgIGl0ZXJhdG9yLT52YWx1ZS0+cmVt
b3ZlKG5hbWUpOwotICAgIGlmIChpdGVyYXRvci0+dmFsdWUtPmlzRW1wdHkoKSkKKyAgICBBU1NF
UlQoaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5zKG5hbWUpKTsKKyAgICBpdGVyYXRvci0+dmFsdWUu
cmVtb3ZlKG5hbWUpOworICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKQogICAgICAg
ICBtX2JlaW5nRGVsZXRlZC5yZW1vdmUoaXRlcmF0b3IpOwogfQogCiBib29sIERhdGFiYXNlVHJh
Y2tlcjo6aXNEZWxldGluZ0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5
TG9jaygpKTsKLSAgICBhdXRvKiBuYW1lU2V0ID0gbV9iZWluZ0RlbGV0ZWQuZ2V0KG9yaWdpbik7
Ci0gICAgcmV0dXJuIG5hbWVTZXQgJiYgbmFtZVNldC0+Y29udGFpbnMobmFtZSk7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fYmVpbmdEZWxldGVkLmZpbmQob3JpZ2luKTsKKyAgICByZXR1cm4gaXRl
cmF0b3IgIT0gbV9iZWluZ0RlbGV0ZWQuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5z
KG5hbWUpOwogfQogCiBib29sIERhdGFiYXNlVHJhY2tlcjo6Y2FuRGVsZXRlT3JpZ2luKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQogewogICAgIEFTU0VSVCghbV9kYXRhYmFzZUd1
YXJkLnRyeUxvY2soKSk7Ci0gICAgcmV0dXJuICEoaXNEZWxldGluZ09yaWdpbihvcmlnaW4pIHx8
IG1fYmVpbmdDcmVhdGVkLmdldChvcmlnaW4pKTsKKyAgICByZXR1cm4gIShpc0RlbGV0aW5nT3Jp
Z2luKG9yaWdpbikgfHwgbV9iZWluZ0NyZWF0ZWQuY29udGFpbnMob3JpZ2luKSk7CiB9CiAKIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjppc0RlbGV0aW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgb3JpZ2luKQpAQCAtMTEzMywxMiArMTEwNSwxMCBAQCBib29sIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luLCBj
b25zdAogICAgIC8vIGR1cmluZyB0aGUgc3luY2hyb25vdXMgRGF0YWJhc2VUaHJlYWQgY2FsbCBp
dCB0cmlnZ2Vycy4KICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgb3BlbkRhdGFiYXNlTWFwTG9j
ayhtX29wZW5EYXRhYmFzZU1hcEd1YXJkKTsKLSAgICAgICAgaWYgKG1fb3BlbkRhdGFiYXNlTWFw
KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5n
ZXQob3JpZ2luKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFi
YXNlIDogKmRhdGFiYXNlU2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFi
YXNlcy5hcHBlbmQoKmRhdGFiYXNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChh
dXRvIGl0ZXJhdG9yID0gbV9vcGVuRGF0YWJhc2VNYXAuZmluZChvcmlnaW4pOyBpdGVyYXRvciAh
PSBtX29wZW5EYXRhYmFzZU1hcC5iZWdpbigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBpbm5l
ckl0ZXJhdG9yID0gaXRlcmF0b3ItPnZhbHVlLmZpbmQobmFtZSk7IGlubmVySXRlcmF0b3IgIT0g
aXRlcmF0b3ItPnZhbHVlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRh
YmFzZSA6IGlubmVySXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAgICAgICBkZWxldGVk
RGF0YWJhc2VzLmFwcGVuZCgqZGF0YWJhc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMTE5MCw0MiArMTE2MCw0MCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3Zl
RGVsZXRlZE9wZW5lZERhdGFiYXNlcygpCiAgICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBE
YXRhYmFzZVRocmVhZCBjYWxsIGl0IHRyaWdnZXJzLgogICAgIHsKICAgICAgICAgTG9ja0hvbGRl
ciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwotICAgICAgICBp
ZiAobV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3BlbkRhdGFi
YXNlIDogKm1fb3BlbkRhdGFiYXNlTWFwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgb3JpZ2lu
ID0gb3BlbkRhdGFiYXNlLmtleTsKLSAgICAgICAgICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIGRh
dGFiYXNlTmFtZU1hcCA9IG9wZW5EYXRhYmFzZS52YWx1ZTsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW47Ci0KLSAgICAgICAg
ICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9wZW5lZCBkYXRhYmFzZXMgaW4gdGhpcyBvcmln
aW4uICBHZXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgZmlsZSBwYXRoIG9mIGVhY2ggZGF0YWJhc2Ug
YW5kIHNlZSBpZgotICAgICAgICAgICAgICAgIC8vIGl0IHN0aWxsIG1hdGNoZXMgdGhlIHBhdGgg
c3RvcmVkIGluIHRoZSBvcGVuZWQgZGF0YWJhc2Ugb2JqZWN0LgotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGF0YWJhc2VzIDogKmRhdGFiYXNlTmFtZU1hcCkgewotICAgICAgICAgICAgICAg
ICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lID0gZGF0YWJhc2VzLmtleTsKLSAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
dXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHBhdGgg
RlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiX3MpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIG9yaWdpbi5kYXRhYmFzZUlk
ZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDIsIGRhdGFiYXNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
YmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGZv
dW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgZGIgOiAqZGF0YWJhc2VzLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBhcmUgZG9uZSBpZiB0aGlzIGRhdGFiYXNlIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIGRl
bGV0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGItPmRlbGV0ZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkYXRhYmFzZSBoYXMgYmVlbiBk
ZWxldGVkIG9yIGlmIGl0cyBkYXRhYmFzZSBmaWxlIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBjdXJy
ZW50IHZlcnNpb24sIHRoaXMgZGF0YWJhc2UgaXMgbm8gbG9uZ2VyIHZhbGlkIGFuZCBpdCBzaG91
bGQgYmUgbWFya2VkIGFzIGRlbGV0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0
YWJhc2VGaWxlTmFtZS5pc051bGwoKSB8fCBkYXRhYmFzZUZpbGVOYW1lICE9IEZpbGVTeXN0ZW06
OnBhdGhGaWxlTmFtZShkYi0+ZmlsZU5hbWVJc29sYXRlZENvcHkoKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmREZWxldGVkRGF0YWJhc2UgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIG9wZW5EYXRhYmFzZSA6IG1fb3Bl
bkRhdGFiYXNlTWFwKSB7CisgICAgICAgICAgICBhdXRvJiBvcmlnaW4gPSBvcGVuRGF0YWJhc2Uu
a2V5OworICAgICAgICAgICAgYXV0byYgZGF0YWJhc2VOYW1lTWFwID0gb3BlbkRhdGFiYXNlLnZh
bHVlOworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JU
aGlzT3JpZ2luOworCisgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9wZW5lZCBkYXRh
YmFzZXMgaW4gdGhpcyBvcmlnaW4uIEdldCB0aGUgY3VycmVudCBkYXRhYmFzZSBmaWxlIHBhdGgg
b2YgZWFjaCBkYXRhYmFzZSBhbmQgc2VlIGlmCisgICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRj
aGVzIHRoZSBwYXRoIHN0b3JlZCBpbiB0aGUgb3BlbmVkIGRhdGFiYXNlIG9iamVjdC4KKyAgICAg
ICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VzIDogZGF0YWJhc2VOYW1lTWFwKSB7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSA9IGRhdGFiYXNlcy5rZXk7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcGF0aCBGUk9N
IERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyJfcykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBvcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRhdGFiYXNl
TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VGaWxlTmFtZSA9IHN0YXRl
bWVudC0+Y29sdW1uVGV4dCgwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBkYiA6IGRhdGFiYXNlcy52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBhcmUgZG9uZSBpZiB0aGlzIGRhdGFiYXNlIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIGRl
bGV0ZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIChkYi0+ZGVsZXRlZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhp
cyBkYXRhYmFzZSBoYXMgYmVlbiBkZWxldGVkIG9yIGlmIGl0cyBkYXRhYmFzZSBmaWxlIG5vIGxv
bmdlciBtYXRjaGVzIHRoZSBjdXJyZW50IHZlcnNpb24sIHRoaXMgZGF0YWJhc2UgaXMgbm8gbG9u
Z2VyIHZhbGlkIGFuZCBpdCBzaG91bGQgYmUgbWFya2VkIGFzIGRlbGV0ZWQuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChkYXRhYmFzZUZpbGVOYW1lLmlzTnVsbCgpIHx8IGRhdGFiYXNlRmlsZU5h
bWUgIT0gRmlsZVN5c3RlbTo6cGF0aEZpbGVOYW1lKGRiLT5maWxlTmFtZUlzb2xhdGVkQ29weSgp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERhdGFiYXNlcy5hcHBlbmQoZGIp
OworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmREZWxldGVkRGF0YWJhc2UgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc2hvdWxkIHJl
bWVtYmVyIHRvIHNlbmQgdGhhdCBpbmZvcm1hdGlvbiB0byB0aGUgY2xpZW50IGxhdGVyLgotICAg
ICAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgZm91bmREZWxldGVkRGF0YWJhc2UgJiYg
ZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09yaWdpbi5hcHBlbmQoZGF0YWJhc2VOYW1lKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgZGF0YWJhc2Ugbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc2hvdWxkIHJlbWVtYmVyIHRvIHNlbmQg
dGhhdCBpbmZvcm1hdGlvbiB0byB0aGUgY2xpZW50IGxhdGVyLgorICAgICAgICAgICAgICAgIGlm
IChtX2NsaWVudCAmJiBmb3VuZERlbGV0ZWREYXRhYmFzZSAmJiBkYXRhYmFzZUZpbGVOYW1lLmlz
TnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNP
cmlnaW4uYXBwZW5kKGRhdGFiYXNlTmFtZSk7CisKICAgICAgICAgICAgICAgICBpZiAoIWRlbGV0
ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZWREYXRhYmFzZU5hbWVzLmFwcGVuZCh7IG9yaWdpbiwgV1RGTW92ZShkZWxldGVk
RGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4pIH0pOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgKaW5k
ZXggM2NhMGE0NjU1MDE0NWQwMGIyMjI1MTBhNjE5M2I1ODBhOTllMzc5MS4uMWYyNGNlZDhjYThm
YmExMjNiMzJlYzBhY2UxYjcxNGM4NDQxODU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5oCkBAIC0xNTgsMTEgKzE1OCwx
MSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVsZXRlT3JpZ2luTG9ja0Zvcihjb25zdCBTZWN1cml0
eU9yaWdpbkRhdGEmKTsKIAogICAgIHVzaW5nIERhdGFiYXNlU2V0ID0gSGFzaFNldDxEYXRhYmFz
ZSo+OwotICAgIHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFz
ZVNldCo+OwotICAgIHVzaW5nIERhdGFiYXNlT3JpZ2luTWFwID0gSGFzaE1hcDxTZWN1cml0eU9y
aWdpbkRhdGEsIERhdGFiYXNlTmFtZU1hcCo+OworICAgIHVzaW5nIERhdGFiYXNlTmFtZU1hcCA9
IEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZVNldD47CisgICAgdXNpbmcgRGF0YWJhc2VPcmlnaW5N
YXAgPSBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgRGF0YWJhc2VOYW1lTWFwPjsKIAogICAg
IExvY2sgbV9vcGVuRGF0YWJhc2VNYXBHdWFyZDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxEYXRhYmFzZU9yaWdpbk1hcD4gbV9vcGVuRGF0YWJhc2VNYXA7CisgICAgbXV0YWJsZSBEYXRh
YmFzZU9yaWdpbk1hcCBtX29wZW5EYXRhYmFzZU1hcDsKIAogICAgIC8vIFRoaXMgbG9jayBwcm90
ZWN0cyBtX2RhdGFiYXNlLCBtX29yaWdpbkxvY2tNYXAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBtX29yaWdpbnNCZWluZ0RlbGV0ZWQsIG1fYmVpbmdDcmVhdGVkLCBhbmQgbV9iZWluZ0RlbGV0
ZWQuCiAgICAgTG9jayBtX2RhdGFiYXNlR3VhcmQ7CkBAIC0xNzUsOCArMTc1LDggQEAgcHJpdmF0
ZToKIAogICAgIERhdGFiYXNlTWFuYWdlckNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAK
LSAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhhc2hDb3Vu
dGVkU2V0PFN0cmluZz4+PiBtX2JlaW5nQ3JlYXRlZDsKLSAgICBIYXNoTWFwPFNlY3VyaXR5T3Jp
Z2luRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8U3RyaW5nPj4+IG1fYmVpbmdEZWxldGVk
OworICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBIYXNoQ291bnRlZFNldDxTdHJpbmc+
PiBtX2JlaW5nQ3JlYXRlZDsKKyAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgSGFzaFNl
dDxTdHJpbmc+PiBtX2JlaW5nRGVsZXRlZDsKICAgICBIYXNoU2V0PFNlY3VyaXR5T3JpZ2luRGF0
YT4gbV9vcmlnaW5zQmVpbmdEZWxldGVkOwogICAgIGJvb2wgaXNEZWxldGluZ0RhdGFiYXNlT3JP
cmlnaW5Gb3IoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
ICAgICB2b2lkIHJlY29yZENyZWF0aW5nRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dpbmRvd1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dpbmRv
d1Byb3h5LmNwcAppbmRleCA1YzFkZjNmYjhkNDQ4YmJiMGM2YTFjYTAzYzZiZjM5N2I4YmM2NmMx
Li5iMzEzMGI3NzQ2MWM4NWNmOWU4YjRmNDJjZDgwZDgzMjE0OTAyZTZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuY3BwCkBAIC01NCwxNCArNTQsMTMgQEAgc3Rh
dGljIHZvaWQgY29sbGVjdEdhcmJhZ2VBZnRlcldpbmRvd1Byb3h5RGVzdHJ1Y3Rpb24oKQogCiBX
aW5kb3dQcm94eTo6V2luZG93UHJveHkoQWJzdHJhY3RGcmFtZSYgZnJhbWUpCiAgICAgOiBtX2Zy
YW1lKG1ha2VXZWFrUHRyKGZyYW1lKSkKLSAgICAsIG1fanNXaW5kb3dQcm94aWVzKG1ha2VVbmlx
dWVSZWY8UHJveHlNYXA+KCkpCiB7CiB9CiAKIFdpbmRvd1Byb3h5Ojp+V2luZG93UHJveHkoKQog
ewogICAgIEFTU0VSVCghbV9mcmFtZSk7Ci0gICAgQVNTRVJUKG1fanNXaW5kb3dQcm94aWVzLT5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpOwogfQog
CiBBYnN0cmFjdEZyYW1lKiBXaW5kb3dQcm94eTo6ZnJhbWUoKSBjb25zdApAQCAtNzYsOSArNzUs
OSBAQCB2b2lkIFdpbmRvd1Byb3h5OjpkZXRhY2hGcm9tRnJhbWUoKQogICAgIG1fZnJhbWUgPSBu
dWxscHRyOwogCiAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBkZXN0cm95aW5nIHdpbmRvd1Byb3hp
ZXMgd2lsbCBjcmVhdGUgYSBsb3Qgb2YgZ2FyYmFnZS4KLSAgICBpZiAoIW1fanNXaW5kb3dQcm94
aWVzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgd2hpbGUgKCFtX2pzV2luZG93UHJveGllcy0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGl0ID0gbV9qc1dpbmRvd1Byb3hpZXMtPmJlZ2lu
KCk7CisgICAgaWYgKCFtX2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgd2hp
bGUgKCFtX2pzV2luZG93UHJveGllcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXQg
PSBtX2pzV2luZG93UHJveGllcy5iZWdpbigpOwogICAgICAgICAgICAgaXQtPnZhbHVlLT53aW5k
b3coKS0+c2V0Q29uc29sZUNsaWVudChudWxscHRyKTsKICAgICAgICAgICAgIGRlc3Ryb3lKU1dp
bmRvd1Byb3h5KCppdC0+a2V5KTsKICAgICAgICAgfQpAQCAtODgsOCArODcsOCBAQCB2b2lkIFdp
bmRvd1Byb3h5OjpkZXRhY2hGcm9tRnJhbWUoKQogCiB2b2lkIFdpbmRvd1Byb3h5OjpkZXN0cm95
SlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIEFTU0VSVChtX2pz
V2luZG93UHJveGllcy0+Y29udGFpbnMoJndvcmxkKSk7Ci0gICAgbV9qc1dpbmRvd1Byb3hpZXMt
PnJlbW92ZSgmd29ybGQpOworICAgIEFTU0VSVChtX2pzV2luZG93UHJveGllcy5jb250YWlucygm
d29ybGQpKTsKKyAgICBtX2pzV2luZG93UHJveGllcy5yZW1vdmUoJndvcmxkKTsKICAgICB3b3Js
ZC5kaWREZXN0cm95V2luZG93UHJveHkodGhpcyk7CiB9CiAKQEAgLTk3LDIwICs5NiwyMCBAQCBK
U1dpbmRvd1Byb3h5JiBXaW5kb3dQcm94eTo6Y3JlYXRlSlNXaW5kb3dQcm94eShET01XcmFwcGVy
V29ybGQmIHdvcmxkKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKIAotICAgIEFTU0VSVCghbV9q
c1dpbmRvd1Byb3hpZXMtPmNvbnRhaW5zKCZ3b3JsZCkpOworICAgIEFTU0VSVCghbV9qc1dpbmRv
d1Byb3hpZXMuY29udGFpbnMoJndvcmxkKSk7CiAgICAgQVNTRVJUKG1fZnJhbWUtPndpbmRvdygp
KTsKIAogICAgIFZNJiB2bSA9IHdvcmxkLnZtKCk7CiAKICAgICBTdHJvbmc8SlNXaW5kb3dQcm94
eT4ganNXaW5kb3dQcm94eSh2bSwgJkpTV2luZG93UHJveHk6OmNyZWF0ZSh2bSwgKm1fZnJhbWUt
PndpbmRvdygpLCB3b3JsZCkpOwotICAgIG1fanNXaW5kb3dQcm94aWVzLT5hZGQoJndvcmxkLCBq
c1dpbmRvd1Byb3h5KTsKKyAgICBtX2pzV2luZG93UHJveGllcy5hZGQoJndvcmxkLCBqc1dpbmRv
d1Byb3h5KTsKICAgICB3b3JsZC5kaWRDcmVhdGVXaW5kb3dQcm94eSh0aGlzKTsKICAgICByZXR1
cm4gKmpzV2luZG93UHJveHkuZ2V0KCk7CiB9CiAKIFZlY3RvcjxKU0M6OlN0cm9uZzxKU1dpbmRv
d1Byb3h5Pj4gV2luZG93UHJveHk6OmpzV2luZG93UHJveGllc0FzVmVjdG9yKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY29weVRvVmVjdG9yKG1fanNXaW5kb3dQcm94aWVzLT52YWx1ZXMoKSk7Cisg
ICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX2pzV2luZG93UHJveGllcy52YWx1ZXMoKSk7CiB9CiAK
IEpTRE9NR2xvYmFsT2JqZWN0KiBXaW5kb3dQcm94eTo6Z2xvYmFsT2JqZWN0KERPTVdyYXBwZXJX
b3JsZCYgd29ybGQpCkBAIC0xMzMsNyArMTMyLDcgQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJv
eHk6OmNyZWF0ZUpTV2luZG93UHJveHlXaXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlclcK
IAogdm9pZCBXaW5kb3dQcm94eTo6Y2xlYXJKU1dpbmRvd1Byb3hpZXNOb3RNYXRjaGluZ0RPTVdp
bmRvdyhBYnN0cmFjdERPTVdpbmRvdyogbmV3RE9NV2luZG93LCBib29sIGdvaW5nSW50b0JhY2tG
b3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYgKG1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpCisg
ICAgaWYgKG1fanNXaW5kb3dQcm94aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CkBAIC0xNTksNyArMTU4LDcgQEAgdm9p
ZCBXaW5kb3dQcm94eTo6c2V0RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdET01XaW5k
b3cpCiB7CiAgICAgQVNTRVJUKG5ld0RPTVdpbmRvdyk7CiAKLSAgICBpZiAobV9qc1dpbmRvd1By
b3hpZXMtPmlzRW1wdHkoKSkKKyAgICBpZiAobV9qc1dpbmRvd1Byb3hpZXMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xOTQsNyArMTkzLDcg
QEAgdm9pZCBXaW5kb3dQcm94eTo6c2V0RE9NV2luZG93KEFic3RyYWN0RE9NV2luZG93KiBuZXdE
T01XaW5kb3cpCiAKIHZvaWQgV2luZG93UHJveHk6OmF0dGFjaERlYnVnZ2VyKEpTQzo6RGVidWdn
ZXIqIGRlYnVnZ2VyKQogewotICAgIGZvciAoYXV0byYgd2luZG93UHJveHkgOiBtX2pzV2luZG93
UHJveGllcy0+dmFsdWVzKCkpCisgICAgZm9yIChhdXRvJiB3aW5kb3dQcm94eSA6IG1fanNXaW5k
b3dQcm94aWVzLnZhbHVlcygpKQogICAgICAgICB3aW5kb3dQcm94eS0+YXR0YWNoRGVidWdnZXIo
ZGVidWdnZXIpOwogfQogCkBAIC0yMDUsMTcgKzIwNCwxNyBAQCBBYnN0cmFjdERPTVdpbmRvdyog
V2luZG93UHJveHk6OndpbmRvdygpIGNvbnN0CiAKIFdpbmRvd1Byb3h5OjpQcm94eU1hcDo6VmFs
dWVzQ29uc3RJdGVyYXRvclJhbmdlIFdpbmRvd1Byb3h5Ojpqc1dpbmRvd1Byb3hpZXMoKSBjb25z
dAogewotICAgIHJldHVybiBtX2pzV2luZG93UHJveGllcy0+dmFsdWVzKCk7CisgICAgcmV0dXJu
IG1fanNXaW5kb3dQcm94aWVzLnZhbHVlcygpOwogfQogCiBXaW5kb3dQcm94eTo6UHJveHlNYXAg
V2luZG93UHJveHk6OnJlbGVhc2VKU1dpbmRvd1Byb3hpZXMoKQogewotICAgIHJldHVybiBzdGQ6
OmV4Y2hhbmdlKG1fanNXaW5kb3dQcm94aWVzLCBtYWtlVW5pcXVlUmVmPFByb3h5TWFwPigpKTsK
KyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2pzV2luZG93UHJveGllcywgeyB9KTsKIH0KIAog
dm9pZCBXaW5kb3dQcm94eTo6c2V0SlNXaW5kb3dQcm94aWVzKFByb3h5TWFwJiYgd2luZG93UHJv
eGllcykKIHsKLSAgICBtX2pzV2luZG93UHJveGllcyA9IG1ha2VVbmlxdWVSZWY8UHJveHlNYXA+
KFdURk1vdmUod2luZG93UHJveGllcykpOworICAgIG1fanNXaW5kb3dQcm94aWVzID0gV1RGTW92
ZSh3aW5kb3dQcm94aWVzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dpbmRvd1Byb3h5LmgKaW5kZXggMTE4MTc3YzVlNDQ3M2Y3Y2NmNzZi
MTVhMGI1NWQ0YTRkMTcyMWQ2Zi4uZGIwMzQ3NDQyZWZkNTlkMzQxOGE5OGI4N2ZhMGJhMmRjNzcy
M2JlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC0yMyw3
ICsyMyw2IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Ryb25nLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTc0LDggKzczLDggQEAgcHVibGljOgogCiAgICAgSlNXaW5kb3dQcm94eSogZXhpc3Rp
bmdKU1dpbmRvd1Byb3h5KERPTVdyYXBwZXJXb3JsZCYgd29ybGQpIGNvbnN0CiAgICAgewotICAg
ICAgICBhdXRvIGl0ID0gbV9qc1dpbmRvd1Byb3hpZXMtPmZpbmQoJndvcmxkKTsKLSAgICAgICAg
cmV0dXJuIChpdCAhPSBtX2pzV2luZG93UHJveGllcy0+ZW5kKCkpID8gaXQtPnZhbHVlLmdldCgp
IDogbnVsbHB0cjsKKyAgICAgICAgYXV0byBpdCA9IG1fanNXaW5kb3dQcm94aWVzLmZpbmQoJndv
cmxkKTsKKyAgICAgICAgcmV0dXJuIGl0ICE9IG1fanNXaW5kb3dQcm94aWVzLmVuZCgpID8gaXQt
PnZhbHVlLmdldCgpIDogbnVsbHB0cjsKICAgICB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtOTYsNyAr
OTUsNyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIEpTV2luZG93UHJveHkmIGNyZWF0
ZUpTV2luZG93UHJveHlXaXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlcldvcmxkJik7CiAK
ICAgICBXZWFrUHRyPEFic3RyYWN0RnJhbWU+IG1fZnJhbWU7Ci0gICAgVW5pcXVlUmVmPFByb3h5
TWFwPiBtX2pzV2luZG93UHJveGllczsKKyAgICBQcm94eU1hcCBtX2pzV2luZG93UHJveGllczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYmFjNTI5ODQxMDJlYjAwNDVk
YzY1MzVhZTY4ZTY4YjliNDY2OGQwMy4uZWMzNWM0MDIyZjUzZTgyNzNmMzU4M2QxYzY2MzBkODQy
MDU3Yzg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKQEAgLTE3NTQsMTMgKzE3NTQsMTMgQEAgc3RhdGljIFJlZjxDU1NWYWx1
ZUxpc3Q+IGNvbnRlbnRUb0NTU1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIAogc3Rh
dGljIFJlZjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7Ci0gICAgYXV0byogbWFwID0gc3R5bGUu
Y291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICBpZiAoIW1hcCkKKyAgICBhdXRvJiBtYXAgPSBzdHls
ZS5jb3VudGVyRGlyZWN0aXZlcygpOworICAgIGlmIChtYXAuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKIAogICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCk7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiAqbWFwKSB7CisgICAgZm9yIChhdXRv
JiBrZXlWYWx1ZSA6IG1hcCkgewogICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKGtleVZhbHVlLmtleSwgQ1NTVW5pdFR5cGU6OkNTU19TVFJJTkcpKTsKICAgICAg
ICAgZG91YmxlIG51bWJlciA9IChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Q291bnRlckluY3Jl
bWVudCA/IGtleVZhbHVlLnZhbHVlLmluY3JlbWVudFZhbHVlIDoga2V5VmFsdWUudmFsdWUucmVz
ZXRWYWx1ZSkudmFsdWVPcigwKTsKICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShudW1iZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCmlu
ZGV4IDA2YzEzNDg5NjAxYTgyYjI3ZTJlYjQ3ZTM0MWM3YjQzZWJlN2IyZTcuLjdhZmRkZDk4MWE3
ODRiNDY3Y2VjMjhjYzI3ODVjYTZjOTc1ZTQ4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zMzMsMTAgKzMz
Myw3IEBAIFJlZlB0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uOjp3cmFwRm9yRGVwcmVjYXRlZENTCiAKICAgICAvLyBUaGUgbWFwIGlzIGhlcmUg
dG8gbWFpbnRhaW4gdGhlIG9iamVjdCBpZGVudGl0eSBvZiB0aGUgQ1NTVmFsdWVzIG92ZXIgbXVs
dGlwbGUgaW52b2NhdGlvbnMuCiAgICAgLy8gRklYTUU6IEl0IGlzIGxpa2VseSB0aGF0IHRoZSBp
ZGVudGl0eSBpcyBub3QgaW1wb3J0YW50IGZvciB3ZWIgY29tcGF0aWJpbGl0eSBhbmQgdGhpcyBj
b2RlIHNob3VsZCBiZSByZW1vdmVkLgotICAgIGlmICghbV9jc3NvbVZhbHVlV3JhcHBlcnMpCi0g
ICAgICAgIG1fY3Nzb21WYWx1ZVdyYXBwZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPENTU1ZhbHVl
KiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4+PigpOwotICAgIAotICAgIGF1dG8mIGNs
b25lZFZhbHVlID0gbV9jc3NvbVZhbHVlV3JhcHBlcnMtPmFkZChpbnRlcm5hbFZhbHVlLCBXZWFr
UHRyPERlcHJlY2F0ZWRDU1NPTVZhbHVlPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYg
Y2xvbmVkVmFsdWUgPSBtX2Nzc29tVmFsdWVXcmFwcGVycy5hZGQoaW50ZXJuYWxWYWx1ZSwgV2Vh
a1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChj
bG9uZWRWYWx1ZSkKICAgICAgICAgcmV0dXJuIGNsb25lZFZhbHVlLmdldCgpOwogCkBAIC00MDAs
NyArMzk3LDcgQEAgdm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUo
TXV0YXRpb25UeXBlIHR5cGUpCiAgICAgQVNTRVJUKG1fcGFyZW50UnVsZS0+cGFyZW50U3R5bGVT
aGVldCgpKTsKIAogICAgIGlmICh0eXBlID09IFByb3BlcnR5Q2hhbmdlZCkKLSAgICAgICAgbV9j
c3NvbVZhbHVlV3JhcHBlcnMgPSBudWxscHRyOworICAgICAgICBtX2Nzc29tVmFsdWVXcmFwcGVy
cy5jbGVhcigpOwogCiAgICAgLy8gU3R5bGUgc2hlZXQgbXV0YXRpb24gbmVlZHMgdG8gYmUgc2ln
bmFsZWQgZXZlbiBpZiB0aGUgY2hhbmdlIGZhaWxlZC4gd2lsbE11dGF0ZSovZGlkTXV0YXRlKiBt
dXN0IHBhaXIuCiAgICAgbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmRpZE11dGF0
ZVJ1bGVGcm9tQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwpAQCAtNDQzLDcgKzQ0MCw3IEBAIHZvaWQg
SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0YXRlKE11dGF0aW9uVHlwZSB0eXBlKQog
ICAgIGlmICh0eXBlID09IE5vQ2hhbmdlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jc3Nv
bVZhbHVlV3JhcHBlcnMgPSBudWxscHRyOworICAgIG1fY3Nzb21WYWx1ZVdyYXBwZXJzLmNsZWFy
KCk7CiAKICAgICBpZiAoIW1fcGFyZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCmlu
ZGV4IDYyYThmOTg5YThmYTJjMWVjMGNkMmZlZjE3ODJiMmIxZTM3M2RhN2QuLjU3OTU5YTMyNzkw
NDljMmJlNzIwNzI0ZWUzMzExNmFiZTAyMzc2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgKQEAgLTU5LDcgKzU5LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgQ1NTUGFyc2VyQ29udGV4dCBjc3NQYXJzZXJDb250ZXh0
KCkgY29uc3Q7CiAKICAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBtX3Byb3BlcnR5U2V0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPENTU1ZhbHVlKiwgV2Vha1B0cjxEZXByZWNhdGVk
Q1NTT01WYWx1ZT4+PiBtX2Nzc29tVmFsdWVXcmFwcGVyczsKKyAgICBIYXNoTWFwPENTU1ZhbHVl
KiwgV2Vha1B0cjxEZXByZWNhdGVkQ1NTT01WYWx1ZT4+IG1fY3Nzb21WYWx1ZVdyYXBwZXJzOwog
CiBwcml2YXRlOgogICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCAwNDdiZWRiZDM1NDM3MzQ4OTlkMmI4OWMwZWQ5YzBkMmJhNTYwODcwLi4yNjYxMDI2
NzQ3YzU1ZDc1M2MwM2QxYzI1NjJmY2FlMTYzNGIzMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTg4Nyw3ICs4ODcsNyBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZvckFjY2Vz
c0tleShjb25zdCBTdHJpbmcmIGtleSkKIAogdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlD
YWNoZSgpCiB7Ci0gICAgbV9hY2Nlc3NLZXlDYWNoZSA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJp
bmcsIEVsZW1lbnQqLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PihbdGhpc10geworICAgIG1f
YWNjZXNzS2V5Q2FjaGUgPSBbdGhpc10gewogICAgICAgICBIYXNoTWFwPFN0cmluZywgRWxlbWVu
dCosIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBjb21wb3NlZFRyZWVEZXNjZW5kYW50cygqdGhpcykpIHsKICAgICAgICAgICAgIGlmICgh
aXM8RWxlbWVudD4obm9kZSkpCkBAIC04OTksMTIgKzg5OSwxMiBAQCB2b2lkIERvY3VtZW50Ojpi
dWlsZEFjY2Vzc0tleUNhY2hlKCkKICAgICAgICAgICAgIG1hcC5hZGQoa2V5LCAmZWxlbWVudCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1hcDsKLSAgICB9KCkpOworICAgIH0oKTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6aW52YWxpZGF0ZUFjY2Vzc0tleUNhY2hlU2xvd0Nhc2UoKQogewot
ICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBudWxscHRyOworICAgIG1fYWNjZXNzS2V5Q2FjaGUgPSBX
VEY6Om51bGxvcHQ7CiB9CiAKIEV4Y2VwdGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1bWVudDo6
c2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nKQpAQCAt
MjYzMSwxMSArMjYzMSwxMSBAQCB2b2lkIERvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1l
KCkKICAgICBjb21tb25UZWFyZG93bigpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAg
ICBpZiAobV90b3VjaEV2ZW50VGFyZ2V0cyAmJiBtX3RvdWNoRXZlbnRUYXJnZXRzLT5zaXplKCkg
JiYgcGFyZW50RG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMuaXNFbXB0
eSgpICYmIHBhcmVudERvY3VtZW50KCkpCiAgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJl
bW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CiAjZW5kaWYKIAotICAgIGlmIChtX3doZWVsRXZl
bnRUYXJnZXRzICYmIG1fd2hlZWxFdmVudFRhcmdldHMtPnNpemUoKSAmJiBwYXJlbnREb2N1bWVu
dCgpKQorICAgIGlmICghbV93aGVlbEV2ZW50VGFyZ2V0cy5pc0VtcHR5KCkgJiYgcGFyZW50RG9j
dW1lbnQoKSkKICAgICAgICAgcGFyZW50RG9jdW1lbnQoKS0+ZGlkUmVtb3ZlRXZlbnRUYXJnZXRO
b2RlKCp0aGlzKTsKIAogICAgIGlmIChtX21lZGlhUXVlcnlNYXRjaGVyKQpAQCAtMjY4Nyw5ICsy
Njg3LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogICAgICAg
ICBub2RlLT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICBtX3RvdWNoRXZlbnRUYXJnZXRzID0gbnVsbHB0cjsKKyAgICBtX3RvdWNoRXZl
bnRUYXJnZXRzLmNsZWFyKCk7CiAjZW5kaWYKLSAgICBtX3doZWVsRXZlbnRUYXJnZXRzID0gbnVs
bHB0cjsKKyAgICBtX3doZWVsRXZlbnRUYXJnZXRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnN1c3BlbmREZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKQpAQCAtNjgxOCwx
NiArNjgxOCwxMyBAQCB2b2lkIERvY3VtZW50Ojp3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKE5v
ZGUqIG5vZGUpCiAgICAgVU5VU0VEX1BBUkFNKG5vZGUpOwogI2VuZGlmCiAKLSAgICBib29sIGhh
dmVIYW5kbGVycyA9IG1fd2hlZWxFdmVudFRhcmdldHMgJiYgIW1fd2hlZWxFdmVudFRhcmdldHMt
PmlzRW1wdHkoKTsKKyAgICBib29sIGhhdmVIYW5kbGVycyA9ICFtX3doZWVsRXZlbnRUYXJnZXRz
LmlzRW1wdHkoKTsKICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS53aGVlbEV2ZW50SGFuZGxl
cnNDaGFuZ2VkKGhhdmVIYW5kbGVycyk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFdoZWVs
RXZlbnRIYW5kbGVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFtX3doZWVsRXZlbnRUYXJnZXRz
KQotICAgICAgICBtX3doZWVsRXZlbnRUYXJnZXRzID0gbWFrZVVuaXF1ZTxFdmVudFRhcmdldFNl
dD4oKTsKLQotICAgIG1fd2hlZWxFdmVudFRhcmdldHMtPmFkZCgmbm9kZSk7CisgICAgbV93aGVl
bEV2ZW50VGFyZ2V0cy5hZGQoJm5vZGUpOwogICAgIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQo
Jm5vZGUpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpCkBAIC02ODU2
LDQyICs2ODUzLDI3IEBAIHN0YXRpYyBib29sIHJlbW92ZUhhbmRsZXJGcm9tU2V0KEV2ZW50VGFy
Z2V0U2V0JiBoYW5kbGVyU2V0LCBOb2RlJiBub2RlLCBFdmVudEhhCiAKIHZvaWQgRG9jdW1lbnQ6
OmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKE5vZGUmIG5vZGUsIEV2ZW50SGFuZGxlclJlbW92
YWwgcmVtb3ZhbCkKIHsKLSAgICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVtb3ZlSGFuZGxlckZyb21TZXQoKm1fd2hlZWxFdmVudFRhcmdl
dHMsIG5vZGUsIHJlbW92YWwpKQorICAgIGlmICghcmVtb3ZlSGFuZGxlckZyb21TZXQobV93aGVl
bEV2ZW50VGFyZ2V0cywgbm9kZSwgcmVtb3ZhbCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIHdo
ZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoJm5vZGUpOwotCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IHRoaXMtPmZyYW1lKCkpCiAgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRDaGFuZ2VFdmVu
dEhhbmRsZXJzKCpmcmFtZSk7CiB9CiAKIHVuc2lnbmVkIERvY3VtZW50Ojp3aGVlbEV2ZW50SGFu
ZGxlckNvdW50KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fd2hlZWxFdmVudFRhcmdldHMpCi0gICAg
ICAgIHJldHVybiAwOwotCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0byYg
aGFuZGxlciA6ICptX3doZWVsRXZlbnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxlciA6
IG1fd2hlZWxFdmVudFRhcmdldHMpCiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7Ci0K
ICAgICByZXR1cm4gY291bnQ7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZEFkZFRvdWNoRXZlbnRI
YW5kbGVyKE5vZGUmIGhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBp
ZiAoIW1fdG91Y2hFdmVudFRhcmdldHMpCi0gICAgICAgIG1fdG91Y2hFdmVudFRhcmdldHMgPSBt
YWtlVW5pcXVlPEV2ZW50VGFyZ2V0U2V0PigpOwotCi0gICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+
YWRkKCZoYW5kbGVyKTsKLQotICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9jdW1l
bnQoKSkgeworICAgIG1fdG91Y2hFdmVudFRhcmdldHMuYWRkKCZoYW5kbGVyKTsKKyAgICBpZiAo
YXV0byBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKQogICAgICAgICBwYXJlbnQtPmRpZEFkZFRv
dWNoRXZlbnRIYW5kbGVyKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwogI2VuZGlmCkBAIC02OTAwLDEyICs2ODgyLDkgQEAg
dm9pZCBEb2N1bWVudDo6ZGlkQWRkVG91Y2hFdmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlcikKIHZv
aWQgRG9jdW1lbnQ6OmRpZFJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKE5vZGUmIGhhbmRsZXIsIEV2
ZW50SGFuZGxlclJlbW92YWwgcmVtb3ZhbCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQot
ICAgIGlmICghbV90b3VjaEV2ZW50VGFyZ2V0cykKKyAgICBpZiAoIXJlbW92ZUhhbmRsZXJGcm9t
U2V0KG1fdG91Y2hFdmVudFRhcmdldHMsIGhhbmRsZXIsIHJlbW92YWwpKQogICAgICAgICByZXR1
cm47Ci0KLSAgICByZW1vdmVIYW5kbGVyRnJvbVNldCgqbV90b3VjaEV2ZW50VGFyZ2V0cywgaGFu
ZGxlciwgcmVtb3ZhbCk7Ci0KLSAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERvY3Vt
ZW50KCkpCisgICAgaWYgKGF1dG8gcGFyZW50ID0gcGFyZW50RG9jdW1lbnQoKSkKICAgICAgICAg
cGFyZW50LT5kaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqdGhpcyk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShoYW5kbGVyKTsKQEAgLTY5MTYsMzAgKzY4OTUsMjEgQEAgdm9pZCBEb2N1bWVu
dDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoTm9kZSYgaGFuZGxlciwgRXZlbnRIYW5kbGVy
UmVtb3ZhbCByZW0KIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZShOb2Rl
JiBoYW5kbGVyKQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKG1fdG91Y2hF
dmVudFRhcmdldHMpIHsKLSAgICAgICAgbV90b3VjaEV2ZW50VGFyZ2V0cy0+cmVtb3ZlQWxsKCZo
YW5kbGVyKTsKLSAgICAgICAgaWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1fdG91Y2hFdmVudFRh
cmdldHMtPmlzRW1wdHkoKSkgJiYgcGFyZW50RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHBhcmVu
dERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7Ci0gICAgfQorICAg
IG1fdG91Y2hFdmVudFRhcmdldHMucmVtb3ZlQWxsKCZoYW5kbGVyKTsKKyAgICBpZiAoKCZoYW5k
bGVyID09IHRoaXMgfHwgbV90b3VjaEV2ZW50VGFyZ2V0cy5pc0VtcHR5KCkpICYmIHBhcmVudERv
Y3VtZW50KCkpCisgICAgICAgIHBhcmVudERvY3VtZW50KCktPmRpZFJlbW92ZUV2ZW50VGFyZ2V0
Tm9kZSgqdGhpcyk7CiAjZW5kaWYKLQotICAgIGlmIChtX3doZWVsRXZlbnRUYXJnZXRzKSB7Ci0g
ICAgICAgIG1fd2hlZWxFdmVudFRhcmdldHMtPnJlbW92ZUFsbCgmaGFuZGxlcik7Ci0gICAgICAg
IGlmICgoJmhhbmRsZXIgPT0gdGhpcyB8fCBtX3doZWVsRXZlbnRUYXJnZXRzLT5pc0VtcHR5KCkp
ICYmIHBhcmVudERvY3VtZW50KCkpCi0gICAgICAgICAgICBwYXJlbnREb2N1bWVudCgpLT5kaWRS
ZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwotICAgIH0KKyAgICBtX3doZWVsRXZlbnRUYXJn
ZXRzLnJlbW92ZUFsbCgmaGFuZGxlcik7CisgICAgaWYgKCgmaGFuZGxlciA9PSB0aGlzIHx8IG1f
d2hlZWxFdmVudFRhcmdldHMuaXNFbXB0eSgpKSAmJiBwYXJlbnREb2N1bWVudCgpKQorICAgICAg
ICBwYXJlbnREb2N1bWVudCgpLT5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwogfQog
CiB1bnNpZ25lZCBEb2N1bWVudDo6dG91Y2hFdmVudEhhbmRsZXJDb3VudCgpIGNvbnN0CiB7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoIW1fdG91Y2hFdmVudFRhcmdldHMpCi0g
ICAgICAgIHJldHVybiAwOwotCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoYXV0
byYgaGFuZGxlciA6ICptX3RvdWNoRXZlbnRUYXJnZXRzKQorICAgIGZvciAoYXV0byYgaGFuZGxl
ciA6IG1fdG91Y2hFdmVudFRhcmdldHMpCiAgICAgICAgIGNvdW50ICs9IGhhbmRsZXIudmFsdWU7
Ci0KICAgICByZXR1cm4gY291bnQ7CiAjZWxzZQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCA4NGZkMjFhNjZkNzhhNGY0Mjg2N2YxZjRkMDU0NGI0NjY5ODUzMjA3Li5jY2Vh
NGExOTEwZDU5NmU1YjE4ZTU0NmRlMjlkMzhhZDlkNmYwYTk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtMTI0Myw4ICsxMjQzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2ln
bmVkIHN0eWxlUmVjYWxjQ291bnQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgYm9vbCBoYXNUb3VjaEV2ZW50SGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNo
RXZlbnRUYXJnZXRzLmdldCgpID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+c2l6ZSgpIDogZmFsc2U7
IH0KLSAgICBib29sIHRvdWNoRXZlbnRUYXJnZXRzQ29udGFpbihOb2RlJiBub2RlKSBjb25zdCB7
IHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzID8gbV90b3VjaEV2ZW50VGFyZ2V0cy0+Y29udGFp
bnMoJm5vZGUpIDogZmFsc2U7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRIYW5kbGVycygpIGNv
bnN0IHsgcmV0dXJuICFtX3RvdWNoRXZlbnRUYXJnZXRzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
dG91Y2hFdmVudFRhcmdldHNDb250YWluKE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1fdG91
Y2hFdmVudFRhcmdldHMuY29udGFpbnMoJm5vZGUpOyB9CiAjZWxzZQogICAgIGJvb2wgaGFzVG91
Y2hFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHRvdWNo
RXZlbnRUYXJnZXRzQ29udGFpbihOb2RlJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEy
NjksMTQgKzEyNjksMTQgQEAgcHVibGljOgogICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0KiB0b3Vj
aEV2ZW50VGFyZ2V0cygpIGNvbnN0CiAgICAgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgICAgIHJldHVybiBtX3RvdWNoRXZlbnRUYXJnZXRzLmdldCgpOworICAgICAgICByZXR1cm4g
Jm1fdG91Y2hFdmVudFRhcmdldHM7CiAjZWxzZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNl
bmRpZgogICAgIH0KIAotICAgIGJvb2wgaGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV93aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKSA/IG1fd2hlZWxFdmVudFRhcmdldHMtPnNp
emUoKSA6IGZhbHNlOyB9Ci0gICAgY29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRUYXJn
ZXRzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50VGFyZ2V0cy5nZXQoKTsgfQorICAgIGJv
b2wgaGFzV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gIW1fd2hlZWxFdmVudFRh
cmdldHMuaXNFbXB0eSgpOyB9CisgICAgY29uc3QgRXZlbnRUYXJnZXRTZXQqIHdoZWVsRXZlbnRU
YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gJm1fd2hlZWxFdmVudFRhcmdldHM7IH0KIAogICAgIHVz
aW5nIFJlZ2lvbkZpeGVkUGFpciA9IHN0ZDo6cGFpcjxSZWdpb24sIGJvb2w+OwogICAgIFJlZ2lv
bkZpeGVkUGFpciBhYnNvbHV0ZUV2ZW50UmVnaW9uRm9yTm9kZShOb2RlJik7CkBAIC0xODgyLDcg
KzE4ODIsNyBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
Kj4gbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHM7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGFzaE1hcDxTdHJpbmcsIEVsZW1lbnQqLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBt
X2FjY2Vzc0tleUNhY2hlOworICAgIE9wdGlvbmFsPEhhc2hNYXA8U3RyaW5nLCBFbGVtZW50Kiwg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gbV9hY2Nlc3NLZXlDYWNoZTsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb25zdGFudFByb3BlcnR5TWFwPiBtX2NvbnN0YW50UHJvcGVydHlNYXA7CiAK
QEAgLTE5MjMsNyArMTkyMyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlNYXRj
aGVyPiBtX21lZGlhUXVlcnlNYXRjaGVyOwogICAgIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50VGFyZ2V0U2V0PiBtX3RvdWNoRXZlbnRUYXJnZXRz
OworICAgIEV2ZW50VGFyZ2V0U2V0IG1fdG91Y2hFdmVudFRhcmdldHM7CiAjZW5kaWYKICNpZiBF
TkFCTEUoVE9VQ0hfQUNUSU9OX1JFR0lPTlMpCiAgICAgYm9vbCBtX21heUhhdmVFbGVtZW50c1dp
dGhOb25BdXRvVG91Y2hBY3Rpb24geyBmYWxzZSB9OwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9tYXlIYXZlUmVuZGVyZWRTVkdGb3JlaWduT2JqZWN0cyB7IGZh
bHNlIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRUYXJnZXRTZXQ+IG1fd2hlZWxFdmVu
dFRhcmdldHM7CisgICAgRXZlbnRUYXJnZXRTZXQgbV93aGVlbEV2ZW50VGFyZ2V0czsKIAogICAg
IE1vbm90b25pY1RpbWUgbV9sYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wOwogICAgIE1v
bm90b25pY1RpbWUgbV91c2VyQWN0aXZhdGVkTWVkaWFGaW5pc2hlZFBsYXlpbmdUaW1lc3RhbXA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCmlu
ZGV4IDk0MGVmY2FlZDgzMDkxYzI1ODNmYTllMzM2ZWYzZDc4YzU0YWEzZGMuLmZjYjMwZDU0Y2E4
OTQ4NzJiMTI0MjkyNjM1YmQ3NjJmOTk0ZjQ2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCkBAIC0zNCwzNSArMzQsMzIgQEAgdm9pZCBJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6OmFkZE9ic2VydmVyKGNvbnN0IEF0b21TdHJpbmcmIGlk
LCBJZFRhcmdldE9ic2VydmUKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgSWRUb09ic2VydmVyU2V0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9y
ZWdpc3RyeS5hZGQoaWQuaW1wbCgpLCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtYWtlVW5pcXVlPE9ic2VydmVy
U2V0PigpOwotCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKG9ic2VydmVyKTsKKyAg
ICBtX3JlZ2lzdHJ5LmFkZChpZC5pbXBsKCksIE9ic2VydmVyU2V0IHsgfSkuaXRlcmF0b3ItPnZh
bHVlLmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpy
ZW1vdmVPYnNlcnZlcihjb25zdCBBdG9tU3RyaW5nJiBpZCwgSWRUYXJnZXRPYnNlcnZlciogb2Jz
ZXJ2ZXIpCiB7Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSB8fCBtX3JlZ2lzdHJ5LmlzRW1wdHkoKSkK
KyAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBJZFRvT2JzZXJ2
ZXJTZXRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lzdHJ5LmZpbmQoaWQuaW1wbCgpKTsKLQot
ICAgIE9ic2VydmVyU2V0KiBzZXQgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICBzZXQtPnJlbW92
ZShvYnNlcnZlcik7Ci0gICAgaWYgKHNldC0+aXNFbXB0eSgpICYmIHNldCAhPSBtX25vdGlmeWlu
Z09ic2VydmVyc0luU2V0KQotICAgICAgICBtX3JlZ2lzdHJ5LnJlbW92ZShpdGVyKTsKKyAgICBh
dXRvIGl0ZXJhdG9yID0gbV9yZWdpc3RyeS5maW5kKGlkLmltcGwoKSk7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fcmVnaXN0cnkuZW5kKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byYgc2V0ID0gaXRlcmF0b3ItPnZhbHVl
OworICAgIHNldC5yZW1vdmUob2JzZXJ2ZXIpOworICAgIGlmIChzZXQuaXNFbXB0eSgpICYmICZz
ZXQgIT0gbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKKyAgICAgICAgbV9yZWdpc3RyeS5yZW1v
dmUoaXRlcmF0b3IpOwogfQogCiB2b2lkIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5
T2JzZXJ2ZXJzSW50ZXJuYWwoY29uc3QgQXRvbVN0cmluZ0ltcGwmIGlkKQogewotICAgIEFTU0VS
VCghbV9yZWdpc3RyeS5pc0VtcHR5KCkpOwotCi0gICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNl
dCA9IG1fcmVnaXN0cnkuZ2V0KCZpZCk7Ci0gICAgaWYgKCFtX25vdGlmeWluZ09ic2VydmVyc0lu
U2V0KQorICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlZ2lzdHJ5LmZpbmQoJmlkKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9yZWdpc3RyeS5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9u
b3RpZnlpbmdPYnNlcnZlcnNJblNldCA9ICZpdGVyYXRvci0+dmFsdWU7CisKICAgICBmb3IgKGF1
dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yKCptX25vdGlmeWluZ09ic2VydmVyc0luU2V0KSkg
ewogICAgICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMob2JzZXJ2
ZXIpKQogICAgICAgICAgICAgb2JzZXJ2ZXItPmlkVGFyZ2V0Q2hhbmdlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oCmluZGV4IGExZTYzYWNlMTNm
MzAzM2M0MzFhODg5ZjdhNmQyMGQ1OWFhN2NmMmEuLmJlNWEzZTU2MTVlYWY5YTljMjM5ODc1YTk2
YjYxN2ZkMGFlMDE0NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9i
c2VydmVyUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmgKQEAgLTQ5LDggKzQ5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZU9i
c2VydmVyKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBJZFRhcmdldE9ic2VydmVyKik7CiAgICAgdm9p
ZCBub3RpZnlPYnNlcnZlcnNJbnRlcm5hbChjb25zdCBBdG9tU3RyaW5nSW1wbCYgaWQpOwogCi0g
ICAgdHlwZWRlZiBIYXNoU2V0PElkVGFyZ2V0T2JzZXJ2ZXIqPiBPYnNlcnZlclNldDsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgQXRvbVN0cmluZ0ltcGwqLCBzdGQ6OnVuaXF1ZV9wdHI8T2Jz
ZXJ2ZXJTZXQ+PiBJZFRvT2JzZXJ2ZXJTZXRNYXA7CisgICAgdXNpbmcgT2JzZXJ2ZXJTZXQgPSBI
YXNoU2V0PElkVGFyZ2V0T2JzZXJ2ZXIqPjsKKyAgICB1c2luZyBJZFRvT2JzZXJ2ZXJTZXRNYXAg
PSBIYXNoTWFwPGNvbnN0IEF0b21TdHJpbmdJbXBsKiwgT2JzZXJ2ZXJTZXQ+OwogICAgIElkVG9P
YnNlcnZlclNldE1hcCBtX3JlZ2lzdHJ5OwogICAgIE9ic2VydmVyU2V0KiBtX25vdGlmeWluZ09i
c2VydmVyc0luU2V0IHsgbnVsbHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyLmNwcAppbmRleCA4YjNhMjVmOTVjOWY5YmM0YTYxNzllYzJiMDE1OGJhNmY4OTk4OTAy
Li42MTM3MzFmNjhmZDQ0M2RjNWZhM2M2YzY2NGE3ODRhMmViMzI2N2NiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBNdXRh
dGlvbk9ic2VydmVyOjpkZWxpdmVyKCkKICAgICAvLyBDYWxsaW5nIHRha2VUcmFuc2llbnRSZWdp
c3RyYXRpb25zKCkgY2FuIG1vZGlmeSBtX3JlZ2lzdHJhdGlvbnMsIHNvIGl0J3MgbmVjZXNzYXJ5
CiAgICAgLy8gdG8gbWFrZSBhIGNvcHkgb2YgdGhlIHRyYW5zaWVudCByZWdpc3RyYXRpb25zIGJl
Zm9yZSBvcGVyYXRpbmcgb24gdGhlbS4KICAgICBWZWN0b3I8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbiosIDE+IHRyYW5zaWVudFJlZ2lzdHJhdGlvbnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4sIDE+IG5vZGVzVG9LZWVwQWxp
dmU7CisgICAgVmVjdG9yPEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+LCAxPiBub2Rlc1Rv
S2VlcEFsaXZlOwogICAgIEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+IHBlbmRpbmdUYXJn
ZXRzOwogICAgIHBlbmRpbmdUYXJnZXRzLnN3YXAobV9wZW5kaW5nVGFyZ2V0cyk7CiAgICAgZm9y
IChhdXRvKiByZWdpc3RyYXRpb24gOiBtX3JlZ2lzdHJhdGlvbnMpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcAppbmRleCBjNmYx
ZmIxNWRmZjhkNWViZmYyZjVjNWI3YjdlZGUzYWUzZDBlYjc5Li44OTRlNDZjOGU1NDFiYzY5ZjM4
NjhkZTAwNzgyNzJjODFkMWYyNTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCkBAIC02OCwzMSArNjgsMjcgQEAgdm9pZCBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFj
aChOb2RlJiBub2RlKQogICAgIG5vZGUucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVy
KCp0aGlzKTsKICAgICBtX29ic2VydmVyLT5zZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24obm9k
ZS5kb2N1bWVudCgpKTsKIAotICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcykg
ewotICAgICAgICBtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzID0gbWFrZVVuaXF1ZTxIYXNo
U2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4oKTsKLQorICAgIGlmIChtX3RyYW5zaWVudFJlZ2lz
dHJhdGlvbk5vZGVzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2
ZSk7CiAgICAgICAgIG1fbm9kZUtlcHRBbGl2ZSA9ICZtX25vZGU7IC8vIEJhbGFuY2VkIGluIHRh
a2VUcmFuc2llbnRSZWdpc3RyYXRpb25zLgogICAgIH0KLSAgICBtX3RyYW5zaWVudFJlZ2lzdHJh
dGlvbk5vZGVzLT5hZGQobm9kZSk7CisgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5h
ZGQobm9kZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5v
ZGU+Pj4gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJh
dGlvbnMoKQorSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKQogewotICAgIGlmICghbV90
cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgeworICAgIGlmIChtX3RyYW5zaWVudFJlZ2lzdHJh
dGlvbk5vZGVzLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NFUlQoIW1fbm9kZUtlcHRBbGl2ZSk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAot
ICAgIGZvciAoYXV0byYgbm9kZSA6ICptX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQorICAg
IGZvciAoYXV0byYgbm9kZSA6IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAg
IG5vZGUtPnVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlzKTsKIAotICAg
IGF1dG8gcmV0dXJuVmFsdWUgPSBXVEZNb3ZlKG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMp
OwotCiAgICAgQVNTRVJUKG1fbm9kZUtlcHRBbGl2ZSk7CiAgICAgbV9ub2RlS2VwdEFsaXZlID0g
bnVsbHB0cjsgLy8gQmFsYW5jZWQgaW4gb2JzZXJ2ZVN1YnRyZWVOb2RlV2lsbERldGFjaC4KIAot
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3RyYW5z
aWVudFJlZ2lzdHJhdGlvbk5vZGVzLCB7IH0pOwogfQogCiBib29sIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0YXRp
b25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJp
YnV0ZU5hbWUpIGNvbnN0CkBAIC0xMTgsMTAgKzExNCw3IEBAIGJvb2wgTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpBYnN0cmFjdFNs
b3RWCiAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QobV9ub2RlKSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5v
ZGVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIG5vZGUgOiAqbV90
cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgeworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdHJh
bnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpIHsKICAgICAgICAgaWYgKHZpc2l0b3IuY29udGFpbnNP
cGFxdWVSb290KHJvb3Qobm9kZSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgK
aW5kZXggNzUzZGJmN2FkMzg5MGYwNzNlYzBlYTZhZTZiZDdiMTU2YmQ5NDRjNC4uYzQ4NWRlOWJh
NGU3Y2U4YjdlMGJkZDAyN2NkOTZmYzgzNDM2MmE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCkBAIC01Miw4ICs1Miw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcmVzZXRPYnNlcnZhdGlvbihNdXRhdGlvbk9ic2VydmVyT3B0aW9u
cywgY29uc3QgSGFzaFNldDxBdG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKICAgICB2b2lk
IG9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKE5vZGUmKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+IHRha2VUcmFuc2llbnRSZWdpc3RyYXRp
b25zKCk7Ci0gICAgYm9vbCBoYXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcyAmJiAhbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2Rlcy0+aXNFbXB0eSgpOyB9CisgICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4g
dGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKKyAgICBib29sIGhhc1RyYW5zaWVudFJlZ2lz
dHJhdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy5p
c0VtcHR5KCk7IH0KIAogICAgIGJvb2wgc2hvdWxkUmVjZWl2ZU11dGF0aW9uRnJvbShOb2RlJiwg
TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlLCBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRy
aWJ1dGVOYW1lKSBjb25zdDsKICAgICBib29sIGlzU3VidHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWU7IH0KQEAgLTY5LDcgKzY5LDcgQEAg
cHJpdmF0ZToKICAgICBSZWY8TXV0YXRpb25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKICAgICBOb2Rl
JiBtX25vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZUtlcHRBbGl2ZTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+IG1fdHJhbnNpZW50UmVnaXN0
cmF0aW9uTm9kZXM7CisgICAgSGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4gbV90cmFuc2ll
bnRSZWdpc3RyYXRpb25Ob2RlczsKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBtX29wdGlv
bnM7CiAgICAgSGFzaFNldDxBdG9tU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCmluZGV4IDZhNDRkNzI3MjZhOTg3NTg0MjY5
MTRmOWM3NzNjMTFmZDViNzA4YmMuLjc5OTRhNGQ4NDg5YWYyMjhmOWUzOWU2NzZlOGNjMTdhMDg4
Yjc5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCkBAIC0zNjMsMjgg
KzM2MywyNyBAQCBzdGF0aWMgU3RyaW5nIGZvcm1TdGF0ZVNpZ25hdHVyZSgpCiAgICAgcmV0dXJu
IHNpZ25hdHVyZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvcm1Db250cm9sbGVyOjpTYXZlZEZv
cm1TdGF0ZU1hcD4gRm9ybUNvbnRyb2xsZXI6OmNyZWF0ZVNhdmVkRm9ybVN0YXRlTWFwKGNvbnN0
IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQmIGNvbnRyb2xMaXN0KQorYXV0byBGb3JtQ29udHJvbGxl
cjo6Y3JlYXRlU2F2ZWRGb3JtU3RhdGVNYXAoY29uc3QgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCYg
Y29udHJvbExpc3QpIC0+IFNhdmVkRm9ybVN0YXRlTWFwCiB7CisgICAgU2F2ZWRGb3JtU3RhdGVN
YXAgbWFwOwogICAgIEZvcm1LZXlHZW5lcmF0b3Iga2V5R2VuZXJhdG9yOwotICAgIGF1dG8gc3Rh
dGVNYXAgPSBtYWtlVW5pcXVlPFNhdmVkRm9ybVN0YXRlTWFwPigpOwogICAgIGZvciAoYXV0byYg
Y29udHJvbCA6IGNvbnRyb2xMaXN0KSB7CiAgICAgICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2
ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgYXV0byYgZm9ybVN0YXRlID0gc3RhdGVNYXAtPmFkZChrZXlHZW5lcmF0b3IuZm9ybUtl
eSgqY29udHJvbCkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1
dG8mIGZvcm1TdGF0ZSA9IG1hcC5hZGQoa2V5R2VuZXJhdG9yLmZvcm1LZXkoKmNvbnRyb2wpLmlt
cGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoIWZvcm1TdGF0ZSkK
ICAgICAgICAgICAgIGZvcm1TdGF0ZSA9IG1ha2VVbmlxdWU8U2F2ZWRGb3JtU3RhdGU+KCk7CiAg
ICAgICAgIGZvcm1TdGF0ZS0+YXBwZW5kQ29udHJvbFN0YXRlKGNvbnRyb2wtPm5hbWUoKSwgY29u
dHJvbC0+dHlwZSgpLCBjb250cm9sLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSgpKTsKICAgICB9Ci0g
ICAgcmV0dXJuIHN0YXRlTWFwOworICAgIHJldHVybiBtYXA7CiB9CiAKIFZlY3RvcjxTdHJpbmc+
IEZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFNhdmVkRm9ybVN0YXRlTWFwPiBzdGF0ZU1hcCA9IGNyZWF0ZVNhdmVkRm9ybVN0
YXRlTWFwKG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlKTsKICAgICBWZWN0b3I8U3RyaW5nPiBzdGF0
ZVZlY3RvcjsKICAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVs
ZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDQpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChmb3Jt
U3RhdGVTaWduYXR1cmUoKSk7Ci0gICAgZm9yIChhdXRvJiBzdGF0ZSA6ICpzdGF0ZU1hcCkgewor
ICAgIGZvciAoYXV0byYgc3RhdGUgOiBjcmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChtX2Zvcm1FbGVt
ZW50c1dpdGhTdGF0ZSkpIHsKICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKHN0YXRlLmtleS5n
ZXQoKSk7CiAgICAgICAgIHN0YXRlLnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rvcik7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oCmluZGV4IGExMzUyZjU4NmJlZmFh
MWY2YjA3MTJiOTBlYmZkZmFiZjNjMGFjODYuLjE4N2I2NjNhNzUwYmJjZjMyMWM0YjJkMTBmNDhk
NGRjYWNmMzgxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgKQEAgLTU4LDEw
ICs1OCwxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IHJlZmVyZW5jZWRGaWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9y
KTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlPj4gRm9ybUVsZW1lbnRMaXN0SGFzaFNldDsKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21TdHJpbmdJbXBsPiwgc3RkOjp1bmlxdWVfcHRyPFNhdmVk
Rm9ybVN0YXRlPj4gU2F2ZWRGb3JtU3RhdGVNYXA7CisgICAgdXNpbmcgRm9ybUVsZW1lbnRMaXN0
SGFzaFNldCA9IExpc3RIYXNoU2V0PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlPj47CisgICAgdXNpbmcgU2F2ZWRGb3JtU3RhdGVNYXAgPSBIYXNoTWFwPFJlZlB0cjxBdG9t
U3RyaW5nSW1wbD4sIHN0ZDo6dW5pcXVlX3B0cjxTYXZlZEZvcm1TdGF0ZT4+OwogCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxTYXZlZEZvcm1TdGF0ZU1hcD4gY3JlYXRlU2F2ZWRGb3JtU3Rh
dGVNYXAoY29uc3QgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCYpOworICAgIHN0YXRpYyBTYXZlZEZv
cm1TdGF0ZU1hcCBjcmVhdGVTYXZlZEZvcm1TdGF0ZU1hcChjb25zdCBGb3JtRWxlbWVudExpc3RI
YXNoU2V0Jik7CiAgICAgRm9ybUNvbnRyb2xTdGF0ZSB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChj
b25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlJik7CiAgICAgc3RhdGljIHZvaWQg
Zm9ybVN0YXRlc0Zyb21TdGF0ZVZlY3Rvcihjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFNhdmVkRm9y
bVN0YXRlTWFwJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggMDBjNGRiM2Q2ZTdkOTk0OTQ5ZmI5MGNlZGMx
YmM5N2MyZjE5NzhiZS4uYzUyMWExYTZjMWQ0NGVlMzM0ZGU0ZmNjM2Y5N2Q4MzQ5ODVjYjIxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTY3MSw5ICs2NzEsOSBAQCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yUwog
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBpbm5lclBhcmVudE5vZGUobm9kZSk7CiAgICAgICAgIGlm
ICghcGFyZW50KSB7CiAgICAgICAgICAgICAvLyBOb2RlIGJlaW5nIHB1c2hlZCBpcyBkZXRhY2hl
ZCAtPiBwdXNoIHN1YnRyZWUgcm9vdC4KLSAgICAgICAgICAgIGF1dG8gbmV3TWFwID0gbWFrZVVu
aXF1ZTxOb2RlVG9JZE1hcD4oKTsKLSAgICAgICAgICAgIGRhbmdsaW5nTWFwID0gbmV3TWFwLmdl
dCgpOwotICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVUb0lkTWFwcy5hcHBlbmQobmV3TWFwLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8SGVhcE5vZGVU
b0lkTWFwPigpOworICAgICAgICAgICAgZGFuZ2xpbmdNYXAgPSAmbmV3TWFwLT5tYXA7CisgICAg
ICAgICAgICBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmFwcGVuZChXVEZNb3ZlKG5ld01hcCkpOwog
ICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6
Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmpl
Y3RGb3JOb2RlKG5vZGUsIDAsIGRhbmdsaW5nTWFwKSk7CiAgICAgICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+c2V0Q2hpbGROb2RlcygwLCBXVEZNb3ZlKGNoaWxkcmVuKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5k
ZXggZmQ0ZWEyNWQ1MjBmNDExYzhhODBkZGMzOTFmYzFhM2FjZjI1OWM3ZS4uZDc2MWQ5NDg3OGZk
NTNiODk2YzI3MDVmMDM2ZjkzYTFlNmZhYTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNjQsOSArNjQsNyBAQCBj
bGFzcyBFeGNlcHRpb247CiBjbGFzcyBGbG9hdFF1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIElu
c3BlY3Rvckhpc3Rvcnk7Ci0jaWYgRU5BQkxFKFZJREVPKQogY2xhc3MgSFRNTE1lZGlhRWxlbWVu
dDsKLSNlbmRpZgogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdl
OwpAQCAtMjQyLDYgKzI0MCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBpbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
Y29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29s
PiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKKyAgICBzdHJ1Y3QgSGVhcE5vZGVUb0lkTWFwIHsK
KyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBOb2RlVG9J
ZE1hcCBtYXA7CisgICAgfTsKKwogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
JiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
OjpET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpA
QCAtMjQ5LDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yT3ZlcmxheSogbV9vdmVy
bGF5IHsgbnVsbHB0ciB9OwogICAgIE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsK
ICAgICAvLyBPd25zIG5vZGUgbWFwcGluZ3MgZm9yIGRhbmdsaW5nIG5vZGVzLgotICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8Tm9kZVRvSWRNYXA+PiBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SGVhcE5vZGVUb0lkTWFwPj4gbV9kYW5nbGluZ05v
ZGVUb0lkTWFwczsKICAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
LCBOb2RlKj4gbV9pZFRvTm9kZTsKICAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVzTWFwOwogICAgIEhhc2hTZXQ8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAppbmRleCA0YzY3YjYzODIzZmY2YTQ5
N2E2MTJkNmQ2M2FlNDVhNmQ4ZGIwYTA1Li5iNzU3MTliYzYxZDdmZTNkMmM2ZjMzMmJmNmY2MWY3
ZTU1ZGUwMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKQEAg
LTc2Miw3ICs3NjIsNyBAQCBib29sIERvY3VtZW50TG9hZGVyOjp0cnlMb2FkaW5nU3Vic3RpdHV0
ZURhdGEoKQogICAgICAgICB9OwogCiAjaWYgVVNFKENPQ09BX0VWRU5UX0xPT1ApCi0gICAgICAg
IFJ1bkxvb3A6OmRpc3BhdGNoKCptX2ZyYW1lLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWly
cygpLCBXVEZNb3ZlKGxvYWREYXRhKSk7CisgICAgICAgIFJ1bkxvb3A6OmRpc3BhdGNoKG1fZnJh
bWUtPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCksIFdURk1vdmUobG9hZERhdGEpKTsK
ICNlbHNlCiAgICAgICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChXVEZNb3ZlKGxvYWRE
YXRhKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmlu
ZGV4IDc1ODU4M2RhYTVkNjIyYTE5Yzg5ZTRjN2Q2ZTE3ODgwZThlNzcxMTIuLmMwNTA3NDU4MjNm
ZTJmOTJiNWNkYjJjNzkzMjJhNGI0MjJlNzU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6
OmxvYWREYXRhVVJMKCkKICAgICBEYXRhVVJMRGVjb2Rlcjo6U2NoZWR1bGVDb250ZXh0IHNjaGVk
dWxlQ29udGV4dDsKICNpZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKICAgICBpZiAoYXV0byBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBzY2hlZHVsZUNvbnRleHQuc2NoZWR1bGVkUGFp
cnMgPSAqcGFnZS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CisgICAgICAgIHNjaGVkdWxlQ29u
dGV4dC5zY2hlZHVsZWRQYWlycyA9IHBhZ2UtPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOwogI2Vu
ZGlmCiAgICAgYXV0byBtb2RlID0gRGF0YVVSTERlY29kZXI6Ok1vZGU6OkxlZ2FjeTsKICAgICBp
ZiAobV9yZXF1ZXN0LnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpG
ZXRjaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDI2ZmZkYmZiYzlkMTM2OGNmYmIxYTQ5NGY3ZjZlNmFjZTU0MDU2
OWQuLmMwNjNjMzI1NmM5YmM5OWFjY2NjM2E3NjFiM2UzY2E4OGY5OTYzOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApA
QCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZG9jdW1lbnRE
aWRGaW5pc2hMb2FkRXZlbnQoKQogCiAgICAgLy8gSWYgbV9wcmVsb2FkcyBpcyBub3QgZW1wdHkg
aGVyZSwgaXQncyBmdWxsIG9mIGxpbmsgcHJlbG9hZHMsCiAgICAgLy8gYXMgc3BlY3VsYXRpdmUg
cHJlbG9hZHMgd2VyZSBjbGVhcmVkIGF0IERDTC4KLSAgICBpZiAobV9wcmVsb2FkcyAmJiBtX3By
ZWxvYWRzLT5zaXplKCkgJiYgIW1fdW51c2VkUHJlbG9hZHNUaW1lci5pc0FjdGl2ZSgpKQorICAg
IGlmICghbV9wcmVsb2Fkcy5pc0VtcHR5KCkgJiYgIW1fdW51c2VkUHJlbG9hZHNUaW1lci5pc0Fj
dGl2ZSgpKQogICAgICAgICBtX3VudXNlZFByZWxvYWRzVGltZXIuc3RhcnRPbmVTaG90KHVudXNl
ZFByZWxvYWRUaW1lb3V0KTsKIH0KIApAQCAtMTUwNCwyNSArMTUwNCwyMSBAQCBSZXNvdXJjZUVy
cm9yT3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+PiBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cHJlbAogICAgICAgICByZXF1ZXN0LnNldENoYXJzZXQobV9kb2N1bWVudC0+Y2hh
cnNldCgpKTsKIAogICAgIGF1dG8gcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgV1RG
TW92ZShyZXF1ZXN0KSwgRm9yUHJlbG9hZDo6WWVzKTsKLSAgICBpZiAocmVzb3VyY2UgJiYgKCFt
X3ByZWxvYWRzIHx8ICFtX3ByZWxvYWRzLT5jb250YWlucyhyZXNvdXJjZS52YWx1ZSgpLmdldCgp
KSkpIHsKKyAgICBpZiAocmVzb3VyY2UgJiYgIW1fcHJlbG9hZHMuY29udGFpbnMocmVzb3VyY2Uu
dmFsdWUoKS5nZXQoKSkpIHsKICAgICAgICAgYXV0byByZXNvdXJjZVZhbHVlID0gcmVzb3VyY2Uu
dmFsdWUoKTsKICAgICAgICAgLy8gRm9udHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBzaW5jZSBq
dXN0IGNyZWF0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IHRyaWdnZXIgYSBsb2FkLgogICAgICAg
ICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6Rm9udFJlc291cmNlKQogICAgICAg
ICAgICAgZG93bmNhc3Q8Q2FjaGVkRm9udD4ocmVzb3VyY2VWYWx1ZS5nZXQoKSktPmJlZ2luTG9h
ZElmTmVlZGVkKCp0aGlzKTsKICAgICAgICAgcmVzb3VyY2VWYWx1ZS0+aW5jcmVhc2VQcmVsb2Fk
Q291bnQoKTsKIAotICAgICAgICBpZiAoIW1fcHJlbG9hZHMpCi0gICAgICAgICAgICBtX3ByZWxv
YWRzID0gbWFrZVVuaXF1ZTxMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+PigpOwotICAgICAg
ICBtX3ByZWxvYWRzLT5hZGQocmVzb3VyY2VWYWx1ZS5nZXQoKSk7CisgICAgICAgIG1fcHJlbG9h
ZHMuYWRkKHJlc291cmNlVmFsdWUuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gcmVzb3VyY2U7
CiB9CiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Ondhcm5VbnVzZWRQcmVsb2FkcygpCiB7
Ci0gICAgaWYgKCFtX3ByZWxvYWRzKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChjb25zdCBh
dXRvJiByZXNvdXJjZSA6ICptX3ByZWxvYWRzKSB7CisgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6
IG1fcHJlbG9hZHMpIHsKICAgICAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNlLT5pc0xpbmtQ
cmVsb2FkKCkgJiYgcmVzb3VyY2UtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6
UHJlbG9hZFJlc3VsdDo6UHJlbG9hZE5vdFJlZmVyZW5jZWQgJiYgZG9jdW1lbnQoKSkgewogICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3Ro
ZXIsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywKICAgICAgICAgICAgICAgICAiVGhlIHJlc291cmNl
ICIgKyByZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkgKwpAQCAtMTUzNCwyOCArMTUzMCwyMCBAQCB2
b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjp3YXJuVW51c2VkUHJlbG9hZHMoKQogYm9vbCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6aXNQcmVsb2FkZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNv
bnN0CiB7CiAgICAgY29uc3QgVVJMJiB1cmwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmxT
dHJpbmcpOwotCi0gICAgaWYgKG1fcHJlbG9hZHMpIHsKLSAgICAgICAgZm9yIChhdXRvJiByZXNv
dXJjZSA6ICptX3ByZWxvYWRzKSB7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UtPnVybCgpID09
IHVybCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGZvciAo
YXV0byYgcmVzb3VyY2UgOiBtX3ByZWxvYWRzKSB7CisgICAgICAgIGlmIChyZXNvdXJjZS0+dXJs
KCkgPT0gdXJsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2FkcyhDbGVh
clByZWxvYWRzTW9kZSBtb2RlKQogewotICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4+
IHJlbWFpbmluZ0xpbmtQcmVsb2FkczsKLSAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogKm1fcHJl
bG9hZHMpIHsKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IHJlbWFpbmluZ0xpbmtQ
cmVsb2FkczsKKyAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogbV9wcmVsb2FkcykgewogICAgICAg
ICBBU1NFUlQocmVzb3VyY2UpOwogICAgICAgICBpZiAobW9kZSA9PSBDbGVhclByZWxvYWRzTW9k
ZTo6Q2xlYXJTcGVjdWxhdGl2ZVByZWxvYWRzICYmIHJlc291cmNlLT5pc0xpbmtQcmVsb2FkKCkp
IHsKLSAgICAgICAgICAgIGlmICghcmVtYWluaW5nTGlua1ByZWxvYWRzKQotICAgICAgICAgICAg
ICAgIHJlbWFpbmluZ0xpbmtQcmVsb2FkcyA9IG1ha2VVbmlxdWU8TGlzdEhhc2hTZXQ8Q2FjaGVk
UmVzb3VyY2UqPj4oKTsKLSAgICAgICAgICAgIHJlbWFpbmluZ0xpbmtQcmVsb2Fkcy0+YWRkKHJl
c291cmNlKTsKKyAgICAgICAgICAgIHJlbWFpbmluZ0xpbmtQcmVsb2Fkcy5hZGQocmVzb3VyY2Up
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgcmVzb3VyY2UtPmRl
Y3JlYXNlUHJlbG9hZENvdW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCmluZGV4IGU0NWMwOTU5MzExZDY1NmFmMjcxMzIxOTUz
MDY2ZjNlNGJkNTM0YzkuLjQ5MTkwZjdmNWQ4MmJiZDA5NmE1YmIyZThmOWRkMzc3MzUxMTUxMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5oCkBAIC0yMDksNyArMjA5LDcgQEAgcHJpdmF0ZToKIAogICAgIGludCBtX3JlcXVlc3RD
b3VudCB7IDAgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaXN0SGFzaFNldDxDYWNoZWRSZXNv
dXJjZSo+PiBtX3ByZWxvYWRzOworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gbV9w
cmVsb2FkczsKICAgICBUaW1lciBtX3VudXNlZFByZWxvYWRzVGltZXI7CiAKICAgICBUaW1lciBt
X2dhcmJhZ2VDb2xsZWN0RG9jdW1lbnRSZXNvdXJjZXNUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDk1YjUyYWEzYWQyOTE3ZmViOGUzNTFh
ZTExODU2MmY0Y2MzNzE1NTcuLjljZjYyOGU5OTkyYzhlNGEyNWViOGVkZDc4MTVkOTVjZTYxZmM0
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAt
NzUsMTkgKzc1LDE3IEBAIE1lbW9yeUNhY2hlOjpNZW1vcnlDYWNoZSgpCiAgICAgfSk7CiB9CiAK
LWF1dG8gTWVtb3J5Q2FjaGU6OnNlc3Npb25SZXNvdXJjZU1hcChQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpIGNvbnN0IC0+IENhY2hlZFJlc291cmNlTWFwKgorYXV0byBNZW1vcnlDYWNoZTo6c2Vz
c2lvblJlc291cmNlTWFwKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gQ2FjaGVkUmVzb3Vy
Y2VNYXAqCiB7CiAgICAgQVNTRVJUKHNlc3Npb25JRC5pc1ZhbGlkKCkpOwotICAgIHJldHVybiBt
X3Nlc3Npb25SZXNvdXJjZXMuZ2V0KHNlc3Npb25JRCk7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
c2Vzc2lvblJlc291cmNlcy5maW5kKHNlc3Npb25JRCk7CisgICAgcmV0dXJuIGl0ZXJhdG9yID09
IG1fc2Vzc2lvblJlc291cmNlcy5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0b3ItPnZhbHVlOwog
fQogCiBhdXRvIE1lbW9yeUNhY2hlOjplbnN1cmVTZXNzaW9uUmVzb3VyY2VNYXAoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKSAtPiBDYWNoZWRSZXNvdXJjZU1hcCYKIHsKICAgICBBU1NFUlQoc2Vz
c2lvbklELmlzVmFsaWQoKSk7Ci0gICAgYXV0byYgbWFwID0gbV9zZXNzaW9uUmVzb3VyY2VzLmFk
ZChzZXNzaW9uSUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIW1hcCkKLSAg
ICAgICAgbWFwID0gbWFrZVVuaXF1ZTxDYWNoZWRSZXNvdXJjZU1hcD4oKTsKLSAgICByZXR1cm4g
Km1hcDsKKyAgICByZXR1cm4gbV9zZXNzaW9uUmVzb3VyY2VzLmFkZChzZXNzaW9uSUQsIENhY2hl
ZFJlc291cmNlTWFwIHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCiBib29sIE1lbW9yeUNhY2hl
OjpzaG91bGRSZW1vdmVGcmFnbWVudElkZW50aWZpZXIoY29uc3QgVVJMJiBvcmlnaW5hbFVSTCkK
QEAgLTE4MCw3ICsxNzgsNyBAQCBDYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291cmNl
Rm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCiAgICAgcmV0dXJuIHJl
c291cmNlRm9yUmVxdWVzdEltcGwocmVxdWVzdCwgKnJlc291cmNlcyk7CiB9CiAKLUNhY2hlZFJl
c291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JSZXF1ZXN0SW1wbChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZFJlc291cmNlTWFwJiByZXNvdXJjZXMpCitDYWNoZWRS
ZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZWRSZXNvdXJjZU1hcCYgcmVzb3VyY2VzKQog
ewogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKICAgICBVUkwgdXJsID0gcmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdC51cmwoKSk7CkBAIC0yMTgsNyArMjE2
LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cHJ1bmVMaXZlUmVzb3VyY2VzKGJvb2wgc2hvdWxkRGVz
dHJveURlY29kZWREYXRhRm9yQWxsTGl2ZVJlc28KIHZvaWQgTWVtb3J5Q2FjaGU6OmZvckVhY2hS
ZXNvdXJjZShjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FjaGVkUmVzb3VyY2UmKT4mIGZ1bmN0
aW9uKQogewogICAgIGZvciAoYXV0byYgdW5wcm90ZWN0ZWRMUlVMaXN0IDogbV9hbGxSZXNvdXJj
ZXMpIHsKLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNvcHlUb1ZlY3RvcigqdW5wcm90
ZWN0ZWRMUlVMaXN0KSkKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IGNvcHlUb1ZlY3Rv
cih1bnByb3RlY3RlZExSVUxpc3QpKQogICAgICAgICAgICAgZnVuY3Rpb24oKnJlc291cmNlKTsK
ICAgICB9CiB9CkBAIC0yMjksNyArMjI3LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6Zm9yRWFjaFNl
c3Npb25SZXNvdXJjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdURjo6RnUKICAg
ICBpZiAoaXQgPT0gbV9zZXNzaW9uUmVzb3VyY2VzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogY29weVRvVmVjdG9yKGl0LT52YWx1ZS0+dmFsdWVz
KCkpKQorICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLnZh
bHVlcygpKSkKICAgICAgICAgZnVuY3Rpb24oKnJlc291cmNlKTsKIH0KIApAQCAtMzI2LDcgKzMy
NCw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlc1RvU2l6ZSh1bnNpZ25l
ZCB0YXJnZXRTaXplKQogICAgIGZvciAoaW50IGkgPSBtX2FsbFJlc291cmNlcy5zaXplKCkgLSAx
OyBpID49IDA7IGktLSkgewogICAgICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgTFJVTGlzdCBm
aXJzdCAoYW5kIHJlZiB0aGUgcmVzb3VyY2VzKSBhcyBjYWxsaW5nCiAgICAgICAgIC8vIGRlc3Ry
b3lEZWNvZGVkRGF0YSgpIGNhbiBhbHRlciB0aGUgTFJVTGlzdC4KLSAgICAgICAgYXV0byBscnVM
aXN0ID0gY29weVRvVmVjdG9yKCptX2FsbFJlc291cmNlc1tpXSk7CisgICAgICAgIGF1dG8gbHJ1
TGlzdCA9IGNvcHlUb1ZlY3RvcihtX2FsbFJlc291cmNlc1tpXSk7CiAKICAgICAgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIiBscnUgbGlzdCAoc2l6ZSAlbHUpIC0gZmx1c2hpbmcgc3RhZ2UiLCBs
cnVMaXN0LnNpemUoKSk7CiAKQEAgLTM2OSw3ICszNjcsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpw
cnVuZURlYWRSZXNvdXJjZXNUb1NpemUodW5zaWduZWQgdGFyZ2V0U2l6ZSkKICAgICAgICAgICAg
IAogICAgICAgICAvLyBTaHJpbmsgdGhlIHZlY3RvciBiYWNrIGRvd24gc28gd2UgZG9uJ3Qgd2Fz
dGUgdGltZSBpbnNwZWN0aW5nCiAgICAgICAgIC8vIGVtcHR5IExSVSBsaXN0cyBvbiBmdXR1cmUg
cHJ1bmVzLgotICAgICAgICBpZiAoIW1fYWxsUmVzb3VyY2VzW2ldLT5pc0VtcHR5KCkpCisgICAg
ICAgIGlmICghbV9hbGxSZXNvdXJjZXNbaV0uaXNFbXB0eSgpKQogICAgICAgICAgICAgY2FuU2hy
aW5rTFJVTGlzdHMgPSBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAoY2FuU2hyaW5rTFJVTGlzdHMp
CiAgICAgICAgICAgICBtX2FsbFJlc291cmNlcy5zaHJpbmsoaSk7CkBAIC00MjYsMTEgKzQyNCw5
IEBAIGF1dG8gTWVtb3J5Q2FjaGU6OmxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNl
KSAtPiBMUlVMaXN0JgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgcmVzb3VyY2UubV9scnVJbmRl
eCA9IHF1ZXVlSW5kZXg7CiAjZW5kaWYKLQotICAgIG1fYWxsUmVzb3VyY2VzLnJlc2VydmVDYXBh
Y2l0eShxdWV1ZUluZGV4ICsgMSk7Ci0gICAgd2hpbGUgKG1fYWxsUmVzb3VyY2VzLnNpemUoKSA8
PSBxdWV1ZUluZGV4KQotICAgICAgICBtX2FsbFJlc291cmNlcy51bmNoZWNrZWRBcHBlbmQobWFr
ZVVuaXF1ZTxMUlVMaXN0PigpKTsKLSAgICByZXR1cm4gKm1fYWxsUmVzb3VyY2VzW3F1ZXVlSW5k
ZXhdOworICAgIGlmIChtX2FsbFJlc291cmNlcy5zaXplKCkgPD0gcXVldWVJbmRleCkKKyAgICAg
ICAgbV9hbGxSZXNvdXJjZXMuZ3JvdyhxdWV1ZUluZGV4ICsgMSk7CisgICAgcmV0dXJuIG1fYWxs
UmVzb3VyY2VzW3F1ZXVlSW5kZXhdOwogfQogCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVGcm9t
TFJVTGlzdChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCkBAIC00ODYsNyArNDgyLDcgQEAgdm9p
ZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbihTZWN1cml0eU9yaWdpbiYg
b3JpZ2luKQogCiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzb3VyY2VzV2l0aE9yaWdp
bjsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlcyA6IG1fc2Vzc2lvblJlc291cmNlcy52YWx1ZXMo
KSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogKnJlc291cmNlcykgeworICAgICAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlIDogcmVzb3VyY2VzKSB7CiAgICAgICAgICAgICBhdXRvJiBy
ZXNvdXJjZSA9ICprZXlWYWx1ZS52YWx1ZTsKICAgICAgICAgICAgIGF1dG8mIHBhcnRpdGlvbk5h
bWUgPSBrZXlWYWx1ZS5rZXkuc2Vjb25kOwogICAgICAgICAgICAgaWYgKHBhcnRpdGlvbk5hbWUg
PT0gb3JpZ2luUGFydGl0aW9uKSB7CkBAIC01MzMsNyArNTI5LDcgQEAgdm9pZCBNZW1vcnlDYWNo
ZTo6cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBIYXMKIHZvaWQgTWVtb3J5Q2FjaGU6OmdldE9yaWdpbnNXaXRoQ2FjaGUoU2VjdXJpdHlP
cmlnaW5TZXQmIG9yaWdpbnMpCiB7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Np
b25SZXNvdXJjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICpy
ZXNvdXJjZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IHJlc291cmNlcykgewog
ICAgICAgICAgICAgYXV0byYgcmVzb3VyY2UgPSAqa2V5VmFsdWUudmFsdWU7CiAgICAgICAgICAg
ICBhdXRvJiBwYXJ0aXRpb25OYW1lID0ga2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAg
IGlmICghcGFydGl0aW9uTmFtZS5pc0VtcHR5KCkpCkBAIC01NTAsNyArNTQ2LDcgQEAgSGFzaFNl
dDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBNZW1vcnlDYWNoZTo6b3JpZ2luc1dpdGhDYWNoZShQ
QUw6OlNlc3Npb25JRCBzZXMKIAogICAgIGF1dG8gaXQgPSBtX3Nlc3Npb25SZXNvdXJjZXMuZmlu
ZChzZXNzaW9uSUQpOwogICAgIGlmIChpdCAhPSBtX3Nlc3Npb25SZXNvdXJjZXMuZW5kKCkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6ICppdC0+dmFsdWUpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBrZXlWYWx1ZSA6IGl0LT52YWx1ZSkgewogICAgICAgICAgICAgYXV0byYgcmVzb3Vy
Y2UgPSAqa2V5VmFsdWUudmFsdWU7CiAgICAgICAgICAgICBhdXRvJiBwYXJ0aXRpb25OYW1lID0g
a2V5VmFsdWUua2V5LnNlY29uZDsKICAgICAgICAgICAgIGlmICghcGFydGl0aW9uTmFtZS5pc0Vt
cHR5KCkpCkBAIC02MDksNyArNjA1LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVz
dEZyb21TZXNzaW9uQ2FjaGVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQKIAogICAg
IGF1dG8mIG1lbW9yeUNhY2hlID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpOwogICAgIGZvciAo
YXV0byYgcmVzb3VyY2VzIDogbWVtb3J5Q2FjaGUubV9zZXNzaW9uUmVzb3VyY2VzKSB7Ci0gICAg
ICAgIGlmIChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZS5yZXNvdXJjZUZv
clJlcXVlc3RJbXBsKHJlcXVlc3QsICpyZXNvdXJjZXMudmFsdWUpKQorICAgICAgICBpZiAoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlID0gbWVtb3J5Q2FjaGUucmVzb3VyY2VGb3JSZXF1ZXN0SW1w
bChyZXF1ZXN0LCByZXNvdXJjZXMudmFsdWUpKQogICAgICAgICAgICAgbWVtb3J5Q2FjaGUucmVt
b3ZlKCpyZXNvdXJjZSk7CiAgICAgfQogfQpAQCAtNjI3LDcgKzYyMyw3IEBAIE1lbW9yeUNhY2hl
OjpTdGF0aXN0aWNzIE1lbW9yeUNhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICBTdGF0aXN0aWNz
IHN0YXRzOwogCiAgICAgZm9yIChhdXRvJiByZXNvdXJjZXMgOiBtX3Nlc3Npb25SZXNvdXJjZXMu
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IHJlc291cmNlcy0+dmFs
dWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiByZXNvdXJjZSA6IHJlc291cmNlcy52YWx1ZXMo
KSkgewogICAgICAgICAgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7CiAgICAgICAgICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpUeXBlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAg
ICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJjZSgqcmVzb3VyY2UpOwpAQCAtNjYyLDcgKzY1OCw3
IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHdoaWxlICghbV9zZXNzaW9uUmVzb3VyY2VzLmlzRW1wdHkoKSkgewot
ICAgICAgICBhdXRvJiByZXNvdXJjZXMgPSAqbV9zZXNzaW9uUmVzb3VyY2VzLmJlZ2luKCktPnZh
bHVlOworICAgICAgICBhdXRvJiByZXNvdXJjZXMgPSBtX3Nlc3Npb25SZXNvdXJjZXMuYmVnaW4o
KS0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghcmVzb3VyY2VzLmlzRW1wdHkoKSk7CiAgICAgICAg
IHJlbW92ZSgqcmVzb3VyY2VzLmJlZ2luKCktPnZhbHVlKTsKICAgICB9CkBAIC03NDYsNyArNzQy
LDcgQEAgdm9pZCBNZW1vcnlDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNv
bnN0CiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7CiAgICAgZm9yIChpbnQg
aSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICBXVEZMb2dBbHdheXMoIlxuTGlz
dCAlZDpcbiIsIGkpOwotICAgICAgICBmb3IgKGF1dG8qIHJlc291cmNlIDogKm1fYWxsUmVzb3Vy
Y2VzW2ldKSB7CisgICAgICAgIGZvciAoYXV0byogcmVzb3VyY2UgOiBtX2FsbFJlc291cmNlc1tp
XSkgewogICAgICAgICAgICAgaWYgKGluY2x1ZGVMaXZlIHx8ICFyZXNvdXJjZS0+aGFzQ2xpZW50
cygpKQogICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiICAlcCAlLjI1NXMgJS4xZkssICUu
MWZLLCBhY2Nlc3NlczogJXUsIGNsaWVudHM6ICVkXG4iLCByZXNvdXJjZSwgcmVzb3VyY2UtPnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlc291cmNlLT5kZWNvZGVkU2l6ZSgpIC8gMTAy
NC4wZiwgKHJlc291cmNlLT5lbmNvZGVkU2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgp
KSAvIDEwMjQuMGYsIHJlc291cmNlLT5hY2Nlc3NDb3VudCgpLCByZXNvdXJjZS0+bnVtYmVyT2ZD
bGllbnRzKCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5oCmluZGV4IDU3NDQ3ZmYxYWYwNDZjNjQ4ZTg0ZDk3NmFiZjAwNjEwYmYwMDI4ZGIuLmIw
YTdiOTU3MWFjZDg2YWZiYmVlZDI1MGQ1ZTNkZGIyZGIxNjc5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSYpOwogICAgIGJvb2wgaW5M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKSBjb25zdCB7
IHJldHVybiBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLmNvbnRhaW5zKCZyZXNvdXJjZSk7IH0KIAot
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBTZWN1cml0eU9yaWdp
blNldDsKKyAgICB1c2luZyBTZWN1cml0eU9yaWdpblNldCA9IEhhc2hTZXQ8UmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPj47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVSZXNvdXJjZXNXaXRo
T3JpZ2luKFNlY3VyaXR5T3JpZ2luJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVS
ZXNvdXJjZXNXaXRoT3JpZ2lucyhQQUw6OlNlc3Npb25JRCwgY29uc3QgSGFzaFNldDxSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+PiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0T3JpZ2luc1dp
dGhDYWNoZShTZWN1cml0eU9yaWdpblNldCYgb3JpZ2lucyk7CkBAIC0xNjUsMTEgKzE2NSwxMSBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXNUb1Np
emUodW5zaWduZWQgdGFyZ2V0U2l6ZSwgYm9vbCBzaG91bGREZXN0cm95RGVjb2RlZERhdGFGb3JB
bGxMaXZlUmVzb3VyY2VzID0gZmFsc2UpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1h
cDxzdGQ6OnBhaXI8VVJMLCBTdHJpbmcgLyogcGFydGl0aW9uTmFtZSAqLz4sIENhY2hlZFJlc291
cmNlKj4gQ2FjaGVkUmVzb3VyY2VNYXA7Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxDYWNoZWRS
ZXNvdXJjZSo+IExSVUxpc3Q7CisgICAgdXNpbmcgQ2FjaGVkUmVzb3VyY2VNYXAgPSBIYXNoTWFw
PHN0ZDo6cGFpcjxVUkwsIFN0cmluZyAvKiBwYXJ0aXRpb25OYW1lICovPiwgQ2FjaGVkUmVzb3Vy
Y2UqPjsKKyAgICB1c2luZyBMUlVMaXN0ID0gTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjsK
IAogICAgIE1lbW9yeUNhY2hlKCk7Ci0gICAgfk1lbW9yeUNhY2hlKCk7IC8vIE5vdCBpbXBsZW1l
bnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2Vi
Q29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KKyAgICB+TWVtb3J5Q2FjaGUoKSA9IGRl
bGV0ZTsKIAogICAgIExSVUxpc3QmIGxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UmKTsKIApAQCAt
MTgwLDEwICsxODAsMTAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBkZWFkQ2FwYWNpdHkoKSBj
b25zdDsKICAgICBib29sIG5lZWRzUHJ1bmluZygpIGNvbnN0OwogCi0gICAgQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlRm9yUmVxdWVzdEltcGwoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ2FjaGVk
UmVzb3VyY2VNYXAmKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VGb3JSZXF1ZXN0SW1w
bChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBDYWNoZWRSZXNvdXJjZU1hcCYpOwogCiAg
ICAgQ2FjaGVkUmVzb3VyY2VNYXAmIGVuc3VyZVNlc3Npb25SZXNvdXJjZU1hcChQQUw6OlNlc3Np
b25JRCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VNYXAqIHNlc3Npb25SZXNvdXJjZU1hcChQQUw6OlNl
c3Npb25JRCkgY29uc3Q7CisgICAgQ2FjaGVkUmVzb3VyY2VNYXAqIHNlc3Npb25SZXNvdXJjZU1h
cChQQUw6OlNlc3Npb25JRCk7CiAKICAgICBib29sIG1fZGlzYWJsZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pblBydW5lUmVzb3VyY2VzIHsgZmFsc2UgfTsKQEAgLTE5OSwxNCArMTk5LDE0IEBA
IHByaXZhdGU6CiAgICAgLy8gU2l6ZS1hZGp1c3RlZCBhbmQgcG9wdWxhcml0eS1hd2FyZSBMUlUg
bGlzdCBjb2xsZWN0aW9uIGZvciBjYWNoZSBvYmplY3RzLiAgVGhpcyBjb2xsZWN0aW9uIGNhbiBo
b2xkCiAgICAgLy8gbW9yZSByZXNvdXJjZXMgdGhhbiB0aGUgY2FjaGVkIHJlc291cmNlIG1hcCwg
c2luY2UgaXQgY2FuIGFsc28gaG9sZCAic3RhbGUiIG11bHRpcGxlIHZlcnNpb25zIG9mIG9iamVj
dHMgdGhhdCBhcmUKICAgICAvLyB3YWl0aW5nIHRvIGRpZSB3aGVuIHRoZSBjbGllbnRzIHJlZmVy
ZW5jaW5nIHRoZW0gZ28gYXdheS4KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExSVUxpc3Q+
LCAzMj4gbV9hbGxSZXNvdXJjZXM7CisgICAgVmVjdG9yPExSVUxpc3QsIDMyPiBtX2FsbFJlc291
cmNlczsKICAgICAKICAgICAvLyBMaXN0IGp1c3QgZm9yIGxpdmUgcmVzb3VyY2VzIHdpdGggZGVj
b2RlZCBkYXRhLiAgQWNjZXNzIHRvIHRoaXMgbGlzdCBpcyBiYXNlZCBvZmYgb2YgcGFpbnRpbmcg
dGhlIHJlc291cmNlLgogICAgIExSVUxpc3QgbV9saXZlRGVjb2RlZFJlc291cmNlczsKICAgICAK
ICAgICAvLyBBIFVSTC1iYXNlZCBtYXAgb2YgYWxsIHJlc291cmNlcyB0aGF0IGFyZSBpbiB0aGUg
Y2FjaGUgKGluY2x1ZGluZyB0aGUgZnJlc2hlc3QgdmVyc2lvbiBvZiBvYmplY3RzIHRoYXQgYXJl
IGN1cnJlbnRseSBiZWluZyAKICAgICAvLyByZWZlcmVuY2VkIGJ5IGEgV2ViIHBhZ2UpLgotICAg
IHR5cGVkZWYgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFJl
c291cmNlTWFwPj4gU2Vzc2lvbkNhY2hlZFJlc291cmNlTWFwOworICAgIHVzaW5nIFNlc3Npb25D
YWNoZWRSZXNvdXJjZU1hcCA9IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIENhY2hlZFJlc291cmNl
TWFwPjsKICAgICBTZXNzaW9uQ2FjaGVkUmVzb3VyY2VNYXAgbV9zZXNzaW9uUmVzb3VyY2VzOwog
CiAgICAgVGltZXIgbV9wcnVuZVRpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCmluZGV4IGJmYmJhZGVhNzJlMTRjOWJjNzYwN2VhZTllM2UwM2Y5NTA5ZjJiZDcuLjlj
ZTI2MzQ1MjY5ZDM1MzBlNDQwNzJmYjQyYTJlNjA0NWE4YWNjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTk0MiwxMSArOTQyLDcgQEAgdm9pZCBGb2N1c0Nv
bnRyb2xsZXI6OnNldElzVmlzaWJsZUFuZEFjdGl2ZUludGVybmFsKGJvb2wgY29udGVudElzVmlz
aWJsZSkKICAgICAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBjb25zdCBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj4qIHNjcm9sbGFibGVBcmVhcyA9
IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWFzKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzY3JvbGxh
YmxlQXJlYSA6ICpzY3JvbGxhYmxlQXJlYXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzY3JvbGxh
YmxlQXJlYSA6IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgfHwgbV9wYWdlLnNo
b3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucygpKTsKIAogICAgICAgICAgICAgY29udGVu
dEFyZWFEaWRTaG93T3JIaWRlKHNjcm9sbGFibGVBcmVhLCBjb250ZW50SXNWaXNpYmxlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NTgzYzM2OWZkYTFjMDZkOTQzNzVjY2RjMjNm
YzhiNzIyMzBiZjVhLi5hOTM5NzVlNjRkMjZkMDdhZjAxZmFkYzkwZDRhMTBlNWE5NTVjODlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC01NzMsMTAgKzU3MywxMCBAQCB2b2lkIEZy
YW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUoKQogCiAgICAgLy8gSWYgdGhlIHJlbmRlciB0
cmVlIGlzIGRlc3Ryb3llZCBiZWxvdyBGcmFtZVZpZXc6OnVwZGF0ZUVtYmVkZGVkT2JqZWN0cygp
LCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgbnVsbCBzZW50aW5lbCBpbiB0aGUgc2V0LgogICAgIC8v
IEV2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgaGF2ZSByZW1vdmVkIGl0c2VsZiBhcyB0aGUgdHJlZSB3
YXMgZmVsbGVkLgotICAgIEFTU0VSVCghbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZSB8fCBtX2Vt
YmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCkgfHwgKG1fZW1iZWRkZWRPYmplY3RzVG9V
cGRhdGUtPnNpemUoKSA9PSAxICYmIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmZpcnN0KCkg
PT0gbnVsbHB0cikpOworICAgIEFTU0VSVChtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLmlzRW1w
dHkoKSB8fCAobV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5zaXplKCkgPT0gMSAmJiBtX2VtYmVk
ZGVkT2JqZWN0c1RvVXBkYXRlLmZpcnN0KCkgPT0gbnVsbHB0cikpOwogCi0gICAgQVNTRVJUKCFt
X3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVj
dHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3Nsb3dSZXBhaW50T2JqZWN0cyB8
fCBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV92
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5jb21wdXRlc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X3Nsb3dSZXBhaW50T2JqZWN0cy5jb21wdXRlc0VtcHR5KCkpOwogfQogCiB2b2lkIEZyYW1lVmll
dzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC04MTgsMTAgKzgxOCw3
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyTGF5b3V0KCkK
IAogdm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFy
ZWFzKCkKIHsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWFzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8qIHNjcm9sbGFibGVBcmVhIDogKm1fc2Nyb2xsYWJsZUFyZWFzKQorICAg
IGZvciAoYXV0byogc2Nyb2xsYWJsZUFyZWEgOiBtX3Njcm9sbGFibGVBcmVhcykKICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEtPmludmFsaWRhdGVTY3JvbGxiYXJzKCk7CiB9CiAKQEAgLTEzNDIsMjIg
KzEzMzksMTYgQEAgUmVuZGVyQm94KiBGcmFtZVZpZXc6OmVtYmVkZGVkQ29udGVudEJveCgpIGNv
bnN0CiAKIHZvaWQgRnJhbWVWaWV3OjphZGRFbWJlZGRlZE9iamVjdFRvVXBkYXRlKFJlbmRlckVt
YmVkZGVkT2JqZWN0JiBlbWJlZGRlZE9iamVjdCkKIHsKLSAgICBpZiAoIW1fZW1iZWRkZWRPYmpl
Y3RzVG9VcGRhdGUpCi0gICAgICAgIG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUgPSBtYWtlVW5p
cXVlPExpc3RIYXNoU2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0Kj4+KCk7Ci0KICAgICBhdXRvJiBl
bGVtZW50ID0gZW1iZWRkZWRPYmplY3QuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBpZiAoaXM8
SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGRvd25jYXN0PEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ+KGVsZW1lbnQpLnNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwog
Ci0gICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+YWRkKCZlbWJlZGRlZE9iamVjdCk7Cisg
ICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5hZGQoJmVtYmVkZGVkT2JqZWN0KTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OnJlbW92ZUVtYmVkZGVkT2JqZWN0VG9VcGRhdGUoUmVuZGVyRW1iZWRk
ZWRPYmplY3QmIGVtYmVkZGVkT2JqZWN0KQogewotICAgIGlmICghbV9lbWJlZGRlZE9iamVjdHNU
b1VwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0
ZS0+cmVtb3ZlKCZlbWJlZGRlZE9iamVjdCk7CisgICAgbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0
ZS5yZW1vdmUoJmVtYmVkZGVkT2JqZWN0KTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnNldE1lZGlh
VHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkKQEAgLTE1MTEsMTEgKzE1MDIsNyBAQCB2b2lk
IEZyYW1lVmlldzo6YWRkU2xvd1JlcGFpbnRPYmplY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIp
CiB7CiAgICAgYm9vbCBoYWRTbG93UmVwYWludE9iamVjdHMgPSBoYXNTbG93UmVwYWludE9iamVj
dHMoKTsKIAotICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMpCi0gICAgICAgIG1fc2xvd1Jl
cGFpbnRPYmplY3RzID0gbWFrZVVuaXF1ZTxXZWFrSGFzaFNldDxSZW5kZXJFbGVtZW50Pj4oKTsK
LQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zbG93UmVwYWludE9iamVjdHMtPmFkZChyZW5kZXJl
cik7Ci0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgaWYgKG1fc2xvd1JlcGFp
bnRPYmplY3RzLmFkZChyZW5kZXJlcikuaXNOZXdFbnRyeSkgewogICAgICAgICBpZiAoYXV0byBs
YXllciA9IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+c2V0
TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CiAgICAgCkBAIC0xNTMxLDEwICsxNTE4LDcgQEAg
dm9pZCBGcmFtZVZpZXc6OmFkZFNsb3dSZXBhaW50T2JqZWN0KFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQogCiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlU2xvd1JlcGFpbnRPYmplY3QoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFtX3Nsb3dSZXBhaW50T2JqZWN0cykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCByZW1vdmVkID0gbV9zbG93UmVwYWludE9iamVjdHMtPnJl
bW92ZShyZW5kZXJlcik7CisgICAgYm9vbCByZW1vdmVkID0gbV9zbG93UmVwYWludE9iamVjdHMu
cmVtb3ZlKHJlbmRlcmVyKTsKICAgICBpZiAocmVtb3ZlZCkgewogICAgICAgICBpZiAoYXV0byBs
YXllciA9IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+c2V0
TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CkBAIC0xNTQzLDIwICsxNTI3LDE2IEBAIHZvaWQg
RnJhbWVWaWV3OjpyZW1vdmVTbG93UmVwYWludE9iamVjdChSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zbG93UmVwYWludE9iamVjdHNE
aWRDaGFuZ2UoKnRoaXMpOwogICAgIH0KIAotICAgIGlmICghbV9zbG93UmVwYWludE9iamVjdHMt
PmNvbXB1dGVzRW1wdHkoKSkKKyAgICBpZiAoIW1fc2xvd1JlcGFpbnRPYmplY3RzLmNvbXB1dGVz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zbG93UmVwYWludE9iamVjdHMgPSBu
dWxscHRyOworICAgIG1fc2xvd1JlcGFpbnRPYmplY3RzLmNsZWFyKCk7CiAgICAgdXBkYXRlQ2Fu
QmxpdE9uU2Nyb2xsUmVjdXJzaXZlbHkoKTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OmFkZFZpZXdw
b3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgb2JqZWN0KQogewot
ICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykKLSAgICAgICAgbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cyA9IG1ha2VVbmlxdWU8V2Vha0hhc2hTZXQ8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4+KCk7Ci0KLSAgICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMt
PmNvbnRhaW5zKG9iamVjdCkpIHsKLSAgICAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
cy0+YWRkKG9iamVjdCk7CisgICAgaWYgKG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMuYWRk
KG9iamVjdCkuaXNOZXdFbnRyeSkgewogICAgICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKICAg
ICAgICAgICAgIHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5KCk7CiAKQEAgLTE1Njcs
NyArMTU0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIG9iamVjdCkKIAogdm9pZCBGcmFtZVZpZXc6OnJlbW92
ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgb2JqZWN0
KQogewotICAgIGlmIChtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzICYmIG1fdmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdHMtPnJlbW92ZShvYmplY3QpKSB7CisgICAgaWYgKG1fdmlld3BvcnRD
b25zdHJhaW5lZE9iamVjdHMucmVtb3ZlKG9iamVjdCkpIHsKICAgICAgICAgaWYgKGF1dG8gc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAg
ICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld0ZpeGVkT2JqZWN0c0RpZENoYW5n
ZSgqdGhpcyk7CiAKQEAgLTIxMDIsNyArMjA4Miw3IEBAIE9wdGlvblNldDxTdHlsZUNvbG9yOjpP
cHRpb25zPiBGcmFtZVZpZXc6OnN0eWxlQ29sb3JPcHRpb25zKCkgY29uc3QKIAogYm9vbCBGcmFt
ZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7
Ci0gICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8IG1fdmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSkgeworICAgIGlmIChtX3ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzLmNvbXB1dGVzRW1wdHkoKSkgewogICAgICAgICBmcmFtZSgpLnBhZ2Uo
KS0+Y2hyb21lKCkuc2Nyb2xsKHNjcm9sbERlbHRhLCByZWN0VG9TY3JvbGwsIGNsaXBSZWN0KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjExMSw3ICsyMDkxLDcgQEAgYm9vbCBG
cmFtZVZpZXc6OnNjcm9sbENvbnRlbnRzRmFzdFBhdGgoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEsIGNvbnN0IEludFJlY3QKIAogICAgIC8vIEdldCB0aGUgcmVjdHMgb2YgdGhlIGZpeGVkIG9i
amVjdHMgdmlzaWJsZSBpbiB0aGUgcmVjdFRvU2Nyb2xsCiAgICAgUmVnaW9uIHJlZ2lvblRvVXBk
YXRlOwotICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqbV92aWV3cG9ydENvbnN0cmFpbmVkT2Jq
ZWN0cykgeworICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0
cmFpbmVkUG9zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAocmVu
ZGVyZXIuaXNDb21wb3NpdGVkKCkpCkBAIC0yMTgxLDEyICsyMTYxLDkgQEAgdm9pZCBGcmFtZVZp
ZXc6OnNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKIAog
dm9pZCBGcmFtZVZpZXc6OnJlcGFpbnRTbG93UmVwYWludE9iamVjdHMoKQogewotICAgIGlmICgh
bV9zbG93UmVwYWludE9iamVjdHMpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFJlbmRlcmVy
cyB3aXRoIGZpeGVkIGJhY2tncm91bmRzIG1heSBiZSBpbiBjb21wb3NpdGluZyBsYXllcnMsIHNv
IHdlIG5lZWQgdG8gZXhwbGljaXRseQogICAgIC8vIHJlcGFpbnQgdGhlbSBhZnRlciBzY3JvbGxp
bmcuCi0gICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICptX3Nsb3dSZXBhaW50T2JqZWN0cykKKyAg
ICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogbV9zbG93UmVwYWludE9iamVjdHMpCiAgICAgICAgIHJl
bmRlcmVyLnJlcGFpbnRTbG93UmVwYWludE9iamVjdCgpOwogfQogCkBAIC0yNDY4LDcgKzI0NDUs
NyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5
b3V0KCkKICAgICBpZiAoIWhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqbV92aWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cykgeworICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzKSB7CiAgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KCk7CiAgICAg
ICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICBhdXRvKiBsYXllciA9
IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5ZXIoKTsKQEAgLTMy
NTksMjMgKzMyMzYsMjMgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUVtYmVkZGVkT2JqZWN0KFJl
bmRlckVtYmVkZGVkT2JqZWN0JiBlbWJlZGRlZE9iamVjdCkKIGJvb2wgRnJhbWVWaWV3Ojp1cGRh
dGVFbWJlZGRlZE9iamVjdHMoKQogewogICAgIFNldEZvclNjb3BlPGJvb2w+IGluVXBkYXRlRW1i
ZWRkZWRPYmplY3RzKG1faW5VcGRhdGVFbWJlZGRlZE9iamVjdHMsIHRydWUpOwotICAgIGlmIChs
YXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSB8fCAhbV9lbWJlZGRlZE9iamVjdHNUb1Vw
ZGF0ZSB8fCBtX2VtYmVkZGVkT2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCkpCisgICAgaWYgKGxh
eW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpIHx8IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRh
dGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFdpZGdldEhpZXJhcmNo
eVVwZGF0ZXNTdXNwZW5zaW9uU2NvcGUgc3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXM7CiAK
ICAgICAvLyBJbnNlcnQgYSBtYXJrZXIgZm9yIHdoZXJlIHdlIHNob3VsZCBzdG9wLgotICAgIEFT
U0VSVCghbV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+Y29udGFpbnMobnVsbHB0cikpOwotICAg
IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPmFkZChudWxscHRyKTsKKyAgICBBU1NFUlQoIW1f
ZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUuY29udGFpbnMobnVsbHB0cikpOworICAgIG1fZW1iZWRk
ZWRPYmplY3RzVG9VcGRhdGUuYWRkKG51bGxwdHIpOwogCi0gICAgd2hpbGUgKCFtX2VtYmVkZGVk
T2JqZWN0c1RvVXBkYXRlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBlbWJlZGRlZE9iamVj
dCA9IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUtPnRha2VGaXJzdCgpOworICAgIHdoaWxlICgh
bV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBlbWJl
ZGRlZE9iamVjdCA9IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGUudGFrZUZpcnN0KCk7CiAgICAg
ICAgIGlmICghZW1iZWRkZWRPYmplY3QpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgdXBk
YXRlRW1iZWRkZWRPYmplY3QoKmVtYmVkZGVkT2JqZWN0KTsKICAgICB9CiAKLSAgICByZXR1cm4g
bV9lbWJlZGRlZE9iamVjdHNUb1VwZGF0ZS0+aXNFbXB0eSgpOworICAgIHJldHVybiBtX2VtYmVk
ZGVkT2JqZWN0c1RvVXBkYXRlLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0
ZUVtYmVkZGVkT2JqZWN0c1RpbWVyRmlyZWQoKQpAQCAtMzc4Miw3ICszNzU5LDcgQEAgZmxvYXQg
RnJhbWVWaWV3OjphZGp1c3RTY3JvbGxTdGVwRm9yRml4ZWRDb250ZW50KGZsb2F0IHN0ZXAsIFNj
cm9sbGJhck9yaWVudGF0aW8KICAgICBpZiAoZ3JhbnVsYXJpdHkgIT0gU2Nyb2xsQnlQYWdlIHx8
IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBzdGVw
OwogCi0gICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzID0g
bnVsbHB0cjsKKyAgICBjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25l
ZE9iamVjdHMgPSBudWxscHRyOwogICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJhbWUoKS5j
b250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoIXJvb3QtPmhhc1Bvc2l0aW9uZWRPYmpl
Y3RzKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RlcDsKQEAgLTM5NDUsMTEgKzM5MjIsMTEgQEAg
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFpc1Njcm9sbGFibGUoKSkgewotICAgICAgICBwYXJlbnRGcmFtZVZpZXct
PnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBwYXJlbnRGcmFtZVZpZXctPnJl
bW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHBhcmVudEZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgcGFyZW50RnJh
bWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiB9CiAKIGJvb2wgRnJhbWVWaWV3Ojpz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0CkBAIC0zOTc2LDEwICszOTUzLDcg
QEAgdm9pZCBGcmFtZVZpZXc6Om5vdGlmeVBhZ2VUaGF0Q29udGVudEFyZWFXaWxsUGFpbnQoKSBj
b25zdAogCiAgICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKIAotICAgIGlmICghbV9zY3JvbGxh
YmxlQXJlYXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgc2Nyb2xsYWJsZUFy
ZWEgOiAqbV9zY3JvbGxhYmxlQXJlYXMpCisgICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6
IG1fc2Nyb2xsYWJsZUFyZWFzKQogICAgICAgICBzY3JvbGxhYmxlQXJlYS0+Y29udGVudEFyZWFX
aWxsUGFpbnQoKTsKIH0KIApAQCAtNTA4MCwxMiArNTA1NCw5IEBAIFN0cmluZyBGcmFtZVZpZXc6
OnRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQoKSBjb25zdAogICAgIHJldHVybiB0cy5yZWxlYXNl
KCk7CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEpCitib29sIEZyYW1lVmlldzo6YWRkU2Nyb2xsYWJsZUFyZWEoU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQogewotICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YXMpCi0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFzID0gbWFrZVVuaXF1ZTxTY3JvbGxhYmxlQXJl
YVNldD4oKTsKLSAgICAKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYXMtPmFkZChzY3JvbGxhYmxl
QXJlYSkuaXNOZXdFbnRyeSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhcy5hZGQoJnNjcm9s
bGFibGVBcmVhKS5pc05ld0VudHJ5KSB7CiAgICAgICAgIHNjcm9sbGFibGVBcmVhU2V0Q2hhbmdl
ZCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01MDkzLDE4ICs1MDY0LDE4IEBA
IGJvb2wgRnJhbWVWaWV3OjphZGRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZyYW1lVmlldzo6cmVtb3Zl
U2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorYm9vbCBGcmFt
ZVZpZXc6OnJlbW92ZVNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIHsKLSAgICBpZiAobV9zY3JvbGxhYmxlQXJlYXMgJiYgbV9zY3JvbGxhYmxlQXJlYXMtPnJl
bW92ZShzY3JvbGxhYmxlQXJlYSkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYXMucmVtb3Zl
KCZzY3JvbGxhYmxlQXJlYSkpIHsKICAgICAgICAgc2Nyb2xsYWJsZUFyZWFTZXRDaGFuZ2VkKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgRnJhbWVWaWV3Ojpjb250YWluc1Njcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSkgY29uc3QKK2Jvb2wgRnJhbWVWaWV3Ojpjb250YWluc1Njcm9sbGFibGVBcmVh
KFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYXMgJiYgbV9zY3JvbGxhYmxlQXJlYXMtPmNvbnRhaW5zKHNjcm9sbGFibGVB
cmVhKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXMuY29udGFpbnMoJnNjcm9sbGFibGVB
cmVhKTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhU2V0Q2hhbmdlZCgpCkBA
IC01MTI0LDcgKzUwOTUsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRkQ2hpbGQoV2lkZ2V0JiB3aWRn
ZXQpCiAgICAgaWYgKGlzPEZyYW1lVmlldz4od2lkZ2V0KSkgewogICAgICAgICBhdXRvJiBjaGls
ZEZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4od2lkZ2V0KTsKICAgICAgICAgaWYgKGNo
aWxkRnJhbWVWaWV3LmlzU2Nyb2xsYWJsZSgpKQotICAgICAgICAgICAgYWRkU2Nyb2xsYWJsZUFy
ZWEoJmNoaWxkRnJhbWVWaWV3KTsKKyAgICAgICAgICAgIGFkZFNjcm9sbGFibGVBcmVhKGNoaWxk
RnJhbWVWaWV3KTsKICAgICB9CiAKICAgICBTY3JvbGxWaWV3OjphZGRDaGlsZCh3aWRnZXQpOwpA
QCAtNTEzMyw3ICs1MTA0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZENoaWxkKFdpZGdldCYgd2lk
Z2V0KQogdm9pZCBGcmFtZVZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCYgd2lkZ2V0KQogewogICAg
IGlmIChpczxGcmFtZVZpZXc+KHdpZGdldCkpCi0gICAgICAgIHJlbW92ZVNjcm9sbGFibGVBcmVh
KCZkb3duY2FzdDxGcmFtZVZpZXc+KHdpZGdldCkpOworICAgICAgICByZW1vdmVTY3JvbGxhYmxl
QXJlYShkb3duY2FzdDxGcmFtZVZpZXc+KHdpZGdldCkpOwogCiAgICAgU2Nyb2xsVmlldzo6cmVt
b3ZlQ2hpbGQod2lkZ2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IDllZDFjNzIz
ZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLmFiZmU3YWMzMDJkZTZhZWE5NWQ5OGRh
NTNmZjA3NDhmZmE5YjYzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMzA1LDE1ICsz
MDUsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRTbG93UmVwYWludE9iamVjdChSZW5kZXJF
bGVtZW50Jik7CiAgICAgdm9pZCByZW1vdmVTbG93UmVwYWludE9iamVjdChSZW5kZXJFbGVtZW50
Jik7Ci0gICAgYm9vbCBoYXNTbG93UmVwYWludE9iamVjdChjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9iamVjdHMgJiYgbV9zbG93UmVw
YWludE9iamVjdHMtPmNvbnRhaW5zKHJlbmRlcmVyKTsgfQotICAgIGJvb2wgaGFzU2xvd1JlcGFp
bnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9iamVjdHMgJiYgIW1fc2xv
d1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCk7IH0KLSAgICBXZWFrSGFzaFNldDxSZW5k
ZXJFbGVtZW50Piogc2xvd1JlcGFpbnRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UmVw
YWludE9iamVjdHMuZ2V0KCk7IH0KKyAgICBib29sIGhhc1Nsb3dSZXBhaW50T2JqZWN0KGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSBjb25zdCB7IHJldHVybiBtX3Nsb3dSZXBhaW50T2Jq
ZWN0cy5jb250YWlucyhyZW5kZXJlcik7IH0KKyAgICBib29sIGhhc1Nsb3dSZXBhaW50T2JqZWN0
cygpIGNvbnN0IHsgcmV0dXJuICFtX3Nsb3dSZXBhaW50T2JqZWN0cy5jb21wdXRlc0VtcHR5KCk7
IH0KKyAgICBjb25zdCBXZWFrSGFzaFNldDxSZW5kZXJFbGVtZW50PiYgc2xvd1JlcGFpbnRPYmpl
Y3RzKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UmVwYWludE9iamVjdHM7IH0KIAogICAgIC8vIElu
Y2x1ZGVzIGZpeGVkLSBhbmQgc3RpY2t5LXBvc2l0aW9uIG9iamVjdHMuCiAgICAgdm9pZCBhZGRW
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0KFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2
b2lkIHJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3QoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYpOwotICAgIGNvbnN0IFdlYWtIYXNoU2V0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KiB2aWV3
cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMuZ2V0KCk7IH0KLSAgICBib29sIGhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyAmJiAhbV92
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpOyB9CisgICAgY29uc3Qg
V2Vha0hhc2hTZXQ8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4mIHZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0czsgfQor
ICAgIGJvb2wgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiAh
bV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cy5jb21wdXRlc0VtcHR5KCk7IH0KICAgICAKICAg
ICBmbG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKQEAgLTU1MywxMyArNTUzLDEzIEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdHJhY2tlZFJlcGFpbnRSZWN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tlZFJlcGFpbnRSZWN0czsgfQogICAgIFN0cmluZyB0
cmFja2VkUmVwYWludFJlY3RzQXNUZXh0KCkgY29uc3Q7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
U2Nyb2xsYWJsZUFyZWEqPiBTY3JvbGxhYmxlQXJlYVNldDsKICAgICAvLyBSZXR1cm5zIHdoZXRo
ZXIgdGhlIHNjcm9sbGFibGUgYXJlYSBoYXMganVzdCBiZWVuIG5ld2x5IGFkZGVkLgotICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgYWRkU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGFkZFNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJik7
CiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzY3JvbGxhYmxlIGFyZWEgaGFzIGp1c3QgYmVl
biByZW1vdmVkLgotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
U2Nyb2xsYWJsZUFyZWEqKTsKLSAgICBib29sIGNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEoU2Nyb2xs
YWJsZUFyZWEqKSBjb25zdDsKLSAgICBjb25zdCBTY3JvbGxhYmxlQXJlYVNldCogc2Nyb2xsYWJs
ZUFyZWFzKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYXMuZ2V0KCk7IH0KKyAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHJlbW92ZVNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJik7
CisgICAgYm9vbCBjb250YWluc1Njcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJikgY29uc3Q7
CisgICAgdXNpbmcgU2Nyb2xsYWJsZUFyZWFTZXQgPSBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj47
CisgICAgY29uc3QgU2Nyb2xsYWJsZUFyZWFTZXQmIHNjcm9sbGFibGVBcmVhcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWFzOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZENoaWxkKFdpZGdldCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQ2hp
bGQoV2lkZ2V0JikgZmluYWw7CkBAIC04NjYsOCArODY2LDggQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgSGFzaFNldDxXaWRnZXQqPiBtX3dpZGdldHNJblJlbmRlclRyZWU7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPExpc3RIYXNoU2V0PFJlbmRlckVtYmVkZGVkT2JqZWN0Kj4+IG1fZW1iZWRkZWRP
YmplY3RzVG9VcGRhdGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYWtIYXNoU2V0PFJlbmRlckVs
ZW1lbnQ+PiBtX3Nsb3dSZXBhaW50T2JqZWN0czsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJFbWJl
ZGRlZE9iamVjdCo+IG1fZW1iZWRkZWRPYmplY3RzVG9VcGRhdGU7CisgICAgV2Vha0hhc2hTZXQ8
UmVuZGVyRWxlbWVudD4gbV9zbG93UmVwYWludE9iamVjdHM7CiAKICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yOwogICAgIFJlZlB0cjxOb2Rl
PiBtX25vZGVUb0RyYXc7CkBAIC05MjcsOCArOTI3LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUg
aW50cmluc2ljIGNvbnRlbnQgc2l6ZSBkZWNpZGVkIGJ5IGF1dG9zaXppbmcuCiAgICAgSW50U2l6
ZSBtX2F1dG9TaXplQ29udGVudFNpemU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsYWJs
ZUFyZWFTZXQ+IG1fc2Nyb2xsYWJsZUFyZWFzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWFrSGFz
aFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0Pj4gbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
czsKKyAgICBTY3JvbGxhYmxlQXJlYVNldCBtX3Njcm9sbGFibGVBcmVhczsKKyAgICBXZWFrSGFz
aFNldDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Rz
OwogCiAgICAgT3B0aW9uU2V0PExheW91dE1pbGVzdG9uZT4gbV9taWxlc3RvbmVzUGVuZGluZ1Bh
aW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcAppbmRleCA2ZGU2YzBlMjYz
MzMyYmUxZDY3MGUxYTY5YWZlM2M4NjdiNGYzMDk3Li45Y2IwYmE0ZmRiMTBjNzZkYjY0MTc0OTM1
NDI1NmNkY2ZlNGQwZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJl
bGVhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKQEAg
LTIxNyw4ICsyMTcsNyBAQCB2b2lkIGxvZ01lbW9yeVN0YXRpc3RpY3NBdFRpbWVPZkRlYXRoKCkK
ICAgICBSRUxFQVNFX0xPRyhNZW1vcnlQcmVzc3VyZSwgIlBhZ2UgY291bnQ6ICV1IiwgcGFnZUNv
dW50KCkpOwogICAgIFJFTEVBU0VfTE9HKE1lbW9yeVByZXNzdXJlLCAiRG9jdW1lbnQgY291bnQ6
ICV1IiwgRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpLnNpemUoKSk7CiAgICAgUkVMRUFTRV9MT0co
TWVtb3J5UHJlc3N1cmUsICJMaXZlIEphdmFTY3JpcHQgb2JqZWN0czoiKTsKLSAgICBhdXRvIHR5
cGVDb3VudHMgPSB2bS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKTsKLSAgICBmb3IgKGF1dG8mIGl0
IDogKnR5cGVDb3VudHMpCisgICAgZm9yIChhdXRvJiBpdCA6IHZtLmhlYXAub2JqZWN0VHlwZUNv
dW50cygpKQogICAgICAgICBSRUxFQVNFX0xPRyhNZW1vcnlQcmVzc3VyZSwgIiAgJXM6ICVkIiwg
aXQua2V5LCBpdC52YWx1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDYxZGQ4
NjA1OGU3YTFlNzIzMGVkZDY3ODZjZTg0ZTE0MzRmY2NkYmUuLmM4MGZlMTBkNDZiZmM0MmJjNDI2
NzYwYzgyNzM4OWE2MmE5YmYyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTM0NSwyMCArMTM0
NSwxNCBAQCB2b2lkIFBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xsYmFyc1RvSGlkZGVuKGJvb2wg
bG9ja092ZXJsYXlTY3JvbGxiYXJzKQogCiAgICAgdmlldy0+bG9ja092ZXJsYXlTY3JvbGxiYXJT
dGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmll
dygpOwotICAgICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGNvbnN0IEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPiogc2Nyb2xsYWJsZUFyZWFzID0g
ZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGF1dG8mIHNjcm9sbGFi
bGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5s
b2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsK
KyAgICBmb3IgKGF1dG8gZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhbWVWaWV3ID0g
ZnJhbWUtPnZpZXcoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6
IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEtPmxvY2tPdmVybGF5U2Nyb2xsYmFyU3RhdGVUb0hpZGRlbihsb2NrT3ZlcmxheVNjcm9s
bGJhcnMpOworICAgICAgICB9CiAgICAgfQogfQotICAgIAorCiB2b2lkIFBhZ2U6OnNldFZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkpCiB7CiAgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID09IGVsYXN0aWNpdHkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CmluZGV4IDkxN2ExYWQ3NjlkOTRjYjBlYzM1MTY5YzFkZjA5MGQ3Njk1NGEzOTIuLmNiMmIxNTVm
YmUyMTFjZTE5ZjJmYzAyNGE3NDkyMjM3OTkyZDUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTM3NCw5ICszNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFNjaGVkdWxlUGFpcihSZWY8
U2NoZWR1bGVQYWlyPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVNjaGVkdWxl
UGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmKTsKLSAgICBTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hl
ZHVsZWRSdW5Mb29wUGFpcnMoKSB7IHJldHVybiBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy5nZXQo
KTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlUGFpckhhc2hTZXQ+IG1fc2NoZWR1
bGVkUnVuTG9vcFBhaXJzOworICAgIGNvbnN0IFNjaGVkdWxlUGFpckhhc2hTZXQmIHNjaGVkdWxl
ZFJ1bkxvb3BQYWlycygpIGNvbnN0IHsgcmV0dXJuIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzOyB9
CiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbigpIGNvbnN0OwpAQCAtMTE3NCw2ICsxMTcyLDEwIEBAIHByaXZhdGU6CiAKICAgICBj
b25zdCBib29sIG1faHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKICAgICBtdXRhYmxlIE1l
ZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmllciBtX21lZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmllcjsK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFNjaGVkdWxlUGFpckhhc2hTZXQgbV9zY2hlZHVs
ZWRSdW5Mb29wUGFpcnM7CisjZW5kaWYKIH07CiAKIGlubGluZSBQYWdlR3JvdXAmIFBhZ2U6Omdy
b3VwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VMb2dnaW5nLmNwcAppbmRleCBj
Njg0OTQ1YTgwZTA0MGE2N2Y0MTMwMjg3NDIwNjcxODE3NGNkZmQwLi4zODNkZDU1NGZiMzlmNzVl
N2QxZTBmNTczYTRkZjJlYjkyMDYxMjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlTG9nZ2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3Jt
YW5jZUxvZ2dpbmcuY3BwCkBAIC04MCw3ICs4MCw3IEBAIEhhc2hNYXA8Y29uc3QgY2hhciosIHNp
emVfdD4gUGVyZm9ybWFuY2VMb2dnaW5nOjptZW1vcnlVc2FnZVN0YXRpc3RpY3MoU2hvdWxkSW5j
CiAKIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBQZXJmb3JtYW5jZUxvZ2dpbmc6OmphdmFT
Y3JpcHRPYmplY3RDb3VudHMoKQogewotICAgIHJldHVybiBXVEZNb3ZlKCpjb21tb25WTSgpLmhl
YXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICByZXR1cm4gY29tbW9uVk0oKS5oZWFwLm9iamVj
dFR5cGVDb3VudHMoKTsKIH0KIAogUGVyZm9ybWFuY2VMb2dnaW5nOjpQZXJmb3JtYW5jZUxvZ2dp
bmcoUGFnZSYgcGFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAppbmRleCAwYzk2
MzJlMmZmM2E0OWEwZjI2M2ViZmJmMzlmMWY4NzA5YmIyZjAzLi4zY2VmMzM3MzFjZGVkM2Y2YzRh
YjlmYTAyY2YzMmQ3YTg1MWU3OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1By
aW50Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3Bw
CkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmVuZCgpCiAgICAgQVNTRVJU
KG1faXNQcmludGluZyk7CiAgICAgbV9pc1ByaW50aW5nID0gZmFsc2U7CiAgICAgZnJhbWUuc2V0
UHJpbnRpbmcoZmFsc2UsIEZsb2F0U2l6ZSgpLCBGbG9hdFNpemUoKSwgMCwgQWRqdXN0Vmlld1Np
emUpOwotICAgIG1fbGlua2VkRGVzdGluYXRpb25zID0gbnVsbHB0cjsKKyAgICBtX2xpbmtlZERl
c3RpbmF0aW9ucyA9IFdURjo6bnVsbG9wdDsKIH0KIAogc3RhdGljIGlubGluZSBSZW5kZXJCb3hN
b2RlbE9iamVjdCogZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXIpCkBAIC0zMjcsMTIgKzMyNywxMiBAQCB2b2lkIFByaW50Q29udGV4dDo6b3V0cHV0TGlua2Vk
RGVzdGluYXRpb25zKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBEbwogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIW1fbGlua2VkRGVzdGluYXRpb25zKSB7Ci0gICAgICAgIG1f
bGlua2VkRGVzdGluYXRpb25zID0gbWFrZVVuaXF1ZTxIYXNoTWFwPFN0cmluZywgUmVmPEVsZW1l
bnQ+Pj4oKTsKKyAgICAgICAgbV9saW5rZWREZXN0aW5hdGlvbnMgPSBIYXNoTWFwPFN0cmluZywg
UmVmPEVsZW1lbnQ+PigpOwogICAgICAgICBjb2xsZWN0TGlua2VkRGVzdGluYXRpb25zKGRvY3Vt
ZW50KTsKICAgICB9CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogKm1fbGlua2VkRGVzdGlu
YXRpb25zKSB7Ci0gICAgICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gaXQudmFsdWUtPnJl
bmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBkZXN0aW5hdGlvbiA6ICptX2xpbmtlZERlc3RpbmF0
aW9ucykgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gZGVzdGluYXRpb24udmFsdWUtPnJlbmRl
cmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpvdXRwdXRMaW5rZWREZXN0aW5h
dGlvbnMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIERvCiAgICAgICAgIGlmICgh
cGFnZVJlY3QuY29udGFpbnMocm91bmRlZEludFBvaW50KHBvaW50KSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBncmFwaGljc0NvbnRleHQuYWRkRGVzdGluYXRpb25BdFBvaW50
KGl0LmtleSwgcG9pbnQpOworICAgICAgICBncmFwaGljc0NvbnRleHQuYWRkRGVzdGluYXRpb25B
dFBvaW50KGRlc3RpbmF0aW9uLmtleSwgcG9pbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UHJpbnRDb250ZXh0LmgKaW5kZXggMTgyN2ExM2RkYzFiNWUyMWEyNWVmNWY0N2NmMGVlNmI4ODUw
MWZhZC4uMGJhZGNhOTZkMDhhZDQ3ZDgzOGI3YzA4YzVhN2Q5OGNiY2ZkZjYyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1ByaW50Q29udGV4dC5oCkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBVc2VkIHRvIHByZXZlbnQgbWlzdXNlcyBvZiBiZWdpbigpIGFuZCBlbmQoKSAoZS5nLiwgY2Fs
bCBlbmQgd2l0aG91dCBiZWdpbikuCiAgICAgYm9vbCBtX2lzUHJpbnRpbmcgeyBmYWxzZSB9Owog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBSZWY8RWxlbWVudD4+PiBtX2xp
bmtlZERlc3RpbmF0aW9uczsKKyAgICBPcHRpb25hbDxIYXNoTWFwPFN0cmluZywgUmVmPEVsZW1l
bnQ+Pj4gbV9saW5rZWREZXN0aW5hdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5tbQppbmRleCA3OGZlYzNlNjkxNTU3YzE2N2FjYThm
NzhkMTM5YzM1M2FjNjA1YmUzLi4xNDVlNjRlNTBlYjI2OGYzZWRjY2JiZmU4YzJkMWY3ZDRlYWU3
N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMubW0KQEAgLTg4LDE1ICs4OCwxMyBAQCB2
b2lkIFBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAKIHZvaWQgUGFnZTo6YWRkU2NoZWR1bGVQ
YWlyKFJlZjxTY2hlZHVsZVBhaXI+JiYgcGFpcikKIHsKLSAgICBpZiAoIW1fc2NoZWR1bGVkUnVu
TG9vcFBhaXJzKQotICAgICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycyA9IG1ha2VVbmlxdWU8
U2NoZWR1bGVQYWlySGFzaFNldD4oKTsKLSAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy0+YWRk
KHBhaXIucHRyKCkpOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAg
ICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNjaGVkdWxlKHBh
aXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUt
PmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAgIGRvY3Vt
ZW50TG9hZGVyLT5zY2hlZHVsZShwYWlyKTsKKyAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy5h
ZGQocGFpci5wdHIoKSk7CisKKyAgICBmb3IgKGF1dG8gZnJhbWUgPSBtX21haW5GcmFtZS5wdHIo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAg
ICBpZiAoYXV0byBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgICAgIGxvYWRlci0+c2NoZWR1bGUocGFpcik7CisgICAgICAgIGlmIChhdXRvIGxvYWRl
ciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCisgICAgICAg
ICAgICBsb2FkZXItPnNjaGVkdWxlKHBhaXIpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBtYWtl
IFNoYXJlZFRpbWVyTWFjIHVzZSB0aGVzZSBTY2hlZHVsZVBhaXJzLgpAQCAtMTA0LDE3ICsxMDIs
MTMgQEAgdm9pZCBQYWdlOjphZGRTY2hlZHVsZVBhaXIoUmVmPFNjaGVkdWxlUGFpcj4mJiBwYWly
KQogCiB2b2lkIFBhZ2U6OnJlbW92ZVNjaGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmIHBh
aXIpCiB7Ci0gICAgQVNTRVJUKG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzKTsKLSAgICBpZiAoIW1f
c2NoZWR1bGVkUnVuTG9vcFBhaXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NjaGVkdWxl
ZFJ1bkxvb3BQYWlycy0+cmVtb3ZlKHBhaXIucHRyKCkpOworICAgIG1fc2NoZWR1bGVkUnVuTG9v
cFBhaXJzLnJlbW92ZShwYWlyLnB0cigpKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1f
bWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVy
LT51bnNjaGVkdWxlKHBhaXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT51bnNjaGVkdWxlKHBhaXIpOworICAgIGZvciAoYXV0
byBmcmFtZSA9IG1fbWFpbkZyYW1lLnB0cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChhdXRvIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgbG9hZGVyLT51bnNjaGVkdWxlKHBh
aXIpOworICAgICAgICBpZiAoYXV0byBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkucHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgbG9hZGVyLT51bnNjaGVkdWxlKHBhaXIp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDliNjI5ZDBlNTkzMTg5YmQ5M2Q1OWZlNzMw
NjdhODRlOTc3NTMzODAuLjdmMmJiM2E0NTE1NDM1MGFkYzgwYTQxMTRhYjhkNmY3OTJmOTJlNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKQEAgLTEyMywxOSArMTIzLDE3IEBAIEV2ZW50VHJhY2tpbmdSZWdpb25z
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphYnNvbHV0ZUV2ZW50VHJhY2tpbmdSZWdpb25zRm9yRnJh
bWUoCiAgICAgLy8gRklYTUU6IHNob3VsZCBBU1NFUlQoIWZyYW1lVmlldy0+bmVlZHNMYXlvdXQo
KSkgaGVyZSwgYnV0IG5lZWQgdG8gZml4IERlYnVnUGFnZU92ZXJsYXlzCiAgICAgLy8gdG8gbm90
IGFzayBmb3IgcmVnaW9ucyBhdCBiYWQgdGltZXMuCiAKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUFyZWFzID0gZnJhbWVWaWV3LT5zY3JvbGxhYmxlQXJlYXMoKSkgewotICAgICAgICBmb3IgKGF1
dG8mIHNjcm9sbGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykgewotICAgICAgICAgICAgLy8g
Q29tcG9zaXRlZCBzY3JvbGxhYmxlIGFyZWFzIGNhbiBiZSBzY3JvbGxlZCBvZmYgdGhlIG1haW4g
dGhyZWFkLgotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhLT51c2VzQXN5bmNTY3JvbGxp
bmcoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCBpc0lu
c2lkZUZpeGVkOwotICAgICAgICAgICAgSW50UmVjdCBib3ggPSBzY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveCgmaXNJbnNpZGVGaXhlZCk7Ci0gICAgICAgICAgICBpZiAo
aXNJbnNpZGVGaXhlZCkKLSAgICAgICAgICAgICAgICBib3ggPSBJbnRSZWN0KGZyYW1lVmlldy0+
Zml4ZWRTY3JvbGxhYmxlQXJlYUJvdW5kc0luZmxhdGVkRm9yU2Nyb2xsaW5nKExheW91dFJlY3Qo
Ym94KSkpOwotCi0gICAgICAgICAgICBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbi51bml0ZShib3gp
OwotICAgICAgICB9CisgICAgZm9yIChhdXRvJiBzY3JvbGxhYmxlQXJlYSA6IGZyYW1lVmlldy0+
c2Nyb2xsYWJsZUFyZWFzKCkpIHsKKyAgICAgICAgLy8gQ29tcG9zaXRlZCBzY3JvbGxhYmxlIGFy
ZWFzIGNhbiBiZSBzY3JvbGxlZCBvZmYgdGhlIG1haW4gdGhyZWFkLgorICAgICAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEtPnVzZXNBc3luY1Njcm9sbGluZygpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYm9vbCBpc0luc2lkZUZpeGVkOworICAgICAgICBJbnRSZWN0IGJveCA9IHNj
cm9sbGFibGVBcmVhLT5zY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCZpc0luc2lkZUZpeGVkKTsK
KyAgICAgICAgaWYgKGlzSW5zaWRlRml4ZWQpCisgICAgICAgICAgICBib3ggPSBJbnRSZWN0KGZy
YW1lVmlldy0+Zml4ZWRTY3JvbGxhYmxlQXJlYUJvdW5kc0luZmxhdGVkRm9yU2Nyb2xsaW5nKExh
eW91dFJlY3QoYm94KSkpOworCisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLnVuaXRl
KGJveCk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB3aWRnZXQgOiBmcmFtZVZpZXctPndpZGdl
dHNJblJlbmRlclRyZWUoKSkgewpAQCAtMjk4LDExICsyOTYsNyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3JiBmcmFtZVZp
ZXcpCiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc1Zpc2libGVTbG93UmVwYWludFZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KSBjb25z
dAogewotICAgIGF1dG8qIHZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzID0gZnJhbWVWaWV3LnZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCk7Ci0gICAgaWYgKCF2aWV3cG9ydENvbnN0cmFpbmVk
T2JqZWN0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiB2aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0IDogKnZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKSB7CisgICAg
Zm9yIChhdXRvJiB2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0IDogZnJhbWVWaWV3LnZpZXdwb3J0
Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKCFpczxSZW5kZXJCb3hNb2RlbE9i
amVjdD4odmlld3BvcnRDb25zdHJhaW5lZE9iamVjdCkgfHwgIXZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3QuaGFzTGF5ZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBhdXRv
JiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4odmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdCkubGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKaW5kZXggNzllMmY1Mzg4YzQ2ZTU4OTIzMDE2MWM0NzQ1
MjU0MTkyNDdlODJhYi4uYTRkYTkzZGU2YmZlNjg5NzBlNTM5ZDQzNmVkNmVjNTJjNjhlZTk3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNz
TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNz
TWFwLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2ZpbGxlZFBy
aW1hcnlQYWdlIHsgZmFsc2UgfTsKICAgICBHbHlwaE1ldHJpY3NQYWdlIG1fcHJpbWFyeVBhZ2U7
IC8vIFdlIG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGluZGljZXMg
MC0yNTUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8
R2x5cGhNZXRyaWNzUGFnZT4+PiBtX3BhZ2VzOworICAgIEhhc2hNYXA8aW50LCBzdGQ6OnVuaXF1
ZV9wdHI8R2x5cGhNZXRyaWNzUGFnZT4+IG1fcGFnZXM7CiB9OwogCiB0ZW1wbGF0ZTw+IGlubGlu
ZSBmbG9hdCBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+Ojp1bmtub3duTWV0cmljcygpCkBAIC0xMjks
MTMgKzEyOSw5IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IHR5cGVuYW1lIEdseXBoTWV0cmljc01hcDxU
Pjo6R2x5cGhNZXRyaWNzUGFnZSYgR2x5cGhNZXRyaWNzTWFwCiAgICAgICAgIHJldHVybiBtX3By
aW1hcnlQYWdlOwogICAgIH0KIAotICAgIGlmICghbV9wYWdlcykKLSAgICAgICAgbV9wYWdlcyA9
IG1ha2VVbmlxdWU8SGFzaE1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaE1ldHJpY3NQYWdl
Pj4+KCk7Ci0KLSAgICBhdXRvJiBwYWdlID0gbV9wYWdlcy0+ZW5zdXJlKHBhZ2VOdW1iZXIsIFtd
IHsKKyAgICByZXR1cm4gKm1fcGFnZXMuZW5zdXJlKHBhZ2VOdW1iZXIsIFtdIHsKICAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8R2x5cGhNZXRyaWNzUGFnZT4odW5rbm93bk1ldHJpY3MoKSk7CiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIHJldHVybiAqcGFnZTsKIH0KICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXgg
ZDhjMTZjMjAzMWI4MjEwNjBhYmM0NjBmYjQzNzViODVkYzkxYWI0NC4uMWJjZTk3MjBlN2JlZTVj
MjNlODI3YzdkMGZlMWY5M2YzZThkY2Q2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgKQEAgLTY0Nyw3ICs2NDcsNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFN0cmluZz4g
bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEFO
R0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBPcHRpb25hbDxT
dHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOwor
ICAgIFNoYWRlck5hbWVIYXNoIG1fbmFtZUhhc2hNYXBGb3JTaGFkZXJzOwogI2VuZGlmIC8vICFV
U0UoQU5HTEUpCiAKICNpZiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRleCA4MGI5ZjVlNjc3NDZmZTQ1ZjgyZjA2ZjFhMDdhZWI5
YmQ1OGMzYjUxLi4xOGRjODlmMmFmMWQ1NWIyNTFmOWMwOTVjODliZjFkZGZmNGU1MTRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTU0NCw5
ICs1NDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNo
RnVuY3Rpb24gPSBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247CiAgICAgQU5HTEVSZXNvdXJj
ZXMuSGFzaEZ1bmN0aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7CiAKLSAgICBpZiAoIW5hbWVIYXNo
TWFwRm9yU2hhZGVycykKLSAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1
ZTxTaGFkZXJOYW1lSGFzaD4oKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIo
bmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXIoJm1fbmFtZUhhc2hNYXBGb3JTaGFkZXJzKTsKICAgICBtX2NvbXBpbGVyLnNldFJl
c291cmNlcyhBTkdMRVJlc291cmNlcyk7CiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRl
cik7CkBAIC05NTcsOSArOTU1LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgQU5HTEUKICAgICBpZiAo
c3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBt
YXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCiAg
ICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFk
ZXIgcHJvZ3JhbS4KLSAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAg
ICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigp
OwotICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JT
aGFkZXJzLmdldCgpKTsKKyAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCZt
X25hbWVIYXNoTWFwRm9yU2hhZGVycyk7CiAKICAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0g
Z2VuZXJhdGVIYXNoZWROYW1lKG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgKaW5kZXggMzNhMjE3NGE5OWIxN2JiMTZi
ODU3MTU3ZTE3YjhjZjJlYjYxZWI5ZC4uYjAwZTAzZGZmYjY5OTU1MDI0Y2NlNmUyMGIwZDZiZDEx
ODFkNDZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JraW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0
d29ya2luZ0NvbnRleHQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxl
ZCgpIGNvbnN0ID0gMDsgLy8gRklYTUU6IFJlY29uY2lsZSB3aXRoIFJlc291cmNlSGFuZGxlOjpm
b3JjZUNvbnRlbnRTbmlmZmluZygpLgotICAgIHZpcnR1YWwgU2NoZWR1bGVQYWlySGFzaFNldCog
c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
Y29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBw
bGljYXRpb25BdWRpdERhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9y
IGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCA9IDA7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAppbmRleCA5MWQ5ZmIwMGIzODM2YjFiNTc3ZmIxZjA4
NTVmZTQzYWY4MTJhNWZkLi4zNzEyMTc1MTUxYWQ2NmE5ZWM1NzRlMDVlMDRlNzA2OTgyZTQyM2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCkBAIC0xMDksMzMgKzEwOSwzMyBAQCB1bnNp
Z25lZCBHcmlkOjphdXRvUmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
Y3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JSb3dzID8gbV9hdXRvUmVw
ZWF0Um93cyA6IG1fYXV0b1JlcGVhdENvbHVtbnM7CiB9CiAKLXZvaWQgR3JpZDo6c2V0QXV0b1Jl
cGVhdEVtcHR5Q29sdW1ucyhzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IGF1
dG9SZXBlYXRFbXB0eUNvbHVtbnMpCit2b2lkIEdyaWQ6OnNldEF1dG9SZXBlYXRFbXB0eUNvbHVt
bnMoT3JkZXJlZFRyYWNrSW5kZXhTZXQmJiBhdXRvUmVwZWF0RW1wdHlDb2x1bW5zKQogewotICAg
IEFTU0VSVCghYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyB8fCAoYXV0b1JlcGVhdEVtcHR5Q29sdW1u
cy0+c2l6ZSgpIDw9IG1fYXV0b1JlcGVhdENvbHVtbnMpKTsKKyAgICBBU1NFUlQoYXV0b1JlcGVh
dEVtcHR5Q29sdW1ucy5zaXplKCkgPD0gbV9hdXRvUmVwZWF0Q29sdW1ucyk7CiAgICAgbV9hdXRv
UmVwZWF0RW1wdHlDb2x1bW5zID0gV1RGTW92ZShhdXRvUmVwZWF0RW1wdHlDb2x1bW5zKTsKIH0K
IAotdm9pZCBHcmlkOjpzZXRBdXRvUmVwZWF0RW1wdHlSb3dzKHN0ZDo6dW5pcXVlX3B0cjxPcmRl
cmVkVHJhY2tJbmRleFNldD4gYXV0b1JlcGVhdEVtcHR5Um93cykKK3ZvaWQgR3JpZDo6c2V0QXV0
b1JlcGVhdEVtcHR5Um93cyhPcmRlcmVkVHJhY2tJbmRleFNldCYmIGF1dG9SZXBlYXRFbXB0eVJv
d3MpCiB7Ci0gICAgQVNTRVJUKCFhdXRvUmVwZWF0RW1wdHlSb3dzIHx8IChhdXRvUmVwZWF0RW1w
dHlSb3dzLT5zaXplKCkgPD0gbV9hdXRvUmVwZWF0Um93cykpOworICAgIEFTU0VSVChhdXRvUmVw
ZWF0RW1wdHlSb3dzLnNpemUoKSA8PSBtX2F1dG9SZXBlYXRSb3dzKTsKICAgICBtX2F1dG9SZXBl
YXRFbXB0eVJvd3MgPSBXVEZNb3ZlKGF1dG9SZXBlYXRFbXB0eVJvd3MpOwogfQogCiBib29sIEdy
aWQ6Omhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uKSBjb25zdAogewotICAgIHJldHVybiBkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/ICEh
bV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zIDogISFtX2F1dG9SZXBlYXRFbXB0eVJvd3M7CisgICAg
cmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gIW1fYXV0b1JlcGVhdEVtcHR5Q29sdW1u
cy5pc0VtcHR5KCkgOiAhbV9hdXRvUmVwZWF0RW1wdHlSb3dzLmlzRW1wdHkoKTsKIH0KIAogYm9v
bCBHcmlkOjppc0VtcHR5QXV0b1JlcGVhdFRyYWNrKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24sIHVuc2lnbmVkIGxpbmUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0F1dG9SZXBl
YXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pKTsKLSAgICByZXR1cm4gYXV0b1JlcGVhdEVtcHR5VHJh
Y2tzKGRpcmVjdGlvbiktPmNvbnRhaW5zKGxpbmUpOworICAgIHJldHVybiBhdXRvUmVwZWF0RW1w
dHlUcmFja3MoZGlyZWN0aW9uKS5jb250YWlucyhsaW5lKTsKIH0KIAotT3JkZXJlZFRyYWNrSW5k
ZXhTZXQqIEdyaWQ6OmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKSBjb25zdAorY29uc3QgT3JkZXJlZFRyYWNrSW5kZXhTZXQmIEdyaWQ6OmF1
dG9SZXBlYXRFbXB0eVRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBj
b25zdAogewogICAgIEFTU0VSVChoYXNBdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKSk7
Ci0gICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9hdXRvUmVwZWF0RW1wdHlD
b2x1bW5zLmdldCgpIDogbV9hdXRvUmVwZWF0RW1wdHlSb3dzLmdldCgpOworICAgIHJldHVybiBk
aXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyA6IG1fYXV0
b1JlcGVhdEVtcHR5Um93czsKIH0KIAogR3JpZFNwYW4gR3JpZDo6Z3JpZEl0ZW1TcGFuKGNvbnN0
IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0CkBAIC0xNTcsOCArMTU3LDggQEAgdm9pZCBHcmlkOjpzZXROZWVkc0l0ZW1zUGxhY2Vt
ZW50KGJvb2wgbmVlZHNJdGVtc1BsYWNlbWVudCkKICAgICBtX2dyaWRJdGVtQXJlYS5jbGVhcigp
OwogICAgIG1fZXhwbGljaXRSb3dTdGFydCA9IDA7CiAgICAgbV9leHBsaWNpdENvbHVtblN0YXJ0
ID0gMDsKLSAgICBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnMgPSBudWxscHRyOwotICAgIG1fYXV0
b1JlcGVhdEVtcHR5Um93cyA9IG51bGxwdHI7CisgICAgbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5z
LmNsZWFyKCk7CisgICAgbV9hdXRvUmVwZWF0RW1wdHlSb3dzLmNsZWFyKCk7CiAgICAgbV9hdXRv
UmVwZWF0Q29sdW1ucyA9IDA7CiAgICAgbV9hdXRvUmVwZWF0Um93cyA9IDA7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWQuaAppbmRleCA3MmNhZGY2OGVmNGQzMjY2Y2UxZjhjZWViZGM5YTQ5ZGYyYmM4
MTFiLi5hZDI4MDQxMjczMjkwMWIzYzIyZTcyMjdmYTE3YTA0YWY2Yzg5NjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkLmgKQEAgLTY3LDE0ICs2NywxNCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
YXV0b1JlcGVhdFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIHZv
aWQgc2V0QXV0b1JlcGVhdFRyYWNrcyh1bnNpZ25lZCBhdXRvUmVwZWF0Um93cywgdW5zaWduZWQg
YXV0b1JlcGVhdENvbHVtbnMpOwogCi0gICAgdm9pZCBzZXRBdXRvUmVwZWF0RW1wdHlDb2x1bW5z
KHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4pOwotICAgIHZvaWQgc2V0QXV0
b1JlcGVhdEVtcHR5Um93cyhzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+KTsK
KyAgICB2b2lkIHNldEF1dG9SZXBlYXRFbXB0eUNvbHVtbnMoT3JkZXJlZFRyYWNrSW5kZXhTZXQm
Jik7CisgICAgdm9pZCBzZXRBdXRvUmVwZWF0RW1wdHlSb3dzKE9yZGVyZWRUcmFja0luZGV4U2V0
JiYpOwogCiAgICAgdW5zaWduZWQgYXV0b1JlcGVhdEVtcHR5VHJhY2tzQ291bnQoR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKICAgICBib29sIGhhc0F1dG9SZXBlYXRFbXB0eVRyYWNr
cyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eUF1dG9S
ZXBlYXRUcmFjayhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkKSBjb25zdDsKIAot
ICAgIE9yZGVyZWRUcmFja0luZGV4U2V0KiBhdXRvUmVwZWF0RW1wdHlUcmFja3MoR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICBjb25zdCBPcmRlcmVkVHJhY2tJbmRleFNldCYg
YXV0b1JlcGVhdEVtcHR5VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAK
ICAgICBPcmRlckl0ZXJhdG9yJiBvcmRlckl0ZXJhdG9yKCkgeyByZXR1cm4gbV9vcmRlckl0ZXJh
dG9yOyB9CiAKQEAgLTk4LDggKzk4LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQm94KiwgR3JpZEFyZWE+IG1fZ3JpZEl0ZW1BcmVhOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPE9yZGVyZWRUcmFja0luZGV4U2V0PiBtX2F1dG9SZXBlYXRFbXB0eUNvbHVtbnM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0PiBtX2F1dG9SZXBlYXRFbXB0eVJv
d3M7CisgICAgT3JkZXJlZFRyYWNrSW5kZXhTZXQgbV9hdXRvUmVwZWF0RW1wdHlDb2x1bW5zOwor
ICAgIE9yZGVyZWRUcmFja0luZGV4U2V0IG1fYXV0b1JlcGVhdEVtcHR5Um93czsKIH07CiAKIGNs
YXNzIEdyaWRJdGVyYXRvciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCmluZGV4IGEyNzBkYjhiZDZmODRjZDc5MGRhZjIx
MTc2NjhmNWVjMmRkMjY2ZmUuLmMwOTcxOTdhODdlYjNiOWEwMjFhZTM5NmNjMGVjYmFlMDk2NGZi
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uY3BwCkBAIC02NjEsNyArNjYxLDcgQEAgR3JpZFRyYWNrU2l6ZSBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmNhbGN1bGF0ZUdyaWRUcmFja1NpemUoR3JpZFRyYWNrU2l6aW5n
RGkKICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJl
YWR0aCk7CiB9CiAKLWRvdWJsZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVGbGV4
RmFjdG9yVW5pdFNpemUoY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcywgZG91YmxlIGZs
ZXhGYWN0b3JTdW0sIExheW91dFVuaXQmIGxlZnRPdmVyU3BhY2UsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZCwgOD4mIGZsZXhpYmxlVHJhY2tzSW5kZXhlcywgc3RkOjp1bmlxdWVfcHRyPFRyYWNrSW5k
ZXhTZXQ+IHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUpIGNvbnN0Citkb3VibGUgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlRmxleEZhY3RvclVuaXRTaXplKGNvbnN0IFZlY3RvcjxH
cmlkVHJhY2s+JiB0cmFja3MsIGRvdWJsZSBmbGV4RmFjdG9yU3VtLCBMYXlvdXRVbml0JiBsZWZ0
T3ZlclNwYWNlLCBjb25zdCBWZWN0b3I8dW5zaWduZWQsIDg+JiBmbGV4aWJsZVRyYWNrc0luZGV4
ZXMsIFRyYWNrSW5kZXhTZXQmJiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlKSBjb25zdAogewog
ICAgIC8vIFdlIHdhbnQgdG8gYXZvaWQgdGhlIGVmZmVjdCBvZiBmbGV4IGZhY3RvcnMgc3VtIGJl
bG93IDEgbWFraW5nIHRoZSBmYWN0b3IgdW5pdCBzaXplIHRvIGdyb3cgZXhwb25lbnRpYWxseS4K
ICAgICBkb3VibGUgaHlwb3RoZXRpY2FsRmFjdG9yVW5pdFNpemUgPSBsZWZ0T3ZlclNwYWNlIC8g
c3RkOjptYXg8ZG91YmxlPigxLCBmbGV4RmFjdG9yU3VtKTsKQEAgLTY2OSw3ICs2NjksNyBAQCBk
b3VibGUgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlRmxleEZhY3RvclVuaXRTaXpl
KGNvbnN0IFZlY3RvcjxHcmlkVHJhYwogICAgIC8vIHByb2R1Y3Qgb2YgdGhlIGh5cG90aGV0aWNh
bCAiZmxleCBmYWN0b3IgdW5pdCIgYW5kIGFueSBmbGV4aWJsZSB0cmFjaydzICJmbGV4IGZhY3Rv
ciIgbXVzdCBiZSBncmF0ZXIgdGhhbiBzdWNoIHRyYWNrJ3MgImJhc2Ugc2l6ZSIuCiAgICAgYm9v
bCB2YWxpZEZsZXhGYWN0b3JVbml0ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8gaW5kZXggOiBmbGV4
aWJsZVRyYWNrc0luZGV4ZXMpIHsKLSAgICAgICAgaWYgKHRyYWNrc1RvVHJlYXRBc0luZmxleGli
bGUgJiYgdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZS0+Y29udGFpbnMoaW5kZXgpKQorICAgICAg
ICBpZiAodHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZS5jb250YWlucyhpbmRleCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgTGF5b3V0VW5pdCBiYXNlU2l6ZSA9IHRyYWNrc1tpbmRl
eF0uYmFzZVNpemUoKTsKICAgICAgICAgZG91YmxlIGZsZXhGYWN0b3IgPSB0cmFja3NbaW5kZXhd
LmNhY2hlZFRyYWNrU2l6ZSgpLm1heFRyYWNrQnJlYWR0aCgpLmZsZXgoKTsKQEAgLTY3Nyw5ICs2
NzcsNyBAQCBkb3VibGUgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlRmxleEZhY3Rv
clVuaXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhYwogICAgICAgICBpZiAoYmFzZVNpemUgPiBo
eXBvdGhldGljYWxGYWN0b3JVbml0U2l6ZSAqIGZsZXhGYWN0b3IpIHsKICAgICAgICAgICAgIGxl
ZnRPdmVyU3BhY2UgLT0gYmFzZVNpemU7CiAgICAgICAgICAgICBmbGV4RmFjdG9yU3VtIC09IGZs
ZXhGYWN0b3I7Ci0gICAgICAgICAgICBpZiAoIXRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUpCi0g
ICAgICAgICAgICAgICAgdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSA9IG1ha2VVbmlxdWU8VHJh
Y2tJbmRleFNldD4oKTsKLSAgICAgICAgICAgIHRyYWNrc1RvVHJlYXRBc0luZmxleGlibGUtPmFk
ZChpbmRleCk7CisgICAgICAgICAgICB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlLmFkZChpbmRl
eCk7CiAgICAgICAgICAgICB2YWxpZEZsZXhGYWN0b3JVbml0ID0gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmgKaW5kZXggNmI3OTdlYTg3ODU0MDlkZGViMThhMDU5ZjQxNjBkNTVkNjVkNThm
Zi4uNzdmOTBlNWI0ODVmZTA3YWM5MmRmZGVhYzcwODAyOGM5YjcxMjY2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaApAQCAt
MTcxLDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3Igc3Rl
cCA0LiBTdHJlY2ggZmxleGlibGUgdHJhY2tzLgogICAgIHR5cGVkZWYgSGFzaFNldDx1bnNpZ25l
ZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPj4gVHJhY2tJbmRleFNldDsKLSAgICBkb3VibGUgY29tcHV0ZUZsZXhGYWN0
b3JVbml0U2l6ZShjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzLCBkb3VibGUgZmxleEZh
Y3RvclN1bSwgTGF5b3V0VW5pdCYgbGVmdE92ZXJTcGFjZSwgY29uc3QgVmVjdG9yPHVuc2lnbmVk
LCA4PiYgZmxleGlibGVUcmFja3NJbmRleGVzLCBzdGQ6OnVuaXF1ZV9wdHI8VHJhY2tJbmRleFNl
dD4gdHJhY2tzVG9UcmVhdEFzSW5mbGV4aWJsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIGRvdWJs
ZSBjb21wdXRlRmxleEZhY3RvclVuaXRTaXplKGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFj
a3MsIGRvdWJsZSBmbGV4RmFjdG9yU3VtLCBMYXlvdXRVbml0JiBsZWZ0T3ZlclNwYWNlLCBjb25z
dCBWZWN0b3I8dW5zaWduZWQsIDg+JiBmbGV4aWJsZVRyYWNrc0luZGV4ZXMsIFRyYWNrSW5kZXhT
ZXQmJiB0cmFja3NUb1RyZWF0QXNJbmZsZXhpYmxlID0geyB9KSBjb25zdDsKICAgICB2b2lkIGNv
bXB1dGVGbGV4U2l6ZWRUcmFja3NHcm93dGgoZG91YmxlIGZsZXhGcmFjdGlvbiwgVmVjdG9yPExh
eW91dFVuaXQ+JiBpbmNyZW1lbnRzLCBMYXlvdXRVbml0JiB0b3RhbEdyb3d0aCkgY29uc3Q7CiAg
ICAgZG91YmxlIGZpbmRGclVuaXRTaXplKGNvbnN0IEdyaWRTcGFuJiB0cmFja3NTcGFuLCBMYXlv
dXRVbml0IGxlZnRPdmVyU3BhY2UpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0TG9jYXRpb24uY3BwCmluZGV4IDE2MWYyMjk1ZTE4Mzk0NWQ2YTk4NjhjZDRiZDVj
YWY3NWFiMzMxMDIuLjdhZmQ1MWYyYWQ2MmQ3YThhNGY3NGE0ZDdlOTAwNjJmOWQyZDk2ODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uY3BwCkBAIC0yNCw4
ICsyNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSGl0VGVzdExvY2F0aW9uOjpIaXRU
ZXN0TG9jYXRpb24oKSA9IGRlZmF1bHQ7Ci0KIEhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0
aW9uKGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKICAgICA6IG1fcG9pbnQocG9pbnQpCiAgICAg
LCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChwb2ludCwgMCwgMCwgMCwgMCkpCkBAIC03OCwz
MCArNzYsNiBAQCBIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0
TG9jYXRpb24mIG90aGVyLCBjb25zdCBMYXlvdXRTaXplJgogICAgIG1vdmUob2Zmc2V0KTsKIH0K
IAotSGl0VGVzdExvY2F0aW9uOjpIaXRUZXN0TG9jYXRpb24oY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBvdGhlcikKLSAgICA6IG1fcG9pbnQob3RoZXIubV9wb2ludCkKLSAgICAsIG1fYm91bmRpbmdC
b3gob3RoZXIubV9ib3VuZGluZ0JveCkKLSAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChvdGhlci5t
X3RyYW5zZm9ybWVkUG9pbnQpCi0gICAgLCBtX3RyYW5zZm9ybWVkUmVjdChvdGhlci5tX3RyYW5z
Zm9ybWVkUmVjdCkKLSAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIubV9pc1JlY3RCYXNlZCkKLSAg
ICAsIG1faXNSZWN0aWxpbmVhcihvdGhlci5tX2lzUmVjdGlsaW5lYXIpCi17Ci19Ci0KLUhpdFRl
c3RMb2NhdGlvbjo6fkhpdFRlc3RMb2NhdGlvbigpID0gZGVmYXVsdDsKLQotSGl0VGVzdExvY2F0
aW9uJiBIaXRUZXN0TG9jYXRpb246Om9wZXJhdG9yPShjb25zdCBIaXRUZXN0TG9jYXRpb24mIG90
aGVyKQotewotICAgIG1fcG9pbnQgPSBvdGhlci5tX3BvaW50OwotICAgIG1fYm91bmRpbmdCb3gg
PSBvdGhlci5tX2JvdW5kaW5nQm94OwotICAgIG1fdHJhbnNmb3JtZWRQb2ludCA9IG90aGVyLm1f
dHJhbnNmb3JtZWRQb2ludDsKLSAgICBtX3RyYW5zZm9ybWVkUmVjdCA9IG90aGVyLm1fdHJhbnNm
b3JtZWRSZWN0OwotICAgIG1faXNSZWN0QmFzZWQgPSBvdGhlci5tX2lzUmVjdEJhc2VkOwotICAg
IG1faXNSZWN0aWxpbmVhciA9IG90aGVyLm1faXNSZWN0aWxpbmVhcjsKLQotICAgIHJldHVybiAq
dGhpczsKLX0KLQogdm9pZCBIaXRUZXN0TG9jYXRpb246Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0KQogewogICAgIG1fcG9pbnQubW92ZShvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5oCmluZGV4IDAyMzAzNWY0YjlhNWMzMzUyMjA3MTlkNDUx
ZmMwNDU1NTdmZWUwMzguLjA1ODZkNDUwN2M1YzBhYmFlYWVlMjcxMjcxNjc1MjcyZDc1YTVjODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yNyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSGl0VGVzdExvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBIaXRU
ZXN0TG9jYXRpb24oKTsKKyAgICBIaXRUZXN0TG9jYXRpb24oKSA9IGRlZmF1bHQ7CiAgICAgSGl0
VGVzdExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgSGl0
VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBIaXRUZXN0TG9jYXRpb24oY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UXVhZCYpOwpAQCAtMzcsOSArMzcsNiBAQCBwdWJs
aWM6CiAKICAgICAvLyBNYWtlIGEgY29weSB0aGUgSGl0VGVzdExvY2F0aW9uIGluIGEgbmV3IHJl
Z2lvbiBieSBhcHBseWluZyBnaXZlbiBvZmZzZXQgdG8gaW50ZXJuYWwgcG9pbnQgYW5kIGFyZWEu
CiAgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IExheW91
dFNpemUmIG9mZnNldCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSGl0VGVzdExvY2F0aW9uKGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5IaXRUZXN0TG9jYXRpb24o
KTsKLSAgICBIaXRUZXN0TG9jYXRpb24mIG9wZXJhdG9yPShjb25zdCBIaXRUZXN0TG9jYXRpb24m
KTsKIAogICAgIGNvbnN0IExheW91dFBvaW50JiBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9p
bnQ7IH0KICAgICBJbnRQb2ludCByb3VuZGVkUG9pbnQoKSBjb25zdCB7IHJldHVybiByb3VuZGVk
SW50UG9pbnQobV9wb2ludCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAppbmRleCA5MGQwNzVmODlkMDUwYzAzNTQ3YjViZTM2YTk2OTk0NjNhMTMxYzUzLi41
YmZiZTUzNmNhYTkyM2UwZWZmYmUwYzIzNTU2OTUxOGY2MDJiNGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC01NSwxMiArNTUsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBhcHBlbmRUb05vZGVTZXQoY29uc3QgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldCYgc291
cmNlLCBIaXRUZXN0UmVzdWx0OjpOb2RlU2V0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBmb3IgKGF1
dG8mIG5vZGUgOiBzb3VyY2UpCi0gICAgICAgIGRlc3RpbmF0aW9uLmFkZChub2RlLmNvcHlSZWYo
KSk7Ci19Ci0KIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoKSA9IGRlZmF1bHQ7CiAKIEhp
dFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpAQCAt
ODcsNDUgKzgxLDggQEAgSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0
TG9jYXRpb24mIG90aGVyKQogewogfQogCi1IaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNv
bnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQotICAgIDogbV9oaXRUZXN0TG9jYXRpb24ob3RoZXIu
bV9oaXRUZXN0TG9jYXRpb24pCi0gICAgLCBtX2lubmVyTm9kZShvdGhlci5pbm5lck5vZGUoKSkK
LSAgICAsIG1faW5uZXJOb25TaGFyZWROb2RlKG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpKQot
ICAgICwgbV9wb2ludEluSW5uZXJOb2RlRnJhbWUob3RoZXIubV9wb2ludEluSW5uZXJOb2RlRnJh
bWUpCi0gICAgLCBtX2xvY2FsUG9pbnQob3RoZXIubG9jYWxQb2ludCgpKQotICAgICwgbV9pbm5l
clVSTEVsZW1lbnQob3RoZXIuVVJMRWxlbWVudCgpKQotICAgICwgbV9zY3JvbGxiYXIob3RoZXIu
c2Nyb2xsYmFyKCkpCi0gICAgLCBtX2lzT3ZlcldpZGdldChvdGhlci5pc092ZXJXaWRnZXQoKSkK
LXsKLSAgICAvLyBPbmx5IGNvcHkgdGhlIE5vZGVTZXQgaW4gY2FzZSBvZiBsaXN0IGhpdCB0ZXN0
LgotICAgIGlmIChvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQpIHsKLSAgICAgICAgbV9saXN0
QmFzZWRUZXN0UmVzdWx0ID0gbWFrZVVuaXF1ZTxOb2RlU2V0PigpOwotICAgICAgICBhcHBlbmRU
b05vZGVTZXQoKm90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCwgKm1fbGlzdEJhc2VkVGVzdFJl
c3VsdCk7Ci0gICAgfQotfQotCiBIaXRUZXN0UmVzdWx0Ojp+SGl0VGVzdFJlc3VsdCgpID0gZGVm
YXVsdDsKIAotSGl0VGVzdFJlc3VsdCYgSGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIG90aGVyKQotewotICAgIG1faGl0VGVzdExvY2F0aW9uID0gb3RoZXIubV9o
aXRUZXN0TG9jYXRpb247Ci0gICAgbV9pbm5lck5vZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKLSAg
ICBtX2lubmVyTm9uU2hhcmVkTm9kZSA9IG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAg
IG1fcG9pbnRJbklubmVyTm9kZUZyYW1lID0gb3RoZXIubV9wb2ludEluSW5uZXJOb2RlRnJhbWU7
Ci0gICAgbV9sb2NhbFBvaW50ID0gb3RoZXIubG9jYWxQb2ludCgpOwotICAgIG1faW5uZXJVUkxF
bGVtZW50ID0gb3RoZXIuVVJMRWxlbWVudCgpOwotICAgIG1fc2Nyb2xsYmFyID0gb3RoZXIuc2Ny
b2xsYmFyKCk7Ci0gICAgbV9pc092ZXJXaWRnZXQgPSBvdGhlci5pc092ZXJXaWRnZXQoKTsKLQot
ICAgIC8vIE9ubHkgY29weSB0aGUgTm9kZVNldCBpbiBjYXNlIG9mIGxpc3QgaGl0IHRlc3QuCi0g
ICAgaWYgKG90aGVyLm1fbGlzdEJhc2VkVGVzdFJlc3VsdCkgewotICAgICAgICBtX2xpc3RCYXNl
ZFRlc3RSZXN1bHQgPSBtYWtlVW5pcXVlPE5vZGVTZXQ+KCk7Ci0gICAgICAgIGFwcGVuZFRvTm9k
ZVNldCgqb3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0LCAqbV9saXN0QmFzZWRUZXN0UmVzdWx0
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIHN0YXRpYyBOb2RlKiBtb3ZlT3V0
T2ZVc2VyQWdlbnRTaGFkb3dUcmVlKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUuaXNJblNo
YWRvd1RyZWUoKSkgewpAQCAtNjQ0LDggKzYwMSw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6aXND
b250ZW50RWRpdGFibGUoKSBjb25zdAogICAgIHJldHVybiBtX2lubmVyTm9uU2hhcmVkTm9kZS0+
aGFzRWRpdGFibGVTdHlsZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4KLWlu
bGluZSBIaXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdENvbW1vbihOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBSZWN0VHlw
ZSYgcmVjdCkKK2lubGluZSBPcHRpb25hbDxIaXRUZXN0UHJvZ3Jlc3M+IEhpdFRlc3RSZXN1bHQ6
OmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHRDb21tb24oTm9kZSogbm9kZSwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gSWYgaXQgaXMgbm90IGEgbGlzdC1iYXNl
ZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRvIGJlIG5vLW9wLgogICAgIGlmICghcmVxdWVz
dC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpIHsKQEAgLTY2MCwxMyArNjE2LDE5IEBAIGlubGluZSBI
aXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3Vs
dENvbW1vbihOb2RlKiBuCiAgICAgICAgIHx8IChyZXF1ZXN0LmRpc2FsbG93c1VzZXJBZ2VudFNo
YWRvd0NvbnRlbnRFeGNlcHRGb3JJbWFnZU92ZXJsYXlzKCkgJiYgIUhUTUxFbGVtZW50Ojppc0lu
c2lkZUltYWdlT3ZlcmxheSgqbm9kZSkgJiYgbm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUo
KSkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5kb2N1bWVudCgpLmFuY2VzdG9yTm9kZUluVGhpc1Nj
b3BlKG5vZGUpOwogCi0gICAgbXV0YWJsZUxpc3RCYXNlZFRlc3RSZXN1bHQoKS5hZGQoKm5vZGUp
OworICAgIG1fbGlzdEJhc2VkVGVzdFJlc3VsdC5hZGQoKm5vZGUpOwogCiAgICAgaWYgKHJlcXVl
c3QuaW5jbHVkZXNBbGxFbGVtZW50c1VuZGVyUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIEhpdFRl
c3RQcm9ncmVzczo6Q29udGludWU7CiAKLSAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29u
dGFpbnMobG9jYXRpb25JbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gcmVn
aW9uRmlsbGVkID8gSGl0VGVzdFByb2dyZXNzOjpTdG9wIDogSGl0VGVzdFByb2dyZXNzOjpDb250
aW51ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZWN0VHlwZT4gaW5saW5lIEhpdFRlc3RQcm9ncmVzcyBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9M
aXN0QmFzZWRUZXN0UmVzdWx0Q29tbW9uKE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IFJlY3RUeXBlJiByZWN0KQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGFkZE5vZGVUb0xp
c3RCYXNlZFRlc3RSZXN1bHRDb21tb24obm9kZSwgcmVxdWVzdCkpCisgICAgICAgIHJldHVybiAq
cmVzdWx0OworICAgIHJldHVybiByZWN0LmNvbnRhaW5zKGxvY2F0aW9uSW5Db250YWluZXIuYm91
bmRpbmdCb3goKSkgPyBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3AgOiBIaXRUZXN0UHJvZ3Jlc3M6OkNv
bnRpbnVlOwogfQogCiBIaXRUZXN0UHJvZ3Jlc3MgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlz
dEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRSZWN0JiByZWN0KQpAQCAtNjkzLDIyICs2NTUsOCBAQCB2b2lkIEhpdFRlc3RSZXN1bHQ6OmFw
cGVuZChjb25zdCBIaXRUZXN0UmVzdWx0JiBvdGhlciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cQogICAgICAgICBtX2lzT3ZlcldpZGdldCA9IG90aGVyLmlzT3ZlcldpZGdldCgpOwogICAgIH0K
IAotICAgIGlmIChvdGhlci5tX2xpc3RCYXNlZFRlc3RSZXN1bHQpCi0gICAgICAgIGFwcGVuZFRv
Tm9kZVNldCgqb3RoZXIubV9saXN0QmFzZWRUZXN0UmVzdWx0LCBtdXRhYmxlTGlzdEJhc2VkVGVz
dFJlc3VsdCgpKTsKLX0KLQotY29uc3QgSGl0VGVzdFJlc3VsdDo6Tm9kZVNldCYgSGl0VGVzdFJl
c3VsdDo6bGlzdEJhc2VkVGVzdFJlc3VsdCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2xpc3RCYXNl
ZFRlc3RSZXN1bHQpCi0gICAgICAgIG1fbGlzdEJhc2VkVGVzdFJlc3VsdCA9IG1ha2VVbmlxdWU8
Tm9kZVNldD4oKTsKLSAgICByZXR1cm4gKm1fbGlzdEJhc2VkVGVzdFJlc3VsdDsKLX0KLQotSGl0
VGVzdFJlc3VsdDo6Tm9kZVNldCYgSGl0VGVzdFJlc3VsdDo6bXV0YWJsZUxpc3RCYXNlZFRlc3RS
ZXN1bHQoKQotewotICAgIGlmICghbV9saXN0QmFzZWRUZXN0UmVzdWx0KQotICAgICAgICBtX2xp
c3RCYXNlZFRlc3RSZXN1bHQgPSBtYWtlVW5pcXVlPE5vZGVTZXQ+KCk7Ci0gICAgcmV0dXJuICpt
X2xpc3RCYXNlZFRlc3RSZXN1bHQ7CisgICAgZm9yIChhdXRvJiBub2RlIDogb3RoZXIubV9saXN0
QmFzZWRUZXN0UmVzdWx0KQorICAgICAgICBtX2xpc3RCYXNlZFRlc3RSZXN1bHQuYWRkKG5vZGUp
OwogfQogCiBWZWN0b3I8U3RyaW5nPiBIaXRUZXN0UmVzdWx0OjpkaWN0YXRpb25BbHRlcm5hdGl2
ZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKaW5kZXgg
NWVjOTJiZjExZDBjOTJkMjEwNjI5N2JjZjQ4ZGUzN2RjODYzNDBmOS4uMzdkMWZmYmI2MTFkMzRk
ZDg1NDVjNzU4ZjJmY2M5YTg5NTAzNzI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oCkBAIC00NCwxNiArNDQsMTEgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9F
WFBPUlQgSGl0VGVzdFJlc3VsdCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEhpdFRl
c3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxp
Y2l0IEhpdFRlc3RSZXN1bHQoY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IEhpdFRlc3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0
b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcs
IHVuc2lnbmVkIGxlZnRQYWRkaW5nKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdExvY2F0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
fkhpdFRlc3RSZXN1bHQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEhpdFRlc3RSZXN1bHQmIG9w
ZXJhdG9yPShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldElubmVyTm9kZShOb2RlKik7CiAgICAgTm9kZSogaW5uZXJOb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9pbm5lck5vZGUuZ2V0KCk7IH0KIApAQCAtNzMsNyArNjgsNiBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgbGlua1N1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3Q7CiAK
LSAgICAvLyBGb3J3YXJkZWQgZnJvbSBIaXRUZXN0TG9jYXRpb24KICAgICBib29sIGlzUmVjdEJh
c2VkVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdExvY2F0aW9uLmlzUmVjdEJhc2VkVGVz
dCgpOyB9CiAKICAgICAvLyBUaGUgaGl0LXRlc3RlZCBwb2ludCBpbiB0aGUgY29vcmRpbmF0ZXMg
b2YgdGhlIG1haW4gZnJhbWUuCkBAIC0xMzYsMTAgKzEzMCw3IEBAIHB1YmxpYzoKICAgICBIaXRU
ZXN0UHJvZ3Jlc3MgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgYXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0UmVxdWVzdCYpOwogCi0gICAgLy8gSWYgbV9saXN0QmFzZWRUZXN0UmVzdWx0
IGlzIDAgdGhlbiBzZXQgaXQgdG8gYSBuZXcgTm9kZVNldC4gUmV0dXJuICptX2xpc3RCYXNlZFRl
c3RSZXN1bHQuIExhenkgYWxsb2NhdGlvbiBtYWtlcwotICAgIC8vIHNlbnNlIGJlY2F1c2UgdGhl
IE5vZGVTZXQgaXMgc2VsZG9tIG5lY2Vzc2FyeSwgYW5kIGl0J3Mgc29tZXdoYXQgZXhwZW5zaXZl
IHRvIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplLiBUaGlzIG1ldGhvZCBkb2VzCi0gICAgLy8gdGhl
IHNhbWUgdGhpbmcgYXMgbXV0YWJsZUxpc3RCYXNlZFRlc3RSZXN1bHQoKSwgYnV0IGhlcmUgdGhl
IHJldHVybiB2YWx1ZSBpcyBjb25zdC4KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBOb2RlU2V0
JiBsaXN0QmFzZWRUZXN0UmVzdWx0KCkgY29uc3Q7CisgICAgY29uc3QgTm9kZVNldCYgbGlzdEJh
c2VkVGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdEJhc2VkVGVzdFJlc3VsdDsgfQog
CiAgICAgVmVjdG9yPFN0cmluZz4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3Q7CiAKQEAg
LTE0Nyw4ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogdGFy
Z2V0RWxlbWVudCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIE5vZGVTZXQmIG11dGFibGVMaXN0
QmFzZWRUZXN0UmVzdWx0KCk7IC8vIFNlZSBhYm92ZS4KLQorICAgIE9wdGlvbmFsPEhpdFRlc3RQ
cm9ncmVzcz4gYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdENvbW1vbihOb2RlKiwgY29uc3Qg
SGl0VGVzdFJlcXVlc3QmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4gSGl0VGVz
dFByb2dyZXNzIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHRDb21tb24oTm9kZSosIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgUmVjdFR5cGUm
KTsKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlRm9ySW1hZ2VEYXRhKCkgY29uc3Q7CkBAIC0xNTYs
NiArMTQ2LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoVklERU8pCiAgICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50KCkgY29uc3Q7CiAjZW5kaWYKKwogICAgIEhpdFRlc3RMb2NhdGlv
biBtX2hpdFRlc3RMb2NhdGlvbjsKIAogICAgIFJlZlB0cjxOb2RlPiBtX2lubmVyTm9kZTsKQEAg
LTE2Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xs
YmFyOwogICAgIGJvb2wgbV9pc092ZXJXaWRnZXQgeyBmYWxzZSB9OyAvLyBSZXR1cm5zIHRydWUg
aWYgd2UgYXJlIG92ZXIgYSB3aWRnZXQgKGFuZCBub3QgaW4gdGhlIGJvcmRlci9wYWRkaW5nIGFy
ZWEgb2YgYSBSZW5kZXJXaWRnZXQgZm9yIGV4YW1wbGUpLgogCi0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8Tm9kZVNldD4gbV9saXN0QmFzZWRUZXN0UmVzdWx0OworICAgIE5vZGVTZXQgbV9s
aXN0QmFzZWRUZXN0UmVzdWx0OwogfTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRpc3BsYXlT
dHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKaW5kZXggN2ZmZmU2YmMwYmEyZjM1YjNhMTU5MzhlZTVlOWQ1ZWQ0
MTEwMmVkNS4uOWUxZWM1YzJmOTllNmRkMmYyNDVjZTJmYWRkMDZlZmMzOGYzMTJmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yLDcgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtOTYsNjEgKzk2LDU0IEBAIHN0cnVjdCBTYW1lU2l6ZUFzUmVuZGVyQmxv
Y2sgOiBwdWJsaWMgUmVuZGVyQm94IHsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbmRlckJs
b2NrKSA9PSBzaXplb2YoU2FtZVNpemVBc1JlbmRlckJsb2NrKSwgUmVuZGVyQmxvY2tfc2hvdWxk
X3N0YXlfc21hbGwpOwogCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6
OnVuaXF1ZV9wdHI8VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ+PiBUcmFja2VkRGVzY2VuZGFu
dHNNYXA7Ci10eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94Kiwgc3RkOjp1bmlxdWVfcHRy
PEhhc2hTZXQ8Y29uc3QgUmVuZGVyQmxvY2sqPj4+IFRyYWNrZWRDb250YWluZXJNYXA7Cit1c2lu
ZyBUcmFja2VkRGVzY2VuZGFudHNNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgVHJh
Y2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ+OwordXNpbmcgVHJhY2tlZENvbnRhaW5lck1hcCA9IEhh
c2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgSGFzaFNldDxjb25zdCBSZW5kZXJCbG9jayo+PjsKIAot
c3RhdGljIFRyYWNrZWREZXNjZW5kYW50c01hcCogcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFw
Owotc3RhdGljIFRyYWNrZWRDb250YWluZXJNYXAqIHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXA7
CitzdGF0aWMgVHJhY2tlZERlc2NlbmRhbnRzTWFwJiBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNN
YXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUcmFja2VkRGVzY2VuZGFudHNNYXA+
IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgVHJhY2tlZENvbnRhaW5lck1hcCYg
cGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFRyYWNrZWRDb250YWluZXJNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQogCiBzdGF0aWMg
dm9pZCBpbnNlcnRJbnRvVHJhY2tlZFJlbmRlcmVyTWFwcyhjb25zdCBSZW5kZXJCbG9jayYgY29u
dGFpbmVyLCBSZW5kZXJCb3gmIGRlc2NlbmRhbnQpCiB7Ci0gICAgaWYgKCFwZXJjZW50SGVpZ2h0
RGVzY2VuZGFudHNNYXApIHsKLSAgICAgICAgcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwID0g
bmV3IFRyYWNrZWREZXNjZW5kYW50c01hcDsKLSAgICAgICAgcGVyY2VudEhlaWdodENvbnRhaW5l
ck1hcCA9IG5ldyBUcmFja2VkQ29udGFpbmVyTWFwOwotICAgIH0KLSAgICAKLSAgICBhdXRvJiBk
ZXNjZW5kYW50U2V0ID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT5lbnN1cmUoJmNvbnRh
aW5lciwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUcmFja2VkUmVuZGVyZXJMaXN0
SGFzaFNldD4oKTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgZGVzY2VuZGFu
dFNldCA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmFkZCgmY29udGFpbmVyLCBUcmFj
a2VkUmVuZGVyZXJMaXN0SGFzaFNldCB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKIAotICAgIGJvb2wg
YWRkZWQgPSBkZXNjZW5kYW50U2V0LT5hZGQoJmRlc2NlbmRhbnQpLmlzTmV3RW50cnk7CisgICAg
Ym9vbCBhZGRlZCA9IGRlc2NlbmRhbnRTZXQuYWRkKCZkZXNjZW5kYW50KS5pc05ld0VudHJ5Owog
ICAgIGlmICghYWRkZWQpIHsKLSAgICAgICAgQVNTRVJUKHBlcmNlbnRIZWlnaHRDb250YWluZXJN
YXAtPmdldCgmZGVzY2VuZGFudCkpOwotICAgICAgICBBU1NFUlQocGVyY2VudEhlaWdodENvbnRh
aW5lck1hcC0+Z2V0KCZkZXNjZW5kYW50KS0+Y29udGFpbnMoJmNvbnRhaW5lcikpOworICAgICAg
ICBBU1NFUlQocGVyY2VudEhlaWdodENvbnRhaW5lck1hcCgpLmNvbnRhaW5zKCZkZXNjZW5kYW50
KSk7CisgICAgICAgIEFTU0VSVChwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkuZmluZCgmZGVz
Y2VuZGFudCktPnZhbHVlLmNvbnRhaW5zKCZjb250YWluZXIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBhdXRvJiBjb250YWluZXJTZXQgPSBwZXJjZW50SGVpZ2h0Q29udGFp
bmVyTWFwLT5lbnN1cmUoJmRlc2NlbmRhbnQsIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8SGFzaFNldDxjb25zdCBSZW5kZXJCbG9jayo+PigpOwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBhdXRvJiBjb250YWluZXJTZXQgPSBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCku
YWRkKCZkZXNjZW5kYW50LCBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrKj4geyB9KS5pdGVyYXRv
ci0+dmFsdWU7CiAKLSAgICBBU1NFUlQoIWNvbnRhaW5lclNldC0+Y29udGFpbnMoJmNvbnRhaW5l
cikpOwotICAgIGNvbnRhaW5lclNldC0+YWRkKCZjb250YWluZXIpOworICAgIEFTU0VSVCghY29u
dGFpbmVyU2V0LmNvbnRhaW5zKCZjb250YWluZXIpKTsKKyAgICBjb250YWluZXJTZXQuYWRkKCZj
b250YWluZXIpOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFw
cyhSZW5kZXJCb3gmIGRlc2NlbmRhbnQpCiB7Ci0gICAgaWYgKCFwZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudHNNYXApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFz
aFNldDxjb25zdCBSZW5kZXJCbG9jayo+PiBjb250YWluZXJTZXQgPSBwZXJjZW50SGVpZ2h0Q29u
dGFpbmVyTWFwLT50YWtlKCZkZXNjZW5kYW50KTsKLSAgICBpZiAoIWNvbnRhaW5lclNldCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoYXV0byogY29udGFpbmVyIDogKmNvbnRhaW5l
clNldCkgeworICAgIGZvciAoYXV0byogY29udGFpbmVyIDogcGVyY2VudEhlaWdodENvbnRhaW5l
ck1hcCgpLnRha2UoJmRlc2NlbmRhbnQpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBEaXNhYmxpbmcg
dGhpcyBhc3NlcnQgdGVtcG9yYXJpbHkgdW50aWwgd2UgZml4IHRoZSBsYXlvdXQKICAgICAgICAg
Ly8gYnVncyBhc3NvY2lhdGVkIHdpdGggcG9zaXRpb25lZCBvYmplY3RzIG5vdCBwcm9wZXJseSBj
bGVhcmVkIGZyb20KICAgICAgICAgLy8gdGhlaXIgYW5jZXN0b3IgY2hhaW4gYmVmb3JlIGJlaW5n
IG1vdmVkLiBTZWUgd2Via2l0IGJ1ZyA5Mzc2Ni4KICAgICAgICAgLy8gQVNTRVJUKGRlc2NlbmRh
bnQtPmlzRGVzY2VuZGFudE9mKGNvbnRhaW5lcikpOwotICAgICAgICBhdXRvIGRlc2NlbmRhbnRz
TWFwSXRlcmF0b3IgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmZpbmQoY29udGFpbmVy
KTsKLSAgICAgICAgQVNTRVJUKGRlc2NlbmRhbnRzTWFwSXRlcmF0b3IgIT0gcGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzTWFwLT5lbmQoKSk7Ci0gICAgICAgIGlmIChkZXNjZW5kYW50c01hcEl0ZXJh
dG9yID09IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcC0+ZW5kKCkpCisgICAgICAgIGF1dG8g
ZGVzY2VuZGFudHNNYXBJdGVyYXRvciA9IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLmZp
bmQoY29udGFpbmVyKTsKKyAgICAgICAgQVNTRVJUKGRlc2NlbmRhbnRzTWFwSXRlcmF0b3IgIT0g
cGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKCkuZW5kKCkpOworICAgICAgICBpZiAoZGVzY2Vu
ZGFudHNNYXBJdGVyYXRvciA9PSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5lbmQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBkZXNjZW5kYW50U2V0ID0gZGVz
Y2VuZGFudHNNYXBJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIEFTU0VSVChkZXNjZW5kYW50U2V0
LT5jb250YWlucygmZGVzY2VuZGFudCkpOwotICAgICAgICBkZXNjZW5kYW50U2V0LT5yZW1vdmUo
JmRlc2NlbmRhbnQpOwotICAgICAgICBpZiAoZGVzY2VuZGFudFNldC0+aXNFbXB0eSgpKQotICAg
ICAgICAgICAgcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT5yZW1vdmUoZGVzY2VuZGFudHNN
YXBJdGVyYXRvcik7CisgICAgICAgIEFTU0VSVChkZXNjZW5kYW50U2V0LmNvbnRhaW5zKCZkZXNj
ZW5kYW50KSk7CisgICAgICAgIGRlc2NlbmRhbnRTZXQucmVtb3ZlKCZkZXNjZW5kYW50KTsKKyAg
ICAgICAgaWYgKGRlc2NlbmRhbnRTZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgcGVyY2VudEhl
aWdodERlc2NlbmRhbnRzTWFwKCkucmVtb3ZlKGRlc2NlbmRhbnRzTWFwSXRlcmF0b3IpOwogICAg
IH0KIH0KIApAQCAtMTYyLDE2ICsxNTUsMTUgQEAgcHVibGljOgogICAgICAgICAvLyBQcm90ZWN0
IGFnYWluc3QgZG91YmxlIGluc2VydCB3aGVyZSBhIGRlc2NlbmRhbnQgd291bGQgZW5kIHVwIHdp
dGggbXVsdGlwbGUgY29udGFpbmluZyBibG9ja3MuCiAgICAgICAgIGF1dG8qIHByZXZpb3VzQ29u
dGFpbmluZ0Jsb2NrID0gbV9jb250YWluZXJNYXAuZ2V0KCZwb3NpdGlvbmVkRGVzY2VuZGFudCk7
CiAgICAgICAgIGlmIChwcmV2aW91c0NvbnRhaW5pbmdCbG9jayAmJiBwcmV2aW91c0NvbnRhaW5p
bmdCbG9jayAhPSAmY29udGFpbmluZ0Jsb2NrKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZGVz
Y2VuZGFudHMgPSBtX2Rlc2NlbmRhbnRzTWFwLmdldChwcmV2aW91c0NvbnRhaW5pbmdCbG9jaykp
Ci0gICAgICAgICAgICAgICAgZGVzY2VuZGFudHMtPnJlbW92ZSgmcG9zaXRpb25lZERlc2NlbmRh
bnQpOworICAgICAgICAgICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX2Rlc2NlbmRhbnRzTWFwLmZp
bmQocHJldmlvdXNDb250YWluaW5nQmxvY2spOyBpdGVyYXRvciAhPSBtX2Rlc2NlbmRhbnRzTWFw
LmVuZCgpKQorICAgICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoJnBvc2l0aW9u
ZWREZXNjZW5kYW50KTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8mIGRlc2NlbmRhbnRzID0g
bV9kZXNjZW5kYW50c01hcC5lbnN1cmUoJmNvbnRhaW5pbmdCbG9jaywgW10gewotICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ+KCk7Ci0gICAg
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYgZGVzY2VuZGFudHMgPSBtX2Rl
c2NlbmRhbnRzTWFwLmFkZCgmY29udGFpbmluZ0Jsb2NrLCBUcmFja2VkUmVuZGVyZXJMaXN0SGFz
aFNldCB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKIAotICAgICAgICBib29sIGlzTmV3RW50cnkgPSBt
b3ZlRGVzY2VuZGFudFRvRW5kID09IE1vdmVEZXNjZW5kYW50VG9FbmQ6OlllcyA/IGRlc2NlbmRh
bnRzLT5hcHBlbmRPck1vdmVUb0xhc3QoJnBvc2l0aW9uZWREZXNjZW5kYW50KS5pc05ld0VudHJ5
Ci0gICAgICAgICAgICA6IGRlc2NlbmRhbnRzLT5hZGQoJnBvc2l0aW9uZWREZXNjZW5kYW50KS5p
c05ld0VudHJ5OworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtb3ZlRGVzY2VuZGFudFRvRW5k
ID09IE1vdmVEZXNjZW5kYW50VG9FbmQ6OlllcworICAgICAgICAgICAgPyBkZXNjZW5kYW50cy5h
cHBlbmRPck1vdmVUb0xhc3QoJnBvc2l0aW9uZWREZXNjZW5kYW50KS5pc05ld0VudHJ5CisgICAg
ICAgICAgICA6IGRlc2NlbmRhbnRzLmFkZCgmcG9zaXRpb25lZERlc2NlbmRhbnQpLmlzTmV3RW50
cnk7CiAgICAgICAgIGlmICghaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgQVNTRVJUKG1fY29u
dGFpbmVyTWFwLmNvbnRhaW5zKCZwb3NpdGlvbmVkRGVzY2VuZGFudCkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTkxLDMwICsxODMsMjcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIGF1dG8mIGRlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNJdGVyYXRvci0+dmFs
dWU7Ci0gICAgICAgIEFTU0VSVChkZXNjZW5kYW50cy0+Y29udGFpbnMoY29uc3RfY2FzdDxSZW5k
ZXJCb3gqPigmcG9zaXRpb25lZERlc2NlbmRhbnQpKSk7CisgICAgICAgIEFTU0VSVChkZXNjZW5k
YW50cy5jb250YWlucyhjb25zdF9jYXN0PFJlbmRlckJveCo+KCZwb3NpdGlvbmVkRGVzY2VuZGFu
dCkpKTsKIAotICAgICAgICBkZXNjZW5kYW50cy0+cmVtb3ZlKGNvbnN0X2Nhc3Q8UmVuZGVyQm94
Kj4oJnBvc2l0aW9uZWREZXNjZW5kYW50KSk7Ci0gICAgICAgIGlmIChkZXNjZW5kYW50cy0+aXNF
bXB0eSgpKQorICAgICAgICBkZXNjZW5kYW50cy5yZW1vdmUoY29uc3RfY2FzdDxSZW5kZXJCb3gq
PigmcG9zaXRpb25lZERlc2NlbmRhbnQpKTsKKyAgICAgICAgaWYgKGRlc2NlbmRhbnRzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIG1fZGVzY2VuZGFudHNNYXAucmVtb3ZlKGRlc2NlbmRhbnRzSXRl
cmF0b3IpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlbW92ZUNvbnRhaW5pbmdCbG9jayhjb25z
dCBSZW5kZXJCbG9jayYgY29udGFpbmluZ0Jsb2NrKQogICAgIHsKLSAgICAgICAgYXV0byBkZXNj
ZW5kYW50cyA9IG1fZGVzY2VuZGFudHNNYXAudGFrZSgmY29udGFpbmluZ0Jsb2NrKTsKLSAgICAg
ICAgaWYgKCFkZXNjZW5kYW50cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3Ig
KGF1dG8qIHJlbmRlcmVyIDogKmRlc2NlbmRhbnRzKQorICAgICAgICBmb3IgKGF1dG8qIHJlbmRl
cmVyIDogbV9kZXNjZW5kYW50c01hcC50YWtlKCZjb250YWluaW5nQmxvY2spKQogICAgICAgICAg
ICAgbV9jb250YWluZXJNYXAucmVtb3ZlKHJlbmRlcmVyKTsKICAgICB9CiAgICAgCi0gICAgVHJh
Y2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRSZW5kZXJlcnMoY29uc3QgUmVuZGVy
QmxvY2smIGNvbnRhaW5pbmdCbG9jaykgY29uc3QKKyAgICBjb25zdCBUcmFja2VkUmVuZGVyZXJM
aXN0SGFzaFNldCogcG9zaXRpb25lZFJlbmRlcmVycyhjb25zdCBSZW5kZXJCbG9jayYgY29udGFp
bmluZ0Jsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGVzY2VuZGFudHNNYXAu
Z2V0KCZjb250YWluaW5nQmxvY2spOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9kZXNjZW5k
YW50c01hcC5maW5kKCZjb250YWluaW5nQmxvY2spOworICAgICAgICByZXR1cm4gaXRlcmF0b3Ig
PT0gbV9kZXNjZW5kYW50c01hcC5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0b3ItPnZhbHVlOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB1c2luZyBEZXNjZW5kYW50c01hcCA9IEhhc2hNYXA8Y29u
c3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8VHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hT
ZXQ+PjsKKyAgICB1c2luZyBEZXNjZW5kYW50c01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxv
Y2sqLCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldD47CiAgICAgdXNpbmcgQ29udGFpbmVyTWFw
ID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBjb25zdCBSZW5kZXJCbG9jayo+OwogICAgIAog
ICAgIERlc2NlbmRhbnRzTWFwIG1fZGVzY2VuZGFudHNNYXA7CkBAIC0yMjcsNyArMjE2LDcgQEAg
c3RhdGljIFBvc2l0aW9uZWREZXNjZW5kYW50c01hcCYgcG9zaXRpb25lZERlc2NlbmRhbnRzTWFw
KCkKICAgICByZXR1cm4gbWFwRm9yUG9zaXRpb25lZERlc2NlbmRhbnRzOwogfQogCi10eXBlZGVm
IEhhc2hNYXA8UmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8UmVuZGVy
SW5saW5lKj4+PiBDb250aW51YXRpb25PdXRsaW5lVGFibGVNYXA7Cit1c2luZyBDb250aW51YXRp
b25PdXRsaW5lVGFibGVNYXAgPSBIYXNoTWFwPFJlbmRlckJsb2NrKiwgTGlzdEhhc2hTZXQ8UmVu
ZGVySW5saW5lKj4+OwogCiBzdHJ1Y3QgVXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNh
Y3Rpb24gewogICAgIFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKGNvbnN0
IFJlbmRlclZpZXcmIHZpZXcpCkBAIC0yNDEsNyArMjMwLDggQEAgc3RydWN0IFVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uIHsKICAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4g
YmxvY2tzOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
VHJhbnNhY3Rpb24+IERlbGF5ZWRVcGRhdGVTY3JvbGxJbmZvU3RhY2s7Cit1c2luZyBEZWxheWVk
VXBkYXRlU2Nyb2xsSW5mb1N0YWNrID0gVmVjdG9yPFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91
dFRyYW5zYWN0aW9uPjsKKwogc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxEZWxheWVkVXBkYXRlU2Ny
b2xsSW5mb1N0YWNrPiYgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb25TdGFj
aygpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5pcXVlX3B0cjxEZWxheWVk
VXBkYXRlU2Nyb2xsSW5mb1N0YWNrPj4gZGVsYXllZFVwZGF0ZWRTY3JvbGxJbmZvU3RhY2s7CkBA
IC0yNjQsOCArMjU0LDEzIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxXZWFrUHRyPFJlbmRlckZy
YWdtZW50ZWRGbG93Pj4gbV9lbmNsb3NpbmdGcmFnbWVudGVkRmxvdzsKIH07CiAKLXR5cGVkZWYg
SGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1Jh
cmVEYXRhPj4gUmVuZGVyQmxvY2tSYXJlRGF0YU1hcDsKLXN0YXRpYyBSZW5kZXJCbG9ja1JhcmVE
YXRhTWFwKiBnUmFyZURhdGFNYXA7Cit1c2luZyBSZW5kZXJCbG9ja1JhcmVEYXRhTWFwID0gSGFz
aE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1JhcmVE
YXRhPj47CisKK3N0YXRpYyBSZW5kZXJCbG9ja1JhcmVEYXRhTWFwJiByZW5kZXJCbG9ja1JhcmVE
YXRhTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVuZGVyQmxvY2tSYXJlRGF0
YU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CiAKIC8vIFRoaXMgY2xhc3MgaGVscHMgZGlz
cGF0Y2hpbmcgdGhlICdvdmVyZmxvdycgZXZlbnQgb24gbGF5b3V0IGNoYW5nZS4gb3ZlcmZsb3cg
Y2FuIGJlIHNldCBvbiBSZW5kZXJCb3hlcywgeWV0IHRoZSBleGlzdGluZyBjb2RlCiAvLyBvbmx5
IHdvcmtzIG9uIFJlbmRlckJsb2Nrcy4gSWYgdGhpcyBjaGFuZ2UsIHRoaXMgY2xhc3Mgc2hvdWxk
IGJlIHNoYXJlZCB3aXRoIG90aGVyIFJlbmRlckJveGVzLgpAQCAtMzIxLDMwICszMTYsMjMgQEAg
UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUm
JiBzdHlsZSwgQmFzZVR5cGVGbGFncwogCiBzdGF0aWMgdm9pZCByZW1vdmVCbG9ja0Zyb21QZXJj
ZW50YWdlRGVzY2VuZGFudEFuZENvbnRhaW5lck1hcHMoUmVuZGVyQmxvY2sqIGJsb2NrKQogewot
ICAgIGlmICghcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKQotICAgICAgICByZXR1cm47Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0PiBkZXNjZW5kYW50
U2V0ID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwLT50YWtlKGJsb2NrKTsKLSAgICBpZiAo
IWRlc2NlbmRhbnRTZXQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKGF1dG8qIGRl
c2NlbmRhbnQgOiAqZGVzY2VuZGFudFNldCkgewotICAgICAgICBhdXRvIGl0ID0gcGVyY2VudEhl
aWdodENvbnRhaW5lck1hcC0+ZmluZChkZXNjZW5kYW50KTsKLSAgICAgICAgQVNTRVJUKGl0ICE9
IHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAtPmVuZCgpKTsKLSAgICAgICAgaWYgKGl0ID09IHBl
cmNlbnRIZWlnaHRDb250YWluZXJNYXAtPmVuZCgpKQorICAgIGZvciAoYXV0byogZGVzY2VuZGFu
dCA6IHBlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCgpLnRha2UoYmxvY2spKSB7CisgICAgICAg
IGF1dG8gaXQgPSBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkuZmluZChkZXNjZW5kYW50KTsK
KyAgICAgICAgQVNTRVJUKGl0ICE9IHBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5lbmQoKSk7
CisgICAgICAgIGlmIChpdCA9PSBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkuZW5kKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byogY29udGFpbmVyU2V0ID0gaXQtPnZh
bHVlLmdldCgpOwotICAgICAgICBBU1NFUlQoY29udGFpbmVyU2V0LT5jb250YWlucyhibG9jaykp
OwotICAgICAgICBjb250YWluZXJTZXQtPnJlbW92ZShibG9jayk7Ci0gICAgICAgIGlmIChjb250
YWluZXJTZXQtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHBlcmNlbnRIZWlnaHRDb250YWluZXJN
YXAtPnJlbW92ZShpdCk7CisgICAgICAgIGF1dG8mIGNvbnRhaW5lclNldCA9IGl0LT52YWx1ZTsK
KyAgICAgICAgQVNTRVJUKGNvbnRhaW5lclNldC5jb250YWlucyhibG9jaykpOworICAgICAgICBj
b250YWluZXJTZXQucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgaWYgKGNvbnRhaW5lclNldC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBwZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwKCkucmVtb3ZlKGl0
KTsKICAgICB9CiB9CiAKIFJlbmRlckJsb2NrOjp+UmVuZGVyQmxvY2soKQogewotICAgIC8vIEJs
b2NrcyBjYW4gYmUgYWRkZWQgdG8gZ1JhcmVEYXRhTWFwIGR1cmluZyB3aWxsQmVEZXN0cm95ZWQo
KSwgc28gdGhpcyBjb2RlIGNhbid0IG1vdmUgdGhlcmUuCi0gICAgaWYgKGdSYXJlRGF0YU1hcCkK
LSAgICAgICAgZ1JhcmVEYXRhTWFwLT5yZW1vdmUodGhpcyk7CisgICAgLy8gQmxvY2tzIGNhbiBi
ZSBhZGRlZCB0byB0aGUgbWFwIGR1cmluZyB3aWxsQmVEZXN0cm95ZWQoKSwgc28gdGhpcyBjb2Rl
IGNhbid0IG1vdmUgdGhlcmUuCisgICAgcmVuZGVyQmxvY2tSYXJlRGF0YU1hcCgpLnJlbW92ZSh0
aGlzKTsKIAogICAgIC8vIERvIG5vdCBhZGQgYW55IG1vcmUgY29kZSBoZXJlLiBBZGQgaXQgdG8g
d2lsbEJlRGVzdHJveWVkKCkgaW5zdGVhZC4KIH0KQEAgLTM3Miw3ICszNjAsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpibG9ja1dpbGxCZURlc3Ryb3llZCgpCiAKIGJvb2wgUmVuZGVyQmxvY2s6Omhh
c1JhcmVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ1JhcmVEYXRhTWFwID8gZ1JhcmVEYXRh
TWFwLT5jb250YWlucyh0aGlzKSA6IGZhbHNlOworICAgIHJldHVybiByZW5kZXJCbG9ja1JhcmVE
YXRhTWFwKCkuY29udGFpbnModGhpcyk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBv
c2l0aW9uZWRPYmplY3RzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIG9sZFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCkBAIC02MDksMTggKzU5NywxNCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXQoKQogCiBzdGF0aWMgUmVuZGVyQmxvY2tSYXJlRGF0YSogZ2V0QmxvY2tS
YXJlRGF0YShjb25zdCBSZW5kZXJCbG9jayYgYmxvY2spCiB7Ci0gICAgcmV0dXJuIGdSYXJlRGF0
YU1hcCA/IGdSYXJlRGF0YU1hcC0+Z2V0KCZibG9jaykgOiBudWxscHRyOworICAgIHJldHVybiBy
ZW5kZXJCbG9ja1JhcmVEYXRhTWFwKCkuZ2V0KCZibG9jayk7CiB9CiAKIHN0YXRpYyBSZW5kZXJC
bG9ja1JhcmVEYXRhJiBlbnN1cmVCbG9ja1JhcmVEYXRhKGNvbnN0IFJlbmRlckJsb2NrJiBibG9j
aykKIHsKLSAgICBpZiAoIWdSYXJlRGF0YU1hcCkKLSAgICAgICAgZ1JhcmVEYXRhTWFwID0gbmV3
IFJlbmRlckJsb2NrUmFyZURhdGFNYXA7Ci0gICAgCi0gICAgYXV0byYgcmFyZURhdGEgPSBnUmFy
ZURhdGFNYXAtPmFkZCgmYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAo
IXJhcmVEYXRhKQotICAgICAgICByYXJlRGF0YSA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tSYXJl
RGF0YT4oKTsKLSAgICByZXR1cm4gKnJhcmVEYXRhLmdldCgpOworICAgIHJldHVybiAqcmVuZGVy
QmxvY2tSYXJlRGF0YU1hcCgpLmVuc3VyZSgmYmxvY2ssIFtdIHsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8UmVuZGVyQmxvY2tSYXJlRGF0YT4oKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7
CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnByZXBhcmVQYWdpbmF0aW9uQmVmb3JlQmxvY2tMYXlv
dXQoYm9vbCYgcmVsYXlvdXRDaGlsZHJlbikKQEAgLTczOSw3ICs3MjMsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCkKIAogdm9pZCBSZW5kZXJCbG9j
azo6YWRkT3ZlcmZsb3dGcm9tUG9zaXRpb25lZE9iamVjdHMoKQogewotICAgIFRyYWNrZWRSZW5k
ZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2JqZWN0
cygpOworICAgIGF1dG8gcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9iamVjdHMo
KTsKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwogCkBA
IC04MzIsMTggKzgxNiwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVCbG9ja0NoaWxkRGly
dHlCaXRzQmVmb3JlTGF5b3V0KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgUgogCiB2b2lkIFJlbmRl
ckJsb2NrOjpkaXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKQog
ewotICAgIGlmICghcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogZGVzY2VuZGFudHMgPSBwZXJjZW50
SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmdldCh0aGlzKTsKLSAgICBpZiAoIWRlc2NlbmRhbnRzKQor
ICAgIGF1dG8gaXRlcmF0b3IgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5maW5kKHRo
aXMpOworICAgIGlmIChpdGVyYXRvciA9PSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5l
bmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMt
PmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gKml0OworICAgIGZvciAoYXV0byogYm94
IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgIC8vIExldCdzIG5vdCBkaXJ0eSB0aGUgaGVp
Z2h0IHBlcmVjZW50YWdlIGRlc2NlbmRhbnQgd2hlbiBpdCBoYXMgYW4gYWJzb2x1dGVseSBwb3Np
dGlvbmVkIGNvbnRhaW5pbmcgYmxvY2sgYW5jZXN0b3IuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGRp
cnR5IHN1Y2ggYm94ZXMgdGhyb3VnaCB0aGUgcmVndWxhciBpbnZhbGlkYXRpb24gbG9naWMuCiAg
ICAgICAgIGJvb2wgZGVzY2VuZGFudE5lZWRzTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgZm9yIChh
dXRvKiBhbmNlc3RvciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsgYW5jZXN0b3IgJiYg
YW5jZXN0b3IgIT0gdGhpczsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IGJveC0+Y29udGFpbmluZ0Jsb2NrKCk7
IGFuY2VzdG9yICYmIGFuY2VzdG9yICE9IHRoaXM7IGFuY2VzdG9yID0gYW5jZXN0b3ItPmNvbnRh
aW5pbmdCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgZGVzY2VuZGFudE5lZWRzTGF5b3V0ID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04NTIsNyArODMyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6ZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCkK
ICAgICAgICAgaWYgKCFkZXNjZW5kYW50TmVlZHNMYXlvdXQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICB3aGlsZSAocmVuZGVyZXIgIT0gdGhpcykgeworICAgICAgICBmb3IgKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyID0gYm94OyByZW5kZXJlciAhPSB0aGlzOyApIHsKICAgICAg
ICAgICAgIGlmIChyZW5kZXJlci0+bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmVuZGVyZXItPnNldENoaWxkTmVlZHNMYXlvdXQo
TWFya09ubHlUaGlzKTsKQEAgLTEwODAsMTkgKzEwNjAsMjAgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIHIsIGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgYm8KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBib29sIGZpeGVkUG9zaXRpb25PYmplY3RzT25seSkKIHsKLSAgICBU
cmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRp
b25lZE9iamVjdHMoKTsKKyAgICBhdXRvIHBvc2l0aW9uZWREZXNjZW5kYW50cyA9IHBvc2l0aW9u
ZWRPYmplY3RzKCk7CiAgICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFudHMpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICAvLyBEbyBub3QgY2FjaGUgcG9zaXRpb25lZERlc2NlbmRhbnRzLT5l
bmQoKSBpbiBhIGxvY2FsIHZhcmlhYmxlLCBzaW5jZSB8cG9zaXRpb25lZERlc2NlbmRhbnRzfCBj
YW4gYmUgbXV0YXRlZAogICAgIC8vIGFzIGl0IGlzIHdhbGtlZC4gV2UgYWx3YXlzIG5lZWQgdG8g
ZmV0Y2ggdGhlIG5ldyBlbmQoKSB2YWx1ZSBkeW5hbWljYWxseS4KKyAgICAvLyBGSVhNRTogVGhl
IGFib3ZlIHRlY2huaXF1ZSBkb2Vzbid0IG5lY2Vzc2FyaWx5IHdvcms7IGNhbm5vdCBtYWtlIGl0
IHNhZmUgdG8gbW9kaWZ5IGEgc2V0IHdoaWxlIGl0ZXJhdGluZyBldmVuIGlmIHdlIGtlZXAgY2Fs
bGluZyAiZW5kKCkiLgogICAgIGZvciAoYXV0byBpdCA9IHBvc2l0aW9uZWREZXNjZW5kYW50cy0+
YmVnaW4oKTsgaXQgIT0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsgKytpdCkKICAgICAg
ICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdCgqKml0LCByZWxheW91dENoaWxkcmVuLCBmaXhlZFBv
c2l0aW9uT2JqZWN0c09ubHkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrUG9zaXRpb25l
ZE9iamVjdHNGb3JMYXlvdXQoKQogewotICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBw
b3NpdGlvbmVkRGVzY2VuZGFudHMgPSBwb3NpdGlvbmVkT2JqZWN0cygpOworICAgIGF1dG8gcG9z
aXRpb25lZERlc2NlbmRhbnRzID0gcG9zaXRpb25lZE9iamVjdHMoKTsKICAgICBpZiAoIXBvc2l0
aW9uZWREZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzc2LDEwICsxMzU3LDEw
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgfQogfQogCi1zdGF0aWMgQ29udGludWF0
aW9uT3V0bGluZVRhYmxlTWFwKiBjb250aW51YXRpb25PdXRsaW5lVGFibGUoKQorc3RhdGljIENv
bnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCYgY29udGludWF0aW9uT3V0bGluZVRhYmxlKCkKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwPiB0
YWJsZTsKLSAgICByZXR1cm4gJnRhYmxlLmdldCgpOworICAgIHJldHVybiB0YWJsZTsKIH0KIAog
dm9pZCBSZW5kZXJCbG9jazo6YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoUmVuZGVySW5saW5l
KiBmbG93KQpAQCAtMTM4OCw0NSArMTM2OSwyMyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDb250
aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJJbmxpbmUqIGZsb3cpCiAgICAgLy8gd2F5IG9mIHBh
aW50aW5nLgogICAgIEFTU0VSVCghZmxvdy0+bGF5ZXIoKSAmJiAhZmxvdy0+aXNDb250aW51YXRp
b24oKSk7CiAgICAgCi0gICAgQ29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwKiB0YWJsZSA9IGNv
bnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpOwotICAgIExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+
KiBjb250aW51YXRpb25zID0gdGFibGUtPmdldCh0aGlzKTsKLSAgICBpZiAoIWNvbnRpbnVhdGlv
bnMpIHsKLSAgICAgICAgY29udGludWF0aW9ucyA9IG5ldyBMaXN0SGFzaFNldDxSZW5kZXJJbmxp
bmUqPjsKLSAgICAgICAgdGFibGUtPnNldCh0aGlzLCBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hT
ZXQ8UmVuZGVySW5saW5lKj4+KGNvbnRpbnVhdGlvbnMpKTsKLSAgICB9Ci0gICAgCi0gICAgY29u
dGludWF0aW9ucy0+YWRkKGZsb3cpOworICAgIGNvbnRpbnVhdGlvbk91dGxpbmVUYWJsZSgpLmFk
ZCh0aGlzLCBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPiB7IH0pLml0ZXJhdG9yLT52YWx1ZS5h
ZGQoZmxvdyk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OnBhaW50c0NvbnRpbnVhdGlvbk91dGxp
bmUoUmVuZGVySW5saW5lKiBmbG93KQogewotICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1h
cCogdGFibGUgPSBjb250aW51YXRpb25PdXRsaW5lVGFibGUoKTsKLSAgICBpZiAodGFibGUtPmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBMaXN0SGFzaFNl
dDxSZW5kZXJJbmxpbmUqPiogY29udGludWF0aW9ucyA9IHRhYmxlLT5nZXQodGhpcyk7Ci0gICAg
aWYgKCFjb250aW51YXRpb25zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
Y29udGludWF0aW9ucy0+Y29udGFpbnMoZmxvdyk7CisgICAgYXV0byYgdGFibGUgPSBjb250aW51
YXRpb25PdXRsaW5lVGFibGUoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUuZmluZCh0aGlz
KTsKKyAgICByZXR1cm4gaXRlcmF0b3IgIT0gdGFibGUuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVl
LmNvbnRhaW5zKGZsb3cpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRpbnVhdGlv
bk91dGxpbmVzKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQogewotICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogdGFibGUgPSBjb250aW51YXRp
b25PdXRsaW5lVGFibGUoKTsKLSAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlzdEhhc2hTZXQ8UmVuZGVySW5s
aW5lKj4+IGNvbnRpbnVhdGlvbnMgPSB0YWJsZS0+dGFrZSh0aGlzKTsKLSAgICBpZiAoIWNvbnRp
bnVhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLQogICAgIExheW91dFBvaW50IGFjY3VtdWxhdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKwogICAgIC8vIFBhaW50IGVhY2ggY29udGludWF0
aW9uIG91dGxpbmUuCi0gICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9yIGVu
ZCA9IGNvbnRpbnVhdGlvbnMtPmVuZCgpOwotICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVySW5s
aW5lKj46Oml0ZXJhdG9yIGl0ID0gY29udGludWF0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgZm9yIChhdXRvKiBmbG93IDogY29udGludWF0aW9uT3V0bGluZVRhYmxlKCku
dGFrZSh0aGlzKSkgewogICAgICAgICAvLyBOZWVkIHRvIGFkZCBpbiB0aGUgY29vcmRpbmF0ZXMg
b2YgdGhlIGludGVydmVuaW5nIGJsb2Nrcy4KLSAgICAgICAgUmVuZGVySW5saW5lKiBmbG93ID0g
Kml0OwogICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBmbG93LT5jb250YWluaW5nQmxvY2so
KTsKICAgICAgICAgZm9yICggOyBibG9jayAmJiBibG9jayAhPSB0aGlzOyBibG9jayA9IGJsb2Nr
LT5jb250YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgIGFjY3VtdWxhdGVkUGFpbnRPZmZzZXQu
bW92ZUJ5KGJsb2NrLT5sb2NhdGlvbigpKTsKQEAgLTE1MTgsNyArMTQ3Nyw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9u
ZWRPYmplY3RzKGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
b2Zmc2V0LCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZE9iamVjdHMpCitz
dGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJbmZvKiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXQsIGNvbnN0IFRyYWNrZWRSZW5kZXJlckxp
c3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0cykKIHsKICAgICBpZiAoIXBvc2l0aW9uZWRPYmpl
Y3RzKQogICAgICAgICByZXR1cm47CkBAIC0xNzgzLDcgKzE3NDIsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RC
bG9jaywgTGF5bwogICAgIHJldHVybiBsb2dpY2FsUmlnaHQ7CiB9CiAKLVRyYWNrZWRSZW5kZXJl
ckxpc3RIYXNoU2V0KiBSZW5kZXJCbG9jazo6cG9zaXRpb25lZE9iamVjdHMoKSBjb25zdAorY29u
c3QgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQqIFJlbmRlckJsb2NrOjpwb3NpdGlvbmVkT2Jq
ZWN0cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBvc2l0aW9uZWREZXNjZW5kYW50c01hcCgpLnBv
c2l0aW9uZWRSZW5kZXJlcnMoKnRoaXMpOwogfQpAQCAtMTg1OCwyMyArMTgxNywyMCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChSZW5kZXJCb3gmIGRl
c2NlbmRhbnQpCiAgICAgcmVtb3ZlRnJvbVRyYWNrZWRSZW5kZXJlck1hcHMoZGVzY2VuZGFudCk7
CiB9CiAKLVRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBSZW5kZXJCbG9jazo6cGVyY2VudEhl
aWdodERlc2NlbmRhbnRzKCkgY29uc3QKK2NvbnN0IFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0
KiBSZW5kZXJCbG9jazo6cGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwID8gcGVyY2VudEhlaWdodERlc2NlbmRh
bnRzTWFwLT5nZXQodGhpcykgOiBudWxscHRyOworICAgIGF1dG8gaXRlcmF0b3IgPSBwZXJjZW50
SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5maW5kKHRoaXMpOworICAgIHJldHVybiBpdGVyYXRvciA9
PSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAoKS5lbmQoKSA/IG51bGxwdHIgOiAmaXRlcmF0
b3ItPnZhbHVlOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpoYXNQZXJjZW50SGVpZ2h0Q29udGFp
bmVyTWFwKCkKIHsKLSAgICByZXR1cm4gcGVyY2VudEhlaWdodENvbnRhaW5lck1hcDsKKyAgICBy
ZXR1cm4gIXBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAoKS5pc0VtcHR5KCk7CiB9CiAKIGJvb2wg
UmVuZGVyQmxvY2s6Omhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYgZGVzY2Vu
ZGFudCkKIHsKLSAgICAvLyBXZSBkb24ndCBudWxsIGNoZWNrIHBlcmNlbnRIZWlnaHRDb250YWlu
ZXJNYXAgc2luY2UgdGhlIGNhbGxlcgotICAgIC8vIGFscmVhZHkgZW5zdXJlcyB0aGlzIGFuZCB3
ZSBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbiBldmVyeQotICAgIC8vIGRlc2NlbmRhbnQg
aW4gY2xlYXJQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNGcm9tKCkuCi0gICAgQVNTRVJUKHBlcmNl
bnRIZWlnaHRDb250YWluZXJNYXApOwotICAgIHJldHVybiBwZXJjZW50SGVpZ2h0Q29udGFpbmVy
TWFwLT5jb250YWlucygmZGVzY2VuZGFudCk7CisgICAgcmV0dXJuIHBlcmNlbnRIZWlnaHRDb250
YWluZXJNYXAoKS5jb250YWlucygmZGVzY2VuZGFudCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50SWZOZWVkZWQoUmVuZGVyQm94JiBkZXNjZW5k
YW50KQpAQCAtMTg4MiwyNyArMTgzOCwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKFJlbmRlckJveCYgZGVzY2VuZGFudCkKICAgICAv
LyBXZSBxdWVyeSB0aGUgbWFwIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBsb29raW5nIGF0IHN0eWxl
J3MKICAgICAvLyBsb2dpY2FsSGVpZ2h0KCkvbG9naWNhbE1pbkhlaWdodCgpL2xvZ2ljYWxNYXhI
ZWlnaHQoKSBzaW5jZSB0aG9zZQogICAgIC8vIGNhbiBjaGFuZ2Ugd2l0aCB3cml0aW5nIG1vZGUv
ZGlyZWN0aW9uYWwgY2hhbmdlcy4KLSAgICBpZiAoIWhhc1BlcmNlbnRIZWlnaHRDb250YWluZXJN
YXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFoYXNQZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudChkZXNjZW5kYW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlUGVyY2VudEhl
aWdodERlc2NlbmRhbnQoZGVzY2VuZGFudCk7CisgICAgaWYgKGhhc1BlcmNlbnRIZWlnaHREZXNj
ZW5kYW50KGRlc2NlbmRhbnQpKQorICAgICAgICByZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dChkZXNjZW5kYW50KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJQZXJjZW50SGVpZ2h0
RGVzY2VuZGFudHNGcm9tKFJlbmRlckJveCYgcGFyZW50KQogewotICAgIEFTU0VSVChwZXJjZW50
SGVpZ2h0Q29udGFpbmVyTWFwKTsKKyAgICBBU1NFUlQoaGFzUGVyY2VudEhlaWdodENvbnRhaW5l
ck1hcCgpKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dEluUHJlT3JkZXIoJnBhcmVudCkpIHsKICAg
ICAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAKICAgICAgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqY2hpbGQpOwotICAg
ICAgICBpZiAoIWhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50KGJveCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICByZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudChib3gpOwor
ICAgICAgICBpZiAoaGFzUGVyY2VudEhlaWdodERlc2NlbmRhbnQoYm94KSkKKyAgICAgICAgICAg
IHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGJveCk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGVmYzAxNTRkYjg2ODc5ZGYzMzcwYWY5
NzNmNjI5ZTA0Zjg1YjY4NjEuLjJjMzFjZTkxYTRhN2Q4NTMzZDk0YTcyNjhhNzQ4MTRmMzE3NGFl
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC04MCwxOSArODAs
MTkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoY29u
c3QgUmVuZGVyQm94Jik7CiAgICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyhjb25zdCBS
ZW5kZXJCbG9jayosIENvbnRhaW5pbmdCbG9ja1N0YXRlID0gU2FtZUNvbnRhaW5pbmdCbG9jayk7
CiAKLSAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZE9iamVjdHMoKSBj
b25zdDsKKyAgICBjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZE9i
amVjdHMoKSBjb25zdDsKICAgICBib29sIGhhc1Bvc2l0aW9uZWRPYmplY3RzKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBvYmplY3RzID0gcG9zaXRp
b25lZE9iamVjdHMoKTsKKyAgICAgICAgYXV0byBvYmplY3RzID0gcG9zaXRpb25lZE9iamVjdHMo
KTsKICAgICAgICAgcmV0dXJuIG9iamVjdHMgJiYgIW9iamVjdHMtPmlzRW1wdHkoKTsKICAgICB9
CiAKICAgICB2b2lkIGFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYpOwogICAg
IHN0YXRpYyB2b2lkIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJveCYpOwot
ICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMo
KSBjb25zdDsKKyAgICBjb25zdCBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcGVyY2VudEhl
aWdodERlc2NlbmRhbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQZXJjZW50SGVpZ2h0RGVzY2Vu
ZGFudHMoKSBjb25zdAogICAgIHsKLSAgICAgICAgVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQq
IG9iamVjdHMgPSBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMoKTsKKyAgICAgICAgYXV0byBvYmpl
Y3RzID0gcGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCk7CiAgICAgICAgIHJldHVybiBvYmplY3Rz
ICYmICFvYmplY3RzLT5pc0VtcHR5KCk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGhhc1BlcmNl
bnRIZWlnaHRDb250YWluZXJNYXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcAppbmRleCA0MzY5OWZlYWQ5ZjY1YzU5NzJiZmRkNDI5Yzc3YWVhMTAxNmE2OTkw
Li4zMzkzNGI5Mjc0NTY5OWEzZGQyZmU1MzJjYjY0NjY2OGU3NzUzMmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVy
Q291bnRlcik7CiAKIHVzaW5nIENvdW50ZXJNYXAgPSBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxD
b3VudGVyTm9kZT4+OwotdXNpbmcgQ291bnRlck1hcHMgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckVs
ZW1lbnQqLCBzdGQ6OnVuaXF1ZV9wdHI8Q291bnRlck1hcD4+OwordXNpbmcgQ291bnRlck1hcHMg
PSBIYXNoTWFwPGNvbnN0IFJlbmRlckVsZW1lbnQqLCBDb3VudGVyTWFwPjsKIAogc3RhdGljIENv
dW50ZXJOb2RlKiBtYWtlQ291bnRlck5vZGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEF0b21TdHJp
bmcmIGlkZW50aWZpZXIsIGJvb2wgYWx3YXlzQ3JlYXRlQ291bnRlcik7CiAKQEAgLTE3MywxMCAr
MTczLDcgQEAgc3RhdGljIE9wdGlvbmFsPENvdW50ZXJQbGFuPiBwbGFuQ291bnRlcihSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgQXRvbVN0cmkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsgLy8gQ291bnRlcnMgYXJlIGZvcmJpZGRlbiBmcm9tIGFsbCBvdGhlciBwc2V1ZG8gZWxl
bWVudHMuCiAgICAgfQogCi0gICAgQ291bnRlckRpcmVjdGl2ZXMgZGlyZWN0aXZlczsKLQotICAg
IGlmIChhdXRvIG1hcCA9IHN0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkpCi0gICAgICAgIGRpcmVj
dGl2ZXMgPSBtYXAtPmdldChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGRpcmVjdGl2ZXMgPSBzdHls
ZS5jb3VudGVyRGlyZWN0aXZlcygpLmdldChpZGVudGlmaWVyKTsKIAogICAgIGlmIChpZGVudGlm
aWVyID09ICJsaXN0LWl0ZW0iKSB7CiAgICAgICAgIGF1dG8gaXRlbURpcmVjdGl2ZXMgPSBsaXN0
SXRlbUNvdW50ZXJEaXJlY3RpdmVzKHJlbmRlcmVyKTsKQEAgLTMxNiw3ICszMTMsNyBAQCBzdGF0
aWMgQ291bnRlck5vZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgQXRvbVN0cmluZyYgaQogewogICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1h
cCgpKSB7CiAgICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmNvbnRhaW5zKCZyZW5kZXJlcikp
OwotICAgICAgICBpZiAoYXV0byogbm9kZSA9IGNvdW50ZXJNYXBzKCkuZmluZCgmcmVuZGVyZXIp
LT52YWx1ZS0+Z2V0KGlkZW50aWZpZXIpKQorICAgICAgICBpZiAoYXV0byogbm9kZSA9IGNvdW50
ZXJNYXBzKCkuZmluZCgmcmVuZGVyZXIpLT52YWx1ZS5nZXQoaWRlbnRpZmllcikpCiAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAgLTMzMiw3ICszMjksNyBAQCBzdGF0aWMgQ291
bnRlck5vZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
QXRvbVN0cmluZyYgaQogICAgIGlmIChwbGFjZS5wYXJlbnQpCiAgICAgICAgIHBsYWNlLnBhcmVu
dC0+aW5zZXJ0QWZ0ZXIobmV3Tm9kZSwgcGxhY2UucHJldmlvdXNTaWJsaW5nLmdldCgpLCBpZGVu
dGlmaWVyKTsKIAotICAgIG1hcHMuYWRkKCZyZW5kZXJlciwgbWFrZVVuaXF1ZTxDb3VudGVyTWFw
PigpKS5pdGVyYXRvci0+dmFsdWUtPmFkZChpZGVudGlmaWVyLCBuZXdOb2RlLmNvcHlSZWYoKSk7
CisgICAgbWFwcy5hZGQoJnJlbmRlcmVyLCBDb3VudGVyTWFwIHsgfSkuaXRlcmF0b3ItPnZhbHVl
LmFkZChpZGVudGlmaWVyLCBuZXdOb2RlKTsKICAgICByZW5kZXJlci5zZXRIYXNDb3VudGVyTm9k
ZU1hcCh0cnVlKTsKIAogICAgIGlmIChuZXdOb2RlLT5wYXJlbnQoKSkKQEAgLTM0Niw3ICszNDMs
NyBAQCBzdGF0aWMgQ291bnRlck5vZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgQXRvbVN0cmluZyYgaQogICAgICAgICBza2lwRGVzY2VuZGFudHMgPSBm
YWxzZTsKICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byogY3VycmVudENvdW50ZXIgPSBt
YXBzLmZpbmQoY3VycmVudFJlbmRlcmVyKS0+dmFsdWUtPmdldChpZGVudGlmaWVyKTsKKyAgICAg
ICAgYXV0byogY3VycmVudENvdW50ZXIgPSBtYXBzLmZpbmQoY3VycmVudFJlbmRlcmVyKS0+dmFs
dWUuZ2V0KGlkZW50aWZpZXIpOwogICAgICAgICBpZiAoIWN1cnJlbnRDb3VudGVyKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHNraXBEZXNjZW5kYW50cyA9IHRydWU7CkBAIC00NTQs
OCArNDUxLDggQEAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJlbW92
YWwoY29uc3QgQXRvbVN0cmluZyYgaWRlbnRpZmllciwgQ28KICAgICBmb3IgKFJlZlB0cjxDb3Vu
dGVyTm9kZT4gY2hpbGQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7IGNoaWxkICYmIGNoaWxkICE9
ICZub2RlOyBjaGlsZCA9IFdURk1vdmUocHJldmlvdXMpKSB7CiAgICAgICAgIHByZXZpb3VzID0g
Y2hpbGQtPnByZXZpb3VzSW5QcmVPcmRlcigpOwogICAgICAgICBjaGlsZC0+cGFyZW50KCktPnJl
bW92ZUNoaWxkKCpjaGlsZCk7Ci0gICAgICAgIEFTU0VSVChjb3VudGVyTWFwcygpLmZpbmQoJmNo
aWxkLT5vd25lcigpKS0+dmFsdWUtPmdldChpZGVudGlmaWVyKSA9PSBjaGlsZCk7Ci0gICAgICAg
IGNvdW50ZXJNYXBzKCkuZmluZCgmY2hpbGQtPm93bmVyKCkpLT52YWx1ZS0+cmVtb3ZlKGlkZW50
aWZpZXIpOworICAgICAgICBBU1NFUlQoY291bnRlck1hcHMoKS5maW5kKCZjaGlsZC0+b3duZXIo
KSktPnZhbHVlLmdldChpZGVudGlmaWVyKSA9PSBjaGlsZCk7CisgICAgICAgIGNvdW50ZXJNYXBz
KCkuZmluZCgmY2hpbGQtPm93bmVyKCkpLT52YWx1ZS5yZW1vdmUoaWRlbnRpZmllcik7CiAgICAg
fQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBub2RlLnBhcmVudCgpKQogICAgICAgICBwYXJlbnQt
PnJlbW92ZUNoaWxkKG5vZGUpOwpAQCAtNDY0LDEwICs0NjEsOCBAQCBzdGF0aWMgdm9pZCBkZXN0
cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChjb25zdCBBdG9tU3RyaW5nJiBpZGVudGlm
aWVyLCBDbwogdm9pZCBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlckVs
ZW1lbnQmIG93bmVyKQogewogICAgIEFTU0VSVChvd25lci5oYXNDb3VudGVyTm9kZU1hcCgpKTsK
LSAgICBhdXRvJiBtYXBzID0gY291bnRlck1hcHMoKTsKLSAgICBBU1NFUlQobWFwcy5jb250YWlu
cygmb3duZXIpKTsKLSAgICBhdXRvIGNvdW50ZXJNYXAgPSBtYXBzLnRha2UoJm93bmVyKTsKLSAg
ICBmb3IgKGF1dG8mIGNvdW50ZXJNYXBFbnRyeSA6ICpjb3VudGVyTWFwKQorICAgIEFTU0VSVChj
b3VudGVyTWFwcygpLmNvbnRhaW5zKCZvd25lcikpOworICAgIGZvciAoYXV0byYgY291bnRlck1h
cEVudHJ5IDogY291bnRlck1hcHMoKS50YWtlKCZvd25lcikpCiAgICAgICAgIGRlc3Ryb3lDb3Vu
dGVyTm9kZVdpdGhvdXRNYXBSZW1vdmFsKGNvdW50ZXJNYXBFbnRyeS5rZXksIGNvdW50ZXJNYXBF
bnRyeS52YWx1ZSk7CiAgICAgb3duZXIuc2V0SGFzQ291bnRlck5vZGVNYXAoZmFsc2UpOwogfQpA
QCAtNDc3LDcgKzQ3Miw3IEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rl
KFJlbmRlckVsZW1lbnQmIG93bmVyLCBjb25zdCBBdG9tU3RyaW5nJiBpCiAgICAgYXV0byBtYXAg
PSBjb3VudGVyTWFwcygpLmZpbmQoJm93bmVyKTsKICAgICBpZiAobWFwID09IGNvdW50ZXJNYXBz
KCkuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIG5vZGUgPSBtYXAtPnZhbHVlLT50
YWtlKGlkZW50aWZpZXIpOworICAgIGF1dG8gbm9kZSA9IG1hcC0+dmFsdWUudGFrZShpZGVudGlm
aWVyKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBkZXN0cm95Q291bnRl
ck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpZGVudGlmaWVyLCAqbm9kZSk7CkBAIC01MDksMjQgKzUw
NCwyMiBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQogCiBzdGF0aWMgdm9pZCB1cGRhdGVDb3VudGVycyhSZW5kZXJF
bGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBhdXRvKiBkaXJlY3RpdmVNYXAgPSByZW5kZXJlci5z
dHlsZSgpLmNvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgaWYgKCFkaXJlY3RpdmVNYXApCi0gICAg
ICAgIHJldHVybjsKKyAgICBhdXRvJiBkaXJlY3RpdmVNYXAgPSByZW5kZXJlci5zdHlsZSgpLmNv
dW50ZXJEaXJlY3RpdmVzKCk7CiAgICAgaWYgKCFyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogZGlyZWN0aXZlTWFwLT5rZXlzKCkpCisgICAg
ICAgIGZvciAoYXV0byYga2V5IDogZGlyZWN0aXZlTWFwLmtleXMoKSkKICAgICAgICAgICAgIG1h
a2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5LCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgQVNTRVJUKGNvdW50ZXJNYXBzKCkuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAg
YXV0byogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCkuZmluZCgmcmVuZGVyZXIpLT52YWx1ZS5n
ZXQoKTsKLSAgICBmb3IgKGF1dG8mIGtleSA6IGRpcmVjdGl2ZU1hcC0+a2V5cygpKSB7Ci0gICAg
ICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAtPmdldChrZXkpOworICAg
IGF1dG8mIGNvdW50ZXJNYXAgPSBjb3VudGVyTWFwcygpLmZpbmQoJnJlbmRlcmVyKS0+dmFsdWU7
CisgICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAua2V5cygpKSB7CisgICAgICAgIFJl
ZlB0cjxDb3VudGVyTm9kZT4gbm9kZSA9IGNvdW50ZXJNYXAuZ2V0KGtleSk7CiAgICAgICAgIGlm
ICghbm9kZSkgewogICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBrZXksIGZh
bHNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gcGxh
Y2UgPSBmaW5kUGxhY2VGb3JDb3VudGVyKHJlbmRlcmVyLCBrZXksIG5vZGUtPmhhc1Jlc2V0VHlw
ZSgpKTsKLSAgICAgICAgaWYgKG5vZGUgIT0gY291bnRlck1hcC0+Z2V0KGtleSkpCisgICAgICAg
IGlmIChub2RlICE9IGNvdW50ZXJNYXAuZ2V0KGtleSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpOwogICAgICAgICBp
ZiAocGxhY2UucGFyZW50ID09IHBhcmVudCAmJiBwbGFjZS5wcmV2aW91c1NpYmxpbmcgPT0gbm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCkpCkBAIC01NjEsMzkgKzU1NCwyNSBAQCB2b2lkIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkU2xvd0Nhc2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm47IC8vIGNhbm5vdCBoYXZlIGdlbmVyYXRlZCBjb250ZW50IG9yIGlmIGl0IGNh
biBoYXZlLCBpdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGF0dGFjaGluZwogCi0gICAgY29uc3Qg
Q291bnRlckRpcmVjdGl2ZU1hcCogb2xkQ291bnRlckRpcmVjdGl2ZXM7Ci0gICAgaWYgKG9sZFN0
eWxlICYmIChvbGRDb3VudGVyRGlyZWN0aXZlcyA9IG9sZFN0eWxlLT5jb3VudGVyRGlyZWN0aXZl
cygpKSkgewotICAgICAgICBpZiAoYXV0byogbmV3Q291bnRlckRpcmVjdGl2ZXMgPSBuZXdTdHls
ZS5jb3VudGVyRGlyZWN0aXZlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogKm5ld0NvdW50ZXJEaXJlY3RpdmVzKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBleGlzdGlu
Z0VudHJ5ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmZpbmQoa2V5VmFsdWUua2V5KTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhpc3RpbmdFbnRyeSAhPSBvbGRDb3VudGVyRGlyZWN0aXZlcy0+ZW5k
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nRW50cnktPnZhbHVlID09IGtl
eVZhbHVlLnZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwg
a2V5VmFsdWUua2V5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gV2Ug
bXVzdCBjcmVhdGUgdGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGNoYW5nZWQgbm9kZSBtYXkg
YmUgYSBub2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCi0gICAgICAgICAgICAgICAgLy8gYXMg
dGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRo
ZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCi0gICAgICAgICAgICAgICAgLy8gbm90
IGNhdGNoIHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAg
ICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5VmFsdWUua2V5LCBmYWxzZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3VudGVycyB0aGF0
IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgotICAgICAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiBvbGRDb3VudGVyRGlyZWN0aXZlcy0+a2V5cygpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy0+Y29udGFpbnMoa2V5KSkKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKHJlbmRl
cmVyLCBrZXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKHJlbmRlcmVyLmhhc0NvdW50ZXJOb2RlTWFwKCkpCi0gICAgICAgICAgICAgICAgUmVuZGVy
Q291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlcyhyZW5kZXJlcik7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoYXV0byogbmV3Q291bnRlckRpcmVjdGl2ZXMgPSBuZXdTdHls
ZS5jb3VudGVyRGlyZWN0aXZlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG5l
d0NvdW50ZXJEaXJlY3RpdmVzLT5rZXlzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0
IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgYWRkZWQgbm9kZSBtYXkgYmUgYSBu
b2RlIHdpdGggbm8gZGlzcGxheSBzdWNoIGFzCi0gICAgICAgICAgICAgICAgLy8gYXMgdGhvc2Ug
Y3JlYXRlZCBieSB0aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1s
YXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3aWxsCi0gICAgICAgICAgICAgICAgLy8gbm90IGNhdGNo
IHRoZSBjaGFuZ2UgaWYgdGhlIG5vZGUgaGFkIG5vIGNoaWxkcmVuLgotICAgICAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5LCBmYWxzZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgQ291bnRlckRpcmVjdGl2ZU1hcCBlbXB0eU1hcDsKKyAgICBhdXRvJiBvbGRDb3VudGVyRGly
ZWN0aXZlcyA9IG9sZFN0eWxlID8gb2xkU3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkgOiBlbXB0
eU1hcDsKKyAgICBhdXRvJiBuZXdDb3VudGVyRGlyZWN0aXZlcyA9IG5ld1N0eWxlLmNvdW50ZXJE
aXJlY3RpdmVzKCk7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG5ld0NvdW50ZXJEaXJlY3Rp
dmVzKSB7CisgICAgICAgIGF1dG8gZXhpc3RpbmdFbnRyeSA9IG9sZENvdW50ZXJEaXJlY3RpdmVz
LmZpbmQoa2V5VmFsdWUua2V5KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nRW50cnkgIT0gb2xkQ291
bnRlckRpcmVjdGl2ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ0VudHJ5LT52
YWx1ZSA9PSBrZXlWYWx1ZS52YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShyZW5kZXJlciwga2V5VmFs
dWUua2V5KTsKICAgICAgICAgfQorICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUg
aGVyZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2RlIG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNw
bGF5IHN1Y2ggYXMKKyAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0aGUgaW5jcmVtZW50
IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3aWxsIGhhcHBlbiB3
aWxsCisgICAgICAgIC8vIG5vdCBjYXRjaCB0aGUgY2hhbmdlIGlmIHRoZSBub2RlIGhhZCBubyBj
aGlsZHJlbi4KKyAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBrZXlWYWx1ZS5rZXks
IGZhbHNlKTsKKyAgICB9CisgICAgLy8gRGVzdHJveSBvbGQgY291bnRlcnMgdGhhdCBkbyBub3Qg
ZXhpc3QgaW4gdGhlIG5ldyBtYXAuCisgICAgZm9yIChhdXRvJiBrZXkgOiBvbGRDb3VudGVyRGly
ZWN0aXZlcy5rZXlzKCkpIHsKKyAgICAgICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy5jb250
YWlucyhrZXkpKQorICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rl
KHJlbmRlcmVyLCBrZXkpOwogICAgIH0KIH0KIApAQCAtNjE5LDcgKzU5OCw3IEBAIHZvaWQgc2hv
d0NvdW50ZXJSZW5kZXJlclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgY2hhcioKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcCBOOiVwIFA6JXAgUFM6
JXAgTlM6JXAgQzolcFxuIiwKICAgICAgICAgICAgIGN1cnJlbnQsIGN1cnJlbnQtPm5vZGUoKSwg
Y3VycmVudC0+cGFyZW50KCksIGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpLAogICAgICAgICAg
ICAgY3VycmVudC0+bmV4dFNpYmxpbmcoKSwgZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyRWxlbWVu
dD4oKmN1cnJlbnQpLmhhc0NvdW50ZXJOb2RlTWFwKCkgPwotICAgICAgICAgICAgY291bnRlck5h
bWUgPyBXZWJDb3JlOjpjb3VudGVyTWFwcygpLmZpbmQoZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVy
RWxlbWVudD4oY3VycmVudCkpLT52YWx1ZS0+Z2V0KGlkZW50aWZpZXIpIDogKFdlYkNvcmU6OkNv
dW50ZXJOb2RlKikxIDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikwKTsKKyAgICAgICAgICAgIGNv
dW50ZXJOYW1lID8gV2ViQ29yZTo6Y291bnRlck1hcHMoKS5maW5kKGRvd25jYXN0PFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ+KGN1cnJlbnQpKS0+dmFsdWUuZ2V0KGlkZW50aWZpZXIpIDogKFdlYkNv
cmU6OkNvdW50ZXJOb2RlKikxIDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikwKTsKICAgICB9CiAg
ICAgZmZsdXNoKHN0ZGVycik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50
ZXIuaAppbmRleCBiNTM1NjYzYWZjODE0NDg5YTI4MTE1MjYxM2E5NjRiMTMyMzg0MTVkLi4yOGYw
ZDc4NmZlMzdkNTJhODU0OGFlNDFiZmYzNGE3MWZmMjIxMjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmgKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKIAogaW5s
aW5lIHZvaWQgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlKQogewotICAgIGlmICgoIW9sZFN0eWxlIHx8ICFvbGRTdHlsZS0+Y291bnRl
ckRpcmVjdGl2ZXMoKSkgJiYgIW5ld1N0eWxlLmNvdW50ZXJEaXJlY3RpdmVzKCkpCisgICAgaWYg
KCghb2xkU3R5bGUgfHwgb2xkU3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCkuaXNFbXB0eSgpKSAm
JiBuZXdTdHlsZS5jb3VudGVyRGlyZWN0aXZlcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgcmVuZGVyZXJTdHlsZUNoYW5nZWRTbG93Q2FzZShyZW5kZXJlciwgb2xkU3R5bGUs
IG5ld1N0eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFnbWVudGVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21l
bnRlZEZsb3cuY3BwCmluZGV4IDQyZGMxOTIwNTNiZmU3ZjlmZDM3MzBhNTE0ODI2OTIyYmZlNWY3
ZDAuLjc4NTEzZTE3MDg5M2VjNjZmZWU2MzZjNDQ2NWQ3NTU1OWExZWQyMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFnbWVudGVkRmxvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcApAQCAtOTUs
OCArOTUsNyBAQCB2b2lkIFJlbmRlckZyYWdtZW50ZWRGbG93OjppbnZhbGlkYXRlRnJhZ21lbnRz
KE1hcmtpbmdCZWhhdmlvciBtYXJraW5nUGFyZW50cykKICAgICBtX2ZyYWdtZW50UmFuZ2VNYXAu
Y2xlYXIoKTsKICAgICBtX2JyZWFrQmVmb3JlVG9GcmFnbWVudE1hcC5jbGVhcigpOwogICAgIG1f
YnJlYWtBZnRlclRvRnJhZ21lbnRNYXAuY2xlYXIoKTsKLSAgICBpZiAobV9saW5lVG9GcmFnbWVu
dE1hcCkKLSAgICAgICAgbV9saW5lVG9GcmFnbWVudE1hcC0+Y2xlYXIoKTsKKyAgICBtX2xpbmVU
b0ZyYWdtZW50TWFwLmNsZWFyKCk7CiAgICAgc2V0TmVlZHNMYXlvdXQobWFya2luZ1BhcmVudHMp
OwogCiAgICAgbV9mcmFnbWVudHNJbnZhbGlkYXRlZCA9IHRydWU7CkBAIC00NTAsMTEgKzQ0OSw4
IEBAIHZvaWQgUmVuZGVyRnJhZ21lbnRlZEZsb3c6OnJlbW92ZVJlbmRlckJveEZyYWdtZW50SW5m
byhSZW5kZXJCb3gmIGJveCkKIAogdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6cmVtb3ZlTGlu
ZUZyYWdtZW50SW5mbyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdykKIHsKLSAgICBp
ZiAoIW1fbGluZVRvRnJhZ21lbnRNYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0
byogY3VyciA9IGJsb2NrRmxvdy5maXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRSb290Qm94KCkpCi0gICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAtPnJlbW92ZShjdXJyKTsK
KyAgICBmb3IgKGF1dG8qIGJveCA9IGJsb2NrRmxvdy5maXJzdFJvb3RCb3goKTsgYm94OyBib3gg
PSBib3gtPm5leHRSb290Qm94KCkpCisgICAgICAgIG1fbGluZVRvRnJhZ21lbnRNYXAucmVtb3Zl
KGJveCk7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjaGVja0xpbmVz
Q29uc2lzdGVuY3koYmxvY2tGbG93KSk7CiB9CkBAIC03NjAsMTAgKzc1Niw3IEBAIGJvb2wgUmVu
ZGVyRnJhZ21lbnRlZEZsb3c6Om9iamVjdEluRmxvd0ZyYWdtZW50KGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zCiAjaWYgIUFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJ
U0FCTEVECiBib29sIFJlbmRlckZyYWdtZW50ZWRGbG93OjpjaGVja0xpbmVzQ29uc2lzdGVuY3ko
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiByZW1vdmVkQmxvY2spIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2xpbmVUb0ZyYWdtZW50TWFwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoYXV0
byYgbGluZVBhaXIgOiAqbV9saW5lVG9GcmFnbWVudE1hcC5nZXQoKSkgeworICAgIGZvciAoYXV0
byYgbGluZVBhaXIgOiBtX2xpbmVUb0ZyYWdtZW50TWFwKSB7CiAgICAgICAgIGNvbnN0IFJvb3RJ
bmxpbmVCb3gqIGxpbmUgPSBsaW5lUGFpci5rZXk7CiAgICAgICAgIFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiBmcmFnbWVudCA9IGxpbmVQYWlyLnZhbHVlOwogICAgICAgICBpZiAoJmxpbmUtPmJs
b2NrRmxvdygpID09ICZyZW1vdmVkQmxvY2spCkBAIC03ODAsOCArNzczLDcgQEAgYm9vbCBSZW5k
ZXJGcmFnbWVudGVkRmxvdzo6Y2hlY2tMaW5lc0NvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgcmVtb3ZlZEIKIAogdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6Y2xlYXJMaW5lc1Rv
RnJhZ21lbnRNYXAoKQogewotICAgIGlmIChtX2xpbmVUb0ZyYWdtZW50TWFwKQotICAgICAgICBt
X2xpbmVUb0ZyYWdtZW50TWFwLT5jbGVhcigpOworICAgIG1fbGluZVRvRnJhZ21lbnRNYXAuY2xl
YXIoKTsKIH0KIAogdm9pZCBSZW5kZXJGcmFnbWVudGVkRmxvdzo6ZGVsZXRlTGluZXMoKQpAQCAt
MTEzMSwxMyArMTEyMyw0IEBAIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBSZW5kZXJGcmFnbWVu
dGVkRmxvdzo6Y3VycmVudEZyYWdtZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50RnJh
Z21lbnRNYWludGFpbmVyID8gJm1fY3VycmVudEZyYWdtZW50TWFpbnRhaW5lci0+ZnJhZ21lbnQo
KSA6IG51bGxwdHI7CiB9CiAKLUNvbnRhaW5pbmdGcmFnbWVudE1hcCYgUmVuZGVyRnJhZ21lbnRl
ZEZsb3c6OmNvbnRhaW5pbmdGcmFnbWVudE1hcCgpCi17Ci0gICAgaWYgKCFtX2xpbmVUb0ZyYWdt
ZW50TWFwKQotICAgICAgICBtX2xpbmVUb0ZyYWdtZW50TWFwID0gbWFrZVVuaXF1ZTxDb250YWlu
aW5nRnJhZ21lbnRNYXA+KCk7Ci0KLSAgICByZXR1cm4gKm1fbGluZVRvRnJhZ21lbnRNYXAuZ2V0
KCk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuaAppbmRleCBiNzNiZTJiMWIwZTQ4MjdlZGFl
NjAyN2FhNmUzNWZjYjE3MWQ2MzYxLi4wM2JiMTdiN2QwYTQxZTQ5ZTQwYmJiMmMyN2UyOTNiNDJm
Zjk3N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21l
bnRlZEZsb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRl
ZEZsb3cuaApAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnJlbnRG
cmFnbWVudE1haW50YWluZXIoQ3VycmVudFJlbmRlckZyYWdtZW50Q29udGFpbmVyTWFpbnRhaW5l
ciogY3VycmVudEZyYWdtZW50TWFpbnRhaW5lcikgeyBtX2N1cnJlbnRGcmFnbWVudE1haW50YWlu
ZXIgPSBjdXJyZW50RnJhZ21lbnRNYWludGFpbmVyOyB9CiAgICAgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqIGN1cnJlbnRGcmFnbWVudCgpIGNvbnN0OwogCi0gICAgQ29udGFpbmluZ0ZyYWdtZW50
TWFwJiBjb250YWluaW5nRnJhZ21lbnRNYXAoKTsKKyAgICBDb250YWluaW5nRnJhZ21lbnRNYXAm
IGNvbnRhaW5pbmdGcmFnbWVudE1hcCgpIHsgcmV0dXJuIG1fbGluZVRvRnJhZ21lbnRNYXA7IH0K
IAogICAgIGJvb2wgY2FjaGVkRW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dOZWVkc1VwZGF0ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTIzNiw3ICsyMzYsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXJMaXN0IG1fZnJhZ21lbnRMaXN0Owog
CiAgICAgLy8gTWFwIGEgbGluZSB0byBpdHMgY29udGFpbmluZyBmcmFnbWVudC4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGFpbmluZ0ZyYWdtZW50TWFwPiBtX2xpbmVUb0ZyYWdtZW50TWFwOwor
ICAgIENvbnRhaW5pbmdGcmFnbWVudE1hcCBtX2xpbmVUb0ZyYWdtZW50TWFwOwogCiAgICAgLy8g
TWFwIGEgYm94IHRvIHRoZSBsaXN0IG9mIGZyYWdtZW50cyBpbiB3aGljaCB0aGUgYm94IGlzIHJl
bmRlcmVkLgogICAgIHVzaW5nIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2VNYXAgPSBIYXNo
TWFwPGNvbnN0IFJlbmRlckJveCosIFJlbmRlckZyYWdtZW50Q29udGFpbmVyUmFuZ2U+OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDY2YmVlZGQyMTFkYjAzNmM0
YjAzOTNhZDJlNjY1NjVjNzBmZjRhZTguLjczNzE2ZDI5ZDFjZDBhYWUyYjQ1ZDhkZmIwNTc2NzQ3
YWRjNTEwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKQEAgLTM3
Miw3ICszNzIsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6Omd1dHRlcnNTaXplKGNvbnN0IEdy
aWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaQogICAgIHNpemVfdCBub25FbXB0
eVRyYWNrc0JlZm9yZVN0YXJ0TGluZSA9IDA7CiAgICAgaWYgKHN0YXJ0TGluZSAmJiBncmlkLmlz
RW1wdHlBdXRvUmVwZWF0VHJhY2soZGlyZWN0aW9uLCBzdGFydExpbmUpKSB7CiAgICAgICAgIG5v
bkVtcHR5VHJhY2tzQmVmb3JlU3RhcnRMaW5lID0gc3RhcnRMaW5lOwotICAgICAgICBhdXRvIGJl
Z2luID0gZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS0+YmVnaW4oKTsKKyAg
ICAgICAgYXV0byBiZWdpbiA9IGdyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbiku
YmVnaW4oKTsKICAgICAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW47ICppdCAhPSBzdGFydExpbmU7
ICsraXQpIHsKICAgICAgICAgICAgIEFTU0VSVChub25FbXB0eVRyYWNrc0JlZm9yZVN0YXJ0TGlu
ZSk7CiAgICAgICAgICAgICAtLW5vbkVtcHR5VHJhY2tzQmVmb3JlU3RhcnRMaW5lOwpAQCAtMzg1
LDggKzM4NSw4IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Z3V0dGVyc1NpemUoY29uc3QgR3Jp
ZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpCiAgICAgLy8gY29sbGFwc2VkIHRy
YWNrLiBJZiB3ZSBmaW5kIGEgbm9uIGNvbGxhcHNlZCB0cmFjayB3ZSBuZWVkIHRvIGFkZCB0aGF0
IGdhcC4KICAgICBpZiAoZ3JpZC5pc0VtcHR5QXV0b1JlcGVhdFRyYWNrKGRpcmVjdGlvbiwgZW5k
TGluZSAtIDEpKSB7CiAgICAgICAgIHVuc2lnbmVkIG5vbkVtcHR5VHJhY2tzQWZ0ZXJFbmRMaW5l
ID0gZ3JpZC5udW1UcmFja3MoZGlyZWN0aW9uKSAtIGVuZExpbmU7Ci0gICAgICAgIGF1dG8gY3Vy
cmVudEVtcHR5VHJhY2sgPSBncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLT5m
aW5kKGVuZExpbmUgLSAxKTsKLSAgICAgICAgYXV0byBlbmRFbXB0eVRyYWNrID0gZ3JpZC5hdXRv
UmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS0+ZW5kKCk7CisgICAgICAgIGF1dG8gY3VycmVu
dEVtcHR5VHJhY2sgPSBncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLmZpbmQo
ZW5kTGluZSAtIDEpOworICAgICAgICBhdXRvIGVuZEVtcHR5VHJhY2sgPSBncmlkLmF1dG9SZXBl
YXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLmVuZCgpOwogICAgICAgICAvLyBIYXNoU2V0IGl0ZXJh
dG9ycyBkbyBub3QgaW1wbGVtZW50IG9wZXJhdG9yLSBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGl0
ZXJhdGUgdG8ga25vdyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBlbXB0eSB0cmFja3MuCiAgICAg
ICAgIGZvciAoYXV0byBpdCA9ICsrY3VycmVudEVtcHR5VHJhY2s7IGl0ICE9IGVuZEVtcHR5VHJh
Y2s7ICsraXQpIHsKICAgICAgICAgICAgIEFTU0VSVChub25FbXB0eVRyYWNrc0FmdGVyRW5kTGlu
ZSA+PSAxKTsKQEAgLTU0MiwzMCArNTQyLDI2IEBAIHVuc2lnbmVkIFJlbmRlckdyaWQ6OmNvbXB1
dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjCiB9
CiAKIAotc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0PiBSZW5kZXJHcmlkOjpj
b21wdXRlRW1wdHlUcmFja3NGb3JBdXRvUmVwZWF0KEdyaWQmIGdyaWQsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CitPcmRlcmVkVHJhY2tJbmRleFNldCBSZW5kZXJH
cmlkOjpjb21wdXRlRW1wdHlUcmFja3NGb3JBdXRvUmVwZWF0KEdyaWQmIGdyaWQsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgYm9vbCBpc1Jvd0F4aXMg
PSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKICAgICBpZiAoKGlzUm93QXhpcyAmJiBzdHlsZSgp
LmdyaWRBdXRvUmVwZWF0Q29sdW1uc1R5cGUoKSAhPSBBdXRvUmVwZWF0VHlwZTo6Rml0KQogICAg
ICAgICB8fCAoIWlzUm93QXhpcyAmJiBzdHlsZSgpLmdyaWRBdXRvUmVwZWF0Um93c1R5cGUoKSAh
PSBBdXRvUmVwZWF0VHlwZTo6Rml0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+
IGVtcHR5VHJhY2tJbmRleGVzOworICAgIE9yZGVyZWRUcmFja0luZGV4U2V0IGVtcHR5VHJhY2tJ
bmRleGVzOwogICAgIHVuc2lnbmVkIGluc2VydGlvblBvaW50ID0gaXNSb3dBeGlzID8gc3R5bGUo
KS5ncmlkQXV0b1JlcGVhdENvbHVtbnNJbnNlcnRpb25Qb2ludCgpIDogc3R5bGUoKS5ncmlkQXV0
b1JlcGVhdFJvd3NJbnNlcnRpb25Qb2ludCgpOwogICAgIHVuc2lnbmVkIGZpcnN0QXV0b1JlcGVh
dFRyYWNrID0gaW5zZXJ0aW9uUG9pbnQgKyBncmlkLmV4cGxpY2l0R3JpZFN0YXJ0KGRpcmVjdGlv
bik7CiAgICAgdW5zaWduZWQgbGFzdEF1dG9SZXBlYXRUcmFjayA9IGZpcnN0QXV0b1JlcGVhdFRy
YWNrICsgZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKGRpcmVjdGlvbik7CiAKICAgICBpZiAoIWdyaWQu
aGFzR3JpZEl0ZW1zKCkgfHwgc2hvdWxkQXBwbHlTaXplQ29udGFpbm1lbnQoKnRoaXMpKSB7Ci0g
ICAgICAgIGVtcHR5VHJhY2tJbmRleGVzID0gbWFrZVVuaXF1ZTxPcmRlcmVkVHJhY2tJbmRleFNl
dD4oKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCB0cmFja0luZGV4ID0gZmlyc3RBdXRvUmVwZWF0
VHJhY2s7IHRyYWNrSW5kZXggPCBsYXN0QXV0b1JlcGVhdFRyYWNrOyArK3RyYWNrSW5kZXgpCi0g
ICAgICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcy0+YWRkKHRyYWNrSW5kZXgpOworICAgICAgICAg
ICAgZW1wdHlUcmFja0luZGV4ZXMuYWRkKHRyYWNrSW5kZXgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgdHJhY2tJbmRleCA9IGZpcnN0QXV0b1JlcGVhdFRyYWNrOyB0cmFj
a0luZGV4IDwgbGFzdEF1dG9SZXBlYXRUcmFjazsgKyt0cmFja0luZGV4KSB7CiAgICAgICAgICAg
ICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IoZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0luZGV4KTsKLSAg
ICAgICAgICAgIGlmICghaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWVtcHR5VHJhY2tJbmRleGVzKQotICAgICAgICAgICAgICAgICAgICBlbXB0eVRyYWNr
SW5kZXhlcyA9IG1ha2VVbmlxdWU8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+KCk7Ci0gICAgICAgICAg
ICAgICAgZW1wdHlUcmFja0luZGV4ZXMtPmFkZCh0cmFja0luZGV4KTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpCisgICAgICAgICAgICAg
ICAgZW1wdHlUcmFja0luZGV4ZXMuYWRkKHRyYWNrSW5kZXgpOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBlbXB0eVRyYWNrSW5kZXhlczsKQEAgLTg4NSw3ICs4ODEsNyBAQCBWZWN0b3I8
TGF5b3V0VW5pdD4gUmVuZGVyR3JpZDo6dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aQogICAgIGlmICghaGFzQ29sbGFwc2VkVHJhY2tzKQogICAgICAgICBy
ZXR1cm4gdHJhY2tzOwogCi0gICAgc2l6ZV90IHJlbWFpbmluZ0VtcHR5VHJhY2tzID0gbV9ncmlk
LmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pLT5zaXplKCk7CisgICAgc2l6ZV90IHJl
bWFpbmluZ0VtcHR5VHJhY2tzID0gbV9ncmlkLmF1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rp
b24pLnNpemUoKTsKICAgICBzaXplX3QgbGFzdExpbmUgPSB0cmFja3Muc2l6ZSgpOwogICAgIGdh
cCA9IGdyaWRHYXAoZGlyZWN0aW9uKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGxhc3RM
aW5lOyArK2kpIHsKQEAgLTEwMzksNyArMTAzNSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxh
dGVHcmlkUG9zaXRpb25zRm9yRGlyZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcyA9IG51bWJlck9mVHJhY2tzICsgMTsKICAgICB1
bnNpZ25lZCBsYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAxOwogICAgIGJvb2wgaGFzQ29sbGFw
c2VkVHJhY2tzID0gbV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pOwot
ICAgIHNpemVfdCBudW1iZXJPZkNvbGxhcHNlZFRyYWNrcyA9IGhhc0NvbGxhcHNlZFRyYWNrcyA/
IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0aW9uKS0+c2l6ZSgpIDogMDsKKyAg
ICBzaXplX3QgbnVtYmVyT2ZDb2xsYXBzZWRUcmFja3MgPSBoYXNDb2xsYXBzZWRUcmFja3MgPyBt
X2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikuc2l6ZSgpIDogMDsKICAgICBj
b25zdCBhdXRvJiBvZmZzZXQgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IG1fb2Zmc2V0QmV0
d2VlbkNvbHVtbnMgOiBtX29mZnNldEJldHdlZW5Sb3dzOwogICAgIGF1dG8mIHBvc2l0aW9ucyA9
IGlzUm93QXhpcyA/IG1fY29sdW1uUG9zaXRpb25zIDogbV9yb3dQb3NpdGlvbnM7CiAgICAgcG9z
aXRpb25zLnJlc2l6ZShudW1iZXJPZkxpbmVzKTsKQEAgLTE4MjUsNyArMTgyMSw3IEBAIHVuc2ln
bmVkIFJlbmRlckdyaWQ6Om5vbkNvbGxhcHNlZFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKSBjb25zCiAgICAgYXV0byYgdHJhY2tzID0gbV90cmFja1NpemluZ0FsZ29y
aXRobS50cmFja3MoZGlyZWN0aW9uKTsKICAgICBzaXplX3QgbnVtYmVyT2ZUcmFja3MgPSB0cmFj
a3Muc2l6ZSgpOwogICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhY2tzID0gbV9ncmlkLmhhc0F1dG9S
ZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rpb24pOwotICAgIHNpemVfdCBudW1iZXJPZkNvbGxhcHNl
ZFRyYWNrcyA9IGhhc0NvbGxhcHNlZFRyYWNrcyA/IG1fZ3JpZC5hdXRvUmVwZWF0RW1wdHlUcmFj
a3MoZGlyZWN0aW9uKS0+c2l6ZSgpIDogMDsKKyAgICBzaXplX3QgbnVtYmVyT2ZDb2xsYXBzZWRU
cmFja3MgPSBoYXNDb2xsYXBzZWRUcmFja3MgPyBtX2dyaWQuYXV0b1JlcGVhdEVtcHR5VHJhY2tz
KGRpcmVjdGlvbikuc2l6ZSgpIDogMDsKICAgICByZXR1cm4gbnVtYmVyT2ZUcmFja3MgLSBudW1i
ZXJPZkNvbGxhcHNlZFRyYWNrczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmgKaW5kZXggZWZiMTA2NDMzYjQ3MzUwZjFiMzE5YzgzZjA2YWY0ZDRmMjBlYWM4OS4uNWRhZDIy
YTg5MGNhMDRiNGQ5ZWJjMzU3NmUzNWJiMzhkZTVlYWI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR3JpZC5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2ln
bmVkIGNsYW1wQXV0b1JlcGVhdFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2ln
bmVkIGF1dG9SZXBlYXRUcmFja3MpIGNvbnN0OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE9yZGVy
ZWRUcmFja0luZGV4U2V0PiBjb21wdXRlRW1wdHlUcmFja3NGb3JBdXRvUmVwZWF0KEdyaWQmLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIE9yZGVyZWRUcmFja0luZGV4U2V0
IGNvbXB1dGVFbXB0eVRyYWNrc0ZvckF1dG9SZXBlYXQoR3JpZCYsIEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbikgY29uc3Q7CiAKICAgICB2b2lkIHBlcmZvcm1HcmlkSXRlbXNQcmVMYXlvdXQoY29u
c3QgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggNGU3Nzg0NTk5
MjMxNDJhODk2YTk5N2ViN2VjYmM5NWJiOGJlOGQ4ZS4uYmNlMGVhMzNiMmY4OGI3YzcwN2NlMDA5
MmQ0MzVhNGEwNGJkYjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTc5MiwxMSArNzkyLDkgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRl
VHlwZSB1cGRhdGUKICAgICBpZiAodXBkYXRlVHlwZSA9PSBDb21wb3NpdGluZ1VwZGF0ZVR5cGU6
Ok9uU2Nyb2xsIHx8IHVwZGF0ZVR5cGUgPT0gQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBv
c2l0ZWRTY3JvbGwpIHsKICAgICAgICAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiB3ZSBkaWRuJ3Qg
c2Nyb2xsIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLCBzbyB0aGlzIHVwZGF0ZSBuZWVkcyB0byBy
ZS1wb3NpdGlvbiB2aWV3cG9ydC1jb25zdHJhaW5lZCBsYXllcnMuCiAgICAgICAgIGlmIChtX3Jl
bmRlclZpZXcuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQoKSAmJiBpc1BhZ2VTY3JvbGwpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB2aWV3
cG9ydENvbnN0cmFpbmVkT2JqZWN0cyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cygpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZW5k
ZXJlciA6ICp2aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXV0byogbGF5ZXIgPSByZW5kZXJlci5sYXllcigpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5ZXItPnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBsYXllciA9IHJlbmRlcmVyLmxheWVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIGxheWVyLT5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC00ODg0LDEyICs0ODgyLDYgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nTm9kZXMoKQogICAgICAg
ICB9CiAgICAgfTsKICAgICAKLSAgICBhdXRvIHNsb3dSZXBhaW50T2JqZWN0cyA9IG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS5zbG93UmVwYWludE9iamVjdHMoKTsKLSAgICBpZiAoIXNsb3dSZXBh
aW50T2JqZWN0cykgewotICAgICAgICBjbGVhclN5bmNocm9ub3VzUmVhc29uc09uTm9kZXMoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29w
ZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBs
YXllcikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJlbmRlcmVyKQogICAg
ICAgICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CkBAIC00ODk4LDcgKzQ4
OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3Jv
bGxpbmdOb2RlcygpCiAKICAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmll
dy5sYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBmb3IgKGF1dG8mIHJl
bmRlcmVyIDogKnNsb3dSZXBhaW50T2JqZWN0cykgeworICAgIGZvciAoYXV0byYgcmVuZGVyZXIg
OiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2xvd1JlcGFpbnRPYmplY3RzKCkpIHsKICAgICAg
ICAgYXV0byBsYXllciA9IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmICgh
bGF5ZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ5MTQsNyArNDkwNiw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkK
ICAgICAgICAgICAgIG5vZGVzVG9DbGVhci5yZW1vdmUoZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlE
KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGNsZWFyU3luY2hyb25vdXNSZWFzb25z
T25Ob2RlcygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggZGUyYmNlNTFmYTliOGQxMWEwZTQ5ZTkx
ZjRmYTlmZDFkNTA1ODU4My4uZDY1ZjlmZDNhZjE2YTEzYzQ5M2FiNWYwZjAzMDM1MTEwODc0MTM5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKIHZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y2xlYXIoKQogewogICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5k
ZXJlcigpOwotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJl
ci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisgICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKCp0aGlzKSk7CiAKICAgICBpZiAobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIAogI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQogICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZygpOwpAQCAtMTU5OCwxNSArMTU5OCwxNSBAQCB2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCiAgICAgYm9v
bCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CiAgICAg
Ym9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwogCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsK
KyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRh
aW5zU2Nyb2xsYWJsZUFyZWEoKnRoaXMpKTsKIAogICAgIGlmIChpc1Njcm9sbGFibGUpIHsKICAg
ICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRk
ZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAg
ICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSgqdGhpcyk7
CiAgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAg
IGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwor
ICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSgq
dGhpcyk7CiAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggOWRh
ZDUxNzEwNzhmYzYyM2VkOGNiMWFmMGFjNjRjYmNhNDNlYzk5My4uYjUyMmRmMzIwNDJmMTE5Y2Fm
ZmI1MTlkNTM0MDE2ODk0ZGQ5ZGZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcApAQCAtOTYsNyArOTYsNyBAQCBSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0
Qm94KEhUTUxTZWxlY3RFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAg
ICwgbV9vcHRpb25zV2lkdGgoMCkKICAgICAsIG1faW5kZXhPZmZzZXQoMCkKIHsKLSAgICB2aWV3
KCkuZnJhbWVWaWV3KCkuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgdmlldygpLmZyYW1l
VmlldygpLmFkZFNjcm9sbGFibGVBcmVhKCp0aGlzKTsKIH0KIAogUmVuZGVyTGlzdEJveDo6flJl
bmRlckxpc3RCb3goKQpAQCAtMTA3LDcgKzEwNyw3IEBAIFJlbmRlckxpc3RCb3g6On5SZW5kZXJM
aXN0Qm94KCkKIHZvaWQgUmVuZGVyTGlzdEJveDo6d2lsbEJlRGVzdHJveWVkKCkKIHsKICAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7Ci0gICAgdmlldygpLmZyYW1lVmlldygpLnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVT
Y3JvbGxhYmxlQXJlYSgqdGhpcyk7CiAgICAgUmVuZGVyQmxvY2tGbG93Ojp3aWxsQmVEZXN0cm95
ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93LmNwcAppbmRleCBiZGJlNGE3MTRkMGM2YzdhNjNkY2NjODM1NzJiYjFmODcwOGU2
YTBkLi45MDRjYTQxZGZjMjFkNWYyYjg0ZmI4NWZmZDEzMjI3ZWI4MzBlYzBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcApAQCAt
NDIsMTYgKzQyLDYgQEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck11bHRpQ29s
dW1uRmxvdyk7CiAKIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6UmVuZGVyTXVsdGlDb2x1bW5GbG93
KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlckZy
YWdtZW50ZWRGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAgICAsIG1fc3Bhbm5lck1h
cChtYWtlVW5pcXVlPFNwYW5uZXJNYXA+KCkpCi0gICAgLCBtX2xhc3RTZXRXb3JrZWRPbihudWxs
cHRyKQotICAgICwgbV9jb2x1bW5Db3VudCgxKQotICAgICwgbV9jb2x1bW5XaWR0aCgwKQotICAg
ICwgbV9jb2x1bW5IZWlnaHRBdmFpbGFibGUoMCkKLSAgICAsIG1faW5MYXlvdXQoZmFsc2UpCi0g
ICAgLCBtX2luQmFsYW5jaW5nUGFzcyhmYWxzZSkKLSAgICAsIG1fbmVlZHNIZWlnaHRzUmVjYWxj
dWxhdGlvbihmYWxzZSkKLSAgICAsIG1fcHJvZ3Jlc3Npb25Jc0lubGluZShmYWxzZSkKLSAgICAs
IG1fcHJvZ3Jlc3Npb25Jc1JldmVyc2VkKGZhbHNlKQogewogICAgIHNldEZyYWdtZW50ZWRGbG93
U3RhdGUoSW5zaWRlSW5GcmFnbWVudGVkRmxvdyk7CiB9CkBAIC0xMTEsNyArMTAxLDcgQEAgUmVu
ZGVyQm94KiBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OnByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVy
U2libGluZ09mKGNvbnN0IFJlbmQKIAogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIqIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6ZmluZENvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihS
ZW5kZXJCb3gqIHNwYW5uZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3Bhbm5lck1hcC0+Z2V0
KHNwYW5uZXIpLmdldCgpOworICAgIHJldHVybiBtX3NwYW5uZXJNYXAuZ2V0KHNwYW5uZXIpLmdl
dCgpOwogfQogCiB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6bGF5b3V0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuaAppbmRleCBlYjZm
MDg4Nzk0NTg1ZTgyNTVkYjdjMGM4NTg4ZDAyZGMxYTVlZjk2Li44Njc4YWQ2MmNiYzlmZWU5ODdi
M2Y1MGViMzhlNGQ3NDA3MmE0YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uRmxvdy5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJNdWx0aUNvbHVtblNldCogZmlyc3RNdWx0aUNvbHVtblNldCgpIGNvbnN0OwogICAgIFJl
bmRlck11bHRpQ29sdW1uU2V0KiBsYXN0TXVsdGlDb2x1bW5TZXQoKSBjb25zdDsKICAgICBSZW5k
ZXJCb3gqIGZpcnN0Q29sdW1uU2V0T3JTcGFubmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNDb2x1
bW5TcGFubmVyKCkgY29uc3QgeyByZXR1cm4gIW1fc3Bhbm5lck1hcC0+aXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBoYXNDb2x1bW5TcGFubmVyKCkgY29uc3QgeyByZXR1cm4gIW1fc3Bhbm5lck1hcC5p
c0VtcHR5KCk7IH0KICAgICBzdGF0aWMgUmVuZGVyQm94KiBuZXh0Q29sdW1uU2V0T3JTcGFubmVy
U2libGluZ09mKGNvbnN0IFJlbmRlckJveCopOwogICAgIHN0YXRpYyBSZW5kZXJCb3gqIHByZXZp
b3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKGNvbnN0IFJlbmRlckJveCopOwogCkBAIC05
Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZENoZWNrQ29sdW1uQnJlYWtzKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyQm94KiwgV2Vha1B0
cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4+IFNwYW5uZXJNYXA7Ci0gICAg
U3Bhbm5lck1hcCYgc3Bhbm5lck1hcCgpIHsgcmV0dXJuICptX3NwYW5uZXJNYXA7IH0KKyAgICBT
cGFubmVyTWFwJiBzcGFubmVyTWFwKCkgeyByZXR1cm4gbV9zcGFubmVyTWFwOyB9CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBpc1JlbmRlck11bHRpQ29sdW1uRmxvdygpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KQEAgLTExNSwyMyArMTE1LDIzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBp
c1BhZ2VMb2dpY2FsSGVpZ2h0S25vd24oKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3Bhbm5lck1hcD4gbV9zcGFubmVyTWFwOworICAgIFNwYW5uZXJN
YXAgbV9zcGFubmVyTWFwOwogCiAgICAgLy8gVGhlIGxhc3Qgc2V0IHdlIHdvcmtlZCBvbi4gSXQn
cyBub3QgdG8gYmUgdXNlZCBhcyB0aGUgImN1cnJlbnQgc2V0Ii4gVGhlIGNvbmNlcHQgb2YgYQog
ICAgIC8vICJjdXJyZW50IHNldCIgaXMgZGlmZmljdWx0LCBzaW5jZSBsYXlvdXQgbWF5IGp1bXAg
YmFjayBhbmQgZm9ydGggaW4gdGhlIHRyZWUsIGR1ZSB0byB3cm9uZwogICAgIC8vIHRvcCBsb2Nh
dGlvbiBlc3RpbWF0ZXMgKGR1ZSB0byBlLmcuIG1hcmdpbiBjb2xsYXBzaW5nKSwgYW5kIHBvc3Np
Ymx5IGZvciBvdGhlciByZWFzb25zLgotICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBtX2xhc3RT
ZXRXb3JrZWRPbjsKKyAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbV9sYXN0U2V0V29ya2VkT24g
eyBudWxscHRyIH07CiAKLSAgICB1bnNpZ25lZCBtX2NvbHVtbkNvdW50OyAvLyBUaGUgZGVmYXVs
dCBjb2x1bW4gY291bnQvd2lkdGggdGhhdCBhcmUgYmFzZWQgb2ZmIG91ciBjb250YWluaW5nIGJs
b2NrIHdpZHRoLiBUaGVzZSB2YWx1ZXMgcmVwcmVzZW50IG9ubHkgdGhlIGRlZmF1bHQsCisgICAg
dW5zaWduZWQgbV9jb2x1bW5Db3VudCB7IDEgfTsgLy8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50
L3dpZHRoIHRoYXQgYXJlIGJhc2VkIG9mZiBvdXIgY29udGFpbmluZyBibG9jayB3aWR0aC4gVGhl
c2UgdmFsdWVzIHJlcHJlc2VudCBvbmx5IHRoZSBkZWZhdWx0LAogICAgIExheW91dFVuaXQgbV9j
b2x1bW5XaWR0aDsgLy8gQSBtdWx0aS1jb2x1bW4gYmxvY2sgdGhhdCBpcyBzcGxpdCBhY3Jvc3Mg
dmFyaWFibGUgd2lkdGggcGFnZXMgb3IgZnJhZ21lbnRzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgY29s
dW1uIGNvdW50cyBhbmQgd2lkdGhzIGluIGVhY2guIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGNhY2hl
ZCAoZXZlbnR1YWxseSkgZm9yIG11bHRpLWNvbHVtbiBibG9ja3MuCiAKICAgICBMYXlvdXRVbml0
IG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlOyAvLyBUb3RhbCBoZWlnaHQgYXZhaWxhYmxlIHRvIGNv
bHVtbnMsIG9yIDAgaWYgYXV0by4KLSAgICBib29sIG1faW5MYXlvdXQ7IC8vIFNldCB3aGlsZSB3
ZSdyZSBsYXlpbmcgb3V0IHRoZSBmbG93IHRocmVhZCwgZHVyaW5nIHdoaWNoIGNvbHVtIHNldCBo
ZWlnaHRzIGFyZSB1bmtub3duLgotICAgIGJvb2wgbV9pbkJhbGFuY2luZ1Bhc3M7IC8vIEd1YXJk
IHRvIGF2b2lkIHJlLWVudGVyaW5nIGNvbHVtbiBiYWxhbmNpbmcuCi0gICAgYm9vbCBtX25lZWRz
SGVpZ2h0c1JlY2FsY3VsYXRpb247CisgICAgYm9vbCBtX2luTGF5b3V0IHsgZmFsc2UgfTsgLy8g
U2V0IHdoaWxlIHdlJ3JlIGxheWluZyBvdXQgdGhlIGZsb3cgdGhyZWFkLCBkdXJpbmcgd2hpY2gg
Y29sdW0gc2V0IGhlaWdodHMgYXJlIHVua25vd24uCisgICAgYm9vbCBtX2luQmFsYW5jaW5nUGFz
cyB7IGZhbHNlIH07IC8vIEd1YXJkIHRvIGF2b2lkIHJlLWVudGVyaW5nIGNvbHVtbiBiYWxhbmNp
bmcuCisgICAgYm9vbCBtX25lZWRzSGVpZ2h0c1JlY2FsY3VsYXRpb24geyBmYWxzZSB9OwogICAg
IAotICAgIGJvb2wgbV9wcm9ncmVzc2lvbklzSW5saW5lOwotICAgIGJvb2wgbV9wcm9ncmVzc2lv
bklzUmV2ZXJzZWQ7CisgICAgYm9vbCBtX3Byb2dyZXNzaW9uSXNJbmxpbmUgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9wcm9ncmVzc2lvbklzUmV2ZXJzZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAppbmRleCBjYjQ2NDFlZmZkMWM2MzJhYjE5ZjkxNTk1MjhlYjk3ZGUwOTc4
MTJiLi5jYzQxYzgwMzlkNmI4YWYyMjAwMTQ2ZTc4MmUyYTBlNjYyYTdjOWZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtNTA1LDcg
KzUwNSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyZWxheW91dENlbGxJZkZsZXhlZChS
ZW5kZXJUYWJsZUNlbGwmIGNlbGwsIGludCByb3dJbmRlCiAgICAgfQogCiAgICAgaWYgKCFjZWxs
Q2hpbGRyZW5GbGV4KSB7Ci0gICAgICAgIGlmIChUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCog
cGVyY2VudEhlaWdodERlc2NlbmRhbnRzID0gY2VsbC5wZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMo
KSkgeworICAgICAgICBpZiAoYXV0byBwZXJjZW50SGVpZ2h0RGVzY2VuZGFudHMgPSBjZWxsLnBl
cmNlbnRIZWlnaHREZXNjZW5kYW50cygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8qIGRlc2Nl
bmRhbnQgOiAqcGVyY2VudEhlaWdodERlc2NlbmRhbnRzKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGZsZXhBbGxDaGlsZHJlbiB8fCBzaG91bGRGbGV4Q2VsbENoaWxkKGNlbGwsICpkZXNjZW5kYW50
KSkgewogICAgICAgICAgICAgICAgICAgICBjZWxsQ2hpbGRyZW5GbGV4ID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggYWYwNDE5Y2Y2YzQ5MjVk
MWM5NDQ3MjczYTcxMDVkMWM0Yjk4NWExNy4uYjQzMDJkNjNkZTg0NzA0YTRjMjA4OGFlODc4MzQz
MmVlNDNjZTU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAK
QEAgLTQzLDggKzQzLDggQEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlcldpZGdl
dCk7CiAKIHN0YXRpYyBIYXNoTWFwPGNvbnN0IFdpZGdldCosIFJlbmRlcldpZGdldCo+JiB3aWRn
ZXRSZW5kZXJlck1hcCgpCiB7Ci0gICAgc3RhdGljIEhhc2hNYXA8Y29uc3QgV2lkZ2V0KiwgUmVu
ZGVyV2lkZ2V0Kj4qIHN0YXRpY1dpZGdldFJlbmRlcmVyTWFwID0gbmV3IEhhc2hNYXA8Y29uc3Qg
V2lkZ2V0KiwgUmVuZGVyV2lkZ2V0Kj47Ci0gICAgcmV0dXJuICpzdGF0aWNXaWRnZXRSZW5kZXJl
ck1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxjb25zdCBXaWRnZXQqLCBS
ZW5kZXJXaWRnZXQqPj4gc3RhdGljV2lkZ2V0UmVuZGVyZXJNYXA7CisgICAgcmV0dXJuIHN0YXRp
Y1dpZGdldFJlbmRlcmVyTWFwOwogfQogCiB1bnNpZ25lZCBXaWRnZXRIaWVyYXJjaHlVcGRhdGVz
U3VzcGVuc2lvblNjb3BlOjpzX3dpZGdldEhpZXJhcmNoeVVwZGF0ZVN1c3BlbmRDb3VudCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRl
eCBjNDIxM2U3ODBiZTEwNzFkMjUyZTdhYTJmOTg1NzQzZGUzNzYwNjlmLi4xNDQwZDNjN2Y2ZmQ5
MTZkNGIwNzA0ODQwYTEyZDUxNGJiOTk0NGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTkxNyw3ICs5MTcsNyBAQCBib29sIFJlbmRl
clN0eWxlOjpjaGFuZ2VSZXF1aXJlc0xheW91dChjb25zdCBSZW5kZXJTdHlsZSYgb3RoZXIsIE9w
dGlvblNldDxTdHlsZQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIHRoZSBjb3Vu
dGVyIGRpcmVjdGl2ZXMgY2hhbmdlLCB0cmlnZ2VyIGEgcmVsYXlvdXQgdG8gcmUtY2FsY3VsYXRl
IGNvdW50ZXIgdmFsdWVzIGFuZCByZWJ1aWxkIHRoZSBjb3VudGVyIG5vZGUgdHJlZS4KLSAgICBp
ZiAoIWFyZVBvaW50aW5nVG9FcXVhbERhdGEobV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+Y291bnRl
ckRpcmVjdGl2ZXMsIG90aGVyLm1fcmFyZU5vbkluaGVyaXRlZERhdGEtPmNvdW50ZXJEaXJlY3Rp
dmVzKSkKKyAgICBpZiAobV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+Y291bnRlckRpcmVjdGl2ZXMg
IT0gb3RoZXIubV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+Y291bnRlckRpcmVjdGl2ZXMpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCh2aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
Q29sbGFwc2UpICE9IChvdGhlci52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6Q29sbGFwc2Up
KQpAQCAtMTA2NCwyOCArMTA2NCwyMyBAQCBzdGF0aWMgYm9vbCByYXJlSW5oZXJpdGVkRGF0YUNo
YW5nZVJlcXVpcmVzUmVwYWludChjb25zdCBTdHlsZVJhcmVJbmhlcml0ZWREYXRhJgogfQogCiAj
aWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCisKIHZvaWQgUmVuZGVyU3R5bGU6OmFkZEN1c3Rv
bVBhaW50V2F0Y2hQcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgYXV0byYgZGF0
YSA9IG1fcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCk7Ci0gICAgaWYgKCFkYXRhLmN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnRpZXMpCi0gICAgICAgIGRhdGEuY3VzdG9tUGFpbnRXYXRjaGVk
UHJvcGVydGllcyA9IG1ha2VVbmlxdWU8SGFzaFNldDxTdHJpbmc+PigpOwotICAgIGRhdGEuY3Vz
dG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcy0+YWRkKG5hbWUpOworICAgIG1fcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCkuY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcy5hZGQobmFtZSk7
CiB9CiAKIGlubGluZSBzdGF0aWMgYm9vbCBjaGFuZ2VkQ3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVy
dHkoY29uc3QgUmVuZGVyU3R5bGUmIGEsIGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEm
IGFEYXRhLCBjb25zdCBSZW5kZXJTdHlsZSYgYiwgY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVk
RGF0YSYgYkRhdGEpCiB7Ci0gICAgYXV0byogcHJvcGVydGllc0EgPSBhRGF0YS5jdXN0b21QYWlu
dFdhdGNoZWRQcm9wZXJ0aWVzLmdldCgpOwotICAgIGF1dG8qIHByb3BlcnRpZXNCID0gYkRhdGEu
Y3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcy5nZXQoKTsKKyAgICBhdXRvJiBwcm9wZXJ0aWVz
QSA9IGFEYXRhLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXM7CisgICAgYXV0byYgcHJvcGVy
dGllc0IgPSBiRGF0YS5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzOwogCi0gICAgaWYgKFVO
TElLRUxZKHByb3BlcnRpZXNBIHx8IHByb3BlcnRpZXNCKSkgeworICAgIGlmIChVTkxJS0VMWSgh
cHJvcGVydGllc0EuaXNFbXB0eSgpIHx8ICFwcm9wZXJ0aWVzQi5pc0VtcHR5KCkpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8gdXNlIENvbXB1dGVkU3R5bGVFeHRy
YWN0b3IgaGVyZS4KICAgICAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBleHRyYWN0b3IoKEVs
ZW1lbnQqKSBudWxscHRyKTsKIAotICAgICAgICBmb3IgKGF1dG8qIHdhdGNoUHJvcGVydGllc01h
cCA6IHsgcHJvcGVydGllc0EsIHByb3BlcnRpZXNCIH0pIHsKLSAgICAgICAgICAgIGlmICghd2F0
Y2hQcm9wZXJ0aWVzTWFwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBmb3IgKGF1dG8mIG5hbWUgOiAqd2F0Y2hQcm9wZXJ0aWVzTWFwKSB7CisgICAgICAgIGZvciAo
YXV0byYgd2F0Y2hQcm9wZXJ0aWVzTWFwIDogeyBwcm9wZXJ0aWVzQSwgcHJvcGVydGllc0IgfSkg
eworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogd2F0Y2hQcm9wZXJ0aWVzTWFwKSB7CiAg
ICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUE7CiAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUI7CiAgICAgICAgICAgICAgICAgaWYgKGlzQ3VzdG9tUHJv
cGVydHlOYW1lKG5hbWUpKSB7CkBAIC0xMTE1LDYgKzExMTAsNyBAQCBpbmxpbmUgc3RhdGljIGJv
b2wgY2hhbmdlZEN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnR5KGNvbnN0IFJlbmRlclN0eWxlJiBh
LCBjb25zdAogCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCiAjZW5kaWYKIAogYm9vbCBSZW5kZXJT
dHlsZTo6Y2hhbmdlUmVxdWlyZXNSZXBhaW50KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlciwgT3B0
aW9uU2V0PFN0eWxlRGlmZmVyZW5jZUNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0eT4mIGNoYW5nZWRD
b250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3QKQEAgLTE1ODUsMTcgKzE1ODEsMTQgQEAg
Ym9vbCBSZW5kZXJTdHlsZTo6aGFzRW50aXJlbHlGaXhlZEJhY2tncm91bmQoKSBjb25zdAogICAg
IHJldHVybiBhbGxMYXllcnNBcmVGaXhlZChiYWNrZ3JvdW5kTGF5ZXJzKCkpOwogfQogCi1jb25z
dCBDb3VudGVyRGlyZWN0aXZlTWFwKiBSZW5kZXJTdHlsZTo6Y291bnRlckRpcmVjdGl2ZXMoKSBj
b25zdAorY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCYgUmVuZGVyU3R5bGU6OmNvdW50ZXJEaXJl
Y3RpdmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS0+Y291
bnRlckRpcmVjdGl2ZXMuZ2V0KCk7CisgICAgcmV0dXJuIG1fcmFyZU5vbkluaGVyaXRlZERhdGEt
PmNvdW50ZXJEaXJlY3RpdmVzOwogfQogCiBDb3VudGVyRGlyZWN0aXZlTWFwJiBSZW5kZXJTdHls
ZTo6YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKQogewotICAgIGF1dG8mIG1hcCA9IG1fcmFyZU5v
bkluaGVyaXRlZERhdGEuYWNjZXNzKCkuY291bnRlckRpcmVjdGl2ZXM7Ci0gICAgaWYgKCFtYXAp
Ci0gICAgICAgIG1hcCA9IG1ha2VVbmlxdWU8Q291bnRlckRpcmVjdGl2ZU1hcD4oKTsKLSAgICBy
ZXR1cm4gKm1hcDsKKyAgICByZXR1cm4gbV9yYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS5j
b3VudGVyRGlyZWN0aXZlczsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgUmVuZGVyU3R5bGU6Omh5
cGhlblN0cmluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCmluZGV4IDdjODdjYjEzYmFlMmViYmM2NTFlMjI4OWM4ZmM3NmRiNzY1N2E1MWUu
LmQwYzBmNGE1Mzc4NmM2Y2IwMmNiMTUzMjExYjE2NmI3MDg4MWVhODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0xNDcyLDcgKzE0NzIsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBdHRyQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZU5vbkluaGVyaXRlZERhdGEtPmhhc0F0dHJDb250ZW50OyB9CiAgICAgdm9pZCBzZXRIYXNBdHRy
Q29udGVudCgpOwogCi0gICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogY291bnRlckRpcmVj
dGl2ZXMoKSBjb25zdDsKKyAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwJiBjb3VudGVyRGly
ZWN0aXZlcygpIGNvbnN0OwogICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIGFjY2Vzc0NvdW50ZXJE
aXJlY3RpdmVzKCk7CiAKICAgICBRdW90ZXNEYXRhKiBxdW90ZXMoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNw
cAppbmRleCA4OWQxMDJlMmNmOTlhNTk5MGE3NGNlNjllMzI1ZDQ5ZDZmMGZjMmIwLi42MzNmOTY4
MGVmZjUzMTJmNjg2ZDNjYjUwMGI3ZTU4OWI5YWQwZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
Y3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgaW5saW5lIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6
OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5bGVSYXJlTm9uSW4KICAgICAsIG92
ZXJzY3JvbGxCZWhhdmlvclgoby5vdmVyc2Nyb2xsQmVoYXZpb3JYKQogICAgICwgb3ZlcnNjcm9s
bEJlaGF2aW9yWShvLm92ZXJzY3JvbGxCZWhhdmlvclkpCiAgICAgLCBjb250ZW50KG8uY29udGVu
dCA/IG8uY29udGVudC0+Y2xvbmUoKSA6IG51bGxwdHIpCi0gICAgLCBjb3VudGVyRGlyZWN0aXZl
cyhvLmNvdW50ZXJEaXJlY3RpdmVzID8gbWFrZVVuaXF1ZTxDb3VudGVyRGlyZWN0aXZlTWFwPigq
by5jb3VudGVyRGlyZWN0aXZlcykgOiBudWxscHRyKQorICAgICwgY291bnRlckRpcmVjdGl2ZXMo
by5jb3VudGVyRGlyZWN0aXZlcykKICAgICAsIGFsdFRleHQoby5hbHRUZXh0KQogICAgICwgYm94
U2hhZG93KG8uYm94U2hhZG93ID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqby5ib3hTaGFkb3cp
IDogbnVsbHB0cikKICAgICAsIHdpbGxDaGFuZ2Uoby53aWxsQ2hhbmdlKQpAQCAtMTc5LDcgKzE3
OSw3IEBAIGlubGluZSBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhKGNvbnN0IFN0eWxlUmFyZU5vbkluCiAgICAgLCBqdXN0aWZ5SXRlbXMoby5qdXN0
aWZ5SXRlbXMpCiAgICAgLCBqdXN0aWZ5U2VsZihvLmp1c3RpZnlTZWxmKQogICAgICwgY3VzdG9t
UHJvcGVydGllcyhvLmN1c3RvbVByb3BlcnRpZXMpCi0gICAgLCBjdXN0b21QYWludFdhdGNoZWRQ
cm9wZXJ0aWVzKG8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllcyA/IG1ha2VVbmlxdWU8SGFz
aFNldDxTdHJpbmc+Pigqby5jdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKSA6IG51bGxwdHIp
CisgICAgLCBjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzKG8uY3VzdG9tUGFpbnRXYXRjaGVk
UHJvcGVydGllcykKICAgICAsIHJvdGF0ZShvLnJvdGF0ZSkKICAgICAsIHNjYWxlKG8uc2NhbGUp
CiAgICAgLCB0cmFuc2xhdGUoby50cmFuc2xhdGUpCkBAIC0yNTYsNyArMjU2LDcgQEAgYm9vbCBT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEmIG8pIGMKICAgICAgICAgJiYgb3ZlcnNjcm9sbEJlaGF2aW9yWCA9PSBvLm92
ZXJzY3JvbGxCZWhhdmlvclgKICAgICAgICAgJiYgb3ZlcnNjcm9sbEJlaGF2aW9yWSA9PSBvLm92
ZXJzY3JvbGxCZWhhdmlvclkKICAgICAgICAgJiYgY29udGVudERhdGFFcXVpdmFsZW50KG8pCi0g
ICAgICAgICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoY291bnRlckRpcmVjdGl2ZXMsIG8uY291
bnRlckRpcmVjdGl2ZXMpCisgICAgICAgICYmIGNvdW50ZXJEaXJlY3RpdmVzID09IG8uY291bnRl
ckRpcmVjdGl2ZXMKICAgICAgICAgJiYgYWx0VGV4dCA9PSBvLmFsdFRleHQKICAgICAgICAgJiYg
YXJlUG9pbnRpbmdUb0VxdWFsRGF0YShib3hTaGFkb3csIG8uYm94U2hhZG93KQogICAgICAgICAm
JiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKHdpbGxDaGFuZ2UsIG8ud2lsbENoYW5nZSkKQEAgLTI4
Nyw4ICsyODcsNyBAQCBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0o
Y29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgYwogICAgICAgICAmJiBqdXN0aWZ5
SXRlbXMgPT0gby5qdXN0aWZ5SXRlbXMKICAgICAgICAgJiYganVzdGlmeVNlbGYgPT0gby5qdXN0
aWZ5U2VsZgogICAgICAgICAmJiBjdXN0b21Qcm9wZXJ0aWVzID09IG8uY3VzdG9tUHJvcGVydGll
cwotICAgICAgICAmJiAoKGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgJiYgby5jdXN0b21Q
YWludFdhdGNoZWRQcm9wZXJ0aWVzICYmICpjdXN0b21QYWludFdhdGNoZWRQcm9wZXJ0aWVzID09
ICpvLmN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMpCi0gICAgICAgICAgICB8fCAoIWN1c3Rv
bVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgJiYgIW8uY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGll
cykpCisgICAgICAgICYmIGN1c3RvbVBhaW50V2F0Y2hlZFByb3BlcnRpZXMgPT0gby5jdXN0b21Q
YWludFdhdGNoZWRQcm9wZXJ0aWVzCiAgICAgICAgICYmIHBhZ2VTaXplVHlwZSA9PSBvLnBhZ2VT
aXplVHlwZQogICAgICAgICAmJiB0cmFuc2Zvcm1TdHlsZTNEID09IG8udHJhbnNmb3JtU3R5bGUz
RAogICAgICAgICAmJiBiYWNrZmFjZVZpc2liaWxpdHkgPT0gby5iYWNrZmFjZVZpc2liaWxpdHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YS5oCmluZGV4IDc3YmFiOTUwODM3Yzc0OThiMTExYmY5NjhkYTI0YWY4
YWJiZTFiMWEuLjkyNDQyYWM5MDFiMTViZTEzNjVhNGYxYzVlMzgyMTUzOTk5NjgzZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGEuaApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBvdmVyc2Nyb2xsQmVoYXZpb3JZIDogMjsgLy8gT3ZlcnNjcm9sbEJlaGF2aW9yCiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q29udGVudERhdGE+IGNvbnRlbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PENvdW50ZXJEaXJlY3RpdmVNYXA+IGNvdW50ZXJEaXJlY3RpdmVzOworICAgIENvdW50ZXJEaXJl
Y3RpdmVNYXAgY291bnRlckRpcmVjdGl2ZXM7CiAgICAgU3RyaW5nIGFsdFRleHQ7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYm94U2hhZG93OyAvLyBGb3IgYm94LXNoYWRvdyBk
ZWNvcmF0aW9ucy4KQEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVTZWxmQWxp
Z25tZW50RGF0YSBqdXN0aWZ5U2VsZjsKIAogICAgIERhdGFSZWY8U3R5bGVDdXN0b21Qcm9wZXJ0
eURhdGE+IGN1c3RvbVByb3BlcnRpZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8U3Ry
aW5nPj4gY3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllczsKKyAgICBIYXNoU2V0PFN0cmluZz4g
Y3VzdG9tUGFpbnRXYXRjaGVkUHJvcGVydGllczsKIAogICAgIFJlZlB0cjxSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24+IHJvdGF0ZTsKICAgICBSZWZQdHI8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+
IHNjYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAppbmRleCBiYWZjZWI4MGY5Y2Qz
YTI3MzFkNDI3MDhmY2ZiMTUyYzRlMmMzYTZmLi5lNTg2NGQ0YmQ4YzFjM2ZjZGRhM2E3ZjMyYzY0
N2IxMGJmMDA5YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcApAQCAtNDkxLDcg
KzQ5MSw3IEBAIHZvaWQgU2NvcGU6OnVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZVR5cGUg
dXBkYXRlVHlwZSkKIAogICAgIHVwZGF0ZVJlc29sdmVyKGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBz
dHlsZVNoZWV0Q2hhbmdlLnJlc29sdmVyVXBkYXRlVHlwZSk7CiAKLSAgICBtX3dlYWtDb3B5T2ZB
Y3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAgPSBudWxscHRyOworICAgIG1fd2Vha0Nv
cHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IFdURjo6bnVsbG9wdDsKICAg
ICBtX2FjdGl2ZVN0eWxlU2hlZXRzLnN3YXAoYWN0aXZlQ1NTU3R5bGVTaGVldHMpOwogICAgIG1f
c3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdC5zd2FwKGFjdGl2ZVN0eWxlU2hlZXRzKTsKIApA
QCAtNTc0LDcgKzU3NCw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IFNj
b3BlOjphY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpCiBib29sIFNjb3BlOjphY3RpdmVT
dHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBjb25zdAogewog
ICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwKSB7
Ci0gICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9
IG1ha2VVbmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7CisgICAgICAgIG1f
d2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IEhhc2hTZXQ8Y29u
c3QgQ1NTU3R5bGVTaGVldCo+IHsgfTsKICAgICAgICAgZm9yIChhdXRvJiBhY3RpdmVTdHlsZVNo
ZWV0IDogbV9hY3RpdmVTdHlsZVNoZWV0cykKICAgICAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2
ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+YWRkKGFjdGl2ZVN0eWxlU2hlZXQuZ2V0KCkp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuaAppbmRleCBiYTc2NzJkZDA4NDA3ZjRk
NWRiODVmM2E0MjY3Y2NkNDYyMDIwNmEwLi4yNzFiYTAxYjQ4YmUxYmY1NmIzMTAzOTgzM2I1ZTYy
MzcwZjBkODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5oCkBAIC0xNjgsNyArMTY4LDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBtX3N0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gbV9h
Y3RpdmVTdHlsZVNoZWV0czsKIAotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8
Y29uc3QgQ1NTU3R5bGVTaGVldCo+PiBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZv
ckZhc3RMb29rdXA7CisgICAgbXV0YWJsZSBPcHRpb25hbDxIYXNoU2V0PGNvbnN0IENTU1N0eWxl
U2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOwog
CiAgICAgLy8gVHJhY2sgdGhlIGN1cnJlbnRseSBsb2FkaW5nIHRvcC1sZXZlbCBzdHlsZXNoZWV0
cyBuZWVkZWQgZm9yIHJlbmRlcmluZy4KICAgICAvLyBTaGVldHMgbG9hZGVkIHVzaW5nIHRoZSBA
aW1wb3J0IGRpcmVjdGl2ZSBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgY291bnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNDIyY2U1NWQ4MTUyNjhlYWM2N2ZiMjA1ZWZk
YjIyNWRhMDVhOGVlZi4uYmE2NjVmM2FjYjc4MzM2Mzg2ZTk0MTM1Njc0OGQzNmUyNmVkNDk3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjc2MywxMiArMjc2MywxMSBA
QCB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mU2Nyb2xsYWJsZUFyZWFzKCkKIAogICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
LSAgICBpZiAoZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkpCi0gICAgICAgIGNvdW50
ICs9IGZyYW1lLT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLT5zaXplKCk7Ci0KKyAgICBpZiAo
ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgY291bnQgKz0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYWJs
ZUFyZWFzKCkuc2l6ZSgpOwogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkg
ewotICAgICAgICBpZiAoY2hpbGQtPnZpZXcoKSAmJiBjaGlsZC0+dmlldygpLT5zY3JvbGxhYmxl
QXJlYXMoKSkKLSAgICAgICAgICAgIGNvdW50ICs9IGNoaWxkLT52aWV3KCktPnNjcm9sbGFibGVB
cmVhcygpLT5zaXplKCk7CisgICAgICAgIGlmIChjaGlsZC0+dmlldygpKQorICAgICAgICAgICAg
Y291bnQgKz0gY2hpbGQtPnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkuc2l6ZSgpOwogICAgIH0K
IAogICAgIHJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggMWU0ODBmNTRhMmFlNjk3MzFlNzUz
NjM3YmYwOGQzMDE0MjNjNzJlZi4uY2I2MzQzOWNmMjRlM2FiZjFmMmQzOTkyOTE1NWEwZmZiYmMx
MTkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9h
ZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZFNjaGVkdWxlci5jcHAKQEAgLTEzNyw5ICsxMzcsNyBAQCB2b2lkIE5ldHdvcmtMb2FkU2No
ZWR1bGVyOjpzZXRSZXNvdXJjZUxvYWRTY2hlZHVsaW5nTW9kZShXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllcgogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgV2ViQ29yZTo6TG9hZFNjaGVk
dWxpbmdNb2RlOjpQcmlvcml0aXplZDoKLSAgICAgICAgbV9wYWdlQ29udGV4dHMuZW5zdXJlKHBh
Z2VJZGVudGlmaWVyLCBbJl0gewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UGFnZUNv
bnRleHQ+KCk7Ci0gICAgICAgIH0pOworICAgICAgICBtX3BhZ2VDb250ZXh0cy5hZGQocGFnZUlk
ZW50aWZpZXIsIFBhZ2VDb250ZXh0IHsgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2Vi
Q29yZTo6TG9hZFNjaGVkdWxpbmdNb2RlOjpEaXJlY3Q6CiAgICAgICAgIG1fcGFnZUNvbnRleHRz
LnJlbW92ZShwYWdlSWRlbnRpZmllcik7CkBAIC0xNjUsMTIgKzE2MywxMiBAQCBhdXRvIE5ldHdv
cmtMb2FkU2NoZWR1bGVyOjpjb250ZXh0Rm9yTG9hZChjb25zdCBOZXR3b3JrTG9hZCYgbG9hZCkg
LT4gSG9zdENvbnRleAogICAgIGlmICghbG9hZC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byogcGFnZUNvbnRleHQgPSBt
X3BhZ2VDb250ZXh0cy5nZXQobG9hZC5wYXJhbWV0ZXJzKCkud2ViUGFnZUlEKTsKLSAgICBpZiAo
IXBhZ2VDb250ZXh0KQorICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BhZ2VDb250ZXh0cy5maW5kKGxv
YWQucGFyYW1ldGVycygpLndlYlBhZ2VJRCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fcGFnZUNv
bnRleHRzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gaG9zdCA9
IGxvYWQudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBhZ2VDb250ZXh0LT5l
bnN1cmUoaG9zdCwgWyZdIHsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmVuc3VyZShob3N0
LCBbJl0gewogICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIb3N0Q29udGV4dD4oKTsKICAgICB9
KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkU2NoZWR1bGVyLmgKaW5kZXggMjk5YzgxYWMzMjg5Zjg5Zjc1
NGE2YzZkMTkzMzE5NzhjMmIyNjc5Mi4uMThiYjRhYTRiNjU1MmViMzFhNTBlM2M1NGNhNjY3MGJh
OTk2NzYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZFNjaGVkdWxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWRTY2hlZHVsZXIuaApAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIEhvc3RDb250
ZXh0KiBjb250ZXh0Rm9yTG9hZChjb25zdCBOZXR3b3JrTG9hZCYpOwogCiAgICAgdXNpbmcgUGFn
ZUNvbnRleHQgPSBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhvc3RDb250ZXh0Pj47
Ci0gICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFBh
Z2VDb250ZXh0Pj4gbV9wYWdlQ29udGV4dHM7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgUGFnZUNvbnRleHQ+IG1fcGFnZUNvbnRleHRzOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5jcHAKaW5k
ZXggNWUyZTAyZTJmYmEwYjRhMGMwM2I1ZDNlNjZiOTdmN2JjY2M3OTU4Yi4uNjdmODlhOGNmZmE3
MDQwZmE2OGU3NzFmZGU2ODQ1YzQ3ZGFhMzg4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL1ByZWZldGNoQ2FjaGUuY3BwCkBAIC01Myw0NSArNTMsMzkg
QEAgdm9pZCBQcmVmZXRjaENhY2hlOjpjbGVhcigpCiB7CiAgICAgbV9leHBpcmF0aW9uVGltZXIu
c3RvcCgpOwogICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmNsZWFyKCk7Ci0gICAgaWYgKG1f
c2Vzc2lvblByZWZldGNoZXMpCi0gICAgICAgIG1fc2Vzc2lvblByZWZldGNoZXMtPmNsZWFyKCk7
CisgICAgbV9zZXNzaW9uUHJlZmV0Y2hlcy5jbGVhcigpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8
UHJlZmV0Y2hDYWNoZTo6RW50cnk+IFByZWZldGNoQ2FjaGU6OnRha2UoY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgYXV0byogcmVzb3VyY2VzID0gbV9zZXNzaW9uUHJlZmV0Y2hlcy5nZXQoKTsKLSAg
ICBpZiAoIXJlc291cmNlcykKKyAgICBpZiAobV9zZXNzaW9uUHJlZmV0Y2hlcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LnJl
bW92ZUFsbE1hdGNoaW5nKFsmdXJsXSAoY29uc3QgYXV0byYgdHVwbGUpIHsKICAgICAgICAgcmV0
dXJuIHN0ZDo6Z2V0PDA+KHR1cGxlKSA9PSB1cmw7CiAgICAgfSk7Ci0gICAgYXV0byBlbnRyeSA9
IHJlc291cmNlcy0+dGFrZSh1cmwpOworICAgIGF1dG8gZW50cnkgPSBtX3Nlc3Npb25QcmVmZXRj
aGVzLnRha2UodXJsKTsKICAgICBBU1NFUlQoIWVudHJ5IHx8ICFlbnRyeS0+cmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpWYXJ5KS5jb250YWlucygiQ29v
a2llIikpOwogICAgIHJldHVybiBlbnRyeTsKIH0KIAogc3RhdGljIGNvbnN0IFNlY29uZHMgZXhw
aXJhdGlvblRpbWVvdXQgeyA1X3MgfTsKIAotdm9pZCBQcmVmZXRjaENhY2hlOjpzdG9yZShjb25z
dCBVUkwmIHJlcXVlc3RVcmwsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwg
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit2b2lkIFByZWZldGNoQ2Fj
aGU6OnN0b3JlKGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYmIHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKIHsK
LSAgICBpZiAoIW1fc2Vzc2lvblByZWZldGNoZXMpCi0gICAgICAgIG1fc2Vzc2lvblByZWZldGNo
ZXMgPSBtYWtlVW5pcXVlPFByZWZldGNoRW50cmllc01hcD4oKTsKLSAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fc2Vzc2lvblByZWZldGNoZXMtPmFkZChyZXF1ZXN0VXJsLCBtYWtlVW5pcXVlPFByZWZl
dGNoQ2FjaGU6OkVudHJ5PihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShidWZmZXIpKSk7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3Nlc3Npb25QcmVmZXRjaGVzLmFkZChyZXF1ZXN0VVJMLCBt
YWtlVW5pcXVlPFByZWZldGNoQ2FjaGU6OkVudHJ5PihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92
ZShidWZmZXIpKSk7CiAgICAgLy8gTGltaXQgcHJlZmV0Y2hlcyBmb3Igc2FtZSB1cmwgdG8gMS4K
ICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47Ci0gICAgbV9z
ZXNzaW9uRXhwaXJhdGlvbkxpc3QuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0VXJsLCBX
YWxsVGltZTo6bm93KCkpKTsKKyAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5hcHBlbmQoc3Rk
OjptYWtlX3R1cGxlKHJlcXVlc3RVUkwsIFdhbGxUaW1lOjpub3coKSkpOwogICAgIGlmICghbV9l
eHBpcmF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9leHBpcmF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KGV4cGlyYXRpb25UaW1lb3V0KTsKIH0KIAotdm9pZCBQcmVmZXRjaENhY2hlOjpz
dG9yZVJlZGlyZWN0KGNvbnN0IFVSTCYgcmVxdWVzdFVybCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGly
ZWN0UmVxdWVzdCkKK3ZvaWQgUHJlZmV0Y2hDYWNoZTo6c3RvcmVSZWRpcmVjdChjb25zdCBVUkwm
IHJlcXVlc3RVUkwsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNl
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZWRpcmVjdFJlcXVlc3QpCiB7Ci0gICAgaWYg
KCFtX3Nlc3Npb25QcmVmZXRjaGVzKQotICAgICAgICBtX3Nlc3Npb25QcmVmZXRjaGVzID0gbWFr
ZVVuaXF1ZTxQcmVmZXRjaEVudHJpZXNNYXA+KCk7CiAgICAgcmVkaXJlY3RSZXF1ZXN0LmNsZWFy
UHVycG9zZSgpOwotICAgIG1fc2Vzc2lvblByZWZldGNoZXMtPnNldChyZXF1ZXN0VXJsLCBtYWtl
VW5pcXVlPFByZWZldGNoQ2FjaGU6OkVudHJ5PihXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2UpLCBX
VEZNb3ZlKHJlZGlyZWN0UmVxdWVzdCkpKTsKLSAgICBtX3Nlc3Npb25FeHBpcmF0aW9uTGlzdC5h
cHBlbmQoc3RkOjptYWtlX3R1cGxlKHJlcXVlc3RVcmwsIFdhbGxUaW1lOjpub3coKSkpOworICAg
IG1fc2Vzc2lvblByZWZldGNoZXMuc2V0KHJlcXVlc3RVUkwsIG1ha2VVbmlxdWU8UHJlZmV0Y2hD
YWNoZTo6RW50cnk+KFdURk1vdmUocmVkaXJlY3RSZXNwb25zZSksIFdURk1vdmUocmVkaXJlY3RS
ZXF1ZXN0KSkpOworICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmFwcGVuZChzdGQ6Om1ha2Vf
dHVwbGUocmVxdWVzdFVSTCwgV2FsbFRpbWU6Om5vdygpKSk7CiAgICAgaWYgKCFtX2V4cGlyYXRp
b25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2V4cGlyYXRpb25UaW1lci5zdGFydE9uZVNo
b3QoZXhwaXJhdGlvblRpbWVvdXQpOwogfQpAQCAtMTAwLDEzICs5NCwxMSBAQCB2b2lkIFByZWZl
dGNoQ2FjaGU6OmNsZWFyRXhwaXJlZEVudHJpZXMoKQogewogICAgIGF1dG8gdGltZW91dCA9IFdh
bGxUaW1lOjpub3coKTsKICAgICB3aGlsZSAoIW1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICBhdXRvIFtyZXF1ZXN0VXJsLCB0aW1lc3RhbXBdID0gbV9zZXNzaW9u
RXhwaXJhdGlvbkxpc3QuZmlyc3QoKTsKLSAgICAgICAgYXV0byogcmVzb3VyY2VzID0gbV9zZXNz
aW9uUHJlZmV0Y2hlcy5nZXQoKTsKLSAgICAgICAgQVNTRVJUKHJlc291cmNlcyk7Ci0gICAgICAg
IEFTU0VSVChyZXNvdXJjZXMtPmNvbnRhaW5zKHJlcXVlc3RVcmwpKTsKKyAgICAgICAgYXV0byBb
cmVxdWVzdFVSTCwgdGltZXN0YW1wXSA9IG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LmZpcnN0KCk7
CisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25QcmVmZXRjaGVzLmNvbnRhaW5zKHJlcXVlc3RVUkwp
KTsKICAgICAgICAgYXV0byBlbGFwc2VkID0gdGltZW91dCAtIHRpbWVzdGFtcDsKICAgICAgICAg
aWYgKGVsYXBzZWQgPiBleHBpcmF0aW9uVGltZW91dCkgewotICAgICAgICAgICAgcmVzb3VyY2Vz
LT5yZW1vdmUocmVxdWVzdFVybCk7CisgICAgICAgICAgICBtX3Nlc3Npb25QcmVmZXRjaGVzLnJl
bW92ZShyZXF1ZXN0VVJMKTsKICAgICAgICAgICAgIG1fc2Vzc2lvbkV4cGlyYXRpb25MaXN0LnJl
bW92ZUZpcnN0KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2V4cGlyYXRpb25U
aW1lci5zdGFydE9uZVNob3QoZXhwaXJhdGlvblRpbWVvdXQgLSBlbGFwc2VkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvUHJlZmV0Y2hDYWNoZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmgKaW5kZXgg
YTI1MTUyMGIzMWVhYzkyMWMyMmQzMTE1MWQ2ZDIzMWExYmVkMTM4Yy4uNjQyNzY1N2EyYjQ1ZTFk
ODQ2NDMzNDM0YzczMzk2OTJmYTI3Zjk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9QcmVmZXRjaENhY2hlLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNsZWFyRXhwaXJlZEVudHJpZXMoKTsKIAogICAgIHVzaW5nIFByZWZldGNo
RW50cmllc01hcCA9IEhhc2hNYXA8VVJMLCBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+PjsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHJlZmV0Y2hFbnRyaWVzTWFwPiBtX3Nlc3Npb25QcmVmZXRjaGVzOwor
ICAgIFByZWZldGNoRW50cmllc01hcCBtX3Nlc3Npb25QcmVmZXRjaGVzOwogCiAgICAgdXNpbmcg
U2Vzc2lvblByZWZldGNoRXhwaXJhdGlvbkxpc3QgPSBEZXF1ZTxzdGQ6OnR1cGxlPFVSTCwgV2Fs
bFRpbWU+PjsKICAgICBTZXNzaW9uUHJlZmV0Y2hFeHBpcmF0aW9uTGlzdCBtX3Nlc3Npb25FeHBp
cmF0aW9uTGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9j
ZXNzUGx1Z0luSGl0VGVzdFJlc3VsdC5tbQppbmRleCA5MGExM2M4NTUwMzdlNzE2MmEyMWU1YzM5
OGU5Y2ExNWZhZjU5NDY4Li5kNzVkZTJkY2E3NTI5ODE1ZTJiN2ZiZDhlZGY4YjdiOTkzN2Q4Zjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHQubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVn
SW5IaXRUZXN0UmVzdWx0Lm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJXS1dlYlByb2Nl
c3NQbHVnSW5IaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiV0tXZWJQcm9jZXNz
UGx1Z0luTm9kZUhhbmRsZUludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogCiBAaW1wbGVtZW50YXRp
b24gV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQppbmRleCBmMjM0OGY4NTI0ZTk2
M2YzYjgyNTg0YjQ1YTI3YTgyNzZiNDUwYjdiLi40NGNjYWU3ODk2MjYxMGY1OTk2Y2I0MWJkZTc4
MzdhYzc5ODhmYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KQEAgLTEzMTMsOSArMTMxMyw5IEBAIHZvaWQgUERGUGx1Z2luOjp1
cGRhdGVTY3JvbGxiYXJzKCkKICAgICBib29sIGhhc1Njcm9sbGJhcnMgPSBtX2hvcml6b250YWxT
Y3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKICAgICBpZiAoaGFkU2Nyb2xsYmFycyAh
PSBoYXNTY3JvbGxiYXJzKSB7CiAgICAgICAgIGlmIChoYXNTY3JvbGxiYXJzKQotICAgICAgICAg
ICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIGZyYW1l
Vmlldy0+YWRkU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAgZnJh
bWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiAKICAgICAgICAgZnJhbWVWaWV3
LT5zZXROZWVkc0xheW91dEFmdGVyVmlld0NvbmZpZ3VyYXRpb25DaGFuZ2UoKTsKICAgICB9CkBA
IC0xODkxLDcgKzE4OTEsNyBAQCB2b2lkIFBERlBsdWdpbjo6d2lsbERldGFjaFJlbmRlcmVyKCkK
ICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmNvcmVGcmFtZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3
KCkpCi0gICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAg
ICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwogfQogCiB2b2lkIFBE
RlBsdWdpbjo6ZGVzdHJveSgpCkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFBERlBsdWdpbjo6
ZGVzdHJveSgpCiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSAwOwog
CiAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+Y29yZUZyYW1l
KCkgPyBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpIDogbnVsbHB0cikKLSAgICAgICAgZnJh
bWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgZnJhbWVWaWV3LT5y
ZW1vdmVTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CiAKICAgICBtX2FjdGl2ZUFubm90YXRpb24gPSBu
dWxscHRyOwogICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IG51bGxwdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92
ZXJyaWRlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKaW5kZXggNjlmMGFlODI3OTUwN2I3Mjk2NWY2NWMyMTY4
NzNjNDgxYWRmNGQ2MC4uZWI2OTQ2ZTY3OTczZDg1N2JhYzJkZTc4OWYxZmYxYWNjYWI1NTRkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBh
c3RlYm9hcmRPdmVycmlkZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcApAQCAtNDIsMTQgKzQyLDcgQEAg
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6V2ViUGFzdGVib2FyZE92ZXJyaWRlcygpCiAKIHZvaWQg
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6YWRkT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CiB7Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX292ZXJyaWRlc01hcC5hZGQocGFzdGVib2FyZE5h
bWUsIG51bGxwdHIpOwotCi0gICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+Pj4gdHlwZU1h
cCA9IG1ha2VVbmlxdWU8SGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+KCk7Ci0gICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3ZlKHR5cGVNYXApOwotICAgIH0K
LQotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldCh0eXBlLCBkYXRhKTsKKyAgICBt
X292ZXJyaWRlc01hcC5hZGQocGFzdGVib2FyZE5hbWUsIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
dWludDhfdD4+IHsgfSkuaXRlcmF0b3ItPnZhbHVlLnNldCh0eXBlLCBkYXRhKTsKIH0KIAogdm9p
ZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC01OCwyOSArNTEsMjAgQEAgdm9p
ZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdAogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGl0LT52YWx1ZSk7Ci0KLSAgICBpdC0+dmFs
dWUtPnJlbW92ZSh0eXBlKTsKKyAgICBpdC0+dmFsdWUucmVtb3ZlKHR5cGUpOwogCiAgICAgLy8g
SWYgdGhpcyB3YXMgdGhlIGxhc3Qgb3ZlcnJpZGUgZm9yIHRoaXMgcGFzdGVib2FyZCwgcmVtb3Zl
IGl0cyByZWNvcmQgY29tcGxldGVseS4KLSAgICBpZiAoaXQtPnZhbHVlLT5pc0VtcHR5KCkpCisg
ICAgaWYgKGl0LT52YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fb3ZlcnJpZGVzTWFwLnJlbW92
ZShpdCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJy
aWRkZW5UeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLQogICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3Rl
Ym9hcmROYW1lKTsKICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICBBU1NFUlQoaXQtPnZhbHVlKTsKLQotICAgIGZvciAoU3Ry
aW5nJiB0eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQodHlw
ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLmtleXMoKSk7CiB9CiAKIGJvb2wgV2ViUGFzdGVib2Fy
ZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSBjb25zdApAQCAt
ODksOCArNzMsOCBAQCBib29sIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OmdldERhdGFGb3JPdmVy
cmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjbwogICAgIGlmIChwYXN0ZWJvYXJk
SXRlcmF0b3IgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gdHlwZUl0ZXJhdG9yID0gcGFzdGVib2FyZEl0ZXJhdG9yLT52YWx1ZS0+Zmlu
ZCh0eXBlKTsKLSAgICBpZiAodHlwZUl0ZXJhdG9yID09IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFs
dWUtPmVuZCgpKQorICAgIGF1dG8gdHlwZUl0ZXJhdG9yID0gcGFzdGVib2FyZEl0ZXJhdG9yLT52
YWx1ZS5maW5kKHR5cGUpOworICAgIGlmICh0eXBlSXRlcmF0b3IgPT0gcGFzdGVib2FyZEl0ZXJh
dG9yLT52YWx1ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZGF0YSA9IHR5
cGVJdGVyYXRvci0+dmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaAppbmRleCBl
YzA5MzNlNTEyNWU3OTYwNDRjYjgyYzM4YjI0YzViMjJlZGViNmM3Li41ODgzZTU4MDQ5NWE1NGZk
YTAzZDZlNDQ2NzkwMzNjZjc1YWVjMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBtX292ZXJyaWRlc01h
cCBtYXBzIHN0cmluZyBwYXN0ZWJvYXJkIG5hbWVzIHRvIHBhc3RlYm9hcmQgZW50cmllcy4KICAg
ICAvLyBFYWNoIHBhc3RlYm9hcmQgZW50cnkgaXMgYSBtYXAgb2YgYSBzdHJpbmcgdHlwZSB0byBh
IGRhdGEgYnVmZmVyLgotICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1h
cDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+PiBtX292ZXJyaWRlc01hcDsKKyAgICBIYXNoTWFw
PFN0cmluZywgSGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+IG1fb3ZlcnJpZGVzTWFw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oCmluZGV4IDliZjU4N2ZlMDZkMTY1MzJmN2I0N2Y4ZmNhMzI5NWVi
MzFkNzM0NTIuLjc2NWQ1NWYyNGExNmUxYjMwNTZlY2ViZmMxYWRkYTA4NDNkY2UyYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCkBAIC0zMiw3ICszMiw3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM7CiAKLWNsYXNzIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6
RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CitjbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlKFdlYkZy
YW1lKiBmcmFtZSkKICAgICB7CkBAIC01MCwxMiArNTAsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgU2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGlj
YXRpb25BdWRpdERhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgc291cmNlQXBwbGlj
YXRpb25JZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uKiBzdG9yYWdlU2Vz
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIGxvY2Fs
RmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBTY2hl
ZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBmaW5hbDsKKyAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0
IGZpbmFsOworICAgIFN0cmluZyBzb3VyY2VBcHBsaWNhdGlvbklkZW50aWZpZXIoKSBjb25zdCBm
aW5hbDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBmaW5hbDsKKyAgICBXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24qIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCmluZGV4IGZkMmM5Mjc4YzM1YTVkNmNjNzY1NmQ5YWYwNmFiZDk4YTAzMjQyYTEuLjFl
YmZmODU5OTdlMGNiMWJjYzdkM2UwNGIyMjljMWRmNjA4MmYzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTQ3LDExICs0NywxMSBAQCBib29s
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJs
ZWQoKSBjb25zdAogICAgIHJldHVybiBmcmFtZSgpICYmIGZyYW1lKCktPnNldHRpbmdzKCkubG9j
YWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpOwogfQogCi1TY2hlZHVsZVBhaXJIYXNoU2V0
KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25z
dAorY29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QKIHsKICAgICBpZiAoIWZyYW1lKCkgfHwgIWZy
YW1lKCktPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGZyYW1l
KCktPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CisgICAgcmV0dXJuICZmcmFtZSgp
LT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOwogfQogCiBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0
YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IGIxN2E3NGE0MzZhZTNkZTRmYjUyZjhmNTUzY2Y4MTE1ODA3ZDA5MDcuLjU2ZGQzMWI2
NzllNmViYzgyOGQyNDNhNDgzMTBlNWU4YjA3Y2Q5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NTkyLDEyICs1NTkyLDcgQEAgc3RhdGlj
IGJvb2wgcGFnZUNvbnRhaW5zQW55SG9yaXpvbnRhbFNjcm9sbGJhcnMoRnJhbWUqIG1haW5GcmFt
ZSkKICAgICAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBjb25zdCBIYXNoU2V0PFNjcm9sbGFibGVBcmVhKj4qIHNjcm9sbGFibGVBcmVhcyA9IGZy
YW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWFz
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yIChIYXNoU2V0PFNjcm9sbGFi
bGVBcmVhKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigpLCBl
bmQgPSBzY3JvbGxhYmxlQXJlYXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9ICppdDsKKyAgICAgICAgZm9yIChh
dXRvKiBzY3JvbGxhYmxlQXJlYSA6IGZyYW1lVmlldy0+c2Nyb2xsYWJsZUFyZWFzKCkpIHsKICAg
ICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnkubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9I
aXN0b3J5L1dlYkhpc3RvcnkubW0KaW5kZXggZjA0NmExOTMwOWJlMmY0YjIzZjY5Y2M3YTBiZDM3
NWMxYzU3ZDE4YS4uNzQ5ZGUyOTE5ZmU4MzEwZDM0MTgzMzUxMzYyMmVlNGRmMDM1ZDMxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeS5tbQpAQCAtNDEs
OCArNDEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2Vu
ZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiB0eXBlZGVmIGludDY0X3QgV2ViSGlz
dG9yeURhdGVLZXk7CiB0eXBlZGVmIEhhc2hNYXA8V2ViSGlzdG9yeURhdGVLZXksIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4+IERhdGVUb0VudHJpZXNNYXA7CiAKQEAgLTYwLDIwICs1OCwyMCBA
QCBzdGF0aWMgUmV0YWluUHRyPFdlYkhpc3Rvcnk+JiBzaGFyZWRIaXN0b3J5KCkKICAgICByZXR1
cm4gX3NoYXJlZEhpc3Rvcnk7CiB9CiAKLU5TU3RyaW5nICpGaWxlVmVyc2lvbktleSA9IEAiV2Vi
SGlzdG9yeUZpbGVWZXJzaW9uIjsKLU5TU3RyaW5nICpEYXRlc0FycmF5S2V5ID0gQCJXZWJIaXN0
b3J5RGF0ZXMiOworY29uc3RleHByIE5TU3RyaW5nICpGaWxlVmVyc2lvbktleSA9IEAiV2ViSGlz
dG9yeUZpbGVWZXJzaW9uIjsKK2NvbnN0ZXhwciBOU1N0cmluZyAqRGF0ZXNBcnJheUtleSA9IEAi
V2ViSGlzdG9yeURhdGVzIjsKIAotI2RlZmluZSBjdXJyZW50RmlsZVZlcnNpb24gMQorY29uc3Rl
eHByIGludCBjdXJyZW50RmlsZVZlcnNpb24gPSAxOwogCiBjbGFzcyBXZWJIaXN0b3J5V3JpdGVy
IDogcHVibGljIEhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIgewogcHVibGljOgotICAgIFdlYkhp
c3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01hcCopOworICAgIGV4cGxpY2l0IFdlYkhpc3RvcnlX
cml0ZXIoRGF0ZVRvRW50cmllc01hcCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3
cml0ZUhpc3RvcnlJdGVtcyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0mKTsKIAotICAg
IERhdGVUb0VudHJpZXNNYXAqIG1fZW50cmllc0J5RGF0ZTsKLSAgICBWZWN0b3I8aW50PiBtX2Rh
dGVLZXlzOworICAgIERhdGVUb0VudHJpZXNNYXAmIG1fZW50cmllc0J5RGF0ZTsKKyAgICBWZWN0
b3I8V2ViSGlzdG9yeURhdGVLZXk+IG1fZGF0ZUtleXM7CiB9OwogCiBAaW50ZXJmYWNlIFdlYkhp
c3RvcnkgKCkKQEAgLTgzLDcgKzgxLDcgQEAgQGVuZAogQGludGVyZmFjZSBXZWJIaXN0b3J5UHJp
dmF0ZSA6IE5TT2JqZWN0IHsKIEBwcml2YXRlCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IF9lbnRyaWVzQnlVUkw7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPERhdGVUb0VudHJpZXNN
YXA+IF9lbnRyaWVzQnlEYXRlOworICAgIERhdGVUb0VudHJpZXNNYXAgX2VudHJpZXNCeURhdGU7
CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBfb3JkZXJlZExhc3RWaXNpdGVkRGF5czsK
ICAgICBCT09MIGl0ZW1MaW1pdFNldDsKICAgICBpbnQgaXRlbUxpbWl0OwpAQCAtMTM1LDggKzEz
Myw2IEBAIC0gKGlkKWluaXQKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBfZW50cmll
c0J5VVJMID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAg
ICBfZW50cmllc0J5RGF0ZSA9IG1ha2VVbmlxdWU8RGF0ZVRvRW50cmllc01hcD4oKTsKLQogICAg
IHJldHVybiBzZWxmOwogfQogCkBAIC0xNzksMTUgKzE3NSwxNSBAQCAtIChCT09MKWZpbmRLZXk6
KFdlYkhpc3RvcnlEYXRlS2V5KilrZXkgZm9yRGF5OihOU1RpbWVJbnRlcnZhbClkYXRlCiB7CiAg
ICAgQVNTRVJUX0FSRyhrZXksIGtleSk7CiAgICAgKmtleSA9IGRhdGVLZXkoZGF0ZSk7Ci0gICAg
cmV0dXJuIF9lbnRyaWVzQnlEYXRlLT5jb250YWlucygqa2V5KTsKKyAgICByZXR1cm4gX2VudHJp
ZXNCeURhdGUuY29udGFpbnMoKmtleSk7CiB9CiAKIC0gKHZvaWQpaW5zZXJ0SXRlbTooV2ViSGlz
dG9yeUl0ZW0gKillbnRyeSBmb3JEYXRlS2V5OihXZWJIaXN0b3J5RGF0ZUtleSlkYXRlS2V5CiB7
CiAgICAgQVNTRVJUX0FSRyhlbnRyeSwgZW50cnkgIT0gbmlsKTsKLSAgICBBU1NFUlQoX2VudHJp
ZXNCeURhdGUtPmNvbnRhaW5zKGRhdGVLZXkpKTsKKyAgICBBU1NFUlQoX2VudHJpZXNCeURhdGUu
Y29udGFpbnMoZGF0ZUtleSkpOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRl
ID0gX2VudHJpZXNCeURhdGUtPmdldChkYXRlS2V5KS5nZXQoKTsKKyAgICBOU011dGFibGVBcnJh
eSAqZW50cmllc0ZvckRhdGUgPSBfZW50cmllc0J5RGF0ZS5nZXQoZGF0ZUtleSkuZ2V0KCk7CiAg
ICAgTlNUaW1lSW50ZXJ2YWwgZW50cnlEYXRlID0gW2VudHJ5IGxhc3RWaXNpdGVkVGltZUludGVy
dmFsXTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gW2VudHJpZXNGb3JEYXRlIGNvdW50XTsKQEAg
LTIyNiwxMyArMjIyLDEzIEBAIC0gKEJPT0wpcmVtb3ZlSXRlbUZyb21EYXRlQ2FjaGVzOihXZWJI
aXN0b3J5SXRlbSAqKWVudHJ5CiAgICAgaWYgKCFmb3VuZERhdGUpCiAgICAgICAgIHJldHVybiBO
TzsKIAotICAgIERhdGVUb0VudHJpZXNNYXA6Oml0ZXJhdG9yIGl0ID0gX2VudHJpZXNCeURhdGUt
PmZpbmQoZGF0ZUtleSk7CisgICAgYXV0byBpdCA9IF9lbnRyaWVzQnlEYXRlLmZpbmQoZGF0ZUtl
eSk7CiAgICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNGb3JEYXRlID0gaXQtPnZhbHVlLmdldCgp
OwogICAgIFtlbnRyaWVzRm9yRGF0ZSByZW1vdmVPYmplY3RJZGVudGljYWxUbzplbnRyeV07CiAg
ICAgCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3Ro
ZXIgZW50cmllcyBvbiBpdAogICAgIGlmIChbZW50cmllc0ZvckRhdGUgY291bnRdID09IDApIHsK
LSAgICAgICAgX2VudHJpZXNCeURhdGUtPnJlbW92ZShpdCk7CisgICAgICAgIF9lbnRyaWVzQnlE
YXRlLnJlbW92ZShpdCk7CiAgICAgICAgIC8vIENsZWFyIF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlz
IHNvIGl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2hlbiBuZXh0IHJlcXVlc3RlZC4KICAgICAgICAg
X29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBuaWw7CiAgICAgfQpAQCAtMjcwLDcgKzI2Niw3IEBA
IC0gKHZvaWQpYWRkSXRlbVRvRGF0ZUNhY2hlczooV2ViSGlzdG9yeUl0ZW0gKillbnRyeQogICAg
IGVsc2UgewogICAgICAgICAvLyBubyBvdGhlciBlbnRyaWVzIGV4aXN0IGZvciB0aGlzIGRhdGUK
ICAgICAgICAgYXV0byBlbnRyaWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aE9iamVjdHM6JmVudHJ5IGNvdW50OjFdKTsKLSAgICAgICAgX2VudHJpZXNCeURhdGUt
PnNldChkYXRlS2V5LCBlbnRyaWVzLmdldCgpKTsKKyAgICAgICAgX2VudHJpZXNCeURhdGUuc2V0
KGRhdGVLZXksIGVudHJpZXMuZ2V0KCkpOwogICAgICAgICAvLyBDbGVhciBfb3JkZXJlZExhc3RW
aXNpdGVkRGF5cyBzbyBpdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIHdoZW4gbmV4dCByZXF1ZXN0ZWQu
CiAgICAgICAgIF9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbmlsOwogICAgIH0KQEAgLTM0Niw4
ICszNDIsOCBAQCAtICh2b2lkKXJlYnVpbGRIaXN0b3J5QnlEYXlJZk5lZWRlZDooV2ViSGlzdG9y
eSAqKXdlYkhpc3RvcnkKIHsKICAgICAvLyBXZSBjbGVhciBhbGwgdGhlIHZhbHVlcyB0byBwcmVz
ZW50IGEgY29uc2lzdGVudCBzdGF0ZSB3aGVuIHNlbmRpbmcgdGhlIG5vdGlmaWNhdGlvbnMuCiAg
ICAgLy8gV2Uga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgZW50cmllcyBmb3IgcmVidWlsZGluZyB0
aGUgaGlzdG9yeSBhZnRlciB0aGUgbm90aWZpY2F0aW9uLgotICAgIGF1dG8gZW50cnlBcnJheXMg
PSBjb3B5VG9WZWN0b3IoX2VudHJpZXNCeURhdGUtPnZhbHVlcygpKTsKLSAgICBfZW50cmllc0J5
RGF0ZS0+Y2xlYXIoKTsKKyAgICBhdXRvIGVudHJ5QXJyYXlzID0gY29weVRvVmVjdG9yKF9lbnRy
aWVzQnlEYXRlLnZhbHVlcygpKTsKKyAgICBfZW50cmllc0J5RGF0ZS5jbGVhcigpOwogICAgIAog
ICAgIGF1dG8gZW50cmllc0J5VVJMID0gc3RkOjpleGNoYW5nZShfZW50cmllc0J5VVJMLCBuaWwp
OwogICAgIApAQCAtMzk1LDEwICszOTEsMTAgQEAgLSAoQk9PTClyZW1vdmVJdGVtczooTlNBcnJh
eSAqKWVudHJpZXMKIAogLSAoQk9PTClyZW1vdmVBbGxJdGVtcwogewotICAgIGlmIChfZW50cmll
c0J5RGF0ZS0+aXNFbXB0eSgpKQorICAgIGlmIChfZW50cmllc0J5RGF0ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBOTzsKIAotICAgIF9lbnRyaWVzQnlEYXRlLT5jbGVhcigpOworICAgIF9l
bnRyaWVzQnlEYXRlLmNsZWFyKCk7CiAgICAgW19lbnRyaWVzQnlVUkwgcmVtb3ZlQWxsT2JqZWN0
c107CiAKICAgICAvLyBDbGVhciBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBzbyBpdCB3aWxsIGJl
IHJlZ2VuZXJhdGVkIHdoZW4gbmV4dCByZXF1ZXN0ZWQuCkBAIC00MjgsMTIgKzQyNCw3IEBAIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAtIChOU0FycmF5ICopb3JkZXJlZExh
c3RWaXNpdGVkRGF5cwogewogICAgIGlmICghX29yZGVyZWRMYXN0VmlzaXRlZERheXMpIHsKLSAg
ICAgICAgVmVjdG9yPGludD4gZGF5c0FzVGltZUludGVydmFsczsKLSAgICAgICAgZGF5c0FzVGlt
ZUludGVydmFscy5yZXNlcnZlQ2FwYWNpdHkoX2VudHJpZXNCeURhdGUtPnNpemUoKSk7Ci0gICAg
ICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IF9lbnRyaWVzQnlEYXRl
LT5lbmQoKTsKLSAgICAgICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IF9lbnRyaWVzQnlEYXRlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBkYXlzQXNUaW1lSW50ZXJ2YWxzLmFwcGVuZChpdC0+a2V5KTsKLQorICAgICAgICBhdXRvIGRh
eXNBc1RpbWVJbnRlcnZhbHMgPSBjb3B5VG9WZWN0b3IoX2VudHJpZXNCeURhdGUua2V5cygpKTsK
ICAgICAgICAgc3RkOjpzb3J0KGRheXNBc1RpbWVJbnRlcnZhbHMuYmVnaW4oKSwgZGF5c0FzVGlt
ZUludGVydmFscy5lbmQoKSk7CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGRheXNBc1RpbWVJbnRl
cnZhbHMuc2l6ZSgpOwogICAgICAgICBfb3JkZXJlZExhc3RWaXNpdGVkRGF5cyA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOwpAQCAtNDUx
LDcgKzQ0Miw3IEBAIC0gKE5TQXJyYXkgKilvcmRlcmVkSXRlbXNMYXN0VmlzaXRlZE9uRGF5OihO
U0NhbGVuZGFyRGF0ZSAqKWRhdGUKICAgICBXZWJIaXN0b3J5RGF0ZUtleSBkYXRlS2V5OwogICAg
IGlmICghW3NlbGYgZmluZEtleTomZGF0ZUtleSBmb3JEYXk6W2RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXV0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIF9lbnRy
aWVzQnlEYXRlLT5nZXQoZGF0ZUtleSkuZ2V0KCk7CisgICAgcmV0dXJuIF9lbnRyaWVzQnlEYXRl
LmdldChkYXRlS2V5KS5nZXQoKTsKIH0KIAogQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECkBAIC02MTQsMTYgKzYwNSwxNiBAQCAtIChCT09MKWxvYWRGcm9tVVJMOihOU1VSTCAqKVVS
TCBjb2xsZWN0RGlzY2FyZGVkSXRlbXNJbnRvOihOU011dGFibGVBcnJheSAqKWRpcwogCiAtIChO
U0RhdGEgKilkYXRhCiB7Ci0gICAgaWYgKF9lbnRyaWVzQnlEYXRlLT5pc0VtcHR5KCkpIHsKKyAg
ICBpZiAoX2VudHJpZXNCeURhdGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIHN0YXRpYyBOU0RhdGEg
KmVtcHR5SGlzdG9yeURhdGEgPSBbW05TRGF0YSBhbGxvY10gaW5pdF07CiAgICAgICAgIHJldHVy
biBlbXB0eUhpc3RvcnlEYXRhOwogICAgIH0KIAogICAgIC8vIElnbm9yZXMgdGhlIGRhdGUgYW5k
IGl0ZW0gY291bnQgbGltaXRzOyB0aGVzZSBhcmUgcmVzcGVjdGVkIHdoZW4gbG9hZGluZyBpbnN0
ZWFkIG9mIHdoZW4gc2F2aW5nLCBzbwogICAgIC8vIHRoYXQgY2xpZW50cyBjYW4gbGVhcm4gb2Yg
ZGlzY2FyZGVkIGl0ZW1zIGJ5IGxpc3RlbmluZyB0byBXZWJIaXN0b3J5SXRlbXNEaXNjYXJkZWRX
aGlsZUxvYWRpbmdOb3RpZmljYXRpb24uCi0gICAgV2ViSGlzdG9yeVdyaXRlciB3cml0ZXIoX2Vu
dHJpZXNCeURhdGUuZ2V0KCkpOworICAgIFdlYkhpc3RvcnlXcml0ZXIgd3JpdGVyKF9lbnRyaWVz
QnlEYXRlKTsKICAgICB3cml0ZXIud3JpdGVQcm9wZXJ0eUxpc3QoKTsKLSAgICByZXR1cm4gcmV0
YWluUHRyKChOU0RhdGEgKil3cml0ZXIucmVsZWFzZURhdGEoKS5nZXQoKSkuYXV0b3JlbGVhc2Uo
KTsKKyAgICByZXR1cm4gd3JpdGVyLnJlbGVhc2VEYXRhKCkuYnJpZGdpbmdBdXRvcmVsZWFzZSgp
OwogfQogCiAtIChCT09MKXNhdmVUb1VSTDooTlNVUkwgKilVUkwgZXJyb3I6KE5TRXJyb3IgKiop
ZXJyb3IKQEAgLTg1MSw3ICs4NDIsNyBAQCAtICh2b2lkKV92aXNpdGVkVVJMOihOU1VSTCAqKXVy
bCB3aXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgbWV0aG9kOihOU1N0cmluZyAqKQogewogICAg
IFdlYkhpc3RvcnlJdGVtICplbnRyeSA9IFtfaGlzdG9yeVByaXZhdGUgdmlzaXRlZFVSTDp1cmwg
d2l0aFRpdGxlOnRpdGxlXTsKIAotICAgIEhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShlbnRyeSk7
CisgICAgYXV0byBpdGVtID0gY29yZShlbnRyeSk7CiAgICAgaXRlbS0+c2V0TGFzdFZpc2l0V2Fz
RmFpbHVyZSh3YXNGYWlsdXJlKTsKIAogICAgIGVudHJ5LT5fcHJpdmF0ZS0+X3JlZGlyZWN0VVJM
cyA9IG51bGxwdHI7CkBAIC04NjUsMjAgKzg1NiwxNyBAQCAtICh2b2lkKV9hZGRWaXNpdGVkTGlu
a3NUb1Zpc2l0ZWRMaW5rU3RvcmU6KFdlYlZpc2l0ZWRMaW5rU3RvcmUgJil2aXNpdGVkTGlua1N0
bwogfQogQGVuZAogCi1XZWJIaXN0b3J5V3JpdGVyOjpXZWJIaXN0b3J5V3JpdGVyKERhdGVUb0Vu
dHJpZXNNYXAqIGVudHJpZXNCeURhdGUpCi0gICAgOiBtX2VudHJpZXNCeURhdGUoZW50cmllc0J5
RGF0ZSkKK1dlYkhpc3RvcnlXcml0ZXI6OldlYkhpc3RvcnlXcml0ZXIoRGF0ZVRvRW50cmllc01h
cCYgZW50cmllc0J5RGF0ZSkKKyAgICA6IG1fZW50cmllc0J5RGF0ZSB7IGVudHJpZXNCeURhdGUg
fQorICAgICwgbV9kYXRlS2V5cyB7IGNvcHlUb1ZlY3RvcihtX2VudHJpZXNCeURhdGUua2V5cygp
KSB9CiB7Ci0gICAgbV9kYXRlS2V5cy5yZXNlcnZlQ2FwYWNpdHkobV9lbnRyaWVzQnlEYXRlLT5z
aXplKCkpOwotICAgIERhdGVUb0VudHJpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZW50
cmllc0J5RGF0ZS0+ZW5kKCk7Ci0gICAgZm9yIChEYXRlVG9FbnRyaWVzTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZW50cmllc0J5RGF0ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBtX2RhdGVLZXlzLmFwcGVuZChpdC0+a2V5KTsKICAgICBzdGQ6OnNvcnQobV9kYXRlS2V5
cy5iZWdpbigpLCBtX2RhdGVLZXlzLmVuZCgpKTsKIH0KIAogdm9pZCBXZWJIaXN0b3J5V3JpdGVy
Ojp3cml0ZUhpc3RvcnlJdGVtcyhCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW0mIHN0cmVh
bSkKIHsKICAgICBmb3IgKGludCBkYXRlSW5kZXggPSBtX2RhdGVLZXlzLnNpemUoKSAtIDE7IGRh
dGVJbmRleCA+PSAwOyBkYXRlSW5kZXgtLSkgewotICAgICAgICBOU0FycmF5ICplbnRyaWVzID0g
bV9lbnRyaWVzQnlEYXRlLT5nZXQobV9kYXRlS2V5c1tkYXRlSW5kZXhdKS5nZXQoKTsKKyAgICAg
ICAgTlNBcnJheSAqZW50cmllcyA9IG1fZW50cmllc0J5RGF0ZS5nZXQobV9kYXRlS2V5c1tkYXRl
SW5kZXhdKS5nZXQoKTsKICAgICAgICAgTlNVSW50ZWdlciBlbnRyeUNvdW50ID0gW2VudHJpZXMg
Y291bnRdOwogICAgICAgICBmb3IgKE5TVUludGVnZXIgZW50cnlJbmRleCA9IDA7IGVudHJ5SW5k
ZXggPCBlbnRyeUNvdW50OyArK2VudHJ5SW5kZXgpCiAgICAgICAgICAgICB3cml0ZUhpc3RvcnlJ
dGVtKHN0cmVhbSwgW2VudHJpZXMgb2JqZWN0QXRJbmRleDplbnRyeUluZGV4XSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCBk
NTQxYzRjMDRmMmQ3NWQwNmJlZTA4MGViY2ZlNjZiMGE0NWZiZWY2Li5jODU3M2IwZDA5OGMyMDUw
MDJlYTNjNDdhYmU0OGU2NTFkZWMyZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTk0LDEzICs5NCwxMyBAQCBzdGF0aWMg
UmV0YWluUHRyPE5TQ291bnRlZFNldD4gY3JlYXRlTlNDb3VudGVkU2V0KGNvbnN0IEhhc2hDb3Vu
dGVkU2V0PGNvbnN0IGNoYQogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9i
amVjdFR5cGVDb3VudHMKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKLSAg
ICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KCpjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2Jq
ZWN0VHlwZUNvdW50cygpKS5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0NvdW50
ZWRTZXQoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVDb3Vu
dHMKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICByZXR1cm4gY3Jl
YXRlTlNDb3VudGVkU2V0KCpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKS5hdXRv
cmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0NvdW50ZWRTZXQoY29tbW9uVk0oKS5oZWFw
Lm9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogKyAodm9pZClnYXJiYWdl
Q29sbGVjdEphdmFTY3JpcHRPYmplY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQppbmRleCBhZWI0ZDhmMTZmZGRiMDI1NTEw
OGIyYTAwZWI5ZjY3MjE1ZjE3NjQyLi43OTZmYzhlMThiYjRmYWQ2NDNjMTBmMjQ1ZDUzNTRmNTE4
YjdhYjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkVsZW1l
bnREaWN0aW9uYXJ5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViRWxl
bWVudERpY3Rpb25hcnkubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9JbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNF
eHRyYXMuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01Db3JlLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaApp
bmRleCAzYWI5MTQyYTkzNTQxOTBmODU3NmZiOWIxNDhlZTBkOTUxNmUwNWEwLi5lY2MwMDUxOTA3
ZDY0ZjRjYmJhNWYxNDQ1MTk1OTFmYTM0Y2U1YjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgKQEAgLTc3LDcg
Kzc3LDcgQEAgdHlwZWRlZiB1bmlvbiBQbHVnaW5Qb3J0IHsKICAgICBCT09MIHNob3VsZFN0b3BT
b29uOwogCiAgICAgdWludDMyX3QgY3VycmVudFRpbWVySUQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEhhc2hNYXA8dWludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5UaW1lcj4+PiB0aW1lcnM7
CisgICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblRpbWVyPj4gdGlt
ZXJzOwogCiAgICAgdW5zaWduZWQgcGx1Z2luRnVuY3Rpb25DYWxsRGVwdGg7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCmluZGV4IDhmZmYyNDVlMTY4ZDM0YWRiZWRiMDJkNDc0OGY5Y2I4NzExMDc3YjYu
LjcxY2QxZjZjNjIzMjc4MjI4YjRhZGU3YmE4ZGI4YTUwZGFlNTEwMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCkBAIC0zOTgsMTEgKzM5OCw4IEBAIC0gKHZvaWQpc3RvcFRpbWVycwogICAgIGlmIChfZXZl
bnRIYW5kbGVyKQogICAgICAgICBfZXZlbnRIYW5kbGVyLT5zdG9wVGltZXJzKCk7CiAgICAgCi0g
ICAgaWYgKCF0aW1lcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgaXQ6IHRp
bWVycy0+dmFsdWVzKCkpCi0gICAgICAgIGl0LT5zdG9wKCk7CisgICAgZm9yIChhdXRvJiB0aW1l
ciA6IHRpbWVycy52YWx1ZXMoKSkKKyAgICAgICAgdGltZXItPnN0b3AoKTsKIH0KIAogLSAodm9p
ZClzdGFydFRpbWVycwpAQCAtNDEzLDEyICs0MTAsOSBAQCAtICh2b2lkKXN0YXJ0VGltZXJzCiAg
ICAgLy8gc2VuZCBudWxsIGV2ZW50cyBhdCBhIHJlZHVjZWQgcmF0ZS4KICAgICBfZXZlbnRIYW5k
bGVyLT5zdGFydFRpbWVycyhfaXNDb21wbGV0ZWx5T2JzY3VyZWQpOwogICAgIAotICAgIGlmICgh
dGltZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZm9yIChhdXRvJiBpdDogdGltZXJz
LT52YWx1ZXMoKSkgewotICAgICAgICBBU1NFUlQoIWl0LT5pc0FjdGl2ZSgpKTsKLSAgICAgICAg
aXQtPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CisgICAgZm9yIChhdXRvJiB0aW1lciA6
IHRpbWVycy52YWx1ZXMoKSkgeworICAgICAgICBBU1NFUlQoIXRpbWVyLT5pc0FjdGl2ZSgpKTsK
KyAgICAgICAgdGltZXItPnN0YXJ0KF9pc0NvbXBsZXRlbHlPYnNjdXJlZCk7CiAgICAgfSAgICAK
IH0KIApAQCAtMTY0NywxNCArMTY0MSwxMSBAQCAtICh1aW50MzJfdClzY2hlZHVsZVRpbWVyV2l0
aEludGVydmFsOih1aW50MzJfdClpbnRlcnZhbCByZXBlYXQ6KE5QQm9vbClyZXBlYXQgdAogICAg
IGlmICghdGltZXJGdW5jKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBpZiAoIXRpbWVy
cykKLSAgICAgICAgdGltZXJzID0gbWFrZVVuaXF1ZTxIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVu
aXF1ZV9wdHI8UGx1Z2luVGltZXI+Pj4oKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5U
aW1lcj4qIHNsb3QgPSBudWxscHRyOwogICAgIHVpbnQzMl90IHRpbWVySUQ7Ci0gICAgZG8KKyAg
ICBkbyB7CiAgICAgICAgIHRpbWVySUQgPSArK2N1cnJlbnRUaW1lcklEOwotICAgIHdoaWxlICgh
dGltZXJzLT5pc1ZhbGlkS2V5KHRpbWVySUQpIHx8ICooc2xvdCA9ICZ0aW1lcnMtPmFkZCh0aW1l
cklELCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUpKTsKKyAgICB9IHdoaWxlICghdGltZXJzLmlz
VmFsaWRLZXkodGltZXJJRCkgfHwgKihzbG90ID0gJnRpbWVycy5hZGQodGltZXJJRCwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlKSk7CiAKICAgICBhdXRvIHRpbWVyID0gbWFrZVVuaXF1ZTxQbHVn
aW5UaW1lcj4ocGx1Z2luLCB0aW1lcklELCBpbnRlcnZhbCwgcmVwZWF0LCB0aW1lckZ1bmMpOwog
CkBAIC0xNjY4LDEwICsxNjU5LDcgQEAgLSAodWludDMyX3Qpc2NoZWR1bGVUaW1lcldpdGhJbnRl
cnZhbDoodWludDMyX3QpaW50ZXJ2YWwgcmVwZWF0OihOUEJvb2wpcmVwZWF0IHQKIAogLSAodm9p
ZCl1bnNjaGVkdWxlVGltZXI6KHVpbnQzMl90KXRpbWVySUQKIHsKLSAgICBpZiAoIXRpbWVycykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHRpbWVycy0+cmVtb3ZlKHRpbWVySUQpOworICAg
IHRpbWVycy5yZW1vdmUodGltZXJJRCk7CiB9CiAKIC0gKE5QRXJyb3IpcG9wVXBDb250ZXh0TWVu
dTooTlBNZW51ICopbWVudQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCmluZGV4
IDY2OGI5MzI2MjBhOGUwZDEzNjhlZTdiMGQwZTNjMWIzMzAwNTMzYzUuLjJhNzEzYjlkYmY3MjJh
ZmY1ZTZhODNjYTY5M2MzZTMwZjZjZDgyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5oPgogCi1jbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0IDogcHVi
bGljIFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQgeworY2xhc3MgV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250
ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+
IGNyZWF0ZShXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiAgICAgewpAQCAtMzgsMTYgKzM4LDE1IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigp
OwogCiBwcml2YXRlOgotCiAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChXZWJDb3JlOjpG
cmFtZSogZnJhbWUpCiAgICAgICAgIDogV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dChm
cmFtZSkKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdF
bmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJp
bmcgc291cmNlQXBwbGljYXRpb25JZGVudGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uKiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgbG9jYWxGaWxl
Q29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFNjaGVkdWxl
UGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0IGZpbmFsOworICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QgZmlu
YWw7CisgICAgU3RyaW5nIHNvdXJjZUFwcGxpY2F0aW9uSWRlbnRpZmllcigpIGNvbnN0IGZpbmFs
OworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IGZpbmFsOworICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24oKSBjb25zdCBmaW5hbDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCAwYTA2ZWEzZjk3Njc3ZGY1MzE0ZGExMDcw
MDdmMmE1YjBkMDdmZmY3Li42YmEwYmJhYzRmMTIxODU0NTc1MzhhMDNlMjdmZDQxMGNkOTQ5YjMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTYyLDExICs2Miwx
MSBAQCBib29sIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmxvY2FsRmlsZUNvbnRlbnRTbmlm
ZmluZ0VuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBmcmFtZSgpICYmIGZyYW1lKCktPnNldHRp
bmdzKCkubG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpOwogfQogCi1TY2hlZHVsZVBh
aXJIYXNoU2V0KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzY2hlZHVsZWRSdW5Mb29wUGFp
cnMoKSBjb25zdAorY29uc3QgU2NoZWR1bGVQYWlySGFzaFNldCogV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QKIHsKICAgICBpZiAoIWZyYW1l
KCkgfHwgIWZyYW1lKCktPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIGZyYW1lKCktPnBhZ2UoKS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzKCk7CisgICAgcmV0dXJu
ICZmcmFtZSgpLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygpOwogfQogCiBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpzb3VyY2VBcHBsaWNhdGlv
bkF1ZGl0RGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQppbmRleCA2MWQ2ZjRlODY1OTRkY2FiN2U2MTc5MDcwNGI3MDllZjVjY2My
YmUwLi4zY2MzOTJiMDFiNGRlNDU2Y2YxZDcxZjQxZjkzZGUyMmZmNGQxOWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTE1MCw2ICsx
NTAsNyBAQAogI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+CiAjaW1wb3J0IDx3dGYvT2JqQ1J1bnRp
bWVFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CisjaW1wb3J0IDx3dGYvU29ydGVk
QXJyYXlNYXAuaD4KICNpbXBvcnQgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAjaW1wb3J0IDx3dGYv
V2Vha09iakNQdHIuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgpAQCAtMjY0
MiwzNyArMjY0MywyNiBAQCAtIChCT09MKWNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJ
Zk5lZWRlZDooU0VMKXNlbGVjdG9yCiAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rv
cl07CiB9CiAKLXR5cGVkZWYgSGFzaE1hcDxTRUwsIFN0cmluZz4gU2VsZWN0b3JOYW1lTWFwOwot
Ci0vLyBNYXAgc2VsZWN0b3JzIGludG8gRWRpdG9yIGNvbW1hbmQgbmFtZXMuCi0vLyBUaGlzIGlz
IG5vdCBuZWVkZWQgZm9yIGFueSBzZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMg
dGhlIEVkaXRvciBjb21tYW5kLgotc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogY3JlYXRl
U2VsZWN0b3JFeGNlcHRpb25NYXAoKQotewotICAgIFNlbGVjdG9yTmFtZU1hcCogbWFwID0gbmV3
IEhhc2hNYXA8U0VMLCBTdHJpbmc+OwotCi0gICAgbWFwLT5hZGQoQHNlbGVjdG9yKGluc2VydE5l
d2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOiksICJJbnNlcnROZXdsaW5lIik7Ci0gICAgbWFwLT5h
ZGQoQHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcjopLCAiSW5zZXJ0TmV3bGluZSIp
OwotICAgIG1hcC0+YWRkKEBzZWxlY3RvcihpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOiks
ICJJbnNlcnRUYWIiKTsKLSAgICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZURvd246KSwgIk1vdmVQ
YWdlRG93biIpOwotICAgIG1hcC0+YWRkKEBzZWxlY3RvcihwYWdlRG93bkFuZE1vZGlmeVNlbGVj
dGlvbjopLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIik7Ci0gICAgbWFwLT5hZGQo
QHNlbGVjdG9yKHBhZ2VVcDopLCAiTW92ZVBhZ2VVcCIpOwotICAgIG1hcC0+YWRkKEBzZWxlY3Rv
cihwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246KSwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rp
b24iKTsKLQotICAgIHJldHVybiBtYXA7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVG
b3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCiB7CisgICAgY29uc3QgY2hhciogc2VsZWN0b3JOYW1l
ID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOworCiAgICAgLy8gQ2hlY2sgdGhlIGV4Y2VwdGlvbiBt
YXAgZmlyc3QuCi0gICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogZXhjZXB0aW9uTWFw
ID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKLSAgICBTZWxlY3Rvck5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVjdG9yKTsKLSAgICBpZiAo
aXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxDb21wYXJhYmxlQVNDSUlMaXRlcmFsLCBBU0NJ
SUxpdGVyYWw+IGV4Y2VwdGlvbkFycmF5W10gPSB7CisgICAgICAgIHsgImluc2VydE5ld2xpbmVJ
Z25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnROZXdsaW5lIl9zIH0sCisgICAgICAgIHsgImlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcjoiLCAiSW5zZXJ0TmV3bGluZSJfcyB9LAorICAgICAgICB7
ICJpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOiIsICJJbnNlcnRUYWIiX3MgfSwKKyAgICAg
ICAgeyAicGFnZURvd246IiwgIk1vdmVQYWdlRG93biJfcyB9LAorICAgICAgICB7ICJwYWdlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbjoiLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIl9z
IH0sCisgICAgICAgIHsgInBhZ2VVcDoiLCAiTW92ZVBhZ2VVcCJfcyB9LAorICAgICAgICB7ICJw
YWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246IiwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24i
X3MgfSwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGVkQXJyYXlNYXAgZXhjZXB0
aW9uTWFwIHsgZXhjZXB0aW9uQXJyYXkgfTsKKyAgICBpZiAoYXV0byBjb21tYW5kTmFtZSA9IGV4
Y2VwdGlvbk1hcC50cnlHZXQoc2VsZWN0b3JOYW1lKSkKKyAgICAgICAgcmV0dXJuICpjb21tYW5k
TmFtZTsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCi0gICAgLy8gTm8gbmVl
ZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQgbmFt
ZXMgYXJlCi0gICAgLy8gbm90IGNhc2Ugc2Vuc2l0aXZlLgotICAgIGNvbnN0IGNoYXIqIHNlbGVj
dG9yTmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKyAgICAvLyBObyBuZWVkIHRvIGNhcGl0
YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3IgY29tbWFuZCBuYW1lcyBhcmUgbm90
IGNhc2Ugc2Vuc2l0aXZlLgogICAgIHNpemVfdCBzZWxlY3Rvck5hbWVMZW5ndGggPSBzdHJsZW4o
c2VsZWN0b3JOYW1lKTsKICAgICBpZiAoc2VsZWN0b3JOYW1lTGVuZ3RoIDwgMiB8fCBzZWxlY3Rv
ck5hbWVbc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMV0gIT0gJzonKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3RhdGlz
dGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAK
aW5kZXggOWM5NmE2N2U5ZDBjMWY5MDQ0MmYwYjQwYzQ0ODI2YjVjNTZiNWEzMy4uOTdkYTQ3YzBj
ODg3MzJkNTU4MTRlZTFjMTMyNWQwYjk4NTJiOGMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDEyICsxNDQsOSBAQCBIUkVTVUxU
IFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyhf
Q09NX091dHB0cl9vcHRfCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0
PiBqc09iamVjdFR5cGVOYW1lcyhjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cygpKTsKLSAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0
b3I7Ci0gICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhh
c2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3VudE1hcDsKLSAgICBmb3IgKEl0ZXJhdG9yIGN1cnJl
bnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVu
dCkKLSAgICAgICAgdHlwZUNvdW50TWFwLnNldChjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVl
KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVj
dFR5cGVDb3VudHMoKSkKKyAgICAgICAgdHlwZUNvdW50TWFwLmFkZChlbnRyeS5rZXksIGVudHJ5
LnZhbHVlKTsKIAogICAgIENPTVB0cjxJUHJvcGVydHlCYWcyPiByZXN1bHRzKEFkb3B0Q09NLCBD
T01Qcm9wZXJ0eUJhZzxpbnQ+OjpjcmVhdGVJbnN0YW5jZSh0eXBlQ291bnRNYXApKTsKICAgICBy
ZXN1bHRzLmNvcHlSZWZUbyh0eXBlTmFtZXNBbmRDb3VudHMpOwpAQCAtMTYyLDEyICsxNTksOSBA
QCBIUkVTVUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cyhf
Q09NX091dHB0cl9vcHRfIElQcm9wZXJ0eQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5
cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVD
b3VudHMoKSk7Ci0gICAgdHlwZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJh
dG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKICAgICBI
YXNoTWFwPFN0cmluZywgaW50PiB0eXBlQ291bnRNYXA7Ci0gICAgZm9yIChJdGVyYXRvciBjdXJy
ZW50ID0ganNPYmplY3RUeXBlTmFtZXMtPmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJl
bnQpCi0gICAgICAgIHR5cGVDb3VudE1hcC5zZXQoY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1
ZSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNvbW1vblZNKCkuaGVhcC5vYmplY3RUeXBlQ291
bnRzKCkpCisgICAgICAgIHR5cGVDb3VudE1hcC5hZGQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7
CiAKICAgICBDT01QdHI8SVByb3BlcnR5QmFnMj4gcmVzdWx0cyhBZG9wdENPTSwgQ09NUHJvcGVy
dHlCYWc8aW50Pjo6Y3JlYXRlSW5zdGFuY2UodHlwZUNvdW50TWFwKSk7CiAgICAgcmVzdWx0cy5j
b3B5UmVmVG8odHlwZU5hbWVzQW5kQ291bnRzKTsK
</data>
<flag name="commit-queue"
          id="450588"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>