<?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>205567</bug_id>
          
          <creation_ts>2019-12-23 15:08:54 -0800</creation_ts>
          <short_desc>Refactor to simplify broadcasting to all media elements</short_desc>
          <delta_ts>2019-12-27 09:59:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1601309</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-23 15:08:54 -0800</bug_when>
    <thetext>Refactor to simplify broadcasting to all media elements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601329</commentid>
    <comment_count>1</comment_count>
      <attachid>386364</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-23 16:00:20 -0800</bug_when>
    <thetext>Created attachment 386364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601355</commentid>
    <comment_count>2</comment_count>
      <attachid>386370</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-23 19:19:51 -0800</bug_when>
    <thetext>Created attachment 386370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601549</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-26 17:33:25 -0800</bug_when>
    <thetext>Tests all passing so just looking for a reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601575</commentid>
    <comment_count>4</comment_count>
      <attachid>386370</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-12-26 21:48:06 -0800</bug_when>
    <thetext>Comment on attachment 386370
Patch

Thisbis terrific, thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601627</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-27 09:58:07 -0800</bug_when>
    <thetext>Committed r253923: &lt;https://trac.webkit.org/changeset/253923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1601628</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-27 09:59:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/58218872&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386364</attachid>
            <date>2019-12-23 16:00:20 -0800</date>
            <delta_ts>2019-12-23 19:19:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205567-20191223160016.patch</filename>
            <type>text/plain</type>
            <size>139686</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM1YzJiN2ZkZjhiNmZk
YjcwZTNkMjNiZmIxODE1ZTA4ZGFiZDY5Mi4uODE3MDU5ZDJkYWNiNzcxMmE5NzA5NzNhMjJlZWI4
MjM2ZWRmYzYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMCBAQAorMjAxOS0xMi0yMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gc2ltcGxp
ZnkgYnJvYWRjYXN0aW5nIHRvIGFsbCBtZWRpYSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTY3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlciB0aW1lLCB3ZSBoYXZlIGFjY3VtdWxh
dGVkIG1hbnkgZGlmZmVyZW50IHNldHMgb2YgYWxsIHRoZSBtZWRpYSBlbGVtZW50cy4KKyAgICAg
ICAgV2l0aCB0aGUgZ29hbCBvZiBiZWluZyBhIGJpdCBhYnN0cmFjdCBhbmQgbm90IGJ1aWxkaW5n
IHRvbyBtdWNoIGJlaGF2aW9yIGludG8KKyAgICAgICAgdGhlIERvY3VtZW50IG9iamVjdCwgd2Ug
ZW5kZWQgdXAgd2l0aCB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5LCBhbmQgbWFueSBzZXRzCisgICAg
ICAgIG9mIGFsbCB0aGUgSFRNTE1lZGlhRWxlbWVudCBvYmplY3RzLiBUaGlzIGlzIGEgZmlyc3Qg
Y3V0IGF0IHJlZHVjaW5nIHRoYXQgY29tcGxleGl0eS4KKyAgICAgICAgQXQgdGhlIHNhbWUgdGlt
ZSwgdGhlIHJlZmFjdG9yaW5nIG1ha2VzIGFsbCB0aGUgaXRlcmF0aW9uIHVzZSBhIHNhZmUgYWxn
b3JpdGhtIHRoYXQKKyAgICAgICAgYnVpbGRzIGEgdmVjdG9yIG9mIFJlZjxIVE1MTWVkaWFFbGVt
ZW50Piwgc2FmZSBldmVuIGlmIHRoZSB3b3JrIGRvbmUgZm9yIGVhY2gKKyAgICAgICAgbWVkaWEg
ZWxlbWVudCBjYWxscyBvdXQgdG8gYXJiaXRyYXJ5IERPTSBvcGVyYXRpb25zLgorCisgICAgICAg
IFNlcGFyYXRlbHksIHRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBzb21lIG5hbWUgY2hhbmdlcyB0
aGF0IHN0aWxsIHNheSAiYXRvbWljIgorICAgICAgICBpbnN0ZWFkIG9mICJhdG9tIiBsZWZ0IG92
ZXIgZnJvbSBvdXIgcmVuYW1pbmcgb2YgQXRvbWljU3RyaW5nIHRvIEF0b21TdHJpbmcuCisKKyAg
ICAgICAgKiBIZWFkZXJzLmNtYWtlOiBSZW1vdmVkIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0
ZW5lci5oLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0
dG8uCisKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMgY29uc3QpOiBS
ZXdvcmRlZCBjb21tZW50IHRvCisgICAgICAgIHNheSAiYXRvbSIuCisKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRF
bGVtZW50c0J5TmFtZSk6IFVwZGF0ZWQgZm9yICJhdG9taWMiIC0+ICJhdG9tIi4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJhZGlvTm9kZUxpc3QpOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmlzaWJp
bGl0eVN0YXRlQ2hhbmdlZCk6IE1vdmVkIHRoZSBjb2RlIGZyb20KKyAgICAgICAgdGhlIG5vdGlm
eU1lZGlhQ2FwdHVyZU9mVmlzaWJpbGl0eUNoYW5nZWQgaW4gaGVyZS4gTm8gbmVlZCBmb3IgYSBz
ZXBhcmF0ZQorICAgICAgICBmdW5jdGlvbiBmb3IgdGhlIHR3byBsaW5lcyBvZiBjb2RlLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyTWVkaWFFbGVtZW50KTogQWRkZWQuIFJl
cGxhY2VzIHRoZSBtdWx0aXBsZSByZWdpc3RyYXRpb25zCisgICAgICAgIHRoYXQgZWFjaCBtZWRp
YSBlbGVtZW50IHdvdWxkIGRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0
ZXJNZWRpYUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb3JF
YWNoTWVkaWFFbGVtZW50KTogQWRkZWQuIFNhZmVseSBpdGVyYXRlcyB0aGUgbWVkaWEgZWxlbWVu
dHMKKyAgICAgICAgYW5kIGNhbGxzIGEgZnVuY3Rpb24gb24gZWFjaCBvZiB0aGVtLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6dW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0No
YW5nZWRDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVk
aWFWb2x1bWVDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQg
dG8gY2FsbAorICAgICAgICBwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSBvbiBlYWNoIG1l
ZGlhIGVsZW1lbnQgcmF0aGVyIHRoYW4ga2VlcGluZyBhIHNlcGFyYXRlIHJlZ2lzdHJ5LgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVD
aGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRDYWxsYmFja3MpOiBVcGRhdGVkIHRoZSB0eXBlCisgICAgICAgIHRvIGJlIEhU
TUxNZWRpYUVsZW1lbnQgcmF0aGVyIHRoYW4ganVzdCBFbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZEFuZFN0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVn
aXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZvclVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm90aWZ5TWVkaWFDYXB0dXJl
T2ZWaXNpYmlsaXR5Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVnaXN0ZXJGb3JNZWRpYVN0cmVhbVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFTdHJlYW1TdGF0
ZUNoYW5nZUNhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
bWVkaWFTdHJlYW1DYXB0dXJlU3RhdGVDaGFuZ2VkKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQg
dG8gY2FsbAorICAgICAgICBtZWRpYVN0cmVhbUNhcHR1cmVTdGFydGVkIG9uIGVhY2ggbWVkaWEg
ZWxlbWVudCByYXRoZXIgdGhhbiBrZWVwaW5nIGEgc2VwYXJhdGUgcmVnaXN0cnkuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6YWRkQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVBcHBsaWNhdGlvblN0
YXRlQ2hhbmdlTGlzdGVuZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmZvckVhY2hBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIpOiBEZWxldGVkLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6IENsZWFuIHVwIGZvcndhcmQgZGVjbGFyYXRpb25zIGEgYml0
LiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLAorICAgICAgICByZW1vdmluZyBtYW55IGZ1bmN0
aW9uIGFuZCBkYXRhIG1lbWJlcnMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZCBjb25zdCk6IFJlZmFjdG9yZWQgdG8gbWVyZ2UgaW4gdGhlIGxvZ2ljCisgICAgICAgIGZyb20g
dGhlIHNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBmdW5jdGlvbi4gVGhlIGNvbWJpbmVkIGZ1bmN0
aW9uIGlzIGJvdGggYSBiaXQgZWFzaWVyCisgICAgICAgIHRvIHVuZGVyc3RhbmQgYW5kIHNtYWxs
ZXIgdGhhbiB0aGUgdHdvIGZ1bmN0aW9ucyB3ZXJlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQu
aDogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGluY2x1ZGVzLiBSZW1vdmVkIFNwZWxsY2hlY2tBdHRy
aWJ1dGVTdGF0ZS4KKyAgICAgICAgTWFkZSBmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZCBwcml2
YXRlLiBSZW1vdmVkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlLAorICAgICAgICBwcml2YXRlQnJvd3Np
bmdTdGF0ZURpZENoYW5nZSwgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCwgYW5kIHNwZWxsY2hl
Y2tBdHRyaWJ1dGVTdGF0ZS4KKworICAgICAgICAqIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHA6
IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVu
TWFuYWdlcjo6d2lsbEVudGVyRnVsbHNjcmVlbik6IFVzZSBpczxIVE1MTWVkaWFFbGVtZW50PiBp
bnN0ZWFkIG9mCisgICAgICAgIGNhbGxpbmcgaXNNZWRpYUVsZW1lbnQgZGlyZWN0bHkuCisKKyAg
ICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2Rl
TGlzdDo6fk5hbWVOb2RlTGlzdCk6IFVwZGF0ZWQgZm9yICJhdG9taWMiIC0+ICJhdG9tIi4KKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6aW52YWxpZGF0ZUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Rz
Tm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXNGb3JBdHRyaWJ1dGUpOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Ob2RlUmFyZURhdGEuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gVXBkYXRl
ZCBmb3IgImF0b21pYyIgLT4gImF0b20iLgorICAgICAgICBNYWRlIGEgZmV3IGNvZGluZyBzdHls
ZSB0d2Vha3MuCisKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQgY29uc3QpOiBVcGRhdGVkIGZvciAiYXRvbWlj
IiAtPiAiYXRvbSIuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRUb0VsZW1lbnRTZXRNYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6YWRkRWxlbWVudFRvRG9jdW1lbnRNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6cmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudCk6IEFkZGVk
IGNhbGwgdG8gcmVnaXN0ZXJNZWRpYUVsZW1lbnQsCisgICAgICAgIHJlbW92ZWQgZWlnaHQgbm93
LW9ic29sZXRlIHJlZ2lzdHJhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Ojp1bnJlZ2lzdGVyV2l0aERvY3VtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSk6IEFkZGVkIGFuICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgYmVoYXZp
b3IsIHNpbmNlIHRoaXMgd2FzIG5vdCByZWdpc3RlcmVkIGZvciBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgICAgICBiZWZvcmUuIFRoaXMgc2hvdWxkIGJlIHJldmlzaXRlZCBiZWNhdXNlIGl0J3Mg
bm90IGNsZWFyIHRoaXMgcGxhdGZvcm0gZGlmZmVyZW5jZSBpcyBuZWVkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFHcm91
cCk6IENoYW5nZSB0byB1c2UgRG9jdW1lbnQ6OmZvckVhY2hNZWRpYUVsZW1lbnQKKyAgICAgICAg
c28gd2UgZG9uJ3QgbmVlZCB0byBrZWVwIG91ciBvd24gZ2xvYmFsIHNldCBvZiBtZWRpYSBlbGVt
ZW50cyBmb3IgZWFjaCBkb2N1bWVudC4gUmVxdWlyZWQKKyAgICAgICAgYSBsaXR0bGUgYml0IG9m
IGNvZGUgc3RydWN0dXJlIGNoYW5nZS4gQWRkZWQgYSBGSVhNRSBiZWNhdXNlIHRoZSBkZWNpc2lv
biBhYm91dCB3aGljaAorICAgICAgICBtZWRpYSBlbGVtZW50IGlzIHNlbGVjdGVkIGRlcGVuZHMg
b24gaGFzaCB0YWJsZSBvcmRlciBhcyBpdCBhbHdheXMgaGFzOyBzZWVtcyBpbmFwcHJvcHJpYXRl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFDb250cm9sc0Rl
cGVuZE9uUGFnZVNjYWxlRmFjdG9yKTogUmVtb3ZlZCB0aGUgY29kZQorICAgICAgICB0byByZWdp
c3Rlci91bnJlZ2lzdGVyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCk6IE9ubHkgZG8gdGhlIHdvcmsgaWYgaXQncyBuZWVkZWQ7Cisg
ICAgICAgIHRoaXMgcmVwbGljYXRlcyB0aGUgb2xkIGJlaGF2aW9yIHdoaWNoIHdhcyBhY2NvbXBs
aXNoZWQgYnkgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZy4KKworICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhRWxlbWVudC5oOiBSZW1vdmVkIHRoZSBvdmVycmlkZXMgZm9yIHZhcmlvdXMgdmlydHVh
bCBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgICBJbnN0ZWFkIHRoZXNlIGFyZSBub3cgcHVibGlj
IGZ1bmN0aW9ucy4gQWxzbyByZW1vdmVkIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci4K
KworICAgICAgICAqIGh0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbGFibGVFbGVtZW50OjpsYWJlbHMpOiBVcGRhdGVkIGZvciAiYXRvbWljIiAtPiAiYXRv
bSIuCisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgICogaHRt
bC9SYWRpb05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5S
YWRpb05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3Ry
dWN0VHJlZUZyb21IVE1MVG9rZW4pOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZWFk
ZXIpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3Rl
bmVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6cmVuZGVyVHJlZVNpemUgY29uc3QpOiBVc2UgZm9yRWFjaERvY3VtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1bm1hcmtBbGxUZXh0TWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZWRpdGFibGVFbGVtZW50c0luUmVjdCBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOiBUd2Vh
a2VkIHJhbmdlIGNoZWNrIHNvIGl0IHdpbGwgcmVqZWN0CisgICAgICAgIE5hTiB2YWx1ZXMuIFVz
ZSBmb3JFYWNoTWVkaWFFbGVtZW50IHRvIGNhbGwgbWVkaWFWb2x1bWVEaWRDaGFuZ2UsCisgICAg
ICAgIGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRQYWdlU2NhbGVGYWN0b3IpOiBSZWZhY3Rv
cmVkIHRvIGVsaW1pbmF0ZSBsYXJnZSBibG9ja3MKKyAgICAgICAgb2YgcmVwZWF0ZWQgY29kZS4g
VXNlIGZvckVhY2hNZWRpYUVsZW1lbnQgdG8gY2FsbCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkLAor
ICAgICAgICBlbGltaW5hdGluZyB0aGUgbmVlZCBmb3IgRG9jdW1lbnQ6OnBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRBbmRTdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQKKyAgICAgICAgdG8g
Y2FsbCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCwgZWxpbWluYXRpbmcgdGhl
IG5lZWQgZm9yCisgICAgICAgIERvY3VtZW50Ojp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Q2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVwZGF0ZU1lZGlhRWxlbWVudFJhdGVD
aGFuZ2VSZXN0cmljdGlvbnMpOiBVc2UKKyAgICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudCB0byBj
YWxsIHVwZGF0ZVJhdGVDaGFuZ2VSZXN0cmljdGlvbmFzLiBUaGUgb2xkIGNvZGUKKyAgICAgICAg
d291bGQgY2FsbCB0aGlzIG9uIGFsbCBtZWRpYSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCB3ZWIg
cHJvY2Vzcywgd2hpY2gKKyAgICAgICAgbWVhbnMgdGhlIGZ1bmN0aW9ucyB3b3VsZCBiZSBjYWxs
ZWQgbWFueSB0aW1lcyBmb3IgdGhlIHNhbWUgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnVwZGF0ZVJlbmRlcmluZyk6IFVzZSBmb3JFYWNoRG9jdW1lbnQgY29uc2lzdGVu
dGx5IGZvcgorICAgICAgICBhbGwgdGhlIGRvY3VtZW50IGl0ZXJhdGlvbi4gQmVmb3JlIGl0IHdh
cyB1c2VkIGZvciBoYWxmIHRoZSBmdW5jdGlvbiBhbmQgbm90CisgICAgICAgIHVzZWQgZm9yIHRo
ZSBvdGhlciBoYWxmOyBubyBvYnZpb3VzIHJlYXNvbiBmb3IgdGhlIGRpZmZlcmVjZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbnMpOiBVc2UgZm9yRWFj
aERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRp
b25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNU
aHJvdHRsaW5nUmVhc29uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFRpbWVyVGhyb3R0bGluZ1N0YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkbnNQcmVmZXRjaGluZ1N0YXRlQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFu
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRp
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TXV0ZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3BNZWRpYUNhcHR1cmUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnN0b3BBbGxNZWRpYVBsYXliYWNrKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpzdXNwZW5kQWxsTWVkaWFQbGF5YmFjayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c3VzcGVuZEFsbE1lZGlhQnVmZmVyaW5nKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbGxNZWRpYUJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6c2V0U1ZHQW5pbWF0aW9uc1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKTogVXNlIGZvckVhY2hEb2N1bWVudCB0
byBjYWxsCisgICAgICAgIHN1c3BlbmQvcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25V
cGRhdGVzLCBvYnZpYXRpbmcgdGhlIG5lZWQgZm9yCisgICAgICAgIFBhZ2U6OnN1c3BlbmQvcmVz
dW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzLiBVc2UKKyAgICAgICAgZm9yRWFj
aERvY3VtZW50IHRvIGNhbGwgcGF1c2UvdW5wYXVzZUFuaW1hdGlvbnMsIG9idmlhdGluZyB0aGUg
bmVlZCBmb3IKKyAgICAgICAgV2ViQ29yZTo6c2V0U1ZHQW5pbWF0aW9uc1N0YXRlLiBVc2UgZm9y
RWFjaERvY3VtZW50IHRvIGNhbGwKKyAgICAgICAgdmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCwgcmVt
b3ZpbmcgdGhlIG5lZWQgdG8gd3JpdGUgb3V0IGEgbG9vcCB0aGF0CisgICAgICAgIGdhdGhlcnMg
dGhlIGRvY3VtZW50cyBpbnRvIGEgdmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3Vz
cGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpyZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6Y2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZCk6IFVzZSBmb3JFYWNoRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRT
ZXNzaW9uSUQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFBsYXliYWNrVGFy
Z2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpwbGF5YmFja1RhcmdldEF2YWls
YWJpbGl0eURpZENoYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0U2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2spOiBVc2UKKyAg
ICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudCB0byBjYWxsIGFsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFja0NoYW5nZWQsCisgICAgICAgIG9idmlhdGluZyB0aGUgbmVlZCBmb3IgRG9jdW1l
bnQ6OmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpzZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpOiBVc2UgZm9yRWFjaERv
Y3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VXNlU3lzdGVtQXBwZWFyYW5jZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0RnVsbHNjcmVlbkluc2V0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldEZ1bGxzY3JlZW5Db250cm9s
c0hpZGRlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6Zm9yRWFjaERvY3VtZW50
KTogTWVyZ2VkIHRoZSBjb2xsZWN0RG9jdW1lbnRzIGZ1bmN0aW9uCisgICAgICAgIGluIHNpbmNl
IGl0J3Mgb25seSB1c2VkIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpjb2xsZWN0RG9j
dW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZvckVhY2hNZWRpYUVs
ZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFwcGxpY2F0aW9uV2lsbFJl
c2lnbkFjdGl2ZSk6IFVzZSBmb3JFYWNoTWVkaWFFbGVtZW50LAorICAgICAgICBlbGltaW5hdGlu
ZyB0aGUgbmVlZCBmb3IgZm9yRWFjaEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWNvbXB1dGVUZXh0QXV0b1NpemluZ0luQWxsRnJh
bWVzKTogVXNlIGZvckVhY2hEb2N1bWVudC4KKworICAgICAgICAqIHBhZ2UvUGFnZS5oOiBSZW1v
dmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLiBSZW1vdmVkIHVudXNlZAorICAgICAg
ICBGaW5kRGlyZWN0aW9uIGVudW0uIFR3ZWFrZWQgZm9ybWF0dGluZy4gVXNlIGJvb2wgaW5zdGVh
ZCBvZiB1aW50OF90IGFzCisgICAgICAgIHVuZGVybHlpbmcgdHlwZSBmb3IgZW51bSBjbGFzcyB3
aXRoIG9ubHkgdHdvIHZhbHVlcy4gVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92ZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKTogVXBkYXRlZCBmb3IgImF0b21pYyIgLT4gImF0b20i
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpkb21OYW1lIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OnVzZXNWaXN1YWxPcmRlcmluZyBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjphZGRUb1RleHRDb2RlY01hcCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6cHJ1bmVCbGFja2xpc3RlZENvZGVjcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6YWRkRW5jb2RpbmdOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphdG9tQ2Fub25p
Y2FsVGV4dEVuY29kaW5nTmFtZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuaDogRGl0dG8uCisKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmF0b21pY1N1YnN0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6dG9TdHJpbmdWaWV3KTogQWRkZWQuIExhdGVy
IGNvdWxkIG1ha2UgYSBTdHJpbmdCdWlsZGVyIG1lbWJlcgorICAgICAgICBmdW5jdGlvbiBpbnN0
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bklkOjpldmFsdWF0ZSBjb25zdCk6IFVz
ZSB0b1N0cmluZ1ZpZXcgYW5kIFN0cmluZ1ZpZXc6OnN1YnN0cmluZworICAgICAgICBpbnN0ZWFk
IG9mICJhdG9taWNTdWJzdHJpbmciLCBzaW5jZSBnZXRFbGVtZW50QnlJZCBjYW4gYmUgY2FsbGVk
IG9uIGEgU3RyaW5nVmlldworICAgICAgICBhbmQgdGhlcmUncyBubyBuZWVkIHRvIGFsbG9jYXRl
L2RlYWxsb2NhdGUgYW4gQXRvbVN0cmluZyBqdXN0IHRvIGNoZWNrIGlmIGl0IGV4aXN0cy4KKwog
MjAxOS0xMi0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS11bV1BFXSBTcGVjaWFsIGNvbWJpbmF0aW9uIGNoYXJhY3RlcnMgZG9lc24n
dCByZXNwZWN0IHRoZSBrZXlzdHJva2Ugb3JkZXIgd2hlbiBoaWdoIENQVSBsb2FkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDc3YzQ2ZDdmNGY5ZDhjNTgyNzkzZTg2ZDlhMDBjNzQ4NTUwYWQ4MDAuLjY3OTZhYTcxZDZk
ZDYwNzM2MDYxMDhiZTdmOWU3YTNkMDIyN2I2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTktMTItMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZmFjdG9yIHRvIHNpbXBsaWZ5IGJyb2FkY2FzdGluZyB0byBhbGwgbWVkaWEgZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSBjb25zdCk6
IFVzZSBpczxIVE1MTWVkaWFFbGVtZW50Pi4KKwogMjAxOS0xMi0yMyAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICB3YXRjaE9TIGJ1aWxkIGZpeCBhdHRlbXB0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggNDJiNzU3NmMxYTY1NWU0ZTYzMDBhYmE1
ODY2OWI5N2NiZTMyNmY2ZS4uYmUwZGI2MWQyOGNhZmI3MzIyN2JiYjE2OTk0MjY5Y2I1Mzk5ZjJl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTEy
LTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciB0
byBzaW1wbGlmeSBicm9hZGNhc3RpbmcgdG8gYWxsIG1lZGlhIGVsZW1lbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU1NjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFjY2Vzc2libGVCYXNlLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2libGVCYXNlOjpnZXRfYXR0cmlidXRlKTogVXBkYXRlZCBmb3Ig
ImF0b21pYyIgLT4gImF0b20iLgorCiAyMDE5LTEyLTIxICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBJbnNwZWN0ZWRUYXJnZXRUeXBl
cyBkaWFnbm9zdGljIGV2ZW50IGFuZCByZWxhdGVkIGhvb2tzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCA4YzdlNWM1OTQ3ZjBiNWM5NDM2NTk3NGUxZWNmZmJhZGUxOGEwYTcwLi40NTgzNjI1YmJlNmI4
YjI1MzM4NGU5ZjA2NjQwMzM3Zjg3NjdmMTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTc1MCw3
ICs3NTAsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGFn
ZS9BY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaAogICAgIHBhZ2UvQWRqdXN0Vmlld1NpemVP
ck5vdC5oCiAgICAgcGFnZS9BbHRlcm5hdGl2ZVRleHRDbGllbnQuaAotICAgIHBhZ2UvQXBwbGlj
YXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyLmgKICAgICBwYWdlL0F1dG9wbGF5RXZlbnQuaAogICAg
IHBhZ2UvQmFzZTY0VXRpbGl0aWVzLmgKICAgICBwYWdlL0NhY2hlU3RvcmFnZVByb3ZpZGVyLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA4ODk1NGU5OTA2ZjU4NjNjZWI0NTg3OGNhY2YxOWZhNjRkNDgxOTk0Li5iY2U2Y2QyOTZj
MDEwZjhlMDlhN2QxZmMzMDY4YzFlZjMwZmRjMDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTksNyArMjE5LDYgQEAKIAkJ
MDdFOUUxMzAxOEY2MkIzNzAwMTFBM0E0IC8qIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0U5RTEyRjE4RjYyQjM3MDAxMUEzQTQgLyogSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRl
QVZGLmNwcCAqLzsgfTsKIAkJMDdFRTc2RUMxQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwN0VFNzZFQTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0VF
NzZFRjFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RUU3NkVEMUJFQTYx
OTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oICovOyB9OwotCQkwN0Yw
NEE5NDIwMDZCMUUzMDBBRTJBMEEgLyogQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0YwNEE5MjIw
MDY4NEJDMDBBRTJBMEEgLyogQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdGNEU5MzMyMEIz
NTg3RjAwMkUzODAzIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0M4QUQxMjFEMDczRDYzMDA4N0M1Q0UgLyog
QVZBc3NldE1JTUVUeXBlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTA3Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4
MTc0NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTU2OSw3ICs1NTY4
LDYgQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZVZpZGVv
U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgw
MEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDdGMDRBOTIyMDA2ODRCQzAwQUUyQTBBIC8qIEFwcGxpY2F0aW9uU3RhdGVDaGFu
Z2VMaXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlv
blN0YXRlQ2hhbmdlTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdG
ODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURBMTg4MDdBN0QwMDI1NjY0
OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhRWxlbWVudFNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRTZXNzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU4Niw3ICsyMDU4NCw2IEBACiAJCQkJ
NzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5o
ICovLAogCQkJCUJDRjQ4Q0U2MTM3MEQxMTQwMDRFODdENiAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90
LmggKi8sCiAJCQkJQ0VEQTEyRDYxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENs
aWVudC5oICovLAotCQkJCTA3RjA0QTkyMjAwNjg0QkMwMEFFMkEwQSAvKiBBcHBsaWNhdGlvblN0
YXRlQ2hhbmdlTGlzdGVuZXIuaCAqLywKIAkJCQlDOUQ0NjcwNDFFNjBDM0VCMDA4MTk1RkIgLyog
QXV0b3BsYXlFdmVudC5oICovLAogCQkJCTQ1ODMwRDRCMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRv
c2Nyb2xsQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJNDU4MzBENEMxNjc5QjRGODAwQUNGOEMzIC8q
IEF1dG9zY3JvbGxDb250cm9sbGVyLmggKi8sCkBAIC0yOTAxOCw3ICsyOTAxNSw2IEBACiAJCQkJ
NjNCRDRBNUYxRjc3OEU5RjAwNDM4NzIyIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYzMTUyRDE5MUY5NTMxRUUwMDdBNUU0QiAvKiBBcHBsaWNhdGlvbk1hbmlm
ZXN0TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzU0RjRDOTFGN0FGQzk0MDBEODlERjMg
LyogQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDdGMDRB
OTQyMDA2QjFFMzAwQUUyQTBBIC8qIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOUI0MTcwNjQxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERDkwOTlFNjQ5MjAwNTZF
NTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJERDhGNjBE
OTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IGU1M2FjOGMxMGE4M2FiNDUyNGU3MTA0
ZWEyMzNjODVlYmFjMmViZGIuLjJkYjQxOGNjOWQwZWQ3NGVmZmUxMjgyNzc0YTU2MzFlOWM1ODZh
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBAIC01Miw3
ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVuc2lnbmVkIFN0eWxlU2hlZXRDb250ZW50
czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdAogewogICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHNpemUgb2YgdGhlIHN0cmluZ3MgaGFuZ2luZyBm
cm9tIHZhcmlvdXMgb2JqZWN0cy4gCi0gICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBuZWFy
bHkgYWxsIG9mIG9mIHRoZW0gYXJlIGF0b21pYyBhbmQgd291bGQgZXhpc3QgYW55d2F5LgorICAg
IC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgbmVhcmx5IGFsbCBvZiBvZiB0aGVtIGFyZSBhdG9t
cyB0aGF0IHdvdWxkIGV4aXN0IGFueXdheS4KICAgICB1bnNpZ25lZCBzaXplID0gc2l6ZW9mKCp0
aGlzKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgdGhlIGNoaWxkcmVuIG9mIG1lZGlh
IGFuZCByZWdpb24gcnVsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXgg
MWQxMjg2MWM4ODkyZjI0MTk2NjM1NTkwMjViZGJjYjZhNDI3ZTI1My4uNDkzYjNiYTkwZWZjODFj
YTA5MzRkYzc4YTFhN2FkMGU2MGFmZDE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmNwcApAQCAtODkxLDcgKzg5MSw3IEBAIFJlZjxIVE1MQ29sbGVjdGlvbj4gQ29udGFpbmVyTm9k
ZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBBdG9tU3RyaW5nJiBuYW1lCiAKIFJlZjxO
b2RlTGlzdD4gQ29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUoY29uc3QgU3RyaW5nJiBl
bGVtZW50TmFtZSkKIHsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlz
dHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPE5hbWVOb2RlTGlzdD4oKnRoaXMsIGVsZW1lbnRO
YW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRD
YWNoZVdpdGhBdG9tTmFtZTxOYW1lTm9kZUxpc3Q+KCp0aGlzLCBlbGVtZW50TmFtZSk7CiB9CiAK
IFJlZjxIVE1MQ29sbGVjdGlvbj4gQ29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBjbGFzc05hbWVzKQpAQCAtOTAyLDcgKzkwMiw3IEBAIFJlZjxI
VE1MQ29sbGVjdGlvbj4gQ29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25z
dCBBdG9tU3RyaW5nJiBjbGFzCiBSZWY8UmFkaW9Ob2RlTGlzdD4gQ29udGFpbmVyTm9kZTo6cmFk
aW9Ob2RlTGlzdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybVRhZykgfHwgaGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0
VGFnKSk7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRk
Q2FjaGVXaXRoQXRvbWljTmFtZTxSYWRpb05vZGVMaXN0PigqdGhpcywgbmFtZSk7CisgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbU5h
bWU8UmFkaW9Ob2RlTGlzdD4oKnRoaXMsIG5hbWUpOwogfQogCiBSZWY8SFRNTENvbGxlY3Rpb24+
IENvbnRhaW5lck5vZGU6OmNoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDM0
MTZkNTg3M2IzMzc5YzIyZjEwY2IxZWZiNDY4MmMyNTNkMDljNzAuLjA2MmY0YWRlMmI1MWUzMDNj
ODNjMmYyYjZhYTRjOGZkZjNhZTI1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjks
NyArMjksNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAi
Q0RBVEFTZWN0aW9uLmgiCkBAIC0xNzI2LDcgKzE3MjUsMTAgQEAgdm9pZCBEb2N1bWVudDo6dmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX3Zpc2liaWxp
dHlTdGF0ZUNhbGxiYWNrQ2xpZW50cykKICAgICAgICAgY2xpZW50LT52aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCk7CiAKLSAgICBub3RpZnlNZWRpYUNhcHR1cmVPZlZpc2liaWxpdHlDaGFuZ2VkKCk7
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoYXV0byogcGFnZSA9IHRoaXMtPnBh
Z2UoKSkKKyAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc2V0
Q2FwdHVyZVBhZ2VTdGF0ZShoaWRkZW4oKSwgcGFnZS0+aXNNZWRpYUNhcHR1cmVNdXRlZCgpKTsK
KyNlbmRpZgogfQogCiBWaXNpYmlsaXR5U3RhdGUgRG9jdW1lbnQ6OnZpc2liaWxpdHlTdGF0ZSgp
IGNvbnN0CkBAIC0xNzQ3LDIwICsxNzQ5LDIzIEBAIGJvb2wgRG9jdW1lbnQ6OmhpZGRlbigpIGNv
bnN0CiAKICNpZiBFTkFCTEUoVklERU8pCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQWxs
b3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFF
bGVtZW50JiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJNZWRpYUVsZW1lbnQoSFRN
TE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CisgICAgbV9tZWRpYUVsZW1lbnRzLmFk
ZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JBbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQm
IGVsZW1lbnQpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyTWVkaWFFbGVtZW50KEhUTUxNZWRp
YUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2tFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOworICAgIG1fbWVkaWFFbGVtZW50cy5yZW1v
dmUoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50OjphbGxvd3NNZWRpYURvY3VtZW50SW5s
aW5lUGxheWJhY2tDaGFuZ2VkKCkKK3ZvaWQgRG9jdW1lbnQ6OmZvckVhY2hNZWRpYUVsZW1lbnQo
Y29uc3QgRnVuY3Rpb248dm9pZChIVE1MTWVkaWFFbGVtZW50Jik+JiBmdW5jdGlvbikKIHsKLSAg
ICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFj
a0VsZW1lbnRzKQotICAgICAgICBlbGVtZW50LT5hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2tDaGFuZ2VkKCk7CisgICAgVmVjdG9yPFJlZjxIVE1MTWVkaWFFbGVtZW50Pj4gZWxlbWVu
dHM7CisgICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKQorICAgICAgICBl
bGVtZW50cy5hcHBlbmQoKmVsZW1lbnQpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1l
bnRzKQorICAgICAgICBmdW5jdGlvbihlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3Rv
cEFsbE1lZGlhUGxheWJhY2soKQpAQCAtMTc5Miw2ICsxNzk3LDcgQEAgdm9pZCBEb2N1bWVudDo6
cmVzdW1lQWxsTWVkaWFCdWZmZXJpbmcoKQogICAgIGlmIChhdXRvKiBwbGF0Zm9ybU1lZGlhU2Vz
c2lvbk1hbmFnZXIgPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXJJ
ZkV4aXN0cygpKQogICAgICAgICBwbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXItPnJlc3VtZUFs
bE1lZGlhQnVmZmVyaW5nRm9yRG9jdW1lbnQoKnRoaXMpOwogfQorCiAjZW5kaWYKIAogU3RyaW5n
IERvY3VtZW50Ojpub2RlTmFtZSgpIGNvbnN0CkBAIC0zNzA2LDcgKzM3MTIsNyBAQCB2b2lkIERv
Y3VtZW50Ojpwcm9jZXNzQ29sb3JTY2hlbWUoY29uc3QgU3RyaW5nJiBjb2xvclNjaGVtZVN0cmlu
ZykKICAgICBib29sIGFsbG93c1RyYW5zZm9ybWF0aW9ucyA9IHRydWU7CiAgICAgYm9vbCBhdXRv
RW5jb3VudGVyZWQgPSBmYWxzZTsKIAotICAgIHByb2Nlc3NDb2xvclNjaGVtZVN0cmluZyhjb2xv
clNjaGVtZVN0cmluZywgWyZdKFN0cmluZ1ZpZXcga2V5KSB7CisgICAgcHJvY2Vzc0NvbG9yU2No
ZW1lU3RyaW5nKGNvbG9yU2NoZW1lU3RyaW5nLCBbJl0gKFN0cmluZ1ZpZXcga2V5KSB7CiAgICAg
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJhdXRvIikpIHsKICAg
ICAgICAgICAgIGNvbG9yU2NoZW1lID0geyB9OwogICAgICAgICAgICAgYWxsb3dzVHJhbnNmb3Jt
YXRpb25zID0gdHJ1ZTsKQEAgLTUzNjAsMjIgKzUzNjYsNiBAQCB2b2lkIERvY3VtZW50Ojp1bnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiAg
ICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkgCi17Ci0gICAgZm9y
IChhdXRvKiBlbGVtZW50IDogbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMpCi0gICAgICAg
IGVsZW1lbnQtPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBt
X21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwotfQotCi12b2lkIERv
Y3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVu
dCkKLXsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQp
OwotfQotCiBib29sIERvY3VtZW50OjphdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgp
IGNvbnN0CiB7CiAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSB0aGlzLT5sb2FkZXIo
KSkgewpAQCAtNTQyMiwyMyArNTQxMiwxNiBAQCB2b2lkIERvY3VtZW50Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZURpZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgaWYgKG1fbG9n
Z2VyKQogICAgICAgICBtX2xvZ2dlci0+c2V0RW5hYmxlZCh0aGlzLCBzZXNzaW9uSUQuaXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCkpOwogCi0gICAgZm9yIChhdXRvKiBlbGVtZW50IDogbV9wcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cykKLSAgICAgICAgZWxlbWVudC0+cHJpdmF0
ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uoc2Vzc2lvbklEKTsKLX0KLQotdm9pZCBEb2N1bWVudDo6
cmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYg
ZWxlbWVudCkKLXsKLSAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFk
ZCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX3By
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CisjaWYg
RU5BQkxFKFZJREVPKQorICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW3Nlc3Npb25JRF0gKEhUTUxN
ZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAgICAgZWxlbWVudC5wcml2YXRlQnJvd3NpbmdT
dGF0ZURpZENoYW5nZShzZXNzaW9uSUQpOworICAgIH0pOworI2VuZGlmCiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6
cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91
cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNl
Q2hhbmdlcygpOwpAQCAtNTQ0Niw3ICs1NDI5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiAg
ICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JD
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKCZl
bGVtZW50KTsKIH0KQEAgLTU0NTksNDIgKzU0NDIsNiBAQCB2b2lkIERvY3VtZW50OjpjYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkKCkKIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQotCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX3BhZ2VT
Y2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwotfQotCi12b2lkIERvY3Vt
ZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVk
aWFFbGVtZW50JiBlbGVtZW50KQotewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1l
bnRzLnJlbW92ZSgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRBbmRTdGFibGUoKQotewotICAgIGZvciAoSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50IDogbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMpCi0gICAgICAgIG1lZGlh
RWxlbWVudC0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotfQotCi12b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKEhU
TUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV91c2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6
OnVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNr
cyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQotewotICAgIG1fdXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbkNoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwotfQotCi12b2lkIERv
Y3VtZW50Ojp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpCi17Ci0gICAgZm9y
IChhdXRvKiBtZWRpYUVsZW1lbnQgOiBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFu
Z2VkRWxlbWVudHMpCi0gICAgICAgIG1lZGlhRWxlbWVudC0+dXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbkNoYW5nZWQoKTsKLX0KLQotI2VuZGlmCi0KIHZvaWQgRG9jdW1lbnQ6OnNldFNob3Vs
ZENyZWF0ZVJlbmRlcmVycyhib29sIGYpCiB7CiAgICAgbV9jcmVhdGVSZW5kZXJlcnMgPSBmOwpA
QCAtNzM1Niw2ICs3MzAzLDcgQEAgdm9pZCBEb2N1bWVudDo6cGxheWJhY2tUYXJnZXRQaWNrZXJX
YXNEaXNtaXNzZWQodWludDY0X3QgY2xpZW50SWQpCiAKICAgICBpdC0+dmFsdWUtPnBsYXliYWNr
VGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKCk7CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQogCiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCkBAIC03Mzg2
LDYgKzczMzQsNyBAQCBib29sIERvY3VtZW50OjpzaG91bGRFbmZvcmNlSFRUUDA5U2FuZGJveCgp
IGNvbnN0CiB9CiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKKwogYm9vbCBEb2N1bWVudDo6c2hvdWxk
RW5mb3JjZVF1aWNrTG9va1NhbmRib3goKSBjb25zdAogewogICAgIGlmIChtX2lzU3ludGhlc2l6
ZWQgfHwgIW1fZnJhbWUpCkBAIC03NDE1LDYgKzczNjQsNyBAQCB2b2lkIERvY3VtZW50OjphcHBs
eVF1aWNrTG9va1NhbmRib3goKQogCiAgICAgc2V0UmVmZXJyZXJQb2xpY3koUmVmZXJyZXJQb2xp
Y3k6Ok5vUmVmZXJyZXIpOwogfQorCiAjZW5kaWYKIAogYm9vbCBEb2N1bWVudDo6c2hvdWxkRW5m
b3JjZUNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KCkgY29uc3QKQEAgLTc0NjEs
NiArNzQxMSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNjaGVkdWxlVGltZWRSZW5kZXJpbmdVcGRhdGUo
KQogfQogCiAjaWYgRU5BQkxFKElOVEVSU0VDVElPTl9PQlNFUlZFUikKKwogdm9pZCBEb2N1bWVu
dDo6YWRkSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoSW50ZXJzZWN0aW9uT2JzZXJ2ZXImIG9ic2VydmVy
KQogewogICAgIEFTU0VSVChtX2ludGVyc2VjdGlvbk9ic2VydmVycy5maW5kKCZvYnNlcnZlcikg
PT0gbm90Rm91bmQpOwpAQCAtNzY5MCw5ICs3NjQxLDExIEBAIHZvaWQgRG9jdW1lbnQ6OnNjaGVk
dWxlSW5pdGlhbEludGVyc2VjdGlvbk9ic2VydmF0aW9uVXBkYXRlKCkKICAgICBlbHNlIGlmICgh
bV9pbnRlcnNlY3Rpb25PYnNlcnZlcnNJbml0aWFsVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKICAg
ICAgICAgbV9pbnRlcnNlY3Rpb25PYnNlcnZlcnNJbml0aWFsVXBkYXRlVGltZXIuc3RhcnRPbmVT
aG90KGludGVyc2VjdGlvbk9ic2VydmVyc0luaXRpYWxVcGRhdGVEZWxheSk7CiB9CisKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFJFU0laRV9PQlNFUlZFUikKKwogdm9pZCBEb2N1bWVudDo6YWRkUmVz
aXplT2JzZXJ2ZXIoUmVzaXplT2JzZXJ2ZXImIG9ic2VydmVyKQogewogICAgIGlmICghbV9yZXNp
emVPYnNlcnZlcnMuY29udGFpbnMoJm9ic2VydmVyKSkKQEAgLTc3NzIsNiArNzcyNSw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZVJlc2l6ZU9ic2VydmF0aW9ucyhQYWdlJiBwYWdlKQogICAgICAg
ICBzY2hlZHVsZVRpbWVkUmVuZGVyaW5nVXBkYXRlKCk7CiAgICAgfQogfQorCiAjZW5kaWYKIAog
Y29uc3QgQXRvbVN0cmluZyYgRG9jdW1lbnQ6OmRpcigpIGNvbnN0CkBAIC03ODE0LDM5ICs3NzY4
LDIxIEBAIHZvaWQgRG9jdW1lbnQ6Om9yaWVudGF0aW9uQ2hhbmdlZChpbnQgb3JpZW50YXRpb24p
CiAgICAgbV9vcmllbnRhdGlvbk5vdGlmaWVyLm9yaWVudGF0aW9uQ2hhbmdlZChvcmllbnRhdGlv
bik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6Om5vdGlmeU1lZGlhQ2FwdHVyZU9mVmlzaWJpbGl0eUNo
YW5nZWQoKQotewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKCFwYWdlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRv
bigpLnNldENhcHR1cmVQYWdlU3RhdGUoaGlkZGVuKCksIHBhZ2UoKS0+aXNNZWRpYUNhcHR1cmVN
dXRlZCgpKTsKLSNlbmRpZgotfQogCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIHZvaWQgRG9j
dW1lbnQ6OnN0b3BNZWRpYUNhcHR1cmUoKQogewogICAgIE1lZGlhU3RyZWFtVHJhY2s6OmVuZENh
cHR1cmUoKnRoaXMpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhU3RyZWFt
U3RhdGVDaGFuZ2VDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBt
X21lZGlhU3RyZWFtU3RhdGVDaGFuZ2VFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwotfQotCi12b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcyhI
VE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQotewotICAgIG1fbWVkaWFTdHJlYW1TdGF0ZUNoYW5n
ZUVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7Ci19Ci0KIHZvaWQgRG9jdW1lbnQ6Om1lZGlhU3Ry
ZWFtQ2FwdHVyZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFNZWRpYVByb2R1Y2VyOjppc0Nh
cHR1cmluZyhtX21lZGlhU3RhdGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8q
IG1lZGlhRWxlbWVudCA6IG1fbWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUVsZW1lbnRzKQotICAgICAg
ICBtZWRpYUVsZW1lbnQtPm1lZGlhU3RyZWFtQ2FwdHVyZVN0YXJ0ZWQoKTsKKyAgICBmb3JFYWNo
TWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGVs
ZW1lbnQubWVkaWFTdHJlYW1DYXB0dXJlU3RhcnRlZCgpOworICAgIH0pOwogfQogCiB2b2lkIERv
Y3VtZW50OjpzZXREZXZpY2VJREhhc2hTYWx0KGNvbnN0IFN0cmluZyYgc2FsdCkKQEAgLTc4NTcs
MjIgKzc3OTMsNiBAQCB2b2lkIERvY3VtZW50OjpzZXREZXZpY2VJREhhc2hTYWx0KGNvbnN0IFN0
cmluZyYgc2FsdCkKIAogI2VuZGlmCiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEFwcGxpY2F0aW9uU3Rh
dGVDaGFuZ2VMaXN0ZW5lcihBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImIGxpc3RlbmVy
KQotewotICAgIG1fYXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVycy5hZGQoJmxpc3RlbmVy
KTsKLX0KLQotdm9pZCBEb2N1bWVudDo6cmVtb3ZlQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3Rl
bmVyKEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lciYgbGlzdGVuZXIpCi17Ci0gICAgbV9h
cHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwotfQotCi12
b2lkIERvY3VtZW50Ojpmb3JFYWNoQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyJik+JiBmdW5jdG9y
KQotewotICAgIGZvciAoYXV0byogbGlzdGVuZXIgOiBtX2FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VM
aXN0ZW5lcnMpCi0gICAgICAgIGZ1bmN0b3IoKmxpc3RlbmVyKTsKLX0KLQogY29uc3QgQXRvbVN0
cmluZyYgRG9jdW1lbnQ6OmJnQ29sb3IoKSBjb25zdAogewogICAgIGF1dG8qIGJvZHlFbGVtZW50
ID0gYm9keSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4OTJiM2I2NGM3NWViMWQ1YjA5MTk4
NTVmMzk5YzBlMzVlNmI4OTU2Li5jZDY1YTUwMjZjZWY4ODIzMjg3OGVjNjQzOWE3NzgyNjIwNzA4
NWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtODcsOCArODcsNiBAQCBjbGFzcyBJbnB1dEN1
cnNvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFdmVudExvb3A7Ci1jbGFzcyBB
cHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXI7CiBjbGFzcyBBWE9iamVjdENhY2hlOwogY2xh
c3MgQXR0cjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKQEAgLTEyMCw2ICsxMTgsNyBAQCBjbGFzcyBE
b2N1bWVudFNoYXJlZE9iamVjdFBvb2w7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOwogY2xhc3Mg
RG9jdW1lbnRUeXBlOwogY2xhc3MgRWRpdGluZ0JlaGF2aW9yOworY2xhc3MgRXZlbnRMb29wOwog
Y2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXh0ZW5zaW9uU3R5bGVTaGVldHM7CiBj
bGFzcyBGbG9hdFF1YWQ7CkBAIC0yMTcsOSArMjE2LDkgQEAgY2xhc3MgWFBhdGhSZXN1bHQ7CiB0
ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRXhjZXB0aW9uT3I7CiAKIGVudW0gQ29sbGVjdGlvblR5
cGU7Ci1lbnVtIGNsYXNzIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgOiB1aW50OF90Owog
CiBlbnVtIGNsYXNzIFJvdXRlU2hhcmluZ1BvbGljeSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgOiB1aW50OF90OwogCiB1c2luZyBQbGF0Zm9ybURp
c3BsYXlJRCA9IHVpbnQzMl90OwogCkBAIC0yMjcsMTggKzIyNiwxNCBAQCB1c2luZyBQbGF0Zm9y
bURpc3BsYXlJRCA9IHVpbnQzMl90OwogY2xhc3MgVHJhbnNmb3JtU291cmNlOwogI2VuZGlmCiAK
LSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSB8fCBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLWNs
YXNzIFRvdWNoOwotY2xhc3MgVG91Y2hMaXN0OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREVWSUNF
X09SSUVOVEFUSU9OKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGNsYXNzIERldmljZU1vdGlv
bkNsaWVudDsKIGNsYXNzIERldmljZU1vdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBEZXZpY2VPcmll
bnRhdGlvbkNsaWVudDsKIGNsYXNzIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjsKICNlbmRp
ZgorCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKIGNsYXNzIERldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsKICNlbmRpZgogCkBAIC0xMDczLDggKzEwNjgs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
Q2FsbGJhY2tzKCk7CiAgICAgdm9pZCByZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJD
YWxsYmFja3MoKTsKIAotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRFdmVudHMoRE9N
SGlnaFJlc1RpbWVTdGFtcCB0aW1lc3RhbXApOwotICAgIHZvaWQgc2VydmljZVJlcXVlc3RBbmlt
YXRpb25GcmFtZUNhbGxiYWNrcyhET01IaWdoUmVzVGltZVN0YW1wIHRpbWVzdGFtcCk7CisgICAg
dm9pZCB1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyhET01IaWdoUmVzVGltZVN0YW1wKTsK
KyAgICB2b2lkIHNlcnZpY2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3MoRE9NSGlnaFJl
c1RpbWVTdGFtcCk7CiAKICAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURp
c3BsYXlJRCk7CiAKQEAgLTEwOTIsOSArMTA4Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1c3Bl
bmQoUmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAgdm9pZCByZXN1bWUoUmVhc29uRm9yU3VzcGVu
c2lvbik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVu
dCYpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQm
KTsKLSAgICB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CisgICAgdm9pZCByZWdpc3Rlck1l
ZGlhRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyTWVkaWFF
bGVtZW50KEhUTUxNZWRpYUVsZW1lbnQmKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1JlcXVp
cmVzVXNlckdlc3R1cmUoKSBjb25zdDsKICAgICBib29sIHZpZGVvUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKCkgY29uc3Q7CkBAIC0xMTA0LDM0ICsxMDk4LDIwIEBAIHB1YmxpYzoKICAgICBN
ZWRpYVNlc3Npb24mIGRlZmF1bHRNZWRpYVNlc3Npb24oKTsKICNlbmRpZgogCi0gICAgdm9pZCBy
ZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKEVsZW1lbnQmKTsKLSAgICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7
CiAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShQQUw6OlNlc3Npb25JRCk7
CiAKKyAgICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi0gICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgcmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQo
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICB2b2lk
IHJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVt
ZW50Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxi
YWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7Ci0gICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
QW5kU3RhYmxlKCk7Ci0gICAgdm9pZCByZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKLSAgICB2b2lkIHVucmVn
aXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50Jik7Ci0gICAgdm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hh
bmdlZCgpOwotI2VuZGlmCi0KICAgICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Jik7CiAgICAgdm9pZCB1bnJlZ2lz
dGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xp
ZW50Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCByZWdpc3RlckZvckFsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVu
dCYpOwotICAgIHZvaWQgdW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFja0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZvaWQgYWxsb3dz
TWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZCgpOwotCiAgICAgdm9pZCBzdG9wQWxs
TWVkaWFQbGF5YmFjaygpOwogICAgIHZvaWQgc3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKTsKICAg
ICB2b2lkIHJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsKQEAgLTEyMDIsMTUgKzExODIsMTUgQEAg
cHVibGljOgogI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9Eb2N1bWVudElPUy5oPgogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBEZXZpY2VNb3Rpb25Db250cm9sbGVyJiBkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkg
Y29uc3Q7CiAgICAgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRGV2
aWNlT3JpZW50YXRpb25DaGFuZ2UoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdh
bW1hKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcigpOwotI2VuZGlmIC8vIEVOQUJMRShERVZJQ0VfT1JJ
RU5UQVRJT04pCisjZW5kaWYKIAogICAgIGNvbnN0IERvY3VtZW50VGltaW5nJiB0aW1pbmcoKSBj
b25zdCB7IHJldHVybiBtX2RvY3VtZW50VGltaW5nOyB9CiAKQEAgLTE0MjcsOCArMTQwNyw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldERldmljZUlESGFzaFNhbHQoY29uc3QgU3RyaW5nJik7CiAg
ICAgU3RyaW5nIGRldmljZUlESGFzaFNhbHQoKSBjb25zdCB7IHJldHVybiBtX2lkSGFzaFNhbHQ7
IH0KICAgICB2b2lkIHN0b3BNZWRpYUNhcHR1cmUoKTsKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTWVk
aWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yTWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcyhIVE1MTWVkaWFF
bGVtZW50Jik7CiAgICAgdm9pZCBtZWRpYVN0cmVhbUNhcHR1cmVTdGF0ZUNoYW5nZWQoKTsKICNl
bmRpZgogCkBAIC0xNTA1LDkgKzE0ODMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTZXJ2aWNl
V29ya2VyQ29ubmVjdGlvbihTV0NsaWVudENvbm5lY3Rpb24qKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBhZGRBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoQXBwbGljYXRpb25TdGF0ZUNoYW5n
ZUxpc3RlbmVyJik7Ci0gICAgdm9pZCByZW1vdmVBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVu
ZXIoQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyJik7Ci0gICAgdm9pZCBmb3JFYWNoQXBw
bGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKGNvbnN0IEZ1bmN0aW9uPHZvaWQoQXBwbGljYXRp
b25TdGF0ZUNoYW5nZUxpc3RlbmVyJik+Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQg
Zm9yRWFjaE1lZGlhRWxlbWVudChjb25zdCBGdW5jdGlvbjx2b2lkKEhUTUxNZWRpYUVsZW1lbnQm
KT4mKTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgYm9vbCBo
YW5kbGluZ1RvdWNoRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsaW5nVG91Y2hFdmVudDsg
fQpAQCAtMTY3NCw2ICsxNjUyLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNCb2R5UG90ZW50
aWFsbHlTY3JvbGxhYmxlKEhUTUxCb2R5RWxlbWVudCYpOwogCisgICAgdm9pZCBkaWRMb2dNZXNz
YWdlKGNvbnN0IFdURkxvZ0NoYW5uZWwmLCBXVEZMb2dMZXZlbCwgVmVjdG9yPEpTT05Mb2dWYWx1
ZT4mJikgZmluYWw7CisKICAgICBjb25zdCBSZWY8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAKICAg
ICBVbmlxdWVSZWY8UXVpcmtzPiBtX3F1aXJrczsKQEAgLTE3OTUsMjQgKzE3NzUsMTkgQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj4gbV9j
c3NDYW52YXNFbGVtZW50czsKIAogICAgIEhhc2hTZXQ8RWxlbWVudCo+IG1fZG9jdW1lbnRTdXNw
ZW5zaW9uQ2FsbGJhY2tFbGVtZW50czsKLSAgICBIYXNoU2V0PEVsZW1lbnQqPiBtX21lZGlhVm9s
dW1lQ2FsbGJhY2tFbGVtZW50czsKLSAgICBIYXNoU2V0PEVsZW1lbnQqPiBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzOworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIEhhc2hT
ZXQ8SFRNTE1lZGlhRWxlbWVudCo+IG1fbWVkaWFFbGVtZW50czsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQotICAgIEhhc2hTZXQ8RWxlbWVudCo+IG1fY2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZEVsZW1lbnRzOworICAgIEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVudCo+IG1fY2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzOwogI2VuZGlmCiAKICAgICBFbGVtZW50KiBt
X21haW5BcnRpY2xlRWxlbWVudCB7IG51bGxwdHIgfTsKICAgICBIYXNoU2V0PEVsZW1lbnQqPiBt
X2FydGljbGVFbGVtZW50czsKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0g
ICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkRWxl
bWVudHM7Ci0gICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gbV91c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uQ2hhbmdlZEVsZW1lbnRzOwotI2VuZGlmCi0KICAgICBIYXNoU2V0PFZpc2li
aWxpdHlDaGFuZ2VDbGllbnQqPiBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xpZW50czsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gbV9hbGxvd3NN
ZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tFbGVtZW50czsKLSNlbmRpZgogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBFbGVtZW50KiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPj4gbV9hY2Nlc3NLZXlDYWNoZTsKIApAQCAtMTg2OCwxNyArMTg0MywxNCBAQCBwcml2YXRl
OgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElkbGVDYWxsYmFja0NvbnRyb2xsZXI+IG1faWRsZUNh
bGxiYWNrQ29udHJvbGxlcjsKIAotICAgIHZvaWQgbm90aWZ5TWVkaWFDYXB0dXJlT2ZWaXNpYmls
aXR5Q2hhbmdlZCgpOwotCi0gICAgdm9pZCBkaWRMb2dNZXNzYWdlKGNvbnN0IFdURkxvZ0NoYW5u
ZWwmLCBXVEZMb2dMZXZlbCwgVmVjdG9yPEpTT05Mb2dWYWx1ZT4mJikgZmluYWw7Ci0KLSNpZiBF
TkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RGV2aWNlTW90aW9uQ2xpZW50PiBtX2RldmljZU1vdGlvbkNsaWVudDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGV2aWNlTW90aW9uQ29udHJvbGxlcj4gbV9kZXZpY2VNb3Rp
b25Db250cm9sbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dD4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyPiBtX2RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjsKICNl
bmRpZgorCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyPiBtX2RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlcjsKICNlbmRpZgogCkBAIC0yMDY5LDgg
KzIwNDEsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTV0NsaWVudENvbm5lY3Rpb24+IG1fc2Vy
dmljZVdvcmtlckNvbm5lY3Rpb247CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8QXBwbGljYXRpb25T
dGF0ZUNoYW5nZUxpc3RlbmVyKj4gbV9hcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXJzOwot
ICAgIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgUmVnaXN0cmFi
bGVEb21haW4gbV9yZWdpc3RyYWJsZURvbWFpblJlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VB
Y2Nlc3NXaXRoVXNlckludGVyYWN0aW9uIHsgfTsKICAgICBTdHJpbmcgbV9yZWZlcnJlck92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDM3OTYyMDRkZjJiNjM3NGZjNmNkMmI4M2Jj
MDYyYjViMGVlNjZjZWIuLjUzN2VkMmIxNzZhNDI2OTdlYWQzZTY5ODdlM2MzMGU5ODM3ZTcwOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNyBEYXZp
ZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAy
MDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzUsNiAr
NzUsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVFZmZl
Y3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1
ZGUgIk11dGF0aW9uUmVjb3JkLmgiCkBAIC0zMDUsMTIgKzMwNiwxNCBAQCBzdGF0aWMgYm9vbCBp
c0ZvcmNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogfQog
CiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQorCiBzdGF0aWMgYm9vbCBpc0NvbXBhdGliaWxp
dHlNb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiB7CiAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI2NvbXBhdGliaWxpdHktbWFwcGluZy13
aXRoLW1vdXNlLWV2ZW50cwogICAgIGNvbnN0IGF1dG8mIHR5cGUgPSBtb3VzZUV2ZW50LnR5cGUo
KTsKICAgICByZXR1cm4gdHlwZSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiB0eXBlICE9
IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCAmJiB0eXBlICE9IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50ICYmIHR5cGUgIT0gZXZlbnROYW1lcygpLm1vdXNlZW50ZXJFdmVudCAmJiB0eXBl
ICE9IGV2ZW50TmFtZXMoKS5tb3VzZWxlYXZlRXZlbnQ7CiB9CisKICNlbmRpZgogCiBlbnVtIGNs
YXNzIFNob3VsZElnbm9yZU1vdXNlRXZlbnQgOiBib29sIHsgTm8sIFllcyB9OwpAQCAtMTg4Nyw2
ICsxODkwLDcgQEAgVVJMIEVsZW1lbnQ6OmFic29sdXRlTGlua1VSTCgpIGNvbnN0CiB9CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiBib29sIEVsZW1lbnQ6OmFsbG93c0RvdWJsZVRhcEdl
c3R1cmUoKSBjb25zdAogewogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKQEAgLTE4OTcsNiAr
MTkwMSw3IEBAIGJvb2wgRWxlbWVudDo6YWxsb3dzRG91YmxlVGFwR2VzdHVyZSgpIGNvbnN0CiAg
ICAgRWxlbWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudCgpOwogICAgIHJldHVybiAhcGFyZW50
IHx8IHBhcmVudC0+YWxsb3dzRG91YmxlVGFwR2VzdHVyZSgpOwogfQorCiAjZW5kaWYKIAogU3R5
bGU6OlJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29sdmVyKCkKQEAgLTI2MzEsNiArMjYzNiw3
IEBAIHZvaWQgRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIH0KIAogI2lmIEVOQUJM
RShUUkVFX0RFQlVHR0lORykKKwogdm9pZCBFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKQEAgLTI2NTYsNiArMjY2Miw3IEBAIHZvaWQgRWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdn
ZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiAKICAgICBzdHJuY3B5KGJ1
ZmZlciwgcmVzdWx0LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbGVuZ3RoIC0gMSk7CiB9CisK
ICNlbmRpZgogCiBjb25zdCBWZWN0b3I8UmVmUHRyPEF0dHI+PiYgRWxlbWVudDo6YXR0ck5vZGVM
aXN0KCkKQEAgLTI5OTEsMTIgKzI5OTgsMTIgQEAgdm9pZCBFbGVtZW50Ojpmb2N1cyhib29sIHJl
c3RvcmVQcmV2aW91c1NlbGVjdGlvbiwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIH0K
IAogICAgIFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1v
ZGU6OlJldmVhbDsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gRm9jdXNpbmcg
YSBmb3JtIGVsZW1lbnQgdHJpZ2dlcnMgYW5pbWF0aW9uIGluIFVJS2l0IHRvIHNjcm9sbCB0byB0
aGUgcmlnaHQgcG9zaXRpb24uCiAgICAgLy8gQ2FsbGluZyB1cGRhdGVGb2N1c0FwcGVhcmFuY2Uo
KSB3b3VsZCBnZW5lcmF0ZSBhbiB1bm5lY2Vzc2FyeSBjYWxsIHRvIFNjcm9sbFZpZXc6OnNldFNj
cm9sbFBvc2l0aW9uKCksCiAgICAgLy8gd2hpY2ggd291bGQganVtcCB1cyBhcm91bmQgZHVyaW5n
IHRoaXMgYW5pbWF0aW9uLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY2OTk3NDE+LgotICAgIGJvb2wg
aXNGb3JtQ29udHJvbCA9IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5ld1RhcmdldCk7Ci0g
ICAgaWYgKGlzRm9ybUNvbnRyb2wpCisgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KG5ld1RhcmdldCkpCiAgICAgICAgIHJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpS
ZXZlYWxVcFRvTWFpbkZyYW1lOwogI2VuZGlmCiAKQEAgLTM1OTksNiArMzYwNiw3IEBAIGJvb2wg
RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJiBjaGlsZCkgY29u
c3QKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKwogc3RhdGljIEVsZW1lbnQqIHBh
cmVudENyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgQVNTRVJUKGVsZW1lbnQpOwpAQCAtMzYyOSw5ICszNjM3LDExIEBAIHZvaWQgRWxlbWVudDo6
c2V0Q29udGFpbnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5k
YXJpZXMoYm9vCiAgICAgd2hpbGUgKChlbGVtZW50ID0gcGFyZW50Q3Jvc3NpbmdGcmFtZUJvdW5k
YXJpZXMoZWxlbWVudCkpKQogICAgICAgICBlbGVtZW50LT5zZXRDb250YWluc0Z1bGxTY3JlZW5F
bGVtZW50KGZsYWcpOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykK
KwogRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0UG9pbnRlckNhcHR1cmUoaW50MzJfdCBw
b2ludGVySWQpCiB7CiAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpKQpAQCAtMzY1MiwxNyArMzY2
MiwyMSBAQCBib29sIEVsZW1lbnQ6Omhhc1BvaW50ZXJDYXB0dXJlKGludDMyX3QgcG9pbnRlcklk
KQogICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5wYWdlKCktPnBvaW50ZXJDYXB0dXJlQ29udHJv
bGxlcigpLmhhc1BvaW50ZXJDYXB0dXJlKHRoaXMsIHBvaW50ZXJJZCk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisKIHZvaWQgRWxl
bWVudDo6cmVxdWVzdFBvaW50ZXJMb2NrKCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkp
CiAgICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5wb2ludGVyTG9ja0NvbnRyb2xsZXIoKS5yZXF1
ZXN0UG9pbnRlckxvY2sodGhpcyk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSU0VD
VElPTl9PQlNFUlZFUikKKwogdm9pZCBFbGVtZW50OjpkaXNjb25uZWN0RnJvbUludGVyc2VjdGlv
bk9ic2VydmVycygpCiB7CiAgICAgYXV0byogb2JzZXJ2ZXJEYXRhID0gaW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJEYXRhKCk7CkBAIC0zNjkwLDYgKzM3MDQsNyBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlckRh
dGEqIEVsZW1lbnQ6OmludGVyc2VjdGlvbk9ic2VydmVyRGF0YSgpCiB7CiAgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+aW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRh
KCkgOiBudWxscHRyOwogfQorCiAjZW5kaWYKIAogS2V5ZnJhbWVFZmZlY3RTdGFjayYgRWxlbWVu
dDo6ZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpCkBAIC0zNzI1LDYgKzM3NDAsNyBAQCBib29s
IEVsZW1lbnQ6OmFwcGx5S2V5ZnJhbWVFZmZlY3RzKFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkK
IH0KIAogI2lmIEVOQUJMRShSRVNJWkVfT0JTRVJWRVIpCisKIHZvaWQgRWxlbWVudDo6ZGlzY29u
bmVjdEZyb21SZXNpemVPYnNlcnZlcnMoKQogewogICAgIGF1dG8qIG9ic2VydmVyRGF0YSA9IHJl
c2l6ZU9ic2VydmVyRGF0YSgpOwpAQCAtMzc0OCwzMyArMzc2NCwyMCBAQCBSZXNpemVPYnNlcnZl
ckRhdGEqIEVsZW1lbnQ6OnJlc2l6ZU9ic2VydmVyRGF0YSgpCiB7CiAgICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+cmVzaXplT2JzZXJ2ZXJEYXRhKCkgOiBudWxs
cHRyOwogfQotI2VuZGlmCiAKLVNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBFbGVtZW50OjpzcGVs
bGNoZWNrQXR0cmlidXRlU3RhdGUoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNwZWxsY2hl
Y2tBdHRyKTsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBTcGVsbGNo
ZWNrQXR0cmlidXRlRGVmYXVsdDsKLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIpKQotICAgICAgICByZXR1cm4gU3Bl
bGxjaGVja0F0dHJpYnV0ZVRydWU7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHZhbHVlLCAiZmFsc2UiKSkKLSAgICAgICAgcmV0dXJuIFNwZWxsY2hlY2tBdHRyaWJ1dGVG
YWxzZTsKLSAgICByZXR1cm4gU3BlbGxjaGVja0F0dHJpYnV0ZURlZmF1bHQ7Ci19CisjZW5kaWYK
IAogYm9vbCBFbGVtZW50Ojppc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QKIHsKLSAgICBm
b3IgKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZWxl
bWVudC0+c3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTcGVsbGNo
ZWNrQXR0cmlidXRlVHJ1ZToKKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gdGhpczsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewor
ICAgICAgICBhdXRvJiB2YWx1ZSA9IGFuY2VzdG9yLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKEhUTUxOYW1lczo6c3BlbGxjaGVja0F0dHIpOworICAgICAgICBpZiAodmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHko
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInRydWUiKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFNwZWxsY2hlY2tBdHRyaWJ1dGVGYWxz
ZToKKyAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiZmFs
c2UiKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBTcGVsbGNoZWNr
QXR0cmlidXRlRGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQot
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ0MDEsNiArNDQwNCw3IEBAIEVsZW1lbnRJZGVu
dGlmaWVyIEVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRJZGVudGlmaWVyKCkKIH0KIAogI2lmIEVOQUJM
RShDU1NfVFlQRURfT00pCisKIFN0eWxlUHJvcGVydHlNYXAqIEVsZW1lbnQ6OmF0dHJpYnV0ZVN0
eWxlTWFwKCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC00NDEyLDYgKzQ0MTYsNyBA
QCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZVN0eWxlTWFwKFJlZjxTdHlsZVByb3BlcnR5TWFw
PiYmIG1hcCkKIHsKICAgICBlbnN1cmVFbGVtZW50UmFyZURhdGEoKS5zZXRBdHRyaWJ1dGVTdHls
ZU1hcChXVEZNb3ZlKG1hcCkpOwogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZDVlNzFlNjk5Y2M1ODVjOTNhYzUxZGFlNjdjNzhmNWM0
ZWZmNWIzOS4uODQ0YWUyMmFhYjYxZDUzYWU0OWFiZmY4NDlhY2M4YTJhZTljNWFjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFbGVtZW50RGF0YS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUg
IktleWZyYW1lQW5pbWF0aW9uT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNjcm9sbFRvT3B0aW9ucy5o
IgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdE1vZGUuaCIK
ICNpbmNsdWRlICJTaW11bGF0ZWRDbGlja09wdGlvbnMuaCIKQEAgLTU4LDcgKzU2LDEwIEBAIGNs
YXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJUcmVlUG9zaXRpb247CiBjbGFzcyBTdHls
ZVByb3BlcnR5TWFwOwogY2xhc3MgV2ViQW5pbWF0aW9uOworCitzdHJ1Y3QgS2V5ZnJhbWVBbmlt
YXRpb25PcHRpb25zOwogc3RydWN0IFNjcm9sbEludG9WaWV3T3B0aW9uczsKK3N0cnVjdCBTY3Jv
bGxUb09wdGlvbnM7CiAKICNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQogc3RydWN0
IEludGVyc2VjdGlvbk9ic2VydmVyRGF0YTsKQEAgLTcyLDEyICs3Myw2IEBAIG5hbWVzcGFjZSBT
dHlsZSB7CiBzdHJ1Y3QgRWxlbWVudFN0eWxlOwogfQogCi1lbnVtIFNwZWxsY2hlY2tBdHRyaWJ1
dGVTdGF0ZSB7Ci0gICAgU3BlbGxjaGVja0F0dHJpYnV0ZVRydWUsCi0gICAgU3BlbGxjaGVja0F0
dHJpYnV0ZUZhbHNlLAotICAgIFNwZWxsY2hlY2tBdHRyaWJ1dGVEZWZhdWx0Ci19OwotCiBjbGFz
cyBFbGVtZW50IDogcHVibGljIENvbnRhaW5lck5vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoRWxlbWVudCk7CiBwdWJsaWM6CkBAIC0xMDQsMTQgKzk5LDEzIEBAIHB1YmxpYzoKICAg
ICAvLyBhdHRyaWJ1dGUgb3Igb25lIG9mIHRoZSBTVkcgYW5pbWF0YWJsZSBhdHRyaWJ1dGVzLgog
ICAgIGJvb2wgaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Q7CiAgICAgY29uc3QgQXRvbVN0cmluZyYgYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0jaWZuZGVmIE5ERUJV
RwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotI2VuZGlmCiAKICNpZiBEVU1QX05PREVfU1RBVElT
VElDUwogICAgIGJvb2wgaGFzTmFtZWROb2RlTWFwKCkgY29uc3Q7CiAjZW5kaWYKKwogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0OworCiAgICAgLy8gVGhpcyB2
YXJpYW50IHdpbGwgbm90IHVwZGF0ZSB0aGUgcG90ZW50aWFsbHkgaW52YWxpZCBhdHRyaWJ1dGVz
LiBUbyBiZSB1c2VkIHdoZW4gbm90IGludGVyZXN0ZWQKICAgICAvLyBpbiBzdHlsZSBhdHRyaWJ1
dGUgb3Igb25lIG9mIHRoZSBTVkcgYW5pbWF0aW9uIGF0dHJpYnV0ZXMuCiAgICAgYm9vbCBoYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0OwpAQCAtMTk5LDYgKzE5Myw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIFJldHVybnMgdGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCB0cmFuc2xhdGVk
IGludG8gY2xpZW50IGNvb3JkaW5hdGVzLgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgY2xp
ZW50UmVjdCgpIGNvbnN0OworCiAgICAgLy8gUmV0dXJucyB0aGUgYWJzb2x1dGUgYm91bmRpbmcg
Ym94IHRyYW5zbGF0ZWQgaW50byBzY3JlZW4gY29vcmRpbmF0ZXMuCiAgICAgV0VCQ09SRV9FWFBP
UlQgSW50UmVjdCBzY3JlZW5SZWN0KCkgY29uc3Q7CiAKQEAgLTIyMiwxNCArMjE3LDEzIEBAIHB1
YmxpYzoKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdRTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFnTmFtZTsgfQogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIHB0cmRpZmZfdCB0YWdR
TmFtZU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFbGVtZW50LCBtX3Rh
Z05hbWUpOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyNlbmRpZgogICAgIFN0cmluZyB0YWdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbm9kZU5hbWUoKTsgfQogICAgIGJvb2wgaGFzVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubWF0
Y2hlcyh0YWdOYW1lKTsgfQogICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBIVE1MUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gQ29udGFpbmVyTm9kZTo6aGFzVGFnTmFtZSh0
YWdOYW1lKTsgfQogICAgIGJvb2wgaGFzVGFnTmFtZShjb25zdCBNYXRoTUxRdWFsaWZpZWROYW1l
JiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBDb250YWluZXJOb2RlOjpoYXNUYWdOYW1lKHRhZ05h
bWUpOyB9CiAgICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFNWR1F1YWxpZmllZE5hbWUmIHRhZ05h
bWUpIGNvbnN0IHsgcmV0dXJuIENvbnRhaW5lck5vZGU6Omhhc1RhZ05hbWUodGFnTmFtZSk7IH0K
IAotICAgIC8vIEEgZmFzdCBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgdGhlIGxvY2FsIG5hbWUgYWdh
aW5zdCBhbm90aGVyIGF0b21pYyBzdHJpbmcuCiAgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29uc3Qg
QXRvbVN0cmluZyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUoKSA9
PSBvdGhlcjsgfQogCiAgICAgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpOyB9CkBAIC0yNTYsNyArMjUwLDcgQEAg
cHVibGljOgogICAgICAgICBNb2RpZmllZEJ5Q2xvbmluZwogICAgIH07CiAKLSAgICAvLyBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gYXR0cmlidXRlIGlzIGFkZGVkLCBjaGFuZ2Vk
IG9yIHJlbW92ZWQuCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2hlbmV2ZXIg
YW4gYXR0cmlidXRlIGlzIGFkZGVkLCBjaGFuZ2VkIG9yIHJlbW92ZWQuCiAgICAgdmlydHVhbCB2
b2lkIGF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBBdG9tU3RyaW5nJiBuZXdWYWx1ZSwgQXR0cmlidXRlTW9kaWZp
Y2F0aW9uUmVhc29uID0gTW9kaWZpZWREaXJlY3RseSk7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgeyB9CiAK
QEAgLTMwOCw3ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbnF1ZXVlVG9VcGdyYWRlKEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZSYpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
KiByZWFjdGlvblF1ZXVlKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgbm90
IGJlIHZpcnR1YWwsIGRvIG5vdCBvdmVycmlkZSB0aGlzLgorICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBub3QgYmUgdmlydHVhbC4gUGxlYXNlIGRvIG5vdCBhZGQgYWRkaXRpb25hbCBvdmVycmlk
ZXMgb2YgdGhpcyBmdW5jdGlvbi4KICAgICB2aXJ0dWFsIGNvbnN0IEF0b21TdHJpbmcmIHNoYWRv
d1BzZXVkb0lkKCkgY29uc3Q7CiAKICAgICBib29sIGlzSW5BY3RpdmVDaGFpbigpIGNvbnN0IHsg
cmV0dXJuIGlzVXNlckFjdGlvbkVsZW1lbnQoKSAmJiBpc1VzZXJBY3Rpb25FbGVtZW50SW5BY3Rp
dmVDaGFpbigpOyB9CkBAIC00MjIsMjEgKzQxNiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVGb3JEb2N1bWVudFN1c3BlbnNpb24oKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lvbigpIHsgfQogCi0gICAgLy8gVXNlIERvY3VtZW50
OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCkgdG8gc3Vic2NyaWJlIHRvIHRoaXMK
LSAgICB2aXJ0dWFsIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSB7IH0KLQotICAgIC8vIFVz
ZSBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFj
a3MoKSB0byBzdWJzY3JpYmUgdG8gdGhpcy4KLSAgICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dz
aW5nU3RhdGVEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQpIHsgfQotCiAgICAgdmlydHVhbCB2b2lk
IHdpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBhbmNlc3Rv
cldpbGxFbnRlckZ1bGxzY3JlZW4oKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQmVjb21lRnVs
bHNjcmVlbkVsZW1lbnQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0b3BCZWluZ0Z1bGxz
Y3JlZW5FbGVtZW50KCkgeyB9CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgdmlydHVh
bCB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKSB7IH0KLSNlbmRpZgotCiAgICAgYm9v
bCBpc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gaXNQYXJzaW5nQ2hp
bGRyZW5GaW5pc2hlZCgpOyB9CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKSBvdmVy
cmlkZTsKICAgICB2b2lkIGJlZ2luUGFyc2luZ0NoaWxkcmVuKCkgZmluYWw7CkBAIC03MDgsOCAr
NjkyLDYgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIHJhcmVEYXRhQ2hpbGRJbmRleCgpIGNv
bnN0OwogCi0gICAgU3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlIHNwZWxsY2hlY2tBdHRyaWJ1dGVT
dGF0ZSgpIGNvbnN0OwotCiAgICAgdm9pZCBjcmVhdGVVbmlxdWVFbGVtZW50RGF0YSgpOwogCiAg
ICAgRWxlbWVudFJhcmVEYXRhKiBlbGVtZW50UmFyZURhdGEoKSBjb25zdDsKQEAgLTcyNSw2ICs3
MDcsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGF0dGFjaEF0dHJpYnV0ZU5vZGVJZk5l
ZWRlZChBdHRyJik7CiAKKyNpZm5kZWYgTkRFQlVHCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBm
YXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Cisj
ZW5kaWYKKwogICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogICAgIFJlZlB0cjxFbGVtZW50
RGF0YT4gbV9lbGVtZW50RGF0YTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RnVsbHNjcmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5h
Z2VyLmNwcAppbmRleCAxZTQyODcxYmMyYjIzY2Y5OGFlMGQyMjdjZjVhNzA1ZTc0NjZiODdmLi5l
OTA0YzQ1ZWE1MzA0YzU2YmYzNzkzNGY4YmIxNzIyZGY0YzhkZDU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUg
IkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtMzg4
LDcgKzM4Niw3IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OndpbGxFbnRlckZ1bGxzY3JlZW4o
RWxlbWVudCYgZWxlbWVudCkKICAgICBtX2Z1bGxzY3JlZW5FbGVtZW50ID0gJmVsZW1lbnQ7CiAK
ICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCi0gICAgaWYgKGVsZW1lbnQuaXNNZWRp
YUVsZW1lbnQoKSkKKyAgICBpZiAoaXM8SFRNTE1lZGlhRWxlbWVudD4oZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCmluZGV4
IDJhMGFmYjgwMWVkZWFlZjVhOGIwMTc0OWE1MjM0NTI2OTU3YjllYjIuLmYwYWRkMmFjMmQ1NDY2
NmZhMmZlODU3ODk2MmNiNTQwOGZiYjczNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3Qu
Y3BwCkBAIC00MCw3ICs0MCw3IEBAIE5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KENvbnRhaW5l
ck5vZGUmIHJvb3ROb2RlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogCiBOYW1lTm9kZUxpc3Q6
On5OYW1lTm9kZUxpc3QoKQogewotICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVD
YWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIG1fbmFtZSk7CisgICAgb3duZXJOb2RlKCkubm9kZUxp
c3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21OYW1lKCp0aGlzLCBtX25hbWUpOwogfSAKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGYxYjAxZTU5OTIzMzIyNjg0
M2EzMjU3ZjdlODYwM2NkZTgzZjYxMGQuLmE1ZDI2YjVmODgyMTcxNTU3MzVhMmE4ZDU1MGY5ZTFj
ZjU1M2ZiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTE5MTQsOCArMTkxNCw4IEBAIHZvaWQgTm9k
ZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSBjb25zdAogCiB2b2lkIE5vZGVMaXN0c05v
ZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKCkKIHsKLSAgICBmb3IgKGF1dG8mIGF0b21pY05hbWUg
OiBtX2F0b21pY05hbWVDYWNoZXMpCi0gICAgICAgIGF0b21pY05hbWUudmFsdWUtPmludmFsaWRh
dGVDYWNoZSgpOworICAgIGZvciAoYXV0byYgYXRvbU5hbWUgOiBtX2F0b21OYW1lQ2FjaGVzKQor
ICAgICAgICBhdG9tTmFtZS52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAKICAgICBmb3IgKGF1
dG8mIGNvbGxlY3Rpb24gOiBtX2NhY2hlZENvbGxlY3Rpb25zKQogICAgICAgICBjb2xsZWN0aW9u
LnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKQEAgLTE5MjYsOCArMTkyNiw4IEBAIHZvaWQgTm9k
ZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMoKQogCiB2b2lkIE5vZGVMaXN0c05vZGVE
YXRhOjppbnZhbGlkYXRlQ2FjaGVzRm9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGZvciAoYXV0byYgYXRvbWljTmFtZSA6IG1fYXRvbWljTmFtZUNhY2hl
cykKLSAgICAgICAgYXRvbWljTmFtZS52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlRm9yQXR0cmlidXRl
KGF0dHJOYW1lKTsKKyAgICBmb3IgKGF1dG8mIGF0b21OYW1lIDogbV9hdG9tTmFtZUNhY2hlcykK
KyAgICAgICAgYXRvbU5hbWUudmFsdWUtPmludmFsaWRhdGVDYWNoZUZvckF0dHJpYnV0ZShhdHRy
TmFtZSk7CiAKICAgICBmb3IgKGF1dG8mIGNvbGxlY3Rpb24gOiBtX2NhY2hlZENvbGxlY3Rpb25z
KQogICAgICAgICBjb2xsZWN0aW9uLnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGVGb3JBdHRyaWJ1dGUo
YXR0ck5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IGJmZjk3NWQ4ODBlMGI0
NzQ4NTc1NTA1ZTA0OTU0NDFkODc0MmZlOWYuLjM3NjQxMmI0NDY5NjhjOTVjOTlhNDk4NjEyYzQ4
NzMzYzRlMDMyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBTbWl0aCA8Y2F0ZmlzaC5t
YW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzLDM1ICsyMywyNiBAQAogCiAjaW5jbHVk
ZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGl2ZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIK
ICNpbmNsdWRlICJUYWdDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExhYmVsc05vZGVMaXN0OworY2xh
c3MgTGl2ZU5vZGVMaXN0OwogY2xhc3MgTmFtZU5vZGVMaXN0OwogY2xhc3MgUmFkaW9Ob2RlTGlz
dDsKLWNsYXNzIFRyZWVTY29wZTsKIAotdGVtcGxhdGUgPGNsYXNzIExpc3RUeXBlPiBzdHJ1Y3Qg
Tm9kZUxpc3RUeXBlSWRlbnRpZmllcjsKLXRlbXBsYXRlIDw+IHN0cnVjdCBOb2RlTGlzdFR5cGVJ
ZGVudGlmaWVyPE5hbWVOb2RlTGlzdD4geyBzdGF0aWMgaW50IHZhbHVlKCkgeyByZXR1cm4gMDsg
fSB9OwotdGVtcGxhdGUgPD4gc3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8UmFkaW9Ob2Rl
TGlzdD4geyBzdGF0aWMgaW50IHZhbHVlKCkgeyByZXR1cm4gMTsgfSB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8TGFiZWxzTm9kZUxpc3Q+IHsgc3RhdGljIGlu
dCB2YWx1ZSgpIHsgcmV0dXJuIDI7IH0gfTsKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3RUeXBlPiBz
dHJ1Y3QgTm9kZUxpc3RUeXBlSWRlbnRpZmllcjsKIAogY2xhc3MgTm9kZUxpc3RzTm9kZURhdGEg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVMaXN0c05vZGVEYXRhKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZUxpc3RzTm9kZURh
dGEpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE5vZGVMaXN0
c05vZGVEYXRhKCkKLSAgICAgICAgOiBtX2NoaWxkTm9kZUxpc3QobnVsbHB0cikKLSAgICAgICAg
LCBtX2VtcHR5Q2hpbGROb2RlTGlzdChudWxscHRyKQotICAgIHsKLSAgICB9CisgICAgTm9kZUxp
c3RzTm9kZURhdGEoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIGNsZWFyQ2hpbGROb2RlTGlzdENh
Y2hlKCkKICAgICB7CkBAIC0xMDQsMTQgKzk1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBEZWZhdWx0SGFzaDxB
dG9tU3RyaW5nPjo6SGFzaDo6c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQ7CiAgICAgfTsK
IAotICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbVN0cmlu
Zz4sIExpdmVOb2RlTGlzdCosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g+IE5vZGVMaXN0QXRv
bWljTmFtZUNhY2hlTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQg
Y2hhciwgQXRvbVN0cmluZz4sIEhUTUxDb2xsZWN0aW9uKiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5
SGFzaD4gQ29sbGVjdGlvbkNhY2hlTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWRO
YW1lLCBUYWdDb2xsZWN0aW9uTlMqPiBUYWdDb2xsZWN0aW9uTlNDYWNoZTsKKyAgICB1c2luZyBO
b2RlTGlzdENhY2hlTWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbVN0
cmluZz4sIExpdmVOb2RlTGlzdCosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g+OworICAgIHVz
aW5nIENvbGxlY3Rpb25DYWNoZU1hcCA9IEhhc2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIs
IEF0b21TdHJpbmc+LCBIVE1MQ29sbGVjdGlvbiosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g+
OworICAgIHVzaW5nIFRhZ0NvbGxlY3Rpb25OU0NhY2hlID0gSGFzaE1hcDxRdWFsaWZpZWROYW1l
LCBUYWdDb2xsZWN0aW9uTlMqPjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IENvbnRhaW5lclR5cGU+Ci0gICAgQUxXQVlTX0lOTElORSBSZWY8VD4gYWRkQ2FjaGVXaXRoQXRv
bWljTmFtZShDb250YWluZXJUeXBlJiBjb250YWluZXIsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUp
CisgICAgQUxXQVlTX0lOTElORSBSZWY8VD4gYWRkQ2FjaGVXaXRoQXRvbU5hbWUoQ29udGFpbmVy
VHlwZSYgY29udGFpbmVyLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAg
Tm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2F0b21pY05h
bWVDYWNoZXMuZmFzdEFkZChuYW1lZE5vZGVMaXN0S2V5PFQ+KG5hbWUpLCBudWxscHRyKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSBtX2F0b21OYW1lQ2FjaGVzLmZhc3RBZGQobmFtZWROb2RlTGlz
dEtleTxUPihuYW1lKSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCY+KCpyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlKTsKIApAQCAtMTIyLDggKzExMyw3IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUg
UmVmPFRhZ0NvbGxlY3Rpb25OUz4gYWRkQ2FjaGVkVGFnQ29sbGVjdGlvbk5TKENvbnRhaW5lck5v
ZGUmIG5vZGUsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbVN0cmlu
ZyYgbG9jYWxOYW1lKQogICAgIHsKLSAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9t
KCksIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKLSAgICAgICAgVGFnQ29sbGVjdGlvbk5TQ2Fj
aGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhZ0NvbGxlY3Rpb25OU0NhY2hlLmZhc3RBZGQobmFt
ZSwgbnVsbHB0cik7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV90YWdDb2xsZWN0aW9uTlNDYWNo
ZS5mYXN0QWRkKFF1YWxpZmllZE5hbWUgeyBudWxsQXRvbSgpLCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSB9LCBudWxscHRyKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIApAQCAtMTM1LDcgKzEyNSw3
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb250YWluZXJU
eXBlPgogICAgIEFMV0FZU19JTkxJTkUgUmVmPFQ+IGFkZENhY2hlZENvbGxlY3Rpb24oQ29udGFp
bmVyVHlwZSYgY29udGFpbmVyLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSwgY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIENvbGxlY3Rpb25DYWNoZU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVkQ29sbGVjdGlvbnMuZmFzdEFkZChuYW1lZENvbGxlY3Rp
b25LZXkoY29sbGVjdGlvblR5cGUsIG5hbWUpLCBudWxscHRyKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBtX2NhY2hlZENvbGxlY3Rpb25zLmZhc3RBZGQobmFtZWRDb2xsZWN0aW9uS2V5KGNvbGxl
Y3Rpb25UeXBlLCBuYW1lKSwgbnVsbHB0cik7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50
cnkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCY+KCpyZXN1bHQuaXRlcmF0b3It
PnZhbHVlKTsKIApAQCAtMTQ3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgogICAgIEFMV0FZU19JTkxJTkUgUmVmPFQ+
IGFkZENhY2hlZENvbGxlY3Rpb24oQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBDb2xsZWN0aW9u
VHlwZSBjb2xsZWN0aW9uVHlwZSkKICAgICB7Ci0gICAgICAgIENvbGxlY3Rpb25DYWNoZU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVkQ29sbGVjdGlvbnMuZmFzdEFkZChuYW1lZENvbGxl
Y3Rpb25LZXkoY29sbGVjdGlvblR5cGUsIHN0YXJBdG9tKCkpLCBudWxscHRyKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX2NhY2hlZENvbGxlY3Rpb25zLmZhc3RBZGQobmFtZWRDb2xsZWN0aW9u
S2V5KGNvbGxlY3Rpb25UeXBlLCBzdGFyQXRvbSgpKSwgbnVsbHB0cik7CiAgICAgICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCY+KCpy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIApAQCAtMTYyLDEzICsxNTIsMTMgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KG1fY2FjaGVkQ29sbGVjdGlvbnMuZ2V0KG5h
bWVkQ29sbGVjdGlvbktleShjb2xsZWN0aW9uVHlwZSwgc3RhckF0b20oKSkpKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgotICAgIHZvaWQgcmVtb3ZlQ2FjaGVX
aXRoQXRvbWljTmFtZShOb2RlTGlzdFR5cGUqIGxpc3QsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUg
PSBzdGFyQXRvbSgpKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVMaXN0VHlwZT4KKyAgICB2
b2lkIHJlbW92ZUNhY2hlV2l0aEF0b21OYW1lKE5vZGVMaXN0VHlwZSYgbGlzdCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChsaXN0ID09IG1fYXRvbWljTmFt
ZUNhY2hlcy5nZXQobmFtZWROb2RlTGlzdEtleTxOb2RlTGlzdFR5cGU+KG5hbWUpKSk7Ci0gICAg
ICAgIGlmIChkZWxldGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRvUmVtb3ZlTGFz
dExpc3QobGlzdC0+b3duZXJOb2RlKCkpKQorICAgICAgICBBU1NFUlQoJmxpc3QgPT0gbV9hdG9t
TmFtZUNhY2hlcy5nZXQobmFtZWROb2RlTGlzdEtleTxOb2RlTGlzdFR5cGU+KG5hbWUpKSk7Cisg
ICAgICAgIGlmIChkZWxldGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRvUmVtb3Zl
TGFzdExpc3QobGlzdC5vd25lck5vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fYXRvbWljTmFtZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtleTxOb2RlTGlzdFR5cGU+
KG5hbWUpKTsKKyAgICAgICAgbV9hdG9tTmFtZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtl
eTxOb2RlTGlzdFR5cGU+KG5hbWUpKTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlZFRh
Z0NvbGxlY3Rpb25OUyhIVE1MQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0yMDMsNyAr
MTkzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgZm9yIChhdXRvJiBjYWNoZSA6IG1fYXRvbWljTmFtZUNhY2hlcy52YWx1ZXMoKSkKKyAgICAg
ICAgZm9yIChhdXRvJiBjYWNoZSA6IG1fYXRvbU5hbWVDYWNoZXMudmFsdWVzKCkpCiAgICAgICAg
ICAgICBjYWNoZS0+aW52YWxpZGF0ZUNhY2hlRm9yRG9jdW1lbnQob2xkRG9jdW1lbnQpOwogCiAg
ICAgICAgIGZvciAoYXV0byYgbGlzdCA6IG1fdGFnQ29sbGVjdGlvbk5TQ2FjaGUudmFsdWVzKCkp
IHsKQEAgLTIyMSw3ICsyMTEsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3RkOjpwYWly
PHVuc2lnbmVkIGNoYXIsIEF0b21TdHJpbmc+KHR5cGUsIG5hbWUpOwogICAgIH0KIAotICAgIHRl
bXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZUxp
c3RUeXBlPgogICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9tU3RyaW5nPiBuYW1lZE5v
ZGVMaXN0S2V5KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiAgICAgewogICAgICAgICByZXR1cm4g
c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21TdHJpbmc+KE5vZGVMaXN0VHlwZUlkZW50aWZp
ZXI8Tm9kZUxpc3RUeXBlPjo6dmFsdWUoKSwgbmFtZSk7CkBAIC0yMzAsMTAgKzIyMCwxMCBAQCBw
cml2YXRlOgogICAgIGJvb2wgZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRU
b1JlbW92ZUxhc3RMaXN0KE5vZGUmKTsKIAogICAgIC8vIFRoZXNlIHR3byBhcmUgY3VycmVudGx5
IG11dHVhbGx5IGV4Y2x1c2l2ZSBhbmQgY291bGQgYmUgdW5pb25lZC4gTm90IHZlcnkgaW1wb3J0
YW50IGFzIHRoaXMgY2xhc3MgaXMgbGFyZ2UgYW55d2F5LgotICAgIENoaWxkTm9kZUxpc3QqIG1f
Y2hpbGROb2RlTGlzdDsKLSAgICBFbXB0eU5vZGVMaXN0KiBtX2VtcHR5Q2hpbGROb2RlTGlzdDsK
KyAgICBDaGlsZE5vZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3QgeyBudWxscHRyIH07CisgICAgRW1w
dHlOb2RlTGlzdCogbV9lbXB0eUNoaWxkTm9kZUxpc3QgeyBudWxscHRyIH07CiAKLSAgICBOb2Rl
TGlzdEF0b21pY05hbWVDYWNoZU1hcCBtX2F0b21pY05hbWVDYWNoZXM7CisgICAgTm9kZUxpc3RD
YWNoZU1hcCBtX2F0b21OYW1lQ2FjaGVzOwogICAgIFRhZ0NvbGxlY3Rpb25OU0NhY2hlIG1fdGFn
Q29sbGVjdGlvbk5TQ2FjaGU7CiAgICAgQ29sbGVjdGlvbkNhY2hlTWFwIG1fY2FjaGVkQ29sbGVj
dGlvbnM7CiB9OwpAQCAtMzMxLDExICszMjEsMjcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Tm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhPiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhOwog
fTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgTm9kZUxpc3RUeXBlSWRlbnRpZmllcjxOYW1lTm9kZUxp
c3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNoYXIgdmFsdWUoKSB7IHJldHVy
biAwOyB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOb2RlTGlzdFR5cGVJZGVudGlmaWVyPFJh
ZGlvTm9kZUxpc3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNoYXIgdmFsdWUo
KSB7IHJldHVybiAxOyB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOb2RlTGlzdFR5cGVJZGVu
dGlmaWVyPExhYmVsc05vZGVMaXN0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBj
aGFyIHZhbHVlKCkgeyByZXR1cm4gMjsgfQorfTsKKwogaW5saW5lIGJvb2wgTm9kZUxpc3RzTm9k
ZURhdGE6OmRlbGV0ZVRoaXNBbmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0
TGlzdChOb2RlJiBvd25lck5vZGUpCiB7CiAgICAgQVNTRVJUKG93bmVyTm9kZS5ub2RlTGlzdHMo
KSA9PSB0aGlzKTsKLSAgICBpZiAoKG1fY2hpbGROb2RlTGlzdCA/IDEgOiAwKSArIChtX2VtcHR5
Q2hpbGROb2RlTGlzdCA/IDEgOiAwKSArIG1fYXRvbWljTmFtZUNhY2hlcy5zaXplKCkKLSAgICAg
ICAgKyBtX3RhZ0NvbGxlY3Rpb25OU0NhY2hlLnNpemUoKSArIG1fY2FjaGVkQ29sbGVjdGlvbnMu
c2l6ZSgpICE9IDEpCisgICAgc2l6ZV90IGxpc3RzQ291bnQgPSAobV9jaGlsZE5vZGVMaXN0ID8g
MSA6IDApCisgICAgICAgICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6IDApCisgICAgICAg
ICsgbV9hdG9tTmFtZUNhY2hlcy5zaXplKCkKKyAgICAgICAgKyBtX3RhZ0NvbGxlY3Rpb25OU0Nh
Y2hlLnNpemUoKQorICAgICAgICArIG1fY2FjaGVkQ29sbGVjdGlvbnMuc2l6ZSgpOworICAgIGlm
IChsaXN0c0NvdW50ICE9IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBvd25lck5vZGUu
Y2xlYXJOb2RlTGlzdHMoKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAKaW5kZXggMjFiMTVkNWI5OGJkMjJkYWY1MjRlZTI3MDc5ZDZmYzkzNTA4NDJkMy4uNDRkNzM1
NzVkMzJlZmU4YzRmMjdiMWJkZTQyZGZkYWU1ZDA2ZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5jcHAKQEAgLTExMiw4ICsxMTIsOCBAQCBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEVsZW1lbnRC
eUlkKGNvbnN0IFN0cmluZyYgZWxlbWVudElkKSBjb25zdAogICAgIGlmICghbV9lbGVtZW50c0J5
SWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKFJlZlB0cjxBdG9tU3RyaW5n
SW1wbD4gYXRvbWljRWxlbWVudElkID0gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcChlbGVtZW50SWQu
aW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudHNCeUlkLT5nZXRFbGVtZW50QnlJZCgq
YXRvbWljRWxlbWVudElkLCAqdGhpcyk7CisgICAgaWYgKGF1dG8gYXRvbUVsZW1lbnRJZCA9IEF0
b21TdHJpbmdJbXBsOjpsb29rVXAoZWxlbWVudElkLmltcGwoKSkpCisgICAgICAgIHJldHVybiBt
X2VsZW1lbnRzQnlJZC0+Z2V0RWxlbWVudEJ5SWQoKmF0b21FbGVtZW50SWQsICp0aGlzKTsKIAog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTIzLDggKzEyMyw4IEBAIEVsZW1lbnQqIFRyZWVT
Y29wZTo6Z2V0RWxlbWVudEJ5SWQoU3RyaW5nVmlldyBlbGVtZW50SWQpIGNvbnN0CiAgICAgaWYg
KCFtX2VsZW1lbnRzQnlJZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0
byBhdG9taWNFbGVtZW50SWQgPSBlbGVtZW50SWQudG9FeGlzdGluZ0F0b21TdHJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG1fZWxlbWVudHNCeUlkLT5nZXRFbGVtZW50QnlJZCgqYXRvbWljRWxlbWVu
dElkLCAqdGhpcyk7CisgICAgaWYgKGF1dG8gYXRvbUVsZW1lbnRJZCA9IGVsZW1lbnRJZC50b0V4
aXN0aW5nQXRvbVN0cmluZygpKQorICAgICAgICByZXR1cm4gbV9lbGVtZW50c0J5SWQtPmdldEVs
ZW1lbnRCeUlkKCphdG9tRWxlbWVudElkLCAqdGhpcyk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDMzNjkwZWE2
ZGRjMzhkOTg3YTY0ZGJhNGI4MWQ3MDk3ODIyMzhkZWQuLmNiZjMxZWJmMzU4ZTc4MmI0MzhiOGMy
ODhlYTZhOGE1NDA4ZGY0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcApAQCAtMjc0LDMwICsyNzQsNiBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcoSFRNTE1lZGlhRWxlbWVudDo6QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUgZQogICAgIHJl
dHVybiB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV07CiB9CiAK
LXR5cGVkZWYgSGFzaE1hcDxEb2N1bWVudCosIEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVudCo+PiBE
b2N1bWVudEVsZW1lbnRTZXRNYXA7Ci1zdGF0aWMgRG9jdW1lbnRFbGVtZW50U2V0TWFwJiBkb2N1
bWVudFRvRWxlbWVudFNldE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERvY3Vt
ZW50RWxlbWVudFNldE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyB2b2lk
IGFkZEVsZW1lbnRUb0RvY3VtZW50TWFwKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQsIERvY3Vt
ZW50JiBkb2N1bWVudCkKLXsKLSAgICBEb2N1bWVudEVsZW1lbnRTZXRNYXAmIG1hcCA9IGRvY3Vt
ZW50VG9FbGVtZW50U2V0TWFwKCk7Ci0gICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gc2V0
ID0gbWFwLnRha2UoJmRvY3VtZW50KTsKLSAgICBzZXQuYWRkKCZlbGVtZW50KTsKLSAgICBtYXAu
YWRkKCZkb2N1bWVudCwgc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21E
b2N1bWVudE1hcChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50LCBEb2N1bWVudCYgZG9jdW1lbnQp
Ci17Ci0gICAgRG9jdW1lbnRFbGVtZW50U2V0TWFwJiBtYXAgPSBkb2N1bWVudFRvRWxlbWVudFNl
dE1hcCgpOwotICAgIEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVudCo+IHNldCA9IG1hcC50YWtlKCZk
b2N1bWVudCk7Ci0gICAgc2V0LnJlbW92ZSgmZWxlbWVudCk7Ci0gICAgaWYgKCFzZXQuaXNFbXB0
eSgpKQotICAgICAgICBtYXAuYWRkKCZkb2N1bWVudCwgc2V0KTsKLX0KLQogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKIAogY2xhc3MgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgewpAQCAtNjczLDE2
ICs2NDksMTMgQEAgUmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IEhUTUxNZWRpYUVsZW1lbnQ6OmJl
c3RNZWRpYUVsZW1lbnRGb3JTaG93aW5nUGxheWJhY2tDb24KIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CisgICAgZG9j
dW1lbnQucmVnaXN0ZXJNZWRpYUVsZW1lbnQoKnRoaXMpOworCiAgICAgbV9tZWRpYVNlc3Npb24t
PnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1Vu
dGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGRvY3VtZW50LnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoKnRoaXMpOwotICAgIGRvY3VtZW50LnJlZ2lz
dGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLSNlbmRp
ZgotCiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKCp0aGlzKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTY5MCw0MCArNjYzLDIy
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09O
VFJPTFNfU0NSSVBUKQotICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZh
Y3RvcikKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
Q2FsbGJhY2tzKCp0aGlzKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLSNlbmRpZgotCiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBkb2N1bWVudC5yZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAotICAgIGRvY3VtZW50
LnJlZ2lzdGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxi
YWNrcygqdGhpcyk7Ci0KICAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAg
ICBhZGRFbGVtZW50VG9Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwotCi0jaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvck1lZGlhU3RyZWFtU3RhdGVD
aGFuZ2VDYWxsYmFja3MoKnRoaXMpOwotI2VuZGlmCi0KLSAgICBkb2N1bWVudC5hZGRBcHBsaWNh
dGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogeworICAgIGRv
Y3VtZW50LnVucmVnaXN0ZXJNZWRpYUVsZW1lbnQoKnRoaXMpOworCiAgICAgbV9tZWRpYVNlc3Np
b24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0
aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVudC5yZW1vdmVNZWRpYUNhblN0
YXJ0TGlzdGVuZXIoKnRoaXMpOwogCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZG9j
dW1lbnQudW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlzKTsKLSAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0
aGlzKTsKLSNlbmRpZgotCiAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0
ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQpAQCAt
NzMxLDI2ICs2ODYsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aERv
Y3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZv
ckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIGlmIChtX21lZGlhQ29udHJvbHNE
ZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotICAgIGRvY3VtZW50LnVucmVn
aXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAg
ZG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7
CiAjZW5kaWYKIAotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50
SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLQogICAgIGRvY3VtZW50LnJl
bW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwotICAgIHJlbW92ZUVsZW1lbnRGcm9tRG9jdW1lbnRN
YXAoKnRoaXMsIGRvY3VtZW50KTsKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgZG9j
dW1lbnQudW5yZWdpc3RlckZvck1lZGlhU3RyZWFtU3RhdGVDaGFuZ2VDYWxsYmFja3MoKnRoaXMp
OwotI2VuZGlmCi0KLSAgICBkb2N1bWVudC5yZW1vdmVBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlz
dGVuZXIoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld0Rv
Y3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQpAQCAt
NzY5LDYgKzcwOSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3CiB9CiAKICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBh
cmVGb3JEb2N1bWVudFN1c3BlbnNpb24oKQogewogICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lz
dGVyV2l0aERvY3VtZW50KGRvY3VtZW50KCkpOwpAQCAtNzc5LDYgKzcyMCw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lvbigpCiAgICAgbV9tZWRp
YVNlc3Npb24tPnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KCkpOwogICAgIHVwZGF0ZVNo
b3VsZEF1dG9wbGF5KCk7CiB9CisKICNlbmRpZgogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnN1
cHBvcnRzRm9jdXMoKSBjb25zdApAQCAtNTc5Niw4ICs1NzM4LDExIEBAIGJvb2wgSFRNTE1lZGlh
RWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgpCiB7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0
cnkgdG8gcmVjb25jaWxlIHRoaXMgc28gdGhlcmUncyBubyBkaWZmZXJlbmNlIGZvciBQTEFURk9S
TShJT1NfRkFNSUxZKS4KKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBJTkZPX0xPRyhM
T0dJREVOVElGSUVSKTsKICAgICB1cGRhdGVWb2x1bWUoKTsKKyNlbmRpZgogfQogCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKQpAQCAtNjQ1NywxMCArNjQw
MiwxNSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFFbmdpbmVzKCkKIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiB7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gcmVj
b25jaWxlIHRoaXMgc28gdGhlcmUncyBubyBkaWZmZXJlbmNlIGZvciBQTEFURk9STShJT1NfRkFN
SUxZKS4KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFVOVVNFRF9QQVJBTShzZXNzaW9u
SUQpOworI2Vsc2UKICAgICBpZiAoIW1fcGxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X3BsYXllci0+c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7
CisjZW5kaWYKIH0KIAogTWVkaWFDb250cm9scyogSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFDb250
cm9scygpIGNvbnN0CkBAIC02NzI5LDYgKzY2NzksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmNyZWF0ZU1lZGlhUGxheWVyKCkKIH0KIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCisKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0QXVkaW9Tb3VyY2VOb2RlKE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZSogc291cmNlTm9kZSkKIHsKICAgICBtX2F1ZGlvU291cmNlTm9kZSA9IHNvdXJjZU5v
ZGU7CkBAIC02NzQyLDggKzY2OTMsOSBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyKiBIVE1MTWVkaWFF
bGVtZW50OjphdWRpb1NvdXJjZVByb3ZpZGVyKCkKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAg
IHJldHVybiBtX3BsYXllci0+YXVkaW9Tb3VyY2VQcm92aWRlcigpOwogCi0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CisKICNlbmRpZgogCiBjb25zdCBTdHJpbmcmIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhR3JvdXAoKSBjb25zdApAQCAtNjc2OSwyMiArNjcyMSwxOSBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhR3JvdXAoY29uc3QgU3RyaW5nJiBncm91cCkK
IAogICAgIC8vIDQuIElmIHRoZXJlIGlzIGFub3RoZXIgbWVkaWEgZWxlbWVudCB3aG9zZSBEb2N1
bWVudCBpcyB0aGUgc2FtZSBhcyBtJ3MgRG9jdW1lbnQgKGV2ZW4gaWYgb25lIG9yIGJvdGgKICAg
ICAvLyBvZiB0aGVzZSBlbGVtZW50cyBhcmUgbm90IGFjdHVhbGx5IGluIHRoZSBEb2N1bWVudCks
Ci0gICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gZWxlbWVudHMgPSBkb2N1bWVudFRvRWxl
bWVudFNldE1hcCgpLmdldCgmZG9jdW1lbnQoKSk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDog
ZWxlbWVudHMpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQgPT0gdGhpcykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCisgICAgLy8gRklYTUU6IEl0IGRvZXMgbm90IHNlZW0gT0sgdGhhdCB0aGlzIGFs
Z29yaXRobSBpdGVyYXRlcyB0aGUgbWVkaWEgZWxlbWVudHMgaW4gYSByYW5kb20gb3JkZXIuCisg
ICAgZG9jdW1lbnQoKS5mb3JFYWNoTWVkaWFFbGVtZW50KFsmXSAoSFRNTE1lZGlhRWxlbWVudCYg
ZWxlbWVudCkgewogICAgICAgICAvLyBhbmQgd2hpY2ggYWxzbyBoYXMgYSBtZWRpYWdyb3VwIGF0
dHJpYnV0ZSwgYW5kIHdob3NlIG1lZGlhZ3JvdXAgYXR0cmlidXRlIGhhcyB0aGUgc2FtZSB2YWx1
ZSBhcwogICAgICAgICAvLyB0aGUgbmV3IHZhbHVlIG9mIG0ncyBtZWRpYWdyb3VwIGF0dHJpYnV0
ZSwKLSAgICAgICAgaWYgKGVsZW1lbnQtPm1lZGlhR3JvdXAoKSA9PSBncm91cCkgeworICAgICAg
ICBpZiAoJmVsZW1lbnQgIT0gdGhpcyAmJiAhY29udHJvbGxlcigpICYmIGVsZW1lbnQubWVkaWFH
cm91cCgpID09IGdyb3VwKSB7CiAgICAgICAgICAgICAvLyAgdGhlbiBsZXQgY29udHJvbGxlciBi
ZSB0aGF0IG1lZGlhIGVsZW1lbnQncyBjdXJyZW50IG1lZGlhIGNvbnRyb2xsZXIuCi0gICAgICAg
ICAgICBzZXRDb250cm9sbGVyKGVsZW1lbnQtPmNvbnRyb2xsZXIoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBzZXRDb250cm9sbGVyKGVsZW1lbnQuY29udHJvbGxlcigpKTsK
ICAgICAgICAgfQotICAgIH0KKyAgICB9KTsKIAogICAgIC8vIE90aGVyd2lzZSwgbGV0IGNvbnRy
b2xsZXIgYmUgYSBuZXdseSBjcmVhdGVkIE1lZGlhQ29udHJvbGxlci4KLSAgICBzZXRDb250cm9s
bGVyKE1lZGlhQ29udHJvbGxlcjo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKKyAgICBpZiAoIWNvbnRy
b2xsZXIoKSkKKyAgICAgICAgc2V0Q29udHJvbGxlcihNZWRpYUNvbnRyb2xsZXI6OmNyZWF0ZShk
b2N1bWVudCgpKSk7CiB9CiAKIE1lZGlhQ29udHJvbGxlciogSFRNTE1lZGlhRWxlbWVudDo6Y29u
dHJvbGxlcigpIGNvbnN0CkBAIC03MTM5LDYgKzcwODgsNyBAQCBWZWN0b3I8U3RyaW5nPiBIVE1M
TWVkaWFFbGVtZW50OjptZWRpYVBsYXllclByZWZlcnJlZEF1ZGlvQ2hhcmFjdGVyaXN0aWNzKCkg
Y29ucwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogU3RyaW5nIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhUGxheWVyTmV0d29ya0ludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAgIHJl
dHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6Om5ldHdvcmtJbnRlcmZhY2VOYW1lKCk7CkBA
IC03MTUwLDYgKzcxMDAsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyR2V0
UmF3Q29va2llcyhjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mCiAgICAgICAgIHJldHVy
biBwYWdlLT5jb29raWVKYXIoKS5nZXRSYXdDb29raWVzKGRvY3VtZW50KCksIHVybCwgY29va2ll
cyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorCiAjZW5kaWYKIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckVuZ2luZUZhaWxlZFRvTG9hZCgpIGNvbnN0CkBAIC03NDIxLDE1ICs3
MzcyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25Q
YWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRzT25QYWcKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA9PSBkZXBl
bmRzT25QYWdlU2NhbGUpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fbWVkaWFDb250cm9sc0Rl
cGVuZE9uUGFnZVNjYWxlRmFjdG9yID0gZGVwZW5kc09uUGFnZVNjYWxlOwotCi0gICAgaWYgKG1f
bWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudCgp
LnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7Ci0gICAg
ZWxzZQotICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkKQEAgLTc0NzIsNyArNzQx
NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJl
c2VudGF0aW9uTW9kZUNoYW5nZSgpCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCgpCiB7Ci0gICAgdXBkYXRlUGFnZVNjYWxlRmFjdG9ySlNQcm9wZXJ0eSgp
OworICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKKyAgICAg
ICAgdXBkYXRlUGFnZVNjYWxlRmFjdG9ySlNQcm9wZXJ0eSgpOwogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCkKQEAgLTc5NDAs
NiArNzg4NCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNv
bnN0CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKKwogZG91YmxlIEhUTUxNZWRpYUVs
ZW1lbnQ6OnBsYXllclZvbHVtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGxheWVyID8gbV9w
bGF5ZXItPnZvbHVtZSgpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgK
aW5kZXggZWI5MWYzZWQyMmM2MjAyNjc3YjM0ODhiMzI0MDIzOGNiZjE4ZTg3OC4uMWQ2ZGQyZWQ0
NDUxYTFmYzBiMTMwZjA2ZmU3OGZiZThiZjU0Y2FjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKFZJREVPKQogCiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25TdGF0ZUNo
YW5nZUxpc3RlbmVyLmgiCiAjaW5jbHVkZSAiQXV0b3BsYXlFdmVudC5oIgogI2luY2x1ZGUgIkRl
ZmVycmFibGVUYXNrLmgiCiAjaW5jbHVkZSAiR2VuZXJpY0V2ZW50UXVldWUuaCIKQEAgLTEzNCw3
ICsxMzMsNiBAQCBjbGFzcyBIVE1MTWVkaWFFbGVtZW50CiAgICAgLCBwcml2YXRlIE1lZGlhUGxh
eWVyQ2xpZW50CiAgICAgLCBwcml2YXRlIE1lZGlhUHJvZHVjZXIKICAgICAsIHByaXZhdGUgVmlz
aWJpbGl0eUNoYW5nZUNsaWVudAotICAgICwgcHJpdmF0ZSBBcHBsaWNhdGlvblN0YXRlQ2hhbmdl
TGlzdGVuZXIKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBwcml2YXRlIEF1ZGlvVHJh
Y2tDbGllbnQKICAgICAsIHByaXZhdGUgVGV4dFRyYWNrQ2xpZW50CkBAIC00MDUsNiArNDAzLDgg
QEAgcHVibGljOgogICAgIGJvb2wgcmVxdWlyZXNUZXh0VHJhY2tSZXByZXNlbnRhdGlvbigpIGNv
bnN0OwogICAgIHZvaWQgc2V0VGV4dFRyYWNrUmVwcmVzZW50YXRpb24oVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24qKTsKICAgICB2b2lkIHN5bmNUZXh0VHJhY2tCb3VuZHMoKTsKKworICAgIHZvaWQg
Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAtNDU5LDggKzQ1OSw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNvdXJjZVdhc1JlbW92ZWQoSFRNTFNvdXJjZUVsZW1lbnQmKTsKICAgICB2b2lkIHNvdXJjZVdh
c0FkZGVkKEhUTUxTb3VyY2VFbGVtZW50Jik7CiAKLSAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0
YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKSBvdmVycmlkZTsKLQogICAgIC8vIE1lZGlhIGNh
Y2hlIG1hbmFnZW1lbnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TWVkaWFD
YWNoZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Y29uc3QgU3RyaW5nJiBtZWRpYUNhY2hlRGlyZWN0b3J5KCk7CkBAIC01OTAsNiArNTg4LDExIEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW90ZUhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrc0NoYW5nZWQo
KTsKICNlbmRpZgogCisgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShQQUw6
OlNlc3Npb25JRCk7CisgICAgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpOworICAgIHZvaWQg
YXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJl
Y29tZUFjdGl2ZSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgdmly
dHVhbCB2b2lkIGZpbmlzaEluaXRpYWxpemF0aW9uKCk7CkBAIC02NDUsOSArNjQ4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCk7CiAgICAg
dm9pZCBjb250ZXh0RGVzdHJveWVkKCkgb3ZlcnJpZGU7CiAgICAgCi0gICAgdm9pZCBtZWRpYVZv
bHVtZURpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFu
Z2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7
CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRGlzcGxheVN0YXRlKCkgeyB9CiAgICAgCkBAIC04
MDEsNyArODAyLDYgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gUmVjb25maWd1cmVNb2RlIHsgSW1t
ZWRpYXRlbHksIEFmdGVyRGVsYXkgfTsKICAgICB2b2lkIG1hcmtDYXB0aW9uQW5kU3VidGl0bGVU
cmFja3NBc1VuY29uZmlndXJlZChSZWNvbmZpZ3VyZU1vZGUpOwotICAgIHZvaWQgY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCgpIG92ZXJyaWRlOwogICAgIENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OkNhcHRpb25EaXNwbGF5TW9kZSBjYXB0aW9uRGlzcGxheU1vZGUoKTsKICNlbmRpZgogCkBAIC05
MzksOSArOTM5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVNlZWtUb1BsYXliYWNrUG9z
aXRpb24oZG91YmxlKTsKICAgICB2b2lkIHNlZWtUb1BsYXliYWNrUG9zaXRpb25FbmRlZFRpbWVy
RmlyZWQoKTsKIAotICAgIHZvaWQgYXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkgZmluYWw7
Ci0gICAgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpIGZpbmFsOwotCiAgICAgdm9p
ZCBzZXRJbkFjdGl2ZURvY3VtZW50KGJvb2wpOwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAppbmRleCA3Mzg1MTZmOTg3
YmI1YTE2ZDRiYjQ4NmZmMjk5YTA3NDgxODRjOGUwLi5jM2Y5YmNkMDU2NjE4NGExNzNmN2M2MTg2
OGZkOGI1MmNhMmQzZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJs
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5j
cHAKQEAgLTQ2LDcgKzQ2LDcgQEAgUmVmUHRyPE5vZGVMaXN0PiBMYWJlbGFibGVFbGVtZW50Ojps
YWJlbHMoKQogICAgIGlmICghc3VwcG9ydExhYmVscygpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENh
Y2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9kZUxpc3Q+KCp0aGlzLCBzdGFyQXRvbSgpKTsKKyAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhB
dG9tTmFtZTxMYWJlbHNOb2RlTGlzdD4oKnRoaXMsIHN0YXJBdG9tKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJjb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05v
ZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwCmluZGV4
IGI4OWM1YjBiMjdmZjVlMDEyYWYxZGU2NDY4OTAyZmIwMzllZGRkOWIuLmQ0MTAxNzg2ZmIwMDVm
MjY4N2IxOTBhZjM3MzFiY2Q1NTdkMjBlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvTGFiZWxzTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9k
ZUxpc3QuY3BwCkBAIC00Myw3ICs0Myw3IEBAIExhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlz
dChMYWJlbGFibGVFbGVtZW50JiBmb3JOb2RlKQogCiBMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05v
ZGVMaXN0KCkKIHsKLSAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRo
QXRvbWljTmFtZSh0aGlzLCBzdGFyQXRvbSgpKTsKKyAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMo
KS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbU5hbWUoKnRoaXMsIHN0YXJBdG9tKCkpOwogfSAKICAgICAK
IGJvb2wgTGFiZWxzTm9kZUxpc3Q6OmVsZW1lbnRNYXRjaGVzKEVsZW1lbnQmIHRlc3ROb2RlKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKaW5kZXggNGM5ODBmYjM2MzBm
ZWFjNzdmODY0MTYyMGMzNjkyYTFlZTc0NzhiZS4uOTQ3MGVhMjlhYjU3NzQ4ODBjNjNiM2JmNDc0
ZWQ4OWJmZjdiYjM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVM
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCkBAIC00
OSw3ICs0OSw3IEBAIFJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYg
cm9vdE5vZGUsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiAKIFJhZGlvTm9kZUxpc3Q6On5SYWRp
b05vZGVMaXN0KCkKIHsKLSAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVX
aXRoQXRvbWljTmFtZSh0aGlzLCBtX25hbWUpOworICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygp
LT5yZW1vdmVDYWNoZVdpdGhBdG9tTmFtZSgqdGhpcywgbV9uYW1lKTsKIH0KIAogc3RhdGljIGlu
bGluZSBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChI
VE1MRWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDliMzk4MTZiNzc2YTM2MWJjNjUxZTY0NzBiNjll
Yzg5Y2NmNjQ4NWYuLjVhNjMyZDg1ZDM5ZDMyYmQ0NGEwMzM5ZGE2ZWU3YjcxODI2ZGJjYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpjb25zdHJ1Y3RU
cmVlRnJvbUhUTUxUb2tlbihIVE1MVG9rZW5pemVyOjpUb2tlblB0ciYgcmF3CiB7CiAgICAgQXRv
bWljSFRNTFRva2VuIHRva2VuKCpyYXdUb2tlbik7CiAKLSAgICAvLyBXZSBjbGVhciB0aGUgcmF3
VG9rZW4gaW4gY2FzZSBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuCisgICAgLy8gV2UgY2xl
YXIgdGhlIHJhd1Rva2VuIGluIGNhc2UgY29uc3RydWN0VHJlZQogICAgIC8vIHN5bmNocm9ub3Vz
bHkgcmUtZW50ZXJzIHRoZSBwYXJzZXIuIFdlIGRvbid0IGNsZWFyIHRoZSB0b2tlbiBpbW1lZGF0
ZWx5CiAgICAgLy8gZm9yIENoYXJhY3RlciB0b2tlbnMgYmVjYXVzZSB0aGUgQXRvbWljSFRNTFRv
a2VuIGF2b2lkcyBjb3B5aW5nIHRoZQogICAgIC8vIGNoYXJhY3RlcnMgYnkga2VlcGluZyBhIHBv
aW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgYnVmZmVyIGluIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAK
aW5kZXggZGE2MmQ2NmNlYTRjZjYyMDQyYWQwM2I1YTUxNjgzYjhlMTgzNjFjMi4uMjNmMzFmMTA5
YTgyNGNlY2YxMmYzNGU0NGZmZGUyM2NmNzVkZDJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBA
IC0xMDU5LDggKzEwNTksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VIZWFkZXIoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogaGVhZGVyLCB1bnNpZ25lZCBoZWFkZXJMZW5ndAogICAgIEFTU0VSVChm
aW5kKGhlYWRlciwgaGVhZGVyTGVuZ3RoLCAnOicpICE9IG5vdEZvdW5kKTsKICAgICB1bnNpZ25l
ZCBjb2xvblBvc2l0aW9uID0gZmluZChoZWFkZXIsIGhlYWRlckxlbmd0aCwgJzonKTsKIAotICAg
IC8vIFNhdmUgbWVtb3J5IGJ5IHB1dHRpbmcgdGhlIGhlYWRlciBuYW1lcyBpbnRvIGF0b21pYyBz
dHJpbmdzIHNvIGVhY2ggaXMgc3RvcmVkIG9ubHkgb25jZSwKLSAgICAvLyBldmVuIHRob3VnaCB0
aGUgc2V0SFRUUEhlYWRlckZpZWxkIGZ1bmN0aW9uIGRvZXMgbm90IHJlcXVpcmUgYW4gYXRvbWlj
IHN0cmluZy4KKyAgICAvLyBTYXZlIG1lbW9yeSBieSBwdXR0aW5nIHRoZSBoZWFkZXIgbmFtZXMg
aW50byBhdG9tIHN0cmluZ3Mgc28gZWFjaCBpcyBzdG9yZWQgb25seSBvbmNlLAorICAgIC8vIGV2
ZW4gdGhvdWdoIHRoZSBzZXRIVFRQSGVhZGVyRmllbGQgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWly
ZSBhbiBhdG9tIHN0cmluZy4KICAgICBBdG9tU3RyaW5nIGhlYWRlck5hbWUgeyBoZWFkZXIsIGNv
bG9uUG9zaXRpb24gfTsKICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgeyBoZWFkZXIgKyBjb2xvblBv
c2l0aW9uICsgMSwgaGVhZGVyTGVuZ3RoIC0gY29sb25Qb3NpdGlvbiAtIDEgfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9BcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOGUwNTI2MTc3Yjc5NjI3Yzc3ZDk5ZWNi
ZDY3NzdiOTc2OThiOGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9BcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci0KLWNsYXNzIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0
ZW5lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGxpY2F0aW9uV2lsbFJlc2lnbkFj
dGl2ZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgp
IHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+QXBwbGljYXRpb25TdGF0ZUNoYW5nZUxp
c3RlbmVyKCkgPSBkZWZhdWx0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggYmY0M2E4N2ViNTNlODUxZTBlNTkxYWJjNmZkNTdlZDdiYzQ3MWFkNi4u
MTdjNmQ5NzNjY2ZmNDQ5YjRjYjQwMWRlNDVmYWNjZWI0YzJmMmI1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJBY3Rpdml0
eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJBbHRlcm5hdGl2ZVRleHRDbGllbnQu
aCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgotI2luY2x1ZGUgIkFwcGxp
Y2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvci5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKICNpbmNsdWRlICJCYWNr
Rm9yd2FyZENsaWVudC5oIgpAQCAtMzg1LDExICszODQsMTEgQEAgdm9pZCBQYWdlOjpjbGVhclBy
ZXZpb3VzSXRlbUZyb21BbGxQYWdlcyhIaXN0b3J5SXRlbSogaXRlbSkKIHVpbnQ2NF90IFBhZ2U6
OnJlbmRlclRyZWVTaXplKCkgY29uc3QKIHsKICAgICB1aW50NjRfdCB0b3RhbCA9IDA7Ci0gICAg
Zm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1l
bnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB0b3RhbCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygp
LT5yZW5kZXJlckNvdW50KCk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbWFrZSBm
b3JFYWNoRG9jdW1lbnQgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24gdG8gYXZvaWQgdGhpcyBjb25z
dF9jYXN0PworICAgIGNvbnN0X2Nhc3Q8UGFnZSY+KCp0aGlzKS5mb3JFYWNoRG9jdW1lbnQoWyZd
IChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBk
b2N1bWVudC5yZW5kZXJWaWV3KCkpCisgICAgICAgICAgICB0b3RhbCArPSByZW5kZXJWaWV3LT5y
ZW5kZXJlckNvdW50KCk7CisgICAgfSk7CiAgICAgcmV0dXJuIHRvdGFsOwogfQogCkBAIC01NjYs
NyArNTY1LDcgQEAgdm9pZCBQYWdlOjppbml0R3JvdXAoKQogCiB2b2lkIFBhZ2U6OnVwZGF0ZVN0
eWxlQWZ0ZXJDaGFuZ2VJbkVudmlyb25tZW50KCkKIHsKLSAgICBmb3JFYWNoRG9jdW1lbnQoW10o
RG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYg
ZG9jdW1lbnQpIHsKICAgICAgICAgaWYgKGF1dG8qIHN0eWxlUmVzb2x2ZXIgPSBkb2N1bWVudC5z
dHlsZVNjb3BlKCkucmVzb2x2ZXJJZkV4aXN0cygpKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwogICAgICAgICBkb2N1bWVu
dC5zY2hlZHVsZUZ1bGxTdHlsZVJlYnVpbGQoKTsKQEAgLTU4NCwxMCArNTgzLDkgQEAgdm9pZCBQ
YWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50
KCkKIHZvaWQgUGFnZTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCkKIHsKICAgICAv
LyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdHJ5aW5n
IHRvIGFkZCBpbiBkaWZmZXJlbnQgY2FsbCBzaXRlcy4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkp
Ci0gICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTY29wZSgpLmRpZENoYW5nZVN0eWxlU2hlZXRF
bnZpcm9ubWVudCgpOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBk
b2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlU3R5bGVT
aGVldEVudmlyb25tZW50KCk7CisgICAgfSk7CiB9CiAKIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdp
bnMoYm9vbCByZWxvYWQpCkBAIC05MDYsMTEgKzkwNCw5IEBAIHVpbnQzMl90IFBhZ2U6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCkKIAogdm9p
ZCBQYWdlOjp1bm1hcmtBbGxUZXh0TWF0Y2hlcygpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOwotICAgIGRvIHsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwotICAgICAgICBmcmFt
ZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCB0cnVlLCBDYW5XcmFwOjpObyk7Ci0gICAgfSB3aGls
ZSAoZnJhbWUpOworICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7
CisgICAgICAgIGRvY3VtZW50Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2Vy
OjpUZXh0TWF0Y2gpOworICAgIH0pOwogfQogCiBzdGF0aWMgYm9vbCBpc0VkaXRhYmxlVGV4dElu
cHV0RWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtOTI2LDEzICs5MjIsMTAgQEAg
c3RhdGljIGJvb2wgaXNFZGl0YWJsZVRleHRJbnB1dEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxl
bWVudCkKIFZlY3RvcjxSZWY8RWxlbWVudD4+IFBhZ2U6OmVkaXRhYmxlRWxlbWVudHNJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBzZWFyY2hSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSBjb25zdAog
ewogICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8qIGZyYW1l
ID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAg
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQorICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgbWFrZSBmb3JFYWNoRG9jdW1lbnQgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24g
dG8gYXZvaWQgdGhpcyBjb25zdF9jYXN0PworICAgIGNvbnN0X2Nhc3Q8UGFnZSY+KCp0aGlzKS5m
b3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgRGVxdWU8
Tm9kZSo+IG5vZGVzVG9TZWFyY2g7Ci0gICAgICAgIG5vZGVzVG9TZWFyY2guYXBwZW5kKGRvY3Vt
ZW50KTsKKyAgICAgICAgbm9kZXNUb1NlYXJjaC5hcHBlbmQoJmRvY3VtZW50KTsKICAgICAgICAg
d2hpbGUgKCFub2Rlc1RvU2VhcmNoLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXV0byogbm9k
ZSA9IG5vZGVzVG9TZWFyY2gudGFrZUZpcnN0KCk7CiAKQEAgLTk0OCw3ICs5NDEsNyBAQCBWZWN0
b3I8UmVmPEVsZW1lbnQ+PiBQYWdlOjplZGl0YWJsZUVsZW1lbnRzSW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYgc2VhcmNoUmVjdEluUgogICAgICAgICAgICAgaWYgKHNlYXJjaFJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMuaW50ZXJzZWN0cyhlbGVtZW50LmNsaWVudFJlY3QoKSkpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQotICAgIH0KKyAgICB9KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDAzLDE4ICs5OTYsMTkgQEAgRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQmIFBhZ2U6OmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkgY29uc3QKIAog
dm9pZCBQYWdlOjpzZXRNZWRpYVZvbHVtZShmbG9hdCB2b2x1bWUpCiB7Ci0gICAgaWYgKHZvbHVt
ZSA8IDAgfHwgdm9sdW1lID4gMSkKKyAgICBpZiAoISh2b2x1bWUgPj0gMCAmJiB2b2x1bWUgPD0g
MSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX21lZGlhVm9sdW1lID09IHZvbHVtZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tZWRpYVZvbHVtZSA9IHZvbHVtZTsKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5tZWRpYVZvbHVt
ZURpZENoYW5nZSgpOwotICAgIH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICBmb3JFYWNoTWVk
aWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGVsZW1l
bnQubWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKKyNlbmRpZgogfQogCiB2b2lkIFBh
Z2U6OnNldFpvb21lZE91dFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKQEAgLTEwMzQsNTAg
KzEwMjgsMzEgQEAgdm9pZCBQYWdlOjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNv
bnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgaW5TdGFibGUKICAgICBSZWZQdHI8RnJhbWVWaWV3
PiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKIAogICAgIGlmIChzY2FsZSA9PSBtX3BhZ2VTY2Fs
ZUZhY3RvcikgewotICAgICAgICBpZiAodmlldyAmJiB2aWV3LT5zY3JvbGxQb3NpdGlvbigpICE9
IG9yaWdpbikgewotICAgICAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNQYWdlU2NhbGluZygp
KQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKLQotICAgICAgICAgICAgaWYgKCF2aWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmco
KSkKLSAgICAgICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihvcmlnaW4pOwotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB2aWV3LT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUob3JpZ2luKTsKLSNlbmRpZgot
ICAgICAgICB9Ci0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICAgICAgaWYg
KGluU3RhYmxlU3RhdGUpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRBbmRTdGFibGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnNj
cm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luICYmICF2aWV3LT5kZWxlZ2F0ZXNQYWdlU2NhbGluZygp
KQorICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGU7
CiAKLSAgICBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlOworICAgICAgICBpZiAoIXZpZXctPmRl
bGVnYXRlc1BhZ2VTY2FsaW5nKCkpIHsKKyAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0
QWZ0ZXJWaWV3Q29uZmlndXJhdGlvbkNoYW5nZSgpOworICAgICAgICAgICAgdmlldy0+c2V0TmVl
ZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CiAKLSAgICBpZiAoIXZpZXctPmRlbGVnYXRl
c1BhZ2VTY2FsaW5nKCkpIHsKLSAgICAgICAgdmlldy0+c2V0TmVlZHNMYXlvdXRBZnRlclZpZXdD
b25maWd1cmF0aW9uQ2hhbmdlKCk7Ci0gICAgICAgIHZpZXctPnNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgZG9jdW1lbnQtPnJlc29sdmVTdHlsZShEb2N1
bWVudDo6UmVzb2x2ZVN0eWxlVHlwZTo6UmVidWlsZCk7CiAKLSAgICAgICAgZG9jdW1lbnQtPnJl
c29sdmVTdHlsZShEb2N1bWVudDo6UmVzb2x2ZVN0eWxlVHlwZTo6UmVidWlsZCk7CisgICAgICAg
ICAgICAvLyBUcmFuc2Zvcm0gY2hhbmdlIG9uIFJlbmRlclZpZXcgZG9lc24ndCB0cmlnZ2VyIHJl
cGFpbnQgb24gbm9uLWNvbXBvc2l0ZWQgY29udGVudHMuCisgICAgICAgICAgICBtYWluRnJhbWUo
KS52aWV3KCktPmludmFsaWRhdGVSZWN0KEludFJlY3QoTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0
KCkpKTsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIFRyYW5zZm9ybSBjaGFuZ2Ugb24gUmVuZGVy
VmlldyBkb2Vzbid0IHRyaWdnZXIgcmVwYWludCBvbiBub24tY29tcG9zaXRlZCBjb250ZW50cy4K
LSAgICAgICAgbWFpbkZyYW1lKCkudmlldygpLT5pbnZhbGlkYXRlUmVjdChJbnRSZWN0KExheW91
dFJlY3Q6OmluZmluaXRlUmVjdCgpKSk7Ci0gICAgfQorICAgICAgICBtYWluRnJhbWUoKS5kZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIAotICAgIG1haW5GcmFtZSgpLmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgICAgICBpZiAodmlldyAmJiB2aWV3LT5maXhl
ZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkpCisgICAgICAgICAgICB2aWV3LT5zZXRW
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRMYXlvdXQoKTsKIAotICAgIGlmICh2aWV3ICYm
IHZpZXctPmZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSkKLSAgICAgICAgdmll
dy0+c2V0Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KCk7Ci0KLSAgICBpZiAo
dmlldyAmJiB2aWV3LT5zY3JvbGxQb3NpdGlvbigpICE9IG9yaWdpbikgewotICAgICAgICBpZiAo
IXZpZXctPmRlbGVnYXRlc1BhZ2VTY2FsaW5nKCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKSAm
JiBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5uZWVkc0xheW91dCgpICYmIHZpZXctPmRpZEZpcnN0
TGF5b3V0KCkpCisgICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0g
b3JpZ2luICYmICF2aWV3LT5kZWxlZ2F0ZXNQYWdlU2NhbGluZygpICYmIGRvY3VtZW50LT5yZW5k
ZXJWaWV3KCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3
LT5kaWRGaXJzdExheW91dCgpKQogICAgICAgICAgICAgdmlldy0+bGF5b3V0Q29udGV4dCgpLmxh
eW91dCgpOworICAgIH0KIAorICAgIGlmICh2aWV3ICYmIHZpZXctPnNjcm9sbFBvc2l0aW9uKCkg
IT0gb3JpZ2luKSB7CiAgICAgICAgIGlmICghdmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAg
ICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihvcmlnaW4pOwogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKQEAgLTEwODgsMTEgKzEwNjMsOSBAQCB2b2lkIFBhZ2U6OnNldFBh
Z2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCBp
blN0YWJsZQogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoaW5T
dGFibGVTdGF0ZSkgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3Rh
YmxlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudChbXSAoSFRNTE1l
ZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICAgICAgZWxlbWVudC5wYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCk7CisgICAgICAgIH0pOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGluU3RhYmxlU3RhdGUpOwpAQCAtMTEzNywyMSArMTExMCwyNCBAQCB2b2lkIFBhZ2U6OnNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1
c2VySW50ZQogICAgICAgICByZXR1cm47CiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24gPSB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOworCiAjaWYgRU5BQkxFKE1FRElB
X0NPTlRST0xTX1NDUklQVCkKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwot
ICAgIH0KKyAgICBmb3JFYWNoTWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVt
ZW50KSB7CisgICAgICAgIGVsZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWQoKTsKKyAgICB9KTsKICNlbmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQorCiB2b2lkIFBh
Z2U6OnVwZGF0ZU1lZGlhRWxlbWVudFJhdGVDaGFuZ2VSZXN0cmljdGlvbnMoKQogewotICAgIGZv
ciAoYXV0byogbWVkaWFFbGVtZW50IDogSFRNTE1lZGlhRWxlbWVudDo6YWxsTWVkaWFFbGVtZW50
cygpKQotICAgICAgICBtZWRpYUVsZW1lbnQtPnVwZGF0ZVJhdGVDaGFuZ2VSZXN0cmljdGlvbnMo
KTsKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VkIHRvIGNhbGwgdGhpcyBvbiBhbGwgbWVkaWEgZWxl
bWVudHMsIHNlZW1pbmdseSBieSBhY2NpZGVudC4gQnV0IHdhcyB0aGVyZSBzb21lIGFkdmFudGFn
ZSB0byB0aGF0IGZvciBlbGVtZW50cyBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlPworICAgIGZv
ckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAg
ICAgZWxlbWVudC51cGRhdGVSYXRlQ2hhbmdlUmVzdHJpY3Rpb25zKCk7CisgICAgfSk7CiB9CisK
ICNlbmRpZgogCiB2b2lkIFBhZ2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKQEAgLTEzMzIs
MzUgKzEzMDgsMzcgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQogCiAgICAgLy8gRmx1
c2ggYXV0b2ZvY3VzIGNhbmRpZGF0ZXMKIAotICAgIGZvckVhY2hEb2N1bWVudChbJl0oRG9jdW1l
bnQmIGRvY3VtZW50KSB7CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKICAgICAgICAgZG9jdW1lbnQucnVuUmVzaXplU3RlcHMoKTsKICAgICB9KTsKIAotICAg
IGZvckVhY2hEb2N1bWVudChbJl0oRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgZm9yRWFjaERv
Y3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQucnVuU2Ny
b2xsU3RlcHMoKTsKICAgICB9KTsKIAotICAgIGZvckVhY2hEb2N1bWVudChbJl0oRG9jdW1lbnQm
IGRvY3VtZW50KSB7CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQp
IHsKICAgICAgICAgZG9jdW1lbnQuZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2Vz
KCk7ICAgICAgICAKICAgICB9KTsKIAotICAgIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBkb2N1bWVu
dHMgPSBjb2xsZWN0RG9jdW1lbnRzKCk7IC8vIFRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2Fs
bGJhY2tzIG1heSBjaGFuZ2UgdGhlIGZyYW1lIGhpZXJhcmNoeSBvZiB0aGUgcGFnZQotICAgIGZv
ciAoYXV0byYgZG9jdW1lbnQgOiBkb2N1bWVudHMpIHsKLSAgICAgICAgRE9NSGlnaFJlc1RpbWVT
dGFtcCB0aW1lc3RhbXAgPSBkb2N1bWVudC0+ZG9tV2luZG93KCktPm5vd1RpbWVzdGFtcCgpOwot
ICAgICAgICBkb2N1bWVudC0+dXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRFdmVudHModGltZXN0YW1w
KTsKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAg
ICBET01IaWdoUmVzVGltZVN0YW1wIHRpbWVzdGFtcCA9IGRvY3VtZW50LmRvbVdpbmRvdygpLT5u
b3dUaW1lc3RhbXAoKTsKKyAgICAgICAgZG9jdW1lbnQudXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRF
dmVudHModGltZXN0YW1wKTsKICAgICAgICAgLy8gRklYTUU6IFJ1biB0aGUgZnVsbHNjcmVlbiBz
dGVwcy4KLSAgICAgICAgZG9jdW1lbnQtPnNlcnZpY2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFja3ModGltZXN0YW1wKTsKLSAgICB9CisgICAgICAgIGRvY3VtZW50LnNlcnZpY2VSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDYWxsYmFja3ModGltZXN0YW1wKTsKKyAgICB9KTsKIAogICAgIGxheW91
dElmTmVlZGVkKCk7CiAKICNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQotICAgIGZv
ciAoYXV0byYgZG9jdW1lbnQgOiBkb2N1bWVudHMpCi0gICAgICAgIGRvY3VtZW50LT51cGRhdGVJ
bnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKTsKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3Vt
ZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC51cGRhdGVJbnRlcnNlY3Rpb25PYnNl
cnZhdGlvbnMoKTsKKyAgICB9KTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKFJFU0laRV9PQlNFUlZF
UikKLSAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogZG9jdW1lbnRzKQotICAgICAgICBkb2N1bWVu
dC0+dXBkYXRlUmVzaXplT2JzZXJ2YXRpb25zKCp0aGlzKTsKKyAgICBmb3JFYWNoRG9jdW1lbnQo
WyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQudXBkYXRlUmVzaXpl
T2JzZXJ2YXRpb25zKCp0aGlzKTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgbGF5b3V0SWZOZWVk
ZWQoKTsKQEAgLTEzNjksMzcgKzEzNDcsMzIgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmco
KQogdm9pZCBQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKICAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IHRydWU7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsK
LSAgICB9CisKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewor
ICAgICAgICBkb2N1bWVudC5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJh
Y2tzKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25z
KCkKIHsKICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXJDYWxsYmFja3MoKTsKLSAgICB9CisKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3Vt
ZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5yZXN1bWVTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKKyAgICB9KTsKIH0KIAogZW51bSBjbGFzcyBUaHJvdHRs
aW5nUmVhc29uT3BlcmF0aW9uIHsgQWRkLCBSZW1vdmUgfTsKIHN0YXRpYyB2b2lkIHVwZGF0ZVNj
cmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oUGFnZSYgcGFnZSwgVGhyb3R0bGluZ1Jl
YXNvbk9wZXJhdGlvbiBvcGVyYXRpb24sIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhy
b3R0bGluZ1JlYXNvbiByZWFzb24pCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBp
ZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8qIHNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIoKTsKLSAgICAgICAgaWYgKCFzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAob3BlcmF0aW9uID09IFRocm90dGxpbmdS
ZWFzb25PcGVyYXRpb246OkFkZCkKLSAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci0+YWRkVGhyb3R0bGluZ1JlYXNvbihyZWFzb24pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24o
cmVhc29uKTsKLSAgICB9CisgICAgcGFnZS5mb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYg
ZG9jdW1lbnQpIHsKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBkb2N1bWVudC5zY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9
PSBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9uOjpBZGQpCisgICAgICAgICAgICAgICAgY29udHJv
bGxlci0+YWRkVGhyb3R0bGluZ1JlYXNvbihyZWFzb24pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24ocmVhc29uKTsK
KyAgICAgICAgfQorICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50
ZXJuYWwoYm9vbCBpc1Zpc3VhbGx5SWRsZSkKQEAgLTE0MTEsNyArMTM4NCw3IEBAIHZvaWQgUGFn
ZTo6aGFuZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQog
ewogICAgIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oKnRoaXMsIGlz
TG93UG93ZXJNb2RlRW5hYmxlZCA/IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFkZCA6IFRo
cm90dGxpbmdSZWFzb25PcGVyYXRpb246OlJlbW92ZSwgU2NyaXB0ZWRBbmltYXRpb25Db250cm9s
bGVyOjpUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGUpOwogICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkgewotICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQp
IHsKICAgICAgICAgICAgIGlmIChhdXRvIHRpbWVsaW5lID0gZG9jdW1lbnQuZXhpc3RpbmdUaW1l
bGluZSgpKQogICAgICAgICAgICAgICAgIHRpbWVsaW5lLT51cGRhdGVUaHJvdHRsaW5nU3RhdGUo
KTsKICAgICAgICAgfSk7CkBAIC0xNDQ2LDEwICsxNDE5LDkgQEAgdm9pZCBQYWdlOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiAgICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0g
U3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRG
OC5zaXplKCkpOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5l
eHRlbnNpb25TdHlsZVNoZWV0cygpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKLSAgICB9CisgICAg
Zm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1l
bnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CisgICAgfSk7
CiB9CiAKIGNvbnN0IFN0cmluZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb25zdApAQCAtMTUw
NCwzMCArMTQ3NiwyMyBAQCB2b2lkIFBhZ2U6OnVzZXJBZ2VudENoYW5nZWQoKQogCiB2b2lkIFBh
Z2U6OmludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0
ZSgpLmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1
bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnZpc2l0ZWRM
aW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgIH0pOwogfQogCiB2
b2lkIFBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hh
c2gpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFm
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlu
a0hhc2gpOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKKyAgICAgICAgZG9jdW1lbnQudmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHls
ZUZvckxpbmsobGlua0hhc2gpOworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OmludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9ICZtX21haW5GcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBkb2N1bWVudC0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1
bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMo
KS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBQYWdlOjpzZXREZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTE2MTcsMTAg
KzE1ODIsOSBAQCB2b2lkIFBhZ2U6OnNldFRpbWVyVGhyb3R0bGluZ1N0YXRlKFRpbWVyVGhyb3R0
bGluZ1N0YXRlIHN0YXRlKQogCiAgICAgLy8gV2hlbiB0aHJvdHRsaW5nIGlzIGRpc2FibGVkLCBy
ZWxlYXNlIGFsbCB0aHJvdHRsZWQgdGltZXJzLgogICAgIGlmIChzdGF0ZSA9PSBUaW1lclRocm90
dGxpbmdTdGF0ZTo6RGlzYWJsZWQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRDaGFuZ2VUaW1lckFsaWdubWVudEludGVydmFsKCk7
Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmRpZENoYW5nZVRpbWVyQWxpZ25tZW50SW50ZXJ2
YWwoKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCkBAIC0xNjc5LDE4ICsxNjQzLDE2IEBAIHZv
aWQgUGFnZTo6ZG9tVGltZXJBbGlnbm1lbnRJbnRlcnZhbEluY3JlYXNlVGltZXJGaXJlZCgpCiAg
ICAgQVNTRVJUKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5j
cmVhc2VzKCkpOwogICAgIEFTU0VSVChtX3RpbWVyVGhyb3R0bGluZ1N0YXRlID09IFRpbWVyVGhy
b3R0bGluZ1N0YXRlOjpFbmFibGVkSW5jcmVhc2luZyk7CiAgICAgQVNTRVJUKG1fZG9tVGltZXJB
bGlnbm1lbnRJbnRlcnZhbCA8IG1fZG9tVGltZXJBbGlnbm1lbnRJbnRlcnZhbEluY3JlYXNlTGlt
aXQpOwotICAgIAorCiAgICAgLy8gQWxpZ25tZW50IGludGVydmFsIGlzIGluY3JlYXNlZCB0byBl
cXVhbCB0aGUgdGltZSB0aGUgcGFnZSBoYXMgYmVlbiB0aHJvdHRsZWQsIHRvIGEgbGltaXQuCiAg
ICAgdXBkYXRlRE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpOwogfQogCiB2b2lkIFBhZ2U6OmRu
c1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5pbml0RE5TUHJlZmV0Y2goKTsKLSAgICB9Cisg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9j
dW1lbnQuaW5pdEROU1ByZWZldGNoKCk7CisgICAgfSk7CiB9CiAKIFZlY3RvcjxSZWY8UGx1Z2lu
Vmlld0Jhc2U+PiBQYWdlOjpwbHVnaW5WaWV3cygpCkBAIC0xNzEwLDExICsxNjcyLDkgQEAgVmVj
dG9yPFJlZjxQbHVnaW5WaWV3QmFzZT4+IFBhZ2U6OnBsdWdpblZpZXdzKCkKIAogdm9pZCBQYWdl
OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlk
Q2hhbmdlKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3Vt
ZW50KSB7CisgICAgICAgIGRvY3VtZW50LnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7
CisgICAgfSk7CiAKICAgICAvLyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3cyBpbiB0byBhIHZlY3Rv
ciB0byBlbnN1cmUgdGhhdCBhY3Rpb24gdGhlIHBsdWctaW4gdGFrZXMKICAgICAvLyBmcm9tIGJl
bG93IHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgbGlm
ZXRpbWUuCkBAIC0xNzI1LDEwICsxNjg1LDkgQEAgdm9pZCBQYWdlOjpzdG9yYWdlQmxvY2tpbmdT
dGF0ZUNoYW5nZWQoKQogdm9pZCBQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSh1aW50NjRfdCBz
b3VyY2VFbGVtZW50SUQpCiB7CiAgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0
YXRlID0gTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nOwotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgICAgIHN0YXRlIHw9IGRvY3VtZW50LT5tZWRpYVN0YXRlKCk7Ci0gICAgfQor
ICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBz
dGF0ZSB8PSBkb2N1bWVudC5tZWRpYVN0YXRlKCk7CisgICAgfSk7CiAKICAgICBpZiAoc3RhdGUg
PT0gbV9tZWRpYVN0YXRlKQogICAgICAgICByZXR1cm47CkBAIC0xNzQ3LDYgKzE3MDYsNyBAQCB2
b2lkIFBhZ2U6OnNjaGVkdWxlUGxheWJhY2tDb250cm9sc01hbmFnZXJVcGRhdGUoKQogfQogCiAj
aWYgRU5BQkxFKFZJREVPKQorCiB2b2lkIFBhZ2U6OnBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVXBk
YXRlVGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKGF1dG8gYmVzdE1lZGlhRWxlbWVudCA9IEhUTUxN
ZWRpYUVsZW1lbnQ6OmJlc3RNZWRpYUVsZW1lbnRGb3JTaG93aW5nUGxheWJhY2tDb250cm9sc01h
bmFnZXIoTWVkaWFFbGVtZW50U2Vzc2lvbjo6UGxheWJhY2tDb250cm9sc1B1cnBvc2U6OkNvbnRy
b2xzTWFuYWdlcikpCkBAIC0xNzU0LDYgKzE3MTQsNyBAQCB2b2lkIFBhZ2U6OnBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgZWxzZQogICAgICAgICBjaHJvbWUo
KS5jbGllbnQoKS5jbGVhclBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CiB9CisKICNlbmRpZgog
CiB2b2lkIFBhZ2U6OnNldE11dGVkKE1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBtdXRl
ZCkKQEAgLTE3NjMsMzIgKzE3MjQsMjYgQEAgdm9pZCBQYWdlOjpzZXRNdXRlZChNZWRpYVByb2R1
Y2VyOjpNdXRlZFN0YXRlRmxhZ3MgbXV0ZWQpCiAKICAgICBtX211dGVkU3RhdGUgPSBtdXRlZDsK
IAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChb
XSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnBhZ2VNdXRlZFN0YXRl
RGlkQ2hhbmdlKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgUGFnZTo6c3RvcE1lZGlhQ2FwdHVyZSgp
CiB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN0b3BNZWRpYUNhcHR1cmUoKTsKLSAgICB9
CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAg
ZG9jdW1lbnQuc3RvcE1lZGlhQ2FwdHVyZSgpOworICAgIH0pOwogI2VuZGlmCiB9CiAKIHZvaWQg
UGFnZTo6c3RvcEFsbE1lZGlhUGxheWJhY2soKQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdG9wQWxsTWVkaWFQbGF5YmFj
aygpOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkg
eworICAgICAgICBkb2N1bWVudC5zdG9wQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0pOwogI2Vu
ZGlmCiB9CiAKQEAgLTE3OTksMTAgKzE3NTQsOSBAQCB2b2lkIFBhZ2U6OnN1c3BlbmRBbGxNZWRp
YVBsYXliYWNrKCkKICAgICBpZiAobV9tZWRpYVBsYXliYWNrSXNTdXNwZW5kZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnN1
c3BlbmRBbGxNZWRpYVBsYXliYWNrKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAo
RG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnN1c3BlbmRBbGxNZWRpYVBs
YXliYWNrKCk7CisgICAgfSk7CiAKICAgICBtX21lZGlhUGxheWJhY2tJc1N1c3BlbmRlZCA9IHRy
dWU7CiAjZW5kaWYKQEAgLTE4MTYsMTAgKzE3NzAsOSBAQCB2b2lkIFBhZ2U6OnJlc3VtZUFsbE1l
ZGlhUGxheWJhY2soKQogICAgICAgICByZXR1cm47CiAgICAgbV9tZWRpYVBsYXliYWNrSXNTdXNw
ZW5kZWQgPSBmYWxzZTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQucmVzdW1lQWxsTWVk
aWFQbGF5YmFjaygpOworICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTE4MzEsMTAgKzE3ODQsOSBA
QCB2b2lkIFBhZ2U6OnN1c3BlbmRBbGxNZWRpYUJ1ZmZlcmluZygpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX21lZGlhQnVmZmVyaW5nSXNTdXNwZW5kZWQgPSB0cnVlOwogCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+c3VzcGVuZEFsbE1lZGlhQnVmZmVyaW5nKCk7
Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Cisg
ICAgICAgIGRvY3VtZW50LnN1c3BlbmRBbGxNZWRpYUJ1ZmZlcmluZygpOworICAgIH0pOwogI2Vu
ZGlmCiB9CiAKQEAgLTE4NDUsMTQgKzE3OTcsMTQgQEAgdm9pZCBQYWdlOjpyZXN1bWVBbGxNZWRp
YUJ1ZmZlcmluZygpCiAgICAgICAgIHJldHVybjsKICAgICBtX21lZGlhQnVmZmVyaW5nSXNTdXNw
ZW5kZWQgPSBmYWxzZTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnQtPnJlc3VtZUFsbE1lZGlhQnVmZmVyaW5nKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVu
dChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnJlc3VtZUFsbE1l
ZGlhQnVmZmVyaW5nKCk7CisgICAgfSk7CiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShNRURJQV9T
RVNTSU9OKQorCiB2b2lkIFBhZ2U6OmhhbmRsZU1lZGlhRXZlbnQoTWVkaWFFdmVudFR5cGUgZXZl
bnRUeXBlKQogewogICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CkBAIC0xODczLDkgKzE4MjUsMTEg
QEAgdm9pZCBQYWdlOjpzZXRWb2x1bWVPZk1lZGlhRWxlbWVudChkb3VibGUgdm9sdW1lLCB1aW50
NjRfdCBlbGVtZW50SUQpCiAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBIVE1M
TWVkaWFFbGVtZW50OjplbGVtZW50V2l0aElEKGVsZW1lbnRJRCkpCiAgICAgICAgIGVsZW1lbnQt
PnNldFZvbHVtZSh2b2x1bWUsIEFTU0VSVF9OT19FWENFUFRJT04pOwogfQorCiAjZW5kaWYKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKKwogdm9pZCBQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25z
aXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCA+PSAwKTsKQEAg
LTE4ODYsNiArMTg0MCw3IEBAIHZvaWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVu
Y3koKSBjb25zdAogCiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCArIDEgPT0gc3ViZnJhbWVD
b3VudCk7CiB9CisKICNlbmRpZgogCiB2b2lkIFBhZ2U6OnJlc3VtZUFuaW1hdGluZ0ltYWdlcygp
CkBAIC0xOTU3LDI0ICsxOTEyLDYgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGUoYm9vbCBpc1Zp
c2libGUpCiAgICAgc2V0QWN0aXZpdHlTdGF0ZShzdGF0ZSk7CiB9CiAKLWVudW0gY2xhc3MgU1ZH
QW5pbWF0aW9uc1N0YXRlIHsgUGF1c2VkLCBSZXN1bWVkIH07Ci1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0U1ZHQW5pbWF0aW9uc1N0YXRlKFBhZ2UmIHBhZ2UsIFNWR0FuaW1hdGlvbnNTdGF0ZSBzdGF0
ZSkKLXsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGF1dG8qIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWRvY3VtZW50LT5zdmdFeHRlbnNpb25z
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc3RhdGUgPT0gU1ZHQW5p
bWF0aW9uc1N0YXRlOjpQYXVzZWQpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnBhdXNlQW5pbWF0aW9ucygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBk
b2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucGF1c2VBbmltYXRpb25zKCk7Ci0gICAg
fQotfQotCiB2b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQog
ewogICAgIC8vIEZJWE1FOiBUaGUgdmlzaWJpbGl0eSBzdGF0ZSBzaG91bGQgYmUgc3RvcmVkIG9u
IHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQuCkBAIC0xOTg0LDggKzE5MjEsMTEgQEAgdm9pZCBQYWdl
OjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgbV9pc1ByZXJl
bmRlciA9IGZhbHNlOwogCiAgICAgICAgIHJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucygpOworCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3Jp
ZW50YXRpb25VcGRhdGVzKCk7CisgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7CisgICAgICAgICAgICBkb2N1bWVudC5yZXN1bWVEZXZpY2VNb3Rpb25BbmRP
cmllbnRhdGlvblVwZGF0ZXMoKTsKKyAgICAgICAgfSk7CiAjZW5kaWYKIAogICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gbWFpbkZyYW1lKCkudmlldygpKQpAQCAtMTk5Myw3ICsxOTMzLDcg
QEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKIAogICAg
ICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFi
bGVkKCkpIHsKICAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAg
ICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5n
VGltZWxpbmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5yZXN1bWVBbmlt
YXRpb25zKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0yMDAxLDcgKzE5NDEsMTAgQEAgdm9p
ZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgICAg
ICAgICBtYWluRnJhbWUoKS5hbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBzZXRTVkdBbmltYXRpb25zU3RhdGUoKnRoaXMsIFNWR0FuaW1hdGlvbnNT
dGF0ZTo6UmVzdW1lZCk7CisgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuc3ZnRXh0ZW5zaW9ucygpKQorICAg
ICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnBhdXNlQW5pbWF0
aW9ucygpOworICAgICAgICB9KTsKIAogICAgICAgICByZXN1bWVBbmltYXRpbmdJbWFnZXMoKTsK
IApAQCAtMjAxNCw3ICsxOTU3LDcgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChi
b29sIGlzVmlzaWJsZSkKICAgICBpZiAoIWlzVmlzaWJsZSkgewogICAgICAgICBpZiAobV9zZXR0
aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKICAgICAg
ICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVh
Y2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAgIGZv
ckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAg
ICAgICAgICAgICAgIH0pOwpAQCAtMjAyMiwxMCArMTk2NSwxNSBAQCB2b2lkIFBhZ2U6OnNldElz
VmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIG1haW5GcmFt
ZSgpLmFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzZXRTVkdBbmltYXRpb25zU3RhdGUoKnRoaXMsIFNWR0FuaW1hdGlvbnNTdGF0ZTo6UGF1c2Vk
KTsKKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIGlmIChkb2N1bWVudC5zdmdFeHRlbnNpb25zKCkpCisgICAgICAgICAgICAgICAg
ZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnBhdXNlQW5pbWF0aW9ucygpOworICAgICAg
ICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHN1c3BlbmREZXZpY2VN
b3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKTsKKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFtd
IChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnN1c3BlbmREZXZp
Y2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKTsKKyAgICAgICAgfSk7CiAjZW5kaWYKIAog
ICAgICAgICBzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCk7CkBAIC0yMDM0LDEyICsxOTgyLDkg
QEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAg
ICAgICAgIHZpZXctPmhpZGUoKTsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmPERvY3VtZW50Pj4g
ZG9jdW1lbnRzOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fbWFpbkZyYW1lLmdldCgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBkb2N1
bWVudHMuYXBwZW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGRvY3Vt
ZW50IDogZG9jdW1lbnRzKQotICAgICAgICBkb2N1bWVudC0+dmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZCgpOworICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAg
ICAgIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBQYWdlOjpzZXRJc1ByZXJlbmRlcigpCkBAIC0yMTMwLDYgKzIwNzUsNyBAQCB2b2lkIFBhZ2U6
OndoZW5Vbm5lc3RlZChXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKIH0KIAogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCiBib29sIFBhZ2U6OnJlbW90ZUluc3BlY3Rpb25B
bGxvd2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5yZW1v
dGVEZWJ1Z2dpbmdBbGxvd2VkKCk7CkBAIC0yMTU0LDYgKzIxMDAsNyBAQCB2b2lkIFBhZ2U6OnJl
bW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCkgY29uc3QKIHsKICAgICBtX2luc3Bl
Y3RvckRlYnVnZ2FibGUtPnVwZGF0ZSgpOwogfQorCiAjZW5kaWYKIAogdm9pZCBQYWdlOjphZGRM
YXlvdXRNaWxlc3RvbmVzKE9wdGlvblNldDxMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9uZXMpCkBA
IC0yMzAzLDIyICsyMjUwLDYgQEAgdm9pZCBQYWdlOjphZGRSZWxldmFudFVucGFpbnRlZE9iamVj
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgTGF5b3V0UmVjdCYgb2IKICAgICBtX3JlbGV2
YW50VW5wYWludGVkUmVnaW9uLnVuaXRlKHNuYXBwZWRJbnRSZWN0KG9iamVjdFBhaW50UmVjdCkp
OwogfQogCi12b2lkIFBhZ2U6OnN1c3BlbmREZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0
ZXMoKQotewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5z
dXNwZW5kRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7Ci0gICAgfQotfQotCi12
b2lkIFBhZ2U6OnJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpCi17Ci0g
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZURldmlj
ZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpOwotICAgIH0KLX0KLQogdm9pZCBQYWdlOjpz
dXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogewogICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKQpAQCAtMjM5NSwxNCArMjMyNiwxNCBAQCB2b2lkIFBhZ2U6OmhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCkKIH0KIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKwogdm9pZCBQYWdlOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAo
RG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LmNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWQoKTsKKyAgICB9KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgUGFnZTo6Zm9yYmlkUHJv
bXB0cygpCkBAIC0yNTUwLDExICsyNDgxLDkgQEAgdm9pZCBQYWdlOjpzZXRTZXNzaW9uSUQoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIGlmICghcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFu
Z2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShtX3Nl
c3Npb25JRCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1
bWVudCkgeworICAgICAgICBkb2N1bWVudC5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSht
X3Nlc3Npb25JRCk7CisgICAgfSk7CiAKICAgICAvLyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3cyBp
biB0byBhIHZlY3RvciB0byBlbnN1cmUgdGhhdCBhY3Rpb24gdGhlIHBsdWctaW4gdGFrZXMKICAg
ICAvLyBmcm9tIGJlbG93IHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBhZmZl
Y3QgdGhlaXIgbGlmZXRpbWUuCkBAIC0yNjEwLDM5ICsyNTM5LDMyIEBAIHZvaWQgUGFnZTo6bW9j
a01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJEaXNtaXNzUG9wdXAoKQogCiB2b2lkIFBhZ2U6OnNl
dFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJn
ZXQ+JiYgdGFyZ2V0KQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnNldFBsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgdGFyZ2V0LmNvcHlS
ZWYoKSk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVu
dCkgeworICAgICAgICBkb2N1bWVudC5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHRhcmdl
dC5jb3B5UmVmKCkpOworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5RGlkQ2hhbmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFpbGFibGUpCiB7
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUp
OwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsK
KyAgICAgICAgZG9jdW1lbnQucGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29u
dGV4dElkLCBhdmFpbGFibGUpOworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OnNldFNob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNsaWVudElkLCBib29sIHNob3VsZFBsYXkpCiB7
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2xpZW50SWQsIHNob3VsZFBsYXkpOwotICAg
IH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAg
ICAgZG9jdW1lbnQuc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2xpZW50SWQsIHNob3Vs
ZFBsYXkpOworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0UGlja2VyV2Fz
RGlzbWlzc2VkKHVpbnQ2NF90IGNsaWVudElkKQogewotICAgIGZvciAoYXV0byogZnJhbWUgPSAm
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGxheWJhY2tUYXJnZXRQaWNrZXJXYXNEaXNt
aXNzZWQoY2xpZW50SWQpOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVu
dCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQucGxheWJhY2tUYXJnZXRQaWNrZXJXYXNE
aXNtaXNzZWQoY2xpZW50SWQpOworICAgIH0pOwogfQorCiAjZW5kaWYKIAogV2hlZWxFdmVudFRl
c3RNb25pdG9yJiBQYWdlOjplbnN1cmVXaGVlbEV2ZW50VGVzdE1vbml0b3IoKQpAQCAtMjY2MCwx
OSArMjU4MiwxOCBAQCBXaGVlbEV2ZW50VGVzdE1vbml0b3ImIFBhZ2U6OmVuc3VyZVdoZWVsRXZl
bnRUZXN0TW9uaXRvcigpCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCisKIHZvaWQgUGFnZTo6c2V0
QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wgZmxhZykKIHsKICAgICBpZiAo
bV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2sgPT0gZmxhZykKICAgICAgICAgcmV0
dXJuOwogICAgIG1fYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrID0gZmxhZzsKIAot
ICAgIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCi0gICAgICAgIGRvY3VtZW50cy5hcHBlbmQoKmZyYW1lLT5kb2N1bWVudCgp
KTsKLQotICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkb2N1bWVudHMpCi0gICAgICAgIGRvY3Vt
ZW50LT5hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCk7CisgICAgZm9y
RWFjaE1lZGlhRWxlbWVudChbXSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAg
ICBlbGVtZW50LmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQoKTsKKyAg
ICB9KTsKIH0KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTI3
MjgsNyArMjY0OSw3IEBAIHZvaWQgUGFnZTo6c2V0Q2FwdGlvblVzZXJQcmVmZXJlbmNlc1N0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0KQogCiB2b2lkIFBhZ2U6OmFjY2Vzc2liaWxp
dHlTZXR0aW5nc0RpZENoYW5nZSgpCiB7Ci0gICAgZm9yRWFjaERvY3VtZW50KFtdKGF1dG8mIGRv
Y3VtZW50KSB7CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChhdXRvJiBkb2N1bWVudCkgewogICAg
ICAgICBkb2N1bWVudC5zdHlsZVNjb3BlKCkuZXZhbHVhdGVNZWRpYVF1ZXJpZXNGb3JBY2Nlc3Np
YmlsaXR5U2V0dGluZ3NDaGFuZ2UoKTsKICAgICAgICAgZG9jdW1lbnQudXBkYXRlRWxlbWVudHNB
ZmZlY3RlZEJ5TWVkaWFRdWVyaWVzKCk7CiAgICAgICAgIGRvY3VtZW50LnNjaGVkdWxlVGltZWRS
ZW5kZXJpbmdVcGRhdGUoKTsKQEAgLTI3MzcsNyArMjY1OCw3IEBAIHZvaWQgUGFnZTo6YWNjZXNz
aWJpbGl0eVNldHRpbmdzRGlkQ2hhbmdlKCkKIAogdm9pZCBQYWdlOjphcHBlYXJhbmNlRGlkQ2hh
bmdlKCkKIHsKLSAgICBmb3JFYWNoRG9jdW1lbnQoW10oYXV0byYgZG9jdW1lbnQpIHsKKyAgICBm
b3JFYWNoRG9jdW1lbnQoW10gKGF1dG8mIGRvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50LnN0
eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKICAgICAgICAgZG9j
dW1lbnQuc3R5bGVTY29wZSgpLmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yQXBwZWFyYW5jZUNoYW5n
ZSgpOwogICAgICAgICBkb2N1bWVudC51cGRhdGVFbGVtZW50c0FmZmVjdGVkQnlNZWRpYVF1ZXJp
ZXMoKTsKQEAgLTI3NTIsMTEgKzI2NzMsOSBAQCB2b2lkIFBhZ2U6OnNldFVub2JzY3VyZWRTYWZl
QXJlYUluc2V0cyhjb25zdCBGbG9hdEJveEV4dGVudCYgaW5zZXRzKQogCiAgICAgbV91bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMgPSBpbnNldHM7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
ewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jb25zdGFudFByb3BlcnRpZXMoKS5kaWRDaGFu
Z2VTYWZlQXJlYUluc2V0cygpOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1
bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuY29uc3RhbnRQcm9wZXJ0aWVzKCku
ZGlkQ2hhbmdlU2FmZUFyZWFJbnNldHMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQYWdlOjpzZXRV
c2VTeXN0ZW1BcHBlYXJhbmNlKGJvb2wgdmFsdWUpCkBAIC0yNzY4LDE1ICsyNjg3LDExIEBAIHZv
aWQgUGFnZTo6c2V0VXNlU3lzdGVtQXBwZWFyYW5jZShib29sIHZhbHVlKQogCiAgICAgYXBwZWFy
YW5jZURpZENoYW5nZSgpOwogCi0gICAgZm9yIChhdXRvKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBh
dXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1
bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgLy8gU3lzdGVtIGFwcGVyYW5jZSBjaGFuZ2UgbWF5
IGFmZmVjdCBzdHlsZXNoZWV0IHBhcnNpbmcuIFdlIG5lZWQgdG8gcmVwYXJzZS4KLSAgICAgICAg
ZG9jdW1lbnQtPmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0g
ICAgICAgIGRvY3VtZW50LT5leHRlbnNpb25TdHlsZVNoZWV0cygpLmludmFsaWRhdGVJbmplY3Rl
ZFN0eWxlU2hlZXRDYWNoZSgpOwotICAgIH0KKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKS5jbGVhclBhZ2VVc2VyU2hlZXQoKTsKKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5z
aW9uU3R5bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBQYWdlOjplZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UsIGJvb2wgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwpCkBA
IC0yODM1LDM1ICsyNzUwLDMyIEBAIHZvaWQgUGFnZTo6c2V0RnVsbHNjcmVlbkluc2V0cyhjb25z
dCBGbG9hdEJveEV4dGVudCYgaW5zZXRzKQogewogICAgIGlmIChpbnNldHMgPT0gbV9mdWxsc2Ny
ZWVuSW5zZXRzKQogICAgICAgICByZXR1cm47CisKICAgICBtX2Z1bGxzY3JlZW5JbnNldHMgPSBp
bnNldHM7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1l
LT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5jb25zdGFudFByb3BlcnRpZXMoKS5kaWRDaGFuZ2VGdWxsc2NyZWVuSW5zZXRzKCk7
Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Cisg
ICAgICAgIGRvY3VtZW50LmNvbnN0YW50UHJvcGVydGllcygpLmRpZENoYW5nZUZ1bGxzY3JlZW5J
bnNldHMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQYWdlOjpzZXRGdWxsc2NyZWVuQXV0b0hpZGVE
dXJhdGlvbihTZWNvbmRzIGR1cmF0aW9uKQogewogICAgIGlmIChkdXJhdGlvbiA9PSBtX2Z1bGxz
Y3JlZW5BdXRvSGlkZUR1cmF0aW9uKQogICAgICAgICByZXR1cm47CisKICAgICBtX2Z1bGxzY3Jl
ZW5BdXRvSGlkZUR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y29uc3RhbnRQcm9wZXJ0aWVzKCkuc2V0RnVs
bHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oZHVyYXRpb24pOwotICAgIH0KKworICAgIGZvckVhY2hE
b2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5jb25z
dGFudFByb3BlcnRpZXMoKS5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbihkdXJhdGlvbik7
CisgICAgfSk7CiB9CiAKIHZvaWQgUGFnZTo6c2V0RnVsbHNjcmVlbkNvbnRyb2xzSGlkZGVuKGJv
b2wgaGlkZGVuKQogewogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5mdWxsc2NyZWVuTWFuYWdl
cigpLnNldEZ1bGxzY3JlZW5Db250cm9sc0hpZGRlbihoaWRkZW4pOwotICAgIH0KKyAgICBmb3JF
YWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQu
ZnVsbHNjcmVlbk1hbmFnZXIoKS5zZXRGdWxsc2NyZWVuQ29udHJvbHNIaWRkZW4oaGlkZGVuKTsK
KyAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhpZGRlbik7CiAjZW5kaWYKQEAgLTI5
MjUsMTIgKzI4MzcsNiBAQCBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXImIFBhZ2U6OnJlbmRlcmlu
Z1VwZGF0ZVNjaGVkdWxlcigpCiB9CiAKIHZvaWQgUGFnZTo6Zm9yRWFjaERvY3VtZW50KGNvbnN0
IEZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mIGZ1bmN0b3IpCi17Ci0gICAgZm9yIChhdXRvJiBk
b2N1bWVudCA6IGNvbGxlY3REb2N1bWVudHMoKSkKLSAgICAgICAgZnVuY3Rvcihkb2N1bWVudCk7
Ci19Ci0KLVZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBQYWdlOjpjb2xsZWN0RG9jdW1lbnRzKCkKIHsK
ICAgICBWZWN0b3I8UmVmPERvY3VtZW50Pj4gZG9jdW1lbnRzOwogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7CkBAIC0yOTM5LDE4ICsyODQ1LDI2IEBAIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBQ
YWdlOjpjb2xsZWN0RG9jdW1lbnRzKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBk
b2N1bWVudHMuYXBwZW5kKCpkb2N1bWVudCk7CiAgICAgfQotICAgIHJldHVybiBkb2N1bWVudHM7
CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3VtZW50cykKKyAgICAgICAgZnVuY3Rvcihk
b2N1bWVudCk7CiB9CiAKLXZvaWQgUGFnZTo6YXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkK
K3ZvaWQgUGFnZTo6Zm9yRWFjaE1lZGlhRWxlbWVudChjb25zdCBGdW5jdGlvbjx2b2lkKEhUTUxN
ZWRpYUVsZW1lbnQmKT4mIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9j
dW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50LmZvckVhY2hBcHBsaWNhdGlvblN0
YXRlQ2hhbmdlTGlzdGVuZXIoWyZdIChBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImIGxp
c3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lci5hcHBsaWNhdGlvbldpbGxSZXNpZ25BY3Rp
dmUoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGRvY3VtZW50LmZvckVhY2hNZWRpYUVsZW1lbnQo
ZnVuY3Rvcik7CiAgICAgfSk7CiB9CiAKK3ZvaWQgUGFnZTo6YXBwbGljYXRpb25XaWxsUmVzaWdu
QWN0aXZlKCkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZm9yRWFjaE1lZGlhRWxlbWVudChb
XSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBlbGVtZW50LmFwcGxpY2F0
aW9uV2lsbFJlc2lnbkFjdGl2ZSgpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgUGFnZTo6
YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQogewogICAgIG1fbGliV2ViUlRDUHJvdmlk
ZXItPnNldEFjdGl2ZShmYWxzZSk7CkBAIC0yOTYzLDExICsyODc3LDExIEBAIHZvaWQgUGFnZTo6
YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkKIAogdm9pZCBQYWdlOjphcHBsaWNhdGlv
bkRpZEJlY29tZUFjdGl2ZSgpCiB7Ci0gICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50LmZvckVhY2hBcHBsaWNhdGlvblN0YXRlQ2hh
bmdlTGlzdGVuZXIoWyZdIChBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImIGxpc3RlbmVy
KSB7Ci0gICAgICAgICAgICBsaXN0ZW5lci5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwot
ICAgICAgICB9KTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZm9yRWFjaE1lZGlhRWxlbWVudChb
XSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBlbGVtZW50LmFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCk7CiAgICAgfSk7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTMwNjgsMjUgKzI5ODIsMjIgQEAgdm9pZCBQYWdlOjpkaWRGaW5pc2hMb2FkaW5n
SW1hZ2VGb3JFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiB9CiAKICNpZiBFTkFC
TEUoVEVYVF9BVVRPU0laSU5HKQorCiB2b2lkIFBhZ2U6OnJlY29tcHV0ZVRleHRBdXRvU2l6aW5n
SW5BbGxGcmFtZXMoKQogewogICAgIEFTU0VSVChzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5h
YmxlZCgpICYmIHNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSk7
Ci0gICAgZm9yIChhdXRvKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8mIGRvY3VtZW50ID0gKmZy
YW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50LnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiBkZXNj
ZW5kYW50c09mVHlwZTxSZW5kZXJFbGVtZW50PigqZG9jdW1lbnQucmVuZGVyVmlldygpKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIG5lZWRzTGF5b3V0ID0gU3R5bGU6OkFkanVzdGVyOjphZGp1c3RG
b3JUZXh0QXV0b3NpemluZyhyZW5kZXJlci5tdXRhYmxlU3R5bGUoKSwgKmVsZW1lbnQpOwotICAg
ICAgICAgICAgICAgIGlmIChuZWVkc0xheW91dCkKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBk
b2N1bWVudCkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGRvY3VtZW50LnJlbmRl
clZpZXcoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByZW5kZXJlciA6IGRlc2NlbmRhbnRz
T2ZUeXBlPFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJWaWV3KSkgeworICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdEZvclRleHRBdXRvc2l6aW5nKHJlbmRlcmVy
Lm11dGFibGVTdHlsZSgpLCAqZWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJlci5zZXROZWVkc0xheW91dCgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgIH0KKyAgICB9KTsKIH0KKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggNWY0Y2ViMGEzNjUwYzQyYThlMTdkMTI2M2Y1Njg0
N2VmMTgxYzQ1My4uMDgxMjVlNTU5OGU5MDg5OTk1Nzc0Mjk3ZDFiMDhiYWQ2ZmU3MmUyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtODMsMzMgKzgzLDI3IEBAIG5hbWVzcGFj
ZSBJREJDbGllbnQgewogY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwogfQogCitjbGFzcyBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXI7CiBjbGFzcyBBbHRlcm5hdGl2ZVRleHRDbGllbnQ7
CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKIGNsYXNzIEF1dGhlbnRpY2F0b3JDb29y
ZGluYXRvcjsKIGNsYXNzIEJhY2tGb3J3YXJkQ29udHJvbGxlcjsKLWNsYXNzIEJhY2tGb3J3YXJk
Q2xpZW50OwogY2xhc3MgQ2FjaGVTdG9yYWdlUHJvdmlkZXI7CiBjbGFzcyBDaHJvbWU7Ci1jbGFz
cyBDaHJvbWVDbGllbnQ7CiBjbGFzcyBDb2xvcjsKLWNsYXNzIENvbnRleHRNZW51Q2xpZW50Owog
Y2xhc3MgQ29udGV4dE1lbnVDb250cm9sbGVyOwogY2xhc3MgQ29va2llSmFyOwotY2xhc3MgRE9N
UmVjdDsKIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRGF0YWJhc2VQcm92aWRlcjsKIGNsYXNz
IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OwogY2xhc3MgRHJhZ0NhcmV0Q29udHJvbGxlcjsKLWNs
YXNzIERyYWdDbGllbnQ7CiBjbGFzcyBEcmFnQ29udHJvbGxlcjsKIGNsYXNzIEVkaXRvckNsaWVu
dDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGb2N1c0NvbnRyb2xsZXI7CiBjbGFzcyBGcmFtZTsK
LWNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OwotY2xhc3MgSGlzdG9yeUl0ZW07CiBjbGFzcyBIVE1M
TWVkaWFFbGVtZW50OwotY2xhc3MgVXNlcklucHV0QnJpZGdlOworY2xhc3MgSGlzdG9yeUl0ZW07
CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xh
c3MgTGliV2ViUlRDUHJvdmlkZXI7CkBAIC0xMzIsNTAgKzEyNiwzOSBAQCBjbGFzcyBQbHVnaW5W
aWV3QmFzZTsKIGNsYXNzIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjsKIGNsYXNzIFBvaW50ZXJM
b2NrQ29udHJvbGxlcjsKIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsKLWNsYXNzIFByb2dyZXNzVHJh
Y2tlckNsaWVudDsKIGNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVu
ZGVyVGhlbWU7CiBjbGFzcyBSZXNvdXJjZVVzYWdlT3ZlcmxheTsKLWNsYXNzIFZpc2libGVTZWxl
Y3Rpb247CiBjbGFzcyBTY3JvbGxMYXRjaGluZ1N0YXRlOwotY2xhc3MgU2Nyb2xsYWJsZUFyZWE7
CiBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvcjsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFNvY2tldFByb3ZpZGVyOworY2xhc3MgU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50OwogY2xhc3MgU3RvcmFnZU5hbWVzcGFjZTsKIGNsYXNzIFN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlcjsKIGNsYXNzIFVzZXJDb250ZW50UHJvdmlkZXI7CitjbGFzcyBV
c2VySW5wdXRCcmlkZ2U7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudDsKLWNsYXNzIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlcjsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiBjbGFz
cyBWaXNpdGVkTGlua1N0b3JlOwogY2xhc3MgV2ViR0xTdGF0ZVRyYWNrZXI7Ci1jbGFzcyBTcGVl
Y2hTeW50aGVzaXNDbGllbnQ7CiBjbGFzcyBXaGVlbEV2ZW50RGVsdGFGaWx0ZXI7CiAKLXR5cGVk
ZWYgdWludDY0X3QgU2hhcmVkU3RyaW5nSGFzaDsKK3VzaW5nIFNoYXJlZFN0cmluZ0hhc2ggPSB1
aW50NjRfdDsKIAotZW51bSBGaW5kRGlyZWN0aW9uIHsKLSAgICBGaW5kRGlyZWN0aW9uRm9yd2Fy
ZCwKLSAgICBGaW5kRGlyZWN0aW9uQmFja3dhcmQKLX07CitlbnVtIGNsYXNzIENhbldyYXAgOiBi
b29sOworZW51bSBjbGFzcyBEaWRXcmFwIDogYm9vbDsKK2VudW0gY2xhc3MgUm91dGVTaGFyaW5n
UG9saWN5IDogdWludDhfdDsKK2VudW0gY2xhc3MgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2Fk
IDogYm9vbDsKIAotZW51bSBjbGFzcyBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7Ci0gICAgUmVz
cG9uc2l2ZSwKLSAgICBVbnJlc3BvbnNpdmUKLX07CitlbnVtIGNsYXNzIEV2ZW50VGhyb3R0bGlu
Z0JlaGF2aW9yIDogYm9vbCB7IFJlc3BvbnNpdmUsIFVucmVzcG9uc2l2ZSB9OwogCi1lbnVtIGNs
YXNzIENvbXBvc2l0aW5nUG9saWN5IDogdWludDhfdCB7CitlbnVtIGNsYXNzIENvbXBvc2l0aW5n
UG9saWN5IDogYm9vbCB7CiAgICAgTm9ybWFsLAogICAgIENvbnNlcnZhdGl2ZSwgLy8gVXNlZCBp
biBsb3cgbWVtb3J5IHNpdHVhdGlvbnMuCiB9OwogCi1lbnVtIGNsYXNzIENhbldyYXAgOiBib29s
OwotZW51bSBjbGFzcyBEaWRXcmFwIDogYm9vbDsKLWVudW0gY2xhc3MgUm91dGVTaGFyaW5nUG9s
aWN5IDogdWludDhfdDsKLWVudW0gY2xhc3MgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkIDog
Ym9vbDsKLQogY2xhc3MgUGFnZSA6IHB1YmxpYyBTdXBwbGVtZW50YWJsZTxQYWdlPiwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPFBhZ2U+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTMwOSwxMyArMjkyLDE0IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQmVmb3JlUHJpbnRFdmVudCgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hBZnRlclByaW50RXZlbnQoKTsKIAotICAg
IC8vIGZpbmQgYWxsIHRoZSBSYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgorICAgIC8vIEZp
bmQgYWxsIHRoZSBSYW5nZXMgZm9yIHRoZSBtYXRjaGluZyB0ZXh0LgogICAgIC8vIFVwb24gcmV0
dXJuLCBpbmRleEZvclNlbGVjdGlvbiB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAg
IC8vIDAgaWYgdGhlcmUgaXMgbm8gdXNlciBzZWxlY3Rpb24KICAgICAvLyB0aGUgaW5kZXggb2Yg
dGhlIGZpcnN0IHJhbmdlIGFmdGVyIHRoZSB1c2VyIHNlbGVjdGlvbgogICAgIC8vIE5vTWF0Y2hB
ZnRlclVzZXJTZWxlY3Rpb24gaWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgdGV4dCBhZnRlciB0aGUg
dXNlciBzZWxlY3Rpb24uCiAgICAgZW51bSB7IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb24gPSAt
MSB9OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNv
bnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCBpbnQgbWF4Q291bnQsIFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PiYsIGludCYgaW5kZXhGb3JTZWxlY3Rpb24pOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZFNjaGVkdWxlUGFpcihSZWY8U2NoZWR1bGVQYWlyPiYmKTsKQEAgLTM3OSwxMCArMzYzLDEwIEBA
IHB1YmxpYzoKICAgICBib29sIGVuY2xvc2VkSW5TY3JvbGxhYmxlQW5jZXN0b3JWaWV3KCkgY29u
c3QgeyByZXR1cm4gbV9lbmNsb3NlZEluU2Nyb2xsYWJsZUFuY2VzdG9yVmlldzsgfQogICAgIHZv
aWQgc2V0RW5jbG9zZWRJblNjcm9sbGFibGVBbmNlc3RvclZpZXcoYm9vbCBmKSB7IG1fZW5jbG9z
ZWRJblNjcm9sbGFibGVBbmNlc3RvclZpZXcgPSBmOyB9CiAjZW5kaWYKLSAgICAKKwogICAgIGJv
b2wgdXNlU3lzdGVtQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU3lzdGVtQXBwZWFy
YW5jZTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlU3lzdGVtQXBwZWFyYW5jZShi
b29sKTsKLSAgICAKKwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdXNlRGFya0FwcGVhcmFuY2Uo
KSBjb25zdDsKICAgICBib29sIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbDsgfQogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZShib29sIHVzZURhcmtBcHBl
YXJhbmNlLCBib29sIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxldmVsKTsKQEAgLTQzMywxMSAr
NDE3LDExIEBAIHB1YmxpYzoKICAgICBXaGVlbEV2ZW50RGVsdGFGaWx0ZXIqIHdoZWVsRXZlbnRE
ZWx0YUZpbHRlcigpIHsgcmV0dXJuIG1fcmVjZW50V2hlZWxFdmVudERlbHRhRmlsdGVyLmdldCgp
OyB9CiAgICAgUGFnZU92ZXJsYXlDb250cm9sbGVyJiBwYWdlT3ZlcmxheUNvbnRyb2xsZXIoKSB7
IHJldHVybiAqbV9wYWdlT3ZlcmxheUNvbnRyb2xsZXI7IH0KIAotI2lmIFBMQVRGT1JNKE1BQykK
LSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgKEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pKQogICAgIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXImIHNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKSB7IHJldHVybiAqbV9z
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyNlbmRpZgogCisj
aWYgUExBVEZPUk0oTUFDKQogICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUo
KTsKICAgICB2b2lkIHB1c2hOZXdMYXRjaGluZ1N0YXRlKCk7CiAgICAgdm9pZCBwb3BMYXRjaGlu
Z1N0YXRlKCk7CkBAIC01NTIsOCArNTM2LDYgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci0g
ICAgdm9pZCBzdXNwZW5kRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7Ci0gICAg
dm9pZCByZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICB2b2lkIHNldElzUGFpbnRpbmcoYm9vbCBwYWludGluZykgeyBtX2lzUGFp
bnRpbmcgPSBwYWludGluZzsgfQpAQCAtNzI4LDYgKzcxMCw5IEBAIHB1YmxpYzoKICAgICBEZXZp
Y2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyKiBkZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmdl
dCgpOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZm9yRWFjaERvY3VtZW50KGNvbnN0IFdURjo6RnVu
Y3Rpb248dm9pZChEb2N1bWVudCYpPiYpOworICAgIHZvaWQgZm9yRWFjaE1lZGlhRWxlbWVudChj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSFRNTE1lZGlhRWxlbWVudCYpPiYpOworCiBwcml2YXRl
OgogICAgIHN0cnVjdCBOYXZpZ2F0aW9uIHsKICAgICAgICAgUmVnaXN0cmFibGVEb21haW4gZG9t
YWluOwpAQCAtNzQxLDExICs3MjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SXNWaXNpYmxl
SW50ZXJuYWwoYm9vbCk7CiAgICAgdm9pZCBzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKGJvb2wp
OwogCi0jaWYgQVNTRVJUX0RJU0FCTEVECi0gICAgdm9pZCBjaGVja1N1YmZyYW1lQ291bnRDb25z
aXN0ZW5jeSgpIGNvbnN0IHsgfQotI2Vsc2UKICAgICB2b2lkIGNoZWNrU3ViZnJhbWVDb3VudENv
bnNpc3RlbmN5KCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIGVudW0gU2hvdWxkSGlnaGxpZ2h0TWF0
Y2hlcyB7IERvTm90SGlnaGxpZ2h0TWF0Y2hlcywgSGlnaGxpZ2h0TWF0Y2hlcyB9OwogICAgIGVu
dW0gU2hvdWxkTWFya01hdGNoZXMgeyBEb05vdE1hcmtNYXRjaGVzLCBNYXJrTWF0Y2hlcyB9OwpA
QCAtNzYyLDkgKzc0Myw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZUxvd01vZGVQb3dl
ckNoYW5nZShib29sKTsKIAotICAgIHZvaWQgZm9yRWFjaERvY3VtZW50KGNvbnN0IFdURjo6RnVu
Y3Rpb248dm9pZChEb2N1bWVudCYpPiYpOwotICAgIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBjb2xs
ZWN0RG9jdW1lbnRzKCk7Ci0KICAgICBlbnVtIGNsYXNzIFRpbWVyVGhyb3R0bGluZ1N0YXRlIHsg
RGlzYWJsZWQsIEVuYWJsZWQsIEVuYWJsZWRJbmNyZWFzaW5nIH07CiAgICAgdm9pZCBoaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBzZXRUaW1lclRo
cm90dGxpbmdTdGF0ZShUaW1lclRocm90dGxpbmdTdGF0ZSk7CkBAIC05NzgsOSArOTU2LDkgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVyZm9ybWFuY2VMb2dnaW5nPiBtX3BlcmZv
cm1hbmNlTG9nZ2luZzsKICNpZiBQTEFURk9STShNQUMpCiAgICAgVmVjdG9yPFNjcm9sbExhdGNo
aW5nU3RhdGU+IG1fbGF0Y2hpbmdTdGF0ZTsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykg
fHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7
CiAjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmIChFTkFCTEUoU0VSVklDRV9DT05UUk9MUykg
fHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OwogI2VuZGlmCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2hlZWxFdmVudERlbHRhRmlsdGVyPiBt
X3JlY2VudFdoZWVsRXZlbnREZWx0YUZpbHRlcjsKQEAgLTEwMTcsNCArOTk1LDEyIEBAIGlubGlu
ZSBQYWdlR3JvdXAmIFBhZ2U6Omdyb3VwKCkKICAgICByZXR1cm4gKm1fZ3JvdXA7CiB9CiAKKyNp
ZiBBU1NFUlRfRElTQUJMRUQKKworaW5saW5lIHZvaWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50
Q29uc2lzdGVuY3koKSBjb25zdAoreworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCmlu
ZGV4IDI4MzE1NzBkYjg4NGE4ODQ2NTZiYTI3ODQ4ZDFjNDhhOTg5NDIyMGEuLmU1YjM3MjMxZjYy
NzZlZDk0MjFiZDQwMzFhY2VjZTM4MmNmYmMxYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIGNvbnN0
IFRleHRFbmNvZGluZyYgVVRGN0VuY29kaW5nKCkKIH0KIAogVGV4dEVuY29kaW5nOjpUZXh0RW5j
b2RpbmcoY29uc3QgY2hhciogbmFtZSkKLSAgICA6IG1fbmFtZShhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKG5hbWUpKQorICAgIDogbV9uYW1lKGF0b21DYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKG5hbWUpKQogICAgICwgbV9iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFz
aEFzQ3VycmVuY3lTeW1ib2woKSkKIHsKICAgICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5v
dCAicmVwbGFjZW1lbnQiIGl0c2VsZi4KQEAgLTUzLDcgKzUzLDcgQEAgVGV4dEVuY29kaW5nOjpU
ZXh0RW5jb2RpbmcoY29uc3QgY2hhciogbmFtZSkKIH0KIAogVGV4dEVuY29kaW5nOjpUZXh0RW5j
b2RpbmcoY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogbV9uYW1lKGF0b21pY0Nhbm9uaWNhbFRl
eHRFbmNvZGluZ05hbWUobmFtZSkpCisgICAgOiBtX25hbWUoYXRvbUNhbm9uaWNhbFRleHRFbmNv
ZGluZ05hbWUobmFtZSkpCiAgICAgLCBtX2JhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpKQogewogICAgIC8vIEFsaWFzZXMgYXJlIHZhbGlkLCBidXQg
bm90ICJyZXBsYWNlbWVudCIgaXRzZWxmLgpAQCAtOTMsNyArOTMsNyBAQCBjb25zdCBjaGFyKiBU
ZXh0RW5jb2Rpbmc6OmRvbU5hbWUoKSBjb25zdAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0
aHJlYWQtc2FmZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBmdW5jdGlvbiBpcwogICAgIC8vIG9ubHkg
YWNjZXNzZWQgaW4gYSBzaW5nbGUgdGhyZWFkLCBidXQgZXZlbnR1YWxseSBoYXMgdG8gYmUgbWFk
ZQogICAgIC8vIHRocmVhZC1zYWZlIGFsb25nIHdpdGggdXNlc1Zpc3VhbE9yZGVyaW5nKCkuCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGEgPSBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKCJ3aW5kb3dzLTk0OSIpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBhID0g
YXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoIndpbmRvd3MtOTQ5Iik7CiAgICAgaWYgKG1f
bmFtZSA9PSBhKQogICAgICAgICByZXR1cm4gIkVVQy1LUiI7CiAgICAgcmV0dXJuIG1fbmFtZTsK
QEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIFRleHRFbmNvZGluZzo6dXNlc1Zpc3VhbE9yZGVyaW5n
KCkgY29uc3QKICAgICBpZiAobm9FeHRlbmRlZFRleHRFbmNvZGluZ05hbWVVc2VkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBhID0gYXRv
bWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZSgiSVNPLTg4NTktOCIpOworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBhID0gYXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoIklTTy04
ODU5LTgiKTsKICAgICByZXR1cm4gbV9uYW1lID09IGE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggNTQ0
NGYwMjE3ZDI2YTA1YTVmODlmYzE1YWU4YjIzMWIyZDE1YWY0YS4uYzllMTUwZWU2ZTNmNmFlNGEw
YzUyMTNmNTFlYWMwZjdjNjkxNTI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAgLTExOCw0MCArMTE4LDQwIEBA
IHN0YXRpYyB2b2lkIGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcChjb25zdCBjaGFyKiBhbGlhcywg
Y29uc3QgY2hhciogbmFtZSkKICAgICBBU1NFUlQoc3RybGVuKGFsaWFzKSA8PSBtYXhFbmNvZGlu
Z05hbWVMZW5ndGgpOwogICAgIGlmIChpc1VuZGVzaXJlZEFsaWFzKGFsaWFzKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGNvbnN0IGNoYXIqIGF0b21pY05hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFw
LT5nZXQobmFtZSk7Ci0gICAgQVNTRVJUKHN0cmNtcChhbGlhcywgbmFtZSkgPT0gMCB8fCBhdG9t
aWNOYW1lKTsKLSAgICBpZiAoIWF0b21pY05hbWUpCi0gICAgICAgIGF0b21pY05hbWUgPSBuYW1l
OworICAgIGNvbnN0IGNoYXIqIGF0b21OYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5h
bWUpOworICAgIEFTU0VSVCghc3RyY21wKGFsaWFzLCBuYW1lKSB8fCBhdG9tTmFtZSk7CisgICAg
aWYgKCFhdG9tTmFtZSkKKyAgICAgICAgYXRvbU5hbWUgPSBuYW1lOwogCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KGFsaWFzKSwgIkR1cGxpY2F0ZSB0
ZXh0IGVuY29kaW5nIG5hbWUgJXMgZm9yICVzIChwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYXMgJXMp
IiwgYWxpYXMsIGF0b21pY05hbWUsIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChhbGlhcykpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXRleHRFbmNvZGluZ05hbWVNYXAtPmdldChhbGlhcyks
ICJEdXBsaWNhdGUgdGV4dCBlbmNvZGluZyBuYW1lICVzIGZvciAlcyAocHJldmlvdXNseSByZWdp
c3RlcmVkIGFzICVzKSIsIGFsaWFzLCBhdG9tTmFtZSwgdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0
KGFsaWFzKSk7CiAKLSAgICB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5hZGQoYWxpYXMsIGF0b21pY05h
bWUpOworICAgIHRleHRFbmNvZGluZ05hbWVNYXAtPmFkZChhbGlhcywgYXRvbU5hbWUpOwogfQog
CiBzdGF0aWMgdm9pZCBhZGRUb1RleHRDb2RlY01hcChjb25zdCBjaGFyKiBuYW1lLCBOZXdUZXh0
Q29kZWNGdW5jdGlvbiYmIGZ1bmN0aW9uKQogewotICAgIGNvbnN0IGNoYXIqIGF0b21pY05hbWUg
PSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgQVNTRVJUKGF0b21pY05hbWUp
OwotICAgIHRleHRDb2RlY01hcC0+YWRkKGF0b21pY05hbWUsIFdURk1vdmUoZnVuY3Rpb24pKTsK
KyAgICBjb25zdCBjaGFyKiBhdG9tTmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1l
KTsKKyAgICBBU1NFUlQoYXRvbU5hbWUpOworICAgIHRleHRDb2RlY01hcC0+YWRkKGF0b21OYW1l
LCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBydW5lQmxhY2tsaXN0ZWRD
b2RlY3MoKQogewogICAgIGZvciAoYXV0byYgbmFtZUZyb21CbGFja2xpc3QgOiB0ZXh0RW5jb2Rp
bmdOYW1lQmxhY2tsaXN0KSB7Ci0gICAgICAgIGF1dG8qIGF0b21pY05hbWUgPSB0ZXh0RW5jb2Rp
bmdOYW1lTWFwLT5nZXQobmFtZUZyb21CbGFja2xpc3QpOwotICAgICAgICBpZiAoIWF0b21pY05h
bWUpCisgICAgICAgIGF1dG8qIGF0b21OYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5h
bWVGcm9tQmxhY2tsaXN0KTsKKyAgICAgICAgaWYgKCFhdG9tTmFtZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gbmFtZXM7CiAgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiAqdGV4dEVuY29kaW5nTmFtZU1hcCkgewotICAgICAgICAgICAgaWYg
KGVudHJ5LnZhbHVlID09IGF0b21pY05hbWUpCisgICAgICAgICAgICBpZiAoZW50cnkudmFsdWUg
PT0gYXRvbU5hbWUpCiAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGVudHJ5LmtleSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBmb3IgKGF1dG8qIG5hbWUgOiBuYW1lcykKICAgICAgICAgICAg
IHRleHRFbmNvZGluZ05hbWVNYXAtPnJlbW92ZShuYW1lKTsKIAotICAgICAgICB0ZXh0Q29kZWNN
YXAtPnJlbW92ZShhdG9taWNOYW1lKTsKKyAgICAgICAgdGV4dENvZGVjTWFwLT5yZW1vdmUoYXRv
bU5hbWUpOwogICAgIH0KIH0KIApAQCAtMTc4LDEwICsxNzgsMTAgQEAgc3RhdGljIHZvaWQgYnVp
bGRCYXNlVGV4dENvZGVjTWFwcyhjb25zdCBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4mKQogCiBzdGF0
aWMgdm9pZCBhZGRFbmNvZGluZ05hbWUoSGFzaFNldDxjb25zdCBjaGFyKj4qIHNldCwgY29uc3Qg
Y2hhciogbmFtZSkKIHsKLSAgICAvLyBXZSBtdXN0IG5vdCB1c2UgYXRvbWljQ2Fub25pY2FsVGV4
dEVuY29kaW5nTmFtZSgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gaXQuCi0g
ICAgY29uc3QgY2hhciogYXRvbWljTmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1l
KTsKLSAgICBpZiAoYXRvbWljTmFtZSkKLSAgICAgICAgc2V0LT5hZGQoYXRvbWljTmFtZSk7Cisg
ICAgLy8gV2UgbXVzdCBub3QgdXNlIGF0b21DYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKCkgYmVj
YXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpdC4KKyAgICBjb25zdCBjaGFyKiBhdG9t
TmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKKyAgICBpZiAoYXRvbU5hbWUp
CisgICAgICAgIHNldC0+YWRkKGF0b21OYW1lKTsKIH0KIAogc3RhdGljIHZvaWQgYnVpbGRRdWly
a3NTZXRzKCkKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBu
ZXdUZXh0Q29kZWMoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKICAgICByZXR1cm4gcmVz
dWx0LT52YWx1ZSgpOwogfQogCi1jb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IGNoYXIqIG5hbWUpCitjb25zdCBjaGFyKiBhdG9tQ2Fub25pY2FsVGV4dEVu
Y29kaW5nTmFtZShjb25zdCBjaGFyKiBuYW1lKQogewogICAgIGlmICghbmFtZSB8fCAhbmFtZVsw
XSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNjEsOCArMjYxLDggQEAgY29uc3QgY2hh
ciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKiBuYW1lKQogICAg
IGlmICghdGV4dEVuY29kaW5nTmFtZU1hcCkKICAgICAgICAgYnVpbGRCYXNlVGV4dENvZGVjTWFw
cyhsb2NrKTsKIAotICAgIGlmIChjb25zdCBjaGFyKiBhdG9taWNOYW1lID0gdGV4dEVuY29kaW5n
TmFtZU1hcC0+Z2V0KG5hbWUpKQotICAgICAgICByZXR1cm4gYXRvbWljTmFtZTsKKyAgICBpZiAo
Y29uc3QgY2hhciogYXRvbU5hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSkpCisg
ICAgICAgIHJldHVybiBhdG9tTmFtZTsKICAgICBpZiAoZGlkRXh0ZW5kVGV4dENvZGVjTWFwcykK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCBjb25zdCBjaGFy
KiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIG5hbWUpCiAgICAg
cmV0dXJuIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRl
eHRFbmNvZGluZ05hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdCBjaGFy
KiBhdG9tQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGNoYXIgYnVmZmVyW21heEVuY29kaW5nTmFt
ZUxlbmd0aCArIDFdOwogICAgIHNpemVfdCBqID0gMDsKQEAgLTI4MSwxOCArMjgxLDE4IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBjb25zdCBjaGFyKiBhdG9taWND
YW5vbmljYWxUZXh0RW5jb2RpbmdOCiAgICAgICAgIGJ1ZmZlcltqKytdID0gY2hhcmFjdGVyc1tp
XTsKICAgICB9CiAgICAgYnVmZmVyW2pdID0gMDsKLSAgICByZXR1cm4gYXRvbWljQ2Fub25pY2Fs
VGV4dEVuY29kaW5nTmFtZShidWZmZXIpOworICAgIHJldHVybiBhdG9tQ2Fub25pY2FsVGV4dEVu
Y29kaW5nTmFtZShidWZmZXIpOwogfQogCi1jb25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgYWxpYXMpCitjb25zdCBjaGFyKiBhdG9tQ2Fub25p
Y2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGFsaWFzKQogewogICAgIGlmIChhbGlh
cy5pc0VtcHR5KCkgfHwgIWFsaWFzLmlzQWxsQVNDSUkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBpZiAoYWxpYXMuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBhdG9taWNDYW5v
bmljYWxUZXh0RW5jb2RpbmdOYW1lKGFsaWFzLmNoYXJhY3RlcnM4KCksIGFsaWFzLmxlbmd0aCgp
KTsKKyAgICAgICAgcmV0dXJuIGF0b21DYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGFsaWFzLmNo
YXJhY3RlcnM4KCksIGFsaWFzLmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBhdG9taWNDYW5vbmlj
YWxUZXh0RW5jb2RpbmdOYW1lKGFsaWFzLmNoYXJhY3RlcnMxNigpLCBhbGlhcy5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIGF0b21DYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGFsaWFzLmNoYXJhY3Rl
cnMxNigpLCBhbGlhcy5sZW5ndGgoKSk7CiB9CiAKIGJvb2wgbm9FeHRlbmRlZFRleHRFbmNvZGlu
Z05hbWVVc2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuaAppbmRleCA5ZmMzOTY5OWE3YjllOWZkMDRlY2YzZGI3NjFiNzRiN2Vj
MThlNWIxLi40MGZhZWZjM2E3NjQ3ZDQwNTRhNjBhOTcxMjc3YjEyNjlhZTQ1M2Q4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5o
CkBAIC0zOCw4ICszOCw4IEBAIGNsYXNzIFRleHRFbmNvZGluZzsKIFdFQkNPUkVfRVhQT1JUIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2Rpbmcm
KTsKIAogLy8gT25seSBUZXh0RW5jb2Rpbmcgc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0
aW9ucyBkaXJlY3RseS4KLWNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUoY29uc3QgY2hhciogYWxpYXMpOwotY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVu
Y29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKK2NvbnN0IGNoYXIqIGF0b21DYW5vbmljYWxUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIGFsaWFzKTsKK2NvbnN0IGNoYXIqIGF0b21DYW5vbmlj
YWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYpOwogYm9vbCBub0V4dGVuZGVkVGV4dEVu
Y29kaW5nTmFtZVVzZWQoKTsKIGJvb2wgaXNKYXBhbmVzZUVuY29kaW5nKGNvbnN0IGNoYXIqIGNh
bm9uaWNhbEVuY29kaW5nTmFtZSk7CiBib29sIHNob3VsZFNob3dCYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sSW4oY29uc3QgY2hhciogY2Fub25pY2FsRW5jb2RpbmdOYW1lKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IGE5MjQ0MDllZTQ2YzUzZTczYjI3YTQ5YTE5ZWZl
OTY5NzIxNjczYTUuLjlmZGZiYThiMTAyM2FlNjVjYjJmZjhjMmZhZjQyMzA0MGEwMzhhMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcApAQCAtMzA0LDEzICszMDQsMTIgQEAg
VmFsdWUgRnVuUG9zaXRpb246OmV2YWx1YXRlKCkgY29uc3QKICAgICByZXR1cm4gRXhwcmVzc2lv
bjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbjsKIH0KIAotc3RhdGljIEF0b21TdHJpbmcg
YXRvbWljU3Vic3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgpCisvLyBGSVhNRTogU2hvdWxkIFN0cmluZ0J1aWxkZXIgb2ZmZXIgdGhp
cyBhcyBhIG1lbWJlciBmdW5jdGlvbj8KK3N0YXRpYyBTdHJpbmdWaWV3IHRvU3RyaW5nVmlldyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyKQogewotICAgIEFTU0VSVChzdGFydCA8PSBidWlsZGVyLmxl
bmd0aCgpKTsKLSAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1aWxkZXIubGVuZ3RoKCkgLSBzdGFydCk7
CiAgICAgaWYgKGJ1aWxkZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBBdG9tU3RyaW5nKGJ1
aWxkZXIuY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOwotICAgIHJldHVybiBBdG9tU3Ry
aW5nKGJ1aWxkZXIuY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIHsgYnVpbGRlci5jaGFyYWN0ZXJzOCgpLCBidWlsZGVyLmxlbmd0aCgpIH07CisgICAgcmV0
dXJuIHsgYnVpbGRlci5jaGFyYWN0ZXJzMTYoKSwgYnVpbGRlci5sZW5ndGgoKSB9OwogfQogCiBW
YWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdApAQCAtMzQ2LDcgKzM0NSw3IEBAIFZhbHVlIEZ1
bklkOjpldmFsdWF0ZSgpIGNvbnN0CiAKICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHNldmVyYWwg
bm9kZXMgd2l0aCB0aGUgc2FtZSBpZCwgaWQoKSBzaG91bGQgcmV0dXJuIHRoZSBmaXJzdCBvbmUu
CiAgICAgICAgIC8vIEluIFdlYktpdCwgZ2V0RWxlbWVudEJ5SWQgYmVoYXZlcyBzbywgdG9vLCBh
bHRob3VnaCBpdHMgYmVoYXZpb3IgaW4gdGhpcyBjYXNlIGlzIGZvcm1hbGx5IHVuZGVmaW5lZC4K
LSAgICAgICAgTm9kZSogbm9kZSA9IGNvbnRleHRTY29wZS5nZXRFbGVtZW50QnlJZChhdG9taWNT
dWJzdHJpbmcoaWRMaXN0LCBzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGNvbnRleHRTY29wZS5nZXRFbGVtZW50QnlJZCh0b1N0cmluZ1ZpZXcoaWRM
aXN0KS5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSk7CiAgICAgICAgIGlm
IChub2RlICYmIHJlc3VsdFNldC5hZGQobm9kZSkuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQobm9kZSk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVI
aXRUZXN0UmVzdWx0LmNwcAppbmRleCA0MTIxNTc5NzZhMzk4ZTg5MjQyODFmY2NlOTMwZGJlM2Y1
ZDRiMGFjLi5kZjhlNTVkZjFmMGFlODM2MDNmYThkZDNhOTFhMGVmYWQzODVhYjdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVIaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcApAQCAtMzIsMTMgKzMyLDEy
IEBACiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRWxl
bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxl
bWVudC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAg
LTEyMCwxNCArMTE5LDkgQEAgQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZSBJbmplY3RlZEJ1
bmRsZUhpdFRlc3RSZXN1bHQ6Om1lZGlhVHlwZSgpIGNvbnN0CiAjaWYgIUVOQUJMRShWSURFTykK
ICAgICByZXR1cm4gQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7CiAjZWxzZQotICAg
IE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAg
aWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgIHJldHVybiBCdW5kbGVIaXRUZXN0UmVz
dWx0TWVkaWFUeXBlTm9uZTsKLSAgICAKLSAgICBpZiAoIWRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KS5pc01lZGlhRWxlbWVudCgpKQorICAgIGlmICghaXM8SFRNTE1lZGlhRWxlbWVudD4obV9oaXRU
ZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIEJ1bmRsZUhp
dFRlc3RSZXN1bHRNZWRpYVR5cGVOb25lOwotICAgIAotICAgIHJldHVybiBtX2hpdFRlc3RSZXN1
bHQubWVkaWFJc1ZpZGVvKCkgPyBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlVmlkZW8gOiBC
dW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlQXVkaW87ICAgIAorICAgIHJldHVybiBtX2hpdFRl
c3RSZXN1bHQubWVkaWFJc1ZpZGVvKCkgPyBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlVmlk
ZW8gOiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlQXVkaW87CiAjZW5kaWYKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZUJhc2UuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZUJhc2UuY3BwCmluZGV4IDk5MzVlN2Y3NWZk
NWUxMmI0ZDI4NzllMWRjNDdmZDNiYmM5MjRlYzcuLmZmYzA4MzNmYmM1MTg2N2E5Zjc0ZmJiNjRh
YTFiOWJlZDBiMjI0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vz
c2libGVCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlQmFz
ZS5jcHAKQEAgLTE0Myw5ICsxNDMsOSBAQCBIUkVTVUxUIEFjY2Vzc2libGVCYXNlOjpnZXRfYXR0
cmlidXRlKF9Jbl8gQlNUUiBrZXksIF9PdXRfIFZBUklBTlQqIHZhbHVlKQogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBBdG9tU3RyaW5nIGtleUF0b21p
YyhrZXksIDo6U3lzU3RyaW5nTGVuKGtleSkpOworICAgIEF0b21TdHJpbmcga2V5QXRvbShrZXks
IDo6U3lzU3RyaW5nTGVuKGtleSkpOwogCi0gICAgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
KGtleUF0b21pYywgdmFsdWUpOworICAgIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShrZXlB
dG9tLCB2YWx1ZSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386370</attachid>
            <date>2019-12-23 19:19:51 -0800</date>
            <delta_ts>2019-12-26 21:48:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205567-20191223191949.patch</filename>
            <type>text/plain</type>
            <size>139999</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDc4MmQ4MzQwMmI0OTZl
ZjNhZDk0ZGYyZGE1ZTZlYzk3ZTcwYjllMy4uYjg0NTE2NGNiNjY1Njc1ODBkZmQ1NjgxNDg5NmQw
Y2I1NjQ0MmUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMCBAQAorMjAxOS0xMi0yMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgdG8gc2ltcGxp
ZnkgYnJvYWRjYXN0aW5nIHRvIGFsbCBtZWRpYSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTY3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlciB0aW1lLCB3ZSBoYXZlIGFjY3VtdWxh
dGVkIG1hbnkgZGlmZmVyZW50IHNldHMgb2YgYWxsIHRoZSBtZWRpYSBlbGVtZW50cy4KKyAgICAg
ICAgV2l0aCB0aGUgZ29hbCBvZiBiZWluZyBhIGJpdCBhYnN0cmFjdCBhbmQgbm90IGJ1aWxkaW5n
IHRvbyBtdWNoIGJlaGF2aW9yIGludG8KKyAgICAgICAgdGhlIERvY3VtZW50IG9iamVjdCwgd2Ug
ZW5kZWQgdXAgd2l0aCB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5LCBhbmQgbWFueSBzZXRzCisgICAg
ICAgIG9mIGFsbCB0aGUgSFRNTE1lZGlhRWxlbWVudCBvYmplY3RzLiBUaGlzIGlzIGEgZmlyc3Qg
Y3V0IGF0IHJlZHVjaW5nIHRoYXQgY29tcGxleGl0eS4KKyAgICAgICAgQXQgdGhlIHNhbWUgdGlt
ZSwgdGhlIHJlZmFjdG9yaW5nIG1ha2VzIGFsbCB0aGUgaXRlcmF0aW9uIHVzZSBhIHNhZmUgYWxn
b3JpdGhtIHRoYXQKKyAgICAgICAgYnVpbGRzIGEgdmVjdG9yIG9mIFJlZjxIVE1MTWVkaWFFbGVt
ZW50Piwgc2FmZSBldmVuIGlmIHRoZSB3b3JrIGRvbmUgZm9yIGVhY2gKKyAgICAgICAgbWVkaWEg
ZWxlbWVudCBjYWxscyBvdXQgdG8gYXJiaXRyYXJ5IERPTSBvcGVyYXRpb25zLgorCisgICAgICAg
IFNlcGFyYXRlbHksIHRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBzb21lIG5hbWUgY2hhbmdlcyB0
aGF0IHN0aWxsIHNheSAiYXRvbWljIgorICAgICAgICBpbnN0ZWFkIG9mICJhdG9tIiBsZWZ0IG92
ZXIgZnJvbSBvdXIgcmVuYW1pbmcgb2YgQXRvbWljU3RyaW5nIHRvIEF0b21TdHJpbmcuCisKKyAg
ICAgICAgKiBIZWFkZXJzLmNtYWtlOiBSZW1vdmVkIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0
ZW5lci5oLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0
dG8uCisKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMgY29uc3QpOiBS
ZXdvcmRlZCBjb21tZW50IHRvCisgICAgICAgIHNheSAiYXRvbSIuCisKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRF
bGVtZW50c0J5TmFtZSk6IFVwZGF0ZWQgZm9yICJhdG9taWMiIC0+ICJhdG9tIi4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJhZGlvTm9kZUxpc3QpOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dmlzaWJp
bGl0eVN0YXRlQ2hhbmdlZCk6IE1vdmVkIHRoZSBjb2RlIGZyb20KKyAgICAgICAgdGhlIG5vdGlm
eU1lZGlhQ2FwdHVyZU9mVmlzaWJpbGl0eUNoYW5nZWQgaW4gaGVyZS4gTm8gbmVlZCBmb3IgYSBz
ZXBhcmF0ZQorICAgICAgICBmdW5jdGlvbiBmb3IgdGhlIHR3byBsaW5lcyBvZiBjb2RlLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyTWVkaWFFbGVtZW50KTogQWRkZWQuIFJl
cGxhY2VzIHRoZSBtdWx0aXBsZSByZWdpc3RyYXRpb25zCisgICAgICAgIHRoYXQgZWFjaCBtZWRp
YSBlbGVtZW50IHdvdWxkIGRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0
ZXJNZWRpYUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb3JF
YWNoTWVkaWFFbGVtZW50KTogQWRkZWQuIFNhZmVseSBpdGVyYXRlcyB0aGUgbWVkaWEgZWxlbWVu
dHMKKyAgICAgICAgYW5kIGNhbGxzIGEgZnVuY3Rpb24gb24gZWFjaCBvZiB0aGVtLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6dW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0No
YW5nZWRDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1lZGlhVm9sdW1lRGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVk
aWFWb2x1bWVDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQg
dG8gY2FsbAorICAgICAgICBwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSBvbiBlYWNoIG1l
ZGlhIGVsZW1lbnQgcmF0aGVyIHRoYW4ga2VlcGluZyBhIHNlcGFyYXRlIHJlZ2lzdHJ5LgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVD
aGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRDYWxsYmFja3MpOiBVcGRhdGVkIHRoZSB0eXBlCisgICAgICAgIHRvIGJlIEhU
TUxNZWRpYUVsZW1lbnQgcmF0aGVyIHRoYW4ganVzdCBFbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZEFuZFN0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVn
aXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZvclVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm90aWZ5TWVkaWFDYXB0dXJl
T2ZWaXNpYmlsaXR5Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVnaXN0ZXJGb3JNZWRpYVN0cmVhbVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFTdHJlYW1TdGF0
ZUNoYW5nZUNhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
bWVkaWFTdHJlYW1DYXB0dXJlU3RhdGVDaGFuZ2VkKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQg
dG8gY2FsbAorICAgICAgICBtZWRpYVN0cmVhbUNhcHR1cmVTdGFydGVkIG9uIGVhY2ggbWVkaWEg
ZWxlbWVudCByYXRoZXIgdGhhbiBrZWVwaW5nIGEgc2VwYXJhdGUgcmVnaXN0cnkuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6YWRkQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVBcHBsaWNhdGlvblN0
YXRlQ2hhbmdlTGlzdGVuZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmZvckVhY2hBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIpOiBEZWxldGVkLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6IENsZWFuIHVwIGZvcndhcmQgZGVjbGFyYXRpb25zIGEgYml0
LiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLAorICAgICAgICByZW1vdmluZyBtYW55IGZ1bmN0
aW9uIGFuZCBkYXRhIG1lbWJlcnMuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZCBjb25zdCk6IFJlZmFjdG9yZWQgdG8gbWVyZ2UgaW4gdGhlIGxvZ2ljCisgICAgICAgIGZyb20g
dGhlIHNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBmdW5jdGlvbi4gVGhlIGNvbWJpbmVkIGZ1bmN0
aW9uIGlzIGJvdGggYSBiaXQgZWFzaWVyCisgICAgICAgIHRvIHVuZGVyc3RhbmQgYW5kIHNtYWxs
ZXIgdGhhbiB0aGUgdHdvIGZ1bmN0aW9ucyB3ZXJlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQu
aDogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGluY2x1ZGVzLiBSZW1vdmVkIFNwZWxsY2hlY2tBdHRy
aWJ1dGVTdGF0ZS4KKyAgICAgICAgTWFkZSBmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZCBwcml2
YXRlLiBSZW1vdmVkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlLAorICAgICAgICBwcml2YXRlQnJvd3Np
bmdTdGF0ZURpZENoYW5nZSwgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCwgYW5kIHNwZWxsY2hl
Y2tBdHRyaWJ1dGVTdGF0ZS4KKworICAgICAgICAqIGRvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHA6
IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVu
TWFuYWdlcjo6d2lsbEVudGVyRnVsbHNjcmVlbik6IFVzZSBpczxIVE1MTWVkaWFFbGVtZW50PiBp
bnN0ZWFkIG9mCisgICAgICAgIGNhbGxpbmcgaXNNZWRpYUVsZW1lbnQgZGlyZWN0bHkuCisKKyAg
ICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2Rl
TGlzdDo6fk5hbWVOb2RlTGlzdCk6IFVwZGF0ZWQgZm9yICJhdG9taWMiIC0+ICJhdG9tIi4KKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6aW52YWxpZGF0ZUNhY2hlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Rz
Tm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXNGb3JBdHRyaWJ1dGUpOiBEaXR0by4KKworICAgICAg
ICAqIGRvbS9Ob2RlUmFyZURhdGEuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gVXBkYXRl
ZCBmb3IgImF0b21pYyIgLT4gImF0b20iLgorICAgICAgICBNYWRlIGEgZmV3IGNvZGluZyBzdHls
ZSB0d2Vha3MuCisKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQgY29uc3QpOiBVcGRhdGVkIGZvciAiYXRvbWlj
IiAtPiAiYXRvbSIuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRUb0VsZW1lbnRTZXRNYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6YWRkRWxlbWVudFRvRG9jdW1lbnRNYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6cmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudCk6IEFkZGVk
IGNhbGwgdG8gcmVnaXN0ZXJNZWRpYUVsZW1lbnQsCisgICAgICAgIHJlbW92ZWQgZWlnaHQgbm93
LW9ic29sZXRlIHJlZ2lzdHJhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Ojp1bnJlZ2lzdGVyV2l0aERvY3VtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSk6IEFkZGVkIGFuICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgYmVoYXZp
b3IsIHNpbmNlIHRoaXMgd2FzIG5vdCByZWdpc3RlcmVkIGZvciBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgICAgICBiZWZvcmUuIFRoaXMgc2hvdWxkIGJlIHJldmlzaXRlZCBiZWNhdXNlIGl0J3Mg
bm90IGNsZWFyIHRoaXMgcGxhdGZvcm0gZGlmZmVyZW5jZSBpcyBuZWVkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFHcm91
cCk6IENoYW5nZSB0byB1c2UgRG9jdW1lbnQ6OmZvckVhY2hNZWRpYUVsZW1lbnQKKyAgICAgICAg
c28gd2UgZG9uJ3QgbmVlZCB0byBrZWVwIG91ciBvd24gZ2xvYmFsIHNldCBvZiBtZWRpYSBlbGVt
ZW50cyBmb3IgZWFjaCBkb2N1bWVudC4gUmVxdWlyZWQKKyAgICAgICAgYSBsaXR0bGUgYml0IG9m
IGNvZGUgc3RydWN0dXJlIGNoYW5nZS4gQWRkZWQgYSBGSVhNRSBiZWNhdXNlIHRoZSBkZWNpc2lv
biBhYm91dCB3aGljaAorICAgICAgICBtZWRpYSBlbGVtZW50IGlzIHNlbGVjdGVkIGRlcGVuZHMg
b24gaGFzaCB0YWJsZSBvcmRlciBhcyBpdCBhbHdheXMgaGFzOyBzZWVtcyBpbmFwcHJvcHJpYXRl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFDb250cm9sc0Rl
cGVuZE9uUGFnZVNjYWxlRmFjdG9yKTogUmVtb3ZlZCB0aGUgY29kZQorICAgICAgICB0byByZWdp
c3Rlci91bnJlZ2lzdGVyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCk6IE9ubHkgZG8gdGhlIHdvcmsgaWYgaXQncyBuZWVkZWQ7Cisg
ICAgICAgIHRoaXMgcmVwbGljYXRlcyB0aGUgb2xkIGJlaGF2aW9yIHdoaWNoIHdhcyBhY2NvbXBs
aXNoZWQgYnkgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZy4KKworICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhRWxlbWVudC5oOiBSZW1vdmVkIHRoZSBvdmVycmlkZXMgZm9yIHZhcmlvdXMgdmlydHVh
bCBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgICBJbnN0ZWFkIHRoZXNlIGFyZSBub3cgcHVibGlj
IGZ1bmN0aW9ucy4gQWxzbyByZW1vdmVkIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci4K
KworICAgICAgICAqIGh0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbGFibGVFbGVtZW50OjpsYWJlbHMpOiBVcGRhdGVkIGZvciAiYXRvbWljIiAtPiAiYXRv
bSIuCisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgICogaHRt
bC9SYWRpb05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5S
YWRpb05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3Ry
dWN0VHJlZUZyb21IVE1MVG9rZW4pOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZWFk
ZXIpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3Rl
bmVyLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6cmVuZGVyVHJlZVNpemUgY29uc3QpOiBVc2UgZm9yRWFjaERvY3VtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1bm1hcmtBbGxUZXh0TWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZWRpdGFibGVFbGVtZW50c0luUmVjdCBjb25z
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOiBUd2Vh
a2VkIHJhbmdlIGNoZWNrIHNvIGl0IHdpbGwgcmVqZWN0CisgICAgICAgIE5hTiB2YWx1ZXMuIFVz
ZSBmb3JFYWNoTWVkaWFFbGVtZW50IHRvIGNhbGwgbWVkaWFWb2x1bWVEaWRDaGFuZ2UsCisgICAg
ICAgIGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRQYWdlU2NhbGVGYWN0b3IpOiBSZWZhY3Rv
cmVkIHRvIGVsaW1pbmF0ZSBsYXJnZSBibG9ja3MKKyAgICAgICAgb2YgcmVwZWF0ZWQgY29kZS4g
VXNlIGZvckVhY2hNZWRpYUVsZW1lbnQgdG8gY2FsbCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkLAor
ICAgICAgICBlbGltaW5hdGluZyB0aGUgbmVlZCBmb3IgRG9jdW1lbnQ6OnBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRBbmRTdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uKTogVXNlIGZvckVhY2hNZWRpYUVsZW1lbnQKKyAgICAgICAgdG8g
Y2FsbCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCwgZWxpbWluYXRpbmcgdGhl
IG5lZWQgZm9yCisgICAgICAgIERvY3VtZW50Ojp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
Q2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVwZGF0ZU1lZGlhRWxlbWVudFJhdGVD
aGFuZ2VSZXN0cmljdGlvbnMpOiBVc2UKKyAgICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudCB0byBj
YWxsIHVwZGF0ZVJhdGVDaGFuZ2VSZXN0cmljdGlvbmFzLiBUaGUgb2xkIGNvZGUKKyAgICAgICAg
d291bGQgY2FsbCB0aGlzIG9uIGFsbCBtZWRpYSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCB3ZWIg
cHJvY2Vzcywgd2hpY2gKKyAgICAgICAgbWVhbnMgdGhlIGZ1bmN0aW9ucyB3b3VsZCBiZSBjYWxs
ZWQgbWFueSB0aW1lcyBmb3IgdGhlIHNhbWUgbWVkaWEgZWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnVwZGF0ZVJlbmRlcmluZyk6IFVzZSBmb3JFYWNoRG9jdW1lbnQgY29uc2lzdGVu
dGx5IGZvcgorICAgICAgICBhbGwgdGhlIGRvY3VtZW50IGl0ZXJhdGlvbi4gQmVmb3JlIGl0IHdh
cyB1c2VkIGZvciBoYWxmIHRoZSBmdW5jdGlvbiBhbmQgbm90CisgICAgICAgIHVzZWQgZm9yIHRo
ZSBvdGhlciBoYWxmOyBubyBvYnZpb3VzIHJlYXNvbiBmb3IgdGhlIGRpZmZlcmVjZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbnMpOiBVc2UgZm9yRWFj
aERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRp
b25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTY3JpcHRlZEFuaW1hdGlvbnNU
aHJvdHRsaW5nUmVhc29uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFRpbWVyVGhyb3R0bGluZ1N0YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkbnNQcmVmZXRjaGluZ1N0YXRlQ2hhbmdlZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFu
Z2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRp
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0TXV0ZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3BNZWRpYUNhcHR1cmUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OnN0b3BBbGxNZWRpYVBsYXliYWNrKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpzdXNwZW5kQWxsTWVkaWFQbGF5YmFjayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjayk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c3VzcGVuZEFsbE1lZGlhQnVmZmVyaW5nKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbGxNZWRpYUJ1ZmZlcmluZyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6c2V0U1ZHQW5pbWF0aW9uc1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKTogVXNlIGZvckVhY2hEb2N1bWVudCB0
byBjYWxsCisgICAgICAgIHN1c3BlbmQvcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25V
cGRhdGVzLCBvYnZpYXRpbmcgdGhlIG5lZWQgZm9yCisgICAgICAgIFBhZ2U6OnN1c3BlbmQvcmVz
dW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzLiBVc2UKKyAgICAgICAgZm9yRWFj
aERvY3VtZW50IHRvIGNhbGwgcGF1c2UvdW5wYXVzZUFuaW1hdGlvbnMsIG9idmlhdGluZyB0aGUg
bmVlZCBmb3IKKyAgICAgICAgV2ViQ29yZTo6c2V0U1ZHQW5pbWF0aW9uc1N0YXRlLiBVc2UgZm9y
RWFjaERvY3VtZW50IHRvIGNhbGwKKyAgICAgICAgdmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCwgcmVt
b3ZpbmcgdGhlIG5lZWQgdG8gd3JpdGUgb3V0IGEgbG9vcCB0aGF0CisgICAgICAgIGdhdGhlcnMg
dGhlIGRvY3VtZW50cyBpbnRvIGEgdmVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3Vz
cGVuZERldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpyZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6Y2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZCk6IFVzZSBmb3JFYWNoRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRT
ZXNzaW9uSUQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFBsYXliYWNrVGFy
Z2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpwbGF5YmFja1RhcmdldEF2YWls
YWJpbGl0eURpZENoYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0U2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2spOiBVc2UKKyAg
ICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudCB0byBjYWxsIGFsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFja0NoYW5nZWQsCisgICAgICAgIG9idmlhdGluZyB0aGUgbmVlZCBmb3IgRG9jdW1l
bnQ6OmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpzZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpOiBVc2UgZm9yRWFjaERv
Y3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0VXNlU3lzdGVtQXBwZWFyYW5jZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0RnVsbHNjcmVlbkluc2V0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldEZ1bGxzY3JlZW5Db250cm9s
c0hpZGRlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6Zm9yRWFjaERvY3VtZW50
KTogTWVyZ2VkIHRoZSBjb2xsZWN0RG9jdW1lbnRzIGZ1bmN0aW9uCisgICAgICAgIGluIHNpbmNl
IGl0J3Mgb25seSB1c2VkIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpjb2xsZWN0RG9j
dW1lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZvckVhY2hNZWRpYUVs
ZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFwcGxpY2F0aW9uV2lsbFJl
c2lnbkFjdGl2ZSk6IFVzZSBmb3JFYWNoTWVkaWFFbGVtZW50LAorICAgICAgICBlbGltaW5hdGlu
ZyB0aGUgbmVlZCBmb3IgZm9yRWFjaEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWNvbXB1dGVUZXh0QXV0b1NpemluZ0luQWxsRnJh
bWVzKTogVXNlIGZvckVhY2hEb2N1bWVudC4KKworICAgICAgICAqIHBhZ2UvUGFnZS5oOiBSZW1v
dmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLiBSZW1vdmVkIHVudXNlZAorICAgICAg
ICBGaW5kRGlyZWN0aW9uIGVudW0uIFR3ZWFrZWQgZm9ybWF0dGluZy4gVXNlIGJvb2wgaW5zdGVh
ZCBvZiB1aW50OF90IGFzCisgICAgICAgIHVuZGVybHlpbmcgdHlwZSBmb3IgZW51bSBjbGFzcyB3
aXRoIG9ubHkgdHdvIHZhbHVlcy4gVXBkYXRlZCBmb3IgY2hhbmdlcyBhYm92ZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKTogVXBkYXRlZCBmb3IgImF0b21pYyIgLT4gImF0b20i
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpkb21OYW1lIGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OnVzZXNWaXN1YWxPcmRlcmluZyBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjphZGRUb1RleHRDb2RlY01hcCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6cHJ1bmVCbGFja2xpc3RlZENvZGVjcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6YWRkRW5jb2RpbmdOYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphdG9tQ2Fub25p
Y2FsVGV4dEVuY29kaW5nTmFtZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuaDogRGl0dG8uCisKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OmF0b21pY1N1YnN0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6dG9TdHJpbmdWaWV3KTogQWRkZWQuIExhdGVy
IGNvdWxkIG1ha2UgYSBTdHJpbmdCdWlsZGVyIG1lbWJlcgorICAgICAgICBmdW5jdGlvbiBpbnN0
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bklkOjpldmFsdWF0ZSBjb25zdCk6IFVz
ZSB0b1N0cmluZ1ZpZXcgYW5kIFN0cmluZ1ZpZXc6OnN1YnN0cmluZworICAgICAgICBpbnN0ZWFk
IG9mICJhdG9taWNTdWJzdHJpbmciLCBzaW5jZSBnZXRFbGVtZW50QnlJZCBjYW4gYmUgY2FsbGVk
IG9uIGEgU3RyaW5nVmlldworICAgICAgICBhbmQgdGhlcmUncyBubyBuZWVkIHRvIGFsbG9jYXRl
L2RlYWxsb2NhdGUgYW4gQXRvbVN0cmluZyBqdXN0IHRvIGNoZWNrIGlmIGl0IGV4aXN0cy4KKwog
MjAxOS0xMi0yMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OIChyMjUzNjM0KTogUmVwcm9kdWNpYmxlIGNyYXNoIGdvaW5nIGJhY2sg
YW5kIGZvcndhcmQgb24gZ29vZHJlYWRzLmNvbSBpbiBQYWdlOjpzZXRQYWdlU2NhbGVGYWN0b3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNzdjNDZkN2Y0ZjlkOGM1ODI3OTNlODZkOWEwMGM3NDg1NTBhZDgwMC4uNjc5
NmFhNzFkNmRkNjA3MzYwNjEwOGJlN2Y5ZTdhM2QwMjI3YjY1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxOS0xMi0yMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVmYWN0b3IgdG8gc2ltcGxpZnkgYnJvYWRjYXN0aW5nIHRvIGFsbCBtZWRpYSBlbGVt
ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
NTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6bWVkaWFUeXBl
IGNvbnN0KTogVXNlIGlzPEhUTUxNZWRpYUVsZW1lbnQ+LgorCiAyMDE5LTEyLTIzICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIHdhdGNoT1MgYnVpbGQgZml4
IGF0dGVtcHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA0MmI3NTc2YzFhNjU1ZTRl
NjMwMGFiYTU4NjY5Yjk3Y2JlMzI2ZjZlLi5iZTBkYjYxZDI4Y2FmYjczMjI3YmJiMTY5OTQyNjlj
YjUzOTlmMmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTktMTItMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZmFjdG9yIHRvIHNpbXBsaWZ5IGJyb2FkY2FzdGluZyB0byBhbGwgbWVkaWEgZWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTU2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQWNjZXNzaWJs
ZUJhc2UuY3BwOgorICAgICAgICAoQWNjZXNzaWJsZUJhc2U6OmdldF9hdHRyaWJ1dGUpOiBVcGRh
dGVkIGZvciAiYXRvbWljIiAtPiAiYXRvbSIuCisKIDIwMTktMTItMjEgIEJyaWFuIEJ1cmcgIDxi
YnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWRkIEluc3BlY3RlZFRh
cmdldFR5cGVzIGRpYWdub3N0aWMgZXZlbnQgYW5kIHJlbGF0ZWQgaG9va3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDhjN2U1YzU5NDdmMGI1Yzk0MzY1OTc0ZTFlY2ZmYmFkZTE4YTBhNzAuLjQ1ODM2
MjViYmU2YjhiMjUzMzg0ZTlmMDY2NDAzMzdmODc2N2YxMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtNzUwLDcgKzc1MCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwYWdlL0FjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oCiAgICAgcGFnZS9BZGp1c3RW
aWV3U2l6ZU9yTm90LmgKICAgICBwYWdlL0FsdGVybmF0aXZlVGV4dENsaWVudC5oCi0gICAgcGFn
ZS9BcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIuaAogICAgIHBhZ2UvQXV0b3BsYXlFdmVu
dC5oCiAgICAgcGFnZS9CYXNlNjRVdGlsaXRpZXMuaAogICAgIHBhZ2UvQ2FjaGVTdG9yYWdlUHJv
dmlkZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDg4OTU0ZTk5MDZmNTg2M2NlYjQ1ODc4Y2FjZjE5ZmE2NGQ0ODE5OTQuLmJj
ZTZjZDI5NmMwMTBmOGUwOWE3ZDFmYzMwNjhjMWVmMzBmZGMwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxOSw3ICsyMTks
NiBAQAogCQkwN0U5RTEzMDE4RjYyQjM3MDAxMUEzQTQgLyogSW5iYW5kTWV0YWRhdGFUZXh0VHJh
Y2tQcml2YXRlQVZGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3RTlFMTJGMThGNjJCMzcwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFj
a1ByaXZhdGVBVkYuY3BwICovOyB9OwogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3RUU3NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2
RUQxQkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07
Ci0JCTA3RjA0QTk0MjAwNkIxRTMwMEFFMkEwQSAvKiBBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
RjA0QTkyMjAwNjg0QkMwMEFFMkEwQSAvKiBBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0Y0
RTkzMzIwQjM1ODdGMDAyRTM4MDMgLyogQVZBc3NldE1JTUVUeXBlQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QzhBRDEyMUQwNzNENjMwMDg3
QzVDRSAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3Rjg3Njg0MUFENTgwRjkwMDkwNTg0OSAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tU
YXJnZXRDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMDdGOTQ0MTYxODY0RDA0NjAwNUQzMUNCIC8qIFBsYXRmb3JtTWVkaWFTZXNzaW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RBRThDMDgxNzQ2Qjk1NzAwNTMyRDc4IC8qIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NTY5
LDcgKzU1NjgsNiBAQAogCQkwN0VFNzZFQTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFRTc2RUQx
QkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwN0YwNEE5MjIwMDY4NEJDMDBBRTJBMEEgLyogQXBwbGljYXRpb25T
dGF0ZUNoYW5nZUxpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFw
cGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REExODgwN0E3
RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRT
ZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxlbWVudFNl
c3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNTg2LDcgKzIwNTg0LDYg
QEAKIAkJCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9i
c2VydmVyLmggKi8sCiAJCQkJQkNGNDhDRTYxMzcwRDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdT
aXplT3JOb3QuaCAqLywKIAkJCQlDRURBMTJENjE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50LmggKi8sCi0JCQkJMDdGMDRBOTIyMDA2ODRCQzAwQUUyQTBBIC8qIEFwcGxp
Y2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oICovLAogCQkJCUM5RDQ2NzA0MUU2MEMzRUIwMDgx
OTVGQiAvKiBBdXRvcGxheUV2ZW50LmggKi8sCiAJCQkJNDU4MzBENEIxNjc5QjRGODAwQUNGOEMz
IC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCAqLywKIAkJCQk0NTgzMEQ0QzE2NzlCNEY4MDBB
Q0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCAqLywKQEAgLTI5MDE4LDcgKzI5MDE1LDYg
QEAKIAkJCQk2M0JENEE1RjFGNzc4RTlGMDA0Mzg3MjIgLyogQXBwbGljYXRpb25NYW5pZmVzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjMxNTJEMTkxRjk1MzFFRTAwN0E1RTRCIC8qIEFwcGxpY2F0
aW9uTWFuaWZlc3RMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTYzNTRGNEM5MUY3QUZDOTQw
MEQ4OURGMyAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwN0YwNEE5NDIwMDZCMUUzMDBBRTJBMEEgLyogQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3Rl
bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjQxNzA2NDEyNTY2MkIzMDA2QjI4RkMgLyogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUREOTA5OUU2
NDkyMDA1NkU1ODEgLyogQXBwbHlTdHlsZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
MkREOEY2MEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggZTUzYWM4YzEwYTgzYWI0
NTI0ZTcxMDRlYTIzM2M4NWViYWMyZWJkYi4uMmRiNDE4Y2M5ZDBlZDc0ZWZmZTEyODI3NzRhNTYz
MWU5YzU4NmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAK
QEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdW5zaWduZWQgU3R5bGVTaGVl
dENvbnRlbnRzOjplc3RpbWF0ZWRTaXplSW5CeXRlcygpIGNvbnN0CiB7CiAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc2l6ZSBvZiB0aGUgc3RyaW5ncyBo
YW5naW5nIGZyb20gdmFyaW91cyBvYmplY3RzLiAKLSAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0
aGF0IG5lYXJseSBhbGwgb2Ygb2YgdGhlbSBhcmUgYXRvbWljIGFuZCB3b3VsZCBleGlzdCBhbnl3
YXkuCisgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBuZWFybHkgYWxsIG9mIG9mIHRoZW0g
YXJlIGF0b21zIHRoYXQgd291bGQgZXhpc3QgYW55d2F5LgogICAgIHVuc2lnbmVkIHNpemUgPSBz
aXplb2YoKnRoaXMpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyB0aGUgY2hpbGRyZW4g
b2YgbWVkaWEgYW5kIHJlZ2lvbiBydWxlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAppbmRleCAxZDEyODYxYzg4OTJmMjQxOTY2MzU1OTAyNWJkYmNiNmE0MjdlMjUzLi40OTNiM2Jh
OTBlZmM4MWNhMDkzNGRjNzhhMWE3YWQwZTYwYWZkMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCkBAIC04OTEsNyArODkxLDcgQEAgUmVmPEhUTUxDb2xsZWN0aW9uPiBDb250
YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IEF0b21TdHJpbmcmIG5hbWUK
IAogUmVmPE5vZGVMaXN0PiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBT
dHJpbmcmIGVsZW1lbnROYW1lKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3Vy
ZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5vZGVMaXN0PigqdGhpcywg
ZWxlbWVudE5hbWUpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0
cygpLmFkZENhY2hlV2l0aEF0b21OYW1lPE5hbWVOb2RlTGlzdD4oKnRoaXMsIGVsZW1lbnROYW1l
KTsKIH0KIAogUmVmPEhUTUxDb2xsZWN0aW9uPiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGNsYXNzTmFtZXMpCkBAIC05MDIsNyArOTAyLDcg
QEAgUmVmPEhUTUxDb2xsZWN0aW9uPiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKGNvbnN0IEF0b21TdHJpbmcmIGNsYXMKIFJlZjxSYWRpb05vZGVMaXN0PiBDb250YWluZXJO
b2RlOjpyYWRpb05vZGVMaXN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtVGFnKSB8fCBoYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZmllbGRzZXRUYWcpKTsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlz
dHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxpc3Q+KCp0aGlzLCBuYW1lKTsK
KyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdp
dGhBdG9tTmFtZTxSYWRpb05vZGVMaXN0PigqdGhpcywgbmFtZSk7CiB9CiAKIFJlZjxIVE1MQ29s
bGVjdGlvbj4gQ29udGFpbmVyTm9kZTo6Y2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggMzQxNmQ1ODczYjMzNzljMjJmMTBjYjFlZmI0NjgyYzI1M2QwOWM3MC4uMDYyZjRhZGUy
YjUxZTMwM2M4M2MyZjJiNmFhNGM4ZmRmM2FlMjVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIu
aCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNp
bmNsdWRlICJDREFUQVNlY3Rpb24uaCIKQEAgLTE3MjYsNyArMTcyNSwxMCBAQCB2b2lkIERvY3Vt
ZW50Ojp2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkKICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
dmlzaWJpbGl0eVN0YXRlQ2FsbGJhY2tDbGllbnRzKQogICAgICAgICBjbGllbnQtPnZpc2liaWxp
dHlTdGF0ZUNoYW5nZWQoKTsKIAotICAgIG5vdGlmeU1lZGlhQ2FwdHVyZU9mVmlzaWJpbGl0eUNo
YW5nZWQoKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIGlmIChhdXRvKiBwYWdlID0g
dGhpcy0+cGFnZSgpKQorICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0
b24oKS5zZXRDYXB0dXJlUGFnZVN0YXRlKGhpZGRlbigpLCBwYWdlLT5pc01lZGlhQ2FwdHVyZU11
dGVkKCkpOworI2VuZGlmCiB9CiAKIFZpc2liaWxpdHlTdGF0ZSBEb2N1bWVudDo6dmlzaWJpbGl0
eVN0YXRlKCkgY29uc3QKQEAgLTE3NDcsMjAgKzE3NDksMjMgQEAgYm9vbCBEb2N1bWVudDo6aGlk
ZGVuKCkgY29uc3QKIAogI2lmIEVOQUJMRShWSURFTykKIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKEhU
TUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjpyZWdpc3Rlck1lZGlhRWxl
bWVudChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fYWxsb3dzTWVkaWFEb2N1
bWVudElubGluZVBsYXliYWNrRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKKyAgICBtX21lZGlhRWxl
bWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvckFs
bG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlh
RWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJNZWRpYUVsZW1lbnQo
SFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2FsbG93c01lZGlhRG9jdW1lbnRJ
bmxpbmVQbGF5YmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CisgICAgbV9tZWRpYUVsZW1l
bnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFsbG93c01lZGlhRG9j
dW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQoKQordm9pZCBEb2N1bWVudDo6Zm9yRWFjaE1lZGlh
RWxlbWVudChjb25zdCBGdW5jdGlvbjx2b2lkKEhUTUxNZWRpYUVsZW1lbnQmKT4mIGZ1bmN0aW9u
KQogewotICAgIGZvciAoYXV0byogZWxlbWVudCA6IG1fYWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrRWxlbWVudHMpCi0gICAgICAgIGVsZW1lbnQtPmFsbG93c01lZGlhRG9jdW1lbnRJ
bmxpbmVQbGF5YmFja0NoYW5nZWQoKTsKKyAgICBWZWN0b3I8UmVmPEhUTUxNZWRpYUVsZW1lbnQ+
PiBlbGVtZW50czsKKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpCisg
ICAgICAgIGVsZW1lbnRzLmFwcGVuZCgqZWxlbWVudCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudHMpCisgICAgICAgIGZ1bmN0aW9uKGVsZW1lbnQpOwogfQogCiB2b2lkIERvY3Vt
ZW50OjpzdG9wQWxsTWVkaWFQbGF5YmFjaygpCkBAIC0xNzkyLDYgKzE3OTcsNyBAQCB2b2lkIERv
Y3VtZW50OjpyZXN1bWVBbGxNZWRpYUJ1ZmZlcmluZygpCiAgICAgaWYgKGF1dG8qIHBsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlciA9IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcklmRXhpc3RzKCkpCiAgICAgICAgIHBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci0+
cmVzdW1lQWxsTWVkaWFCdWZmZXJpbmdGb3JEb2N1bWVudCgqdGhpcyk7CiB9CisKICNlbmRpZgog
CiBTdHJpbmcgRG9jdW1lbnQ6Om5vZGVOYW1lKCkgY29uc3QKQEAgLTM3MDYsNyArMzcxMiw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NDb2xvclNjaGVtZShjb25zdCBTdHJpbmcmIGNvbG9yU2No
ZW1lU3RyaW5nKQogICAgIGJvb2wgYWxsb3dzVHJhbnNmb3JtYXRpb25zID0gdHJ1ZTsKICAgICBi
b29sIGF1dG9FbmNvdW50ZXJlZCA9IGZhbHNlOwogCi0gICAgcHJvY2Vzc0NvbG9yU2NoZW1lU3Ry
aW5nKGNvbG9yU2NoZW1lU3RyaW5nLCBbJl0oU3RyaW5nVmlldyBrZXkpIHsKKyAgICBwcm9jZXNz
Q29sb3JTY2hlbWVTdHJpbmcoY29sb3JTY2hlbWVTdHJpbmcsIFsmXSAoU3RyaW5nVmlldyBrZXkp
IHsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgImF1dG8i
KSkgewogICAgICAgICAgICAgY29sb3JTY2hlbWUgPSB7IH07CiAgICAgICAgICAgICBhbGxvd3NU
cmFuc2Zvcm1hdGlvbnMgPSB0cnVlOwpAQCAtNTM2MCwyMiArNTM2Niw2IEBAIHZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYgZWxl
bWVudCkKICAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZl
bGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKLXsK
LSAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cykK
LSAgICAgICAgZWxlbWVudC0+bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQot
ewotICAgIG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7Ci19Ci0K
LXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50
JiBlbGVtZW50KQotewotICAgIG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgm
ZWxlbWVudCk7Ci19Ci0KIGJvb2wgRG9jdW1lbnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJH
ZXN0dXJlKCkgY29uc3QKIHsKICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IHRoaXMt
PmxvYWRlcigpKSB7CkBAIC01NDIyLDIzICs1NDEyLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnByaXZh
dGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBp
ZiAobV9sb2dnZXIpCiAgICAgICAgIG1fbG9nZ2VyLT5zZXRFbmFibGVkKHRoaXMsIHNlc3Npb25J
RC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSk7CiAKLSAgICBmb3IgKGF1dG8qIGVsZW1lbnQg
OiBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzKQotICAgICAgICBlbGVtZW50
LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShzZXNzaW9uSUQpOwotfQotCi12b2lkIERv
Y3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50JiBlbGVtZW50KQotewotICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxl
bWVudHMuYWRkKCZlbGVtZW50KTsKLX0KLQotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBy
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQotewot
ICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50
KTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZm9yRWFjaE1lZGlhRWxlbWVudChbc2Vzc2lvbklE
XSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBlbGVtZW50LnByaXZhdGVC
cm93c2luZ1N0YXRlRGlkQ2hhbmdlKHNlc3Npb25JRCk7CisgICAgfSk7CisjZW5kaWYKIH0KIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JDYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIERv
Y3VtZW50OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoSFRN
TE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAocGFnZSgpKQogICAgICAgICBwYWdl
KCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0SW50ZXJlc3RlZEluQ2FwdGlvblBy
ZWZlcmVuY2VDaGFuZ2VzKCk7CkBAIC01NDQ2LDcgKzU0MjksNyBAQCB2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxl
bWVudCkKICAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5hZGQoJmVsZW1l
bnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6dW5yZWdp
c3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5y
ZW1vdmUoJmVsZW1lbnQpOwogfQpAQCAtNTQ1OSw0MiArNTQ0Miw2IEBAIHZvaWQgRG9jdW1lbnQ6
OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJ
QV9DT05UUk9MU19TQ1JJUFQpCi0KLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQotewotICAg
IG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7Ci19Ci0KLXZv
aWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKLX0KLQotdm9pZCBEb2N1bWVudDo6cGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCi17Ci0gICAgZm9yIChIVE1MTWVkaWFFbGVtZW50
KiBtZWRpYUVsZW1lbnQgOiBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cykKLSAgICAg
ICAgbWVkaWFFbGVtZW50LT5wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRDYWxs
YmFja3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX3VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25DaGFuZ2VkRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKLX0KLQotdm9pZCBE
b2N1bWVudDo6dW5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV91c2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7Ci19Ci0K
LXZvaWQgRG9jdW1lbnQ6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCkKLXsK
LSAgICBmb3IgKGF1dG8qIG1lZGlhRWxlbWVudCA6IG1fdXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbkNoYW5nZWRFbGVtZW50cykKLSAgICAgICAgbWVkaWFFbGVtZW50LT51c2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwotfQotCi0jZW5kaWYKLQogdm9pZCBEb2N1bWVudDo6
c2V0U2hvdWxkQ3JlYXRlUmVuZGVyZXJzKGJvb2wgZikKIHsKICAgICBtX2NyZWF0ZVJlbmRlcmVy
cyA9IGY7CkBAIC03MzU2LDYgKzczMDMsNyBAQCB2b2lkIERvY3VtZW50OjpwbGF5YmFja1Rhcmdl
dFBpY2tlcldhc0Rpc21pc3NlZCh1aW50NjRfdCBjbGllbnRJZCkKIAogICAgIGl0LT52YWx1ZS0+
cGxheWJhY2tUYXJnZXRQaWNrZXJXYXNEaXNtaXNzZWQoKTsKIH0KKwogI2VuZGlmIC8vIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikK
QEAgLTczODYsNiArNzMzNCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNob3VsZEVuZm9yY2VIVFRQMDlT
YW5kYm94KCkgY29uc3QKIH0KIAogI2lmIFVTRShRVUlDS19MT09LKQorCiBib29sIERvY3VtZW50
OjpzaG91bGRFbmZvcmNlUXVpY2tMb29rU2FuZGJveCgpIGNvbnN0CiB7CiAgICAgaWYgKG1faXNT
eW50aGVzaXplZCB8fCAhbV9mcmFtZSkKQEAgLTc0MTUsNiArNzM2NCw3IEBAIHZvaWQgRG9jdW1l
bnQ6OmFwcGx5UXVpY2tMb29rU2FuZGJveCgpCiAKICAgICBzZXRSZWZlcnJlclBvbGljeShSZWZl
cnJlclBvbGljeTo6Tm9SZWZlcnJlcik7CiB9CisKICNlbmRpZgogCiBib29sIERvY3VtZW50Ojpz
aG91bGRFbmZvcmNlQ29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goKSBjb25zdApA
QCAtNzQ2MSw2ICs3NDExLDcgQEAgdm9pZCBEb2N1bWVudDo6c2NoZWR1bGVUaW1lZFJlbmRlcmlu
Z1VwZGF0ZSgpCiB9CiAKICNpZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQorCiB2b2lk
IERvY3VtZW50OjphZGRJbnRlcnNlY3Rpb25PYnNlcnZlcihJbnRlcnNlY3Rpb25PYnNlcnZlciYg
b2JzZXJ2ZXIpCiB7CiAgICAgQVNTRVJUKG1faW50ZXJzZWN0aW9uT2JzZXJ2ZXJzLmZpbmQoJm9i
c2VydmVyKSA9PSBub3RGb3VuZCk7CkBAIC03NjkwLDkgKzc2NDEsMTEgQEAgdm9pZCBEb2N1bWVu
dDo6c2NoZWR1bGVJbml0aWFsSW50ZXJzZWN0aW9uT2JzZXJ2YXRpb25VcGRhdGUoKQogICAgIGVs
c2UgaWYgKCFtX2ludGVyc2VjdGlvbk9ic2VydmVyc0luaXRpYWxVcGRhdGVUaW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX2ludGVyc2VjdGlvbk9ic2VydmVyc0luaXRpYWxVcGRhdGVUaW1lci5z
dGFydE9uZVNob3QoaW50ZXJzZWN0aW9uT2JzZXJ2ZXJzSW5pdGlhbFVwZGF0ZURlbGF5KTsKIH0K
KwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVTSVpFX09CU0VSVkVSKQorCiB2b2lkIERvY3VtZW50
OjphZGRSZXNpemVPYnNlcnZlcihSZXNpemVPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7CiAgICAgaWYg
KCFtX3Jlc2l6ZU9ic2VydmVycy5jb250YWlucygmb2JzZXJ2ZXIpKQpAQCAtNzc3Miw2ICs3NzI1
LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUmVzaXplT2JzZXJ2YXRpb25zKFBhZ2UmIHBhZ2Up
CiAgICAgICAgIHNjaGVkdWxlVGltZWRSZW5kZXJpbmdVcGRhdGUoKTsKICAgICB9CiB9CisKICNl
bmRpZgogCiBjb25zdCBBdG9tU3RyaW5nJiBEb2N1bWVudDo6ZGlyKCkgY29uc3QKQEAgLTc4MTQs
MzkgKzc3NjgsMjEgQEAgdm9pZCBEb2N1bWVudDo6b3JpZW50YXRpb25DaGFuZ2VkKGludCBvcmll
bnRhdGlvbikKICAgICBtX29yaWVudGF0aW9uTm90aWZpZXIub3JpZW50YXRpb25DaGFuZ2VkKG9y
aWVudGF0aW9uKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6bm90aWZ5TWVkaWFDYXB0dXJlT2ZWaXNp
YmlsaXR5Q2hhbmdlZCgpCi17CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAoIXBh
Z2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6
c2luZ2xldG9uKCkuc2V0Q2FwdHVyZVBhZ2VTdGF0ZShoaWRkZW4oKSwgcGFnZSgpLT5pc01lZGlh
Q2FwdHVyZU11dGVkKCkpOwotI2VuZGlmCi19CiAKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
dm9pZCBEb2N1bWVudDo6c3RvcE1lZGlhQ2FwdHVyZSgpCiB7CiAgICAgTWVkaWFTdHJlYW1UcmFj
azo6ZW5kQ2FwdHVyZSgqdGhpcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVk
aWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQot
ewotICAgIG1fbWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUVsZW1lbnRzLmFkZCgmZWxlbWVudCk7Ci19
Ci0KLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JNZWRpYVN0cmVhbVN0YXRlQ2hhbmdlQ2Fs
bGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV9tZWRpYVN0cmVhbVN0
YXRlQ2hhbmdlRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKLX0KLQogdm9pZCBEb2N1bWVudDo6
bWVkaWFTdHJlYW1DYXB0dXJlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBpZiAoIU1lZGlhUHJvZHVj
ZXI6OmlzQ2FwdHVyaW5nKG1fbWVkaWFTdGF0ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoYXV0byogbWVkaWFFbGVtZW50IDogbV9tZWRpYVN0cmVhbVN0YXRlQ2hhbmdlRWxlbWVudHMp
Ci0gICAgICAgIG1lZGlhRWxlbWVudC0+bWVkaWFTdHJlYW1DYXB0dXJlU3RhcnRlZCgpOworICAg
IGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAg
ICAgICAgZWxlbWVudC5tZWRpYVN0cmVhbUNhcHR1cmVTdGFydGVkKCk7CisgICAgfSk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OnNldERldmljZUlESGFzaFNhbHQoY29uc3QgU3RyaW5nJiBzYWx0KQpA
QCAtNzg1NywyMiArNzc5Myw2IEBAIHZvaWQgRG9jdW1lbnQ6OnNldERldmljZUlESGFzaFNhbHQo
Y29uc3QgU3RyaW5nJiBzYWx0KQogCiAjZW5kaWYKIAotdm9pZCBEb2N1bWVudDo6YWRkQXBwbGlj
YXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lciYg
bGlzdGVuZXIpCi17Ci0gICAgbV9hcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXJzLmFkZCgm
bGlzdGVuZXIpOwotfQotCi12b2lkIERvY3VtZW50OjpyZW1vdmVBcHBsaWNhdGlvblN0YXRlQ2hh
bmdlTGlzdGVuZXIoQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyJiBsaXN0ZW5lcikKLXsK
LSAgICBtX2FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKCZsaXN0ZW5lcik7
Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OmZvckVhY2hBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVu
ZXIoY29uc3QgRnVuY3Rpb248dm9pZChBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImKT4m
IGZ1bmN0b3IpCi17Ci0gICAgZm9yIChhdXRvKiBsaXN0ZW5lciA6IG1fYXBwbGljYXRpb25TdGF0
ZUNoYW5nZUxpc3RlbmVycykKLSAgICAgICAgZnVuY3RvcigqbGlzdGVuZXIpOwotfQotCiBjb25z
dCBBdG9tU3RyaW5nJiBEb2N1bWVudDo6YmdDb2xvcigpIGNvbnN0CiB7CiAgICAgYXV0byogYm9k
eUVsZW1lbnQgPSBib2R5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDg5MmIzYjY0Yzc1ZWIx
ZDViMDkxOTg1NWYzOTljMGUzNWU2Yjg5NTYuLmNkNjVhNTAyNmNlZjg4MjMyODc4ZWM2NDM5YTc3
ODI2MjA3MDg1ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC04Nyw4ICs4Nyw2IEBAIGNsYXNz
IElucHV0Q3Vyc29yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEV2ZW50TG9vcDsK
LWNsYXNzIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcjsKIGNsYXNzIEFYT2JqZWN0Q2Fj
aGU7CiBjbGFzcyBBdHRyOwogY2xhc3MgQ0RBVEFTZWN0aW9uOwpAQCAtMTIwLDYgKzExOCw3IEBA
IGNsYXNzIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDsKIGNsYXNzIERvY3VtZW50VGltZWxpbmU7
CiBjbGFzcyBEb2N1bWVudFR5cGU7CiBjbGFzcyBFZGl0aW5nQmVoYXZpb3I7CitjbGFzcyBFdmVu
dExvb3A7CiBjbGFzcyBFdmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBFeHRlbnNpb25TdHlsZVNo
ZWV0czsKIGNsYXNzIEZsb2F0UXVhZDsKQEAgLTIxNyw5ICsyMTYsOSBAQCBjbGFzcyBYUGF0aFJl
c3VsdDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBFeGNlcHRpb25PcjsKIAogZW51bSBDb2xs
ZWN0aW9uVHlwZTsKLWVudW0gY2xhc3MgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA6IHVp
bnQ4X3Q7CiAKIGVudW0gY2xhc3MgUm91dGVTaGFyaW5nUG9saWN5IDogdWludDhfdDsKK2VudW0g
Y2xhc3MgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA6IHVpbnQ4X3Q7CiAKIHVzaW5nIFBs
YXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7CiAKQEAgLTIyNywxOCArMjI2LDE0IEBAIHVzaW5n
IFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7CiBjbGFzcyBUcmFuc2Zvcm1Tb3VyY2U7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpIHx8IEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQotY2xhc3MgVG91Y2g7Ci1jbGFzcyBUb3VjaExpc3Q7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFC
TEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogY2xhc3MgRGV2
aWNlTW90aW9uQ2xpZW50OwogY2xhc3MgRGV2aWNlTW90aW9uQ29udHJvbGxlcjsKIGNsYXNzIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50OwogY2xhc3MgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVy
OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogY2xhc3MgRGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOwogI2VuZGlmCiAKQEAgLTEwNzMs
OCArMTA2OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICB2b2lkIHJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlckNhbGxiYWNrcygpOwogCi0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2
ZW50cyhET01IaWdoUmVzVGltZVN0YW1wIHRpbWVzdGFtcCk7Ci0gICAgdm9pZCBzZXJ2aWNlUmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tzKERPTUhpZ2hSZXNUaW1lU3RhbXAgdGltZXN0YW1w
KTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKERPTUhpZ2hSZXNUaW1l
U3RhbXApOworICAgIHZvaWQgc2VydmljZVJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrcyhE
T01IaWdoUmVzVGltZVN0YW1wKTsKIAogICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBs
YXRmb3JtRGlzcGxheUlEKTsKIApAQCAtMTA5Miw5ICsxMDg3LDggQEAgcHVibGljOgogICAgIHZv
aWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKTsKICAgICB2b2lkIHJlc3VtZShSZWFzb25G
b3JTdXNwZW5zaW9uKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNr
cyhFbGVtZW50Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
RWxlbWVudCYpOwotICAgIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKKyAgICB2b2lkIHJl
Z2lzdGVyTWVkaWFFbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJNZWRpYUVsZW1lbnQoSFRNTE1lZGlhRWxlbWVudCYpOwogCiAgICAgYm9vbCBhdWRpb1BsYXli
YWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpIGNvbnN0OwogICAgIGJvb2wgdmlkZW9QbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUoKSBjb25zdDsKQEAgLTExMDQsMzQgKzEwOTgsMjAgQEAgcHVibGlj
OgogICAgIE1lZGlhU2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVs
ZW1lbnQmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOwotICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVEaWRD
aGFuZ2UoKTsKICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vz
c2lvbklEKTsKIAorICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFuZ2UoKTsKKwog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9y
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCBy
ZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxl
bWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZCgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQot
ICAgIHZvaWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxN
ZWRpYUVsZW1lbnQmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKLSAgICB2b2lkIHBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRBbmRTdGFibGUoKTsKLSAgICB2b2lkIHJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbkNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwotICAgIHZv
aWQgdW5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJh
Y2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKLSAgICB2b2lkIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25DaGFuZ2VkKCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5
U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmKTsKICAgICB2b2lk
IHVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlD
aGFuZ2VDbGllbnQmKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlZ2lzdGVyRm9y
QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVk
aWFFbGVtZW50Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElu
bGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7Ci0gICAgdm9p
ZCBhbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCk7Ci0KICAgICB2b2lk
IHN0b3BBbGxNZWRpYVBsYXliYWNrKCk7CiAgICAgdm9pZCBzdXNwZW5kQWxsTWVkaWFQbGF5YmFj
aygpOwogICAgIHZvaWQgcmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpOwpAQCAtMTIwMiwxNSArMTE4
MiwxNSBAQCBwdWJsaWM6CiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL0RvY3VtZW50SU9TLmg+
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXImIGRldmljZU1vdGlvbkNvbnRy
b2xsZXIoKSBjb25zdDsKICAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIGRldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2lt
dWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBk
b3VibGUgZ2FtbWEpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQog
ICAgIERldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlciYgZGV2aWNlT3Jp
ZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKKyNlbmRpZgogCiAgICAgY29uc3QgRG9jdW1lbnRUaW1pbmcmIHRp
bWluZygpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRUaW1pbmc7IH0KIApAQCAtMTQyNyw4ICsx
NDA3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGV2aWNlSURIYXNoU2FsdChjb25zdCBTdHJp
bmcmKTsKICAgICBTdHJpbmcgZGV2aWNlSURIYXNoU2FsdCgpIGNvbnN0IHsgcmV0dXJuIG1faWRI
YXNoU2FsdDsgfQogICAgIHZvaWQgc3RvcE1lZGlhQ2FwdHVyZSgpOwotICAgIHZvaWQgcmVnaXN0
ZXJGb3JNZWRpYVN0cmVhbVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsK
LSAgICB2b2lkIHVucmVnaXN0ZXJGb3JNZWRpYVN0cmVhbVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKEhU
TUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIG1lZGlhU3RyZWFtQ2FwdHVyZVN0YXRlQ2hhbmdl
ZCgpOwogI2VuZGlmCiAKQEAgLTE1MDUsOSArMTQ4Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFNlcnZpY2VXb3JrZXJDb25uZWN0aW9uKFNXQ2xpZW50Q29ubmVjdGlvbiopOwogI2VuZGlmCiAK
LSAgICB2b2lkIGFkZEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcihBcHBsaWNhdGlvblN0
YXRlQ2hhbmdlTGlzdGVuZXImKTsKLSAgICB2b2lkIHJlbW92ZUFwcGxpY2F0aW9uU3RhdGVDaGFu
Z2VMaXN0ZW5lcihBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImKTsKLSAgICB2b2lkIGZv
ckVhY2hBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoY29uc3QgRnVuY3Rpb248dm9pZChB
cHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXImKT4mKTsKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgdm9pZCBmb3JFYWNoTWVkaWFFbGVtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoSFRNTE1lZGlh
RWxlbWVudCYpPiYpOworI2VuZGlmCiAKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAg
ICBib29sIGhhbmRsaW5nVG91Y2hFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxpbmdUb3Vj
aEV2ZW50OyB9CkBAIC0xNjc0LDYgKzE2NTIsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0Jv
ZHlQb3RlbnRpYWxseVNjcm9sbGFibGUoSFRNTEJvZHlFbGVtZW50Jik7CiAKKyAgICB2b2lkIGRp
ZExvZ01lc3NhZ2UoY29uc3QgV1RGTG9nQ2hhbm5lbCYsIFdURkxvZ0xldmVsLCBWZWN0b3I8SlNP
TkxvZ1ZhbHVlPiYmKSBmaW5hbDsKKwogICAgIGNvbnN0IFJlZjxTZXR0aW5ncz4gbV9zZXR0aW5n
czsKIAogICAgIFVuaXF1ZVJlZjxRdWlya3M+IG1fcXVpcmtzOwpAQCAtMTc5NSwyNCArMTc3NSwx
OSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SFRNTENhbnZhc0VsZW1l
bnQ+PiBtX2Nzc0NhbnZhc0VsZW1lbnRzOwogCiAgICAgSGFzaFNldDxFbGVtZW50Kj4gbV9kb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzOwotICAgIEhhc2hTZXQ8RWxlbWVudCo+IG1f
bWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzOwotICAgIEhhc2hTZXQ8RWxlbWVudCo+IG1fcHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHM7CisKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gbV9tZWRpYUVsZW1lbnRzOworI2VuZGlmCisK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgSGFzaFNldDxFbGVtZW50Kj4gbV9jYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHM7CisgICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50
Kj4gbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHM7CiAjZW5kaWYKIAogICAgIEVs
ZW1lbnQqIG1fbWFpbkFydGljbGVFbGVtZW50IHsgbnVsbHB0ciB9OwogICAgIEhhc2hTZXQ8RWxl
bWVudCo+IG1fYXJ0aWNsZUVsZW1lbnRzOwogCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1ND
UklQVCkKLSAgICBIYXNoU2V0PEhUTUxNZWRpYUVsZW1lbnQqPiBtX3BhZ2VTY2FsZUZhY3RvckNo
YW5nZWRFbGVtZW50czsKLSAgICBIYXNoU2V0PEhUTUxNZWRpYUVsZW1lbnQqPiBtX3VzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkRWxlbWVudHM7Ci0jZW5kaWYKLQogICAgIEhhc2hT
ZXQ8VmlzaWJpbGl0eUNoYW5nZUNsaWVudCo+IG1fdmlzaWJpbGl0eVN0YXRlQ2FsbGJhY2tDbGll
bnRzOwotI2lmIEVOQUJMRShWSURFTykKLSAgICBIYXNoU2V0PEhUTUxNZWRpYUVsZW1lbnQqPiBt
X2FsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0VsZW1lbnRzOwotI2VuZGlmCiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIEVsZW1lbnQqLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+PiBtX2FjY2Vzc0tleUNhY2hlOwogCkBAIC0xODY4LDE3ICsxODQzLDE0IEBA
IHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SWRsZUNhbGxiYWNrQ29udHJvbGxlcj4g
bV9pZGxlQ2FsbGJhY2tDb250cm9sbGVyOwogCi0gICAgdm9pZCBub3RpZnlNZWRpYUNhcHR1cmVP
ZlZpc2liaWxpdHlDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIGRpZExvZ01lc3NhZ2UoY29uc3QgV1RG
TG9nQ2hhbm5lbCYsIFdURkxvZ0xldmVsLCBWZWN0b3I8SlNPTkxvZ1ZhbHVlPiYmKSBmaW5hbDsK
LQotI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXZpY2VNb3Rpb25DbGllbnQ+IG1fZGV2aWNlTW90aW9u
Q2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEZXZpY2VNb3Rpb25Db250cm9sbGVyPiBtX2Rl
dmljZU1vdGlvbkNvbnRyb2xsZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERldmljZU9yaWVudGF0
aW9uQ2xpZW50PiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI+IG1fZGV2aWNlT3JpZW50YXRpb25Db250cm9s
bGVyOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgIHN0ZDo6
dW5pcXVlX3B0cjxEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXI+IG1f
ZGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyOwogI2VuZGlmCiAKQEAg
LTIwNjksOCArMjA0MSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNXQ2xpZW50Q29ubmVjdGlv
bj4gbV9zZXJ2aWNlV29ya2VyQ29ubmVjdGlvbjsKICNlbmRpZgogCi0gICAgSGFzaFNldDxBcHBs
aWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIqPiBtX2FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0
ZW5lcnM7Ci0gICAgCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBS
ZWdpc3RyYWJsZURvbWFpbiBtX3JlZ2lzdHJhYmxlRG9tYWluUmVxdWVzdGVkUGFnZVNwZWNpZmlj
U3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24geyB9OwogICAgIFN0cmluZyBtX3JlZmVy
cmVyT3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMzc5NjIwNGRmMmI2Mzc0ZmM2
Y2QyYjgzYmMwNjJiNWIwZWU2NmNlYi4uNTM3ZWQyYjE3NmE0MjY5N2VhZDNlNjk4N2UzYzMwZTk4
MzdlNzA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNCw3ICs0LDcgQEAKICAqICAgICAg
ICAgICAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAg
ICAgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbk9wdGlvbnMuaCIKICNpbmNsdWRlICJLZXlm
cmFtZUVmZmVjdC5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmgi
CiAjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKQEAgLTMwNSwxMiArMzA2LDE0IEBAIHN0YXRp
YyBib29sIGlzRm9yY2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZl
bnQpCiB9CiAKICNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCisKIHN0YXRpYyBib29sIGlzQ29t
cGF0aWJpbGl0eU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKICAg
ICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jY29tcGF0aWJpbGl0eS1t
YXBwaW5nLXdpdGgtbW91c2UtZXZlbnRzCiAgICAgY29uc3QgYXV0byYgdHlwZSA9IG1vdXNlRXZl
bnQudHlwZSgpOwogICAgIHJldHVybiB0eXBlICE9IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYm
IHR5cGUgIT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50ICYmIHR5cGUgIT0gZXZlbnROYW1l
cygpLm1vdXNlb3V0RXZlbnQgJiYgdHlwZSAhPSBldmVudE5hbWVzKCkubW91c2VlbnRlckV2ZW50
ICYmIHR5cGUgIT0gZXZlbnROYW1lcygpLm1vdXNlbGVhdmVFdmVudDsKIH0KKwogI2VuZGlmCiAK
IGVudW0gY2xhc3MgU2hvdWxkSWdub3JlTW91c2VFdmVudCA6IGJvb2wgeyBObywgWWVzIH07CkBA
IC0xODg3LDYgKzE4OTAsNyBAQCBVUkwgRWxlbWVudDo6YWJzb2x1dGVMaW5rVVJMKCkgY29uc3QK
IH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKIGJvb2wgRWxlbWVudDo6YWxsb3dzRG91
YmxlVGFwR2VzdHVyZSgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQpAQCAt
MTg5Nyw2ICsxOTAxLDcgQEAgYm9vbCBFbGVtZW50OjphbGxvd3NEb3VibGVUYXBHZXN0dXJlKCkg
Y29uc3QKICAgICBFbGVtZW50KiBwYXJlbnQgPSBwYXJlbnRFbGVtZW50KCk7CiAgICAgcmV0dXJu
ICFwYXJlbnQgfHwgcGFyZW50LT5hbGxvd3NEb3VibGVUYXBHZXN0dXJlKCk7CiB9CisKICNlbmRp
ZgogCiBTdHlsZTo6UmVzb2x2ZXImIEVsZW1lbnQ6OnN0eWxlUmVzb2x2ZXIoKQpAQCAtMjYzMSw2
ICsyNjM2LDcgQEAgdm9pZCBFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogfQogCiAj
aWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorCiB2b2lkIEVsZW1lbnQ6OmZvcm1hdEZvckRlYnVn
Z2VyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAogewogICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwpAQCAtMjY1Niw2ICsyNjYyLDcgQEAgdm9pZCBFbGVtZW50Ojpmb3JtYXRG
b3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIAogICAgIHN0
cm5jcHkoYnVmZmVyLCByZXN1bHQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBsZW5ndGggLSAx
KTsKIH0KKwogI2VuZGlmCiAKIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXR0cj4+JiBFbGVtZW50Ojph
dHRyTm9kZUxpc3QoKQpAQCAtMjk5MSwxMiArMjk5OCwxMiBAQCB2b2lkIEVsZW1lbnQ6OmZvY3Vz
KGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiAgICAgfQogCiAgICAgU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlID0gU2VsZWN0aW9u
UmV2ZWFsTW9kZTo6UmV2ZWFsOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBG
b2N1c2luZyBhIGZvcm0gZWxlbWVudCB0cmlnZ2VycyBhbmltYXRpb24gaW4gVUlLaXQgdG8gc2Ny
b2xsIHRvIHRoZSByaWdodCBwb3NpdGlvbi4KICAgICAvLyBDYWxsaW5nIHVwZGF0ZUZvY3VzQXBw
ZWFyYW5jZSgpIHdvdWxkIGdlbmVyYXRlIGFuIHVubmVjZXNzYXJ5IGNhbGwgdG8gU2Nyb2xsVmll
dzo6c2V0U2Nyb2xsUG9zaXRpb24oKSwKICAgICAvLyB3aGljaCB3b3VsZCBqdW1wIHVzIGFyb3Vu
ZCBkdXJpbmcgdGhpcyBhbmltYXRpb24uIFNlZSA8cmRhcjovL3Byb2JsZW0vNjY5OTc0MT4uCi0g
ICAgYm9vbCBpc0Zvcm1Db250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obmV3VGFy
Z2V0KTsKLSAgICBpZiAoaXNGb3JtQ29udHJvbCkKKyAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4obmV3VGFyZ2V0KSkKICAgICAgICAgcmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbFVwVG9NYWluRnJhbWU7CiAjZW5kaWYKIApAQCAtMzU5OSw2ICszNjA2LDcg
QEAgYm9vbCBFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmIGNo
aWxkKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCiBzdGF0aWMgRWxl
bWVudCogcGFyZW50Q3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CkBAIC0zNjI5LDkgKzM2MzcsMTEgQEAgdm9pZCBF
bGVtZW50OjpzZXRDb250YWluc0Z1bGxTY3JlZW5FbGVtZW50T25BbmNlc3RvcnNDcm9zc2luZ0Zy
YW1lQm91bmRhcmllcyhib28KICAgICB3aGlsZSAoKGVsZW1lbnQgPSBwYXJlbnRDcm9zc2luZ0Zy
YW1lQm91bmRhcmllcyhlbGVtZW50KSkpCiAgICAgICAgIGVsZW1lbnQtPnNldENvbnRhaW5zRnVs
bFNjcmVlbkVsZW1lbnQoZmxhZyk7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJf
RVZFTlRTKQorCiBFeGNlcHRpb25Pcjx2b2lkPiBFbGVtZW50OjpzZXRQb2ludGVyQ2FwdHVyZShp
bnQzMl90IHBvaW50ZXJJZCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS5wYWdlKCkpCkBAIC0zNjUy
LDE3ICszNjYyLDIxIEBAIGJvb2wgRWxlbWVudDo6aGFzUG9pbnRlckNhcHR1cmUoaW50MzJfdCBw
b2ludGVySWQpCiAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLnBhZ2UoKS0+cG9pbnRlckNhcHR1
cmVDb250cm9sbGVyKCkuaGFzUG9pbnRlckNhcHR1cmUodGhpcywgcG9pbnRlcklkKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CisKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKwog
dm9pZCBFbGVtZW50OjpyZXF1ZXN0UG9pbnRlckxvY2soKQogewogICAgIGlmIChkb2N1bWVudCgp
LnBhZ2UoKSkKICAgICAgICAgZG9jdW1lbnQoKS5wYWdlKCktPnBvaW50ZXJMb2NrQ29udHJvbGxl
cigpLnJlcXVlc3RQb2ludGVyTG9jayh0aGlzKTsKIH0KKwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
SU5URVJTRUNUSU9OX09CU0VSVkVSKQorCiB2b2lkIEVsZW1lbnQ6OmRpc2Nvbm5lY3RGcm9tSW50
ZXJzZWN0aW9uT2JzZXJ2ZXJzKCkKIHsKICAgICBhdXRvKiBvYnNlcnZlckRhdGEgPSBpbnRlcnNl
Y3Rpb25PYnNlcnZlckRhdGEoKTsKQEAgLTM2OTAsNiArMzcwNCw3IEBAIEludGVyc2VjdGlvbk9i
c2VydmVyRGF0YSogRWxlbWVudDo6aW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhKCkKIHsKICAgICBy
ZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgpLT5pbnRlcnNlY3Rpb25PYnNl
cnZlckRhdGEoKSA6IG51bGxwdHI7CiB9CisKICNlbmRpZgogCiBLZXlmcmFtZUVmZmVjdFN0YWNr
JiBFbGVtZW50OjplbnN1cmVLZXlmcmFtZUVmZmVjdFN0YWNrKCkKQEAgLTM3MjUsNiArMzc0MCw3
IEBAIGJvb2wgRWxlbWVudDo6YXBwbHlLZXlmcmFtZUVmZmVjdHMoUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlKQogfQogCiAjaWYgRU5BQkxFKFJFU0laRV9PQlNFUlZFUikKKwogdm9pZCBFbGVtZW50
OjpkaXNjb25uZWN0RnJvbVJlc2l6ZU9ic2VydmVycygpCiB7CiAgICAgYXV0byogb2JzZXJ2ZXJE
YXRhID0gcmVzaXplT2JzZXJ2ZXJEYXRhKCk7CkBAIC0zNzQ4LDMzICszNzY0LDIwIEBAIFJlc2l6
ZU9ic2VydmVyRGF0YSogRWxlbWVudDo6cmVzaXplT2JzZXJ2ZXJEYXRhKCkKIHsKICAgICByZXR1
cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgpLT5yZXNpemVPYnNlcnZlckRhdGEo
KSA6IG51bGxwdHI7CiB9Ci0jZW5kaWYKIAotU3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlIEVsZW1l
bnQ6OnNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
c3BlbGxjaGVja0F0dHIpOwotICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IFNwZWxsY2hlY2tBdHRyaWJ1dGVEZWZhdWx0OwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwg
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJ0cnVlIikpCi0gICAgICAgIHJl
dHVybiBTcGVsbGNoZWNrQXR0cmlidXRlVHJ1ZTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UodmFsdWUsICJmYWxzZSIpKQotICAgICAgICByZXR1cm4gU3BlbGxjaGVja0F0
dHJpYnV0ZUZhbHNlOwotICAgIHJldHVybiBTcGVsbGNoZWNrQXR0cmlidXRlRGVmYXVsdDsKLX0K
KyNlbmRpZgogCiBib29sIEVsZW1lbnQ6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdAog
ewotICAgIGZvciAoY29uc3QgRWxlbWVudCogZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKLSAgICAgICAgc3dp
dGNoIChlbGVtZW50LT5zcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUoKSkgewotICAgICAgICBjYXNl
IFNwZWxsY2hlY2tBdHRyaWJ1dGVUcnVlOgorICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSB0aGlz
OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpKSB7CisgICAgICAgIGF1dG8mIHZhbHVlID0gYW5jZXN0b3ItPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcGVsbGNoZWNrQXR0cik7CisgICAgICAgIGlmICh2
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAodmFsdWUu
aXNFbXB0eSgpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgU3BlbGxjaGVja0F0dHJp
YnV0ZUZhbHNlOgorICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUsICJmYWxzZSIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIFNw
ZWxsY2hlY2tBdHRyaWJ1dGVEZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
ICAgICB9Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDQwMSw2ICs0NDA0LDcgQEAgRWxl
bWVudElkZW50aWZpZXIgRWxlbWVudDo6Y3JlYXRlRWxlbWVudElkZW50aWZpZXIoKQogfQogCiAj
aWYgRU5BQkxFKENTU19UWVBFRF9PTSkKKwogU3R5bGVQcm9wZXJ0eU1hcCogRWxlbWVudDo6YXR0
cmlidXRlU3R5bGVNYXAoKQogewogICAgIGlmICghaGFzUmFyZURhdGEoKSkKQEAgLTQ0MTIsNiAr
NDQxNiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlU3R5bGVNYXAoUmVmPFN0eWxlUHJv
cGVydHlNYXA+JiYgbWFwKQogewogICAgIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLnNldEF0dHJp
YnV0ZVN0eWxlTWFwKFdURk1vdmUobWFwKSk7CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBkNWU3MWU2OTljYzU4NWM5M2FjNTFkYWU2
N2M3OGY1YzRlZmY1YjM5Li44NDRhZTIyYWFiNjFkNTNhZTQ5YWJmZjg0OWFjYzhhMmFlOWM1YWNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnREYXRhLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0j
aW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVG9P
cHRpb25zLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTaGFkb3dSb290
TW9kZS5oIgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIgpAQCAtNTgsNyArNTYs
MTAgQEAgY2xhc3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlclRyZWVQb3NpdGlvbjsKIGNs
YXNzIFN0eWxlUHJvcGVydHlNYXA7CiBjbGFzcyBXZWJBbmltYXRpb247CisKK3N0cnVjdCBLZXlm
cmFtZUFuaW1hdGlvbk9wdGlvbnM7CiBzdHJ1Y3QgU2Nyb2xsSW50b1ZpZXdPcHRpb25zOworc3Ry
dWN0IFNjcm9sbFRvT3B0aW9uczsKIAogI2lmIEVOQUJMRShJTlRFUlNFQ1RJT05fT0JTRVJWRVIp
CiBzdHJ1Y3QgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEYXRhOwpAQCAtNzIsMTIgKzczLDYgQEAgbmFt
ZXNwYWNlIFN0eWxlIHsKIHN0cnVjdCBFbGVtZW50U3R5bGU7CiB9CiAKLWVudW0gU3BlbGxjaGVj
a0F0dHJpYnV0ZVN0YXRlIHsKLSAgICBTcGVsbGNoZWNrQXR0cmlidXRlVHJ1ZSwKLSAgICBTcGVs
bGNoZWNrQXR0cmlidXRlRmFsc2UsCi0gICAgU3BlbGxjaGVja0F0dHJpYnV0ZURlZmF1bHQKLX07
Ci0KIGNsYXNzIEVsZW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChFbGVtZW50KTsKIHB1YmxpYzoKQEAgLTEwNCwxNCArOTksMTMgQEAgcHVi
bGljOgogICAgIC8vIGF0dHJpYnV0ZSBvciBvbmUgb2YgdGhlIFNWRyBhbmltYXRhYmxlIGF0dHJp
YnV0ZXMuCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBjb25zdCBBdG9tU3RyaW5nJiBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmYXN0QXR0cmlidXRlTG9va3VwQWxs
b3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0jZW5kaWYKIAogI2lmIERVTVBfTk9E
RV9TVEFUSVNUSUNTCiAgICAgYm9vbCBoYXNOYW1lZE5vZGVNYXAoKSBjb25zdDsKICNlbmRpZgor
CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7CisKICAgICAv
LyBUaGlzIHZhcmlhbnQgd2lsbCBub3QgdXBkYXRlIHRoZSBwb3RlbnRpYWxseSBpbnZhbGlkIGF0
dHJpYnV0ZXMuIFRvIGJlIHVzZWQgd2hlbiBub3QgaW50ZXJlc3RlZAogICAgIC8vIGluIHN0eWxl
IGF0dHJpYnV0ZSBvciBvbmUgb2YgdGhlIFNWRyBhbmltYXRpb24gYXR0cmlidXRlcy4KICAgICBi
b29sIGhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkgY29uc3Q7CkBAIC0xOTksNiArMTkzLDcg
QEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUgYWJzb2x1dGUgYm91bmRpbmcgYm94IHRy
YW5zbGF0ZWQgaW50byBjbGllbnQgY29vcmRpbmF0ZXMuCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50
UmVjdCBjbGllbnRSZWN0KCkgY29uc3Q7CisKICAgICAvLyBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBi
b3VuZGluZyBib3ggdHJhbnNsYXRlZCBpbnRvIHNjcmVlbiBjb29yZGluYXRlcy4KICAgICBXRUJD
T1JFX0VYUE9SVCBJbnRSZWN0IHNjcmVlblJlY3QoKSBjb25zdDsKIApAQCAtMjIyLDE0ICsyMTcs
MTMgQEAgcHVibGljOgogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ1FOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV90YWdOYW1lOyB9CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdGF0aWMgcHRyZGlm
Zl90IHRhZ1FOYW1lTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEVsZW1l
bnQsIG1fdGFnTmFtZSk7IH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQorI2VuZGlmCiAgICAgU3Ry
aW5nIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBub2RlTmFtZSgpOyB9CiAgICAgYm9vbCBoYXNU
YWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
TmFtZS5tYXRjaGVzKHRhZ05hbWUpOyB9CiAgICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IEhUTUxR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBDb250YWluZXJOb2RlOjpoYXNU
YWdOYW1lKHRhZ05hbWUpOyB9CiAgICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IE1hdGhNTFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIENvbnRhaW5lck5vZGU6Omhhc1RhZ05h
bWUodGFnTmFtZSk7IH0KICAgICBib29sIGhhc1RhZ05hbWUoY29uc3QgU1ZHUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gQ29udGFpbmVyTm9kZTo6aGFzVGFnTmFtZSh0YWdO
YW1lKTsgfQogCi0gICAgLy8gQSBmYXN0IGZ1bmN0aW9uIGZvciBjaGVja2luZyB0aGUgbG9jYWwg
bmFtZSBhZ2FpbnN0IGFub3RoZXIgYXRvbWljIHN0cmluZy4KICAgICBib29sIGhhc0xvY2FsTmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2Fs
TmFtZSgpID09IG90aGVyOyB9CiAKICAgICBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0KQEAgLTI1Niw3ICsy
NTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1vZGlmaWVkQnlDbG9uaW5nCiAgICAgfTsKIAotICAg
IC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBhdHRyaWJ1dGUgaXMgYWRkZWQs
IGNoYW5nZWQgb3IgcmVtb3ZlZC4KKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3
aGVuZXZlciBhbiBhdHRyaWJ1dGUgaXMgYWRkZWQsIGNoYW5nZWQgb3IgcmVtb3ZlZC4KICAgICB2
aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbVN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21TdHJpbmcmIG5ld1ZhbHVlLCBBdHRyaWJ1
dGVNb2RpZmljYXRpb25SZWFzb24gPSBNb2RpZmllZERpcmVjdGx5KTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSB7IH0KIApAQCAtMzA4LDcgKzMwMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGVucXVldWVUb1Vw
Z3JhZGUoSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlJik7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUqIHJlYWN0aW9uUXVldWUoKSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiB0aGlzIHNo
b3VsZCBub3QgYmUgdmlydHVhbCwgZG8gbm90IG92ZXJyaWRlIHRoaXMuCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIG5vdCBiZSB2aXJ0dWFsLiBQbGVhc2UgZG8gbm90IGFkZCBhZGRpdGlvbmFs
IG92ZXJyaWRlcyBvZiB0aGlzIGZ1bmN0aW9uLgogICAgIHZpcnR1YWwgY29uc3QgQXRvbVN0cmlu
ZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWluKCkg
Y29uc3QgeyByZXR1cm4gaXNVc2VyQWN0aW9uRWxlbWVudCgpICYmIGlzVXNlckFjdGlvbkVsZW1l
bnRJbkFjdGl2ZUNoYWluKCk7IH0KQEAgLTQyMiwyMSArNDE2LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRvY3VtZW50U3VzcGVuc2lvbigpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkgeyB9CiAKLSAgICAvLyBVc2Ug
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoKSB0byBzdWJzY3JpYmUg
dG8gdGhpcwotICAgIHZpcnR1YWwgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpIHsgfQotCi0g
ICAgLy8gVXNlIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZENhbGxiYWNrcygpIHRvIHN1YnNjcmliZSB0byB0aGlzLgotICAgIHZpcnR1YWwgdm9pZCBwcml2
YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShQQUw6OlNlc3Npb25JRCkgeyB9Ci0KICAgICB2aXJ0
dWFsIHZvaWQgd2lsbEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCk7CiAgICAgdmlydHVhbCB2b2lk
IGFuY2VzdG9yV2lsbEVudGVyRnVsbHNjcmVlbigpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRC
ZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RvcEJl
aW5nRnVsbHNjcmVlbkVsZW1lbnQoKSB7IH0KIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpIHsgfQotI2VuZGlmCi0K
ICAgICBib29sIGlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBpc1Bh
cnNpbmdDaGlsZHJlbkZpbmlzaGVkKCk7IH0KICAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpIG92ZXJyaWRlOwogICAgIHZvaWQgYmVnaW5QYXJzaW5nQ2hpbGRyZW4oKSBmaW5hbDsKQEAg
LTcwOCw4ICs2OTIsNiBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgcmFyZURhdGFDaGlsZElu
ZGV4KCkgY29uc3Q7CiAKLSAgICBTcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUgc3BlbGxjaGVja0F0
dHJpYnV0ZVN0YXRlKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNyZWF0ZVVuaXF1ZUVsZW1lbnREYXRh
KCk7CiAKICAgICBFbGVtZW50UmFyZURhdGEqIGVsZW1lbnRSYXJlRGF0YSgpIGNvbnN0OwpAQCAt
NzI1LDYgKzcwNywxMCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXR0YWNoQXR0cmlidXRl
Tm9kZUlmTmVlZGVkKEF0dHImKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdDsKKyNlbmRpZgorCiAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZ05hbWU7CiAgICAgUmVmUHRy
PEVsZW1lbnREYXRhPiBtX2VsZW1lbnREYXRhOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaAppbmRl
eCA1MGE5NDE1OTliZGVjMjVmZTQxMWYyY2I0ZDY4YzQ5YjgxM2QzNTRjLi5iOTQ1MmYzMDU2MGUw
NWVkMTI0MGUzMDJmY2M5ZGU5ZTVlNjljNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5oCkBAIC0y
OSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVG91Y2g7CisKIGNs
YXNzIEV2ZW50UGF0aCB7CiBwdWJsaWM6CiAgICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwgRXZl
bnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IDFlNDI4
NzFiYzJiMjNjZjk4YWUwZDIyN2NmNWE3MDVlNzQ2NmI4N2YuLmU5MDRjNDVlYTUzMDRjNTZiZjM3
OTM0ZjhiYjE3MjJkZjRjOGRkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxs
c2NyZWVuTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5h
Z2VyLmNwcApAQCAtMzAsOCArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC0zODgsNyArMzg2LDcgQEAgdm9pZCBG
dWxsc2NyZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbHNjcmVlbihFbGVtZW50JiBlbGVtZW50KQog
ICAgIG1fZnVsbHNjcmVlbkVsZW1lbnQgPSAmZWxlbWVudDsKIAogI2lmIFVTRShOQVRJVkVfRlVM
TFNDUkVFTl9WSURFTykKLSAgICBpZiAoZWxlbWVudC5pc01lZGlhRWxlbWVudCgpKQorICAgIGlm
IChpczxIVE1MTWVkaWFFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKaW5kZXggMmEwYWZiODAxZWRlYWVmNWE4
YjAxNzQ5YTUyMzQ1MjY5NTdiOWViMi4uZjBhZGQyYWMyZDU0NjY2ZmEyZmU4NTc4OTYyY2I1NDA4
ZmJiNzM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKQEAgLTQwLDcgKzQwLDcg
QEAgTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIGNv
bnN0IEF0b21TdHJpbmcmIG5hbWUpCiAKIE5hbWVOb2RlTGlzdDo6fk5hbWVOb2RlTGlzdCgpCiB7
Ci0gICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUo
dGhpcywgbV9uYW1lKTsKKyAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVX
aXRoQXRvbU5hbWUoKnRoaXMsIG1fbmFtZSk7CiB9IAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggZjFiMDFlNTk5MjMzMjI2ODQzYTMyNTdmN2U4NjAzY2RlODNm
NjEwZC4uYTVkMjZiNWY4ODIxNzE1NTczNWEyYThkNTUwZjllMWNmNTUzZmJlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMTkxNCw4ICsxOTE0LDggQEAgdm9pZCBOb2RlOjpzaG93VHJlZUZvclRoaXNB
Y3Jvc3NGcmFtZSgpIGNvbnN0CiAKIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVD
YWNoZXMoKQogewotICAgIGZvciAoYXV0byYgYXRvbWljTmFtZSA6IG1fYXRvbWljTmFtZUNhY2hl
cykKLSAgICAgICAgYXRvbWljTmFtZS52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgZm9y
IChhdXRvJiBhdG9tTmFtZSA6IG1fYXRvbU5hbWVDYWNoZXMpCisgICAgICAgIGF0b21OYW1lLnZh
bHVlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIAogICAgIGZvciAoYXV0byYgY29sbGVjdGlvbiA6IG1f
Y2FjaGVkQ29sbGVjdGlvbnMpCiAgICAgICAgIGNvbGxlY3Rpb24udmFsdWUtPmludmFsaWRhdGVD
YWNoZSgpOwpAQCAtMTkyNiw4ICsxOTI2LDggQEAgdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52
YWxpZGF0ZUNhY2hlcygpCiAKIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNo
ZXNGb3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgZm9y
IChhdXRvJiBhdG9taWNOYW1lIDogbV9hdG9taWNOYW1lQ2FjaGVzKQotICAgICAgICBhdG9taWNO
YW1lLnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGVGb3JBdHRyaWJ1dGUoYXR0ck5hbWUpOworICAgIGZv
ciAoYXV0byYgYXRvbU5hbWUgOiBtX2F0b21OYW1lQ2FjaGVzKQorICAgICAgICBhdG9tTmFtZS52
YWx1ZS0+aW52YWxpZGF0ZUNhY2hlRm9yQXR0cmlidXRlKGF0dHJOYW1lKTsKIAogICAgIGZvciAo
YXV0byYgY29sbGVjdGlvbiA6IG1fY2FjaGVkQ29sbGVjdGlvbnMpCiAgICAgICAgIGNvbGxlY3Rp
b24udmFsdWUtPmludmFsaWRhdGVDYWNoZUZvckF0dHJpYnV0ZShhdHRyTmFtZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmgKaW5kZXggYmZmOTc1ZDg4MGUwYjQ3NDg1NzU1MDVlMDQ5NTQ0MWQ4
NzQyZmU5Zi4uMzc2NDEyYjQ0Njk2OGM5NWM5OWE0OTg2MTJjNDg3MzNjNGUwMzJhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IERhdmlkIFNtaXRoIDxjYXRmaXNoLm1hbkBnbWFpbC5jb20+CiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMjMsMzUgKzIzLDI2IEBACiAKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0Lmgi
CiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1ZGUgIlRhZ0NvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgTGFiZWxzTm9kZUxpc3Q7CitjbGFzcyBMaXZlTm9kZUxpc3Q7CiBj
bGFzcyBOYW1lTm9kZUxpc3Q7CiBjbGFzcyBSYWRpb05vZGVMaXN0OwotY2xhc3MgVHJlZVNjb3Bl
OwogCi10ZW1wbGF0ZSA8Y2xhc3MgTGlzdFR5cGU+IHN0cnVjdCBOb2RlTGlzdFR5cGVJZGVudGlm
aWVyOwotdGVtcGxhdGUgPD4gc3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8TmFtZU5vZGVM
aXN0PiB7IHN0YXRpYyBpbnQgdmFsdWUoKSB7IHJldHVybiAwOyB9IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgTm9kZUxpc3RUeXBlSWRlbnRpZmllcjxSYWRpb05vZGVMaXN0PiB7IHN0YXRpYyBpbnQg
dmFsdWUoKSB7IHJldHVybiAxOyB9IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgTm9kZUxpc3RUeXBl
SWRlbnRpZmllcjxMYWJlbHNOb2RlTGlzdD4geyBzdGF0aWMgaW50IHZhbHVlKCkgeyByZXR1cm4g
MjsgfSB9OwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdFR5cGU+IHN0cnVjdCBOb2RlTGlzdFR5cGVJ
ZGVudGlmaWVyOwogCiBjbGFzcyBOb2RlTGlzdHNOb2RlRGF0YSB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTm9kZUxpc3RzTm9kZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2RlTGlzdHNOb2RlRGF0YSk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgTm9kZUxpc3RzTm9kZURhdGEoKQotICAgICAg
ICA6IG1fY2hpbGROb2RlTGlzdChudWxscHRyKQotICAgICAgICAsIG1fZW1wdHlDaGlsZE5vZGVM
aXN0KG51bGxwdHIpCi0gICAgewotICAgIH0KKyAgICBOb2RlTGlzdHNOb2RlRGF0YSgpID0gZGVm
YXVsdDsKIAogICAgIHZvaWQgY2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQogICAgIHsKQEAgLTEw
NCwxNCArOTUsMTQgQEAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IERlZmF1bHRIYXNoPEF0b21TdHJpbmc+OjpIYXNoOjpz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZDsKICAgICB9OwogCi0gICAgdHlwZWRlZiBIYXNo
TWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9tU3RyaW5nPiwgTGl2ZU5vZGVMaXN0Kiwg
Tm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaD4gTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA7Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9tU3RyaW5nPiwg
SFRNTENvbGxlY3Rpb24qLCBOb2RlTGlzdENhY2hlTWFwRW50cnlIYXNoPiBDb2xsZWN0aW9uQ2Fj
aGVNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFF1YWxpZmllZE5hbWUsIFRhZ0NvbGxlY3Rpb25O
Uyo+IFRhZ0NvbGxlY3Rpb25OU0NhY2hlOworICAgIHVzaW5nIE5vZGVMaXN0Q2FjaGVNYXAgPSBI
YXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9tU3RyaW5nPiwgTGl2ZU5vZGVMaXN0
KiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaD47CisgICAgdXNpbmcgQ29sbGVjdGlvbkNhY2hl
TWFwID0gSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbVN0cmluZz4sIEhUTUxD
b2xsZWN0aW9uKiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaD47CisgICAgdXNpbmcgVGFnQ29s
bGVjdGlvbk5TQ2FjaGUgPSBIYXNoTWFwPFF1YWxpZmllZE5hbWUsIFRhZ0NvbGxlY3Rpb25OUyo+
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAg
ICBBTFdBWVNfSU5MSU5FIFJlZjxUPiBhZGRDYWNoZVdpdGhBdG9taWNOYW1lKENvbnRhaW5lclR5
cGUmIGNvbnRhaW5lciwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKKyAgICBBTFdBWVNfSU5MSU5F
IFJlZjxUPiBhZGRDYWNoZVdpdGhBdG9tTmFtZShDb250YWluZXJUeXBlJiBjb250YWluZXIsIGNv
bnN0IEF0b21TdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVD
YWNoZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5mYXN0QWRkKG5h
bWVkTm9kZUxpc3RLZXk8VD4obmFtZSksIG51bGxwdHIpOworICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fYXRvbU5hbWVDYWNoZXMuZmFzdEFkZChuYW1lZE5vZGVMaXN0S2V5PFQ+KG5hbWUpLCBudWxs
cHRyKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUJj4oKnJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCkBAIC0xMjIsOCAr
MTEzLDcgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSBSZWY8VGFnQ29sbGVjdGlvbk5T
PiBhZGRDYWNoZWRUYWdDb2xsZWN0aW9uTlMoQ29udGFpbmVyTm9kZSYgbm9kZSwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAg
ewotICAgICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0b20oKSwgbG9jYWxOYW1lLCBuYW1l
c3BhY2VVUkkpOwotICAgICAgICBUYWdDb2xsZWN0aW9uTlNDYWNoZTo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fdGFnQ29sbGVjdGlvbk5TQ2FjaGUuZmFzdEFkZChuYW1lLCBudWxscHRyKTsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBtX3RhZ0NvbGxlY3Rpb25OU0NhY2hlLmZhc3RBZGQoUXVhbGlmaWVk
TmFtZSB7IG51bGxBdG9tKCksIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJIH0sIG51bGxwdHIpOwog
ICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuICpyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogCkBAIC0xMzUsNyArMTI1LDcgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgQUxXQVlTX0lO
TElORSBSZWY8VD4gYWRkQ2FjaGVkQ29sbGVjdGlvbihDb250YWluZXJUeXBlJiBjb250YWluZXIs
IENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQog
ICAgIHsKLSAgICAgICAgQ29sbGVjdGlvbkNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9j
YWNoZWRDb2xsZWN0aW9ucy5mYXN0QWRkKG5hbWVkQ29sbGVjdGlvbktleShjb2xsZWN0aW9uVHlw
ZSwgbmFtZSksIG51bGxwdHIpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY2FjaGVkQ29sbGVj
dGlvbnMuZmFzdEFkZChuYW1lZENvbGxlY3Rpb25LZXkoY29sbGVjdGlvblR5cGUsIG5hbWUpLCBu
dWxscHRyKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUJj4oKnJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCkBAIC0xNDcs
NyArMTM3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENv
bnRhaW5lclR5cGU+CiAgICAgQUxXQVlTX0lOTElORSBSZWY8VD4gYWRkQ2FjaGVkQ29sbGVjdGlv
bihDb250YWluZXJUeXBlJiBjb250YWluZXIsIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBl
KQogICAgIHsKLSAgICAgICAgQ29sbGVjdGlvbkNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9jYWNoZWRDb2xsZWN0aW9ucy5mYXN0QWRkKG5hbWVkQ29sbGVjdGlvbktleShjb2xsZWN0aW9u
VHlwZSwgc3RhckF0b20oKSksIG51bGxwdHIpOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY2Fj
aGVkQ29sbGVjdGlvbnMuZmFzdEFkZChuYW1lZENvbGxlY3Rpb25LZXkoY29sbGVjdGlvblR5cGUs
IHN0YXJBdG9tKCkpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUJj4oKnJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpOwogCkBAIC0xNjIsMTMgKzE1MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4obV9jYWNoZWRDb2xsZWN0aW9ucy5nZXQobmFtZWRDb2xsZWN0aW9uS2V5KGNv
bGxlY3Rpb25UeXBlLCBzdGFyQXRvbSgpKSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDxjbGFz
cyBOb2RlTGlzdFR5cGU+Ci0gICAgdm9pZCByZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKE5vZGVM
aXN0VHlwZSogbGlzdCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSA9IHN0YXJBdG9tKCkpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTm9kZUxpc3RUeXBlPgorICAgIHZvaWQgcmVtb3ZlQ2FjaGVXaXRo
QXRvbU5hbWUoTm9kZUxpc3RUeXBlJiBsaXN0LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGxpc3QgPT0gbV9hdG9taWNOYW1lQ2FjaGVzLmdldChuYW1lZE5v
ZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFtZSkpKTsKLSAgICAgICAgaWYgKGRlbGV0ZVRoaXNB
bmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlzdChsaXN0LT5vd25lck5v
ZGUoKSkpCisgICAgICAgIEFTU0VSVCgmbGlzdCA9PSBtX2F0b21OYW1lQ2FjaGVzLmdldChuYW1l
ZE5vZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFtZSkpKTsKKyAgICAgICAgaWYgKGRlbGV0ZVRo
aXNBbmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlzdChsaXN0Lm93bmVy
Tm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9hdG9taWNOYW1lQ2FjaGVz
LnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFtZSkpOworICAgICAgICBt
X2F0b21OYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5PE5vZGVMaXN0VHlwZT4obmFt
ZSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVtb3ZlQ2FjaGVkVGFnQ29sbGVjdGlvbk5TKEhUTUxD
b2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IEF0b21TdHJpbmcmIGxvY2FsTmFtZSkKQEAgLTIwMyw3ICsxOTMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIGNhY2hl
IDogbV9hdG9taWNOYW1lQ2FjaGVzLnZhbHVlcygpKQorICAgICAgICBmb3IgKGF1dG8mIGNhY2hl
IDogbV9hdG9tTmFtZUNhY2hlcy52YWx1ZXMoKSkKICAgICAgICAgICAgIGNhY2hlLT5pbnZhbGlk
YXRlQ2FjaGVGb3JEb2N1bWVudChvbGREb2N1bWVudCk7CiAKICAgICAgICAgZm9yIChhdXRvJiBs
aXN0IDogbV90YWdDb2xsZWN0aW9uTlNDYWNoZS52YWx1ZXMoKSkgewpAQCAtMjIxLDcgKzIxMSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRv
bVN0cmluZz4odHlwZSwgbmFtZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPGNsYXNzIE5vZGVM
aXN0VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlTGlzdFR5cGU+CiAgICAgc3RkOjpw
YWlyPHVuc2lnbmVkIGNoYXIsIEF0b21TdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoY29uc3QgQXRv
bVN0cmluZyYgbmFtZSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQg
Y2hhciwgQXRvbVN0cmluZz4oTm9kZUxpc3RUeXBlSWRlbnRpZmllcjxOb2RlTGlzdFR5cGU+Ojp2
YWx1ZSgpLCBuYW1lKTsKQEAgLTIzMCwxMCArMjIwLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBk
ZWxldGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRvUmVtb3ZlTGFzdExpc3QoTm9k
ZSYpOwogCiAgICAgLy8gVGhlc2UgdHdvIGFyZSBjdXJyZW50bHkgbXV0dWFsbHkgZXhjbHVzaXZl
IGFuZCBjb3VsZCBiZSB1bmlvbmVkLiBOb3QgdmVyeSBpbXBvcnRhbnQgYXMgdGhpcyBjbGFzcyBp
cyBsYXJnZSBhbnl3YXkuCi0gICAgQ2hpbGROb2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0OwotICAg
IEVtcHR5Tm9kZUxpc3QqIG1fZW1wdHlDaGlsZE5vZGVMaXN0OworICAgIENoaWxkTm9kZUxpc3Qq
IG1fY2hpbGROb2RlTGlzdCB7IG51bGxwdHIgfTsKKyAgICBFbXB0eU5vZGVMaXN0KiBtX2VtcHR5
Q2hpbGROb2RlTGlzdCB7IG51bGxwdHIgfTsKIAotICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hl
TWFwIG1fYXRvbWljTmFtZUNhY2hlczsKKyAgICBOb2RlTGlzdENhY2hlTWFwIG1fYXRvbU5hbWVD
YWNoZXM7CiAgICAgVGFnQ29sbGVjdGlvbk5TQ2FjaGUgbV90YWdDb2xsZWN0aW9uTlNDYWNoZTsK
ICAgICBDb2xsZWN0aW9uQ2FjaGVNYXAgbV9jYWNoZWRDb2xsZWN0aW9uczsKIH07CkBAIC0zMzEs
MTEgKzMyMSwyNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlTXV0YXRpb25P
YnNlcnZlckRhdGE+IG1fbXV0YXRpb25PYnNlcnZlckRhdGE7CiB9OwogCit0ZW1wbGF0ZTw+IHN0
cnVjdCBOb2RlTGlzdFR5cGVJZGVudGlmaWVyPE5hbWVOb2RlTGlzdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgY2hhciB2YWx1ZSgpIHsgcmV0dXJuIDA7IH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8UmFkaW9Ob2RlTGlzdD4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2hhciB2YWx1ZSgpIHsgcmV0dXJuIDE7IH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8TGFiZWxzTm9kZUxp
c3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNoYXIgdmFsdWUoKSB7IHJldHVy
biAyOyB9Cit9OworCiBpbmxpbmUgYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6ZGVsZXRlVGhpc0Fu
ZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KE5vZGUmIG93bmVyTm9k
ZSkKIHsKICAgICBBU1NFUlQob3duZXJOb2RlLm5vZGVMaXN0cygpID09IHRoaXMpOwotICAgIGlm
ICgobV9jaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6
IDApICsgbV9hdG9taWNOYW1lQ2FjaGVzLnNpemUoKQotICAgICAgICArIG1fdGFnQ29sbGVjdGlv
bk5TQ2FjaGUuc2l6ZSgpICsgbV9jYWNoZWRDb2xsZWN0aW9ucy5zaXplKCkgIT0gMSkKKyAgICBz
aXplX3QgbGlzdHNDb3VudCA9IChtX2NoaWxkTm9kZUxpc3QgPyAxIDogMCkKKyAgICAgICAgKyAo
bV9lbXB0eUNoaWxkTm9kZUxpc3QgPyAxIDogMCkKKyAgICAgICAgKyBtX2F0b21OYW1lQ2FjaGVz
LnNpemUoKQorICAgICAgICArIG1fdGFnQ29sbGVjdGlvbk5TQ2FjaGUuc2l6ZSgpCisgICAgICAg
ICsgbV9jYWNoZWRDb2xsZWN0aW9ucy5zaXplKCk7CisgICAgaWYgKGxpc3RzQ291bnQgIT0gMSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG93bmVyTm9kZS5jbGVhck5vZGVMaXN0cygpOwog
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCAyMWIxNWQ1Yjk4
YmQyMmRhZjUyNGVlMjcwNzlkNmZjOTM1MDg0MmQzLi40NGQ3MzU3NWQzMmVmZThjNGYyN2IxYmRl
NDJkZmRhZTVkMDZlNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMTEyLDggKzEx
Miw4IEBAIEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgU3RyaW5nJiBl
bGVtZW50SWQpIGNvbnN0CiAgICAgaWYgKCFtX2VsZW1lbnRzQnlJZCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBpZiAoUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBhdG9taWNFbGVtZW50
SWQgPSBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGVsZW1lbnRJZC5pbXBsKCkpKQotICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50c0J5SWQtPmdldEVsZW1lbnRCeUlkKCphdG9taWNFbGVtZW50SWQsICp0
aGlzKTsKKyAgICBpZiAoYXV0byBhdG9tRWxlbWVudElkID0gQXRvbVN0cmluZ0ltcGw6Omxvb2tV
cChlbGVtZW50SWQuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIG1fZWxlbWVudHNCeUlkLT5nZXRF
bGVtZW50QnlJZCgqYXRvbUVsZW1lbnRJZCwgKnRoaXMpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CkBAIC0xMjMsOCArMTIzLDggQEAgRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJ
ZChTdHJpbmdWaWV3IGVsZW1lbnRJZCkgY29uc3QKICAgICBpZiAoIW1fZWxlbWVudHNCeUlkKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChhdXRvIGF0b21pY0VsZW1lbnRJZCA9
IGVsZW1lbnRJZC50b0V4aXN0aW5nQXRvbVN0cmluZygpKQotICAgICAgICByZXR1cm4gbV9lbGVt
ZW50c0J5SWQtPmdldEVsZW1lbnRCeUlkKCphdG9taWNFbGVtZW50SWQsICp0aGlzKTsKKyAgICBp
ZiAoYXV0byBhdG9tRWxlbWVudElkID0gZWxlbWVudElkLnRvRXhpc3RpbmdBdG9tU3RyaW5nKCkp
CisgICAgICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC0+Z2V0RWxlbWVudEJ5SWQoKmF0b21FbGVt
ZW50SWQsICp0aGlzKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMzM2OTBlYTZkZGMzOGQ5ODdhNjRkYmE0Yjgx
ZDcwOTc4MjIzOGRlZC4uY2JmMzFlYmYzNThlNzgyYjQzOGI4YzI4OGVhNmE4YTU0MDhkZjQ1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yNzQsMzAgKzI3
NCw2IEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhIVE1MTWVkaWFFbGVtZW50
OjpBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZSBlCiAgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAotdHlwZWRlZiBIYXNoTWFwPERv
Y3VtZW50KiwgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4+IERvY3VtZW50RWxlbWVudFNldE1h
cDsKLXN0YXRpYyBEb2N1bWVudEVsZW1lbnRTZXRNYXAmIGRvY3VtZW50VG9FbGVtZW50U2V0TWFw
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RG9jdW1lbnRFbGVtZW50U2V0TWFwPiBt
YXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIHZvaWQgYWRkRWxlbWVudFRvRG9jdW1l
bnRNYXAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCwgRG9jdW1lbnQmIGRvY3VtZW50KQotewot
ICAgIERvY3VtZW50RWxlbWVudFNldE1hcCYgbWFwID0gZG9jdW1lbnRUb0VsZW1lbnRTZXRNYXAo
KTsKLSAgICBIYXNoU2V0PEhUTUxNZWRpYUVsZW1lbnQqPiBzZXQgPSBtYXAudGFrZSgmZG9jdW1l
bnQpOwotICAgIHNldC5hZGQoJmVsZW1lbnQpOwotICAgIG1hcC5hZGQoJmRvY3VtZW50LCBzZXQp
OwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVFbGVtZW50RnJvbURvY3VtZW50TWFwKEhUTUxNZWRp
YUVsZW1lbnQmIGVsZW1lbnQsIERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBEb2N1bWVudEVs
ZW1lbnRTZXRNYXAmIG1hcCA9IGRvY3VtZW50VG9FbGVtZW50U2V0TWFwKCk7Ci0gICAgSGFzaFNl
dDxIVE1MTWVkaWFFbGVtZW50Kj4gc2V0ID0gbWFwLnRha2UoJmRvY3VtZW50KTsKLSAgICBzZXQu
cmVtb3ZlKCZlbGVtZW50KTsKLSAgICBpZiAoIXNldC5pc0VtcHR5KCkpCi0gICAgICAgIG1hcC5h
ZGQoJmRvY3VtZW50LCBzZXQpOwotfQotCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCiBjbGFz
cyBUcmFja0Rpc3BsYXlVcGRhdGVTY29wZSB7CkBAIC02NzMsMTYgKzY0OSwxMyBAQCBSZWZQdHI8
SFRNTE1lZGlhRWxlbWVudD4gSFRNTE1lZGlhRWxlbWVudDo6YmVzdE1lZGlhRWxlbWVudEZvclNo
b3dpbmdQbGF5YmFja0NvbgogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERv
Y3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKKyAgICBkb2N1bWVudC5yZWdpc3Rlck1lZGlh
RWxlbWVudCgqdGhpcyk7CisKICAgICBtX21lZGlhU2Vzc2lvbi0+cmVnaXN0ZXJXaXRoRG9jdW1l
bnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQog
ICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCi0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVt
ZUNhbGxiYWNrcygqdGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotI2VuZGlmCi0KICAgICBkb2N1bWVudC5y
ZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtNjkwLDQwICs2NjMsMjIgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAg
IGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygq
dGhpcyk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAg
aWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1
bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwot
ICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5n
ZWRDYWxsYmFja3MoKnRoaXMpOwotI2VuZGlmCi0KICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKQogICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JBbGxvd3NN
ZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLQogICAg
IGRvY3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwotICAgIGFkZEVsZW1lbnRUb0RvY3Vt
ZW50TWFwKCp0aGlzLCBkb2N1bWVudCk7Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAg
IGRvY3VtZW50LnJlZ2lzdGVyRm9yTWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcygqdGhp
cyk7Ci0jZW5kaWYKLQotICAgIGRvY3VtZW50LmFkZEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0
ZW5lcigqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CisgICAgZG9jdW1lbnQudW5yZWdpc3Rlck1l
ZGlhRWxlbWVudCgqdGhpcyk7CisKICAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhE
b2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQpCiAgICAgICAgIGRvY3VtZW50LnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7
CiAKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
TWVkaWFWb2x1bWVDYWxsYmFja3MoKnRoaXMpOwotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQ
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotI2VuZGlmCi0KICAg
ICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygq
dGhpcyk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC03MzEsMjYgKzY4NiwxMSBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCi0gICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFj
dG9yKQotICAgICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7Ci0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLSNlbmRpZgotCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBkb2N1bWVudC51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0gICAgZG9j
dW1lbnQudW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5n
ZWRDYWxsYmFja3MoKnRoaXMpOwotCiAgICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcigq
dGhpcyk7Ci0gICAgcmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQp
OwotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
TWVkaWFTdHJlYW1TdGF0ZUNoYW5nZUNhbGxiYWNrcygqdGhpcyk7Ci0jZW5kaWYKLQotICAgIGRv
Y3VtZW50LnJlbW92ZUFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcigqdGhpcyk7CiB9CiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9s
ZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCkBAIC03NjksNiArNzA5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9j
dW1lbnQsIERvY3VtZW50JiBuZXcKIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckRvY3VtZW50U3VzcGVu
c2lvbigpCiB7CiAgICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9j
dW1lbnQoKSk7CkBAIC03NzksNiArNzIwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZXN1
bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKICAgICBtX21lZGlhU2Vzc2lvbi0+cmVnaXN0ZXJX
aXRoRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgdXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsKIH0K
KwogI2VuZGlmCiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0
CkBAIC01Nzk2LDggKzU3MzgsMTEgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhVm9sdW1lRGlk
Q2hhbmdlKCkKIHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byByZWNvbmNpbGUgdGhp
cyBzbyB0aGVyZSdzIG5vIGRpZmZlcmVuY2UgZm9yIFBMQVRGT1JNKElPU19GQU1JTFkpLgorI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogICAg
IHVwZGF0ZVZvbHVtZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZCgpCkBAIC02NDU3LDEwICs2NDAyLDE1IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
IHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyeSB0byByZWNvbmNpbGUgdGhpcyBzbyB0aGVy
ZSdzIG5vIGRpZmZlcmVuY2UgZm9yIFBMQVRGT1JNKElPU19GQU1JTFkpLgorI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb25JRCk7CisjZWxzZQogICAgIGlm
ICghbV9wbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGxheWVyLT5zZXRQcml2YXRl
QnJvd3NpbmdNb2RlKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKKyNlbmRpZgogfQogCiBNZWRp
YUNvbnRyb2xzKiBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUNvbnRyb2xzKCkgY29uc3QKQEAgLTY3
MjksNiArNjY3OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIo
KQogfQogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKKwogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRBdWRpb1NvdXJjZU5vZGUoTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBzb3VyY2VOb2Rl
KQogewogICAgIG1fYXVkaW9Tb3VyY2VOb2RlID0gc291cmNlTm9kZTsKQEAgLTY3NDIsOCArNjY5
Myw5IEBAIEF1ZGlvU291cmNlUHJvdmlkZXIqIEhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvU291cmNl
UHJvdmlkZXIoKQogICAgIGlmIChtX3BsYXllcikKICAgICAgICAgcmV0dXJuIG1fcGxheWVyLT5h
dWRpb1NvdXJjZVByb3ZpZGVyKCk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KKwogI2VuZGlmCiAKIGNvbnN0IFN0cmluZyYgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFH
cm91cCgpIGNvbnN0CkBAIC02NzY5LDIyICs2NzIxLDE5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFHcm91cChjb25zdCBTdHJpbmcmIGdyb3VwKQogCiAgICAgLy8gNC4gSWYgdGhl
cmUgaXMgYW5vdGhlciBtZWRpYSBlbGVtZW50IHdob3NlIERvY3VtZW50IGlzIHRoZSBzYW1lIGFz
IG0ncyBEb2N1bWVudCAoZXZlbiBpZiBvbmUgb3IgYm90aAogICAgIC8vIG9mIHRoZXNlIGVsZW1l
bnRzIGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIERvY3VtZW50KSwKLSAgICBIYXNoU2V0PEhUTUxN
ZWRpYUVsZW1lbnQqPiBlbGVtZW50cyA9IGRvY3VtZW50VG9FbGVtZW50U2V0TWFwKCkuZ2V0KCZk
b2N1bWVudCgpKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewotICAgICAg
ICBpZiAoZWxlbWVudCA9PSB0aGlzKQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICAvLyBG
SVhNRTogSXQgZG9lcyBub3Qgc2VlbSBPSyB0aGF0IHRoaXMgYWxnb3JpdGhtIGl0ZXJhdGVzIHRo
ZSBtZWRpYSBlbGVtZW50cyBpbiBhIHJhbmRvbSBvcmRlci4KKyAgICBkb2N1bWVudCgpLmZvckVh
Y2hNZWRpYUVsZW1lbnQoWyZdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSB7CiAgICAgICAg
IC8vIGFuZCB3aGljaCBhbHNvIGhhcyBhIG1lZGlhZ3JvdXAgYXR0cmlidXRlLCBhbmQgd2hvc2Ug
bWVkaWFncm91cCBhdHRyaWJ1dGUgaGFzIHRoZSBzYW1lIHZhbHVlIGFzCiAgICAgICAgIC8vIHRo
ZSBuZXcgdmFsdWUgb2YgbSdzIG1lZGlhZ3JvdXAgYXR0cmlidXRlLAotICAgICAgICBpZiAoZWxl
bWVudC0+bWVkaWFHcm91cCgpID09IGdyb3VwKSB7CisgICAgICAgIGlmICgmZWxlbWVudCAhPSB0
aGlzICYmICFjb250cm9sbGVyKCkgJiYgZWxlbWVudC5tZWRpYUdyb3VwKCkgPT0gZ3JvdXApIHsK
ICAgICAgICAgICAgIC8vICB0aGVuIGxldCBjb250cm9sbGVyIGJlIHRoYXQgbWVkaWEgZWxlbWVu
dCdzIGN1cnJlbnQgbWVkaWEgY29udHJvbGxlci4KLSAgICAgICAgICAgIHNldENvbnRyb2xsZXIo
ZWxlbWVudC0+Y29udHJvbGxlcigpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHNldENvbnRyb2xsZXIoZWxlbWVudC5jb250cm9sbGVyKCkpOwogICAgICAgICB9Ci0gICAgfQor
ICAgIH0pOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBsZXQgY29udHJvbGxlciBiZSBhIG5ld2x5IGNy
ZWF0ZWQgTWVkaWFDb250cm9sbGVyLgotICAgIHNldENvbnRyb2xsZXIoTWVkaWFDb250cm9sbGVy
OjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIGlmICghY29udHJvbGxlcigpKQorICAgICAgICBz
ZXRDb250cm9sbGVyKE1lZGlhQ29udHJvbGxlcjo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKIH0KIAog
TWVkaWFDb250cm9sbGVyKiBIVE1MTWVkaWFFbGVtZW50Ojpjb250cm9sbGVyKCkgY29uc3QKQEAg
LTcxMzksNiArNzA4OCw3IEBAIFZlY3RvcjxTdHJpbmc+IEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyUHJlZmVycmVkQXVkaW9DaGFyYWN0ZXJpc3RpY3MoKSBjb25zCiB9CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorCiBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJO
ZXR3b3JrSW50ZXJmYWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9i
YWxTZXR0aW5nczo6bmV0d29ya0ludGVyZmFjZU5hbWUoKTsKQEAgLTcxNTAsNiArNzEwMCw3IEBA
IGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJHZXRSYXdDb29raWVzKGNvbnN0IFVS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYKICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvb2tpZUphcigp
LmdldFJhd0Nvb2tpZXMoZG9jdW1lbnQoKSwgdXJsLCBjb29raWVzKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CisKICNlbmRpZgogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRW5n
aW5lRmFpbGVkVG9Mb2FkKCkgY29uc3QKQEAgLTc0MjEsMTUgKzczNzIsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29s
IGRlcGVuZHNPblBhZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fbWVkaWFD
b250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yID09IGRlcGVuZHNPblBhZ2VTY2FsZSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0
b3IgPSBkZXBlbmRzT25QYWdlU2NhbGU7Ci0KLSAgICBpZiAobV9tZWRpYUNvbnRyb2xzRGVwZW5k
T25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMp
OwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclBy
ZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKQpAQCAtNzQ3Miw3ICs3NDE1LDggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdl
KCkKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKIHsK
LSAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JKU1Byb3BlcnR5KCk7CisgICAgaWYgKG1fbWVkaWFD
b250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQorICAgICAgICB1cGRhdGVQYWdlU2NhbGVG
YWN0b3JKU1Byb3BlcnR5KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWQoKQpAQCAtNzk0MCw2ICs3ODg0LDcgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKIH0KIAogI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OKQorCiBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6cGxheWVyVm9sdW1l
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGF5ZXIgPyBtX3BsYXllci0+dm9sdW1lKCkgOiAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBlYjkxZjNlZDIyYzYy
MDI2NzdiMzQ4OGIzMjQwMjM4Y2JmMThlODc4Li4xZDZkZDJlZDQ0NTFhMWZjMGIxMzBmMDZmZTc4
ZmJlOGJmNTRjYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIuaCIKICNp
bmNsdWRlICJBdXRvcGxheUV2ZW50LmgiCiAjaW5jbHVkZSAiRGVmZXJyYWJsZVRhc2suaCIKICNp
bmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgpAQCAtMTM0LDcgKzEzMyw2IEBAIGNsYXNzIEhU
TUxNZWRpYUVsZW1lbnQKICAgICAsIHByaXZhdGUgTWVkaWFQbGF5ZXJDbGllbnQKICAgICAsIHBy
aXZhdGUgTWVkaWFQcm9kdWNlcgogICAgICwgcHJpdmF0ZSBWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
Ci0gICAgLCBwcml2YXRlIEFwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcgogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICAsIHByaXZhdGUgQXVkaW9UcmFja0NsaWVudAogICAgICwgcHJp
dmF0ZSBUZXh0VHJhY2tDbGllbnQKQEAgLTQwNSw2ICs0MDMsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCByZXF1aXJlc1RleHRUcmFja1JlcHJlc2VudGF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbihUZXh0VHJhY2tSZXByZXNlbnRhdGlvbiopOwogICAgIHZv
aWQgc3luY1RleHRUcmFja0JvdW5kcygpOworCisgICAgdm9pZCBjYXB0aW9uUHJlZmVyZW5jZXND
aGFuZ2VkKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
CkBAIC00NTksOCArNDU5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc291cmNlV2FzUmVtb3ZlZChI
VE1MU291cmNlRWxlbWVudCYpOwogICAgIHZvaWQgc291cmNlV2FzQWRkZWQoSFRNTFNvdXJjZUVs
ZW1lbnQmKTsKIAotICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoUEFMOjpT
ZXNzaW9uSUQpIG92ZXJyaWRlOwotCiAgICAgLy8gTWVkaWEgY2FjaGUgbWFuYWdlbWVudC4KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhY2hlRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBTdHJpbmcmIG1lZGlh
Q2FjaGVEaXJlY3RvcnkoKTsKQEAgLTU5MCw2ICs1ODgsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3RlSGFzQXZhaWxhYmlsaXR5Q2FsbGJhY2tzQ2hhbmdlZCgpOwogI2VuZGlmCiAKKyAgICB2
b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2
b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxSZXNp
Z25BY3RpdmUoKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7CisKIHBy
b3RlY3RlZDoKICAgICBIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoSW5p
dGlhbGl6YXRpb24oKTsKQEAgLTY0NSw5ICs2NDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Rv
cFdpdGhvdXREZXN0cm95aW5nTWVkaWFQbGF5ZXIoKTsKICAgICB2b2lkIGNvbnRleHREZXN0cm95
ZWQoKSBvdmVycmlkZTsKICAgICAKLSAgICB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEaXNwbGF5U3RhdGUoKSB7IH0KICAgICAKQEAgLTgwMSw3ICs4MDIsNiBAQCBwcml2
YXRlOgogCiAgICAgZW51bSBSZWNvbmZpZ3VyZU1vZGUgeyBJbW1lZGlhdGVseSwgQWZ0ZXJEZWxh
eSB9OwogICAgIHZvaWQgbWFya0NhcHRpb25BbmRTdWJ0aXRsZVRyYWNrc0FzVW5jb25maWd1cmVk
KFJlY29uZmlndXJlTW9kZSk7Ci0gICAgdm9pZCBjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkg
b3ZlcnJpZGU7CiAgICAgQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2Rl
IGNhcHRpb25EaXNwbGF5TW9kZSgpOwogI2VuZGlmCiAKQEAgLTkzOSw5ICs5MzksNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlU2Vla1RvUGxheWJhY2tQb3NpdGlvbihkb3VibGUpOwogICAg
IHZvaWQgc2Vla1RvUGxheWJhY2tQb3NpdGlvbkVuZGVkVGltZXJGaXJlZCgpOwogCi0gICAgdm9p
ZCBhcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmUoKSBmaW5hbDsKLSAgICB2b2lkIGFwcGxpY2F0
aW9uRGlkQmVjb21lQWN0aXZlKCkgZmluYWw7Ci0KICAgICB2b2lkIHNldEluQWN0aXZlRG9jdW1l
bnQoYm9vbCk7CiAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0xhYmVsYWJsZUVsZW1lbnQuY3BwCmluZGV4IDczODUxNmY5ODdiYjVhMTZkNGJiNDg2ZmYyOTlh
MDc0ODE4NGM4ZTAuLmMzZjliY2QwNTY2MTg0YTE3M2Y3YzYxODY4ZmQ4YjUyY2EyZDNmNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcApAQCAtNDYsNyArNDYsNyBA
QCBSZWZQdHI8Tm9kZUxpc3Q+IExhYmVsYWJsZUVsZW1lbnQ6OmxhYmVscygpCiAgICAgaWYgKCFz
dXBwb3J0TGFiZWxzKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxM
YWJlbHNOb2RlTGlzdD4oKnRoaXMsIHN0YXJBdG9tKCkpOworICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21OYW1lPExhYmVsc05vZGVM
aXN0PigqdGhpcywgc3RhckF0b20oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKaW5kZXggYjg5YzViMGIyN2ZmNWUwMTJh
ZjFkZTY0Njg5MDJmYjAzOWVkZGQ5Yi4uZDQxMDE3ODZmYjAwNWYyNjg3YjE5MGFmMzczMWJjZDU1
N2QyMGUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKQEAgLTQzLDcg
KzQzLDcgQEAgTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KExhYmVsYWJsZUVsZW1lbnQm
IGZvck5vZGUpCiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3QoKQogewotICAgIG93
bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIHN0
YXJBdG9tKCkpOworICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhB
dG9tTmFtZSgqdGhpcywgc3RhckF0b20oKSk7CiB9IAogICAgIAogYm9vbCBMYWJlbHNOb2RlTGlz
dDo6ZWxlbWVudE1hdGNoZXMoRWxlbWVudCYgdGVzdE5vZGUpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb05vZGVMaXN0LmNwcAppbmRleCA0Yzk4MGZiMzYzMGZlYWM3N2Y4NjQxNjIwYzM2OTJh
MWVlNzQ3OGJlLi45NDcwZWEyOWFiNTc3NDg4MGM2M2IzYmY0NzRlZDg5YmZmN2JiMzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgUmFkaW9O
b2RlTGlzdDo6UmFkaW9Ob2RlTGlzdChDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZSkKIAogUmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9kZUxpc3QoKQogewotICAg
IG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMs
IG1fbmFtZSk7CisgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0
b21OYW1lKCp0aGlzLCBtX25hbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlZlB0cjxIVE1MSW5w
dXRFbGVtZW50PiB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KEhUTUxFbGVtZW50JiBlbGVtZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKaW5kZXggOWIzOTgxNmI3NzZhMzYxYmM2NTFlNjQ3MGI2OWVjODljY2Y2NDg1Zi4uNWE2MzJk
ODVkMzlkMzJiZDQ0YTAzMzlkYTZlZTdiNzE4MjZkYmNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0zMjksNyArMzI5LDcg
QEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnN0cnVjdFRyZWVGcm9tSFRNTFRva2VuKEhU
TUxUb2tlbml6ZXI6OlRva2VuUHRyJiByYXcKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gdG9rZW4o
KnJhd1Rva2VuKTsKIAotICAgIC8vIFdlIGNsZWFyIHRoZSByYXdUb2tlbiBpbiBjYXNlIGNvbnN0
cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4KKyAgICAvLyBXZSBjbGVhciB0aGUgcmF3VG9rZW4gaW4g
Y2FzZSBjb25zdHJ1Y3RUcmVlCiAgICAgLy8gc3luY2hyb25vdXNseSByZS1lbnRlcnMgdGhlIHBh
cnNlci4gV2UgZG9uJ3QgY2xlYXIgdGhlIHRva2VuIGltbWVkYXRlbHkKICAgICAvLyBmb3IgQ2hh
cmFjdGVyIHRva2VucyBiZWNhdXNlIHRoZSBBdG9taWNIVE1MVG9rZW4gYXZvaWRzIGNvcHlpbmcg
dGhlCiAgICAgLy8gY2hhcmFjdGVycyBieSBrZWVwaW5nIGEgcG9pbnRlciB0byB0aGUgdW5kZXJs
eWluZyBidWZmZXIgaW4gdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCBkYTYyZDY2Y2VhNGNm
NjIwNDJhZDAzYjVhNTE2ODNiOGUxODM2MWMyLi4yM2YzMWYxMDlhODI0Y2VjZjEyZjM0ZTQ0ZmZk
ZTIzY2Y3NWRkMmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTEwNTksOCArMTA1OSw4IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBoZWFk
ZXIsIHVuc2lnbmVkIGhlYWRlckxlbmd0CiAgICAgQVNTRVJUKGZpbmQoaGVhZGVyLCBoZWFkZXJM
ZW5ndGgsICc6JykgIT0gbm90Rm91bmQpOwogICAgIHVuc2lnbmVkIGNvbG9uUG9zaXRpb24gPSBm
aW5kKGhlYWRlciwgaGVhZGVyTGVuZ3RoLCAnOicpOwogCi0gICAgLy8gU2F2ZSBtZW1vcnkgYnkg
cHV0dGluZyB0aGUgaGVhZGVyIG5hbWVzIGludG8gYXRvbWljIHN0cmluZ3Mgc28gZWFjaCBpcyBz
dG9yZWQgb25seSBvbmNlLAotICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBzZXRIVFRQSGVhZGVyRmll
bGQgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWlyZSBhbiBhdG9taWMgc3RyaW5nLgorICAgIC8vIFNh
dmUgbWVtb3J5IGJ5IHB1dHRpbmcgdGhlIGhlYWRlciBuYW1lcyBpbnRvIGF0b20gc3RyaW5ncyBz
byBlYWNoIGlzIHN0b3JlZCBvbmx5IG9uY2UsCisgICAgLy8gZXZlbiB0aG91Z2ggdGhlIHNldEhU
VFBIZWFkZXJGaWVsZCBmdW5jdGlvbiBkb2VzIG5vdCByZXF1aXJlIGFuIGF0b20gc3RyaW5nLgog
ICAgIEF0b21TdHJpbmcgaGVhZGVyTmFtZSB7IGhlYWRlciwgY29sb25Qb3NpdGlvbiB9OwogICAg
IFN0cmluZyBoZWFkZXJWYWx1ZSB7IGhlYWRlciArIGNvbG9uUG9zaXRpb24gKyAxLCBoZWFkZXJM
ZW5ndGggLSBjb2xvblBvc2l0aW9uIC0gMSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9BcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzE4ZTA1MjYxNzdiNzk2MjdjNzdkOTllY2JkNjc3N2I5NzY5OGI4Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVu
dDsKLQotY2xhc3MgQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCkgeyB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5BcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoKSA9IGRlZmF1bHQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBhMzc2
NWM0MjU2NWYyOGZmOGJmNTQwNDI0NTY2ZGM3YTc1ZmU5YWVhLi45NWZmNzBmZjMyNTVlMTk1ZWEw
MmRmZTJlODdkM2FhYTAwNTkzMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgIkFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIkFsdGVybmF0aXZlVGV4dENsaWVudC5oIgogI2luY2x1ZGUgIkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmgiCiAjaW5jbHVk
ZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2xpZW50LmgiCkBA
IC0zODUsMTEgKzM4NCwxMCBAQCB2b2lkIFBhZ2U6OmNsZWFyUHJldmlvdXNJdGVtRnJvbUFsbFBh
Z2VzKEhpc3RvcnlJdGVtKiBpdGVtKQogdWludDY0X3QgUGFnZTo6cmVuZGVyVHJlZVNpemUoKSBj
b25zdAogewogICAgIHVpbnQ2NF90IHRvdGFsID0gMDsKLSAgICBmb3IgKGNvbnN0IEZyYW1lKiBm
cmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyVmlldygpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRv
dGFsICs9IGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPnJlbmRlcmVyQ291bnQoKTsK
LSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Cisg
ICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZG9jdW1lbnQucmVuZGVyVmlldygpKQorICAg
ICAgICAgICAgdG90YWwgKz0gcmVuZGVyVmlldy0+cmVuZGVyZXJDb3VudCgpOworICAgIH0pOwog
ICAgIHJldHVybiB0b3RhbDsKIH0KIApAQCAtNTY2LDcgKzU2NCw3IEBAIHZvaWQgUGFnZTo6aW5p
dEdyb3VwKCkKIAogdm9pZCBQYWdlOjp1cGRhdGVTdHlsZUFmdGVyQ2hhbmdlSW5FbnZpcm9ubWVu
dCgpCiB7Ci0gICAgZm9yRWFjaERvY3VtZW50KFtdKERvY3VtZW50JiBkb2N1bWVudCkgeworICAg
IGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CiAgICAgICAgIGlmIChh
dXRvKiBzdHlsZVJlc29sdmVyID0gZG9jdW1lbnQuc3R5bGVTY29wZSgpLnJlc29sdmVySWZFeGlz
dHMoKSkKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUoKTsKICAgICAgICAgZG9jdW1lbnQuc2NoZWR1bGVGdWxsU3R5bGVSZWJ1aWxk
KCk7CkBAIC01ODQsMTAgKzU4Miw5IEBAIHZvaWQgUGFnZTo6dXBkYXRlU3R5bGVGb3JBbGxQYWdl
c0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpCiB7CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0
aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRyeWluZyB0byBhZGQgaW4gZGlmZmVyZW50IGNhbGwg
c2l0ZXMuCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnN0
eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKLSAgICB9CisgICAg
Zm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1l
bnQuc3R5bGVTY29wZSgpLmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9ubWVudCgpOworICAgIH0p
OwogfQogCiB2b2lkIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQpAQCAtOTA2LDEx
ICs5MDMsOSBAQCB1aW50MzJfdCBQYWdlOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFRleHQpCiAKIHZvaWQgUGFnZTo6dW5tYXJrQWxsVGV4dE1hdGNo
ZXMoKQogewotICAgIEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsKLSAgICBkbyB7Ci0gICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKTsKLSAgICAgICAgZnJhbWUgPSBpbmNyZW1lbnRGcmFtZShmcmFtZSwg
dHJ1ZSwgQ2FuV3JhcDo6Tm8pOwotICAgIH0gd2hpbGUgKGZyYW1lKTsKKyAgICBmb3JFYWNoRG9j
dW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICB9KTsKIH0K
IAogc3RhdGljIGJvb2wgaXNFZGl0YWJsZVRleHRJbnB1dEVsZW1lbnQoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCkKQEAgLTkyNiwxMyArOTIxLDkgQEAgc3RhdGljIGJvb2wgaXNFZGl0YWJsZVRleHRJ
bnB1dEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIFZlY3RvcjxSZWY8RWxlbWVudD4+
IFBhZ2U6OmVkaXRhYmxlRWxlbWVudHNJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBzZWFyY2hSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKSBjb25zdAogewogICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+
IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8qIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGF1dG8qIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQorICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1
bWVudCkgewogICAgICAgICBEZXF1ZTxOb2RlKj4gbm9kZXNUb1NlYXJjaDsKLSAgICAgICAgbm9k
ZXNUb1NlYXJjaC5hcHBlbmQoZG9jdW1lbnQpOworICAgICAgICBub2Rlc1RvU2VhcmNoLmFwcGVu
ZCgmZG9jdW1lbnQpOwogICAgICAgICB3aGlsZSAoIW5vZGVzVG9TZWFyY2guaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBhdXRvKiBub2RlID0gbm9kZXNUb1NlYXJjaC50YWtlRmlyc3QoKTsKIApA
QCAtOTQ4LDcgKzkzOSw3IEBAIFZlY3RvcjxSZWY8RWxlbWVudD4+IFBhZ2U6OmVkaXRhYmxlRWxl
bWVudHNJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBzZWFyY2hSZWN0SW5SCiAgICAgICAgICAgICBp
ZiAoc2VhcmNoUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5pbnRlcnNlY3RzKGVsZW1lbnQuY2xp
ZW50UmVjdCgpKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQpOwogICAg
ICAgICB9Ci0gICAgfQorICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMDMs
MTggKzk5NCwxOSBAQCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYgUGFnZTo6ZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQoKSBjb25zdAogCiB2b2lkIFBhZ2U6OnNldE1lZGlhVm9sdW1lKGZsb2F0IHZv
bHVtZSkKIHsKLSAgICBpZiAodm9sdW1lIDwgMCB8fCB2b2x1bWUgPiAxKQorICAgIGlmICghKHZv
bHVtZSA+PSAwICYmIHZvbHVtZSA8PSAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
bWVkaWFWb2x1bWUgPT0gdm9sdW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBtX21lZGlhVm9s
dW1lID0gdm9sdW1lOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICgh
ZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUt
PmRvY3VtZW50KCktPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQorCisjaWYgRU5BQkxF
KFZJREVPKQorICAgIGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVsZW1lbnQmIGVs
ZW1lbnQpIHsKKyAgICAgICAgZWxlbWVudC5tZWRpYVZvbHVtZURpZENoYW5nZSgpOworICAgIH0p
OworI2VuZGlmCiB9CiAKIHZvaWQgUGFnZTo6c2V0Wm9vbWVkT3V0UGFnZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlKQpAQCAtMTAzNCw1MCArMTAyNiwzMSBAQCB2b2lkIFBhZ2U6OnNldFBhZ2VTY2Fs
ZUZhY3RvcihmbG9hdCBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCBpblN0YWJs
ZQogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwogCiAgICAg
aWYgKHNjYWxlID09IG1fcGFnZVNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIGlmICh2aWV3ICYmIHZp
ZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luKSB7Ci0gICAgICAgICAgICBpZiAoIXZpZXct
PmRlbGVnYXRlc1BhZ2VTY2FsaW5nKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotCi0gICAgICAgICAgICBpZiAoIXZp
ZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKQotICAgICAgICAgICAgICAgIHZpZXctPnNldFNjcm9s
bFBvc2l0aW9uKG9yaWdpbik7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZpZXctPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShvcmlnaW4pOwotI2VuZGlmCi0gICAgICAgIH0KLSNpZiBFTkFCTEUoTUVESUFfQ09OVFJP
TFNfU0NSSVBUKQotICAgICAgICBpZiAoaW5TdGFibGVTdGF0ZSkgewotICAgICAgICAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGU7CisgICAgICAgIGlmICh2aWV3ICYmIHZpZXctPnNj
cm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luICYmICF2aWV3LT5kZWxlZ2F0ZXNQYWdlU2NhbGluZygp
KQorICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGU7
CiAKLSAgICBpZiAodmlldyAmJiAhdmlldy0+ZGVsZWdhdGVzUGFnZVNjYWxpbmcoKSkgewotICAg
ICAgICB2aWV3LT5zZXROZWVkc0xheW91dEFmdGVyVmlld0NvbmZpZ3VyYXRpb25DaGFuZ2UoKTsK
LSAgICAgICAgdmlldy0+c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgIGlmICh2aWV3ICYmICF2aWV3LT5kZWxlZ2F0ZXNQYWdlU2NhbGluZygpKSB7CisgICAgICAg
ICAgICB2aWV3LT5zZXROZWVkc0xheW91dEFmdGVyVmlld0NvbmZpZ3VyYXRpb25DaGFuZ2UoKTsK
KyAgICAgICAgICAgIHZpZXctPnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwog
Ci0gICAgICAgIGRvY3VtZW50LT5yZXNvbHZlU3R5bGUoRG9jdW1lbnQ6OlJlc29sdmVTdHlsZVR5
cGU6OlJlYnVpbGQpOworICAgICAgICAgICAgZG9jdW1lbnQtPnJlc29sdmVTdHlsZShEb2N1bWVu
dDo6UmVzb2x2ZVN0eWxlVHlwZTo6UmVidWlsZCk7CiAKLSAgICAgICAgLy8gVHJhbnNmb3JtIGNo
YW5nZSBvbiBSZW5kZXJWaWV3IGRvZXNuJ3QgdHJpZ2dlciByZXBhaW50IG9uIG5vbi1jb21wb3Np
dGVkIGNvbnRlbnRzLgotICAgICAgICBtYWluRnJhbWUoKS52aWV3KCktPmludmFsaWRhdGVSZWN0
KEludFJlY3QoTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpKTsKLSAgICB9CisgICAgICAgICAg
ICAvLyBUcmFuc2Zvcm0gY2hhbmdlIG9uIFJlbmRlclZpZXcgZG9lc24ndCB0cmlnZ2VyIHJlcGFp
bnQgb24gbm9uLWNvbXBvc2l0ZWQgY29udGVudHMuCisgICAgICAgICAgICBtYWluRnJhbWUoKS52
aWV3KCktPmludmFsaWRhdGVSZWN0KEludFJlY3QoTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkp
KTsKKyAgICAgICAgfQogCi0gICAgbWFpbkZyYW1lKCkuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7CisgICAgICAgIG1haW5GcmFtZSgpLmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogCi0gICAgaWYgKHZpZXcgJiYgdmlldy0+Zml4ZWRFbGVtZW50c0xheW91dFJlbGF0
aXZlVG9GcmFtZSgpKQotICAgICAgICB2aWV3LT5zZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
c05lZWRMYXlvdXQoKTsKKyAgICAgICAgaWYgKHZpZXcgJiYgdmlldy0+Zml4ZWRFbGVtZW50c0xh
eW91dFJlbGF0aXZlVG9GcmFtZSgpKQorICAgICAgICAgICAgdmlldy0+c2V0Vmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiAKLSAgICBpZiAodmlldyAmJiB2aWV3LT5zY3Jv
bGxQb3NpdGlvbigpICE9IG9yaWdpbikgewotICAgICAgICBpZiAoIXZpZXctPmRlbGVnYXRlc1Bh
Z2VTY2FsaW5nKCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKSAmJiBkb2N1bWVudC0+cmVuZGVy
VmlldygpLT5uZWVkc0xheW91dCgpICYmIHZpZXctPmRpZEZpcnN0TGF5b3V0KCkpCisgICAgICAg
IGlmICh2aWV3ICYmIHZpZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luICYmICF2aWV3LT5k
ZWxlZ2F0ZXNQYWdlU2NhbGluZygpICYmIGRvY3VtZW50LT5yZW5kZXJWaWV3KCkgJiYgZG9jdW1l
bnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRGaXJzdExheW91dCgp
KQogICAgICAgICAgICAgdmlldy0+bGF5b3V0Q29udGV4dCgpLmxheW91dCgpOworICAgIH0KIAor
ICAgIGlmICh2aWV3ICYmIHZpZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luKSB7CiAgICAg
ICAgIGlmICghdmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICB2aWV3LT5z
ZXRTY3JvbGxQb3NpdGlvbihvcmlnaW4pOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
QEAgLTEwODgsMTEgKzEwNjEsOSBAQCB2b2lkIFBhZ2U6OnNldFBhZ2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9vbCBpblN0YWJsZQogCiAjaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAoaW5TdGFibGVTdGF0ZSkgewotICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKCFmcmFtZS0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7Ci0gICAgICAgIH0K
KyAgICAgICAgZm9yRWFjaE1lZGlhRWxlbWVudChbXSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVu
dCkgeworICAgICAgICAgICAgZWxlbWVudC5wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAg
ICAgIH0pOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluU3RhYmxlU3RhdGUpOwpA
QCAtMTEzNywyMSArMTEwOCwyNCBAQCB2b2lkIFBhZ2U6OnNldFVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX3VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gPSB1c2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uOworCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT51
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwotICAgIH0KKyAgICBmb3JFYWNo
TWVkaWFFbGVtZW50KFtdIChIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSB7CisgICAgICAgIGVs
ZW1lbnQudXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWQoKTsKKyAgICB9KTsKICNl
bmRpZgogfQogCiAjaWYgRU5BQkxFKFZJREVPKQorCiB2b2lkIFBhZ2U6OnVwZGF0ZU1lZGlhRWxl
bWVudFJhdGVDaGFuZ2VSZXN0cmljdGlvbnMoKQogewotICAgIGZvciAoYXV0byogbWVkaWFFbGVt
ZW50IDogSFRNTE1lZGlhRWxlbWVudDo6YWxsTWVkaWFFbGVtZW50cygpKQotICAgICAgICBtZWRp
YUVsZW1lbnQtPnVwZGF0ZVJhdGVDaGFuZ2VSZXN0cmljdGlvbnMoKTsKKyAgICAvLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGNhbGwgdGhpcyBvbiBhbGwgbWVkaWEgZWxlbWVudHMsIHNlZW1pbmdseSBi
eSBhY2NpZGVudC4gQnV0IHdhcyB0aGVyZSBzb21lIGFkdmFudGFnZSB0byB0aGF0IGZvciBlbGVt
ZW50cyBpbiB0aGUgYmFjay9mb3J3YXJkIGNhY2hlPworICAgIGZvckVhY2hNZWRpYUVsZW1lbnQo
W10gKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAgICAgICAgZWxlbWVudC51cGRhdGVS
YXRlQ2hhbmdlUmVzdHJpY3Rpb25zKCk7CisgICAgfSk7CiB9CisKICNlbmRpZgogCiB2b2lkIFBh
Z2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKQEAgLTEzMzIsMzUgKzEzMDYsMzcgQEAgdm9p
ZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQogCiAgICAgLy8gRmx1c2ggYXV0b2ZvY3VzIGNhbmRp
ZGF0ZXMKIAotICAgIGZvckVhY2hEb2N1bWVudChbJl0oRG9jdW1lbnQmIGRvY3VtZW50KSB7Cisg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgZG9j
dW1lbnQucnVuUmVzaXplU3RlcHMoKTsKICAgICB9KTsKIAotICAgIGZvckVhY2hEb2N1bWVudChb
Jl0oRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVu
dCYgZG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQucnVuU2Nyb2xsU3RlcHMoKTsKICAgICB9
KTsKIAotICAgIGZvckVhY2hEb2N1bWVudChbJl0oRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAg
Zm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1l
bnQuZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7ICAgICAgICAKICAgICB9
KTsKIAotICAgIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBkb2N1bWVudHMgPSBjb2xsZWN0RG9jdW1l
bnRzKCk7IC8vIFRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2FsbGJhY2tzIG1heSBjaGFuZ2Ug
dGhlIGZyYW1lIGhpZXJhcmNoeSBvZiB0aGUgcGFnZQotICAgIGZvciAoYXV0byYgZG9jdW1lbnQg
OiBkb2N1bWVudHMpIHsKLSAgICAgICAgRE9NSGlnaFJlc1RpbWVTdGFtcCB0aW1lc3RhbXAgPSBk
b2N1bWVudC0+ZG9tV2luZG93KCktPm5vd1RpbWVzdGFtcCgpOwotICAgICAgICBkb2N1bWVudC0+
dXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRFdmVudHModGltZXN0YW1wKTsKKyAgICBmb3JFYWNoRG9j
dW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBET01IaWdoUmVzVGltZVN0
YW1wIHRpbWVzdGFtcCA9IGRvY3VtZW50LmRvbVdpbmRvdygpLT5ub3dUaW1lc3RhbXAoKTsKKyAg
ICAgICAgZG9jdW1lbnQudXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRFdmVudHModGltZXN0YW1wKTsK
ICAgICAgICAgLy8gRklYTUU6IFJ1biB0aGUgZnVsbHNjcmVlbiBzdGVwcy4KLSAgICAgICAgZG9j
dW1lbnQtPnNlcnZpY2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja3ModGltZXN0YW1wKTsK
LSAgICB9CisgICAgICAgIGRvY3VtZW50LnNlcnZpY2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFja3ModGltZXN0YW1wKTsKKyAgICB9KTsKIAogICAgIGxheW91dElmTmVlZGVkKCk7CiAKICNp
ZiBFTkFCTEUoSU5URVJTRUNUSU9OX09CU0VSVkVSKQotICAgIGZvciAoYXV0byYgZG9jdW1lbnQg
OiBkb2N1bWVudHMpCi0gICAgICAgIGRvY3VtZW50LT51cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZh
dGlvbnMoKTsKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewor
ICAgICAgICBkb2N1bWVudC51cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZhdGlvbnMoKTsKKyAgICB9
KTsKICNlbmRpZgorCiAjaWYgRU5BQkxFKFJFU0laRV9PQlNFUlZFUikKLSAgICBmb3IgKGF1dG8m
IGRvY3VtZW50IDogZG9jdW1lbnRzKQotICAgICAgICBkb2N1bWVudC0+dXBkYXRlUmVzaXplT2Jz
ZXJ2YXRpb25zKCp0aGlzKTsKKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQudXBkYXRlUmVzaXplT2JzZXJ2YXRpb25zKCp0aGlz
KTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgbGF5b3V0SWZOZWVkZWQoKTsKQEAgLTEzNjksMzcg
KzEzNDUsMzIgQEAgdm9pZCBQYWdlOjp1cGRhdGVSZW5kZXJpbmcoKQogdm9pZCBQYWdlOjpzdXNw
ZW5kU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uc1N1c3Bl
bmRlZCA9IHRydWU7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN1c3BlbmRT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKLSAgICB9CisKKyAgICBmb3JF
YWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5z
dXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKICAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsK
LSAgICB9CisKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewor
ICAgICAgICBkb2N1bWVudC5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFj
a3MoKTsKKyAgICB9KTsKIH0KIAogZW51bSBjbGFzcyBUaHJvdHRsaW5nUmVhc29uT3BlcmF0aW9u
IHsgQWRkLCBSZW1vdmUgfTsKIHN0YXRpYyB2b2lkIHVwZGF0ZVNjcmlwdGVkQW5pbWF0aW9uc1Ro
cm90dGxpbmdSZWFzb24oUGFnZSYgcGFnZSwgVGhyb3R0bGluZ1JlYXNvbk9wZXJhdGlvbiBvcGVy
YXRpb24sIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6VGhyb3R0bGluZ1JlYXNvbiByZWFz
b24pCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBhdXRvKiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8qIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlciA9IGRvY3VtZW50LT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLSAgICAgICAg
aWYgKCFzY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAob3BlcmF0aW9uID09IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFk
ZCkKLSAgICAgICAgICAgIHNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci0+YWRkVGhyb3R0bGlu
Z1JlYXNvbihyZWFzb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24ocmVhc29uKTsKLSAgICB9Cisg
ICAgcGFnZS5mb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGNvbnRyb2xsZXIgPSBkb2N1bWVudC5zY3JpcHRlZEFuaW1hdGlvbkNvbnRy
b2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBUaHJvdHRsaW5nUmVhc29u
T3BlcmF0aW9uOjpBZGQpCisgICAgICAgICAgICAgICAgY29udHJvbGxlci0+YWRkVGhyb3R0bGlu
Z1JlYXNvbihyZWFzb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRy
b2xsZXItPnJlbW92ZVRocm90dGxpbmdSZWFzb24ocmVhc29uKTsKKyAgICAgICAgfQorICAgIH0p
OwogfQogCiB2b2lkIFBhZ2U6OnNldElzVmlzdWFsbHlJZGxlSW50ZXJuYWwoYm9vbCBpc1Zpc3Vh
bGx5SWRsZSkKQEAgLTE0MTEsNyArMTM4Miw3IEBAIHZvaWQgUGFnZTo6aGFuZGxlTG93TW9kZVBv
d2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogewogICAgIHVwZGF0ZVNjcmlw
dGVkQW5pbWF0aW9uc1Rocm90dGxpbmdSZWFzb24oKnRoaXMsIGlzTG93UG93ZXJNb2RlRW5hYmxl
ZCA/IFRocm90dGxpbmdSZWFzb25PcGVyYXRpb246OkFkZCA6IFRocm90dGxpbmdSZWFzb25PcGVy
YXRpb246OlJlbW92ZSwgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpUaHJvdHRsaW5nUmVh
c29uOjpMb3dQb3dlck1vZGUpOwogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAg
ICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAg
Zm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKICAgICAgICAgICAgIGlm
IChhdXRvIHRpbWVsaW5lID0gZG9jdW1lbnQuZXhpc3RpbmdUaW1lbGluZSgpKQogICAgICAgICAg
ICAgICAgIHRpbWVsaW5lLT51cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKICAgICAgICAgfSk7CkBA
IC0xNDQ2LDEwICsxNDE3LDkgQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hh
bmdlZCgpCiAgICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChz
dHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRGOC5zaXplKCkpOwogICAgIH0K
IAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5leHRlbnNpb25TdHlsZVNoZWV0
cygpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50KFtd
IChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVT
aGVldHMoKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CisgICAgfSk7CiB9CiAKIGNvbnN0IFN0cmlu
ZyYgUGFnZTo6dXNlclN0eWxlU2hlZXQoKSBjb25zdApAQCAtMTUwNCwzMCArMTQ3NCwyMyBAQCB2
b2lkIFBhZ2U6OnVzZXJBZ2VudENoYW5nZWQoKQogCiB2b2lkIFBhZ2U6OmludmFsaWRhdGVTdHls
ZXNGb3JBbGxMaW5rcygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUu
Z2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHls
ZUZvckFsbExpbmtzKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZhbGlk
YXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OmludmFsaWRh
dGVTdHlsZXNGb3JMaW5rKFNoYXJlZFN0cmluZ0hhc2ggbGlua0hhc2gpCiB7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dmlzaXRl
ZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlua0hhc2gpOwotICAgIH0KKyAg
ICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9j
dW1lbnQudmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlua0hhc2gp
OworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZUluQWxsRnJhbWVzKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX21haW5GcmFt
ZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewot
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkb2N1bWVudC0+
ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUo
KTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsK
KyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQYWdlOjpzZXREZWJ1Z2dl
cihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTE2MTcsMTAgKzE1ODAsOSBAQCB2b2lkIFBh
Z2U6OnNldFRpbWVyVGhyb3R0bGluZ1N0YXRlKFRpbWVyVGhyb3R0bGluZ1N0YXRlIHN0YXRlKQog
CiAgICAgLy8gV2hlbiB0aHJvdHRsaW5nIGlzIGRpc2FibGVkLCByZWxlYXNlIGFsbCB0aHJvdHRs
ZWQgdGltZXJzLgogICAgIGlmIChzdGF0ZSA9PSBUaW1lclRocm90dGxpbmdTdGF0ZTo6RGlzYWJs
ZWQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChh
dXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LT5kaWRDaGFuZ2VUaW1lckFsaWdubWVudEludGVydmFsKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmRpZENoYW5nZVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKTsKKyAgICAgICAgfSk7
CiAgICAgfQogfQogCkBAIC0xNjc5LDE4ICsxNjQxLDE2IEBAIHZvaWQgUGFnZTo6ZG9tVGltZXJB
bGlnbm1lbnRJbnRlcnZhbEluY3JlYXNlVGltZXJGaXJlZCgpCiAgICAgQVNTRVJUKG1fc2V0dGlu
Z3MtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKCkpOwogICAgIEFT
U0VSVChtX3RpbWVyVGhyb3R0bGluZ1N0YXRlID09IFRpbWVyVGhyb3R0bGluZ1N0YXRlOjpFbmFi
bGVkSW5jcmVhc2luZyk7CiAgICAgQVNTRVJUKG1fZG9tVGltZXJBbGlnbm1lbnRJbnRlcnZhbCA8
IG1fZG9tVGltZXJBbGlnbm1lbnRJbnRlcnZhbEluY3JlYXNlTGltaXQpOwotICAgIAorCiAgICAg
Ly8gQWxpZ25tZW50IGludGVydmFsIGlzIGluY3JlYXNlZCB0byBlcXVhbCB0aGUgdGltZSB0aGUg
cGFnZSBoYXMgYmVlbiB0aHJvdHRsZWQsIHRvIGEgbGltaXQuCiAgICAgdXBkYXRlRE9NVGltZXJB
bGlnbm1lbnRJbnRlcnZhbCgpOwogfQogCiB2b2lkIFBhZ2U6OmRuc1ByZWZldGNoaW5nU3RhdGVD
aGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5pbml0RE5TUHJlZmV0Y2goKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuaW5pdEROU1ByZWZl
dGNoKCk7CisgICAgfSk7CiB9CiAKIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdlOjpw
bHVnaW5WaWV3cygpCkBAIC0xNzEwLDExICsxNjcwLDkgQEAgVmVjdG9yPFJlZjxQbHVnaW5WaWV3
QmFzZT4+IFBhZ2U6OnBsdWdpblZpZXdzKCkKIAogdm9pZCBQYWdlOjpzdG9yYWdlQmxvY2tpbmdT
dGF0ZUNoYW5nZWQoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7Ci0gICAgfQor
ICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRv
Y3VtZW50LnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgfSk7CiAKICAgICAv
LyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3cyBpbiB0byBhIHZlY3RvciB0byBlbnN1cmUgdGhhdCBh
Y3Rpb24gdGhlIHBsdWctaW4gdGFrZXMKICAgICAvLyBmcm9tIGJlbG93IHN0b3JhZ2VCbG9ja2lu
Z1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgbGlmZXRpbWUuCkBAIC0xNzI1LDEw
ICsxNjgzLDkgQEAgdm9pZCBQYWdlOjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKQogdm9p
ZCBQYWdlOjp1cGRhdGVJc1BsYXlpbmdNZWRpYSh1aW50NjRfdCBzb3VyY2VFbGVtZW50SUQpCiB7
CiAgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlID0gTWVkaWFQcm9kdWNl
cjo6SXNOb3RQbGF5aW5nOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHN0
YXRlIHw9IGRvY3VtZW50LT5tZWRpYVN0YXRlKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVu
dChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBzdGF0ZSB8PSBkb2N1bWVudC5t
ZWRpYVN0YXRlKCk7CisgICAgfSk7CiAKICAgICBpZiAoc3RhdGUgPT0gbV9tZWRpYVN0YXRlKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzQ3LDYgKzE3MDQsNyBAQCB2b2lkIFBhZ2U6OnNjaGVkdWxl
UGxheWJhY2tDb250cm9sc01hbmFnZXJVcGRhdGUoKQogfQogCiAjaWYgRU5BQkxFKFZJREVPKQor
CiB2b2lkIFBhZ2U6OnBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVXBkYXRlVGltZXJGaXJlZCgpCiB7
CiAgICAgaWYgKGF1dG8gYmVzdE1lZGlhRWxlbWVudCA9IEhUTUxNZWRpYUVsZW1lbnQ6OmJlc3RN
ZWRpYUVsZW1lbnRGb3JTaG93aW5nUGxheWJhY2tDb250cm9sc01hbmFnZXIoTWVkaWFFbGVtZW50
U2Vzc2lvbjo6UGxheWJhY2tDb250cm9sc1B1cnBvc2U6OkNvbnRyb2xzTWFuYWdlcikpCkBAIC0x
NzU0LDYgKzE3MTIsNyBAQCB2b2lkIFBhZ2U6OnBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVXBkYXRl
VGltZXJGaXJlZCgpCiAgICAgZWxzZQogICAgICAgICBjaHJvbWUoKS5jbGllbnQoKS5jbGVhclBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIFBhZ2U6OnNldE11
dGVkKE1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBtdXRlZCkKQEAgLTE3NjMsMzIgKzE3
MjIsMjYgQEAgdm9pZCBQYWdlOjpzZXRNdXRlZChNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxh
Z3MgbXV0ZWQpCiAKICAgICBtX211dGVkU3RhdGUgPSBtdXRlZDsKIAotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VNdXRlZFN0YXRlRGlk
Q2hhbmdlKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3Vt
ZW50KSB7CisgICAgICAgIGRvY3VtZW50LnBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdlKCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgUGFnZTo6c3RvcE1lZGlhQ2FwdHVyZSgpCiB7CiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZnJhbWUt
PmRvY3VtZW50KCktPnN0b3BNZWRpYUNhcHR1cmUoKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3Vt
ZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuc3RvcE1lZGlh
Q2FwdHVyZSgpOworICAgIH0pOwogI2VuZGlmCiB9CiAKIHZvaWQgUGFnZTo6c3RvcEFsbE1lZGlh
UGxheWJhY2soKQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIGRvY3VtZW50LT5zdG9wQWxsTWVkaWFQbGF5YmFjaygpOwotICAgIH0KKyAgICBm
b3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVu
dC5zdG9wQWxsTWVkaWFQbGF5YmFjaygpOworICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTE3OTks
MTAgKzE3NTIsOSBAQCB2b2lkIFBhZ2U6OnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkKICAgICBp
ZiAobV9tZWRpYVBsYXliYWNrSXNTdXNwZW5kZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnN1c3BlbmRBbGxNZWRpYVBsYXli
YWNrKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50
KSB7CisgICAgICAgIGRvY3VtZW50LnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCk7CisgICAgfSk7
CiAKICAgICBtX21lZGlhUGxheWJhY2tJc1N1c3BlbmRlZCA9IHRydWU7CiAjZW5kaWYKQEAgLTE4
MTYsMTAgKzE3NjgsOSBAQCB2b2lkIFBhZ2U6OnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9tZWRpYVBsYXliYWNrSXNTdXNwZW5kZWQgPSBmYWxzZTsKIAot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFsbE1lZGlh
UGxheWJhY2soKTsKLSAgICB9CisgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQucmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpOworICAg
IH0pOwogI2VuZGlmCiB9CiAKQEAgLTE4MzEsMTAgKzE3ODIsOSBAQCB2b2lkIFBhZ2U6OnN1c3Bl
bmRBbGxNZWRpYUJ1ZmZlcmluZygpCiAgICAgICAgIHJldHVybjsKICAgICBtX21lZGlhQnVmZmVy
aW5nSXNTdXNwZW5kZWQgPSB0cnVlOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAg
ICBkb2N1bWVudC0+c3VzcGVuZEFsbE1lZGlhQnVmZmVyaW5nKCk7Ci0gICAgfQorICAgIGZvckVh
Y2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnN1
c3BlbmRBbGxNZWRpYUJ1ZmZlcmluZygpOworICAgIH0pOwogI2VuZGlmCiB9CiAKQEAgLTE4NDUs
MTQgKzE3OTUsMTQgQEAgdm9pZCBQYWdlOjpyZXN1bWVBbGxNZWRpYUJ1ZmZlcmluZygpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX21lZGlhQnVmZmVyaW5nSXNTdXNwZW5kZWQgPSBmYWxzZTsKIAot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZUFsbE1lZGlh
QnVmZmVyaW5nKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnJlc3VtZUFsbE1lZGlhQnVmZmVyaW5nKCk7Cisg
ICAgfSk7CiAjZW5kaWYKIH0KIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQorCiB2b2lkIFBh
Z2U6OmhhbmRsZU1lZGlhRXZlbnQoTWVkaWFFdmVudFR5cGUgZXZlbnRUeXBlKQogewogICAgIHN3
aXRjaCAoZXZlbnRUeXBlKSB7CkBAIC0xODczLDkgKzE4MjMsMTEgQEAgdm9pZCBQYWdlOjpzZXRW
b2x1bWVPZk1lZGlhRWxlbWVudChkb3VibGUgdm9sdW1lLCB1aW50NjRfdCBlbGVtZW50SUQpCiAg
ICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBIVE1MTWVkaWFFbGVtZW50OjplbGVt
ZW50V2l0aElEKGVsZW1lbnRJRCkpCiAgICAgICAgIGVsZW1lbnQtPnNldFZvbHVtZSh2b2x1bWUs
IEFTU0VSVF9OT19FWENFUFRJT04pOwogfQorCiAjZW5kaWYKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKKwogdm9pZCBQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCA+PSAwKTsKQEAgLTE4ODYsNiArMTgzOCw3IEBA
IHZvaWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVuY3koKSBjb25zdAogCiAgICAg
QVNTRVJUKG1fc3ViZnJhbWVDb3VudCArIDEgPT0gc3ViZnJhbWVDb3VudCk7CiB9CisKICNlbmRp
ZgogCiB2b2lkIFBhZ2U6OnJlc3VtZUFuaW1hdGluZ0ltYWdlcygpCkBAIC0xOTU3LDI0ICsxOTEw
LDYgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGUoYm9vbCBpc1Zpc2libGUpCiAgICAgc2V0QWN0
aXZpdHlTdGF0ZShzdGF0ZSk7CiB9CiAKLWVudW0gY2xhc3MgU1ZHQW5pbWF0aW9uc1N0YXRlIHsg
UGF1c2VkLCBSZXN1bWVkIH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0U1ZHQW5pbWF0aW9uc1N0
YXRlKFBhZ2UmIHBhZ2UsIFNWR0FuaW1hdGlvbnNTdGF0ZSBzdGF0ZSkKLXsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAoIWRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAoc3RhdGUgPT0gU1ZHQW5pbWF0aW9uc1N0YXRlOjpQYXVz
ZWQpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnBhdXNlQW5p
bWF0aW9ucygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudC0+YWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnVucGF1c2VBbmltYXRpb25zKCk7Ci0gICAgfQotfQotCiB2b2lkIFBhZ2U6
OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogewogICAgIC8vIEZJWE1FOiBU
aGUgdmlzaWJpbGl0eSBzdGF0ZSBzaG91bGQgYmUgc3RvcmVkIG9uIHRoZSB0b3AtbGV2ZWwgZG9j
dW1lbnQuCkBAIC0xOTg0LDggKzE5MTksMTEgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRl
cm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgbV9pc1ByZXJlbmRlciA9IGZhbHNlOwogCiAg
ICAgICAgIHJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucygpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAgICAgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRpb25VcGRhdGVzKCk7
CisgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAg
ICAgICAgICBkb2N1bWVudC5yZXN1bWVEZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMo
KTsKKyAgICAgICAgfSk7CiAjZW5kaWYKIAogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bWFpbkZyYW1lKCkudmlldygpKQpAQCAtMTk5Myw3ICsxOTMxLDcgQEAgdm9pZCBQYWdlOjpzZXRJ
c1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKIAogICAgICAgICBpZiAobV9zZXR0aW5n
cy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKICAgICAgICAg
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hE
b2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAgIGZvckVh
Y2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgICAg
ICAgICAgICAgfSk7CkBAIC0yMDAxLDcgKzE5MzksMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2li
bGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5h
bmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRT
VkdBbmltYXRpb25zU3RhdGUoKnRoaXMsIFNWR0FuaW1hdGlvbnNTdGF0ZTo6UmVzdW1lZCk7Cisg
ICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAg
ICAgICBpZiAoZG9jdW1lbnQuc3ZnRXh0ZW5zaW9ucygpKQorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnBhdXNlQW5pbWF0aW9ucygpOworICAgICAgICB9
KTsKIAogICAgICAgICByZXN1bWVBbmltYXRpbmdJbWFnZXMoKTsKIApAQCAtMjAxNCw3ICsxOTU1
LDcgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAg
ICBpZiAoIWlzVmlzaWJsZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNT
U0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKICAgICAgICAgICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERv
Y3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAo
RG9jdW1lbnQmIGRvY3VtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1l
bGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVsaW5lLT5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAgICAgICAgICAgICAgIH0pOwpA
QCAtMjAyMiwxMCArMTk2MywxNSBAQCB2b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJv
b2wgaXNWaXNpYmxlKQogICAgICAgICAgICAgICAgIG1haW5GcmFtZSgpLmFuaW1hdGlvbigpLnN1
c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRTVkdBbmltYXRpb25z
U3RhdGUoKnRoaXMsIFNWR0FuaW1hdGlvbnNTdGF0ZTo6UGF1c2VkKTsKKyAgICAgICAgZm9yRWFj
aERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChkb2N1
bWVudC5zdmdFeHRlbnNpb25zKCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnBhdXNlQW5pbWF0aW9ucygpOworICAgICAgICB9KTsKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgICAgIHN1c3BlbmREZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlv
blVwZGF0ZXMoKTsKKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnN1c3BlbmREZXZpY2VNb3Rpb25BbmRPcmllbnRh
dGlvblVwZGF0ZXMoKTsKKyAgICAgICAgfSk7CiAjZW5kaWYKIAogICAgICAgICBzdXNwZW5kU2Ny
aXB0ZWRBbmltYXRpb25zKCk7CkBAIC0yMDM0LDEyICsxOTgwLDkgQEAgdm9pZCBQYWdlOjpzZXRJ
c1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPmhpZGUo
KTsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmPERvY3VtZW50Pj4gZG9jdW1lbnRzOwotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBkb2N1bWVudHMuYXBwZW5kKCpmcmFt
ZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogZG9jdW1lbnRzKQot
ICAgICAgICBkb2N1bWVudC0+dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpOworICAgIGZvckVhY2hE
b2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LnZpc2li
aWxpdHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQYWdlOjpzZXRJc1ByZXJl
bmRlcigpCkBAIC0yMTMwLDYgKzIwNzMsNyBAQCB2b2lkIFBhZ2U6OndoZW5Vbm5lc3RlZChXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQorCiBib29sIFBhZ2U6OnJlbW90ZUluc3BlY3Rpb25BbGxvd2VkKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLT5yZW1vdGVEZWJ1Z2dpbmdBbGxvd2Vk
KCk7CkBAIC0yMTU0LDYgKzIwOTgsNyBAQCB2b2lkIFBhZ2U6OnJlbW90ZUluc3BlY3RvckluZm9y
bWF0aW9uRGlkQ2hhbmdlKCkgY29uc3QKIHsKICAgICBtX2luc3BlY3RvckRlYnVnZ2FibGUtPnVw
ZGF0ZSgpOwogfQorCiAjZW5kaWYKIAogdm9pZCBQYWdlOjphZGRMYXlvdXRNaWxlc3RvbmVzKE9w
dGlvblNldDxMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9uZXMpCkBAIC0yMzAzLDIyICsyMjQ4LDYg
QEAgdm9pZCBQYWdlOjphZGRSZWxldmFudFVucGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgTGF5b3V0UmVjdCYgb2IKICAgICBtX3JlbGV2YW50VW5wYWludGVkUmVnaW9u
LnVuaXRlKHNuYXBwZWRJbnRSZWN0KG9iamVjdFBhaW50UmVjdCkpOwogfQogCi12b2lkIFBhZ2U6
OnN1c3BlbmREZXZpY2VNb3Rpb25BbmRPcmllbnRhdGlvblVwZGF0ZXMoKQotewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdXNwZW5kRGV2aWNlTW90aW9u
QW5kT3JpZW50YXRpb25VcGRhdGVzKCk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2U6OnJlc3VtZURl
dmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBkYXRlcygpCi17Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0
aW9uVXBkYXRlcygpOwotICAgIH0KLX0KLQogdm9pZCBQYWdlOjpzdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQpAQCAtMjM5
NSwxNCArMjMyNCwxNCBAQCB2b2lkIFBhZ2U6OmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5z
aW9uU3RhdGVDaGFuZ2VkKCkKIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKKwogdm9pZCBQ
YWdlOjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkKCk7Ci0gICAgfQorICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50
KSB7CisgICAgICAgIGRvY3VtZW50LmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICB9
KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgUGFnZTo6Zm9yYmlkUHJvbXB0cygpCkBAIC0yNTUwLDEx
ICsyNDc5LDkgQEAgdm9pZCBQYWdlOjpzZXRTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQogICAgIGlmICghcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5k
b2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShtX3Nlc3Npb25JRCk7Ci0gICAgfQor
ICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBk
b2N1bWVudC5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZShtX3Nlc3Npb25JRCk7CisgICAg
fSk7CiAKICAgICAvLyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3cyBpbiB0byBhIHZlY3RvciB0byBl
bnN1cmUgdGhhdCBhY3Rpb24gdGhlIHBsdWctaW4gdGFrZXMKICAgICAvLyBmcm9tIGJlbG93IHBy
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgbGlmZXRpbWUu
CkBAIC0yNjEwLDM5ICsyNTM3LDMyIEBAIHZvaWQgUGFnZTo6bW9ja01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJEaXNtaXNzUG9wdXAoKQogCiB2b2lkIFBhZ2U6OnNldFBsYXliYWNrVGFyZ2V0KHVp
bnQ2NF90IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNl
dFBsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgdGFyZ2V0LmNvcHlSZWYoKSk7Ci0gICAgfQorICAg
IGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1
bWVudC5zZXRQbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHRhcmdldC5jb3B5UmVmKCkpOworICAg
IH0pOwogfQogCiB2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdl
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFpbGFibGUpCiB7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGxheWJhY2tUYXJnZXRBdmFp
bGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUpOwotICAgIH0KKyAgICBmb3JF
YWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQu
cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlEaWRDaGFuZ2UoY29udGV4dElkLCBhdmFpbGFibGUp
OworICAgIH0pOwogfQogCiB2b2lkIFBhZ2U6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0
KHVpbnQ2NF90IGNsaWVudElkLCBib29sIHNob3VsZFBsYXkpCiB7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0U2hvdWxkUGxheVRvUGxh
eWJhY2tUYXJnZXQoY2xpZW50SWQsIHNob3VsZFBsYXkpOwotICAgIH0KKyAgICBmb3JFYWNoRG9j
dW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuc2V0U2hv
dWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2xpZW50SWQsIHNob3VsZFBsYXkpOworICAgIH0pOwog
fQogCiB2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKHVpbnQ2NF90
IGNsaWVudElkKQogewotICAgIGZvciAoYXV0byogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFm
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+cGxheWJhY2tUYXJnZXRQaWNrZXJXYXNEaXNtaXNzZWQoY2xpZW50SWQpOwot
ICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAg
ICAgICAgZG9jdW1lbnQucGxheWJhY2tUYXJnZXRQaWNrZXJXYXNEaXNtaXNzZWQoY2xpZW50SWQp
OworICAgIH0pOwogfQorCiAjZW5kaWYKIAogV2hlZWxFdmVudFRlc3RNb25pdG9yJiBQYWdlOjpl
bnN1cmVXaGVlbEV2ZW50VGVzdE1vbml0b3IoKQpAQCAtMjY2MCwxOSArMjU4MCwxOCBAQCBXaGVl
bEV2ZW50VGVzdE1vbml0b3ImIFBhZ2U6OmVuc3VyZVdoZWVsRXZlbnRUZXN0TW9uaXRvcigpCiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCisKIHZvaWQgUGFnZTo6c2V0QWxsb3dzTWVkaWFEb2N1bWVu
dElubGluZVBsYXliYWNrKGJvb2wgZmxhZykKIHsKICAgICBpZiAobV9hbGxvd3NNZWRpYURvY3Vt
ZW50SW5saW5lUGxheWJhY2sgPT0gZmxhZykKICAgICAgICAgcmV0dXJuOwogICAgIG1fYWxsb3dz
TWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrID0gZmxhZzsKIAotICAgIFZlY3RvcjxSZWY8RG9j
dW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9tYWluRnJhbWUu
Z2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAg
ICAgIGRvY3VtZW50cy5hcHBlbmQoKmZyYW1lLT5kb2N1bWVudCgpKTsKLQotICAgIGZvciAoYXV0
byYgZG9jdW1lbnQgOiBkb2N1bWVudHMpCi0gICAgICAgIGRvY3VtZW50LT5hbGxvd3NNZWRpYURv
Y3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCk7CisgICAgZm9yRWFjaE1lZGlhRWxlbWVudChb
XSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBlbGVtZW50LmFsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQoKTsKKyAgICB9KTsKIH0KKwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTI3MjgsNyArMjY0Nyw3IEBAIHZv
aWQgUGFnZTo6c2V0Q2FwdGlvblVzZXJQcmVmZXJlbmNlc1N0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiBzdHlsZVNoZWV0KQogCiB2b2lkIFBhZ2U6OmFjY2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5n
ZSgpCiB7Ci0gICAgZm9yRWFjaERvY3VtZW50KFtdKGF1dG8mIGRvY3VtZW50KSB7CisgICAgZm9y
RWFjaERvY3VtZW50KFtdIChhdXRvJiBkb2N1bWVudCkgewogICAgICAgICBkb2N1bWVudC5zdHls
ZVNjb3BlKCkuZXZhbHVhdGVNZWRpYVF1ZXJpZXNGb3JBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFu
Z2UoKTsKICAgICAgICAgZG9jdW1lbnQudXBkYXRlRWxlbWVudHNBZmZlY3RlZEJ5TWVkaWFRdWVy
aWVzKCk7CiAgICAgICAgIGRvY3VtZW50LnNjaGVkdWxlVGltZWRSZW5kZXJpbmdVcGRhdGUoKTsK
QEAgLTI3MzcsNyArMjY1Niw3IEBAIHZvaWQgUGFnZTo6YWNjZXNzaWJpbGl0eVNldHRpbmdzRGlk
Q2hhbmdlKCkKIAogdm9pZCBQYWdlOjphcHBlYXJhbmNlRGlkQ2hhbmdlKCkKIHsKLSAgICBmb3JF
YWNoRG9jdW1lbnQoW10oYXV0byYgZG9jdW1lbnQpIHsKKyAgICBmb3JFYWNoRG9jdW1lbnQoW10g
KGF1dG8mIGRvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50LnN0eWxlU2NvcGUoKS5kaWRDaGFu
Z2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKICAgICAgICAgZG9jdW1lbnQuc3R5bGVTY29wZSgp
LmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yQXBwZWFyYW5jZUNoYW5nZSgpOwogICAgICAgICBkb2N1
bWVudC51cGRhdGVFbGVtZW50c0FmZmVjdGVkQnlNZWRpYVF1ZXJpZXMoKTsKQEAgLTI3NTIsMTEg
KzI2NzEsOSBAQCB2b2lkIFBhZ2U6OnNldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyhjb25zdCBG
bG9hdEJveEV4dGVudCYgaW5zZXRzKQogCiAgICAgbV91bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMg
PSBpbnNldHM7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5jb25zdGFudFByb3BlcnRpZXMoKS5kaWRDaGFuZ2VTYWZlQXJlYUluc2V0cygp
OwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsK
KyAgICAgICAgZG9jdW1lbnQuY29uc3RhbnRQcm9wZXJ0aWVzKCkuZGlkQ2hhbmdlU2FmZUFyZWFJ
bnNldHMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQYWdlOjpzZXRVc2VTeXN0ZW1BcHBlYXJhbmNl
KGJvb2wgdmFsdWUpCkBAIC0yNzY4LDE1ICsyNjg1LDExIEBAIHZvaWQgUGFnZTo6c2V0VXNlU3lz
dGVtQXBwZWFyYW5jZShib29sIHZhbHVlKQogCiAgICAgYXBwZWFyYW5jZURpZENoYW5nZSgpOwog
Ci0gICAgZm9yIChhdXRvKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgY29u
dGludWU7Ci0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsK
ICAgICAgICAgLy8gU3lzdGVtIGFwcGVyYW5jZSBjaGFuZ2UgbWF5IGFmZmVjdCBzdHlsZXNoZWV0
IHBhcnNpbmcuIFdlIG5lZWQgdG8gcmVwYXJzZS4KLSAgICAgICAgZG9jdW1lbnQtPmV4dGVuc2lv
blN0eWxlU2hlZXRzKCkuY2xlYXJQYWdlVXNlclNoZWV0KCk7Ci0gICAgICAgIGRvY3VtZW50LT5l
eHRlbnNpb25TdHlsZVNoZWV0cygpLmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgp
OwotICAgIH0KKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5jbGVhclBh
Z2VVc2VyU2hlZXQoKTsKKyAgICAgICAgZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5p
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBQ
YWdlOjplZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2Us
IGJvb2wgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwpCkBAIC0yODM1LDM1ICsyNzQ4LDMy
IEBAIHZvaWQgUGFnZTo6c2V0RnVsbHNjcmVlbkluc2V0cyhjb25zdCBGbG9hdEJveEV4dGVudCYg
aW5zZXRzKQogewogICAgIGlmIChpbnNldHMgPT0gbV9mdWxsc2NyZWVuSW5zZXRzKQogICAgICAg
ICByZXR1cm47CisKICAgICBtX2Z1bGxzY3JlZW5JbnNldHMgPSBpbnNldHM7CiAKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jb25zdGFudFBy
b3BlcnRpZXMoKS5kaWRDaGFuZ2VGdWxsc2NyZWVuSW5zZXRzKCk7Ci0gICAgfQorICAgIGZvckVh
Y2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgIGRvY3VtZW50LmNv
bnN0YW50UHJvcGVydGllcygpLmRpZENoYW5nZUZ1bGxzY3JlZW5JbnNldHMoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBQYWdlOjpzZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbihTZWNvbmRzIGR1
cmF0aW9uKQogewogICAgIGlmIChkdXJhdGlvbiA9PSBtX2Z1bGxzY3JlZW5BdXRvSGlkZUR1cmF0
aW9uKQogICAgICAgICByZXR1cm47CisKICAgICBtX2Z1bGxzY3JlZW5BdXRvSGlkZUR1cmF0aW9u
ID0gZHVyYXRpb247Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFm
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+Y29uc3RhbnRQcm9wZXJ0aWVzKCkuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVy
YXRpb24oZHVyYXRpb24pOwotICAgIH0KKworICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3Vt
ZW50JiBkb2N1bWVudCkgeworICAgICAgICBkb2N1bWVudC5jb25zdGFudFByb3BlcnRpZXMoKS5z
ZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbihkdXJhdGlvbik7CisgICAgfSk7CiB9CiAKIHZv
aWQgUGFnZTo6c2V0RnVsbHNjcmVlbkNvbnRyb2xzSGlkZGVuKGJvb2wgaGlkZGVuKQogewogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5mdWxsc2NyZWVuTWFuYWdlcigpLnNldEZ1bGxzY3JlZW5D
b250cm9sc0hpZGRlbihoaWRkZW4pOwotICAgIH0KKyAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChE
b2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgZG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIo
KS5zZXRGdWxsc2NyZWVuQ29udHJvbHNIaWRkZW4oaGlkZGVuKTsKKyAgICB9KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGhpZGRlbik7CiAjZW5kaWYKQEAgLTI5MjQsMzEgKzI4MzQsMzMgQEAg
UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiBQYWdlOjpyZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIo
KQogICAgIHJldHVybiAqbV9yZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI7CiB9CiAKLXZvaWQgUGFn
ZTo6Zm9yRWFjaERvY3VtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mIGZ1bmN0
b3IpCi17Ci0gICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGNvbGxlY3REb2N1bWVudHMoKSkKLSAg
ICAgICAgZnVuY3Rvcihkb2N1bWVudCk7Ci19Ci0KLVZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBQYWdl
Ojpjb2xsZWN0RG9jdW1lbnRzKCkKK3ZvaWQgUGFnZTo6Zm9yRWFjaERvY3VtZW50KGNvbnN0IEZ1
bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mIGZ1bmN0b3IpIGNvbnN0CiB7CiAgICAgVmVjdG9yPFJl
ZjxEb2N1bWVudD4+IGRvY3VtZW50czsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAg
IGZvciAoYXV0byogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBkb2N1bWVudHMuYXBwZW5kKCpkb2N1bWVudCk7CiAgICAgfQotICAgIHJldHVy
biBkb2N1bWVudHM7CisgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3VtZW50cykKKyAgICAg
ICAgZnVuY3Rvcihkb2N1bWVudCk7CiB9CiAKLXZvaWQgUGFnZTo6YXBwbGljYXRpb25XaWxsUmVz
aWduQWN0aXZlKCkKK3ZvaWQgUGFnZTo6Zm9yRWFjaE1lZGlhRWxlbWVudChjb25zdCBGdW5jdGlv
bjx2b2lkKEhUTUxNZWRpYUVsZW1lbnQmKT4mIGZ1bmN0b3IpCiB7CiAgICAgZm9yRWFjaERvY3Vt
ZW50KFsmXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgIGRvY3VtZW50LmZvckVhY2hB
cHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIoWyZdIChBcHBsaWNhdGlvblN0YXRlQ2hhbmdl
TGlzdGVuZXImIGxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBsaXN0ZW5lci5hcHBsaWNhdGlvbldp
bGxSZXNpZ25BY3RpdmUoKTsKLSAgICAgICAgfSk7CisgICAgICAgIGRvY3VtZW50LmZvckVhY2hN
ZWRpYUVsZW1lbnQoZnVuY3Rvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgUGFnZTo6YXBwbGljYXRp
b25XaWxsUmVzaWduQWN0aXZlKCkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZm9yRWFjaE1l
ZGlhRWxlbWVudChbXSAoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICBlbGVt
ZW50LmFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZSgpOwogICAgIH0pOworI2VuZGlmCiB9CiAK
IHZvaWQgUGFnZTo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQpAQCAtMjk2MywxMSAr
Mjg3NSwxMSBAQCB2b2lkIFBhZ2U6OmFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgpCiAK
IHZvaWQgUGFnZTo6YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogewotICAgIGZvckVhY2hE
b2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVudCkgewotICAgICAgICBkb2N1bWVudC5mb3JF
YWNoQXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKFsmXSAoQXBwbGljYXRpb25TdGF0ZUNo
YW5nZUxpc3RlbmVyJiBsaXN0ZW5lcikgewotICAgICAgICAgICAgbGlzdGVuZXIuYXBwbGljYXRp
b25EaWRCZWNvbWVBY3RpdmUoKTsKLSAgICAgICAgfSk7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IGZvckVhY2hNZWRpYUVsZW1lbnQoW10gKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIHsKKyAg
ICAgICAgZWxlbWVudC5hcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpOwogICAgIH0pOworI2Vu
ZGlmCiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0zMDY4LDI1ICsyOTgwLDIyIEBAIHZvaWQg
UGFnZTo6ZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50JiBl
bGVtZW50KQogfQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKwogdm9pZCBQYWdlOjpy
ZWNvbXB1dGVUZXh0QXV0b1NpemluZ0luQWxsRnJhbWVzKCkKIHsKICAgICBBU1NFUlQoc2V0dGlu
Z3MoKS50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKSAmJiBzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5n
VXNlc0lkZW1wb3RlbnRNb2RlKCkpOwotICAgIGZvciAoYXV0byogZnJhbWUgPSAmbWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAg
ICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9ICpmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2N1
bWVudC5yZW5kZXJWaWV3KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3Ig
KGF1dG8mIHJlbmRlcmVyIDogZGVzY2VuZGFudHNPZlR5cGU8UmVuZGVyRWxlbWVudD4oKmRvY3Vt
ZW50LnJlbmRlclZpZXcoKSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVu
ZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuZWVkc0xheW91dCA9IFN0
eWxlOjpBZGp1c3Rlcjo6YWRqdXN0Rm9yVGV4dEF1dG9zaXppbmcocmVuZGVyZXIubXV0YWJsZVN0
eWxlKCksICplbGVtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNMYXlvdXQpCi0gICAg
ICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KCk7CisgICAgZm9yRWFjaERv
Y3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRl
clZpZXcgPSBkb2N1bWVudC5yZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cmVuZGVyZXIgOiBkZXNjZW5kYW50c09mVHlwZTxSZW5kZXJFbGVtZW50PigqcmVuZGVyVmlldykp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGU6OkFkanVzdGVyOjphZGp1c3RGb3JU
ZXh0QXV0b3NpemluZyhyZW5kZXJlci5tdXRhYmxlU3R5bGUoKSwgKmVsZW1lbnQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CisgICAgfSk7CiB9CisKICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDVmNGNlYjBh
MzY1MGM0MmE4ZTE3ZDEyNjNmNTY4NDdlZjE4MWM0NTMuLjQ4ZjU2ODhiNDczNjkyMTFhYjEyZWJj
MTFlMzk0MzlkY2YyODE4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTgz
LDMzICs4MywyNyBAQCBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIGNsYXNzIElEQkNvbm5lY3Rpb25U
b1NlcnZlcjsKIH0KIAorY2xhc3MgQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyOwogY2xhc3Mg
QWx0ZXJuYXRpdmVUZXh0Q2xpZW50OwogY2xhc3MgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U7CiBj
bGFzcyBBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I7CiBjbGFzcyBCYWNrRm9yd2FyZENvbnRyb2xs
ZXI7Ci1jbGFzcyBCYWNrRm9yd2FyZENsaWVudDsKIGNsYXNzIENhY2hlU3RvcmFnZVByb3ZpZGVy
OwogY2xhc3MgQ2hyb21lOwotY2xhc3MgQ2hyb21lQ2xpZW50OwogY2xhc3MgQ29sb3I7Ci1jbGFz
cyBDb250ZXh0TWVudUNsaWVudDsKIGNsYXNzIENvbnRleHRNZW51Q29udHJvbGxlcjsKIGNsYXNz
IENvb2tpZUphcjsKLWNsYXNzIERPTVJlY3Q7CiBjbGFzcyBET01SZWN0TGlzdDsKIGNsYXNzIERh
dGFiYXNlUHJvdmlkZXI7CiBjbGFzcyBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDsKIGNsYXNzIERy
YWdDYXJldENvbnRyb2xsZXI7Ci1jbGFzcyBEcmFnQ2xpZW50OwogY2xhc3MgRHJhZ0NvbnRyb2xs
ZXI7CiBjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRm9jdXNDb250
cm9sbGVyOwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBGcmFtZUxvYWRlckNsaWVudDsKLWNsYXNzIEhp
c3RvcnlJdGVtOwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFVzZXJJbnB1dEJyaWRn
ZTsKK2NsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIExpYldlYlJUQ1Byb3ZpZGVyOwpAQCAtMTMyLDUwICsx
MjYsMzkgQEAgY2xhc3MgUGx1Z2luVmlld0Jhc2U7CiBjbGFzcyBQb2ludGVyQ2FwdHVyZUNvbnRy
b2xsZXI7CiBjbGFzcyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQcm9ncmVzc1RyYWNr
ZXI7Ci1jbGFzcyBQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJl
bmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJs
YXk7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsK
LWNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiBjbGFz
cyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTb2Nr
ZXRQcm92aWRlcjsKK2NsYXNzIFNwZWVjaFN5bnRoZXNpc0NsaWVudDsKIGNsYXNzIFN0b3JhZ2VO
YW1lc3BhY2U7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXI7CiBjbGFzcyBVc2VyQ29u
dGVudFByb3ZpZGVyOworY2xhc3MgVXNlcklucHV0QnJpZGdlOwogY2xhc3MgVmFsaWRhdGlvbk1l
c3NhZ2VDbGllbnQ7Ci1jbGFzcyBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXI7CitjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgVmlzaXRlZExpbmtTdG9yZTsKIGNsYXNzIFdlYkdMU3Rh
dGVUcmFja2VyOwotY2xhc3MgU3BlZWNoU3ludGhlc2lzQ2xpZW50OwogY2xhc3MgV2hlZWxFdmVu
dERlbHRhRmlsdGVyOwogCi10eXBlZGVmIHVpbnQ2NF90IFNoYXJlZFN0cmluZ0hhc2g7Cit1c2lu
ZyBTaGFyZWRTdHJpbmdIYXNoID0gdWludDY0X3Q7CiAKLWVudW0gRmluZERpcmVjdGlvbiB7Ci0g
ICAgRmluZERpcmVjdGlvbkZvcndhcmQsCi0gICAgRmluZERpcmVjdGlvbkJhY2t3YXJkCi19Owor
ZW51bSBjbGFzcyBDYW5XcmFwIDogYm9vbDsKK2VudW0gY2xhc3MgRGlkV3JhcCA6IGJvb2w7Citl
bnVtIGNsYXNzIFJvdXRlU2hhcmluZ1BvbGljeSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFNob3Vs
ZFRyZWF0QXNDb250aW51aW5nTG9hZCA6IGJvb2w7CiAKLWVudW0gY2xhc3MgRXZlbnRUaHJvdHRs
aW5nQmVoYXZpb3IgewotICAgIFJlc3BvbnNpdmUsCi0gICAgVW5yZXNwb25zaXZlCi19OworZW51
bSBjbGFzcyBFdmVudFRocm90dGxpbmdCZWhhdmlvciA6IGJvb2wgeyBSZXNwb25zaXZlLCBVbnJl
c3BvbnNpdmUgfTsKIAotZW51bSBjbGFzcyBDb21wb3NpdGluZ1BvbGljeSA6IHVpbnQ4X3Qgewor
ZW51bSBjbGFzcyBDb21wb3NpdGluZ1BvbGljeSA6IGJvb2wgewogICAgIE5vcm1hbCwKICAgICBD
b25zZXJ2YXRpdmUsIC8vIFVzZWQgaW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLgogfTsKIAotZW51
bSBjbGFzcyBDYW5XcmFwIDogYm9vbDsKLWVudW0gY2xhc3MgRGlkV3JhcCA6IGJvb2w7Ci1lbnVt
IGNsYXNzIFJvdXRlU2hhcmluZ1BvbGljeSA6IHVpbnQ4X3Q7Ci1lbnVtIGNsYXNzIFNob3VsZFRy
ZWF0QXNDb250aW51aW5nTG9hZCA6IGJvb2w7Ci0KIGNsYXNzIFBhZ2UgOiBwdWJsaWMgU3VwcGxl
bWVudGFibGU8UGFnZT4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxQYWdlPiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGFnZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0z
MDksMTMgKzI5MiwxNCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRj
aEJlZm9yZVByaW50RXZlbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoQWZ0
ZXJQcmludEV2ZW50KCk7CiAKLSAgICAvLyBmaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0
Y2hpbmcgdGV4dC4KKyAgICAvLyBGaW5kIGFsbCB0aGUgUmFuZ2VzIGZvciB0aGUgbWF0Y2hpbmcg
dGV4dC4KICAgICAvLyBVcG9uIHJldHVybiwgaW5kZXhGb3JTZWxlY3Rpb24gd2lsbCBiZSBvbmUg
b2YgdGhlIGZvbGxvd2luZzoKICAgICAvLyAwIGlmIHRoZXJlIGlzIG5vIHVzZXIgc2VsZWN0aW9u
CiAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByYW5nZSBhZnRlciB0aGUgdXNlciBzZWxl
Y3Rpb24KICAgICAvLyBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uIGlmIHRoZXJlIGlzIG5vIG1h
dGNoaW5nIHRleHQgYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0aW9uLgogICAgIGVudW0geyBOb01hdGNo
QWZ0ZXJVc2VyU2VsZWN0aW9uID0gLTEgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbmRT
dHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgaW50IG1heENv
dW50LCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mLCBpbnQmIGluZGV4Rm9yU2VsZWN0aW9uKTsKKwog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRTY2hlZHVsZVBhaXIoUmVmPFNjaGVkdWxlUGFpcj4mJik7
CkBAIC0zNzksMTAgKzM2MywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmNsb3NlZEluU2Nyb2xs
YWJsZUFuY2VzdG9yVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jbG9zZWRJblNjcm9sbGFibGVB
bmNlc3RvclZpZXc7IH0KICAgICB2b2lkIHNldEVuY2xvc2VkSW5TY3JvbGxhYmxlQW5jZXN0b3JW
aWV3KGJvb2wgZikgeyBtX2VuY2xvc2VkSW5TY3JvbGxhYmxlQW5jZXN0b3JWaWV3ID0gZjsgfQog
I2VuZGlmCi0gICAgCisKICAgICBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3VzZVN5c3RlbUFwcGVhcmFuY2U7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFVzZVN5c3RlbUFwcGVhcmFuY2UoYm9vbCk7Ci0gICAgCisKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3Q7CiAgICAgYm9vbCB1c2VFbGV2YXRlZFVzZXJJ
bnRlcmZhY2VMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNl
TGV2ZWw7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRD
aGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgYm9vbCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZh
Y2VMZXZlbCk7CkBAIC00MzMsMTEgKzQxNywxMSBAQCBwdWJsaWM6CiAgICAgV2hlZWxFdmVudERl
bHRhRmlsdGVyKiB3aGVlbEV2ZW50RGVsdGFGaWx0ZXIoKSB7IHJldHVybiBtX3JlY2VudFdoZWVs
RXZlbnREZWx0YUZpbHRlci5nZXQoKTsgfQogICAgIFBhZ2VPdmVybGF5Q29udHJvbGxlciYgcGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkgeyByZXR1cm4gKm1fcGFnZU92ZXJsYXlDb250cm9sbGVyOyB9
CiAKLSNpZiBQTEFURk9STShNQUMpCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyNpZiBQTEFURk9STShNQUMpICYmIChF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKSkKICAgICBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBzZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkgeyByZXR1cm4gKm1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsgfQotI2VuZGlm
IC8vIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9E
RVRFQ1RJT04pCisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKICAgICBTY3JvbGxMYXRjaGlu
Z1N0YXRlKiBsYXRjaGluZ1N0YXRlKCk7CiAgICAgdm9pZCBwdXNoTmV3TGF0Y2hpbmdTdGF0ZSgp
OwogICAgIHZvaWQgcG9wTGF0Y2hpbmdTdGF0ZSgpOwpAQCAtNTUyLDggKzUzNiw2IEBAIHB1Ymxp
YzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucygpOwotICAgIHZvaWQgc3VzcGVuZERldmljZU1vdGlvbkFuZE9yaWVu
dGF0aW9uVXBkYXRlcygpOwotICAgIHZvaWQgcmVzdW1lRGV2aWNlTW90aW9uQW5kT3JpZW50YXRp
b25VcGRhdGVzKCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBzZXRJc1BhaW50aW5nKGJv
b2wgcGFpbnRpbmcpIHsgbV9pc1BhaW50aW5nID0gcGFpbnRpbmc7IH0KQEAgLTcyOCw2ICs3MTAs
OSBAQCBwdWJsaWM6CiAgICAgRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlciogZGV2aWNl
T3JpZW50YXRpb25VcGRhdGVQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlT3JpZW50
YXRpb25VcGRhdGVQcm92aWRlci5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIGZvckVhY2hE
b2N1bWVudChjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mKSBjb25zdDsKKyAg
ICB2b2lkIGZvckVhY2hNZWRpYUVsZW1lbnQoY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKEhUTUxN
ZWRpYUVsZW1lbnQmKT4mKTsKKwogcHJpdmF0ZToKICAgICBzdHJ1Y3QgTmF2aWdhdGlvbiB7CiAg
ICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIGRvbWFpbjsKQEAgLTc0MSwxMSArNzI2LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldElzVmlzaWJsZUludGVybmFsKGJvb2wpOwogICAgIHZvaWQgc2V0
SXNWaXN1YWxseUlkbGVJbnRlcm5hbChib29sKTsKIAotI2lmIEFTU0VSVF9ESVNBQkxFRAotICAg
IHZvaWQgY2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVuY3koKSBjb25zdCB7IH0KLSNlbHNlCiAg
ICAgdm9pZCBjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSgpIGNvbnN0OwotI2VuZGlmCiAK
ICAgICBlbnVtIFNob3VsZEhpZ2hsaWdodE1hdGNoZXMgeyBEb05vdEhpZ2hsaWdodE1hdGNoZXMs
IEhpZ2hsaWdodE1hdGNoZXMgfTsKICAgICBlbnVtIFNob3VsZE1hcmtNYXRjaGVzIHsgRG9Ob3RN
YXJrTWF0Y2hlcywgTWFya01hdGNoZXMgfTsKQEAgLTc2Miw5ICs3NDMsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UoYm9vbCk7CiAKLSAgICB2b2lkIGZv
ckVhY2hEb2N1bWVudChjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mKTsKLSAg
ICBWZWN0b3I8UmVmPERvY3VtZW50Pj4gY29sbGVjdERvY3VtZW50cygpOwotCiAgICAgZW51bSBj
bGFzcyBUaW1lclRocm90dGxpbmdTdGF0ZSB7IERpc2FibGVkLCBFbmFibGVkLCBFbmFibGVkSW5j
cmVhc2luZyB9OwogICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCgpOwogICAgIHZvaWQgc2V0VGltZXJUaHJvdHRsaW5nU3RhdGUoVGltZXJUaHJvdHRsaW5n
U3RhdGUpOwpAQCAtOTc4LDkgKzk1Niw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFBlcmZvcm1hbmNlTG9nZ2luZz4gbV9wZXJmb3JtYW5jZUxvZ2dpbmc7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFZlY3RvcjxTY3JvbGxMYXRjaGluZ1N0YXRlPiBtX2xhdGNoaW5nU3RhdGU7Ci0j
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4g
bV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKSAm
JiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikpCisgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI+
IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKICNlbmRpZgogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdoZWVsRXZlbnREZWx0YUZpbHRlcj4gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFGaWx0ZXI7
CkBAIC0xMDE3LDQgKzk5NSwxMiBAQCBpbmxpbmUgUGFnZUdyb3VwJiBQYWdlOjpncm91cCgpCiAg
ICAgcmV0dXJuICptX2dyb3VwOwogfQogCisjaWYgQVNTRVJUX0RJU0FCTEVECisKK2lubGluZSB2
b2lkIFBhZ2U6OmNoZWNrU3ViZnJhbWVDb3VudENvbnNpc3RlbmN5KCkgY29uc3QKK3sKK30KKwor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAppbmRleCAyODMxNTcwZGI4ODRhODg0NjU2YmEyNzg0
OGQxYzQ4YTk4OTQyMjBhLi5lNWIzNzIzMWY2Mjc2ZWQ5NDIxYmQ0MDMxYWNlY2UzODJjZmJjMWI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCkBA
IC00NCw3ICs0NCw3IEBAIHN0YXRpYyBjb25zdCBUZXh0RW5jb2RpbmcmIFVURjdFbmNvZGluZygp
CiB9CiAKIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIG5hbWUpCi0gICAg
OiBtX25hbWUoYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShuYW1lKSkKKyAgICA6IG1f
bmFtZShhdG9tQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShuYW1lKSkKICAgICAsIG1fYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbChiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpCiB7CiAgICAg
Ly8gQWxpYXNlcyBhcmUgdmFsaWQsIGJ1dCBub3QgInJlcGxhY2VtZW50IiBpdHNlbGYuCkBAIC01
Myw3ICs1Myw3IEBAIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIG5hbWUp
CiB9CiAKIFRleHRFbmNvZGluZzo6VGV4dEVuY29kaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkKLSAg
ICA6IG1fbmFtZShhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKG5hbWUpKQorICAgIDog
bV9uYW1lKGF0b21DYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKG5hbWUpKQogICAgICwgbV9iYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSkKIHsKICAg
ICAvLyBBbGlhc2VzIGFyZSB2YWxpZCwgYnV0IG5vdCAicmVwbGFjZW1lbnQiIGl0c2VsZi4KQEAg
LTkzLDcgKzkzLDcgQEAgY29uc3QgY2hhciogVGV4dEVuY29kaW5nOjpkb21OYW1lKCkgY29uc3QK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUuIEF0IHRoZSBtb21lbnQsIHRo
aXMgZnVuY3Rpb24gaXMKICAgICAvLyBvbmx5IGFjY2Vzc2VkIGluIGEgc2luZ2xlIHRocmVhZCwg
YnV0IGV2ZW50dWFsbHkgaGFzIHRvIGJlIG1hZGUKICAgICAvLyB0aHJlYWQtc2FmZSBhbG9uZyB3
aXRoIHVzZXNWaXN1YWxPcmRlcmluZygpLgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBh
ID0gYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZSgid2luZG93cy05NDkiKTsKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgYSA9IGF0b21DYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1l
KCJ3aW5kb3dzLTk0OSIpOwogICAgIGlmIChtX25hbWUgPT0gYSkKICAgICAgICAgcmV0dXJuICJF
VUMtS1IiOwogICAgIHJldHVybiBtX25hbWU7CkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBUZXh0
RW5jb2Rpbmc6OnVzZXNWaXN1YWxPcmRlcmluZygpIGNvbnN0CiAgICAgaWYgKG5vRXh0ZW5kZWRU
ZXh0RW5jb2RpbmdOYW1lVXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgYSA9IGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUo
IklTTy04ODU5LTgiKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgYSA9IGF0b21DYW5v
bmljYWxUZXh0RW5jb2RpbmdOYW1lKCJJU08tODg1OS04Iik7CiAgICAgcmV0dXJuIG1fbmFtZSA9
PSBhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCmluZGV4IDU0NDRmMDIxN2QyNmEwNWE1Zjg5ZmMxNWFlOGIyMzFi
MmQxNWFmNGEuLmM5ZTE1MGVlNmUzZjZhZTRhMGM1MjEzZjUxZWFjMGY3YzY5MTUyOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCkBAIC0xMTgsNDAgKzExOCw0MCBAQCBzdGF0aWMgdm9pZCBhZGRUb1RleHRFbmNvZGlu
Z05hbWVNYXAoY29uc3QgY2hhciogYWxpYXMsIGNvbnN0IGNoYXIqIG5hbWUpCiAgICAgQVNTRVJU
KHN0cmxlbihhbGlhcykgPD0gbWF4RW5jb2RpbmdOYW1lTGVuZ3RoKTsKICAgICBpZiAoaXNVbmRl
c2lyZWRBbGlhcyhhbGlhcykpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBjaGFyKiBhdG9t
aWNOYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIEFTU0VSVChzdHJj
bXAoYWxpYXMsIG5hbWUpID09IDAgfHwgYXRvbWljTmFtZSk7Ci0gICAgaWYgKCFhdG9taWNOYW1l
KQotICAgICAgICBhdG9taWNOYW1lID0gbmFtZTsKKyAgICBjb25zdCBjaGFyKiBhdG9tTmFtZSA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKTsKKyAgICBBU1NFUlQoIXN0cmNtcChhbGlh
cywgbmFtZSkgfHwgYXRvbU5hbWUpOworICAgIGlmICghYXRvbU5hbWUpCisgICAgICAgIGF0b21O
YW1lID0gbmFtZTsKIAotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXRleHRFbmNvZGluZ05hbWVN
YXAtPmdldChhbGlhcyksICJEdXBsaWNhdGUgdGV4dCBlbmNvZGluZyBuYW1lICVzIGZvciAlcyAo
cHJldmlvdXNseSByZWdpc3RlcmVkIGFzICVzKSIsIGFsaWFzLCBhdG9taWNOYW1lLCB0ZXh0RW5j
b2RpbmdOYW1lTWFwLT5nZXQoYWxpYXMpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCF0ZXh0
RW5jb2RpbmdOYW1lTWFwLT5nZXQoYWxpYXMpLCAiRHVwbGljYXRlIHRleHQgZW5jb2RpbmcgbmFt
ZSAlcyBmb3IgJXMgKHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhcyAlcykiLCBhbGlhcywgYXRvbU5h
bWUsIHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChhbGlhcykpOwogCi0gICAgdGV4dEVuY29kaW5n
TmFtZU1hcC0+YWRkKGFsaWFzLCBhdG9taWNOYW1lKTsKKyAgICB0ZXh0RW5jb2RpbmdOYW1lTWFw
LT5hZGQoYWxpYXMsIGF0b21OYW1lKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkVG9UZXh0Q29kZWNN
YXAoY29uc3QgY2hhciogbmFtZSwgTmV3VGV4dENvZGVjRnVuY3Rpb24mJiBmdW5jdGlvbikKIHsK
LSAgICBjb25zdCBjaGFyKiBhdG9taWNOYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5h
bWUpOwotICAgIEFTU0VSVChhdG9taWNOYW1lKTsKLSAgICB0ZXh0Q29kZWNNYXAtPmFkZChhdG9t
aWNOYW1lLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgY29uc3QgY2hhciogYXRvbU5hbWUgPSB0
ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7CisgICAgQVNTRVJUKGF0b21OYW1lKTsKKyAg
ICB0ZXh0Q29kZWNNYXAtPmFkZChhdG9tTmFtZSwgV1RGTW92ZShmdW5jdGlvbikpOwogfQogCiBz
dGF0aWMgdm9pZCBwcnVuZUJsYWNrbGlzdGVkQ29kZWNzKCkKIHsKICAgICBmb3IgKGF1dG8mIG5h
bWVGcm9tQmxhY2tsaXN0IDogdGV4dEVuY29kaW5nTmFtZUJsYWNrbGlzdCkgewotICAgICAgICBh
dXRvKiBhdG9taWNOYW1lID0gdGV4dEVuY29kaW5nTmFtZU1hcC0+Z2V0KG5hbWVGcm9tQmxhY2ts
aXN0KTsKLSAgICAgICAgaWYgKCFhdG9taWNOYW1lKQorICAgICAgICBhdXRvKiBhdG9tTmFtZSA9
IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lRnJvbUJsYWNrbGlzdCk7CisgICAgICAgIGlm
ICghYXRvbU5hbWUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y29u
c3QgY2hhcio+IG5hbWVzOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRleHRFbmNvZGlu
Z05hbWVNYXApIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSBhdG9taWNOYW1lKQor
ICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IGF0b21OYW1lKQogICAgICAgICAgICAgICAg
IG5hbWVzLmFwcGVuZChlbnRyeS5rZXkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRv
KiBuYW1lIDogbmFtZXMpCiAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5yZW1vdmUo
bmFtZSk7CiAKLSAgICAgICAgdGV4dENvZGVjTWFwLT5yZW1vdmUoYXRvbWljTmFtZSk7CisgICAg
ICAgIHRleHRDb2RlY01hcC0+cmVtb3ZlKGF0b21OYW1lKTsKICAgICB9CiB9CiAKQEAgLTE3OCwx
MCArMTc4LDEwIEBAIHN0YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoY29uc3Qgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+JikKIAogc3RhdGljIHZvaWQgYWRkRW5jb2RpbmdOYW1lKEhhc2hT
ZXQ8Y29uc3QgY2hhcio+KiBzZXQsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgLy8gV2UgbXVz
dCBub3QgdXNlIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoKSBiZWNhdXNlIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIGluIGl0LgotICAgIGNvbnN0IGNoYXIqIGF0b21pY05hbWUgPSB0
ZXh0RW5jb2RpbmdOYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKGF0b21pY05hbWUpCi0gICAg
ICAgIHNldC0+YWRkKGF0b21pY05hbWUpOworICAgIC8vIFdlIG11c3Qgbm90IHVzZSBhdG9tQ2Fu
b25pY2FsVGV4dEVuY29kaW5nTmFtZSgpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
aW4gaXQuCisgICAgY29uc3QgY2hhciogYXRvbU5hbWUgPSB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5n
ZXQobmFtZSk7CisgICAgaWYgKGF0b21OYW1lKQorICAgICAgICBzZXQtPmFkZChhdG9tTmFtZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGJ1aWxkUXVpcmtzU2V0cygpCkBAIC0yNTEsNyArMjUxLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcpCiAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUoKTsKIH0KIAotY29uc3QgY2hh
ciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKiBuYW1lKQorY29u
c3QgY2hhciogYXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hhciogbmFtZSkK
IHsKICAgICBpZiAoIW5hbWUgfHwgIW5hbWVbMF0pCiAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtMjYxLDggKzI2MSw4IEBAIGNvbnN0IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGlu
Z05hbWUoY29uc3QgY2hhciogbmFtZSkKICAgICBpZiAoIXRleHRFbmNvZGluZ05hbWVNYXApCiAg
ICAgICAgIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMobG9jayk7CiAKLSAgICBpZiAoY29uc3QgY2hh
ciogYXRvbWljTmFtZSA9IHRleHRFbmNvZGluZ05hbWVNYXAtPmdldChuYW1lKSkKLSAgICAgICAg
cmV0dXJuIGF0b21pY05hbWU7CisgICAgaWYgKGNvbnN0IGNoYXIqIGF0b21OYW1lID0gdGV4dEVu
Y29kaW5nTmFtZU1hcC0+Z2V0KG5hbWUpKQorICAgICAgICByZXR1cm4gYXRvbU5hbWU7CiAgICAg
aWYgKGRpZEV4dGVuZFRleHRDb2RlY01hcHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0yNzEsNyArMjcxLDcgQEAgY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5n
TmFtZShjb25zdCBjaGFyKiBuYW1lKQogICAgIHJldHVybiB0ZXh0RW5jb2RpbmdOYW1lTWFwLT5n
ZXQobmFtZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBj
b25zdCBjaGFyKiBhdG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgY29uc3QgY2hhciogYXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05h
bWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICBjaGFyIGJ1ZmZlclttYXhFbmNvZGluZ05hbWVMZW5ndGggKyAxXTsKICAgICBzaXplX3QgaiA9
IDA7CkBAIC0yODEsMTggKzI4MSwxOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBzdGF0aWMgY29uc3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTgogICAgICAg
ICBidWZmZXJbaisrXSA9IGNoYXJhY3RlcnNbaV07CiAgICAgfQogICAgIGJ1ZmZlcltqXSA9IDA7
Ci0gICAgcmV0dXJuIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoYnVmZmVyKTsKKyAg
ICByZXR1cm4gYXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoYnVmZmVyKTsKIH0KIAotY29u
c3QgY2hhciogYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGFs
aWFzKQorY29uc3QgY2hhciogYXRvbUNhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3Ry
aW5nJiBhbGlhcykKIHsKICAgICBpZiAoYWxpYXMuaXNFbXB0eSgpIHx8ICFhbGlhcy5pc0FsbEFT
Q0lJKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGFsaWFzLmlzOEJpdCgp
KQotICAgICAgICByZXR1cm4gYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShhbGlhcy5j
aGFyYWN0ZXJzOCgpLCBhbGlhcy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBhdG9tQ2Fub25p
Y2FsVGV4dEVuY29kaW5nTmFtZShhbGlhcy5jaGFyYWN0ZXJzOCgpLCBhbGlhcy5sZW5ndGgoKSk7
CiAKLSAgICByZXR1cm4gYXRvbWljQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShhbGlhcy5jaGFy
YWN0ZXJzMTYoKSwgYWxpYXMubGVuZ3RoKCkpOworICAgIHJldHVybiBhdG9tQ2Fub25pY2FsVGV4
dEVuY29kaW5nTmFtZShhbGlhcy5jaGFyYWN0ZXJzMTYoKSwgYWxpYXMubGVuZ3RoKCkpOwogfQog
CiBib29sIG5vRXh0ZW5kZWRUZXh0RW5jb2RpbmdOYW1lVXNlZCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmgKaW5kZXggOWZjMzk2
OTlhN2I5ZTlmZDA0ZWNmM2RiNzYxYjc0YjdlYzE4ZTViMS4uNDBmYWVmYzNhNzY0N2Q0MDU0YTYw
YTk3MTI3N2IxMjY5YWU0NTNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuaApAQCAtMzgsOCArMzgsOCBAQCBjbGFzcyBUZXh0
RW5jb2Rpbmc7CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dENvZGVjPiBuZXdU
ZXh0Q29kZWMoY29uc3QgVGV4dEVuY29kaW5nJik7CiAKIC8vIE9ubHkgVGV4dEVuY29kaW5nIHNo
b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZGlyZWN0bHkuCi1jb25zdCBjaGFyKiBh
dG9taWNDYW5vbmljYWxUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IGNoYXIqIGFsaWFzKTsKLWNvbnN0
IGNoYXIqIGF0b21pY0Nhbm9uaWNhbFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7Citj
b25zdCBjaGFyKiBhdG9tQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBjaGFyKiBhbGlh
cyk7Citjb25zdCBjaGFyKiBhdG9tQ2Fub25pY2FsVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJp
bmcmKTsKIGJvb2wgbm9FeHRlbmRlZFRleHRFbmNvZGluZ05hbWVVc2VkKCk7CiBib29sIGlzSmFw
YW5lc2VFbmNvZGluZyhjb25zdCBjaGFyKiBjYW5vbmljYWxFbmNvZGluZ05hbWUpOwogYm9vbCBz
aG91bGRTaG93QmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbEluKGNvbnN0IGNoYXIqIGNhbm9uaWNh
bEVuY29kaW5nTmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5j
dGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAppbmRleCBh
OTI0NDA5ZWU0NmM1M2U3M2IyN2E0OWExOWVmZTk2OTcyMTY3M2E1Li45ZmRmYmE4YjEwMjNhZTY1
Y2IyZmY4YzJmYWY0MjMwNDBhMDM4YTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFBhdGhGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9u
cy5jcHAKQEAgLTMwNCwxMyArMzA0LDEyIEBAIFZhbHVlIEZ1blBvc2l0aW9uOjpldmFsdWF0ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRp
b247CiB9CiAKLXN0YXRpYyBBdG9tU3RyaW5nIGF0b21pY1N1YnN0cmluZyhTdHJpbmdCdWlsZGVy
JiBidWlsZGVyLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQorLy8gRklYTUU6IFNo
b3VsZCBTdHJpbmdCdWlsZGVyIG9mZmVyIHRoaXMgYXMgYSBtZW1iZXIgZnVuY3Rpb24/CitzdGF0
aWMgU3RyaW5nVmlldyB0b1N0cmluZ1ZpZXcoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKIHsKLSAg
ICBBU1NFUlQoc3RhcnQgPD0gYnVpbGRlci5sZW5ndGgoKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCA8
PSBidWlsZGVyLmxlbmd0aCgpIC0gc3RhcnQpOwogICAgIGlmIChidWlsZGVyLmlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gQXRvbVN0cmluZyhidWlsZGVyLmNoYXJhY3RlcnM4KCkgKyBzdGFydCwg
bGVuZ3RoKTsKLSAgICByZXR1cm4gQXRvbVN0cmluZyhidWlsZGVyLmNoYXJhY3RlcnMxNigpICsg
c3RhcnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiB7IGJ1aWxkZXIuY2hhcmFjdGVyczgoKSwg
YnVpbGRlci5sZW5ndGgoKSB9OworICAgIHJldHVybiB7IGJ1aWxkZXIuY2hhcmFjdGVyczE2KCks
IGJ1aWxkZXIubGVuZ3RoKCkgfTsKIH0KIAogVmFsdWUgRnVuSWQ6OmV2YWx1YXRlKCkgY29uc3QK
QEAgLTM0Niw3ICszNDUsNyBAQCBWYWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogCiAgICAg
ICAgIC8vIElmIHRoZXJlIGFyZSBzZXZlcmFsIG5vZGVzIHdpdGggdGhlIHNhbWUgaWQsIGlkKCkg
c2hvdWxkIHJldHVybiB0aGUgZmlyc3Qgb25lLgogICAgICAgICAvLyBJbiBXZWJLaXQsIGdldEVs
ZW1lbnRCeUlkIGJlaGF2ZXMgc28sIHRvbywgYWx0aG91Z2ggaXRzIGJlaGF2aW9yIGluIHRoaXMg
Y2FzZSBpcyBmb3JtYWxseSB1bmRlZmluZWQuCi0gICAgICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0
U2NvcGUuZ2V0RWxlbWVudEJ5SWQoYXRvbWljU3Vic3RyaW5nKGlkTGlzdCwgc3RhcnRQb3MsIGVu
ZFBvcyAtIHN0YXJ0UG9zKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0U2NvcGUuZ2V0
RWxlbWVudEJ5SWQodG9TdHJpbmdWaWV3KGlkTGlzdCkuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcykpOwogICAgICAgICBpZiAobm9kZSAmJiByZXN1bHRTZXQuYWRkKG5vZGUp
LmlzTmV3RW50cnkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGUpOwogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggNDEyMTU3
OTc2YTM5OGU4OTI0MjgxZmNjZTkzMGRiZTNmNWQ0YjBhYy4uZGY4ZTU1ZGYxZjBhZTgzNjAzZmE4
ZGQzYTkxYTBlZmFkMzg1YWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdC5jcHAKQEAgLTMyLDEzICszMiwxMiBAQAogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xMjAsMTQgKzExOSw5IEBAIEJ1bmRsZUhpdFRl
c3RSZXN1bHRNZWRpYVR5cGUgSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjptZWRpYVR5cGUo
KSBjb25zdAogI2lmICFFTkFCTEUoVklERU8pCiAgICAgcmV0dXJuIEJ1bmRsZUhpdFRlc3RSZXN1
bHRNZWRpYVR5cGVOb25lOwogI2Vsc2UKLSAgICBOb2RlKiBub2RlID0gbV9oaXRUZXN0UmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAg
ICAgICByZXR1cm4gQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZU5vbmU7Ci0gICAgCi0gICAg
aWYgKCFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuaXNNZWRpYUVsZW1lbnQoKSkKKyAgICBpZiAo
IWlzPEhUTUxNZWRpYUVsZW1lbnQ+KG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KSkpCiAgICAgICAgIHJldHVybiBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlTm9uZTsKLSAg
ICAKLSAgICByZXR1cm4gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpID8gQnVuZGxlSGl0
VGVzdFJlc3VsdE1lZGlhVHlwZVZpZGVvIDogQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZUF1
ZGlvOyAgICAKKyAgICByZXR1cm4gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpID8gQnVu
ZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZVZpZGVvIDogQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlh
VHlwZUF1ZGlvOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0FjY2Vzc2libGVCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2li
bGVCYXNlLmNwcAppbmRleCA5OTM1ZTdmNzVmZDVlMTJiNGQyODc5ZTFkYzQ3ZmQzYmJjOTI0ZWM3
Li5mZmMwODMzZmJjNTE4NjdhOWY3NGZiYjY0YWExYjliZWQwYjIyNGRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlQmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZUJhc2UuY3BwCkBAIC0xNDMsOSArMTQzLDkgQEAgSFJF
U1VMVCBBY2Nlc3NpYmxlQmFzZTo6Z2V0X2F0dHJpYnV0ZShfSW5fIEJTVFIga2V5LCBfT3V0XyBW
QVJJQU5UKiB2YWx1ZSkKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwogCi0gICAgQXRvbVN0cmluZyBrZXlBdG9taWMoa2V5LCA6OlN5c1N0cmluZ0xlbihrZXkpKTsK
KyAgICBBdG9tU3RyaW5nIGtleUF0b20oa2V5LCA6OlN5c1N0cmluZ0xlbihrZXkpKTsKIAotICAg
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZShrZXlBdG9taWMsIHZhbHVlKTsKKyAgICBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWUoa2V5QXRvbSwgdmFsdWUpOwogCiAgICAgcmV0dXJuIFNf
T0s7CiB9Cg==
</data>
<flag name="review"
          id="402173"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>