<?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>269626</bug_id>
          
          <creation_ts>2024-02-16 16:21:12 -0800</creation_ts>
          <short_desc>REGRESSION(274746@main): Large Membuster regression</short_desc>
          <delta_ts>2024-02-17 15:57:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>265363</blocked>
    
    <blocked>269533</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fujii</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2014714</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-16 16:21:12 -0800</bug_when>
    <thetext>https://commits.webkit.org/274746@main introduced a regression:
Large Membuster regression

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014717</commentid>
    <comment_count>1</comment_count>
      <attachid>469937</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-16 16:21:20 -0800</bug_when>
    <thetext>Created attachment 469937
REVERT of 274746@main

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014720</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2024-02-16 16:25:57 -0800</bug_when>
    <thetext>rdar://123062773</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014723</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-02-16 16:28:33 -0800</bug_when>
    <thetext>Committed 274896@main (39c785bbbb2b): &lt;https://commits.webkit.org/274896@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 469937.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014865</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2024-02-17 15:57:15 -0800</bug_when>
    <thetext>*** Bug 269614 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469937</attachid>
            <date>2024-02-16 16:21:20 -0800</date>
            <delta_ts>2024-02-16 16:28:34 -0800</delta_ts>
            <desc>REVERT of 274746@main</desc>
            <filename>bug-269626-20240217002120.patch</filename>
            <type>text/plain</type>
            <size>234223</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSA1YzM2OWU1NmJjODFjN2M1MzgzNjEwMGE5YmVlYzY1YTUxNDk2OTdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBTYXQsIDE3IEZlYiAyMDI0IDAwOjIxOjE3ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIDI3NDc0NkBtYWluIGFuZCAyNzQ3ODVAbWFpbi4KIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk2MjYKCkxhcmdlIE1lbWJ1c3Rl
ciByZWdyZXNzaW9uCgpSZXZlcnRlZCBjaGFuZ2VzZXRzOgoKIkRlY291cGxlIEJpdG1hcEltYWdl
IHNvdXJjZXMgYW5kIG1haW4gZnVuY3Rpb25zIGludG8gc2VwYXJhdGUgY2xhc3NlcyIKaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTM2MwpodHRwczovL2NvbW1pdHMu
d2Via2l0Lm9yZy8yNzQ3NDZAbWFpbgoKIkZpeCBTa2lhIGJ1aWxkIGFmdGVyIDI3NDc0NkBtYWlu
IgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NTMzCmh0dHBzOi8v
Y29tbWl0cy53ZWJraXQub3JnLzI3NDc4NUBtYWluCi0tLQogLi4uL01vZHVsZXMvd2ViY29kZWNz
L1dlYkNvZGVjc1ZpZGVvRnJhbWUuY3BwIHwgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCAgICAgICAgICAgICAgICAgICAgfCAgIDQgLQogLi4uL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIHwgIDE4IC0KIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwICAgICAgICAgICB8ICAgMSArCiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwICAgICAgICAgfCAgIDkgKy0KIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAgICB8ICAyOSArLQogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmggICAgIHwgICAyICsKIC4uLi9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZUNsaWVudC5oICB8ICAgMiArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1h
Z2VDb2NvYS5tbSAgfCAgIDIgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcCB8IDYxNyArKysrKysrKysrLS0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmggICB8IDIyOCArKystLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlU291cmNlLmNwcCAgIHwgODg2IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlU291cmNlLmggICAgIHwgMjQ0IC0tLS0tCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgICAgfCAgMTQgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggICAgICB8ICAxMyArLQogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQWRhcHRlci5jcHAgICAgICAgIHwgICA0ICstCiAuLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuaCAgfCAgIDkgKy0KIC4uLi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3BwICB8ICAxMyArCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmggfCAgIDkgKy0KIC4uLi9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lQW5pbWF0b3IuY3BwICB8IDE5MCAtLS0tCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZUFuaW1hdG9yLmggICAgfCAgODQgLS0KIC4uLi9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lV29ya1F1ZXVlLmNwcCB8IDE4MSAtLS0tCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZVdvcmtRdWV1ZS5oICAgfCAgOTIgLS0KIC4uLi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaCB8ICAgMSArCiAuLi4vV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgfCA3MDAgKysrKysrKysrKysrKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggICB8IDI1NyArKystLQogLi4u
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaCAgIHwgICAyICstCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VTb3VyY2UuY3BwICAgfCAgNDggLQogLi4uL3Bs
YXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlU291cmNlLmggICAgIHwgIDUyIC0KIC4uLi9hdmZv
dW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLmggICB8ICAgMiArCiAuLi4vYXZmb3Vu
ZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbSAgfCAgMTAgKwogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgIHwgICAyICstCiAuLi4vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgfCAgMTIgKy0KIC4uLi9ncmFwaGljcy9j
YWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcCAgICAgICB8ICAgNiArLQogLi4uL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICAgICAgIHwgIDExICstCiAuLi4vcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwICAgfCAgMjcgKy0KIC4uLi9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5oICAgICB8ICAgNCArLQogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwICAgIHwgICA2ICstCiAuLi4vZ3N0cmVhbWVyL0ltYWdl
RGVjb2RlckdTdHJlYW1lci5jcHAgICAgICAgfCAgMTIgKwogLi4uL2dzdHJlYW1lci9JbWFnZURl
Y29kZXJHU3RyZWFtZXIuaCAgICAgICAgIHwgICAzICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VBZGFwdGVyR3RrLmNwcCB8ICAgNCArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbWFnZUFkYXB0ZXJNYWMubW0gIHwgICAyICstCiAuLi4vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJ
bWFnZVNraWEuY3BwICAgICAgICAgfCAgIDYgKy0KIC4uLi90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwICAgICB8ICAgMiArLQogLi4uL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyVGlsZS5jcHAgICAgIHwgICAyICstCiAuLi4vY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcCAgfCAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
dXJzb3JHdGsuY3BwICAgICB8ICAgMiArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJbWFnZUd0ay5jcHAgIHwgICAyICstCiAuLi4vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFn
ZURlY29kZXIuaCAgICAgfCAgIDUgKy0KIC4uLi9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9X
aW4uY3BwICAgICAgICB8ICAgMiArLQogLi4uL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAgICAgICAgIHwgIDE4ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oICAgICAgfCAgIDEgKwogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAgIHwgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwICAgICAgfCAgIDIgKy0KIC4uLi9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIu
Y3BwICAgICB8ICAgNCArLQogLi4uL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5o
ICAgICAgIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgICAg
ICAgICAgfCAgIDIgKy0KIC4uLi9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcCAg
ICAgICB8ICAgNCArLQogLi4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVXZWJWaWV3LmNw
cCAgIHwgICAyICstCiAuLi4vR1BVL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRi5jcHAgICAg
ICAgfCAgMTAgKwogLi4uL0dQVS9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkYuaCAgICAgICAg
IHwgICAyICsKIC4uLi9UZXN0cy9XZWJDb3JlL1NWR0ltYWdlQ2FzdHMuY3BwICAgICAgICAgICB8
ICAgNSArCiAuLi5hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVhdGVkLmh0bWwgfCAg
IDQgKy0KIC4uLi9pbWFnZXMvYXN5bmMtaW1hZ2UtY29tcG9zaXRlZC1zaG93Lmh0bWwgICB8ICAy
MCArLQogLi4uZGVjb2RlLXJlbmRlci1hbmltYXRlZC1pbWFnZS1leHBlY3RlZC5odG1sIHwgIDE4
ICstCiAuLi4vaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1hZ2UuaHRtbCAgfCAgNTQg
Ky0KIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyB8ICAgMSAt
CiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMgfCAgIDIgKwog
NjggZmlsZXMgY2hhbmdlZCwgMTgxNyBpbnNlcnRpb25zKCspLCAyMTc5IGRlbGV0aW9ucygtKQog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlU291cmNlLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlU291cmNlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQW5pbWF0b3IuY3BwCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUFuaW1hdG9yLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lV29ya1F1ZXVlLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVXb3JrUXVldWUuaAogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
U291cmNlLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL05hdGl2ZUltYWdlU291cmNlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmNvZGVjcy9XZWJDb2RlY3NWaWRlb0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViY29kZWNzL1dlYkNvZGVjc1ZpZGVvRnJhbWUuY3BwCmluZGV4IGY4ZDk2YTJl
OTgzNS4uOTExYmExYmUzNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmNvZGVjcy9XZWJDb2RlY3NWaWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmNvZGVjcy9XZWJDb2RlY3NWaWRlb0ZyYW1lLmNwcApAQCAtMTcxLDcgKzE3MSw3IEBA
IEV4Y2VwdGlvbk9yPFJlZjxXZWJDb2RlY3NWaWRlb0ZyYW1lPj4gV2ViQ29kZWNzVmlkZW9GcmFt
ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvCiAgICAgICAgIGlmICghaW5pdC50aW1lc3RhbXApCiAg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRXhjZXB0aW9uQ29kZTo6VHlwZUVycm9yLCAg
InRpbWVzdGFtcCBpcyBub3QgcHJvdmlkZWQiX3MgfTsKIAotICAgICAgICBhdXRvIGltYWdlID0g
aW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5jdXJyZW50TmF0aXZlSW1hZ2Uo
KTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKS0+aW1h
Z2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGNlcHRpb25Db2RlOjpJbnZhbGlkU3Rh
dGVFcnJvciwgICJJbWFnZSBlbGVtZW50IGhhcyBubyB2aWRlbyBmcmFtZSJfcyB9OwogCkBAIC0x
ODEsNyArMTgxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdlYkNvZGVjc1ZpZGVvRnJhbWU+PiBXZWJD
b2RlY3NWaWRlb0ZyYW1lOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW8KICAgICAgICAgaWYgKCFpbml0
LnRpbWVzdGFtcCkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGNlcHRpb25Db2Rl
OjpUeXBlRXJyb3IsICAidGltZXN0YW1wIGlzIG5vdCBwcm92aWRlZCJfcyB9OwogCi0gICAgICAg
IGF1dG8gaW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCktPmltYWdlKCktPmN1cnJl
bnROYXRpdmVJbWFnZSgpOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAg
ICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEV4Y2VwdGlvbkNv
ZGU6OkludmFsaWRTdGF0ZUVycm9yLCAgIkltYWdlIGVsZW1lbnQgaGFzIG5vIHZpZGVvIGZyYW1l
Il9zIH07CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8V2ViQ29kZWNzVmlk
ZW9GcmFtZT4+IFdlYkNvZGVjc1ZpZGVvRnJhbWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpbwogICAg
ICAgICBpZiAoIWluaXQudGltZXN0YW1wKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEV4Y2VwdGlvbkNvZGU6OlR5cGVFcnJvciwgICJ0aW1lc3RhbXAgaXMgbm90IHByb3ZpZGVkIl9z
IH07CiAKLSAgICAgICAgYXV0byBpbWFnZSA9IGNzc0ltYWdlLT5pbWFnZSgpLT5pbWFnZSgpLT5j
dXJyZW50TmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGNzc0ltYWdlLT5pbWFn
ZSgpLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBpZiAo
IWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEV4Y2VwdGlvbkNvZGU6Oklu
dmFsaWRTdGF0ZUVycm9yLCAgIkNTUyBJbWFnZSBoYXMgbm8gdmlkZW8gZnJhbWUiX3MgfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCBmYWFmYmUwOTEwYWYuLmY1ZjJhNTUwZGEzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIyMzcsNyArMjIzNyw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlw
bGljYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9BbmltYXRpb25GcmFtZVJhdGUuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZVNv
dXJjZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0J5dGVBcnJheVBpeGVsQnVmZmVyLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvQ2FjaGVkU3ViaW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Db2Rl
Y1V0aWxpdGllcy5jcHAKQEAgLTIzMDgsOCArMjMwNyw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyUGlwZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWUuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQW5pbWF0b3IuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lV29ya1F1ZXVlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VQYWludGluZ09wdGlvbnMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0luYmFuZEdlbmVyaWNDdWUuY3BwCkBAIC0yMzI4
LDcgKzIzMjUsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9Nb2RlbC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL051bGxJ
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlU291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhJbXBsLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFNlZ21lbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTk0N2ZkODIzZjNlLi5kYWY3N2E3MjM4YzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTI4MDQsNyArMjgwNCw2IEBACiAJCTcyNzJEMzM3MjkyRjgxOEUwMEY3NEQ5OSAvKiBGaWx0
ZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzI3MkQzMzYyOTJGNzY3RDAwRjc0RDk5IC8qIEZpbHRlclN0eWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI3NjEwNTYyOTg4QjA5ODAwODk3
NjIxIC8qIEFwcGxlUGF5QnV0dG9uUGFydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJGODg5OEEyOTg4N0FCOTAwQTZFMDdBIC8qIEFwcGxlUGF5QnV0
dG9uUGFydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFD
M0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3Mjg1NEU2OTJC
Njk4N0I3MDBFMDE4MUEgLyogTmF0aXZlSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyODU0RTVEMkI2OTg3QjMwMEUwMTgxQSAvKiBO
YXRpdmVJbWFnZVNvdXJjZS5oICovOyB9OwogCQk3Mjg3QTg0MDI5ODc5Q0YyMDA0QTUwRTIgLyog
U2VhcmNoRmllbGRSZXN1bHRzUGFydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzI4N0E4M0EyOTg3OTY5NTAwNEE1MEUyIC8qIFNlYXJjaEZpZWxkUmVz
dWx0c1BhcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjhENDc5MTI3OUE0OEI3MDBCQTdDMEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMTNBOUYyNzRD
NUNDNzAwRTJBODhFIC8qIEZpbHRlckVmZmVjdEFwcGxpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk2M0I2RDI5NTEwQTM4MDA0RkY2RkIg
LyogVGV4dEFyZWFQYXJ0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Mjk2M0I2QzI5NTEwMjg3MDA0RkY2RkIgLyogVGV4dEFyZWFQYXJ0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMDc3LDE0ICsx
MzA3Niw2IEBACiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI4MTY4QjIyQUEwMjRCOTAwNTg2NENCIC8qIFNWR1Jlc291cmNlSW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyODE2OEIzMkFBMDI0QjkwMDU4NjRDQiAvKiBTVkdSZXNvdXJjZUltYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzI4NTRFNUMyQjY5ODdCMzAwRTAxODFBIC8qIEltYWdlRnJhbWVBbmltYXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUZyYW1lQW5p
bWF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Mjg1NEU1RDJCNjk4N0Iz
MDBFMDE4MUEgLyogTmF0aXZlSW1hZ2VTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF0aXZlSW1hZ2VTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNzI4NTRFNUUyQjY5ODdCMzAwRTAxODFBIC8qIEltYWdlRnJhbWVBbmltYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUZyYW1lQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI4NTRFNjAyQjY5ODdCNDAwRTAxODFBIC8qIEltYWdl
RnJhbWVXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VGcmFtZVdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcy
ODU0RTYxMkI2OTg3QjQwMEUwMTgxQSAvKiBOYXRpdmVJbWFnZVNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXRpdmVJbWFnZVNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTcyODU0RTYyMkI2OTg3QjUwMEUwMTgxQSAvKiBJbWFn
ZUZyYW1lV29ya1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
RnJhbWVXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzI4NTRFNjYy
QjY5ODdCNjAwRTAxODFBIC8qIEJpdG1hcEltYWdlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJpdG1hcEltYWdlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTcyODU0RTY3MkI2OTg3QjYwMEUwMTgxQSAvKiBCaXRtYXBJbWFnZVNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRtYXBJbWFnZVNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyODdBODNBMjk4Nzk2OTUwMDRB
NTBFMiAvKiBTZWFyY2hGaWVsZFJlc3VsdHNQYXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaEZp
ZWxkUmVzdWx0c1BhcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4N0E4M0Iy
OTg3OTdFOTAwNEE1MEUyIC8qIFNlYXJjaEZpZWxkUmVzdWx0c01hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFNlYXJjaEZpZWxkUmVzdWx0c01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI4N0E4M0MyOTg3OTdFOTAwNEE1MEUyIC8qIFNlYXJjaEZpZWxkUmVzdWx0c01h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hGaWVsZFJlc3VsdHNNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNTU0LDggKzMyNTQ1LDYgQEAKIAkJCQkyREQ4NzE0OTI2NUY0
MzY1MDA1Rjk5N0MgLyogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCUE4OTk0
MzI3MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8sCiAJCQkJQTg5OTQzMjYw
QjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggKi8sCi0JCQkJNzI4NTRFNjcyQjY5ODdC
NjAwRTAxODFBIC8qIEJpdG1hcEltYWdlU291cmNlLmNwcCAqLywKLQkJCQk3Mjg1NEU2NjJCNjk4
N0I2MDBFMDE4MUEgLyogQml0bWFwSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk3MkMxMURBQjI4NDky
QTkyMDBFODI2REQgLyogQnl0ZUFycmF5UGl4ZWxCdWZmZXIuY3BwICovLAogCQkJCTcyQzExREFD
Mjg0OTJBOTIwMEU4MjZERCAvKiBCeXRlQXJyYXlQaXhlbEJ1ZmZlci5oICovLAogCQkJCTcyQzE3
MjEwMjk4MzcxNzUwMDEzNkUwMiAvKiBDYWNoZWRTdWJpbWFnZS5jcHAgKi8sCkBAIC0zMjczNCwx
MCArMzI3MjMsNiBAQAogCQkJCTFENDc2NThEMjVDQ0E3NzgwMDdBRjMxMiAvKiBJbWFnZURlY29k
ZXJJZGVudGlmaWVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdl
RnJhbWUuY3BwICovLAogCQkJCTU1NzZBNTYzMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1l
LmggKi8sCi0JCQkJNzI4NTRFNUMyQjY5ODdCMzAwRTAxODFBIC8qIEltYWdlRnJhbWVBbmltYXRv
ci5jcHAgKi8sCi0JCQkJNzI4NTRFNUUyQjY5ODdCMzAwRTAxODFBIC8qIEltYWdlRnJhbWVBbmlt
YXRvci5oICovLAotCQkJCTcyODU0RTYwMkI2OTg3QjQwMEUwMTgxQSAvKiBJbWFnZUZyYW1lV29y
a1F1ZXVlLmNwcCAqLywKLQkJCQk3Mjg1NEU2MjJCNjk4N0I1MDBFMDE4MUEgLyogSW1hZ2VGcmFt
ZVdvcmtRdWV1ZS5oICovLAogCQkJCUJDN0Y0NEE3MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9i
c2VydmVyLmggKi8sCiAJCQkJQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50
YXRpb24uaCAqLywKIAkJCQk3QjBDMzg5RDJBQ0VEMkYwMDBGMUZEREMgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuY3BwICovLApAQCAtMzI3OTYsOCArMzI3ODEsNiBAQAogCQkJCTMxNEJFM0E1MUIz
MTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCAqLywKIAkJCQk3MjUy
Mzk2QjI1NENBREMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovLAogCQkJCTU1QTMzNkY2
MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAotCQkJCTcyODU0RTYxMkI2OTg3
QjQwMEUwMTgxQSAvKiBOYXRpdmVJbWFnZVNvdXJjZS5jcHAgKi8sCi0JCQkJNzI4NTRFNUQyQjY5
ODdCMzAwRTAxODFBIC8qIE5hdGl2ZUltYWdlU291cmNlLmggKi8sCiAJCQkJMkRBMzk3RTMyNjVD
NzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3QjBFNkRDOTJB
QjQ2M0U0MDA1MTg5RTggLyogTnVsbEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCiAJCQkJN0Iw
RTZEQzgyQUI0NjNFNDAwNTE4OUU4IC8qIE51bGxJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKQEAg
LTQxMDYzLDcgKzQxMDQ2LDYgQEAKIAkJCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyogTmFt
ZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMjI3QTkzMTI4QkQ3NDRDMDBCQzI2OTcg
LyogTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMzI1M0FFMzY2MDAwMkVG
OTAgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTcyODU0RTY5MkI2OTg3Qjcw
MEUwMTgxQSAvKiBOYXRpdmVJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCMkQx
NzUxQjhCQ0Q2QTAwQTAyRTQ3IC8qIE5hdGl2ZU5vZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMEI5QjZDMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQ0NGMDI3MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0aW9u
QWN0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5k
ZXggNmJjNWU4OGMwZGM0Li5jNDdmM2JmOTRiYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwCkBAIC03MDMsNiArNzAzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWREcmF3KGNv
bnN0IEltYWdlJikgb3ZlcnJpZGUgeyB9CiAKKyAgICBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0
YShjb25zdCBJbWFnZSYpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIGltYWdl
RnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UmLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25zdCBJ
bnRSZWN0KiA9IG51bGxwdHIsIERlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkludmFs
aWQpIG92ZXJyaWRlIHsgfQogICAgIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSYsIGNv
bnN0IEludFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBzY2hlZHVsZVJl
bmRlcmluZ1VwZGF0ZShjb25zdCBJbWFnZSYpIG92ZXJyaWRlIHsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9JbWFnZUxvYWRlci5jcHAKaW5kZXggNmNjOTViMGYyY2E4Li5jMjZhNDBlNzk3ZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcApAQCAtNTQ4LDEzICs1NDgsOCBAQCB2b2lk
IEltYWdlTG9hZGVyOjpkZWNvZGUoKQogICAgICAgICByZXNvbHZlRGVjb2RlUHJvbWlzZXMoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGJpdG1hcEltYWdlLT5kZWNvZGUoW3Byb21p
c2VzID0gV1RGTW92ZShtX2RlY29kaW5nUHJvbWlzZXMpXShEZWNvZGluZ1N0YXR1cyBkZWNvZGlu
Z1N0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVChkZWNvZGluZ1N0YXR1cyAhPSBEZWNv
ZGluZ1N0YXR1czo6RGVjb2RpbmcpOwotICAgICAgICBpZiAoZGVjb2RpbmdTdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OkludmFsaWQpCi0gICAgICAgICAgICByZWplY3RQcm9taXNlcyhwcm9taXNl
cywgIkRlY29kaW5nIGVycm9yLiJfcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc29s
dmVQcm9taXNlcyhwcm9taXNlcyk7CisgICAgYml0bWFwSW1hZ2UtPmRlY29kZShbcHJvbWlzZXMg
PSBXVEZNb3ZlKG1fZGVjb2RpbmdQcm9taXNlcyldKCkgbXV0YWJsZSB7CisgICAgICAgIHJlc29s
dmVQcm9taXNlcyhwcm9taXNlcyk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDRkZWFhNjkxNzlhMC4uNWIwOGM4Nzk3MzQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKQEAgLTE5
MSwxMiArMTkxLDEwIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OnJlbW92ZUFsbENsaWVudHNXYWl0aW5n
Rm9yQXN5bmNEZWNvZGluZygpCiB7CiAgICAgaWYgKG1fY2xpZW50c1dhaXRpbmdGb3JBc3luY0Rl
Y29kaW5nLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkgfHwgIWhhc0ltYWdlKCkpCiAg
ICAgICAgIHJldHVybjsKLQogICAgIFJlZlB0ciBiaXRtYXBJbWFnZSA9IGR5bmFtaWNEb3duY2Fz
dDxCaXRtYXBJbWFnZT4oaW1hZ2UoKSk7CiAgICAgaWYgKCFiaXRtYXBJbWFnZSkKICAgICAgICAg
cmV0dXJuOwotICAgIGJpdG1hcEltYWdlLT5zdG9wRGVjb2RpbmdXb3JrUXVldWUoKTsKLQorICAg
IGJpdG1hcEltYWdlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiAgICAgZm9yIChhdXRvJiBj
bGllbnQgOiBtX2NsaWVudHNXYWl0aW5nRm9yQXN5bmNEZWNvZGluZykKICAgICAgICAgY2xpZW50
LmltYWdlQ2hhbmdlZCh0aGlzKTsKICAgICBtX2NsaWVudHNXYWl0aW5nRm9yQXN5bmNEZWNvZGlu
Zy5jbGVhcigpOwpAQCAtNDQ3LDYgKzQ0NSwxNyBAQCB2b2lkIENhY2hlZEltYWdlOjpDYWNoZWRJ
bWFnZU9ic2VydmVyOjpkaWREcmF3KGNvbnN0IEltYWdlJiBpbWFnZSkKICAgICAgICAgY2FjaGVk
SW1hZ2UtPmRpZERyYXcoaW1hZ2UpOwogfQogCitib29sIENhY2hlZEltYWdlOjpDYWNoZWRJbWFn
ZU9ic2VydmVyOjpjYW5EZXN0cm95RGVjb2RlZERhdGEoY29uc3QgSW1hZ2UmIGltYWdlKQorewor
ICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VIYW5kbGUgY2FjaGVkSW1hZ2UgOiBtX2NhY2hlZEltYWdl
cykgeworICAgICAgICBpZiAoJmltYWdlICE9IGNhY2hlZEltYWdlLT5pbWFnZSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmICghY2FjaGVkSW1hZ2UtPmNhbkRlc3Ryb3lEZWNv
ZGVkRGF0YShpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCiB2b2lkIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZU9ic2VydmVyOjpp
bWFnZUZyYW1lQXZhaWxhYmxlKGNvbnN0IEltYWdlJiBpbWFnZSwgSW1hZ2VBbmltYXRpbmdTdGF0
ZSBhbmltYXRpbmdTdGF0ZSwgY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCwgRGVjb2RpbmdTdGF0
dXMgZGVjb2RpbmdTdGF0dXMpCiB7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUhhbmRsZSBjYWNo
ZWRJbWFnZSA6IG1fY2FjaGVkSW1hZ2VzKQpAQCAtNjczLDYgKzY4MiwyMCBAQCB2b2lkIENhY2hl
ZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlJiBpbWFnZSkKICAgICBDYWNoZWRSZXNvdXJjZTo6
ZGlkQWNjZXNzRGVjb2RlZERhdGEodGltZVN0YW1wKTsKIH0KIAorYm9vbCBDYWNoZWRJbWFnZTo6
Y2FuRGVzdHJveURlY29kZWREYXRhKGNvbnN0IEltYWdlJiBpbWFnZSkKK3sKKyAgICBpZiAoJmlt
YWdlICE9IG1faW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiB3YWxrZXIoKnRoaXMpOworICAgIHdo
aWxlIChDYWNoZWRJbWFnZUNsaWVudCogY2xpZW50ID0gd2Fsa2VyLm5leHQoKSkgeworICAgICAg
ICBpZiAoIWNsaWVudC0+Y2FuRGVzdHJveURlY29kZWREYXRhKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgQ2FjaGVkSW1h
Z2U6OmltYWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UmIGltYWdlLCBJbWFnZUFuaW1hdGlu
Z1N0YXRlIGFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0LCBEZWNvZGlu
Z1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKIHsKICAgICBpZiAoJmltYWdlICE9IG1faW1hZ2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCmluZGV4IDYzZDE0ZDhlMDk4
OC4uODBjNjI0MDlmYWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaApAQCAtMTYwLDYgKzE2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGVjb2RlZFNp
emVDaGFuZ2VkKGNvbnN0IEltYWdlJiwgbG9uZyBsb25nIGRlbHRhKSBmaW5hbDsKICAgICAgICAg
dm9pZCBkaWREcmF3KGNvbnN0IEltYWdlJikgZmluYWw7CiAKKyAgICAgICAgYm9vbCBjYW5EZXN0
cm95RGVjb2RlZERhdGEoY29uc3QgSW1hZ2UmKSBmaW5hbDsKICAgICAgICAgdm9pZCBpbWFnZUZy
YW1lQXZhaWxhYmxlKGNvbnN0IEltYWdlJiwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwgY29uc3QgSW50
UmVjdCogY2hhbmdlUmVjdCA9IG51bGxwdHIsIERlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0
dXM6OkludmFsaWQpIGZpbmFsOwogICAgICAgICB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1h
Z2UmLCBjb25zdCBJbnRSZWN0KikgZmluYWw7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVSZW5kZXJp
bmdVcGRhdGUoY29uc3QgSW1hZ2UmKSBmaW5hbDsKQEAgLTE3Myw2ICsxNzQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZW5jb2RlZERhdGFTdGF0dXNDaGFuZ2VkKGNvbnN0IEltYWdlJiwgRW5jb2Rl
ZERhdGFTdGF0dXMpOwogICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlJiwg
bG9uZyBsb25nIGRlbHRhKTsKICAgICB2b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UmKTsKKyAgICBi
b29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YShjb25zdCBJbWFnZSYpOwogICAgIHZvaWQgaW1hZ2VG
cmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSYsIEltYWdlQW5pbWF0aW5nU3RhdGUsIGNvbnN0IElu
dFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyLCBEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3Rh
dHVzOjpJbnZhbGlkKTsKICAgICB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UmLCBjb25z
dCBJbnRSZWN0Kik7CiAgICAgdm9pZCBzY2hlZHVsZVJlbmRlcmluZ1VwZGF0ZShjb25zdCBJbWFn
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQu
aAppbmRleCBmZTQwYzhiODU1NWYuLjMyYzRhZjc1NGUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDggQEAgcHVi
bGljOgogICAgIC8vIElmIG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCByZWN0
IG9mIHRoZSBpbWFnZS4KICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdl
KiwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjYW5E
ZXN0cm95RGVjb2RlZERhdGEoKSB7IHJldHVybiB0cnVlOyB9CisKICAgICAvLyBDYWxsZWQgd2hl
biBhIG5ldyBkZWNvZGVkIGZyYW1lIGZvciBhIGxhcmdlIGltYWdlIGlzIGF2YWlsYWJsZSBvciB3
aGVuIGFuIGFuaW1hdGVkIGltYWdlIGlzIHJlYWR5IHRvIGFkdmFuY2UgdG8gdGhlIG5leHQgZnJh
bWUuCiAgICAgdmlydHVhbCBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIGltYWdlRnJhbWVBdmFpbGFi
bGUoQ2FjaGVkSW1hZ2UmIGltYWdlLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0
KiBjaGFuZ2VSZWN0KSB7IGltYWdlQ2hhbmdlZCgmaW1hZ2UsIGNoYW5nZVJlY3QpOyByZXR1cm4g
VmlzaWJsZUluVmlld3BvcnRTdGF0ZTo6Tm87IH0KICAgICB2aXJ0dWFsIFZpc2libGVJblZpZXdw
b3J0U3RhdGUgaW1hZ2VWaXNpYmxlSW5WaWV3cG9ydChjb25zdCBEb2N1bWVudCYpIGNvbnN0IHsg
cmV0dXJuIFZpc2libGVJblZpZXdwb3J0U3RhdGU6Ok5vOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCmluZGV4IDcxOWU3ZjdiNzE0MC4uYWE1
MzQwNzg5MDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFn
SW1hZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1h
Z2VDb2NvYS5tbQpAQCAtOTgsNyArOTgsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJh
Z0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbgogICAg
ICAgICBCaXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKmlt
YWdlKTsKIAogICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6T3Jp
ZW50YXRpb246OkZyb21JbWFnZSkKLSAgICAgICAgICAgIG9yaWVudGF0aW9uID0gYml0bWFwSW1h
Z2UuY3VycmVudEZyYW1lT3JpZW50YXRpb24oKTsKKyAgICAgICAgICAgIG9yaWVudGF0aW9uID0g
Yml0bWFwSW1hZ2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsKIAogICAgICAgICBpZiAo
b3JpZW50YXRpb24gIT0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246Ok5vbmUpIHsKICAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGNvcnJlY3RseS1yb3RhdGVkIGNvcHkgb2YgdGhlIGlt
YWdlIHRvIHVzZSBhcyB0aGUgZHJhZyBpbWFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBlYjhhYjk1ZTgxMzkuLjdmYzg2OTZh
YzllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDE0MyArMjcsNjE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlU291cmNlLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNvdXJjZS5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
VGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgVVNFKENH
KQorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVhdGUo
SW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIsIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKK0JpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICA6IEltYWdlKG9i
c2VydmVyKQorICAgICwgbV9zb3VyY2UoSW1hZ2VTb3VyY2U6OmNyZWF0ZSh0aGlzKSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCaXRtYXBJbWFnZShvYnNlcnZlciwgYWxwaGFPcHRpb24s
IGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiB9CiAKLVJlZjxCaXRtYXBJbWFnZT4gQml0
bWFwSW1hZ2U6OmNyZWF0ZShSZWY8TmF0aXZlSW1hZ2U+JiYgbmF0aXZlSW1hZ2UpCitCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoUmVmPE5hdGl2ZUltYWdlPiYmIGltYWdlKQorICAgIDogbV9zb3Vy
Y2UoSW1hZ2VTb3VyY2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSkpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQml0bWFwSW1hZ2UoV1RGTW92ZShuYXRpdmVJbWFnZSkpKTsKIH0KIAotUmVm
UHRyPEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxOYXRpdmVJbWFnZT4m
JiBuYXRpdmVJbWFnZSkKK0JpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogewotICAgIGlmICgh
bmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJpdG1hcEltYWdlKG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICBj
bGVhclRpbWVyKCk7CisgICAgbV9zb3VyY2UtPmNsZWFySW1hZ2UoKTsKKyAgICBtX3NvdXJjZS0+
c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwogfQogCi1SZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1h
cEltYWdlOjpjcmVhdGUoUGxhdGZvcm1JbWFnZVB0ciYmIHBsYXRmb3JtSW1hZ2UpCit2b2lkIEJp
dG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQogewotICAgIHJl
dHVybiBjcmVhdGUoTmF0aXZlSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHBsYXRmb3JtSW1hZ2UpKSk7
CisgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyIsIF9fRlVO
Q1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICBpZiAoIWRlc3Ryb3lBbGwpIHsKKyAgICAgICAgLy8gRGVzdHJveSBhbGwgdGhlIGZyYW1lcyBi
ZXR3ZWVuIGZyYW1lMCBhbmQgbV9jdXJyZW50RnJhbWUuCisgICAgICAgIG1fc291cmNlLT5kZXN0
cm95RGVjb2RlZERhdGEoMSwgbV9jdXJyZW50RnJhbWUpOworICAgIH0gZWxzZSBpZiAoIWNhbkRl
c3Ryb3lEZWNvZGVkRGF0YSgpKSB7CisgICAgICAgIC8vIERlc3Ryb3kgYWxsIHRoZSBmcmFtZXMg
ZXhjZXB0IGZyYW1lMCBhbmQgbV9jdXJyZW50RnJhbWUuCisgICAgICAgIG1fc291cmNlLT5kZXN0
cm95RGVjb2RlZERhdGEoMSwgbV9jdXJyZW50RnJhbWUpOworICAgICAgICBtX3NvdXJjZS0+ZGVz
dHJveURlY29kZWREYXRhKG1fY3VycmVudEZyYW1lICsgMSwgZnJhbWVDb3VudCgpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveURlY29kZWREYXRhKDAsIGZyYW1lQ291
bnQoKSk7CisgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0
YXR1czo6SW52YWxpZDsKKyAgICB9CisKKyAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gdGhyb3cg
YXdheSB0aGUgZGVjb2RlciB1bmxlc3Mgd2UncmUgZXhwbGljaXRseSBhc2tlZAorICAgIC8vIHRv
IGRlc3Ryb3kgYWxsIG9mIHRoZSBmcmFtZXMuCisgICAgaWYgKCFkZXN0cm95QWxsIHx8IG1fc291
cmNlLT5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAgICAgICAgbV9zb3VyY2UtPmNsZWFyRnJh
bWVCdWZmZXJDYWNoZShtX2N1cnJlbnRGcmFtZSk7CisgICAgZWxzZQorICAgICAgICBtX3NvdXJj
ZS0+cmVzZXREYXRhKGRhdGEoKSk7CisKKyAgICBpbnZhbGlkYXRlQWRhcHRlcigpOwogfQogCi1C
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIsIEFscGhhT3B0
aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKLSAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9zb3VyY2UoQml0
bWFwSW1hZ2VTb3VyY2U6OmNyZWF0ZSgqdGhpcywgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKSkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVj
ZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCkKIHsKKyAgICAvLyBJZiB3ZSBoYXZlIGRlY29kZWQgZnJh
bWVzIGJ1dCB0aGVyZSBpcyBubyBlbmNvZGVkIGRhdGEsIHdlIHNob3VsZG4ndCBkZXN0cm95Cisg
ICAgLy8gdGhlIGRlY29kZWQgaW1hZ2Ugc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byByZWNvbnN0
cnVjdCBpdCBsYXRlci4KKyAgICBpZiAoIWRhdGEoKSAmJiBmcmFtZUNvdW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX3NvdXJjZS0+ZGVjb2RlZFNpemUoKSA8IExhcmdlQW5pbWF0
aW9uQ3V0b2ZmKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0cm95RGVjb2RlZERhdGEoZGVz
dHJveUFsbCk7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShSZWY8TmF0aXZlSW1hZ2U+
JiYgaW1hZ2UpCi0gICAgOiBtX3NvdXJjZShOYXRpdmVJbWFnZVNvdXJjZTo6Y3JlYXRlKFdURk1v
dmUoaW1hZ2UpKSkKK0VuY29kZWREYXRhU3RhdHVzIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChi
b29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAobV9zb3VyY2UtPmRlY29kZWRTaXplKCkg
JiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpKQorICAgICAgICBtX3NvdXJj
ZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOworCisgICAgbV9jdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOworICAgIGF1dG8gc3RhdHVz
ID0gbV9zb3VyY2UtPmRhdGFDaGFuZ2VkKGRhdGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAg
IGlmIChhbGxEYXRhUmVjZWl2ZWQgJiYgIXNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxKQorICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IHByaW1hcnlGcmFtZUluZGV4KCk7CisKKyAg
ICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQog
eworICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgcmVjZWl2ZWQsIG1fY3VycmVudEZyYW1lRGVjb2Rp
bmdTdGF0dXMgaXMgc2V0IHRvIERlY29kaW5nU3RhdHVzOjpJbnZhbGlkCisgICAgLy8gdG8gZm9y
Y2UgZGVjb2RpbmcgdGhlIGZyYW1lIHdoZW4gaXQncyBkcmF3bi4gbV9jdXJyZW50RnJhbWVEZWNv
ZGluZ1N0YXR1cyBzaG91bGQgbm90IGJlCisgICAgLy8gY2hhbmdlZCBpbiB0aGlzIGNhc2UgdGls
bCBkcmF3KCkgaXMgY2FsbGVkIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byBEZWNvZGluZ1N0YXR1czo6
RGVjb2RpbmcuCisgICAgaWYgKG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgIT0gRGVjb2Rp
bmdTdGF0dXM6OkRlY29kaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9jdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1cyA9IGRlY29kaW5nU3RhdHVzOwogfQogCi1FbmNvZGVkRGF0YVN0YXR1cyBC
aXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCitSZWZQdHI8TmF0
aXZlSW1hZ2U+IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNv
ZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKIHsKLSAgICByZXR1cm4gbV9zb3VyY2UtPmRh
dGFDaGFuZ2VkKGRhdGEoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBpZiAoIWZyYW1lSGFzRnVs
bFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpKSB7CisgICAg
ICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBs
aW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNh
bXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOworICAgICAgICBpbnZhbGlkYXRlQWRhcHRlcigp
OworICAgIH0KKyAgICByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5l
ZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsKIH0KIAotdm9p
ZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKK1JlZlB0
cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYpCiB7Ci0gICAgbV9zb3VyY2UtPmRlc3Ryb3lEZWNvZGVkRGF0YShkZXN0cm95
QWxsKTsKLSAgICBpbnZhbGlkYXRlQWRhcHRlcigpOworICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhl
IGNhc2Ugd2hlbiB0aGUgcmVxdWVzdGVkIGNvbG9yU3BhY2UgaXMgbm90IGVxdWFsIHRvIEJpdG1h
cEltYWdlOjpjb2xvclNwYWNlKCkuCisgICAgcmV0dXJuIG5hdGl2ZUltYWdlQXRJbmRleENhY2hl
SWZOZWVkZWQoMCwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiB9CiAKLUltYWdlRHJhd1Jl
c3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZVJlY3QsIElt
YWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgaWYgKGRlc3RpbmF0aW9u
UmVjdC5pc0VtcHR5KCkgfHwgc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CisgICAgcmV0dXJuIG5hdGl2ZUltYWdlQXRJbmRl
eENhY2hlSWZOZWVkZWQobV9jdXJyZW50RnJhbWUsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQp
OworfQogCi0gICAgYXV0byBzaXplID0gbV9zb3VyY2UtPnNpemUoSW1hZ2VPcmllbnRhdGlvbjo6
T3JpZW50YXRpb246Ok5vbmUpOwotICAgIGF1dG8gc291cmNlU2l6ZSA9IG1fc291cmNlLT5zb3Vy
Y2VTaXplKEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lKTsKK1JlZlB0cjxOYXRp
dmVJbWFnZT4gQml0bWFwSW1hZ2U6OnByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoYm9vbCByZXNwZWN0T3JpZW50YXRpb24pCit7CisgICAgYXV0byBpbWFnZSA9IG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IGltYWdlOwogCi0gICAgLy8gYWRqdXN0ZWRTb3VyY2VSZWN0IGlzIGluIHRoZSBjb29yZGluYXRl
cyBvZiBkZW5zaXR5Q29ycmVjdGVkU2l6ZSwgc28gbWFwIGl0IHRvIHRoZSBzb3VyY2VTaXplLgot
ICAgIGF1dG8gYWRqdXN0ZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBpZiAoc291cmNl
U2l6ZSAhPSBzaXplKQotICAgICAgICBhZGp1c3RlZFNvdXJjZVJlY3Quc2NhbGUoc291cmNlU2l6
ZSAvIHNpemUpOworICAgIGF1dG8gb3JpZW50YXRpb24gPSByZXNwZWN0T3JpZW50YXRpb24gPyBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIDogSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVu
dGF0aW9uOjpPcmllbnRhdGlvbjo6Tm9uZSk7CisgICAgYXV0byBjb3JyZWN0ZWRTaXplID0gbV9z
b3VyY2UtPmRlbnNpdHlDb3JyZWN0ZWRTaXplKG9yaWVudGF0aW9uKTsKKyAgICBpZiAob3JpZW50
YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246Ok5vbmUgJiYgIWNvcnJlY3Rl
ZFNpemUpCisgICAgICAgIHJldHVybiBpbWFnZTsKIAotICAgIGF1dG8gc2NhbGVGYWN0b3JGb3JE
cmF3aW5nID0gY29udGV4dC5zY2FsZUZhY3RvckZvckRyYXdpbmcoZGVzdGluYXRpb25SZWN0LCBh
ZGp1c3RlZFNvdXJjZVJlY3QpOwotICAgIGF1dG8gc2l6ZUZvckRyYXdpbmcgPSBleHBhbmRlZElu
dFNpemUoc291cmNlU2l6ZSAqIHNjYWxlRmFjdG9yRm9yRHJhd2luZyk7Ci0gICAgYXV0byBzdWJz
YW1wbGluZ0xldmVsID0gIG1fc291cmNlLT5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGVGYWN0b3Io
Y29udGV4dCwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nLCBvcHRpb25zLmFsbG93SW1hZ2VTdWJzYW1w
bGluZygpKTsKKyAgICBhdXRvIGNvcnJlY3RlZFNpemVGbG9hdCA9IGNvcnJlY3RlZFNpemUgPyBG
bG9hdFNpemUoY29ycmVjdGVkU2l6ZS52YWx1ZSgpKSA6IHNpemUoKTsKKyAgICBhdXRvIGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY29ycmVjdGVkU2l6ZUZsb2F0LCBSZW5kZXJpbmdQdXJw
b3NlOjpVbnNwZWNpZmllZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBpbWFnZTsK
IAotICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBtX3NvdXJjZS0+Y3VycmVudE5hdGl2ZUltYWdlRm9y
RHJhd2luZyhzdWJzYW1wbGluZ0xldmVsLCB7IG9wdGlvbnMuZGVjb2RpbmdNb2RlKCksIHNpemVG
b3JEcmF3aW5nIH0pOworICAgIGF1dG8gc291cmNlU2l6ZSA9IHRoaXMtPnNvdXJjZVNpemUoKTsK
IAotICAgIGlmICghbmF0aXZlSW1hZ2UpIHsKLSAgICAgICAgaWYgKG5hdGl2ZUltYWdlLmVycm9y
KCkgIT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKQotICAgICAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2lu
dCgpLCBjb3JyZWN0ZWRTaXplRmxvYXQpOworICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0KEZsb2F0
UG9pbnQoKSwgc291cmNlU2l6ZSk7CiAKLSAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0RlYnVnQmFj
a2dyb3VuZCgpID09IFNob3dEZWJ1Z0JhY2tncm91bmQ6OlllcykKLSAgICAgICAgICAgIGZpbGxX
aXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0aW5hdGlvblJlY3QsIENvbG9yOjp5ZWxsb3cuY29s
b3JXaXRoQWxwaGFCeXRlKDEyOCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7CisgICAg
YnVmZmVyLT5jb250ZXh0KCkuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgZGVzdFJlY3QsIHNvdXJj
ZVJlY3QsIHsgb3JpZW50YXRpb24gfSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKFdURk1vdmUoYnVmZmVyKSk7Cit9CiAKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5nOwotICAgIH0KKyNpZiBBU1NFUlRfRU5BQkxF
RAorYm9vbCBCaXRtYXBJbWFnZTo6bm90U29saWRDb2xvcigpCit7CisgICAgcmV0dXJuIHNpemUo
KS53aWR0aCgpICE9IDEgfHwgc2l6ZSgpLmhlaWdodCgpICE9IDEgfHwgZnJhbWVDb3VudCgpID4g
MTsKK30KKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCi0gICAgaWYgKGF1dG8gY29sb3IgPSAo
Km5hdGl2ZUltYWdlKS0+c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkpCi0gICAgICAgIGZpbGxXaXRo
U29saWRDb2xvcihjb250ZXh0LCBkZXN0aW5hdGlvblJlY3QsICpjb2xvciwgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gYWRqdXN0ZWRTb3VyY2VS
ZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyBt
YXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgICAgIGF1dG8gaW1hZ2VTaXplID0g
KCpuYXRpdmVJbWFnZSktPnNpemUoKTsKLSAgICAgICAgaWYgKGltYWdlU2l6ZSAhPSBzb3VyY2VT
aXplKQotICAgICAgICAgICAgYWRqdXN0ZWRTb3VyY2VSZWN0LnNjYWxlKGltYWdlU2l6ZSAvIHNv
dXJjZVNpemUpOworc3RhdGljIGlubGluZSB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBo
YXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJ
bnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBpbWFnZS5zaXplKCk7CisgICAgaWYgKG9wdGlv
bnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpKQorICAgICAgICBzdWJzYW1wbGVk
SW1hZ2VTaXplID0gc3Vic2FtcGxlZEltYWdlU2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAg
Ly8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFn
ZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFn
ZVNpemUgIT0gc3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNS
ZWN0LCBGbG9hdFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZElt
YWdlU2l6ZSkpOworCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitJbWFnZURyYXdSZXN1bHQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHJlcXVlc3RlZFNyY1JlY3QsIEltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCit7CisgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCByZXF1ZXN0
ZWRTcmNSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlk
Tm90aGluZzsKKworICAgIGF1dG8gc3JjUmVjdCA9IHJlcXVlc3RlZFNyY1JlY3Q7CisgICAgYXV0
byBwcmVmZXJyZWRTaXplID0gc2l6ZSgpOworICAgIGF1dG8gc3JjU2l6ZSA9IHNvdXJjZVNpemUo
KTsKKworICAgIGlmIChwcmVmZXJyZWRTaXplICE9IHNyY1NpemUpCisgICAgICAgIHNyY1JlY3Qu
c2NhbGUoc3JjU2l6ZS53aWR0aCgpIC8gcHJlZmVycmVkU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhl
aWdodCgpIC8gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBhdXRvIHNjYWxlRmFjdG9y
Rm9yRHJhd2luZyA9IGNvbnRleHQuc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGRlc3RSZWN0LCBzcmNS
ZWN0KTsKKyAgICBhdXRvIHNpemVGb3JEcmF3aW5nID0gZXhwYW5kZWRJbnRTaXplKHNyY1NpemUg
KiBzY2FsZUZhY3RvckZvckRyYXdpbmcpOworICAgIEltYWdlRHJhd1Jlc3VsdCByZXN1bHQgPSBJ
bWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7CisKKyAgICBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVs
ID0gc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKGNvbnRleHQsIHNjYWxlRmFjdG9yRm9y
RHJhd2luZywgb3B0aW9ucy5hbGxvd0ltYWdlU3Vic2FtcGxpbmcoKSk7CisgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbc3Vic2FtcGxpbmdMZXZlbCA9ICVk
IHNjYWxlRmFjdG9yRm9yRHJhd2luZyA9ICglLjRmLCAlLjRmKV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4o
bV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCksIHNjYWxlRmFjdG9yRm9yRHJhd2luZy53aWR0aCgp
LCBzY2FsZUZhY3RvckZvckRyYXdpbmcuaGVpZ2h0KCkpOworCisgICAgUmVmUHRyPE5hdGl2ZUlt
YWdlPiBpbWFnZTsKKyAgICBpZiAoIWNhbkFuaW1hdGUoKSAmJiBvcHRpb25zLmRlY29kaW5nTW9k
ZSgpID09IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKSB7CisgICAgICAgIEFTU0VSVCghbV9j
dXJyZW50RnJhbWUpOworCisgICAgICAgIGJvb2wgZnJhbWVJc0NvbXBhdGlibGUgPSBmcmFtZUhh
c0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobV9jdXJyZW50
RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIERlY29kaW5nT3B0aW9ucyhEZWNvZGlu
Z01vZGU6OkFzeW5jaHJvbm91cywgc2l6ZUZvckRyYXdpbmcpKTsKKyAgICAgICAgYm9vbCBmcmFt
ZUlzQmVpbmdEZWNvZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhP
cHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdPcHRpb25zKERlY29kaW5nTW9k
ZTo6QXN5bmNocm9ub3VzLCBzaXplRm9yRHJhd2luZykpOworCisgICAgICAgIC8vIElmIHRoZSBj
dXJyZW50IGZyYW1lIGlzIGluY29tcGxldGUsIGEgbmV3IHJlcXVlc3QgZm9yIGRlY29kaW5nIHRo
aXMgZnJhbWUgaGFzIHRvIGJlIG1hZGUgZXZlbiBpZgorICAgICAgICAvLyBpdCBpcyBjdXJyZW50
bHkgYmVpbmcgZGVjb2RlZC4gTmV3IGRhdGEgbWF5IGhhdmUgYmVlbiByZWNlaXZlZCBzaW5jZSB0
aGUgcHJldmlvdXMgcmVxdWVzdCB3YXMgbWFkZS4KKyAgICAgICAgaWYgKCghZnJhbWVJc0NvbXBh
dGlibGUgJiYgIWZyYW1lSXNCZWluZ0RlY29kZWQpIHx8IG1fY3VycmVudEZyYW1lRGVjb2RpbmdT
dGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpIHsKKyAgICAgICAgICAgIExPRyhJbWFn
ZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3JlcXVlc3RpbmcgbGFyZ2UgYXN5
bmMgZGVjb2RpbmddIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0Rl
Y29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwg
c2l6ZUZvckRyYXdpbmcpOworICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1
cyA9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZykK
KyAgICAgICAgICAgIHJlc3VsdCA9IEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5n
OworCisgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0
aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVs
LCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMsIHNpemVGb3JEcmF3
aW5nKSkpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dEZWJ1Z0JhY2tncm91bmQoKSA9
PSBTaG93RGVidWdCYWNrZ3JvdW5kOjpZZXMpCisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xp
ZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhQnl0
ZSgxMjgpLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGltYWdlID0gbmF0aXZlSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKKyAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAt
ICVwIC0gdXJsOiAlcyBbYSBkZWNvZGVkIGZyYW1lIHdpbGwgYmUgdXNlZCBmb3IgYXN5bmNocm9u
b3VzIGRyYXdpbmddIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdGFydEFuaW1hdGlvblN0YXR1
cyBzdGF0dXMgPSBpbnRlcm5hbFN0YXJ0QW5pbWF0aW9uKG9wdGlvbnMpOworICAgICAgICBBU1NF
UlRfSU1QTElFUyhzdGF0dXMgPT0gU3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZl
LCAoIW1fY3VycmVudEZyYW1lICYmICFtX3JlcGV0aXRpb25zQ29tcGxldGUpIHx8IGZyYW1lSGFz
RnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNh
bXBsaW5nTGV2ZWwpKTsKKworICAgICAgICBpZiAoc3RhdHVzID09IFN0YXJ0QW5pbWF0aW9uU3Rh
dHVzOjpEZWNvZGluZ0FjdGl2ZSAmJiBvcHRpb25zLnNob3dEZWJ1Z0JhY2tncm91bmQoKSA9PSBT
aG93RGVidWdCYWNrZ3JvdW5kOjpZZXMpIHsKKyAgICAgICAgICAgIGZpbGxXaXRoU29saWRDb2xv
cihjb250ZXh0LCBkZXN0UmVjdCwgQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYUJ5dGUoMTI4
KSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgZGVjb2RpbmdNb2RlIGNoYW5nZXMg
ZnJvbSBhc3luY2hyb25vdXMgdG8gc3luY2hyb25vdXMgYW5kIG5ldyBkYXRhIGlzIHJlY2VpdmVk
LAorICAgICAgICAvLyB0aGUgY3VycmVudCBpbmNvbXBsZXRlIGRlY29kZWQgZnJhbWUgaGFzIHRv
IGJlIGRlc3Ryb3llZC4KKyAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMg
PT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpCisgICAgICAgICAgICBtX3NvdXJjZS0+ZGVzdHJv
eUluY29tcGxldGVEZWNvZGVkRGF0YSgpOworCisgICAgICAgIGJvb2wgZnJhbWVJc0NvbXBhdGli
bGUgPSBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5k
ZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIERlY29kaW5nT3B0
aW9ucyhEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cywgc2l6ZUZvckRyYXdpbmcpKTsKKyAgICAg
ICAgYm9vbCBmcmFtZUlzQmVpbmdEZWNvZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29t
cGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdPcHRpb25z
KERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzLCBzaXplRm9yRHJhd2luZykpOworCisgICAgICAg
IGlmIChmcmFtZUlzQ29tcGF0aWJsZSkgeworICAgICAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFn
ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbYSBkZWNvZGVkIGZyYW1lIHdpbGwgcmV1c2VkIGZv
ciBzeW5jaHJvbm91cyBkcmF3aW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVJc0JlaW5n
RGVjb2RlZCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGluc3RlYWQgb2Ygc2hvd2luZyB0aGUg
eWVsbG93IHJlY3RhbmdsZSBhbmQgcmV0dXJuaW5nIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhpcyBm
cmFtZSB0byBmaW5pc2ggZGVjb2RpbmcuCisgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG93RGVi
dWdCYWNrZ3JvdW5kKCkgPT0gU2hvd0RlYnVnQmFja2dyb3VuZDo6WWVzKSB7CisgICAgICAgICAg
ICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93
LmNvbG9yV2l0aEFscGhhQnl0ZSgxMjgpLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwor
ICAgICAgICAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDog
JXMgW3dhaXRpbmcgZm9yIGFzeW5jIGRlY29kaW5nIHRvIGZpbmlzaF0iLCBfX0ZVTkNUSU9OX18s
IHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVxdWVzdERlY29kaW5n
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2UgPSBuYXRpdmVJbWFnZUF0SW5k
ZXhDYWNoZUlmTmVlZGVkKG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVs
LCBvcHRpb25zLmRlY29kaW5nTW9kZSgpKTsKKyAgICAgICAgICAgIExPRyhJbWFnZXMsICJCaXRt
YXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW2FuIGltYWdlIGZyYW1lIHdpbGwgYmUgZGVjb2Rl
ZCBzeW5jaHJvbm91c2x5XSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWltYWdlKSAvLyBJ
ZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgICAg
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CiAKLSAgICAgICAgYXV0byBvcmll
bnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb24oKTsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9u
ID09IEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpCi0gICAgICAgICAg
ICBvcmllbnRhdGlvbiA9IGN1cnJlbnRGcmFtZU9yaWVudGF0aW9uKCk7CisgICAgICAgIGlmICht
X2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzICE9IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSkK
KyAgICAgICAgICAgICsrbV9kZWNvZGVDb3VudEZvclRlc3Rpbmc7CisgICAgfQogCi0gICAgICAg
IGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKCpuYXRpdmVJbWFnZSwgZGVzdGluYXRpb25SZWN0LCBh
ZGp1c3RlZFNvdXJjZVJlY3QsIHsgb3B0aW9ucywgb3JpZW50YXRpb24gfSk7CisgICAgQVNTRVJU
KGltYWdlKTsKKyAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOworICAg
IGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRl
eHQsIGRlc3RSZWN0LCBjb2xvciwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBhdXRvIG9yaWVudGF0aW9uID0gb3B0aW9u
cy5vcmllbnRhdGlvbigpOworICAgIGlmIChvcmllbnRhdGlvbiA9PSBJbWFnZU9yaWVudGF0aW9u
OjpPcmllbnRhdGlvbjo6RnJvbUltYWdlKSB7CisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVP
cmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgICAgICBkcmF3TmF0aXZlSW1h
Z2UoKmltYWdlLCBjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgSW50U2l6ZShzb3VyY2VTaXpl
KG9yaWVudGF0aW9uKSksIHsgb3B0aW9ucywgb3JpZW50YXRpb24gfSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBJbnRTaXplKHNvdXJjZVNpemUob3JpZW50YXRpb24pKSwgb3B0aW9ucyk7CisKKyAgICBtX2N1
cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgobV9j
dXJyZW50RnJhbWUpOworCiAgICAgaWYgKGF1dG8gb2JzZXJ2ZXIgPSBpbWFnZU9ic2VydmVyKCkp
CiAgICAgICAgIG9ic2VydmVyLT5kaWREcmF3KCp0aGlzKTsKIAotICAgIHJldHVybiBJbWFnZURy
YXdSZXN1bHQ6OkRpZERyYXc7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCit2b2lkIEJp
dG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQogewogICAgIGlmICh0
aWxlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY29udGV4dC5k
cmF3THVtaW5hbmNlTWFzaygpKSB7Ci0gICAgICAgIEltYWdlOjpkcmF3UGF0dGVybihjb250ZXh0
LCBkZXN0aW5hdGlvblJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCB7
IG9wdGlvbnMsIEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Cisg
ICAgaWYgKCFjdHh0LmRyYXdMdW1pbmFuY2VNYXNrKCkpIHsKKyAgICAgICAgLy8gSWYgbmV3IGRh
dGEgaXMgcmVjZWl2ZWQsIHRoZSBjdXJyZW50IGluY29tcGxldGUgZGVjb2RlZCBmcmFtZSBoYXMg
dG8gYmUgZGVzdHJveWVkLgorICAgICAgICBpZiAobV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1
cyA9PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkKKyAgICAgICAgICAgIG1fc291cmNlLT5kZXN0
cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisKKyAgICAgICAgSW1hZ2U6OmRyYXdQYXR0ZXJu
KGN0eHQsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgeyBv
cHRpb25zLCBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAg
ICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gZnJhbWVEZWNvZGluZ1N0YXR1c0F0
SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihleHBhbmRlZEludFNp
emUodGlsZVJlY3Quc2l6ZSgpKSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKKyAgICAgICAgYXV0byBidWZmZXIgPSBjdHh0LmNy
ZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBv
YnNlcnZlciA9IGltYWdlT2JzZXJ2ZXIoKTsKKyAgICAgICAgYXV0byBvYnNlcnZlciA9IGltYWdl
T2JzZXJ2ZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyaWx5IHJlc2V0IGltYWdlIG9ic2VydmVyLCB3
ZSBkb24ndCB3YW50IHRvIHJlY2VpdmUgYW55IGNoYW5nZUluUmVjdCgpIGNhbGxzIGR1ZSB0byB0
aGlzIHJlbGF5b3V0LgotICAgIHNldEltYWdlT2JzZXJ2ZXIobnVsbHB0cik7CisgICAgICAgIC8v
IFRlbXBvcmFyaWx5IHJlc2V0IGltYWdlIG9ic2VydmVyLCB3ZSBkb24ndCB3YW50IHRvIHJlY2Vp
dmUgYW55IGNoYW5nZUluUmVjdCgpIGNhbGxzIGR1ZSB0byB0aGlzIHJlbGF5b3V0LgorICAgICAg
ICBzZXRJbWFnZU9ic2VydmVyKG51bGxwdHIpOwogCi0gICAgZHJhdyhidWZmZXItPmNvbnRleHQo
KSwgdGlsZVJlY3QsIHRpbGVSZWN0LCB7IG9wdGlvbnMsIERlY29kaW5nTW9kZTo6U3luY2hyb25v
dXMsIEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgICAg
IGRyYXcoYnVmZmVyLT5jb250ZXh0KCksIHRpbGVSZWN0LCB0aWxlUmVjdCwgeyBvcHRpb25zLCBE
ZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzLCBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOwogCi0gICAgc2V0SW1hZ2VPYnNlcnZlcihXVEZNb3ZlKG9ic2VydmVyKSk7
Ci0gICAgYnVmZmVyLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgICAgIHNldEltYWdl
T2JzZXJ2ZXIoV1RGTW92ZShvYnNlcnZlcikpOworICAgICAgICBidWZmZXItPmNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwotICAgIGlmICghaW1hZ2UpCisgICAgICAgIG1f
Y2FjaGVkSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGJ1
ZmZlcikpOworICAgICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY3R4dC5zZXREcmF3THVtaW5hbmNlTWFzayhmYWxzZSk7CisgICAgY3R4
dC5kcmF3UGF0dGVybihSZWYgeyAqbV9jYWNoZWRJbWFnZSB9LCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIHsgb3B0aW9ucywgSW1hZ2VPcmllbnRhdGlvbjo6
T3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKK30KKworYm9vbCBCaXRtYXBJbWFnZTo6c2hvdWxk
QW5pbWF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlcGV0aXRpb25Db3VudCgpICYmICFtX2Fu
aW1hdGlvbkZpbmlzaGVkICYmIGltYWdlT2JzZXJ2ZXIoKSAmJiBpbWFnZU9ic2VydmVyKCktPmFs
bG93c0FuaW1hdGlvbigqdGhpcyk7Cit9CisKK2Jvb2wgQml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUo
KSBjb25zdAoreworICAgIHJldHVybiBzaG91bGRBbmltYXRlKCkgJiYgZnJhbWVDb3VudCgpID4g
MTsKK30KKworYm9vbCBCaXRtYXBJbWFnZTo6Y2FuVXNlQXN5bmNEZWNvZGluZ0ZvckxhcmdlSW1h
Z2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWNhbkFuaW1hdGUoKSAmJiBtX3NvdXJjZS0+Y2Fu
VXNlQXN5bmNEZWNvZGluZygpOworfQorCitib29sIEJpdG1hcEltYWdlOjpzaG91bGRVc2VBc3lu
Y0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXMoKSBjb25zdAoreworICAgIHJldHVybiBjYW5Bbmlt
YXRlKCkgJiYgbV9zb3VyY2UtPmNhblVzZUFzeW5jRGVjb2RpbmcoKTsKK30KKwordm9pZCBCaXRt
YXBJbWFnZTo6Y2xlYXJUaW1lcigpCit7CisgICAgbV9mcmFtZVRpbWVyID0gbnVsbHB0cjsKK30K
Kwordm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcihTZWNvbmRzIGRlbGF5KQoreworICAgIEFT
U0VSVCghbV9mcmFtZVRpbWVyKTsKKyAgICBtX2ZyYW1lVGltZXIgPSBtYWtlVW5pcXVlPFRpbWVy
PigqdGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKKyAgICBtX2ZyYW1lVGlt
ZXItPnN0YXJ0T25lU2hvdChkZWxheSk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgQml0bWFwSW1h
Z2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IsIEFsbG93SW1hZ2VTdWJzYW1wbGluZyBh
bGxvd0ltYWdlU3Vic2FtcGxpbmcpCit7CisjaWYgVVNFKENHKQorICAgIGlmIChhbGxvd0ltYWdl
U3Vic2FtcGxpbmcgPT0gQWxsb3dJbWFnZVN1YnNhbXBsaW5nOjpObykKKyAgICAgICAgcmV0dXJu
IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxl
ZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKGNvbnRleHQu
aGFzUGxhdGZvcm1Db250ZXh0KCkgJiYgQ0dDb250ZXh0R2V0VHlwZShjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpKSA9PSBrQ0dDb250ZXh0VHlwZVBERikKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBs
aW5nTGV2ZWw6OkRlZmF1bHQ7CisKKyAgICBmbG9hdCBzY2FsZSA9IHN0ZDo6bWluKGZsb2F0KDEp
LCBzdGQ6Om1heChzY2FsZUZhY3Rvci53aWR0aCgpLCBzY2FsZUZhY3Rvci5oZWlnaHQoKSkpOwor
ICAgIGlmICghKHNjYWxlID4gMCAmJiBzY2FsZSA8PSAxKSkKKyAgICAgICAgcmV0dXJuIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisKKyAgICBpbnQgcmVzdWx0ID0gc3RkOjpjZWlsKHN0ZDo6
bG9nMigxIC8gc2NhbGUpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Vic2FtcGxpbmdMZXZl
bD4oc3RkOjptaW4ocmVzdWx0LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlLT5tYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCgpKSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsKKyAgICBVTlVTRURfUEFSQU0oYWxsb3dJbWFn
ZVN1YnNhbXBsaW5nKTsKKyAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKyNl
bmRpZgorfQorCitib29sIEJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERhdGEoKQorewor
ICAgIC8vIEFuaW1hdGVkIGltYWdlcyBzaG91bGQgcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhbWUg
dGlsbCB0aGUgbmV4dCBvbmUgZmluaXNoZXMgZGVjb2RpbmcuCisgICAgaWYgKG1fc291cmNlLT5o
YXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
U21hbGwgaW1hZ2Ugc2hvdWxkIGJlIGRlY29kZWQgc3luY2hyb25vdXNseS4gRGVsZXRpbmcgaXRz
IGRlY29kZWQgZnJhbWUgaXMgZmluZS4KKyAgICBpZiAoIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JM
YXJnZUltYWdlcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiAhaW1hZ2VP
YnNlcnZlcigpIHx8IGltYWdlT2JzZXJ2ZXIoKS0+Y2FuRGVzdHJveURlY29kZWREYXRhKCp0aGlz
KTsKK30KKworQml0bWFwSW1hZ2U6OlN0YXJ0QW5pbWF0aW9uU3RhdHVzIEJpdG1hcEltYWdlOjpp
bnRlcm5hbFN0YXJ0QW5pbWF0aW9uKEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCit7Cisg
ICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJCaXRtYXBJbWFnZSAiIDw8IHRo
aXMgPDwgIiBpbnRlcm5hbFN0YXJ0QW5pbWF0aW9uIik7CisKKyAgICBpZiAoIWNhbkFuaW1hdGUo
KSkKKyAgICAgICAgcmV0dXJuIFN0YXJ0QW5pbWF0aW9uU3RhdHVzOjpDYW5ub3RTdGFydDsKKwor
ICAgIGlmIChtX2ZyYW1lVGltZXIpCisgICAgICAgIHJldHVybiBTdGFydEFuaW1hdGlvblN0YXR1
czo6VGltZXJBY3RpdmU7CisKKyAgICAvLyBEb24ndCBzdGFydCBhIG5ldyBhbmltYXRpb24gdW50
aWwgd2UgZHJhdyB0aGUgZnJhbWUgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZC4KKyAg
ICBzaXplX3QgbmV4dEZyYW1lID0gKG1fY3VycmVudEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCk7
CisgICAgaWYgKGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0
SW5kZXgobmV4dEZyYW1lLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3luY2hyb25v
dXMpKSkgeworICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6
ICVzIFtuZXh0RnJhbWUgPSAlbGQgaXMgYmVpbmcgZGVjb2RlZF0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG5leHRGcmFtZSk7CisgICAg
ICAgIHJldHVybiBTdGFydEFuaW1hdGlvblN0YXR1czo6RGVjb2RpbmdBY3RpdmU7CisgICAgfQor
CisgICAgaWYgKG1fY3VycmVudEZyYW1lID49IGZyYW1lQ291bnQoKSAtIDEpIHsKKyAgICAgICAg
Ly8gRG9uJ3QgYWR2YW5jZSBwYXN0IHRoZSBsYXN0IGZyYW1lIGlmIHdlIGhhdmVuJ3QgZGVjb2Rl
ZCB0aGUgd2hvbGUgaW1hZ2UKKyAgICAgICAgLy8geWV0IGFuZCBvdXIgcmVwZXRpdGlvbiBjb3Vu
dCBpcyBwb3RlbnRpYWxseSB1bnNldC4gVGhlIHJlcGV0aXRpb24gY291bnQKKyAgICAgICAgLy8g
aW4gYSBHSUYgY2FuIHBvdGVudGlhbGx5IGNvbWUgYWZ0ZXIgYWxsIHRoZSByZXN0IG9mIHRoZSBp
bWFnZSBkYXRhLCBzbworICAgICAgICAvLyB3YWl0IG9uIGl0LgorICAgICAgICBpZiAoIW1fc291
cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmIHJlcGV0aXRpb25Db3VudCgpID09IFJlcGV0aXRp
b25Db3VudE9uY2UpCisgICAgICAgICAgICByZXR1cm4gU3RhcnRBbmltYXRpb25TdGF0dXM6Oklu
Y29tcGxldGVEYXRhOworCisgICAgICAgICsrbV9yZXBldGl0aW9uc0NvbXBsZXRlOworCisgICAg
ICAgIC8vIENoZWNrIGZvciB0aGUgZW5kIG9mIGFuaW1hdGlvbi4KKyAgICAgICAgaWYgKHJlcGV0
aXRpb25Db3VudCgpICE9IFJlcGV0aXRpb25Db3VudEluZmluaXRlICYmIG1fcmVwZXRpdGlvbnND
b21wbGV0ZSA+PSByZXBldGl0aW9uQ291bnQoKSkgeworICAgICAgICAgICAgbV9hbmltYXRpb25G
aW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2Fy
eShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gU3RhcnRBbmltYXRpb25TdGF0dXM6OkNhbm5v
dFN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkodHJ1ZSk7CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWR2YW5jZSB0aGUgYW5pbWF0aW9uIHRv
IGFuIGluY29tcGxldGUgZnJhbWUuCisgICAgaWYgKCFtX3NvdXJjZS0+aXNBbGxEYXRhUmVjZWl2
ZWQoKSAmJiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRleChuZXh0RnJhbWUpKQorICAgICAgICByZXR1
cm4gU3RhcnRBbmltYXRpb25TdGF0dXM6OkluY29tcGxldGVEYXRhOworCisgICAgTW9ub3Rvbmlj
VGltZSB0aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKKyAgICAvLyBIYW5kbGUgaW5pdGlh
bCBzdGF0ZS4KKyAgICBpZiAoIW1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKQorICAgICAgICBtX2Rl
c2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWU7CisKKyAgICAvLyBTZXR0aW5nICdtX2Rlc2lyZWRG
cmFtZVN0YXJ0VGltZScgdG8gJ3RpbWUnIG1lYW5zIHdlIGFyZSBsYXRlOyBvdGhlcndpc2Ugd2Ug
YXJlIGVhcmx5LgorICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gc3RkOjptYXgodGltZSwg
bV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKyBTZWNvbmRzIHsgZnJhbWVEdXJhdGlvbkF0SW5kZXgo
bV9jdXJyZW50RnJhbWUpIH0pOworCisgICAgLy8gUmVxdWVzdCBhc3luYyBkZWNvZGluZyBmb3Ig
bmV4dEZyYW1lIG9ubHkgaWYgdGhpcyBpcyByZXF1aXJlZC4gSWYgbmV4dEZyYW1lIGlzIG5vdCBp
biB0aGUgZnJhbWVDYWNoZSwKKyAgICAvLyBpdCB3aWxsIGJlIGRlY29kZWQgb24gYSBzZXBhcmF0
ZSB3b3JrIHF1ZXVlLiBXaGVuIGRlY29kaW5nIG5leHRGcmFtZSBmaW5pc2hlcywgd2Ugd2lsbCBi
ZSBub3RpZmllZAorICAgIC8vIHRocm91Z2ggdGhlIGNhbGxiYWNrIG5ld0ZyYW1lTmF0aXZlSW1h
Z2VBdmFpbGFibGVBdEluZGV4KCkuIE90aGVyd2lzZSwgYWR2YW5jZUFuaW1hdGlvbigpIHdpbGwg
YmUgY2FsbGVkCisgICAgLy8gd2hlbiB0aGUgdGltZXIgZmlyZXMgYW5kIG1fY3VycmVudEZyYW1l
IHdpbGwgYmUgYWR2YW5jZWQgdG8gbmV4dEZyYW1lIHNpbmNlIGl0IGlzIG5vdCBiZWluZyBkZWNv
ZGVkLgorICAgIGlmIChvcHRpb25zLmRlY29kaW5nTW9kZSgpID09IERlY29kaW5nTW9kZTo6QXN5
bmNocm9ub3VzKSB7CisgICAgICAgIGlmIChmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBh
dGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xl
dmVsLCBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cykpCisgICAgICAgICAgICBMT0coSW1hZ2Vz
LCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtjYWNoZWRGcmFtZUNvdW50ID0gJWxk
IG5leHRGcmFtZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksICsrbV9jYWNoZWRGcmFtZUNvdW50LCBuZXh0RnJhbWUpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29k
aW5nQXRJbmRleChuZXh0RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAg
ICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpEZWNv
ZGluZzsKKyAgICAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVy
bDogJXMgW3JlcXVlc3RpbmcgYXN5bmMgZGVjb2RpbmcgZm9yIG5leHRGcmFtZSA9ICVsZF0iLCBf
X0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG5l
eHRGcmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jbGVhckRlY29kZXJBZnRlckFz
eW5jRnJhbWVSZXF1ZXN0Rm9yVGVzdGluZykKKyAgICAgICAgICAgIG1fc291cmNlLT5yZXNldERh
dGEoZGF0YSgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fZnJhbWVUaW1lcik7CisgICAgc3Rh
cnRUaW1lcihtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSAtIHRpbWUpOworICAgIHJldHVybiBTdGFy
dEFuaW1hdGlvblN0YXR1czo6U3RhcnRlZDsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5j
ZUFuaW1hdGlvbigpCit7CisgICAgY2xlYXJUaW1lcigpOworCisgICAgLy8gRG9uJ3QgYWR2YW5j
ZSB0byBuZXh0RnJhbWUgdW5sZXNzIGl0cyBkZWNvZGluZyBoYXMgZmluaXNoZWQgb3Igd2FzIG5v
dCByZXF1aXJlZC4KKyAgICBzaXplX3QgbmV4dEZyYW1lID0gKG1fY3VycmVudEZyYW1lICsgMSkg
JSBmcmFtZUNvdW50KCk7CisgICAgaWYgKCFmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRp
YmxlV2l0aE9wdGlvbnNBdEluZGV4KG5leHRGcmFtZSwgRGVjb2RpbmdPcHRpb25zKERlY29kaW5n
TW9kZTo6QXN5bmNocm9ub3VzKSkpCisgICAgICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbigp
OworICAgIGVsc2UKKyAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0g
dXJsOiAlcyBbbGF0ZUZyYW1lQ291bnQgPSAlbGQgbmV4dEZyYW1lID0gJWxkXSIsIF9fRlVOQ1RJ
T05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgKyttX2xhdGVG
cmFtZUNvdW50LCBuZXh0RnJhbWUpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnRlcm5hbEFk
dmFuY2VBbmltYXRpb24oKQoreworICAgIG1fY3VycmVudEZyYW1lID0gKG1fY3VycmVudEZyYW1l
ICsgMSkgJSBmcmFtZUNvdW50KCk7CisgICAgQVNTRVJUKCFmcmFtZUlzQmVpbmdEZWNvZGVkQW5k
SXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBEZWNvZGluZ09w
dGlvbnMoRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMpKSk7CisKKyAgICBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeShmYWxzZSk7CisKKyAgICBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0
YXR1cyA9IGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBz
ZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KGRlY29kaW5nU3RhdHVzKTsK
KworICAgIGNhbGxEZWNvZGluZ0NhbGxiYWNrcygpOworCisgICAgaWYgKGF1dG8gb2JzZXJ2ZXIg
PSBpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIG9ic2VydmVyLT5pbWFnZUZyYW1lQXZhaWxhYmxl
KCp0aGlzLCBJbWFnZUFuaW1hdGluZ1N0YXRlOjpZZXMsIG51bGxwdHIsIGRlY29kaW5nU3RhdHVz
KTsKKworICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW21f
Y3VycmVudEZyYW1lID0gJWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbV9jdXJyZW50RnJhbWUpOworfQorCitib29sIEJpdG1hcElt
YWdlOjppc0FuaW1hdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9mcmFtZVRpbWVyOwor
fQorCit2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKK3sKKyAgICAvLyBUaGlzIHRp
bWVyIGlzIHVzZWQgdG8gYW5pbWF0ZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBpbWFnZS4gRG9u
J3QgaW52YWxpZGF0ZQorICAgIC8vIHRoZSB0aW1lciB1bmxlc3MgYWxsIHJlbmRlcmVycyBoYXZl
IHN0b3BwZWQgZHJhd2luZy4KKyAgICBjbGVhclRpbWVyKCk7CisgICAgaWYgKGNhbkFuaW1hdGUo
KSkKKyAgICAgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKK30KKwordm9p
ZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRpb24oKQoreworICAgIHN0b3BBbmltYXRpb24oKTsK
KyAgICBtX2N1cnJlbnRGcmFtZSA9IHByaW1hcnlGcmFtZUluZGV4KCk7CisgICAgbV9yZXBldGl0
aW9uc0NvbXBsZXRlID0gUmVwZXRpdGlvbkNvdW50Tm9uZTsKKyAgICBtX2Rlc2lyZWRGcmFtZVN0
YXJ0VGltZSA9IHsgfTsKKyAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFsc2U7CisKKyAgICAv
LyBGb3IgZXh0cmVtZWx5IGxhcmdlIGFuaW1hdGlvbnMsIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyBy
ZXNldCwgd2UganVzdCB0aHJvdyBldmVyeXRoaW5nIGF3YXkuCisgICAgZGVzdHJveURlY29kZWRE
YXRhSWZOZWNlc3NhcnkodHJ1ZSk7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmRlY29kZShGdW5j
dGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFtX2RlY29kaW5nQ2FsbGJhY2tz
KQorICAgICAgICBtX2RlY29kaW5nQ2FsbGJhY2tzID0gbWFrZVVuaXF1ZTxWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiwgMT4+KCk7CisKKyAgICBtX2RlY29kaW5nQ2FsbGJhY2tzLT5hcHBlbmQoV1RG
TW92ZShjYWxsYmFjaykpOworCisgICAgaWYgKGNhbkFuaW1hdGUoKSkgIHsKKyAgICAgICAgaWYg
KG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKSB7CisgICAgICAgICAgICBpbnRlcm5hbFN0YXJ0QW5p
bWF0aW9uKHsgRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMgfSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgYW5pbWF0ZWQgaW1hZ2UgaGFzIG5vdCBi
ZWVuIGRpc3BsYXllZC4gSW4gdGhpcyBjYXNlLCBlaXRoZXIgdGhlIGZpcnN0IGZyYW1lIGhhcyBu
b3QgYmVlbiBkZWNvZGVkIHlldCBvciB0aGUgYW5pbWF0aW9uIGhhcyBub3Qgc3RhcnRlZCB5ZXQu
CisgICAgICAgIGJvb2wgZnJhbWVJc0NvbXBhdGlibGUgPSBmcmFtZUhhc0RlY29kZWROYXRpdmVJ
bWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVu
dFN1YnNhbXBsaW5nTGV2ZWwsIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKTsKKyAgICAgICAg
Ym9vbCBmcmFtZUlzQmVpbmdEZWNvZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0
aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpOworCisgICAgICAgIGlmIChmcmFtZUlzQ29tcGF0aWJsZSkKKyAgICAgICAgICAg
IGludGVybmFsU3RhcnRBbmltYXRpb24oeyBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cyB9KTsK
KyAgICAgICAgZWxzZSBpZiAoIWZyYW1lSXNCZWluZ0RlY29kZWQpIHsKKyAgICAgICAgICAgIG1f
c291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwg
bV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc3RkOjpvcHRpb25hbDxJbnRTaXplPigpKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6
RGVjb2Rpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wg
ZnJhbWVJc0NvbXBhdGlibGUgPSBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVX
aXRoT3B0aW9uc0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2
ZWwsIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKTsKKyAgICBib29sIGZyYW1lSXNCZWluZ0Rl
Y29kZWQgPSBmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdElu
ZGV4KG1fY3VycmVudEZyYW1lLCBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cyk7CisKKyAgICBp
ZiAoZnJhbWVJc0NvbXBhdGlibGUpCisgICAgICAgIGNhbGxEZWNvZGluZ0NhbGxiYWNrcygpOwor
ICAgIGVsc2UgaWYgKCFmcmFtZUlzQmVpbmdEZWNvZGVkKSB7CisgICAgICAgIG1fc291cmNlLT5y
ZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50
U3Vic2FtcGxpbmdMZXZlbCwgc3RkOjpvcHRpb25hbDxJbnRTaXplPigpKTsKKyAgICAgICAgbV9j
dXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKKyAg
ICB9Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNhbGxEZWNvZGluZ0NhbGxiYWNrcygpCit7Cisg
ICAgaWYgKCFtX2RlY29kaW5nQ2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CisgICAgZm9yIChh
dXRvJiBkZWNvZGluZ0NhbGxiYWNrIDogKm1fZGVjb2RpbmdDYWxsYmFja3MpCisgICAgICAgIGRl
Y29kaW5nQ2FsbGJhY2soKTsKKyAgICBtX2RlY29kaW5nQ2FsbGJhY2tzID0gbnVsbHB0cjsKK30K
Kwordm9pZCBCaXRtYXBJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMg
W3JlcXVlc3RlZCBmcmFtZSAlbGQgaXMgbm93IGF2YWlsYWJsZV0iLCBfX0ZVTkNUSU9OX18sIHRo
aXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGluZGV4KTsKKworICAgIGlm
IChjYW5BbmltYXRlKCkpIHsKKyAgICAgICAgaWYgKGluZGV4ID09IChtX2N1cnJlbnRGcmFtZSAr
IDEpICUgZnJhbWVDb3VudCgpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBhZHZhbmNlIHRvIG5l
eHRGcmFtZSB1bmxlc3MgdGhlIHRpbWVyIHdhcyBmaXJlZCBiZWZvcmUgaXRzIGRlY29kaW5nIGZp
bmlzaGVzLgorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lVGltZXIpCisgICAgICAgICAgICAgICAg
aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbZWFybHlG
cmFtZUNvdW50ID0gJWxkIG5leHRGcmFtZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNv
dXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICsrbV9lYXJseUZyYW1lQ291bnQsIGlu
ZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJlY2F1
c2Ugb2YgaW1hZ2UgcGFydGlhbCBsb2FkaW5nLCBhbiBpbWFnZSBtYXkgc3RhcnQgZGVjb2Rpbmcg
YXMgYSBsYXJnZSBzdGF0aWMgaW1hZ2UuIEJ1dAorICAgICAgICAvLyB3aGVuIG1vcmUgZGF0YSBp
cyByZWNlaXZlZCwgZnJhbWVDb3VudCgpIGNoYW5nZXMgdG8gYmUgPiAxIHNvIHRoZSBpbWFnZSBz
dGFydHMgYW5pbWF0aW5nLgorICAgICAgICAvLyBUaGUgYW5pbWF0aW9uIG1heSBldmVuIHN0YXJ0
IGJlZm9yZSBmaW5pc2hpbmcgdGhlIGRlY29kaW5nIG9mIHRoZSBmaXJzdCBmcmFtZS4KKyAgICAg
ICAgQVNTRVJUKCFtX3JlcGV0aXRpb25zQ29tcGxldGUpOworICAgICAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtNb3JlIGRhdGEgbWFrZXMgZnJhbWVDb3Vu
dCgpID4gMV0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIH0KKworICAgIEFTU0VSVCgoIWluZGV4ICYmICFtX2N1cnJlbnRGcmFt
ZSkgfHwgIWNhbkFuaW1hdGUoKSk7CisgICAgaWYgKG1fc291cmNlLT5pc0FzeW5jRGVjb2RpbmdR
dWV1ZUlkbGUoKSkKKyAgICAgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsK
KworICAgIERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzID0gZnJhbWVEZWNvZGluZ1N0YXR1
c0F0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIHNldEN1cnJlbnRGcmFtZURlY29kaW5nU3Rh
dHVzSWZOZWNlc3NhcnkoZGVjb2RpbmdTdGF0dXMpOworCisgICAgaWYgKG1fY3VycmVudEZyYW1l
RGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICAgICArK21f
ZGVjb2RlQ291bnRGb3JUZXN0aW5nOworCisgICAgLy8gQ2FsbCBtX2RlY29kaW5nQ2FsbGJhY2tz
IG9ubHkgaWYgdGhlIGltYWdlIGZyYW1lIHdhcyBkZWNvZGVkIHdpdGggdGhlIG5hdGl2ZSBzaXpl
LgorICAgIGlmIChmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9u
c0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIERlY29k
aW5nTW9kZTo6QXN5bmNocm9ub3VzKSkKKyAgICAgICAgY2FsbERlY29kaW5nQ2FsbGJhY2tzKCk7
CiAKLSAgICBjb250ZXh0LnNldERyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKTsKLSAgICBjb250ZXh0
LmRyYXdQYXR0ZXJuKFJlZiB7ICppbWFnZSB9LCBkZXN0aW5hdGlvblJlY3QsIHRpbGVSZWN0LCB0
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCB7IG9wdGlvbnMsIEltYWdlT3JpZW50YXRpb246Ok9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgaWYgKGF1dG8gb2JzZXJ2ZXIgPSBpbWFnZU9i
c2VydmVyKCkpCisgICAgICAgIG9ic2VydmVyLT5pbWFnZUZyYW1lQXZhaWxhYmxlKCp0aGlzLCBJ
bWFnZUFuaW1hdGluZ1N0YXRlOjpObywgbnVsbHB0ciwgZGVjb2RpbmdTdGF0dXMpOworfQorCitE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgQml0bWFwSW1hZ2U6OmNvbG9yU3BhY2UoKQoreworICAgIGlm
IChhdXRvIG5hdGl2ZUltYWdlID0gdGhpcy0+bmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJu
IG5hdGl2ZUltYWdlLT5jb2xvclNwYWNlKCk7CisgICAgcmV0dXJuIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpOworfQorCit1bnNpZ25lZCBCaXRtYXBJbWFnZTo6ZGVjb2RlQ291bnRGb3JU
ZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVDb3VudEZvclRlc3Rpbmc7CiB9
CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAg
SW1hZ2U6OmR1bXAodHMpOworCisgICAgaWYgKGlzQW5pbWF0ZWQoKSkKKyAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJjdXJyZW50LWZyYW1lIiwgbV9jdXJyZW50RnJhbWUpOworCiAgICAgbV9zb3Vy
Y2UtPmR1bXAodHMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAppbmRleCA2OGIxOWFiNmM0MmIuLjFjYzI2NzYyN2VlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDI0IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMiwxMDUgKzIyLDE4MSBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiSW1h
Z2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0jaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uLmg+CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEltYWdlT2JzZXJ2ZXI7Ci1jbGFzcyBJbWFnZVNvdXJjZTsKLWNsYXNzIE5hdGl2
ZUltYWdlOworY2xhc3MgVGltZXI7CiAKIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFsIDogcHVibGlj
IEltYWdlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpdG1hcElt
YWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogPSBudWxscHRyLCBBbHBoYU9wdGlvbiA9IEFscGhh
T3B0aW9uOjpQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPEJpdG1hcEltYWdlPiBjcmVhdGUoUmVmPE5hdGl2ZUltYWdlPiYmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoUmVmUHRyPE5hdGl2
ZUltYWdlPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEJpdG1hcEltYWdl
PiBjcmVhdGUoUGxhdGZvcm1JbWFnZVB0ciYmKTsKLQotICAgIC8vIEFuaW1hdGlvbgotICAgIHZv
aWQgc3RhcnRBbmltYXRpb24oKSBmaW5hbCB7IG1fc291cmNlLT5zdGFydEFuaW1hdGlvbigpOyB9
Ci0gICAgdm9pZCBzdG9wQW5pbWF0aW9uKCkgZmluYWwgeyBtX3NvdXJjZS0+c3RvcEFuaW1hdGlv
bigpOyB9Ci0gICAgdm9pZCByZXNldEFuaW1hdGlvbigpIGZpbmFsIHsgbV9zb3VyY2UtPnJlc2V0
QW5pbWF0aW9uKCk7IH0KLSAgICBib29sIGlzQW5pbWF0ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3NvdXJjZS0+aXNBbmltYXRlZCgpOyB9Ci0KLSAgICAvLyBEZWNvZGluZwotICAgIGJvb2wg
aXNMYXJnZUZvckRlY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmlzTGFyZ2VGb3JE
ZWNvZGluZygpOyB9Ci0gICAgdm9pZCBzdG9wRGVjb2RpbmdXb3JrUXVldWUoKSB7IG1fc291cmNl
LT5zdG9wRGVjb2RpbmdXb3JrUXVldWUoKTsgfQotICAgIHZvaWQgZGVjb2RlKEZ1bmN0aW9uPHZv
aWQoRGVjb2RpbmdTdGF0dXMpPiYmIGRlY29kZUNhbGxiYWNrKSB7IG1fc291cmNlLT5kZWNvZGUo
V1RGTW92ZShkZWNvZGVDYWxsYmFjaykpOyB9Ci0KLSAgICAvLyBDdXJyZW50IEltYWdlRnJhbWUK
LSAgICB1bnNpZ25lZCBjdXJyZW50RnJhbWVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LT5jdXJyZW50RnJhbWVJbmRleCgpOyB9Ci0gICAgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5jdXJyZW50SW1hZ2VGcmFtZSgpLmhhc0FscGhhKCk7
IH0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGN1cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UtPmN1cnJlbnRJbWFnZUZyYW1lKCkub3JpZW50YXRpb24oKTsgfQot
Ci0gICAgLy8gUHJpbWFyeSAmIGN1cnJlbnQgTmF0aXZlSW1hZ2UKLSAgICBSZWZQdHI8TmF0aXZl
SW1hZ2U+IHByaW1hcnlOYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG1fc291cmNlLT5wcmltYXJ5TmF0
aXZlSW1hZ2UoKTsgfQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKSBm
aW5hbCB7IHJldHVybiBwcmltYXJ5TmF0aXZlSW1hZ2UoKTsgfQotICAgIFJlZlB0cjxOYXRpdmVJ
bWFnZT4gY3VycmVudE5hdGl2ZUltYWdlKCkgZmluYWwgeyByZXR1cm4gbV9zb3VyY2UtPmN1cnJl
bnROYXRpdmVJbWFnZSgpOyB9Ci0KLSAgICAvLyBJbWFnZSBNZXRhZGF0YQotICAgIEZsb2F0U2l6
ZSBzaXplKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9uOjpP
cmllbnRhdGlvbjo6RnJvbUltYWdlKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZS0+c2l6
ZShvcmllbnRhdGlvbik7IH0KLSAgICBGbG9hdFNpemUgc291cmNlU2l6ZShJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uID0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246OkZyb21JbWFn
ZSkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPnNvdXJjZVNpemUob3JpZW50YXRpb24pOyB9Ci0g
ICAgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UoKSBmaW5hbCB7IHJldHVybiBtX3Nv
dXJjZS0+Y29sb3JTcGFjZSgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5vcmllbnRhdGlvbigpOyB9Ci0gICAgdW5z
aWduZWQgZnJhbWVDb3VudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUNv
dW50KCk7IH0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgaGFzU29saWRDb2xvcigpIGZp
bmFsIHsgcmV0dXJuIG1fc291cmNlLT5oYXNTb2xpZENvbG9yKCk7IH0KLSNlbmRpZgorICAgIHN0
YXRpYyBSZWZQdHI8Qml0bWFwSW1hZ2U+IGNyZWF0ZShQbGF0Zm9ybUltYWdlUHRyJiYgcGxhdGZv
cm1JbWFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGUoTmF0aXZlSW1hZ2U6OmNyZWF0
ZShXVEZNb3ZlKHBsYXRmb3JtSW1hZ2UpKSk7CisgICAgfQorICAgIHN0YXRpYyBSZWZQdHI8Qml0
bWFwSW1hZ2U+IGNyZWF0ZShSZWZQdHI8TmF0aXZlSW1hZ2U+JiYgbmF0aXZlSW1hZ2UpCisgICAg
eworICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBSZWY8Qml0bWFwSW1hZ2U+IGNyZWF0ZShSZWY8TmF0aXZlSW1hZ2U+
JiYgbmF0aXZlSW1hZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCaXRt
YXBJbWFnZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSkpOworICAgIH0KKyAgICBzdGF0aWMgUmVmPEJp
dG1hcEltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBudWxscHRyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQml0bWFwSW1hZ2Uob2JzZXJ2ZXIpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5CaXRtYXBJbWFnZSgpOworCisgICAgRW5jb2RlZERhdGFT
dGF0dXMgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOworICAgIHVu
c2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmRlY29kZWRTaXpl
KCk7IH0KKworICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UtPmVuY29kZWREYXRhU3RhdHVzKCk7IH0KKyAgICBzaXplX3QgZnJh
bWVDb3VudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUNvdW50KCk7IH0K
KyAgICBzaXplX3QgcHJpbWFyeUZyYW1lSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+
cHJpbWFyeUZyYW1lSW5kZXgoKTsgfQorICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+cmVwZXRpdGlvbkNvdW50KCk7IH0KKyAgICBT
dHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPnV0aSgpOyB9Cisg
ICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9z
b3VyY2UtPmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KKyAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURl
c2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPmFjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbigpOyB9CisgICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5ob3RTcG90KCk7IH0KKworICAgIC8v
IEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCisgICAgRmxvYXRTaXplIHNpemUoSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiA9IEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5zaXplKG9yaWVudGF0aW9u
KTsgfQorICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3NvdXJjZS0+b3JpZW50YXRpb24oKTsgfQorICAgIENvbG9yIHNpbmdsZVBpeGVs
U29saWRDb2xvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5zaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKTsgfQorICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0
aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IERlY29kaW5nT3B0aW9u
cyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVJc0JlaW5n
RGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwgZGVjb2RpbmdP
cHRpb25zKTsgfQorICAgIERlY29kaW5nU3RhdHVzIGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lRGVjb2RpbmdTdGF0
dXNBdEluZGV4KGluZGV4KTsgfQorICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KGluZGV4
KSA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0KKyAgICBib29sIGZyYW1lSGFzQWxwaGFB
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzQWxw
aGFBdEluZGV4KGluZGV4KTsgfQorCisgICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChp
bmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KKyAgICBib29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2
ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERl
Y29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVI
YXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOyB9CisKKyAgICBTdWJzYW1wbGluZ0xl
dmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS0+ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KKwor
ICAgIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS0+ZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9CisgICAgSW1hZ2VP
cmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlLT5mcmFtZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7IH0KKworICAg
IHNpemVfdCBjdXJyZW50RnJhbWVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1l
OyB9CisgICAgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVudEZyYW1lSW5kZXgoKSk7IH0K
KyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoY3VycmVudEZyYW1lSW5kZXgoKSk7IH0K
KyAgICBib29sIGNhbkFuaW1hdGUoKSBjb25zdDsKKworICAgIGJvb2wgc2hvdWxkVXNlQXN5bmNE
ZWNvZGluZ0ZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVEZWNvZGlu
Z0R1cmF0aW9uRm9yVGVzdGluZygpID4gMF9zOyB9CisgICAgdm9pZCBzZXRGcmFtZURlY29kaW5n
RHVyYXRpb25Gb3JUZXN0aW5nKFNlY29uZHMgZHVyYXRpb24pIHsgbV9zb3VyY2UtPnNldEZyYW1l
RGVjb2RpbmdEdXJhdGlvbkZvclRlc3RpbmcoZHVyYXRpb24pOyB9CisgICAgYm9vbCBjYW5Vc2VB
c3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMoKSBjb25zdDsKKyAgICBib29sIHNob3VsZFVzZUFz
eW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdlcygpIGNvbnN0OworICAgIHZvaWQgc2V0Q2xlYXJE
ZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX2Ns
ZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldEFzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZyhib29sIGVuYWJsZWQpIHsg
bV9hc3luY0RlY29kaW5nRW5hYmxlZEZvclRlc3RpbmcgPSBlbmFibGVkOyB9CisgICAgYm9vbCBp
c0FzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNE
ZWNvZGluZ0VuYWJsZWRGb3JUZXN0aW5nOyB9CisgICAgdm9pZCBzdG9wQXN5bmNEZWNvZGluZ1F1
ZXVlKCkgeyBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOyB9CisKKyAgICBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBP
UlQgdW5zaWduZWQgZGVjb2RlQ291bnRGb3JUZXN0aW5nKCkgY29uc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlKGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSkgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJy
aWRlOworICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJhbnNmb3JtZWROYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShib29sIHJlc3BlY3RPcmllbnRhdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KHNpemVfdCk7CisgICAgdm9pZCBkZWNvZGUo
RnVuY3Rpb248dm9pZCgpPiYmKTsKIAotICAgIC8vIEltYWdlRnJhbWUKLSAgICBTZWNvbmRzIGZy
YW1lRHVyYXRpb25BdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS0+ZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Citwcml2YXRlOgorICAgIFdFQkNPUkVf
RVhQT1JUIEJpdG1hcEltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgQml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSBudWxscHRyKTsKKworICAgIFJlZlB0cjxO
YXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkgZmluYWwgeyByZXR1
cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQorICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBjb25zdCBEZWNvZGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKKworICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBk
YXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAorICAgIC8vIHRoZSBl
bnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVz
dHJveQorICAgIC8vIGV2ZXJ5dGhpbmc7IHRoaXMgaXMgdXNlZCB3aGVuIGUuZy4gd2Ugd2FudCB0
byBmcmVlIHNvbWUgcm9vbSBpbiB0aGUgaW1hZ2UKKyAgICAvLyBjYWNoZS4gSWYgfGRlc3Ryb3lB
bGx8IGlzIGZhbHNlLCB3ZSBvbmx5IGRlbGV0ZSBmcmFtZXMgdXAgdG8gdGhlIGN1cnJlbnQKKyAg
ICAvLyBvbmU7IHRoaXMgaXMgdXNlZCB3aGlsZSBhbmltYXRpbmcgbGFyZ2UgaW1hZ2VzIHRvIGtl
ZXAgbWVtb3J5IGZvb3RwcmludAorICAgIC8vIGxvdyB3aXRob3V0IHJlZGVjb2RpbmcgdGhlIHdo
b2xlIGltYWdlIG9uIGV2ZXJ5IGZyYW1lLgorICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJv
b2wgZGVzdHJveUFsbCA9IHRydWUpIG92ZXJyaWRlOworCisgICAgLy8gSWYgdGhlIGltYWdlIGlz
IGxhcmdlIGVub3VnaCwgY2FsbHMgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIHBhc3NlcworICAg
IC8vIHxkZXN0cm95QWxsfCBhbG9uZy4KKyAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVj
ZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCA9IHRydWUpOworCisgICAgRmxvYXRTaXplIHNvdXJjZVNp
emUoSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IEltYWdlT3JpZW50YXRpb246Ok9yaWVu
dGF0aW9uOjpGcm9tSW1hZ2UpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5zb3VyY2VT
aXplKG9yaWVudGF0aW9uKTsgfQorICAgIGJvb2wgaGFzRGVuc2l0eUNvcnJlY3RlZFNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+aGFzRGVuc2l0eUNvcnJlY3RlZFNpemUo
KTsgfQorCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIEltYWdlUGFpbnRp
bmdPcHRpb25zID0geyB9KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBJbWFnZVBhaW50aW5nT3B0
aW9ucyA9IHsgfSkgb3ZlcnJpZGU7CisKKyAgICAvLyBBbmltYXRpb24uCisgICAgZW51bSBjbGFz
cyBTdGFydEFuaW1hdGlvblN0YXR1cyB7IENhbm5vdFN0YXJ0LCBJbmNvbXBsZXRlRGF0YSwgVGlt
ZXJBY3RpdmUsIERlY29kaW5nQWN0aXZlLCBTdGFydGVkIH07CisgICAgYm9vbCBpc0FuaW1hdGVk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lQ291bnQoKSA+IDE7IH0K
KyAgICBib29sIHNob3VsZEFuaW1hdGUoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9u
KCkgb3ZlcnJpZGUgeyBpbnRlcm5hbFN0YXJ0QW5pbWF0aW9uKHsgfSk7IH0KKyAgICBTdGFydEFu
aW1hdGlvblN0YXR1cyBpbnRlcm5hbFN0YXJ0QW5pbWF0aW9uKEltYWdlUGFpbnRpbmdPcHRpb25z
KTsKKyAgICB2b2lkIGFkdmFuY2VBbmltYXRpb24oKTsKKyAgICB2b2lkIGludGVybmFsQWR2YW5j
ZUFuaW1hdGlvbigpOworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCBmaW5hbDsKKworICAg
IC8vIEl0IG1heSBsb29rIHVudXN1YWwgdGhhdCB0aGVyZSBpcyBubyBzdGFydCBhbmltYXRpb24g
Y2FsbCBhcyBwdWJsaWMgQVBJLiBUaGlzIGlzIGJlY2F1c2UKKyAgICAvLyB3ZSBzdGFydCBhbmQg
c3RvcCBhbmltYXRpbmcgbGF6aWx5LiBBbmltYXRpb24gYmVnaW5zIHdoZW5ldmVyIHNvbWVvbmUg
ZHJhd3MgdGhlIGltYWdlLiBJdCB3aWxsCisgICAgLy8gYXV0b21hdGljYWxseSBwYXVzZSBvbmNl
IGFsbCBvYnNlcnZlcnMgbm8gbG9uZ2VyIHdhbnQgdG8gcmVuZGVyIHRoZSBpbWFnZSBhbnl3aGVy
ZS4KKyAgICB2b2lkIHN0b3BBbmltYXRpb24oKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc2V0QW5p
bWF0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICAvLyBOYXRpdmVJbWFnZQotICAgIFJlZlB0cjxOYXRp
dmVJbWFnZT4gbmF0aXZlSW1hZ2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBmaW5hbCB7IHJldHVy
biBtX3NvdXJjZS0+bmF0aXZlSW1hZ2VBdEluZGV4KGluZGV4KTsgfQorI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgYm9vbCBub3RTb2xpZENvbG9yKCkgb3ZlcnJpZGU7CisjZW5kaWYKIAotICAgIC8v
IFRlc3Rpbmcgc3VwcG9ydC4KLSAgICBjb25zdCBjaGFyKiBzb3VyY2VVVEY4KCkgY29uc3QgeyBy
ZXR1cm4gc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKTsgfQotICAgIHZvaWQgc2V0
QXN5bmNEZWNvZGluZ0VuYWJsZWRGb3JUZXN0aW5nKGJvb2wgZW5hYmxlZCkgeyBtX3NvdXJjZS0+
c2V0QXN5bmNEZWNvZGluZ0VuYWJsZWRGb3JUZXN0aW5nKGVuYWJsZWQpOyB9Ci0gICAgYm9vbCBp
c0FzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LT5pc0FzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZygpOyB9Ci0gICAgdm9pZCBzZXRNaW5p
bXVtRGVjb2RpbmdEdXJhdGlvbkZvclRlc3RpbmcoU2Vjb25kcyBkdXJhdGlvbikgeyBtX3NvdXJj
ZS0+c2V0TWluaW11bURlY29kaW5nRHVyYXRpb25Gb3JUZXN0aW5nKGR1cmF0aW9uKTsgfQotICAg
IHZvaWQgc2V0Q2xlYXJEZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcoYm9v
bCBlbmFibGVkKSB7IG1fc291cmNlLT5zZXRDbGVhckRlY29kZXJBZnRlckFzeW5jRnJhbWVSZXF1
ZXN0Rm9yVGVzdGluZyhlbmFibGVkKTsgfQotICAgIHVuc2lnbmVkIGRlY29kZUNvdW50Rm9yVGVz
dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5kZWNvZGVDb3VudEZvclRlc3RpbmcoKTsg
fQorICAgIHZvaWQgY2xlYXJUaW1lcigpOworICAgIHZvaWQgc3RhcnRUaW1lcihTZWNvbmRzIGRl
bGF5KTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3Rv
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yLCBBbGxvd0lt
YWdlU3Vic2FtcGxpbmcpOworICAgIGJvb2wgY2FuRGVzdHJveURlY29kZWREYXRhKCk7CisgICAg
dm9pZCBzZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3Rh
dHVzKTsKKyAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisgICAgdm9pZCBjYWxsRGVjb2RpbmdDYWxsYmFja3MoKTsKKyAgICB2b2lkIGR1bXAo
V1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAgQml0bWFw
SW1hZ2UoSW1hZ2VPYnNlcnZlciosIEFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbik7Ci0gICAgQml0bWFwSW1hZ2UoUmVmPE5hdGl2ZUltYWdlPiYmKTsKKyAgICAvLyBBbmlt
YXRlZCBpbWFnZXMgb3ZlciBhIGNlcnRhaW4gc2l6ZSBhcmUgY29uc2lkZXJlZCBsYXJnZSBlbm91
Z2ggdGhhdCB3ZSdsbCBvbmx5IGhhbmcgb24gdG8gb25lIGZyYW1lIGF0IGEgdGltZS4KKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgTGFyZ2VBbmltYXRpb25DdXRvZmYgPSAzMCAqIDEwMjQgKiAx
MDI0OwogCi0gICAgLy8gRW5jb2RlZCBhbmQgZGVjb2RlZCBkYXRhCi0gICAgRW5jb2RlZERhdGFT
dGF0dXMgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIGZpbmFsOwotICAgIHZvaWQg
ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpIGZpbmFsOworICAgIG11
dGFibGUgUmVmPEltYWdlU291cmNlPiBtX3NvdXJjZTsKIAotICAgIC8vIEN1cnJlbnQgSW1hZ2VG
cmFtZQotICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIWN1cnJlbnRGcmFtZUhhc0FscGhhKCk7IH0KKyAgICBzaXplX3QgbV9jdXJyZW50
RnJhbWUgeyAwIH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRp
b24uCisgICAgU3Vic2FtcGxpbmdMZXZlbCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsIHsgU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OworICAgIERlY29kaW5nU3RhdHVzIG1fY3VycmVudEZy
YW1lRGVjb2RpbmdTdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCB9OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOworICAgIFJlcGV0aXRpb25Db3VudCBtX3Jl
cGV0aXRpb25zQ29tcGxldGUgeyBSZXBldGl0aW9uQ291bnROb25lIH07IC8vIEhvdyBtYW55IHJl
cGV0aXRpb25zIHdlJ3ZlIGZpbmlzaGVkLgorICAgIE1vbm90b25pY1RpbWUgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWU7IC8vIFRoZSBzeXN0ZW0gdGltZSBhdCB3aGljaCB3ZSBob3BlIHRvIHNlZSB0
aGUgbmV4dCBjYWxsIHRvIHN0YXJ0QW5pbWF0aW9uKCkuCiAKLSAgICAvLyBDdXJyZW50IE5hdGl2
ZUltYWdlCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjdXJyZW50UHJlVHJhbnNmb3JtZWROYXRp
dmVJbWFnZShJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBmaW5hbCB7IHJldHVybiBtX3Nv
dXJjZS0+Y3VycmVudFByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2Uob3JpZW50YXRpb24pOyB9Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+LCAxPj4gbV9kZWNvZGlu
Z0NhbGxiYWNrczsKIAotICAgIC8vIEltYWdlIE1ldGFkYXRhCi0gICAgYm9vbCBoYXNEZW5zaXR5
Q29ycmVjdGVkU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5oYXNEZW5zaXR5
Q29ycmVjdGVkU2l6ZSgpOyB9Ci0gICAgU3RyaW5nIHV0aSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc291cmNlLT51dGkoKTsgfQotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLT5maWxlbmFtZUV4dGVuc2lvbigpOyB9Ci0gICAgU3Ry
aW5nIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291
cmNlLT5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8SW50
UG9pbnQ+IGhvdFNwb3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZS0+aG90U3BvdCgp
OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2UtPnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9Cisg
ICAgYm9vbCBtX2FuaW1hdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKIAotICAgIC8vIEltYWdlIG1l
dGhvZHMKLSAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNl
LT5pc0FuaW1hdGluZygpOyB9CisgICAgYm9vbCBtX2NsZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFt
ZVJlcXVlc3RGb3JUZXN0aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYXN5bmNEZWNvZGluZ0Vu
YWJsZWRGb3JUZXN0aW5nIHsgZmFsc2UgfTsKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZVJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zID0geyB9KSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIEltYWdlUGFpbnRpbmdPcHRpb25zID0geyB9KSBmaW5hbDsK
KyNpZiBBU1NFUlRfRU5BQkxFRCB8fCAhTE9HX0RJU0FCTEVECisgICAgc2l6ZV90IG1fbGF0ZUZy
YW1lQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1fZWFybHlGcmFtZUNvdW50IHsgMCB9OworICAg
IHNpemVfdCBtX2NhY2hlZEZyYW1lQ291bnQgeyAwIH07CisjZW5kaWYKIAotICAgIHZvaWQgZHVt
cChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBtX2RlY29kZUNv
dW50Rm9yVGVzdGluZyB7IDAgfTsKIAotICAgIFJlZjxJbWFnZVNvdXJjZT4gbV9zb3VyY2U7Cisg
ICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBtX2NhY2hlZEltYWdlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2VTb3VyY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDM2
NmNiMDljMDkuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZVNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4ODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2VTb3VyY2UuaCIKLQotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJJbWFn
ZUZyYW1lQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxCaXRtYXBJbWFnZVNvdXJj
ZT4gQml0bWFwSW1hZ2VTb3VyY2U6OmNyZWF0ZShCaXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UsIEFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCaXRtYXBJ
bWFnZVNvdXJjZShiaXRtYXBJbWFnZSwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKSk7Ci19Ci0KLUJpdG1hcEltYWdlU291cmNlOjpCaXRtYXBJbWFnZVNvdXJjZShCaXRt
YXBJbWFnZSYgYml0bWFwSW1hZ2UsIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6IG1fYml0
bWFwSW1hZ2UoYml0bWFwSW1hZ2UpCi0gICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQot
ICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbikKLXsKLX0KLQotSW1hZ2VEZWNvZGVyKiBCaXRtYXBJbWFnZVNvdXJjZTo6ZGVjb2RlcihG
cmFnbWVudGVkU2hhcmVkQnVmZmVyKiBkYXRhKSBjb25zdAotewotICAgIGlmIChtX2RlY29kZXIp
Ci0gICAgICAgIHJldHVybiBtX2RlY29kZXIuZ2V0KCk7Ci0KLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbV9kZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVh
dGUoKmRhdGEsIG1fYml0bWFwSW1hZ2UubWltZVR5cGUoKSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgbV9kZWNvZGVyLT5zZXRFbmNvZGVkRGF0YVN0YXR1c0NoYW5n
ZUNhbGxiYWNrKFt3ZWFrVGhpcyA9IFRocmVhZFNhZmVXZWFrUHRyIHsgKnRoaXMgfV0gKGF1dG8g
c3RhdHVzKSB7Ci0gICAgICAgIGlmIChSZWZQdHIgcHJvdGVjdGVkVGhpcyA9IHdlYWtUaGlzLmdl
dCgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZW5jb2RlZERhdGFTdGF0dXNDaGFuZ2Vk
KHN0YXR1cyk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoYXV0byBleHBlY3RlZENvbnRlbnRTaXplID0g
bV9iaXRtYXBJbWFnZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkKLSAgICAgICAgbV9kZWNvZGVy
LT5zZXRFeHBlY3RlZENvbnRlbnRTaXplKGV4cGVjdGVkQ29udGVudFNpemUpOwotCi0gICAgcmV0
dXJuIG1fZGVjb2Rlci5nZXQoKTsKLX0KLQotSW1hZ2VGcmFtZUFuaW1hdG9yKiBCaXRtYXBJbWFn
ZVNvdXJjZTo6ZnJhbWVBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZnJhbWVBbmltYXRv
cikKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVBbmltYXRvci5nZXQoKTsKLQotICAgIGlmICghaXNB
bmltYXRlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG1fZnJhbWVBbmltYXRv
ciA9IEltYWdlRnJhbWVBbmltYXRvcjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2VTb3Vy
Y2UmPigqdGhpcykpOwotICAgIHJldHVybiBtX2ZyYW1lQW5pbWF0b3IuZ2V0KCk7Ci19Ci0KLUlt
YWdlRnJhbWVXb3JrUXVldWUmIEJpdG1hcEltYWdlU291cmNlOjp3b3JrUXVldWUoKSBjb25zdAot
ewotICAgIGlmICghbV93b3JrUXVldWUpCi0gICAgICAgIG1fd29ya1F1ZXVlID0gSW1hZ2VGcmFt
ZVdvcmtRdWV1ZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2VTb3VyY2UmPigqdGhpcykp
OwotICAgIHJldHVybiAqbV93b3JrUXVldWU7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6
OmVuY29kZWREYXRhU3RhdHVzQ2hhbmdlZChFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMpCi17Ci0g
ICAgaWYgKHN0YXR1cyA+PSBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAgICAg
ICAgbV9mcmFtZXMucmVzaXplVG9GaXQobV9kZWNvZGVyLT5mcmFtZUNvdW50KCkpOwotCi0gICAg
aWYgKGF1dG8gb2JzZXJ2ZXIgPSBtX2JpdG1hcEltYWdlLmltYWdlT2JzZXJ2ZXIoKSkKLSAgICAg
ICAgb2JzZXJ2ZXItPmVuY29kZWREYXRhU3RhdHVzQ2hhbmdlZChtX2JpdG1hcEltYWdlLCBzdGF0
dXMpOwotfQotCi1FbmNvZGVkRGF0YVN0YXR1cyBCaXRtYXBJbWFnZVNvdXJjZTo6ZGF0YUNoYW5n
ZWQoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17
Ci0gICAgbV9jYWNoZWRGbGFncyA9IHsgfTsKLQotICAgIGF1dG8gc3RhdHVzID0gc2V0RGF0YShk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1
czo6VHlwZUF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLQotICAgIGVuY29kZWRE
YXRhU3RhdHVzQ2hhbmdlZChzdGF0dXMpOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2VTb3VyY2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCi17
Ci0gICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlU291cmNlOjolcyAtICVwIC0gdXJsOiAlcy4g
RGVjb2RlZCBkYXRhIHdpdGggZGVzdHJveUFsbCA9ICVkIHdpbGwgYmUgZGVzdHJveWVkLiIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVRGOCgpLCBkZXN0cm95QWxsKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGZyYW1lQ291bnQoKTsgKytpbmRleCkgewotICAg
ICAgICAvLyBEb24ndCBkZXN0cm95IGEgTmF0aXZlSW1hZ2UgYmV0b3JlIGl0IGlzIGRyYXduIGF0
IGxlYXN0IG9uY2UuCi0gICAgICAgIGlmIChpc1BlbmRpbmdEcmF3aW5nQXRJbmRleChpbmRleCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWRlc3Ryb3lBbGwgJiYgIWNh
bkRlc3Ryb3lOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgZGVzdHJveU5hdGl2ZUltYWdlQXRJbmRleChpbmRleCk7Ci0gICAgfQotCi0g
ICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHRocm93IGF3YXkgdGhlIGRlY29kZXIgdW5sZXNzIHdl
J3JlIGV4cGxpY2l0bHkgYXNrZWQKLSAgICAvLyB0byBkZXN0cm95IGFsbCBvZiB0aGUgZnJhbWVz
LgotICAgIGlmIChkZXN0cm95QWxsICYmIGlzRGVjb2RpbmdXb3JrUXVldWVJZGxlKCkpCi0gICAg
ICAgIHJlc2V0RGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplQ2hhbmdlZChsb25n
IGxvbmcgZGVjb2RlZFNpemUpCi17Ci0gICAgaWYgKCFkZWNvZGVkU2l6ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGF1dG8gb2JzZXJ2ZXIgPSBtX2JpdG1hcEltYWdlLmltYWdlT2JzZXJ2
ZXIoKSkKLSAgICAgICAgb2JzZXJ2ZXItPmRlY29kZWRTaXplQ2hhbmdlZChtX2JpdG1hcEltYWdl
LCBkZWNvZGVkU2l6ZSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmRlY29kZWRTaXpl
SW5jcmVhc2VkKHVuc2lnbmVkIGRlY29kZWRTaXplKQotewotICAgIGlmICghZGVjb2RlZFNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVjb2RlZFNpemUgKz0gZGVjb2RlZFNpemU7Ci0K
LSAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoZGVjb2RlZFNpemUpOwotCi0gICAgLy8gVGhlIGZ1bGx5
LWRlY29kZWQgZnJhbWUgd2lsbCBzdWJzdW1lIHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBkYXRhIHVz
ZWQKLSAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcy4KLSAgICBkZWNvZGVkUHJv
cGVydGllc1NpemVDaGFuZ2VkKDApOwotfQotCi12b2lkIEJpdG1hcEltYWdlU291cmNlOjpkZWNv
ZGVkU2l6ZURlY3JlYXNlZCh1bnNpZ25lZCBkZWNvZGVkU2l6ZSkKLXsKLSAgICBpZiAoIWRlY29k
ZWRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9kZWNvZGVkU2l6ZSA+PSBk
ZWNvZGVkU2l6ZSk7Ci0gICAgbV9kZWNvZGVkU2l6ZSAtPSBkZWNvZGVkU2l6ZTsKLQotICAgIGRl
Y29kZWRTaXplQ2hhbmdlZCgtc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihkZWNvZGVkU2l6ZSkpOwot
fQotCi12b2lkIEJpdG1hcEltYWdlU291cmNlOjpkZWNvZGVkUHJvcGVydGllc1NpemVDaGFuZ2Vk
KHVuc2lnbmVkIGRlY29kZWRQcm9wZXJ0aWVzU2l6ZSkKLXsKLSAgICBpZiAoZGVjb2RlZFByb3Bl
cnRpZXNTaXplID09IG1fZGVjb2RlZFByb3BlcnRpZXNTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBsb25nIGxvbmcgZGVjb2RlZFNpemUgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGRlY29k
ZWRQcm9wZXJ0aWVzU2l6ZSkgLSBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZTsKLSAgICBtX2RlY29k
ZWRQcm9wZXJ0aWVzU2l6ZSA9IGRlY29kZWRQcm9wZXJ0aWVzU2l6ZTsKLSAgICBkZWNvZGVkU2l6
ZUNoYW5nZWQoZGVjb2RlZFNpemUpOwotfQotCi1ib29sIEJpdG1hcEltYWdlU291cmNlOjpjYW5E
ZXN0cm95TmF0aXZlSW1hZ2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiAh
KGlzQW5pbWF0ZWQoKSAmJiBpbmRleCA9PSBjdXJyZW50RnJhbWVJbmRleCgpKTsKLX0KLQotdm9p
ZCBCaXRtYXBJbWFnZVNvdXJjZTo6ZGVzdHJveU5hdGl2ZUltYWdlQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5oYXNOYXRpdmVJbWFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSA9IG1fZnJhbWVzW2luZGV4XS5j
bGVhckltYWdlKCk7Ci0gICAgZGVjb2RlZFNpemVEZWNyZWFzZWQoZGVjb2RlZFNpemUpOwotCi0g
ICAgaWYgKG1fd29ya1F1ZXVlKQotICAgICAgICBtX3dvcmtRdWV1ZS0+ZGlkRGVzdHJveU5hdGl2
ZUltYWdlQXRJbmRleChpbmRleCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmRpZERl
Y29kZVByb3BlcnRpZXModW5zaWduZWQgZGVjb2RlZFByb3BlcnRpZXNTaXplKQotewotICAgIGlm
IChtX2RlY29kZWRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZWNvZGVkUHJvcGVydGll
c1NpemVDaGFuZ2VkKGRlY29kZWRQcm9wZXJ0aWVzU2l6ZSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1h
Z2VTb3VyY2U6OmRpZENhY2hlTmF0aXZlSW1hZ2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewot
ICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3dvcmtRdWV1ZSkKLSAgICAgICAgbV93b3JrUXVldWUtPmRpZENhY2hlTmF0aXZlSW1h
Z2VBdEluZGV4KGluZGV4KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZVNvdXJjZTo6Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9kZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY3VycmVudEZyYW1lSW5kZXgo
KSk7Ci19Ci0KLUVuY29kZWREYXRhU3RhdHVzIEJpdG1hcEltYWdlU291cmNlOjpzZXREYXRhKEZy
YWdtZW50ZWRTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpVbmtub3duOwot
Ci0gICAgUmVmUHRyIGRlY29kZXIgPSB0aGlzLT5kZWNvZGVyKGRhdGEpOwotICAgIGlmICghZGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIEVuY29kZWREYXRhU3RhdHVzOjpVbmtub3duOwotCi0gICAg
ZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICByZXR1cm4gZW5j
b2RlZERhdGFTdGF0dXMoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZVNvdXJjZTo6cmVzZXREYXRh
KCkKLXsKLSAgICBpZiAoIW1fZGVjb2RlciB8fCAhaXNEZWNvZGluZ1dvcmtRdWV1ZUlkbGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0RGF0YShtX2JpdG1hcEltYWdlLmRhdGEoKSwgbV9k
ZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZVNvdXJj
ZTo6c3RhcnRBbmltYXRpb24oKQotewotICAgIHN0YXJ0QW5pbWF0aW9uKFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQsIERlY29kaW5nTW9kZTo6U3luY2hyb25vdXMpOwotfQotCi1ib29sIEJpdG1h
cEltYWdlU291cmNlOjpzdGFydEFuaW1hdGlvbihTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBm
cmFtZUFuaW1hdG9yID0gdGhpcy0+ZnJhbWVBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gZnJh
bWVBbmltYXRvci0+c3RhcnRBbmltYXRpb24oc3Vic2FtcGxpbmdMZXZlbCwgb3B0aW9ucyk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEJpdG1hcEltYWdlU291cmNlOjpzdG9wQW5pbWF0
aW9uKCkKLXsKLSAgICBpZiAoIW1fZnJhbWVBbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9mcmFtZUFuaW1hdG9yLT5zdG9wQW5pbWF0aW9uKCk7Ci0gICAgc3RvcERlY29kaW5nV29y
a1F1ZXVlKCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OnJlc2V0QW5pbWF0aW9uKCkK
LXsKLSAgICBpZiAoIW1fZnJhbWVBbmltYXRvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9m
cmFtZUFuaW1hdG9yLT5yZXNldEFuaW1hdGlvbigpOwotfQotCi1ib29sIEJpdG1hcEltYWdlU291
cmNlOjppc0FuaW1hdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhbWVDb3VudCgpID4gMSAm
JiByZXBldGl0aW9uQ291bnQoKSAhPSBSZXBldGl0aW9uQ291bnROb25lOwotfQotCi1ib29sIEJp
dG1hcEltYWdlU291cmNlOjppc0FuaW1hdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJh
bWVBbmltYXRvciAmJiBtX2ZyYW1lQW5pbWF0b3ItPmlzQW5pbWF0aW5nKCk7Ci19Ci0KLWJvb2wg
Qml0bWFwSW1hZ2VTb3VyY2U6OmlzQW5pbWF0aW9uQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fZnJhbWVBbmltYXRvciAmJiAhbV9mcmFtZUFuaW1hdG9yLT5pc0FuaW1hdGlvbkFsbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSW1hZ2VPYnNlcnZlciBtYXkgZGlz
YWxsb3cgYW5pbWF0aW9uLgotICAgIGlmIChhdXRvIG9ic2VydmVyID0gbV9iaXRtYXBJbWFnZS5p
bWFnZU9ic2VydmVyKCkpCi0gICAgICAgIHJldHVybiBvYnNlcnZlci0+YWxsb3dzQW5pbWF0aW9u
KG1fYml0bWFwSW1hZ2UpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQml0bWFwSW1h
Z2VTb3VyY2U6OmlzTGFyZ2VGb3JEZWNvZGluZygpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IHNpemVJ
bkJ5dGVzID0gc2l6ZShJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6Tm9uZSkuYXJlYSgp
ICogc2l6ZW9mKHVpbnQzMl90KTsKLSAgICByZXR1cm4gc2l6ZUluQnl0ZXMgPiAoaXNBbmltYXRl
ZCgpID8gMTAwICogS0IgOiA1MDAgKiBLQik7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2VTb3VyY2U6
OmlzRGVjb2RpbmdXb3JrUXVldWVJZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fd29ya1F1
ZXVlIHx8IG1fd29ya1F1ZXVlLT5pc0lkbGUoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZVNvdXJj
ZTo6c3RvcERlY29kaW5nV29ya1F1ZXVlKCkKLXsKLSAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1h
Z2VTb3VyY2U6OiVzIC0gJXAgLSB1cmw6ICVzLiBEZWNvZGluZyB3b3JrIHF1ZXVlIHdpbGwgYmUg
c3RvcHBlZC4iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVURjgoKSk7Ci0KLSAgICBpZiAo
aXNEZWNvZGluZ1dvcmtRdWV1ZUlkbGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93b3Jr
UXVldWUtPnN0b3AoKTsKLX0KLQotYm9vbCBCaXRtYXBJbWFnZVNvdXJjZTo6aXNQZW5kaW5nRGVj
b2RpbmdBdEluZGV4KHVuc2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucykgY29uc3QKLXsKLSAgICBpZiAo
IW1fd29ya1F1ZXVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV93b3Jr
UXVldWUtPmlzUGVuZGluZ0RlY29kaW5nQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwg
b3B0aW9ucyk7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2VTb3VyY2U6OmlzUGVuZGluZ0RyYXdpbmdB
dEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIGlmICghbV93b3JrUXVldWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3dvcmtRdWV1ZS0+aXNQZW5kaW5n
RHJhd2luZ0F0SW5kZXgoaW5kZXgpOwotfQotCi1ib29sIEJpdG1hcEltYWdlU291cmNlOjppc0Nv
bXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBvcHRpb25zKSBjb25z
dAotewotICAgIHJldHVybiBmcmFtZUF0SW5kZXgoaW5kZXgpLmhhc0RlY29kZWROYXRpdmVJbWFn
ZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBvcHRpb25zKTsKLX0KLQot
dm9pZCBCaXRtYXBJbWFnZVNvdXJjZTo6Y2xlYXJGcmFtZUF0SW5kZXgodW5zaWduZWQgaW5kZXgp
Ci17Ci0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9mcmFtZXNbaW5kZXhdLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3Vy
Y2U6OmRlY29kZShGdW5jdGlvbjx2b2lkKERlY29kaW5nU3RhdHVzKT4mJiBkZWNvZGVDYWxsYmFj
aykKLXsKLSAgICBtX2RlY29kZUNhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShkZWNvZGVDYWxsYmFj
aykpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gY3VycmVudEZyYW1lSW5kZXgoKTsKLQotICAgIGlm
IChpc1BlbmRpbmdEZWNvZGluZ0F0SW5kZXgoaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1
bHQsIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKSkgewotICAgICAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2VTb3VyY2U6OiVzIC0gJXAgLSB1cmw6ICVzLiBGcmFtZSBhdCBpbmRleCA9ICVk
IGlzIGJlaW5nIGRlY29kZWQuIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIGlu
ZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgaXNDb21wYXRpYmxlTmF0
aXZlSW1hZ2UgPSBpc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWw6OkRlZmF1bHQsIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKTsKLSAgICBhdXRv
IGZyYW1lQW5pbWF0b3IgPSB0aGlzLT5mcmFtZUFuaW1hdG9yKCk7Ci0KLSAgICBpZiAoZnJhbWVB
bmltYXRvciAmJiAoZnJhbWVBbmltYXRvci0+aGFzRXZlckFuaW1hdGVkKCkgfHwgaXNDb21wYXRp
YmxlTmF0aXZlSW1hZ2UpKSB7Ci0gICAgICAgIC8vIHN0YXJ0QW5pbWF0aW9uKCkgYWx3YXlzIGRl
Y29kZXMgdGhlIG5leHRGcmFtZSB3aGljaCBpcyBjdXJyZW50RnJhbWVJbmRleCArIDEuCi0gICAg
ICAgIC8vIElmIHByaW1hcnlGcmFtZUluZGV4ID0gMCwgdGhlbiB0aGUgc2VxdWVuY2Ugb2YgZGVj
b2RpbmcgaXMgeyAxLCAyLCAuLiwgbiwgMCwgMSwgLi4ufS4KLSAgICAgICAgaWYgKHN0YXJ0QW5p
bWF0aW9uKFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIERlY29kaW5nTW9kZTo6QXN5bmNocm9u
b3VzKSkgewotICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlU291cmNlOjolcyAt
ICVwIC0gdXJsOiAlcy4gQW5pbWF0b3IgaGFzIHJlcXVlc3RlZCBkZWNvZGluZyBuZXh0IGZyYW1l
IGF0IGluZGV4ID0gJWQuIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIGluZGV4
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXND
b21wYXRpYmxlTmF0aXZlSW1hZ2UpIHsKLSAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
U291cmNlOjolcyAtICVwIC0gdXJsOiAlcy4gRGVjb2RpbmcgZm9yIGZyYW1lIGF0IGluZGV4ID0g
JWQgd2lsbCBiZSByZXF1ZXN0ZWQuIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCks
IGluZGV4KTsKLSAgICAgICAgcmVxdWVzdE5hdGl2ZUltYWdlQXRJbmRleChpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbDo6RGVmYXVsdCwgSW1hZ2VBbmltYXRpbmdTdGF0ZTo6Tm8sIHsgRGVjb2RpbmdN
b2RlOjpBc3luY2hyb25vdXMgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0co
SW1hZ2VzLCAiQml0bWFwSW1hZ2VTb3VyY2U6OiVzIC0gJXAgLSB1cmw6ICVzLiBGcmFtZSBhdCBp
bmRleCA9ICVkIHdhcyBkZWNvZGVkIGZvciBuYXR1cmFsIHNpemUuIiwgX19GVU5DVElPTl9fLCB0
aGlzLCBzb3VyY2VVVEY4KCksIGluZGV4KTsKLSAgICBjYWxsRGVjb2RlQ2FsbGJhY2tzKERlY29k
aW5nU3RhdHVzOjpDb21wbGV0ZSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmNhbGxE
ZWNvZGVDYWxsYmFja3MoRGVjb2RpbmdTdGF0dXMgc3RhdHVzKQotewotICAgIGlmIChtX2RlY29k
ZUNhbGxiYWNrcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGF1dG8mIGRl
Y29kZUNhbGxiYWNrIDogbV9kZWNvZGVDYWxsYmFja3MpCi0gICAgICAgIGRlY29kZUNhbGxiYWNr
KHN0YXR1cyk7Ci0gICAgbV9kZWNvZGVDYWxsYmFja3MuY2xlYXIoKTsKLX0KLQotdm9pZCBCaXRt
YXBJbWFnZVNvdXJjZTo6aW1hZ2VGcmFtZUF0SW5kZXhBdmFpbGFibGUodW5zaWduZWQgaW5kZXgs
IEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0aW5nU3RhdGUsIERlY29kaW5nU3RhdHVzIGRlY29k
aW5nU3RhdHVzKQotewotICAgIEFTU0VSVF9VTlVTRUQoaW5kZXgsIGluZGV4IDwgZnJhbWVDb3Vu
dCgpKTsKLQotICAgIC8vIERlY29kZSBjYWxsYmFja3MgaGF2ZSB0byBjYWxsZWQgcmVnYXJkbGVz
cyBvZiB0aGUgZGVjb2Rpbmcgc3RhdHVzLgotICAgIC8vIERlY29kaW5nIHByb21pc2VzIGhhdmUg
dG8gcmVzb2x2ZWQgb3IgcmVqZWN0ZWQuCi0gICAgY2FsbERlY29kZUNhbGxiYWNrcyhkZWNvZGlu
Z1N0YXR1cyk7Ci0KLSAgICBpZiAoZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6Oklu
dmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIG9ic2VydmVyID0gbV9iaXRt
YXBJbWFnZS5pbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIG9ic2VydmVyLT5pbWFnZUZyYW1lQXZh
aWxhYmxlKG1fYml0bWFwSW1hZ2UsIGFuaW1hdGluZ1N0YXRlLCBudWxscHRyLCBkZWNvZGluZ1N0
YXR1cyk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmltYWdlRnJhbWVEZWNvZGVBdElu
ZGV4SGFzRmluaXNoZWQodW5zaWduZWQgaW5kZXgsIEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0
aW5nU3RhdGUsIERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQotewotICAgIC8vIERlcGVu
ZGluZyBvbiBpdHMgdGltZXIsIHRoZSBhbmltYXRvciBtYXkgY2FsbCBvciBwb3N0cG9uZSBjYWxs
aW5nIGltYWdlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBpZiAobV9mcmFtZUFuaW1hdG9yICYmIG1f
ZnJhbWVBbmltYXRvci0+aW1hZ2VGcmFtZURlY29kZUF0SW5kZXhIYXNGaW5pc2hlZChpbmRleCwg
YW5pbWF0aW5nU3RhdGUsIGRlY29kaW5nU3RhdHVzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW1hZ2VGcmFtZUF0SW5kZXhBdmFpbGFibGUoaW5kZXgsIGFuaW1hdGluZ1N0YXRlLCBkZWNvZGlu
Z1N0YXR1cyk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmltYWdlRnJhbWVEZWNvZGVB
dEluZGV4SGFzRmluaXNoZWQodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbCwgSW1hZ2VBbmltYXRpbmdTdGF0ZSBhbmltYXRpbmdTdGF0ZSwgY29uc3QgRGVj
b2RpbmdPcHRpb25zJiBvcHRpb25zLCBSZWZQdHI8TmF0aXZlSW1hZ2U+JiYgbmF0aXZlSW1hZ2Up
Ci17Ci0gICAgQVNTRVJUKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpKTsKLQotICAgIGlmICghbmF0
aXZlSW1hZ2UpIHsKLSAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlU291cmNlOjolcyAt
ICVwIC0gdXJsOiAlcy4gRnJhbWUgYXQgaW5kZXggPSAlZCBoYXMgYmVlbiBmYWlsZWQuIiwgX19G
VU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIGluZGV4KTsKLSAgICAgICAgY2xlYXJGcmFt
ZUF0SW5kZXgoaW5kZXgpOwotICAgICAgICBpbWFnZUZyYW1lRGVjb2RlQXRJbmRleEhhc0Zpbmlz
aGVkKGluZGV4LCBhbmltYXRpbmdTdGF0ZSwgRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZVNvdXJjZTo6JXMgLSAl
cCAtIHVybDogJXMuIEZyYW1lIGF0IGluZGV4ID0gJWQgaGFzIGJlZW4gZGVjb2RlZC4iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVURjgoKSwgaW5kZXgpOwotCi0gICAgICAgIGNhY2hlTmF0
aXZlSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBvcHRpb25zLCBuYXRpdmVJ
bWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgZGlkQ2FjaGVOYXRpdmVJbWFnZUF0SW5k
ZXgoaW5kZXgpOwotICAgICAgICBpbWFnZUZyYW1lRGVjb2RlQXRJbmRleEhhc0ZpbmlzaGVkKGlu
ZGV4LCBhbmltYXRpbmdTdGF0ZSwgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpKTsK
LSAgICB9Ci0KLSAgICAvLyBEbyBub3QgbGVhdmUgYW55IGRlY29kaW5nIHdvcmsgcXVldWUgaWRs
ZSBmb3Igc3RhdGljIGltYWdlcy4KLSAgICBpZiAoYW5pbWF0aW5nU3RhdGUgPT0gSW1hZ2VBbmlt
YXRpbmdTdGF0ZTo6Tm8pCi0gICAgICAgIHN0b3BEZWNvZGluZ1dvcmtRdWV1ZSgpOwotfQotCi11
bnNpZ25lZCBCaXRtYXBJbWFnZVNvdXJjZTo6Y3VycmVudEZyYW1lSW5kZXgoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2ZyYW1lQW5pbWF0b3IgPyBtX2ZyYW1lQW5pbWF0b3ItPmN1cnJlbnRGcmFt
ZUluZGV4KCkgOiBwcmltYXJ5RnJhbWVJbmRleCgpOwotfQotCi12b2lkIEJpdG1hcEltYWdlU291
cmNlOjpjYWNoZU1ldGFkYXRhQXRJbmRleCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lc1tpbmRleF07Ci0KLSAgICBpZiAoZnJhbWUubV9k
ZWNvZGluZ09wdGlvbnMuaGFzU2l6ZUZvckRyYXdpbmcoKSkgewotICAgICAgICBBU1NFUlQoZnJh
bWUuaGFzTmF0aXZlSW1hZ2UoKSk7Ci0gICAgICAgIGZyYW1lLm1fc2l6ZSA9IGZyYW1lLm5hdGl2
ZUltYWdlKCktPnNpemUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZnJhbWUubV9zaXplID0gbV9k
ZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAg
IGZyYW1lLm1fZGVuc2l0eUNvcnJlY3RlZFNpemUgPSBtX2RlY29kZXItPmRlbnNpdHlDb3JyZWN0
ZWRTaXplQXRJbmRleChpbmRleCk7Ci0gICAgZnJhbWUubV9zdWJzYW1wbGluZ0xldmVsID0gc3Vi
c2FtcGxpbmdMZXZlbDsKLSAgICBmcmFtZS5tX2RlY29kaW5nT3B0aW9ucyA9IG9wdGlvbnM7Ci0g
ICAgZnJhbWUubV9oYXNBbHBoYSA9IG1fZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIGZyYW1lLm1fb3JpZW50YXRpb24gPSBtX2RlY29kZXItPmZyYW1lT3JpZW50YXRp
b25BdEluZGV4KGluZGV4KTsKLSAgICBmcmFtZS5tX2RlY29kaW5nU3RhdHVzID0gbV9kZWNvZGVy
LT5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0
ZSA6IERlY29kaW5nU3RhdHVzOjpQYXJ0aWFsOwotCi0gICAgaWYgKHJlcGV0aXRpb25Db3VudCgp
KQotICAgICAgICBmcmFtZS5tX2R1cmF0aW9uID0gbV9kZWNvZGVyLT5mcmFtZUR1cmF0aW9uQXRJ
bmRleChpbmRleCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmNhY2hlTmF0aXZlSW1h
Z2VBdEluZGV4KHVuc2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucywgUmVmPE5hdGl2ZUltYWdlPiYmIG5h
dGl2ZUltYWdlKQotewotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRlc3Ryb3lOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgpOwotCi0gICAg
Ly8gRG8gbm90IGNhY2hlIE5hdGl2ZUltYWdlIGlmIGFkZGluZyBpdHMgZnJhbWVCeWVzIHRvIE1l
bW9yeUNhY2hlIHdpbGwgY2F1c2UgbnVtZXJpY2FsIG92ZXJmbG93LgotICAgIHNpemVfdCBmcmFt
ZUJ5dGVzID0gbmF0aXZlSW1hZ2UtPnNpemUoKS51bmNsYW1wZWRBcmVhKCkgKiBzaXplb2YodWlu
dDMyX3QpOwotICAgIGlmICghaXNJbkJvdW5kczx1bnNpZ25lZD4oZnJhbWVCeXRlcyArIG1fZGVj
b2RlZFNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBmcmFtZSA9IG1fZnJhbWVz
W2luZGV4XTsKLSAgICBmcmFtZS5tX25hdGl2ZUltYWdlID0gV1RGTW92ZShuYXRpdmVJbWFnZSk7
Ci0KLSAgICBjYWNoZU1ldGFkYXRhQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgb3B0
aW9ucyk7Ci0gICAgZGVjb2RlZFNpemVJbmNyZWFzZWQoZnJhbWUuZnJhbWVCeXRlcygpKTsKLQot
ICAgIGlmIChmcmFtZUF0SW5kZXgoaW5kZXgpLmlzQ29tcGxldGUoKSkKLSAgICAgICAgKyttX2Rl
Y29kZUNvdW50Rm9yVGVzdGluZzsKLX0KLQotY29uc3QgSW1hZ2VGcmFtZSYgQml0bWFwSW1hZ2VT
b3VyY2U6OmZyYW1lQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZTo6ZGVmYXVs
dEZyYW1lKCk7Ci0KLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdOwotfQotCi1jb25zdCBJbWFn
ZUZyYW1lJiBCaXRtYXBJbWFnZVNvdXJjZTo6ZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZCh1bnNp
Z25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQotewotICAgIGlm
ICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCk7
Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gSW1h
Z2VGcmFtZTo6ZGVmYXVsdEZyYW1lKCk7Ci0KLSAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJh
bWVzW2luZGV4XTsKLSAgICBpZiAoZnJhbWUuaXNDb21wbGV0ZSgpICYmIGZyYW1lLnN1YnNhbXBs
aW5nTGV2ZWwoKSA9PSBzdWJzYW1wbGluZ0xldmVsKQotICAgICAgICByZXR1cm4gZnJhbWU7Ci0K
LSAgICBkZXN0cm95TmF0aXZlSW1hZ2VBdEluZGV4KGluZGV4KTsKLQotICAgIC8vIFJldHJpZXZl
IHRoZSBtZXRhZGF0YSBmcm9tIEltYWdlRGVjb2RlciBpZiB0aGUgSW1hZ2VGcmFtZSBpc24ndCBj
b21wbGV0ZS4KLSAgICBjYWNoZU1ldGFkYXRhQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgeyB9KTsKLSAgICByZXR1cm4gZnJhbWU7Ci19Ci0KLURlY29kaW5nU3RhdHVzIEJpdG1hcElt
YWdlU291cmNlOjpyZXF1ZXN0TmF0aXZlSW1hZ2VBdEluZGV4KHVuc2lnbmVkIGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0
aW5nU3RhdGUsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRGVjb2RpbmdTdGF0dXM6Oklu
dmFsaWQ7Ci0KLSAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2VTb3VyY2U6OiVzIC0gJXAgLSB1
cmw6ICVzLiBEZWNvZGluZyBmb3IgZnJhbWUgYXQgaW5kZXggPSAlZCB3aWxsIGJlIHJlcXVlc3Rl
ZC4iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVURjgoKSwgaW5kZXgpOwotCi0gICAgd29y
a1F1ZXVlKCkuZGlzcGF0Y2goeyBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgYW5pbWF0aW5nU3Rh
dGUsIG9wdGlvbnMgfSk7Ci0KLSAgICBpZiAobV9jbGVhckRlY29kZXJBZnRlckFzeW5jRnJhbWVS
ZXF1ZXN0Rm9yVGVzdGluZykKLSAgICAgICAgcmVzZXREYXRhKCk7Ci0KLSAgICByZXR1cm4gRGVj
b2RpbmdTdGF0dXM6OkRlY29kaW5nOwotfQotCi1EZWNvZGluZ1N0YXR1cyBCaXRtYXBJbWFnZVNv
dXJjZTo6cmVxdWVzdE5hdGl2ZUltYWdlQXRJbmRleElmTmVlZGVkKHVuc2lnbmVkIGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlQW5pbWF0aW5nU3RhdGUgYW5p
bWF0aW5nU3RhdGUsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAo
aW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRGVjb2RpbmdTdGF0dXM6
OkludmFsaWQ7Ci0KLSAgICBpZiAoaXNQZW5kaW5nRGVjb2RpbmdBdEluZGV4KGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBvcHRpb25zKSkgewotICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1h
Z2VTb3VyY2U6OiVzIC0gJXAgLSB1cmw6ICVzLiBGcmFtZSBhdCBpbmRleCA9ICVkIGlzIGJlaW5n
IGRlY29kZWQuIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIGluZGV4KTsKLSAg
ICAgICAgcmV0dXJuIERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKLSAgICB9Ci0KLSAgICAvLyBp
c0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoKSByZXR1cm5zIHRydWUgb25seSBpZiB0aGUg
ZnJhbWUgaXMgY29tcGxldGUuCi0gICAgaWYgKGlzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgb3B0aW9ucykpCi0gICAgICAgIHJldHVybiBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGU7Ci0KLSAgICByZXR1cm4gcmVxdWVzdE5hdGl2ZUltYWdlQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgYW5pbWF0aW5nU3RhdGUsIG9wdGlvbnMpOwot
fQotCi1FeHBlY3RlZDxSZWY8TmF0aXZlSW1hZ2U+LCBEZWNvZGluZ1N0YXR1cz4gQml0bWFwSW1h
Z2VTb3VyY2U6Om5hdGl2ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQodW5zaWduZWQgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkpCi0gICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChEZWNvZGluZ1N0YXR1czo6SW52YWxpZCk7Ci0KLSAgICAv
LyBOZXZlciBkZWNvZGUgdGhlIHNhbWUgZnJhbWUgZnJvbSB0d28gZGlmZmVyZW50IHRocmVhZHMu
Ci0gICAgaWYgKGlzUGVuZGluZ0RlY29kaW5nQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgb3B0aW9ucykpIHsKLSAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlU291cmNlOjol
cyAtICVwIC0gdXJsOiAlcy4gRnJhbWUgYXQgaW5kZXggPSAlZCBpcyBiZWluZyBkZWNvZGVkLiIs
IF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVRGOCgpLCBpbmRleCk7Ci0gICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChEZWNvZGluZ1N0YXR1czo6RGVjb2RpbmcpOwotICAgIH0KLQotICAg
IGlmICghaXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBvcHRpb25zKSkgewotICAgICAgICBQbGF0Zm9ybUltYWdlUHRyIHBsYXRmb3JtSW1hZ2Ug
PSBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKTsKLQotICAgICAgICBSZWZQdHIgbmF0aXZl
SW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUocGxhdGZvcm1JbWFnZSkpOwotICAg
ICAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKTsKLQotICAgICAgICBjYWNoZU5hdGl2ZUltYWdlQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cywg
bmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgaWYgKFJlZlB0ciBu
YXRpdmVJbWFnZSA9IGZyYW1lQXRJbmRleChpbmRleCkubmF0aXZlSW1hZ2UoKSkKLSAgICAgICAg
cmV0dXJuIG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCk7Ci0KLSAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpOwotfQotCi1FeHBlY3RlZDxSZWY8TmF0
aXZlSW1hZ2U+LCBEZWNvZGluZ1N0YXR1cz4gQml0bWFwSW1hZ2VTb3VyY2U6Om5hdGl2ZUltYWdl
QXRJbmRleFJlcXVlc3RJZk5lZWRlZCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKTsKLQotICAgIGF1dG8gc3RhdHVzID0gcmVxdWVz
dE5hdGl2ZUltYWdlQXRJbmRleElmTmVlZGVkKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFn
ZUFuaW1hdGluZ1N0YXRlOjpObywgb3B0aW9ucyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6SW52YWxpZCB8fCBzdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nKQot
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoc3RhdHVzKTsKLQotICAgIGlmIChSZWZQdHIg
bmF0aXZlSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaW5kZXgpLm5hdGl2ZUltYWdlKCkpCi0gICAgICAg
IHJldHVybiBuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgpOwotCi0gICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKTsKLX0KLQotRXhwZWN0ZWQ8UmVmPE5h
dGl2ZUltYWdlPiwgRGVjb2RpbmdTdGF0dXM+IEJpdG1hcEltYWdlU291cmNlOjpuYXRpdmVJbWFn
ZUF0SW5kZXhGb3JEcmF3aW5nKHVuc2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAo
b3B0aW9ucy5kZWNvZGluZ01vZGUoKSA9PSBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cykKLSAg
ICAgICAgcmV0dXJuIG5hdGl2ZUltYWdlQXRJbmRleFJlcXVlc3RJZk5lZWRlZChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIG5hdGl2ZUltYWdlQXRJbmRleENh
Y2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIG9wdGlvbnMpOwotfQotCi1FeHBl
Y3RlZDxSZWY8TmF0aXZlSW1hZ2U+LCBEZWNvZGluZ1N0YXR1cz4gQml0bWFwSW1hZ2VTb3VyY2U6
OmN1cnJlbnROYXRpdmVJbWFnZUZvckRyYXdpbmcoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc3RhcnRBbmlt
YXRpb24oc3Vic2FtcGxpbmdMZXZlbCwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIG5hdGl2ZUltYWdl
QXRJbmRleEZvckRyYXdpbmcoY3VycmVudEZyYW1lSW5kZXgoKSwgc3Vic2FtcGxpbmdMZXZlbCwg
b3B0aW9ucyk7Ci19Ci0KLVJlZlB0cjxOYXRpdmVJbWFnZT4gQml0bWFwSW1hZ2VTb3VyY2U6Om5h
dGl2ZUltYWdlQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBhdXRvIG5hdGl2ZUltYWdl
ID0gbmF0aXZlSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCk7Ci0gICAgaWYgKCFuYXRp
dmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFJlZlB0ciB7IG5h
dGl2ZUltYWdlLT5wdHIoKSB9OwotfQotCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IEJpdG1hcEltYWdl
U291cmNlOjpwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlQXRJbmRleCh1bnNpZ25lZCBpbmRleCwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHIgbmF0aXZlSW1hZ2Ug
PSBuYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaXplID0gIHRoaXMtPnNpemUoKTsKLSAg
ICBhdXRvIHNvdXJjZVNpemUgPSB0aGlzLT5zb3VyY2VTaXplKCk7Ci0KLSAgICBpZiAob3JpZW50
YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246Ok5vbmUgJiYgc2l6ZSA9PSBz
b3VyY2VTaXplKQotICAgICAgICByZXR1cm4gbmF0aXZlSW1hZ2U7Ci0KLSAgICBpZiAob3JpZW50
YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246OkZyb21JbWFnZSkKLSAgICAg
ICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0KLSAgICBS
ZWZQdHIgYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdQdXJwb3Nl
OjpVbnNwZWNpZmllZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBuYXRpdmVJbWFn
ZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gRmxvYXRSZWN0IHsgRmxvYXRQb2ludCgp
LCBzaXplIH07Ci0gICAgYXV0byBzb3VyY2VSZWN0ID0gRmxvYXRSZWN0IHsgRmxvYXRQb2ludCgp
LCBzb3VyY2VTaXplIH07Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3TmF0aXZlSW1hZ2Uo
Km5hdGl2ZUltYWdlLCBkZXN0aW5hdGlvblJlY3QsIHNvdXJjZVJlY3QsIHsgb3JpZW50YXRpb24g
fSk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUo
YnVmZmVyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhVHlwZT4KLU1ldGFkYXRh
VHlwZSBCaXRtYXBJbWFnZVNvdXJjZTo6aW1hZ2VNZXRhZGF0YShNZXRhZGF0YVR5cGUmIGNhY2hl
ZFZhbHVlLCBjb25zdCBNZXRhZGF0YVR5cGUmIGRlZmF1bHRWYWx1ZSwgQ2FjaGVkRmxhZyBjYWNo
ZWRGbGFnLCBNZXRhZGF0YVR5cGUgKEltYWdlRGVjb2Rlcjo6KmZ1bmN0b3IpKCkgY29uc3QpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fY2FjaGVkRmxhZ3MuY29udGFpbnMoY2FjaGVkRmxhZykpCi0gICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKLQotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgaWYgKCFtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJs
ZSgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotCi0gICAgY2FjaGVkVmFsdWUgPSAo
Km1fZGVjb2Rlci4qZnVuY3RvcikoKTsKLSAgICBtX2NhY2hlZEZsYWdzLmFkZChjYWNoZWRGbGFn
KTsKLSAgICBjb25zdF9jYXN0PEJpdG1hcEltYWdlU291cmNlJj4oKnRoaXMpLmRpZERlY29kZVBy
b3BlcnRpZXMobV9kZWNvZGVyLT5ieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSk7
Ci0gICAgcmV0dXJuIGNhY2hlZFZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YVR5cGU+Ci1NZXRhZGF0YVR5cGUgQml0bWFwSW1hZ2VTb3VyY2U6OnByaW1hcnlOYXRpdmVJbWFn
ZU1ldGFkYXRhKE1ldGFkYXRhVHlwZSYgY2FjaGVkVmFsdWUsIGNvbnN0IE1ldGFkYXRhVHlwZSYg
ZGVmYXVsdFZhbHVlLCBDYWNoZWRGbGFnIGNhY2hlZEZsYWcsIE1ldGFkYXRhVHlwZSAoTmF0aXZl
SW1hZ2U6OipmdW5jdG9yKSgpIGNvbnN0KSBjb25zdAotewotICAgIGlmIChtX2NhY2hlZEZsYWdz
LmNvbnRhaW5zKGNhY2hlZEZsYWcpKQotICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Ci0KLSAg
ICBSZWZQdHIgbmF0aXZlSW1hZ2UgPSBjb25zdF9jYXN0PEJpdG1hcEltYWdlU291cmNlJj4oKnRo
aXMpLnByaW1hcnlOYXRpdmVJbWFnZSgpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7Ci0KLSAgICBjYWNoZWRWYWx1ZSA9ICgqbmF0aXZlSW1hZ2Uu
KmZ1bmN0b3IpKCk7Ci0gICAgbV9jYWNoZWRGbGFncy5hZGQoY2FjaGVkRmxhZyk7Ci0gICAgcmV0
dXJuIGNhY2hlZFZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YVR5cGU+Ci1N
ZXRhZGF0YVR5cGUgQml0bWFwSW1hZ2VTb3VyY2U6OnByaW1hcnlJbWFnZUZyYW1lTWV0YWRhdGEo
TWV0YWRhdGFUeXBlJiBjYWNoZWRWYWx1ZSwgQ2FjaGVkRmxhZyBjYWNoZWRGbGFnLCBNZXRhZGF0
YVR5cGUgKEltYWdlRnJhbWU6OipmdW5jdG9yKSgpIGNvbnN0KSBjb25zdAotewotICAgIGlmICht
X2NhY2hlZEZsYWdzLmNvbnRhaW5zKGNhY2hlZEZsYWcpKQotICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7Ci0KLSAgICBhdXRvJiBmcmFtZSA9IGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2VTb3VyY2Um
PigqdGhpcykucHJpbWFyeUltYWdlRnJhbWUoKTsKLQotICAgIC8vIERvbid0IGNhY2hlIGFueSB1
bmF2YWlsYWJsZSBmcmFtZSBtZXRhZGF0YS4gSnVzdCByZXR1cm4gdGhlIGRlZmF1bHQgbWV0YWRh
dGEuCi0gICAgaWYgKCFmcmFtZS5oYXNNZXRhZGF0YSgpKQotICAgICAgICByZXR1cm4gKGZyYW1l
LipmdW5jdG9yKSgpOwotCi0gICAgY2FjaGVkVmFsdWUgPSAoZnJhbWUuKmZ1bmN0b3IpKCk7Ci0g
ICAgbV9jYWNoZWRGbGFncy5hZGQoY2FjaGVkRmxhZyk7Ci0gICAgcmV0dXJuIGNhY2hlZFZhbHVl
OwotfQotCi1FbmNvZGVkRGF0YVN0YXR1cyBCaXRtYXBJbWFnZVNvdXJjZTo6ZW5jb2RlZERhdGFT
dGF0dXMoKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZU1ldGFkYXRhKG1fZW5jb2RlZERhdGFT
dGF0dXMsIEVuY29kZWREYXRhU3RhdHVzOjpVbmtub3duLCBDYWNoZWRGbGFnOjpFbmNvZGVkRGF0
YVN0YXR1cywgJkltYWdlRGVjb2Rlcjo6ZW5jb2RlZERhdGFTdGF0dXMpOwotfQotCi1JbnRTaXpl
IEJpdG1hcEltYWdlU291cmNlOjpzaXplKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNv
bnN0Ci17Ci0gICAgYXV0byBkZW5zaXR5Q29ycmVjdGVkU2l6ZSA9IHRoaXMtPmRlbnNpdHlDb3Jy
ZWN0ZWRTaXplKCk7Ci0gICAgaWYgKCFkZW5zaXR5Q29ycmVjdGVkU2l6ZSkKLSAgICAgICAgcmV0
dXJuIHNvdXJjZVNpemUob3JpZW50YXRpb24pOwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IElt
YWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpCi0gICAgICAgIG9yaWVudGF0
aW9uID0gdGhpcy0+b3JpZW50YXRpb24oKTsKLQotICAgIHJldHVybiBvcmllbnRhdGlvbi51c2Vz
V2lkdGhBc0hlaWdodCgpID8gZGVuc2l0eUNvcnJlY3RlZFNpemUtPnRyYW5zcG9zZWRTaXplKCkg
OiAqZGVuc2l0eUNvcnJlY3RlZFNpemU7Ci19Ci0KLUludFNpemUgQml0bWFwSW1hZ2VTb3VyY2U6
OnNvdXJjZVNpemUoSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBJ
bnRTaXplIHNpemU7Ci0KLSNpZiAhVVNFKENHKQotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3
ZSBoYXZlIGRlY29kZWQgdGhlIG1ldGFkYXRhLCBidXQgbm90IGZyYW1lIGNvbnRlbnRzIHlldC4g
SW4gdGhhdCBjYXNlIEltYWdlRGVjb2RlciBjbGFpbXMgdG8KLSAgICAvLyBoYXZlIHRoZSBzaXpl
IGF2YWlsYWJsZSwgYnV0IHRoZSBmcmFtZSBjYWNoZSBpcyBlbXB0eS4gUmV0dXJuIHRoZSBkZWNv
ZGVyIHNpemUgd2l0aG91dCBjYWNoaW5nIGluIHN1Y2ggY2FzZS4KLSAgICBpZiAobV9kZWNvZGVy
ICYmIG1fZnJhbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgc2l6ZSA9IG1fZGVjb2Rlci0+c2l6ZSgp
OwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBzaXplID0gcHJpbWFyeUltYWdlRnJhbWVNZXRh
ZGF0YShtX3NpemUsIENhY2hlZEZsYWc6OlNpemUsICZJbWFnZUZyYW1lOjpzaXplKTsKLQotICAg
IGlmIChvcmllbnRhdGlvbiA9PSBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6RnJvbUlt
YWdlKQotICAgICAgICBvcmllbnRhdGlvbiA9IHRoaXMtPm9yaWVudGF0aW9uKCk7Ci0KLSAgICBy
ZXR1cm4gb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNp
emUoKSA6IHNpemU7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4gQml0bWFwSW1hZ2VTb3Vy
Y2U6OmRlbnNpdHlDb3JyZWN0ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJpbWFyeUlt
YWdlRnJhbWVNZXRhZGF0YShtX2RlbnNpdHlDb3JyZWN0ZWRTaXplLCBDYWNoZWRGbGFnOjpEZW5z
aXR5Q29ycmVjdGVkU2l6ZSwgJkltYWdlRnJhbWU6OmRlbnNpdHlDb3JyZWN0ZWRTaXplKTsKLX0K
LQotSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBwcmltYXJ5SW1hZ2VGcmFtZU1ldGFkYXRhKG1fb3JpZW50YXRpb24s
IENhY2hlZEZsYWc6Ok9yaWVudGF0aW9uLCAmSW1hZ2VGcmFtZTo6b3JpZW50YXRpb24pOwotfQot
Ci11bnNpZ25lZCBCaXRtYXBJbWFnZVNvdXJjZTo6cHJpbWFyeUZyYW1lSW5kZXgoKSBjb25zdAot
ewotICAgIHJldHVybiBpbWFnZU1ldGFkYXRhKG1fcHJpbWFyeUZyYW1lSW5kZXgsIHN0ZDo6c2l6
ZV90KDApLCBDYWNoZWRGbGFnOjpQcmltYXJ5RnJhbWVJbmRleCwgJkltYWdlRGVjb2Rlcjo6cHJp
bWFyeUZyYW1lSW5kZXgpOwotfQotCi11bnNpZ25lZCBCaXRtYXBJbWFnZVNvdXJjZTo6ZnJhbWVD
b3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdlTWV0YWRhdGEobV9mcmFtZUNvdW50LCBz
dGQ6OnNpemVfdCgwKSwgQ2FjaGVkRmxhZzo6RnJhbWVDb3VudCwgJkltYWdlRGVjb2Rlcjo6ZnJh
bWVDb3VudCk7Ci19Ci0KLVJlcGV0aXRpb25Db3VudCBCaXRtYXBJbWFnZVNvdXJjZTo6cmVwZXRp
dGlvbkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW1hZ2VNZXRhZGF0YShtX3JlcGV0aXRp
b25Db3VudCwgc3RhdGljX2Nhc3Q8UmVwZXRpdGlvbkNvdW50PihSZXBldGl0aW9uQ291bnROb25l
KSwgQ2FjaGVkRmxhZzo6UmVwZXRpdGlvbkNvdW50LCAmSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9u
Q291bnQpOwotfQotCi1EZXN0aW5hdGlvbkNvbG9yU3BhY2UgQml0bWFwSW1hZ2VTb3VyY2U6OmNv
bG9yU3BhY2UoKSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5TmF0aXZlSW1hZ2VNZXRhZGF0
YShtX2NvbG9yU3BhY2UsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBDYWNoZWRGbGFn
OjpDb2xvclNwYWNlLCAmTmF0aXZlSW1hZ2U6OmNvbG9yU3BhY2UpOwotfQotCi1zdGQ6Om9wdGlv
bmFsPENvbG9yPiBCaXRtYXBJbWFnZVNvdXJjZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKLXsKLSAgICBpZiAoIWhhc1NvbGlkQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBwcmltYXJ5TmF0aXZlSW1hZ2VNZXRhZGF0YShtX3NpbmdsZVBp
eGVsU29saWRDb2xvciwgc3RkOjpvcHRpb25hbDxDb2xvcj4oKSwgQ2FjaGVkRmxhZzo6U2luZ2xl
UGl4ZWxTb2xpZENvbG9yLCAmTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik7Ci19
Ci0KLVN0cmluZyBCaXRtYXBJbWFnZVNvdXJjZTo6dXRpKCkgY29uc3QKLXsKLSNpZiBVU0UoQ0cp
Ci0gICAgcmV0dXJuIGltYWdlTWV0YWRhdGEobV91dGksIFN0cmluZygpLCBDYWNoZWRGbGFnOjpV
VEksICZJbWFnZURlY29kZXI6OnV0aSk7Ci0jZWxzZQotICAgIHJldHVybiBTdHJpbmcoKTsKLSNl
bmRpZgotfQotCi1TdHJpbmcgQml0bWFwSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaW1hZ2VNZXRhZGF0YShtX2ZpbGVuYW1lRXh0ZW5zaW9uLCBT
dHJpbmcoKSwgQ2FjaGVkRmxhZzo6RmlsZW5hbWVFeHRlbnNpb24sICZJbWFnZURlY29kZXI6OmZp
bGVuYW1lRXh0ZW5zaW9uKTsKLX0KLQotU3RyaW5nIEJpdG1hcEltYWdlU291cmNlOjphY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZU1ldGFkYXRhKG1f
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uLCBTdHJpbmcoKSwgQ2FjaGVkRmxhZzo6QWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uLCAmSW1hZ2VEZWNvZGVyOjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24p
OwotfQotCi1zdGQ6Om9wdGlvbmFsPEludFBvaW50PiBCaXRtYXBJbWFnZVNvdXJjZTo6aG90U3Bv
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdlTWV0YWRhdGEobV9ob3RTcG90LCBzdGQ6Om9w
dGlvbmFsPEludFBvaW50PigpLCBDYWNoZWRGbGFnOjpIb3RTcG90LCAmSW1hZ2VEZWNvZGVyOjpo
b3RTcG90KTsKLX0KLQotU3Vic2FtcGxpbmdMZXZlbCBCaXRtYXBJbWFnZVNvdXJjZTo6bWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAotewotICAgIGlmIChtX2NhY2hlZEZsYWdzLmNvbnRh
aW5zKENhY2hlZEZsYWc6Ok1heGltdW1TdWJzYW1wbGluZ0xldmVsKSkKLSAgICAgICAgcmV0dXJu
IG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWw7Ci0KLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0KLSAgICBpZiAoIW1fZGVjb2Rl
ci0+aXNTaXplQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0OwotCi0gICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHBy
b3ByaWF0ZSBmb3IgaU9TIHNpbmNlIHRoZSBpbWFnZQotICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9u
bHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCi0g
ICAgLy8gaWYgaW1hZ2Ugc3Vic2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4K
LSAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxp
bmcgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgYXV0byBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6
OkZpcnN0OwotCi0gICAgZm9yICg7IGxldmVsIDwgU3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKyts
ZXZlbCkgewotICAgICAgICBpZiAoZnJhbWVTaXplQXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpIDwg
bWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOwotICAgIG1fY2Fj
aGVkRmxhZ3MuYWRkKENhY2hlZEZsYWc6Ok1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKLSAgICBy
ZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKLX0KLQotU3Vic2FtcGxpbmdMZXZlbCBC
aXRtYXBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvciwgQWxsb3dJbWFn
ZVN1YnNhbXBsaW5nIGFsbG93SW1hZ2VTdWJzYW1wbGluZykKLXsKLSNpZiBVU0UoQ0cpCi0gICAg
aWYgKGFsbG93SW1hZ2VTdWJzYW1wbGluZyA9PSBBbGxvd0ltYWdlU3Vic2FtcGxpbmc6Ok5vKQot
ICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLQotICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KLSAg
ICBpZiAoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSAmJiBDR0NvbnRleHRHZXRUeXBlKGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCkpID09IGtDR0NvbnRleHRUeXBlUERGKQotICAgICAgICBy
ZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLQotICAgIGZsb2F0IHNjYWxlID0gc3Rk
OjptaW4oZmxvYXQoMSksIHN0ZDo6bWF4KHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9y
LmhlaWdodCgpKSk7Ci0gICAgaWYgKCEoc2NhbGUgPiAwICYmIHNjYWxlIDw9IDEpKQotICAgICAg
ICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLQotICAgIGludCByZXN1bHQgPSBz
dGQ6OmNlaWwoc3RkOjpsb2cyKDEgLyBzY2FsZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
dWJzYW1wbGluZ0xldmVsPihzdGQ6Om1pbihyZXN1bHQsIHN0YXRpY19jYXN0PGludD4obWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwoKSkpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotICAgIFVOVVNFRF9QQVJBTShzY2FsZUZhY3Rvcik7Ci0gICAgVU5VU0VEX1BBUkFNKGFsbG93
SW1hZ2VTdWJzYW1wbGluZyk7Ci0gICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7
Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBCaXRtYXBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRl
eCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25z
dAotewotICAgIHJldHVybiBjb25zdF9jYXN0PEJpdG1hcEltYWdlU291cmNlJj4oKnRoaXMpLmZy
YW1lQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpLnNpemUoKTsK
LX0KLQotU2Vjb25kcyBCaXRtYXBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgodW5z
aWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2VT
b3VyY2UmPigqdGhpcykuZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCkuZHVyYXRpb24o
KTsKLX0KLQotSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZVNvdXJjZTo6ZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8Qml0bWFwSW1hZ2VTb3VyY2UmPigqdGhpcykuZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChp
bmRleCkub3JpZW50YXRpb24oKTsKLX0KLQotRGVjb2RpbmdTdGF0dXMgQml0bWFwSW1hZ2VTb3Vy
Y2U6OmZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAotewot
ICAgIHJldHVybiBjb25zdF9jYXN0PEJpdG1hcEltYWdlU291cmNlJj4oKnRoaXMpLmZyYW1lQXRJ
bmRleENhY2hlSWZOZWVkZWQoaW5kZXgpLmRlY29kaW5nU3RhdHVzKCk7Ci19Ci0KLWNvbnN0IGNo
YXIqIEJpdG1hcEltYWdlU291cmNlOjpzb3VyY2VVVEY4KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iaXRtYXBJbWFnZS5zb3VyY2VVVEY4KCk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6
OnNldE1pbmltdW1EZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZyhTZWNvbmRzIGR1cmF0aW9uKQot
ewotICAgIHdvcmtRdWV1ZSgpLnNldE1pbmltdW1EZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZyhk
dXJhdGlvbik7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtdXRmOCIsIHNvdXJjZVVU
RjgoKSk7Ci0KLSAgICBpZiAobV93b3JrUXVldWUpCi0gICAgICAgIG1fd29ya1F1ZXVlLT5kdW1w
KHRzKTsKLQotICAgIGlmIChtX2ZyYW1lQW5pbWF0b3IpCi0gICAgICAgIG1fZnJhbWVBbmltYXRv
ci0+ZHVtcCh0cyk7Ci0KLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBzaXplKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZGVuc2l0eS1jb3JyZWN0ZWQtc2l6ZSIsIGRlbnNpdHlDb3JyZWN0
ZWRTaXplKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicHJpbWFyeS1mcmFtZS1pbmRleCIsIHBy
aW1hcnlGcmFtZUluZGV4KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZnJhbWUtY291bnQiLCBm
cmFtZUNvdW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVwZXRpdGlvbi1jb3VudCIsIHJl
cGV0aXRpb25Db3VudCgpKTsKLQotICAgIHRzLmR1bXBQcm9wZXJ0eSgidXRpIiwgdXRpKCkpOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsZW5hbWUtZXh0ZW5zaW9uIiwgZmlsZW5hbWVFeHRlbnNp
b24oKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhY2Nlc3NpYmlsaXR5LWRlc2NyaXB0aW9uIiwg
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpOwotCi0gICAgdHMuZHVtcFByb3BlcnR5KCJkZWNv
ZGVkLXNpemUiLCBtX2RlY29kZWRTaXplKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlY29kZS1j
b3VudC1mb3ItdGVzdGluZyIsIG1fZGVjb2RlQ291bnRGb3JUZXN0aW5nKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3
ZWQ2YTM3MjU2My4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkltYWdlRnJhbWVXb3JrUXVldWUuaCIKLSNpbmNsdWRlICJJbWFn
ZVNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEJpdG1hcEltYWdlOwotY2xhc3MgSW1hZ2VEZWNvZGVyOwotY2xhc3MgSW1h
Z2VGcmFtZUFuaW1hdG9yOwotCi1jbGFzcyBCaXRtYXBJbWFnZVNvdXJjZSA6IHB1YmxpYyBJbWFn
ZVNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCaXRtYXBJbWFnZVNvdXJjZT4gY3Jl
YXRlKEJpdG1hcEltYWdlJiwgQWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKLQotICAgIC8vIFN0YXRlCi0gICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXIqID0gbnVsbHB0cikgY29uc3Q7Ci0KLSAgICAvLyBFbmNvZGVkIGFuZCBkZWNv
ZGVkIGRhdGEKLSAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpIGZp
bmFsOwotICAgIHZvaWQgcmVzZXREYXRhKCk7Ci0gICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9Ci0KLSAgICAvLyBBbmltYXRpb24KLSAgICBi
b29sIGlzQW5pbWF0aW9uQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgLy8gRGVjb2RpbmcgJiBhbmlt
YXRpb24KLSAgICBib29sIGlzUGVuZGluZ0RlY29kaW5nQXRJbmRleCh1bnNpZ25lZCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJikgY29uc3Q7Ci0gICAgdm9p
ZCBjbGVhckZyYW1lQXRJbmRleCh1bnNpZ25lZCBpbmRleCk7Ci0gICAgdm9pZCBpbWFnZUZyYW1l
QXRJbmRleEF2YWlsYWJsZSh1bnNpZ25lZCBpbmRleCwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwgRGVj
b2RpbmdTdGF0dXMpOwotICAgIHZvaWQgaW1hZ2VGcmFtZURlY29kZUF0SW5kZXhIYXNGaW5pc2hl
ZCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwg
Y29uc3QgRGVjb2RpbmdPcHRpb25zJiwgUmVmUHRyPE5hdGl2ZUltYWdlPiYmKTsKLQotICAgIC8v
IEltYWdlRnJhbWUKLSAgICB1bnNpZ25lZCBwcmltYXJ5RnJhbWVJbmRleCgpIGNvbnN0IGZpbmFs
OwotCi0gICAgY29uc3QgSW1hZ2VGcmFtZSYgcHJpbWFyeUltYWdlRnJhbWUoKSBmaW5hbCB7IHJl
dHVybiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHByaW1hcnlGcmFtZUluZGV4KCkpOyB9Ci0K
LSAgICAvLyBOYXRpdmVJbWFnZQotICAgIERlY29kaW5nU3RhdHVzIHJlcXVlc3ROYXRpdmVJbWFn
ZUF0SW5kZXhJZk5lZWRlZCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VB
bmltYXRpbmdTdGF0ZSwgY29uc3QgRGVjb2RpbmdPcHRpb25zJik7Ci0KLSAgICBSZWZQdHI8TmF0
aXZlSW1hZ2U+IHByaW1hcnlOYXRpdmVJbWFnZSgpIGZpbmFsIHsgcmV0dXJuIG5hdGl2ZUltYWdl
QXRJbmRleChwcmltYXJ5RnJhbWVJbmRleCgpKTsgfQotCi0gICAgLy8gSW1hZ2UgTWV0YWRhdGEK
LSAgICB1bnNpZ25lZCBmcmFtZUNvdW50KCkgY29uc3QgZmluYWw7Ci0gICAgUmVwZXRpdGlvbkNv
dW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwotCi0gICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0
YQotICAgIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0
IGZpbmFsOwotICAgIERlY29kaW5nU3RhdHVzIGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFRlc3Rpbmcgc3VwcG9ydAotICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVVURjgoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBlbnVtIGNs
YXNzIENhY2hlZEZsYWcgOiB1aW50MTZfdCB7Ci0gICAgICAgIEVuY29kZWREYXRhU3RhdHVzICAg
ICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAxLAotICAgICAgICBEZW5zaXR5Q29ycmVjdGVkU2l6ZSAgICAgICAgPSAxIDw8IDIsCi0g
ICAgICAgIE9yaWVudGF0aW9uICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICAgICAgUHJp
bWFyeUZyYW1lSW5kZXggICAgICAgICAgID0gMSA8PCA0LAotICAgICAgICBGcmFtZUNvdW50ICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDUsCi0gICAgICAgIFJlcGV0aXRpb25Db3VudCAgICAgICAg
ICAgICA9IDEgPDwgNiwKLSAgICAgICAgQ29sb3JTcGFjZSAgICAgICAgICAgICAgICAgID0gMSA8
PCA3LAotICAgICAgICBTaW5nbGVQaXhlbFNvbGlkQ29sb3IgICAgICAgPSAxIDw8IDgsCi0KLSAg
ICAgICAgVVRJICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBGaWxl
bmFtZUV4dGVuc2lvbiAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24gICAgPSAxIDw8IDExLAotICAgICAgICBIb3RTcG90ICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDEyLAotICAgICAgICBNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCAgICAgPSAx
IDw8IDEzLAotICAgIH07Ci0KLSAgICBCaXRtYXBJbWFnZVNvdXJjZShCaXRtYXBJbWFnZSYsIEFs
cGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0KLSAgICAvLyBTdGF0ZQot
ICAgIEltYWdlRnJhbWVBbmltYXRvciogZnJhbWVBbmltYXRvcigpIGNvbnN0OwotICAgIEltYWdl
RnJhbWVXb3JrUXVldWUmIHdvcmtRdWV1ZSgpIGNvbnN0OwotCi0gICAgLy8gRW5jb2RlZCBhbmQg
ZGVjb2RlZCBkYXRhCi0gICAgdm9pZCBlbmNvZGVkRGF0YVN0YXR1c0NoYW5nZWQoRW5jb2RlZERh
dGFTdGF0dXMpOwotICAgIEVuY29kZWREYXRhU3RhdHVzIGRhdGFDaGFuZ2VkKEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCkgZmluYWw7Ci0gICAgRW5jb2RlZERh
dGFTdGF0dXMgc2V0RGF0YShGcmFnbWVudGVkU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwotCi0gICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQobG9uZyBsb25nIGRlY29kZWRT
aXplKTsKLSAgICB2b2lkIGRlY29kZWRTaXplSW5jcmVhc2VkKHVuc2lnbmVkIGRlY29kZWRTaXpl
KTsKLSAgICB2b2lkIGRlY29kZWRTaXplRGVjcmVhc2VkKHVuc2lnbmVkIGRlY29kZWRTaXplKTsK
LSAgICB2b2lkIGRlY29kZWRQcm9wZXJ0aWVzU2l6ZUNoYW5nZWQodW5zaWduZWQgZGVjb2RlZFBy
b3BlcnRpZXNTaXplKTsKLSAgICBib29sIGNhbkRlc3Ryb3lOYXRpdmVJbWFnZUF0SW5kZXgodW5z
aWduZWQgaW5kZXgpOwotICAgIHZvaWQgZGVzdHJveU5hdGl2ZUltYWdlQXRJbmRleCh1bnNpZ25l
ZCBpbmRleCk7Ci0KLSAgICB2b2lkIGRpZERlY29kZVByb3BlcnRpZXModW5zaWduZWQgZGVjb2Rl
ZFByb3BlcnRpZXNTaXplKTsKLSAgICB2b2lkIGRpZENhY2hlTmF0aXZlSW1hZ2VBdEluZGV4KHVu
c2lnbmVkIGluZGV4KTsKLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpOwotCi0gICAg
Ly8gQW5pbWF0aW9uCi0gICAgdm9pZCBzdGFydEFuaW1hdGlvbigpIGZpbmFsOwotICAgIGJvb2wg
c3RhcnRBbmltYXRpb24oU3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJik7
Ci0gICAgdm9pZCBzdG9wQW5pbWF0aW9uKCkgZmluYWw7Ci0gICAgdm9pZCByZXNldEFuaW1hdGlv
bigpIGZpbmFsOwotICAgIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
aXNBbmltYXRpbmcoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIERlY29kaW5nCi0gICAgYm9vbCBp
c0xhcmdlRm9yRGVjb2RpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzRGVjb2RpbmdXb3Jr
UXVldWVJZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BlbmRpbmdEcmF3aW5nQXRJbmRleCh1bnNp
Z25lZCBpbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5k
ZXgodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9u
cyYpIGNvbnN0OwotICAgIHZvaWQgc3RvcERlY29kaW5nV29ya1F1ZXVlKCkgZmluYWw7Ci0gICAg
dm9pZCBkZWNvZGUoRnVuY3Rpb248dm9pZChEZWNvZGluZ1N0YXR1cyk+JiYgZGVjb2RlQ2FsbGJh
Y2spIGZpbmFsOwotICAgIHZvaWQgY2FsbERlY29kZUNhbGxiYWNrcyhEZWNvZGluZ1N0YXR1cyk7
Ci0gICAgdm9pZCBpbWFnZUZyYW1lRGVjb2RlQXRJbmRleEhhc0ZpbmlzaGVkKHVuc2lnbmVkIGlu
ZGV4LCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBEZWNvZGluZ1N0YXR1cyk7Ci0KLSAgICAvLyBJbWFn
ZUZyYW1lCi0gICAgdW5zaWduZWQgY3VycmVudEZyYW1lSW5kZXgoKSBjb25zdCBmaW5hbDsKLQot
ICAgIHZvaWQgY2FjaGVNZXRhZGF0YUF0SW5kZXgodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5n
TGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpOwotICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFn
ZUF0SW5kZXgodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5n
T3B0aW9ucyYsIFJlZjxOYXRpdmVJbWFnZT4mJik7Ci0KLSAgICBjb25zdCBJbWFnZUZyYW1lJiBm
cmFtZUF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAgIGNvbnN0IEltYWdlRnJhbWUm
IGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKLSAgICBjb25zdCBJbWFnZUZyYW1lJiBj
dXJyZW50SW1hZ2VGcmFtZSgpIGZpbmFsIHsgcmV0dXJuIGZyYW1lQXRJbmRleENhY2hlSWZOZWVk
ZWQoY3VycmVudEZyYW1lSW5kZXgoKSk7IH0KLQotICAgIC8vIE5hdGl2ZUltYWdlCi0gICAgRGVj
b2RpbmdTdGF0dXMgcmVxdWVzdE5hdGl2ZUltYWdlQXRJbmRleCh1bnNpZ25lZCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwgY29uc3QgRGVjb2RpbmdPcHRpb25z
Jik7Ci0KLSAgICBFeHBlY3RlZDxSZWY8TmF0aXZlSW1hZ2U+LCBEZWNvZGluZ1N0YXR1cz4gbmF0
aXZlSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZCh1bnNpZ25lZCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYg
PSB7IH0pOwotICAgIEV4cGVjdGVkPFJlZjxOYXRpdmVJbWFnZT4sIERlY29kaW5nU3RhdHVzPiBu
YXRpdmVJbWFnZUF0SW5kZXhSZXF1ZXN0SWZOZWVkZWQodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpOwotICAgIEV4cGVjdGVkPFJlZjxOYXRp
dmVJbWFnZT4sIERlY29kaW5nU3RhdHVzPiBuYXRpdmVJbWFnZUF0SW5kZXhGb3JEcmF3aW5nKHVu
c2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmKTsK
LQotICAgIEV4cGVjdGVkPFJlZjxOYXRpdmVJbWFnZT4sIERlY29kaW5nU3RhdHVzPiBjdXJyZW50
TmF0aXZlSW1hZ2VGb3JEcmF3aW5nKFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0
aW9ucyYpIGZpbmFsOwotCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZUF0SW5k
ZXgodW5zaWduZWQgaW5kZXgpIGZpbmFsOwotICAgIFJlZlB0cjxOYXRpdmVJbWFnZT4gcHJlVHJh
bnNmb3JtZWROYXRpdmVJbWFnZUF0SW5kZXgodW5zaWduZWQgaW5kZXgsIEltYWdlT3JpZW50YXRp
b24pOwotCi0gICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjdXJyZW50TmF0aXZlSW1hZ2UoKSBmaW5h
bCB7IHJldHVybiBuYXRpdmVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lSW5kZXgoKSk7IH0KLSAg
ICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGN1cnJlbnRQcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlKElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGZpbmFsIHsgcmV0dXJuIHByZVRyYW5zZm9ybWVk
TmF0aXZlSW1hZ2VBdEluZGV4KGN1cnJlbnRGcmFtZUluZGV4KCksIG9yaWVudGF0aW9uKTsgfQot
Ci0gICAgLy8gSW1hZ2UgTWV0YWRhdGEKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YVR5
cGU+Ci0gICAgTWV0YWRhdGFUeXBlIGltYWdlTWV0YWRhdGEoTWV0YWRhdGFUeXBlJiBjYWNoZWRW
YWx1ZSwgY29uc3QgTWV0YWRhdGFUeXBlJiBkZWZhdWx0VmFsdWUsIENhY2hlZEZsYWcsIE1ldGFk
YXRhVHlwZSAoSW1hZ2VEZWNvZGVyOjoqZnVuY3RvcikoKSBjb25zdCkgY29uc3Q7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YVR5cGU+Ci0gICAgTWV0YWRhdGFUeXBlIHByaW1hcnlO
YXRpdmVJbWFnZU1ldGFkYXRhKE1ldGFkYXRhVHlwZSYgY2FjaGVkVmFsdWUsIGNvbnN0IE1ldGFk
YXRhVHlwZSYgZGVmYXVsdFZhbHVlLCBDYWNoZWRGbGFnLCBNZXRhZGF0YVR5cGUgKE5hdGl2ZUlt
YWdlOjoqZnVuY3RvcikoKSBjb25zdCkgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YVR5cGU+Ci0gICAgTWV0YWRhdGFUeXBlIHByaW1hcnlJbWFnZUZyYW1lTWV0YWRhdGEo
TWV0YWRhdGFUeXBlJiBjYWNoZWRWYWx1ZSwgQ2FjaGVkRmxhZywgTWV0YWRhdGFUeXBlIChJbWFn
ZUZyYW1lOjoqZnVuY3RvcikoKSBjb25zdCkgY29uc3Q7Ci0KLSAgICBFbmNvZGVkRGF0YVN0YXR1
cyBlbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0OwotICAgIEludFNpemUgc2l6ZShJbWFnZU9yaWVu
dGF0aW9uID0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246OkZyb21JbWFnZSkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50U2l6ZSBzb3VyY2VTaXplKEltYWdlT3JpZW50YXRpb24gPSBJbWFnZU9y
aWVudGF0aW9uOjpPcmllbnRhdGlvbjo6RnJvbUltYWdlKSBjb25zdCBmaW5hbDsKLSAgICBzdGQ6
Om9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplKCkgY29uc3Q7Ci0gICAgYm9v
bCBoYXNEZW5zaXR5Q29ycmVjdGVkU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGRlbnNpdHlD
b3JyZWN0ZWRTaXplKCkuaGFzX3ZhbHVlKCk7IH0KLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UoKSBjb25zdCBmaW5hbDsKLSAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKSBjb25zdCBmaW5hbDsKLQotICAgIFN0cmluZyB1dGkoKSBjb25zdCBmaW5hbDsK
LSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBTdHJpbmcg
YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgc3RkOjpvcHRpb25h
bDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0IGZpbmFsOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKLQotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0U2l6ZSYgc2NhbGVGYWN0b3IsIEFsbG93SW1hZ2VTdWJzYW1wbGluZykgZmluYWw7Ci0KLSAg
ICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHVu
c2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVs
dCkgY29uc3Q7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBUZXN0aW5nIHN1cHBvcnQKLSAg
ICB1bnNpZ25lZCBkZWNvZGVDb3VudEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlY29k
ZUNvdW50Rm9yVGVzdGluZzsgfQotICAgIHZvaWQgc2V0TWluaW11bURlY29kaW5nRHVyYXRpb25G
b3JUZXN0aW5nKFNlY29uZHMpIGZpbmFsOwotICAgIHZvaWQgc2V0Q2xlYXJEZWNvZGVyQWZ0ZXJB
c3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcoYm9vbCBlbmFibGVkKSBmaW5hbCB7IG1fY2xlYXJE
ZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcgPSBlbmFibGVkOyB9Ci0gICAg
dm9pZCBzZXRBc3luY0RlY29kaW5nRW5hYmxlZEZvclRlc3RpbmcoYm9vbCBlbmFibGVkKSBmaW5h
bCB7IG1faXNBc3luY0RlY29kaW5nRW5hYmxlZEZvclRlc3RpbmcgPSBlbmFibGVkOyB9Ci0gICAg
Ym9vbCBpc0FzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faXNBc3luY0RlY29kaW5nRW5hYmxlZEZvclRlc3Rpbmc7IH0KLQotICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTdGF0ZQotICAgIEJpdG1hcElt
YWdlJiBtX2JpdG1hcEltYWdlOwotICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb24geyBBbHBo
YU9wdGlvbjo6UHJlbXVsdGlwbGllZCB9OwotICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
IG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24geyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bjo6QXBwbGllZCB9OwotCi0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29k
ZXI7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VGcmFtZUFuaW1hdG9yPiBtX2Zy
YW1lQW5pbWF0b3I7Ci0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2VGcmFtZVdvcmtRdWV1ZT4gbV93
b3JrUXVldWU7Ci0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoRGVjb2RpbmdTdGF0dXMpPj4gbV9k
ZWNvZGVDYWxsYmFja3M7Ci0KLSAgICAvLyBNZXRhZGF0YQotICAgIG11dGFibGUgT3B0aW9uU2V0
PENhY2hlZEZsYWc+IG1fY2FjaGVkRmxhZ3M7Ci0KLSAgICBtdXRhYmxlIEVuY29kZWREYXRhU3Rh
dHVzIG1fZW5jb2RlZERhdGFTdGF0dXMgeyBFbmNvZGVkRGF0YVN0YXR1czo6VW5rbm93biB9Owot
ICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7Ci0gICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPElu
dFNpemU+IG1fZGVuc2l0eUNvcnJlY3RlZFNpemU7Ci0gICAgbXV0YWJsZSBJbWFnZU9yaWVudGF0
aW9uIG1fb3JpZW50YXRpb247Ci0gICAgbXV0YWJsZSBzaXplX3QgbV9wcmltYXJ5RnJhbWVJbmRl
eCB7IDAgfTsKLSAgICBtdXRhYmxlIHNpemVfdCBtX2ZyYW1lQ291bnQgeyAwIH07Ci0gICAgbXV0
YWJsZSBSZXBldGl0aW9uQ291bnQgbV9yZXBldGl0aW9uQ291bnQgeyBSZXBldGl0aW9uQ291bnRO
b25lIH07Ci0gICAgbXV0YWJsZSBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSAgICBtdXRhYmxlIHN0ZDo6b3B0aW9u
YWw8Q29sb3I+IG1fc2luZ2xlUGl4ZWxTb2xpZENvbG9yOwotCi0gICAgbXV0YWJsZSBTdHJpbmcg
bV91dGk7Ci0gICAgbXV0YWJsZSBTdHJpbmcgbV9maWxlbmFtZUV4dGVuc2lvbjsKLSAgICBtdXRh
YmxlIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbjsKLSAgICBtdXRhYmxlIHN0ZDo6
b3B0aW9uYWw8SW50UG9pbnQ+IG1faG90U3BvdDsKLSAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2
ZWwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQg
fTsKLQotICAgIC8vIEltYWdlRnJhbWUKLSAgICBWZWN0b3I8SW1hZ2VGcmFtZT4gbV9mcmFtZXM7
Ci0gICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2RlY29k
ZWRQcm9wZXJ0aWVzU2l6ZSB7IDAgfTsKLQotICAgIC8vIFRlc3Rpbmcgc3VwcG9ydAotICAgIHVu
c2lnbmVkIG1fZGVjb2RlQ291bnRGb3JUZXN0aW5nIHsgMCB9OwotICAgIGJvb2wgbV9pc0FzeW5j
RGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NsZWFyRGVj
b2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nIHsgZmFsc2UgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmNwcAppbmRleCAxMDY0Y2YyNzMzYmIuLjkwYmRlMmZhYjMxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQg
SW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwKIAogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIEltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgUmVmUHRyIHRpbGVJbWFnZSA9IGN1cnJlbnRQcmVUcmFu
c2Zvcm1lZE5hdGl2ZUltYWdlKG9wdGlvbnMub3JpZW50YXRpb24oKSk7CisgICAgYXV0byB0aWxl
SW1hZ2UgPSBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKG9wdGlvbnMu
b3JpZW50YXRpb24oKSA9PSBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6RnJvbUltYWdl
KTsKICAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTMsMTIgKzE5
MywxMyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0CiAKIEltYWdlRHJhd1Jlc3VsdCBJbWFnZTo6
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0
aW9ucykKIHsKLSAgICBpZiAoYXV0byBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpKSB7
Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgKmNvbG9yLCBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOworICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0
aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCkpOwogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWREcmF3OwogICAgIH0K
IAotICAgIEFTU0VSVF9JTVBMSUVTKGlzQml0bWFwSW1hZ2UoKSwgIWhhc1NvbGlkQ29sb3IoKSk7
CisgICAgQVNTRVJUKCFpc0JpdG1hcEltYWdlKCkgfHwgbm90U29saWRDb2xvcigpKTsKIAogICAg
IEZsb2F0U2l6ZSBpbnRyaW5zaWNUaWxlU2l6ZSA9IHNpemUoKTsKICAgICBpZiAoaGFzUmVsYXRp
dmVXaWR0aCgpKQpAQCAtMjk2LDggKzI5Nyw5IEBAIEltYWdlRHJhd1Jlc3VsdCBJbWFnZTo6ZHJh
d1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjCiAv
LyBGSVhNRTogTWVyZ2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVkIGV2ZW50dWFsbHksIHNpbmNl
IHdlIG5lZWQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21lIHRoaW5ncy4KIEltYWdlRHJh
d1Jlc3VsdCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIEltYWdl
UGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCiB7ICAgIAotICAgIGlmIChhdXRvIGNvbG9yID0gc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQs
IGRzdFJlY3QsICpjb2xvciwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICBDb2xv
ciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOworICAgIGlmIChjb2xvci5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIGNvbG9yLCBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWREcmF3OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKaW5kZXggMjE4ZDIyMzYwNGEyLi41YjNhNGU2YzhhZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGRyYXdzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBpc1NWR0ltYWdlKCkgfHwgaXNT
VkdJbWFnZUZvckNvbnRhaW5lcigpOyB9CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyYW1lQ291
bnQoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQW5pbWF0ZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTQ4LDE0ICsxNDgsMTUgQEAgcHVibGljOgogICAg
IGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwgUm91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVh
dFRpbGUgfTsKIAogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4g
bmF0aXZlSW1hZ2VBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBuYXRpdmVJbWFnZSgpOyB9Ci0g
ICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGN1cnJlbnROYXRpdmVJbWFnZSgpIHsgcmV0
dXJuIG5hdGl2ZUltYWdlKCk7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gY3Vy
cmVudFByZVRyYW5zZm9ybWVkTmF0aXZlSW1hZ2UoSW1hZ2VPcmllbnRhdGlvbiA9IEltYWdlT3Jp
ZW50YXRpb246Ok9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpIHsgcmV0dXJuIGN1cnJlbnROYXRpdmVJ
bWFnZSgpOyB9CisgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkgeyByZXR1cm4gbmF0aXZlSW1hZ2UoKTsgfQorICAgIHZpcnR1YWwgUmVm
UHRyPE5hdGl2ZUltYWdlPiBwcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KGJvb2wgPSB0cnVlKSB7IHJldHVybiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOyB9Cisg
ICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IG5hdGl2ZUltYWdlQXRJbmRleChzaXplX3Qp
IHsgcmV0dXJuIG5hdGl2ZUltYWdlKCk7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gbmF0aXZlSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBjb25zdCBEZWNvZGluZ09wdGlv
bnMmID0geyB9KSB7IHJldHVybiBuYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgpOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIEltYWdlUGFpbnRpbmdPcHRpb25zID0geyB9KTsKIAogI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgdmlydHVhbCBib29sIGhhc1NvbGlkQ29sb3IoKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1ZTsgfQog
I2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsK
QEAgLTE3NCw3ICsxNzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdU
aWxlZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIFRpbGVS
dWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgSW1hZ2VQYWludGluZ09wdGlvbnMgPSB7IH0pOwog
CiAgICAgLy8gU3VwcG9ydGluZyB0aWxlZCBkcmF3aW5nCi0gICAgdmlydHVhbCBzdGQ6Om9wdGlv
bmFsPENvbG9yPiBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51
bGxvcHQ7IH0KKyAgICB2aXJ0dWFsIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIENvbG9yKCk7IH0KIAogcHJpdmF0ZToKICAgICBSZWZQdHI8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4gbV9lbmNvZGVkSW1hZ2VEYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VBZGFwdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQWRhcHRlci5jcHAKaW5kZXggMjVmNzJlYzc2ODExLi5jZGZh
YTllMDZjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQWRhcHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VBZGFwdGVyLmNwcApAQCAtNDcsNyArNDcsNyBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdl
QWRhcHRlcjo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICB1bnNp
Z25lZCBjb3VudCA9IGltYWdlKCkuZnJhbWVDb3VudCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgUmVmUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UoKS5uYXRpdmVJbWFnZUF0SW5kZXgoaSk7CisgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBp
bWFnZSgpLm5hdGl2ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaSk7CiAgICAgICAgIGlmIChu
YXRpdmVJbWFnZSAmJiBuYXRpdmVJbWFnZS0+c2l6ZSgpID09IHNpemUpCiAgICAgICAgICAgICBy
ZXR1cm4gbmF0aXZlSW1hZ2U7CiAgICAgfQpAQCAtNjIsNyArNjIsNyBAQCBWZWN0b3I8UmVmPE5h
dGl2ZUltYWdlPj4gSW1hZ2VBZGFwdGVyOjphbGxOYXRpdmVJbWFnZXMoKQogICAgIHVuc2lnbmVk
IGNvdW50ID0gaW1hZ2UoKS5mcmFtZUNvdW50KCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoUmVmUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UoKS5uYXRpdmVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgIGlmIChhdXRvIG5hdGl2ZUltYWdl
ID0gaW1hZ2UoKS5uYXRpdmVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGkpKQogICAgICAgICAg
ICAgbmF0aXZlSW1hZ2VzLmFwcGVuZChuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVy
LmgKaW5kZXggNWMyNTJkMzU2NjRjLi45ZTI4ZGQwZjMwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5oCkBAIC01Nyw2ICs1NywxMSBAQCBw
dWJsaWM6CiAgICAgICAgIFZpZGVvLAogICAgIH07CiAKKyAgICBzdHJ1Y3QgRnJhbWVNZXRhZGF0
YSB7CisgICAgICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8SW50U2l6ZT4gZGVuc2l0eUNvcnJlY3RlZFNpemU7CisgICAgfTsKKwogICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzTWVkaWFUeXBlKE1lZGlhVHlwZSk7CiAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCkBAIC05MSwxMSArOTYsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxp
bmdMZXZlbDo6RGVmYXVsdCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRh
dGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0IHsgcmV0dXJuIEltYWdl
T3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lOyB9Ci0gICAgdmlydHVhbCBzdGQ6Om9wdGlv
bmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplQXRJbmRleChzaXplX3QpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQorICAgIHZpcnR1YWwgRnJhbWVNZXRhZGF0YSBmcmFtZU1l
dGFkYXRhQXRJbmRleChzaXplX3QpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgU2Vjb25kcyBm
cmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90KSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwg
PSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIFBs
YXRmb3JtSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGlu
Z0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
JiA9IERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKSkgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAppbmRleCBl
YmZhMjA0YjEyMmUuLmJhY2JkZTg4MDFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKQEAgLTk2LDYgKzk2LDExIEBAIHVuc2lnbmVkIElt
YWdlRnJhbWU6OmNsZWFyKCkKICAgICByZXR1cm4gZnJhbWVCeXRlczsKIH0KIAorSW50U2l6ZSBJ
bWFnZUZyYW1lOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaXplOworfQorCiBib29s
IEltYWdlRnJhbWU6Omhhc05hdGl2ZUltYWdlKGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxp
bmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbmF0aXZl
SW1hZ2UgJiYgKCFzdWJzYW1wbGluZ0xldmVsIHx8ICpzdWJzYW1wbGluZ0xldmVsID49IG1fc3Vi
c2FtcGxpbmdMZXZlbCk7CkBAIC0xMTEsNCArMTE2LDEyIEBAIGJvb2wgSW1hZ2VGcmFtZTo6aGFz
RGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IHN0ZDo6b3B0aW9u
YWw8CiAgICAgcmV0dXJuIGlzQ29tcGxldGUoKSAmJiBoYXNOYXRpdmVJbWFnZShzdWJzYW1wbGlu
Z0xldmVsKSAmJiBtX2RlY29kaW5nT3B0aW9ucy5pc0NvbXBhdGlibGVXaXRoKGRlY29kaW5nT3B0
aW9ucyk7CiB9CiAKK0NvbG9yIEltYWdlRnJhbWU6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNv
bnN0Cit7CisgICAgaWYgKCFoYXNOYXRpdmVJbWFnZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEs
IDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHJldHVybiBtX25hdGl2ZUltYWdl
LT5zaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCmluZGV4IDIx
ZjM2ZGJiZjUzYy4uMjM2YjdmNDQ4MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZS5oCkBAIC00Miw4ICs0Miw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEltYWdlRnJhbWUgewotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZVNv
dXJjZTsKLSAgICBmcmllbmQgY2xhc3MgTmF0aXZlSW1hZ2VTb3VyY2U7CisgICAgZnJpZW5kIGNs
YXNzIEltYWdlU291cmNlOwogcHVibGljOgogICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IE1ldGFk
YXRhLCBNZXRhZGF0YUFuZEltYWdlIH07CiAKQEAgLTY2LDkgKzY1LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaXNQYXJ0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1N0YXR1cyA9PSBEZWNv
ZGluZ1N0YXR1czo6UGFydGlhbDsgfQogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CiAKLSAg
ICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0g
ICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KKyAgICBJbnRTaXpl
IHNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
aGFzTmF0aXZlSW1hZ2UoKSA/IChzaXplKCkuYXJlYSgpICogc2l6ZW9mKHVpbnQzMl90KSkudmFs
dWUoKSA6IDA7IH0KICAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25z
dCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0KIApAQCAtOTEsNiArODgsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnMo
Y29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0
aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhc2l6
ZSgpLmlzRW1wdHkoKTsgfQogCisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3Q7CisKIHByaXZhdGU6CiAgICAgRGVjb2RpbmdTdGF0dXMgbV9kZWNvZGluZ1N0YXR1cyB7IERl
Y29kaW5nU3RhdHVzOjpJbnZhbGlkIH07CiAgICAgSW50U2l6ZSBtX3NpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQW5pbWF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUFuaW1hdG9yLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZmMmUxZDlkYjc0Li4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUFuaW1h
dG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDI0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZUZyYW1lQW5pbWF0b3IuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlU291cmNl
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUZyYW1lQW5pbWF0b3I+IEltYWdlRnJhbWVBbmltYXRvcjo6Y3JlYXRl
KEJpdG1hcEltYWdlU291cmNlJiBzb3VyY2UpCi17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8SW1h
Z2VGcmFtZUFuaW1hdG9yPihzb3VyY2UpOwotfQotCi1JbWFnZUZyYW1lQW5pbWF0b3I6OkltYWdl
RnJhbWVBbmltYXRvcihCaXRtYXBJbWFnZVNvdXJjZSYgc291cmNlKQotICAgIDogbV9zb3VyY2Uo
c291cmNlKQotICAgICwgbV9mcmFtZUNvdW50KHNvdXJjZS5mcmFtZUNvdW50KCkpCi0gICAgLCBt
X3JlcGV0aXRpb25Db3VudChzb3VyY2UucmVwZXRpdGlvbkNvdW50KCkpCi0gICAgLCBtX2N1cnJl
bnRGcmFtZUluZGV4KHNvdXJjZS5wcmltYXJ5RnJhbWVJbmRleCgpKQotewotICAgIEFTU0VSVCht
X2ZyYW1lQ291bnQgPiAwKTsKLSAgICBBU1NFUlQobV9yZXBldGl0aW9uQ291bnQgIT0gUmVwZXRp
dGlvbkNvdW50Tm9uZSk7Ci0gICAgQVNTRVJUKG1fY3VycmVudEZyYW1lSW5kZXggPCBtX2ZyYW1l
Q291bnQpOwotfQotCi1JbWFnZUZyYW1lQW5pbWF0b3I6On5JbWFnZUZyYW1lQW5pbWF0b3IoKQot
ewotICAgIGNsZWFyVGltZXIoKTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lQW5pbWF0b3I6OmRlc3Ry
b3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCi17Ci0gICAgLy8gQW5pbWF0ZWQgaW1hZ2Vz
IG92ZXIgYSBjZXJ0YWluIHNpemUgYXJlIGNvbnNpZGVyZWQgbGFyZ2UgZW5vdWdoIHRoYXQgd2Un
bGwKLSAgICAvLyBvbmx5IGhhbmcgb24gdG8gb25lIGZyYW1lIGF0IGEgdGltZS4KLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIExhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gMzAgKiAxMDI0ICog
MTAyNDsKLQotICAgIGlmIChtX3NvdXJjZS5kZWNvZGVkU2l6ZSgpIDwgTGFyZ2VBbmltYXRpb25D
dXRvZmYpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc291cmNlLmRlc3Ryb3lEZWNvZGVkRGF0
YShkZXN0cm95QWxsKTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lQW5pbWF0b3I6OnN0YXJ0VGltZXIo
U2Vjb25kcyBkZWxheSkKLXsKLSAgICBBU1NFUlQoIW1fZnJhbWVUaW1lcik7Ci0gICAgbV9mcmFt
ZVRpbWVyID0gbWFrZVVuaXF1ZTxUaW1lcj4oKnRoaXMsICZJbWFnZUZyYW1lQW5pbWF0b3I6OnRp
bWVyRmlyZWQpOwotICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKLX0KLQot
dm9pZCBJbWFnZUZyYW1lQW5pbWF0b3I6OmNsZWFyVGltZXIoKQotewotICAgIG1fZnJhbWVUaW1l
ciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZUFuaW1hdG9yOjp0aW1lckZpcmVkKCkK
LXsKLSAgICBjbGVhclRpbWVyKCk7Ci0KLSAgICAvLyBEb24ndCBhZHZhbmNlIHRvIG5leHRGcmFt
ZSBpZiB0aGUgbmV4dCBmcmFtZSBpcyBiZWluZyBkZWNvZGVkLgotICAgIGlmIChtX3NvdXJjZS5p
c1BlbmRpbmdEZWNvZGluZ0F0SW5kZXgobmV4dEZyYW1lSW5kZXgoKSwgbV9uZXh0RnJhbWVTdWJz
YW1wbGluZ0xldmVsLCBtX25leHRGcmFtZU9wdGlvbnMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhZHZhbmNlQW5pbWF0aW9uKCk7Ci0gICAgbV9zb3VyY2UuaW1hZ2VGcmFtZUF0SW5kZXhBdmFp
bGFibGUobV9jdXJyZW50RnJhbWVJbmRleCwgSW1hZ2VBbmltYXRpbmdTdGF0ZTo6WWVzLCBtX3Nv
dXJjZS5mcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChtX2N1cnJlbnRGcmFtZUluZGV4KSk7Ci19
Ci0KLWJvb2wgSW1hZ2VGcmFtZUFuaW1hdG9yOjppbWFnZUZyYW1lRGVjb2RlQXRJbmRleEhhc0Zp
bmlzaGVkKHVuc2lnbmVkIGluZGV4LCBJbWFnZUFuaW1hdGluZ1N0YXRlIGFuaW1hdGluZ1N0YXRl
LCBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKLXsKLSAgICBpZiAoYW5pbWF0aW5nU3Rh
dGUgIT0gSW1hZ2VBbmltYXRpbmdTdGF0ZTo6WWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoaW5kZXggIT0gbmV4dEZyYW1lSW5kZXgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQVNTRVJUKGhhc0V2ZXJBbmltYXRlZCgpKTsKLQotICAgIC8vIERvbid0IGFkdmFu
Y2UgdG8gbmV4dEZyYW1lIGlmIHRoZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldC4KLSAgICBpZiAo
aXNBbmltYXRpbmcoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhZHZhbmNlQW5pbWF0
aW9uKCk7Ci0gICAgbV9zb3VyY2UuaW1hZ2VGcmFtZUF0SW5kZXhBdmFpbGFibGUobV9jdXJyZW50
RnJhbWVJbmRleCwgYW5pbWF0aW5nU3RhdGUsIGRlY29kaW5nU3RhdHVzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lQW5pbWF0b3I6OnN0YXJ0QW5pbWF0aW9uKFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChtX2ZyYW1lVGltZXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gSW1hZ2VPYnNlcnZlciBtYXkgZGlzYWxsb3cgYW5pbWF0aW9uLgotICAgIGlmICghbV9z
b3VyY2UuaXNBbmltYXRpb25BbGxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fbmV4dEZyYW1lU3Vic2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgbV9u
ZXh0RnJhbWVPcHRpb25zID0gb3B0aW9uczsKLQotICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1l
QW5pbWF0b3I6OiVzIC0gJXAgLSB1cmw6ICVzLiBBbmltYXRpb24gYXQgaW5kZXggPSAlZCB3aWxs
IGJlIHN0YXJ0ZWQuIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIG1fY3VycmVu
dEZyYW1lSW5kZXgpOwotCi0gICAgaWYgKG9wdGlvbnMuZGVjb2RpbmdNb2RlKCkgPT0gRGVjb2Rp
bmdNb2RlOjpBc3luY2hyb25vdXMpIHsKLSAgICAgICAgTE9HKEltYWdlcywgIkltYWdlRnJhbWVB
bmltYXRvcjo6JXMgLSAlcCAtIHVybDogJXMuIERlY29kaW5nIGZvciBmcmFtZSBhdCBpbmRleCA9
ICVkIHdpbGwgYmUgcmVxdWVzdGVkLiIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVRGOCgp
LCBuZXh0RnJhbWVJbmRleCgpKTsKLSAgICAgICAgbV9zb3VyY2UucmVxdWVzdE5hdGl2ZUltYWdl
QXRJbmRleElmTmVlZGVkKG5leHRGcmFtZUluZGV4KCksIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
QW5pbWF0aW5nU3RhdGU6Olllcywgb3B0aW9ucyk7Ci0gICAgfQotCi0gICAgYXV0byB0aW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci0KLSAgICAvLyBIYW5kbGUgaW5pdGlhbCBzdGF0ZS4KLSAg
ICBpZiAoIW1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKQotICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0
YXJ0VGltZSA9IHRpbWU7Ci0KLSAgICBhdXRvIGR1cmF0aW9uID0gbV9zb3VyY2UuZnJhbWVEdXJh
dGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWVJbmRleCk7Ci0KLSAgICAvLyBTZXR0aW5nICdtX2Rl
c2lyZWRGcmFtZVN0YXJ0VGltZScgdG8gJ3RpbWUnIG1lYW5zIHdlIGFyZSBsYXRlOyBvdGhlcndp
c2Ugd2UgYXJlIGVhcmx5LgotICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gc3RkOjptYXgo
dGltZSwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKyBkdXJhdGlvbik7Ci0KLSAgICBzdGFydFRp
bWVyKG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lIC0gdGltZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgSW1hZ2VGcmFtZUFuaW1hdG9yOjphZHZhbmNlQW5pbWF0aW9uKCkKLXsKLSAgICBM
T0coSW1hZ2VzLCAiSW1hZ2VGcmFtZUFuaW1hdG9yOjolcyAtICVwIC0gdXJsOiAlcy4gQW5pbWF0
aW9uIGF0IGluZGV4ID0gJWQgd2lsbCBiZSBhZHZhbmNlZC4iLCBfX0ZVTkNUSU9OX18sIHRoaXMs
IHNvdXJjZVVURjgoKSwgbV9jdXJyZW50RnJhbWVJbmRleCk7Ci0KLSAgICBtX2N1cnJlbnRGcmFt
ZUluZGV4ID0gbmV4dEZyYW1lSW5kZXgoKTsKLSAgICBpZiAobV9jdXJyZW50RnJhbWVJbmRleCA9
PSBtX2ZyYW1lQ291bnQgLSAxKSB7Ci0gICAgICAgIExPRyhJbWFnZXMsICJJbWFnZUZyYW1lQW5p
bWF0b3I6OiVzIC0gJXAgLSB1cmw6ICVzLiBBbmltYXRpb24gbG9vcCAlZCBoYXMgZW5kZWQuIiwg
X19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVVEY4KCksIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSk7
Ci0gICAgICAgICsrbV9yZXBldGl0aW9uc0NvbXBsZXRlOwotICAgIH0KLQotICAgIGRlc3Ryb3lE
ZWNvZGVkRGF0YShmYWxzZSk7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZUFuaW1hdG9yOjpzdG9wQW5p
bWF0aW9uKCkKLXsKLSAgICBjbGVhclRpbWVyKCk7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZUFuaW1h
dG9yOjpyZXNldEFuaW1hdGlvbigpCi17Ci0gICAgc3RvcEFuaW1hdGlvbigpOwotCi0gICAgbV9j
dXJyZW50RnJhbWVJbmRleCA9IG1fc291cmNlLnByaW1hcnlGcmFtZUluZGV4KCk7Ci0gICAgbV9y
ZXBldGl0aW9uc0NvbXBsZXRlID0gUmVwZXRpdGlvbkNvdW50Tm9uZTsKLSAgICBtX2Rlc2lyZWRG
cmFtZVN0YXJ0VGltZSA9IHsgfTsKLQotICAgIC8vIEZvciBleHRyZW1lbHkgbGFyZ2UgYW5pbWF0
aW9ucywgd2hlbiB0aGUgYW5pbWF0aW9uIGlzIHJlc2V0LCB3ZSBqdXN0IHRocm93IGV2ZXJ5dGhp
bmcgYXdheS4KLSAgICBkZXN0cm95RGVjb2RlZERhdGEodHJ1ZSk7Ci19Ci0KLWJvb2wgSW1hZ2VG
cmFtZUFuaW1hdG9yOjppc0FuaW1hdGlvbkFsbG93ZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3JlcGV0aXRpb25Db3VudCA9PSBSZXBldGl0aW9uQ291bnRJbmZpbml0ZSB8fCBtX3JlcGV0aXRp
b25zQ29tcGxldGUgPCBtX3JlcGV0aXRpb25Db3VudDsKLX0KLQotY29uc3QgY2hhciogSW1hZ2VG
cmFtZUFuaW1hdG9yOjpzb3VyY2VVVEY4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb3VyY2Uu
c291cmNlVVRGOCgpOwotfQotCi12b2lkIEltYWdlRnJhbWVBbmltYXRvcjo6ZHVtcChUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN1cnJlbnQtZnJhbWUtaW5k
ZXgiLCBtX2N1cnJlbnRGcmFtZUluZGV4KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRp
b25zLWNvbXBsZXRlIiwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZUFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lQW5pbWF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzZWVh
OTY0MDliLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZUFuaW1hdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDI0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiRGVjb2RpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW1hZ2VUeXBlcy5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBJbWFnZVNvdXJjZTsKLWNsYXNzIEltYWdl
RnJhbWU7Ci0KLWNsYXNzIEltYWdlRnJhbWVBbmltYXRvciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUZyYW1l
QW5pbWF0b3I+IGNyZWF0ZShCaXRtYXBJbWFnZVNvdXJjZSYpOwotCi0gICAgSW1hZ2VGcmFtZUFu
aW1hdG9yKEJpdG1hcEltYWdlU291cmNlJik7Ci0gICAgfkltYWdlRnJhbWVBbmltYXRvcigpOwot
Ci0gICAgYm9vbCBpbWFnZUZyYW1lRGVjb2RlQXRJbmRleEhhc0ZpbmlzaGVkKHVuc2lnbmVkIGlu
ZGV4LCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBEZWNvZGluZ1N0YXR1cyk7Ci0KLSAgICBib29sIHN0
YXJ0QW5pbWF0aW9uKFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpOwot
ICAgIHZvaWQgYWR2YW5jZUFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcEFuaW1hdGlvbigpOwot
ICAgIHZvaWQgcmVzZXRBbmltYXRpb24oKTsKLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Qg
eyByZXR1cm4gISFtX2ZyYW1lVGltZXI7IH0KLSAgICBib29sIGlzQW5pbWF0aW9uQWxsb3dlZCgp
IGNvbnN0OwotCi0gICAgYm9vbCBoYXNFdmVyQW5pbWF0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1f
ZGVzaXJlZEZyYW1lU3RhcnRUaW1lOyB9Ci0gICAgdW5zaWduZWQgY3VycmVudEZyYW1lSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZUluZGV4OyB9Ci0KLSAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgZGVzdHJveURlY29kZWRE
YXRhKGJvb2wgZGVzdHJveUFsbCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGltZXIoU2Vjb25kcyBkZWxh
eSk7Ci0gICAgdm9pZCBjbGVhclRpbWVyKCk7Ci0gICAgdm9pZCB0aW1lckZpcmVkKCk7Ci0KLSAg
ICB1bnNpZ25lZCBuZXh0RnJhbWVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnJlbnRGcmFt
ZUluZGV4ICsgMSkgJSBtX2ZyYW1lQ291bnQ7IH0KLQotICAgIGNvbnN0IGNoYXIqIHNvdXJjZVVU
RjgoKSBjb25zdDsKLQotICAgIEJpdG1hcEltYWdlU291cmNlJiBtX3NvdXJjZTsKLSAgICB1bnNp
Z25lZCBtX2ZyYW1lQ291bnQgeyAwIH07Ci0gICAgUmVwZXRpdGlvbkNvdW50IG1fcmVwZXRpdGlv
bkNvdW50IHsgUmVwZXRpdGlvbkNvdW50Tm9uZSB9OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRp
bWVyPiBtX2ZyYW1lVGltZXI7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBtX25leHRGcmFtZVN1YnNh
bXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07Ci0gICAgRGVjb2RpbmdP
cHRpb25zIG1fbmV4dEZyYW1lT3B0aW9ucyB7IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzIH07
Ci0KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRGcmFtZUluZGV4IHsgMCB9OwotICAgIFJlcGV0aXRp
b25Db3VudCBtX3JlcGV0aXRpb25zQ29tcGxldGUgeyBSZXBldGl0aW9uQ291bnROb25lIH07Ci0g
ICAgTW9ub3RvbmljVGltZSBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVXb3JrUXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZVdvcmtRdWV1ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE0OTBiZmI1ODRhZS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVXb3JrUXVldWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRnJhbWVXb3JrUXVldWUuaCIK
LQotI2luY2x1ZGUgIkJpdG1hcEltYWdlU291cmNlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPEltYWdlRnJhbWVXb3JrUXVldWU+IEltYWdl
RnJhbWVXb3JrUXVldWU6OmNyZWF0ZShCaXRtYXBJbWFnZVNvdXJjZSYgc291cmNlKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVXb3JrUXVldWUoc291cmNlKSk7Ci19Ci0K
LUltYWdlRnJhbWVXb3JrUXVldWU6OkltYWdlRnJhbWVXb3JrUXVldWUoQml0bWFwSW1hZ2VTb3Vy
Y2UmIHNvdXJjZSkKLSAgICA6IG1fc291cmNlKHNvdXJjZSkKLXsKLX0KLQotSW1hZ2VGcmFtZVdv
cmtRdWV1ZTo6UmVxdWVzdFF1ZXVlJiBJbWFnZUZyYW1lV29ya1F1ZXVlOjpyZXF1ZXN0UXVldWUo
KQotewotICAgIGlmICghbV9yZXF1ZXN0UXVldWUpCi0gICAgICAgIG1fcmVxdWVzdFF1ZXVlID0g
UmVxdWVzdFF1ZXVlOjpjcmVhdGUoKTsKLQotICAgIHJldHVybiAqbV9yZXF1ZXN0UXVldWU7Ci19
Ci0KLXZvaWQgSW1hZ2VGcmFtZVdvcmtRdWV1ZTo6c3RhcnQoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV93b3JrUXVldWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fd29ya1F1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIm9yZy53ZWJraXQuSW1hZ2VEZWNv
ZGVyIiwgV29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQpOwotCi0gICAgbV93b3JrUXVldWUtPmRpc3Bh
dGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcHJvdGVjdGVkV29ya1F1ZXVlID0g
UmVmIHsgKm1fd29ya1F1ZXVlIH0sIHByb3RlY3RlZFNvdXJjZSA9IHRoaXMtPnByb3RlY3RlZFNv
dXJjZSgpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgUmVxdWVzdCByZXF1ZXN0OwotICAgICAgICB3
aGlsZSAocHJvdGVjdGVkVGhpcy0+cmVxdWVzdFF1ZXVlKCkuZGVxdWV1ZShyZXF1ZXN0KSkgewot
ICAgICAgICAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoQXN5bmNJbWFnZURlY29kZVN0YXJ0
LCBBc3luY0ltYWdlRGVjb2RlRW5kKTsKLQotICAgICAgICAgICAgUmVmIGRlY29kZXIgPSAqcHJv
dGVjdGVkU291cmNlLT5kZWNvZGVyKCk7Ci0gICAgICAgICAgICBhdXRvIG1pbmltdW1EZWNvZGlu
Z0R1cmF0aW9uID0gcHJvdGVjdGVkVGhpcy0+bWluaW11bURlY29kaW5nRHVyYXRpb25Gb3JUZXN0
aW5nKCk7Ci0KLSAgICAgICAgICAgIE1vbm90b25pY1RpbWUgc3RhcnRpbmdUaW1lOwotICAgICAg
ICAgICAgaWYgKG1pbmltdW1EZWNvZGluZ0R1cmF0aW9uID4gMF9zKQotICAgICAgICAgICAgICAg
IHN0YXJ0aW5nVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAgICAgICAgICBQbGF0
Zm9ybUltYWdlUHRyIHBsYXRmb3JtSW1hZ2UgPSBkZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJ
bmRleChyZXF1ZXN0LmluZGV4LCByZXF1ZXN0LnN1YnNhbXBsaW5nTGV2ZWwsIHJlcXVlc3Qub3B0
aW9ucyk7Ci0gICAgICAgICAgICBSZWZQdHIgbmF0aXZlSW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUocGxhdGZvcm1JbWFnZSkpOwotCi0gICAgICAgICAgICAvLyBQcmV0ZW5kIGFz
IGlmIGRlY29kaW5nIHRoZSBmcmFtZSB0b29rIG1pbmltdW1EZWNvZGluZ0R1cmF0aW9uLgotICAg
ICAgICAgICAgaWYgKG1pbmltdW1EZWNvZGluZ0R1cmF0aW9uID4gMF9zKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBhY3R1YWxEZWNvZGluZ0R1cmF0aW9uID0gTW9ub3RvbmljVGltZTo6bm93KCkg
LSBzdGFydGluZ1RpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1pbmltdW1EZWNvZGluZ0R1cmF0
aW9uID4gYWN0dWFsRGVjb2RpbmdEdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc2xlZXAo
bWluaW11bURlY29kaW5nRHVyYXRpb24gLSBhY3R1YWxEZWNvZGluZ0R1cmF0aW9uKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRXZlbiBpZiB3ZSBmYWlsIHRvIGRlY29kZSB0aGUg
ZnJhbWUsIGl0IGlzIGltcG9ydGFudCB0byBzeW5jIHRoZSBtYWluIHRocmVhZCB3aXRoIHRoaXMg
cmVzdWx0LgotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcywgcHJv
dGVjdGVkV29ya1F1ZXVlLCBwcm90ZWN0ZWRTb3VyY2UsIHJlcXVlc3QsIG5hdGl2ZUltYWdlID0g
V1RGTW92ZShuYXRpdmVJbWFnZSldICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIC8vIFRo
ZSBXb3JrUXVldWUgbWF5IGhhdmUgYmVlbiByZWNyZWF0ZWQgYmVmb3JlIHRoZSBmcmFtZSB3YXMg
ZGVjb2RlZC4KLSAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkV29ya1F1ZXVlLnB0cigpICE9
IHByb3RlY3RlZFRoaXMtPm1fd29ya1F1ZXVlIHx8IHByb3RlY3RlZFNvdXJjZS5wdHIoKSAhPSBw
cm90ZWN0ZWRUaGlzLT5tX3NvdXJjZS5nZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBMT0co
SW1hZ2VzLCAiSW1hZ2VGcmFtZVdvcmtRdWV1ZTo6JXMgLSAlcCAtIHVybDogJXMuIFdvcmtRdWV1
ZSB3YXMgcmVjcmVhdGVkIGF0IGluZGV4ID0gJWQuIiwgX19GVU5DVElPTl9fLCBwcm90ZWN0ZWRU
aGlzLnB0cigpLCBwcm90ZWN0ZWRTb3VyY2UtPnNvdXJjZVVURjgoKSwgcmVxdWVzdC5pbmRleCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUaGUgRGVjb2RlUXVldWUgbWF5IGhhdmUgYmVlbiBjbGVhcmVkIGJlZm9y
ZSB0aGUgZnJhbWUgd2FzIGRlY29kZWQuCi0gICAgICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmRlY29kZVF1ZXVlKCkuaXNFbXB0eSgpIHx8IHByb3RlY3RlZFRoaXMtPmRlY29kZVF1ZXVl
KCkuZmlyc3QoKSAhPSByZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhJbWFnZXMs
ICJJbWFnZUZyYW1lV29ya1F1ZXVlOjolcyAtICVwIC0gdXJsOiAlcy4gRGVjb2RlUXVldWUgd2Fz
IGNsZWFyZWQgYXQgaW5kZXggPSAlZC4iLCBfX0ZVTkNUSU9OX18sIHByb3RlY3RlZFRoaXMucHRy
KCksIHByb3RlY3RlZFNvdXJjZS0+c291cmNlVVRGOCgpLCByZXF1ZXN0LmluZGV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmRlY29kZVF1ZXVlKCkucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAg
ICAgICAgICBwcm90ZWN0ZWRTb3VyY2UtPmltYWdlRnJhbWVEZWNvZGVBdEluZGV4SGFzRmluaXNo
ZWQocmVxdWVzdC5pbmRleCwgcmVxdWVzdC5zdWJzYW1wbGluZ0xldmVsLCByZXF1ZXN0LmFuaW1h
dGluZ1N0YXRlLCByZXF1ZXN0Lm9wdGlvbnMsIFdURk1vdmUobmF0aXZlSW1hZ2UpKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRW5zdXJlIGRlc3RydWN0aW9uIGhh
cHBlbnMgb24gY3JlYXRpb24gdGhyZWFkLgotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgcHJvdGVjdGVkV29ya1F1ZXVlID0g
V1RGTW92ZShwcm90ZWN0ZWRXb3JrUXVldWUpLCBwcm90ZWN0ZWRTb3VyY2UgPSBXVEZNb3ZlKHBy
b3RlY3RlZFNvdXJjZSldICgpIG11dGFibGUgeyB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBJbWFn
ZUZyYW1lV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBSZXF1ZXN0JiByZXF1ZXN0KQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICByZXF1ZXN0UXVldWUoKS5lbnF1ZXVlKHJl
cXVlc3QpOwotICAgIGRlY29kZVF1ZXVlKCkuYXBwZW5kKHJlcXVlc3QpOwotCi0gICAgc3RhcnQo
KTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lV29ya1F1ZXVlOjpzdG9wKCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgUmVmIHNvdXJjZSA9IHByb3RlY3RlZFNvdXJjZSgpOwot
Ci0gICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9kZWNvZGVRdWV1ZSkgewotICAgICAgICBMT0co
SW1hZ2VzLCAiSW1hZ2VGcmFtZVdvcmtRdWV1ZTo6JXMgLSAlcCAtIHVybDogJXMuIERlY29kaW5n
IHdhcyBjYW5jZWxsZWQgZm9yIGZyYW1lIGF0IGluZGV4ID0gJWQuIiwgX19GVU5DVElPTl9fLCB0
aGlzLCBzb3VyY2UtPnNvdXJjZVVURjgoKSwgcmVxdWVzdC5pbmRleCk7Ci0gICAgICAgIHNvdXJj
ZS0+Y2xlYXJGcmFtZUF0SW5kZXgocmVxdWVzdC5pbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKG1f
cmVxdWVzdFF1ZXVlKSB7Ci0gICAgICAgIG1fcmVxdWVzdFF1ZXVlLT5jbG9zZSgpOwotICAgICAg
ICBtX3JlcXVlc3RRdWV1ZSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9kZWNvZGVRdWV1ZS5j
bGVhcigpOwotICAgIG1fY29tbWl0TWFwLmNsZWFyKCk7Ci0gICAgbV93b3JrUXVldWUgPSBudWxs
cHRyOwotfQotCi12b2lkIEltYWdlRnJhbWVXb3JrUXVldWU6OmRpZENhY2hlTmF0aXZlSW1hZ2VB
dEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgbV9jb21taXRNYXAuc2V0KGluZGV4ICsgMSwgTW9ub3RvbmljVGltZTo6bm93KCkpOwotfQot
Ci12b2lkIEltYWdlRnJhbWVXb3JrUXVldWU6OmRpZERlc3Ryb3lOYXRpdmVJbWFnZUF0SW5kZXgo
dW5zaWduZWQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2Nv
bW1pdE1hcC5yZW1vdmUoaW5kZXggKyAxKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lV29ya1F1ZXVl
Ojppc1BlbmRpbmdEZWNvZGluZ0F0SW5kZXgodW5zaWduZWQgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBvcHRpb25zKSBjb25z
dAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGl0ID0gc3RkOjpm
aW5kX2lmKG1fZGVjb2RlUXVldWUuYmVnaW4oKSwgbV9kZWNvZGVRdWV1ZS5lbmQoKSwgW2luZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCAmb3B0aW9uc10oY29uc3QgUmVxdWVzdCYgcmVxdWVzdCkgewot
ICAgICAgICByZXR1cm4gcmVxdWVzdC5pbmRleCA9PSBpbmRleCAmJiBzdWJzYW1wbGluZ0xldmVs
ID49IHJlcXVlc3Quc3Vic2FtcGxpbmdMZXZlbCAmJiByZXF1ZXN0Lm9wdGlvbnMuaXNDb21wYXRp
YmxlV2l0aChvcHRpb25zKTsKLSAgICB9KTsKLSAgICByZXR1cm4gaXQgIT0gbV9kZWNvZGVRdWV1
ZS5lbmQoKTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lV29ya1F1ZXVlOjppc1BlbmRpbmdEcmF3aW5n
QXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIHBlbmRpbmdEcmF3aW5nSW50ZXJ2
YWwgPSAyX3M7Ci0gICAgaWYgKGF1dG8gdGltZSA9IG1fY29tbWl0TWFwLmdldChpbmRleCArIDEp
KQotICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCkgLSB0aW1lIDwgcGVuZGluZ0Ry
YXdpbmdJbnRlcnZhbDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZVdv
cmtRdWV1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICBpZiAoaXNJZGxlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGVuZGluZy1mb3ItZGVj
b2RpbmciLCBtX2RlY29kZVF1ZXVlLnNpemUoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwZW5k
aW5nLWZvci1kcmF3aW5nIiwgbV9jb21taXRNYXAuc2l6ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZVdvcmtRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZVdvcmtRdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDQx
YmZiNzQwYjUuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lV29ya1F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDI0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiRGVjb2RpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW1hZ2VUeXBl
cy5oIgotI2luY2x1ZGUgPHd0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcEltYWdlU291cmNlOwotCi1jbGFz
cyBJbWFnZUZyYW1lV29ya1F1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdl
RnJhbWVXb3JrUXVldWU+IHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgUmVxdWVzdCB7Ci0gICAgICAg
IHVuc2lnbmVkIGluZGV4OwotICAgICAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWw7Ci0gICAgICAgIEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0aW5nU3RhdGU7Ci0gICAgICAg
IERlY29kaW5nT3B0aW9ucyBvcHRpb25zOwotICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFJlcXVlc3QmLCBjb25zdCBSZXF1ZXN0JikgPSBkZWZhdWx0OwotICAgIH07Ci0KLSAg
ICBzdGF0aWMgUmVmPEltYWdlRnJhbWVXb3JrUXVldWU+IGNyZWF0ZShCaXRtYXBJbWFnZVNvdXJj
ZSYpOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgUmVxdWVz
dCYpOwotICAgIHZvaWQgc3RvcCgpOwotCi0gICAgYm9vbCBpc0lkbGUoKSBjb25zdCB7IHJldHVy
biBtX2RlY29kZVF1ZXVlLmlzRW1wdHkoKTsgfQotCi0gICAgdm9pZCBkaWRDYWNoZU5hdGl2ZUlt
YWdlQXRJbmRleCh1bnNpZ25lZCBpbmRleCk7Ci0gICAgdm9pZCBkaWREZXN0cm95TmF0aXZlSW1h
Z2VBdEluZGV4KHVuc2lnbmVkIGluZGV4KTsKLQotICAgIGJvb2wgaXNQZW5kaW5nRGVjb2RpbmdB
dEluZGV4KHVuc2lnbmVkIGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09w
dGlvbnMmKSBjb25zdDsKLSAgICBib29sIGlzUGVuZGluZ0RyYXdpbmdBdEluZGV4KHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKLQotICAgIHZvaWQgc2V0TWluaW11bURlY29kaW5nRHVyYXRpb25Gb3JU
ZXN0aW5nKFNlY29uZHMgZHVyYXRpb24pIHsgbV9taW5pbXVtRGVjb2RpbmdEdXJhdGlvbkZvclRl
c3RpbmcgPSBkdXJhdGlvbjsgfQotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBJbWFnZUZyYW1lV29ya1F1ZXVlKEJpdG1hcEltYWdlU291cmNlJik7
Ci0KLSAgICBSZWY8Qml0bWFwSW1hZ2VTb3VyY2U+IHByb3RlY3RlZFNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlLmdldCgpLnJlbGVhc2VOb25OdWxsKCk7IH0KLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgQnVmZmVyU2l6ZSA9IDg7Ci0gICAgdXNpbmcgUmVxdWVzdFF1ZXVlID0gU3luY2hy
b25pemVkRml4ZWRRdWV1ZTxSZXF1ZXN0LCBCdWZmZXJTaXplPjsKLSAgICB1c2luZyBEZWNvZGVR
dWV1ZSA9IERlcXVlPFJlcXVlc3QsIEJ1ZmZlclNpemU+OwotICAgIHVzaW5nIENvbW1pdE1hcCA9
IEhhc2hNYXA8dW5zaWduZWQsIE1vbm90b25pY1RpbWU+OwotCi0gICAgUmVxdWVzdFF1ZXVlJiBy
ZXF1ZXN0UXVldWUoKTsKLSAgICBEZWNvZGVRdWV1ZSYgZGVjb2RlUXVldWUoKSB7IHJldHVybiBt
X2RlY29kZVF1ZXVlOyB9Ci0gICAgQ29tbWl0TWFwJiBjb21taXRNYXAoKSB7IHJldHVybiBtX2Nv
bW1pdE1hcDsgfQotCi0gICAgU2Vjb25kcyBtaW5pbXVtRGVjb2RpbmdEdXJhdGlvbkZvclRlc3Rp
bmcoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1EZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZzsg
fQotCi0gICAgVGhyZWFkU2FmZVdlYWtQdHI8Qml0bWFwSW1hZ2VTb3VyY2U+IG1fc291cmNlOwot
Ci0gICAgUmVmUHRyPFJlcXVlc3RRdWV1ZT4gbV9yZXF1ZXN0UXVldWU7Ci0gICAgRGVjb2RlUXVl
dWUgbV9kZWNvZGVRdWV1ZTsKLSAgICBDb21taXRNYXAgbV9jb21taXRNYXA7Ci0gICAgUmVmUHRy
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0KLSAgICBTZWNvbmRzIG1fbWluaW11bURlY29kaW5n
RHVyYXRpb25Gb3JUZXN0aW5nOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCmluZGV4IDA4
MmI4MGE5YWFkMS4uMGVhZWRhNzE5YmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlJikgPSAwOwogCisgICAgdmlydHVh
bCBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YShjb25zdCBJbWFnZSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgaW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSYsIEltYWdlQW5pbWF0aW5n
U3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyLCBEZWNvZGluZ1N0YXR1
cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNoYW5n
ZWRJblJlY3QoY29uc3QgSW1hZ2UmLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0
cikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVJlbmRlcmluZ1VwZGF0ZShjb25zdCBJ
bWFnZSYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcAppbmRleCA1N2U5YTcwZjdlN2EuLmIxODU0NDE0NzYyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjMgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
MjMgKzI2LDcwNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5o
IgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRXhw
ZWN0ZWQ8UmVmPE5hdGl2ZUltYWdlPiwgRGVjb2RpbmdTdGF0dXM+IEltYWdlU291cmNlOjpwcmlt
YXJ5TmF0aXZlSW1hZ2VGb3JEcmF3aW5nKFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5n
T3B0aW9ucyYpCitJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoQml0bWFwSW1hZ2UqIGltYWdlLCBB
bHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICwgbV9hbHBo
YU9wdGlvbihhbHBoYU9wdGlvbikKKyAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24o
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgLCBtX3J1bkxvb3AoUnVuTG9vcDo6Y3Vy
cmVudCgpKQoreworfQorCitJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoUmVmPE5hdGl2ZUltYWdl
PiYmIG5hdGl2ZUltYWdlKQorICAgIDogbV9ydW5Mb29wKFJ1bkxvb3A6OmN1cnJlbnQoKSkKK3sK
KyAgICBtX2ZyYW1lQ291bnQgPSAxOworICAgIG1fZW5jb2RlZERhdGFTdGF0dXMgPSBFbmNvZGVk
RGF0YVN0YXR1czo6Q29tcGxldGU7CisgICAgbV9jYWNoZWRNZXRhZGF0YS5hZGQoeyBNZXRhZGF0
YVR5cGU6OkVuY29kZWREYXRhU3RhdHVzLCBNZXRhZGF0YVR5cGU6OkZyYW1lQ291bnQgfSk7Cisg
ICAgZ3Jvd0ZyYW1lcygpOworCisgICAgc2V0TmF0aXZlSW1hZ2UoV1RGTW92ZShuYXRpdmVJbWFn
ZSkpOworCisgICAgbV9kZWNvZGVkU2l6ZSA9IG1fZnJhbWVzWzBdLmZyYW1lQnl0ZXMoKTsKKwor
ICAgIG1fc2l6ZSA9IG1fZnJhbWVzWzBdLnNpemUoKTsKKyAgICBtX29yaWVudGF0aW9uID0gSW1h
Z2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6Tm9uZSk7CisgICAg
bV9jYWNoZWRNZXRhZGF0YS5hZGQoeyBNZXRhZGF0YVR5cGU6Ok9yaWVudGF0aW9uLCBNZXRhZGF0
YVR5cGU6OlNpemUgfSk7Cit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQoreworICAg
IEFTU0VSVCghaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpOworICAgIGFzc2VydElzQ3VycmVudCht
X3J1bkxvb3ApOworfQorCitib29sIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxl
KEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgaWYgKCFkYXRhIHx8IGlzRGVj
b2RlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fZGVjb2RlciA9
IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtaW1lVHlwZSgpLCBtX2FscGhhT3B0aW9uLCBt
X2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2RlY29kZXItPnNldEVuY29kZWRE
YXRhU3RhdHVzQ2hhbmdlQ2FsbGJhY2soW3dlYWtUaGlzID0gVGhyZWFkU2FmZVdlYWtQdHIgeyAq
dGhpcyB9XSAoYXV0byBzdGF0dXMpIHsKKyAgICAgICAgaWYgKFJlZlB0ciBwcm90ZWN0ZWRUaGlz
ID0gd2Vha1RoaXMuZ2V0KCkpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5lbmNvZGVkRGF0
YVN0YXR1c0NoYW5nZWQoc3RhdHVzKTsKKyAgICB9KTsKKworICAgIGlmIChhdXRvIGV4cGVjdGVk
Q29udGVudFNpemUgPSBleHBlY3RlZENvbnRlbnRMZW5ndGgoKSkKKyAgICAgICAgbV9kZWNvZGVy
LT5zZXRFeHBlY3RlZENvbnRlbnRTaXplKGV4cGVjdGVkQ29udGVudFNpemUpOworCisgICAgLy8g
Q2hhbmdpbmcgdGhlIGRlY29kZXIgaGFzIHRvIHN0b3AgdGhlIGRlY29kaW5nIHRocmVhZC4gVGhl
IGN1cnJlbnQgZnJhbWUgd2lsbAorICAgIC8vIGNvbnRpbnVlIGRlY29kaW5nIHNhZmVseSBiZWNh
dXNlIHRoZSBkZWNvZGluZyB0aHJlYWQgaGFzIGl0cyBvd24KKyAgICAvLyByZWZlcmVuY2Ugb2Yg
dGhlIG9sZCBkZWNvZGVyLgorICAgIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShGcmFnbWVudGVkU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAoIWRhdGEgfHwg
IWVuc3VyZURlY29kZXJBdmFpbGFibGUoZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFn
ZVNvdXJjZTo6cmVzZXREYXRhKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAg
bV9kZWNvZGVyID0gbnVsbHB0cjsKKyAgICBzZXREYXRhKGRhdGEsIGlzQWxsRGF0YVJlY2VpdmVk
KCkpOworfQorCitFbmNvZGVkRGF0YVN0YXR1cyBJbWFnZVNvdXJjZTo6ZGF0YUNoYW5nZWQoRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAg
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIGNsZWFyTWV0YWRhdGEoKTsKKyAg
ICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOworICAgIGlm
IChzdGF0dXMgPj0gRW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCisgICAgICAgIGdy
b3dGcmFtZXMoKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitib29sIEltYWdlU291cmNlOjpp
c0FsbERhdGFSZWNlaXZlZCgpCit7CisgICAgcmV0dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgpID8g
bV9kZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpIDogZnJhbWVDb3VudCgpOworfQorCit2b2lk
IEltYWdlU291cmNlOjpkZXN0cm95RGVjb2RlZERhdGEoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5k
KQoreworICAgIGlmIChiZWdpbiA+PSBlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChlbmQgPD0gbV9mcmFtZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIGRlY29kZWRTaXplID0g
MDsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gYmVnaW47IGluZGV4IDwgZW5kOyArK2luZGV4
KQorICAgICAgICBkZWNvZGVkU2l6ZSArPSBtX2ZyYW1lc1tpbmRleF0uY2xlYXJJbWFnZSgpOwor
CisgICAgZGVjb2RlZFNpemVSZXNldChkZWNvZGVkU2l6ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3Vy
Y2U6OmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKQoreworICAgIHVuc2lnbmVkIGRlY29k
ZWRTaXplID0gMDsKKworICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgeworICAgICAg
ICBpZiAoIWZyYW1lLmhhc01ldGFkYXRhKCkgfHwgZnJhbWUuaXNDb21wbGV0ZSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVjb2RlZFNpemUgKz0gZnJhbWUuY2xlYXIoKTsK
KyAgICB9CisKKyAgICBkZWNvZGVkU2l6ZURlY3JlYXNlZChkZWNvZGVkU2l6ZSk7Cit9CisKK3Zv
aWQgSW1hZ2VTb3VyY2U6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUp
Cit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGJlZm9yZUZyYW1lKTsKK30KKwordm9p
ZCBJbWFnZVNvdXJjZTo6ZW5jb2RlZERhdGFTdGF0dXNDaGFuZ2VkKEVuY29kZWREYXRhU3RhdHVz
IHN0YXR1cykKK3sKKyAgICBpZiAoc3RhdHVzID09IG1fZW5jb2RlZERhdGFTdGF0dXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZW5jb2RlZERhdGFTdGF0dXMgPSBzdGF0dXM7CisKKyAgICBp
ZiAoc3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKQorICAgICAgICBn
cm93RnJhbWVzKCk7CisKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChhdXRvIG9ic2VydmVyID0gbV9pbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBv
YnNlcnZlci0+ZW5jb2RlZERhdGFTdGF0dXNDaGFuZ2VkKCptX2ltYWdlLCBzdGF0dXMpOworfQor
Cit2b2lkIEltYWdlU291cmNlOjpkZWNvZGVkU2l6ZUNoYW5nZWQobG9uZyBsb25nIGRlY29kZWRT
aXplKQoreworICAgIGlmICghZGVjb2RlZFNpemUgfHwgIW1faW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChhdXRvIGltYWdlT2JzZXJ2ZXIgPSBtX2ltYWdlLT5pbWFnZU9ic2VydmVy
KCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXItPmRlY29kZWRTaXplQ2hhbmdlZCgqbV9pbWFnZSwg
ZGVjb2RlZFNpemUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpkZWNvZGVkU2l6ZUluY3JlYXNl
ZCh1bnNpZ25lZCBkZWNvZGVkU2l6ZSkKK3sKKyAgICBpZiAoIWRlY29kZWRTaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RlY29kZWRTaXplICs9IGRlY29kZWRTaXplOworCisgICAgLy8g
VGhlIGZ1bGx5LWRlY29kZWQgZnJhbWUgd2lsbCBzdWJzdW1lIHRoZSBwYXJ0aWFsbHkgZGVjb2Rl
ZCBkYXRhIHVzZWQKKyAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcy4KKyAgICBs
b25nIGxvbmcgY2hhbmdlU2l6ZSA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oZGVjb2RlZFNpemUp
IC0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUg
PSAwOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChjaGFuZ2VTaXplKTsKK30KKwordm9pZCBJbWFn
ZVNvdXJjZTo6ZGVjb2RlZFNpemVEZWNyZWFzZWQodW5zaWduZWQgZGVjb2RlZFNpemUpCit7Cisg
ICAgaWYgKCFkZWNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fZGVj
b2RlZFNpemUgPj0gZGVjb2RlZFNpemUpOworICAgIG1fZGVjb2RlZFNpemUgLT0gZGVjb2RlZFNp
emU7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKC1zdGF0aWNfY2FzdDxsb25nIGxvbmc+KGRlY29k
ZWRTaXplKSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplUmVzZXQodW5zaWdu
ZWQgZGVjb2RlZFNpemUpCit7CisgICAgQVNTRVJUKG1fZGVjb2RlZFNpemUgPj0gZGVjb2RlZFNp
emUpOworICAgIG1fZGVjb2RlZFNpemUgLT0gZGVjb2RlZFNpemU7CisKKyAgICAvLyBDbGVhcmlu
ZyB0aGUgSW1hZ2VTb3VyY2UgZGVzdHJveXMgdGhlIGV4dHJhIGRlY29kZWQgZGF0YSB1c2VkIGZv
cgorICAgIC8vIGRldGVybWluaW5nIGltYWdlIHByb3BlcnRpZXMuCisgICAgZGVjb2RlZFNpemUg
Kz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CisgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUg
PSAwOworICAgIGRlY29kZWRTaXplQ2hhbmdlZCgtc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihkZWNv
ZGVkU2l6ZSkpOworfQorCit2b2lkIEltYWdlU291cmNlOjpkaWREZWNvZGVQcm9wZXJ0aWVzKHVu
c2lnbmVkIGRlY29kZWRQcm9wZXJ0aWVzU2l6ZSkKK3sKKyAgICBpZiAobV9kZWNvZGVkU2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbG9uZyBsb25nIGRlY29kZWRTaXplID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihkZWNvZGVkUHJvcGVydGllc1NpemUpIC0gbV9kZWNvZGVkUHJvcGVydGll
c1NpemU7CisgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSBkZWNvZGVkUHJvcGVydGllc1Np
emU7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKGRlY29kZWRTaXplKTsKK30KKwordm9pZCBJbWFn
ZVNvdXJjZTo6Z3Jvd0ZyYW1lcygpCit7CisgICAgQVNTRVJUKGlzU2l6ZUF2YWlsYWJsZSgpKTsK
KyAgICBhdXRvIG5ld1NpemUgPSBmcmFtZUNvdW50KCk7CisgICAgaWYgKG5ld1NpemUgPiBtX2Zy
YW1lcy5zaXplKCkpCisgICAgICAgIG1fZnJhbWVzLmdyb3cobmV3U2l6ZSk7Cit9CisKK3ZvaWQg
SW1hZ2VTb3VyY2U6OnNldE5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJbWFnZT4mJiBuYXRpdmVJbWFn
ZSkKK3sKKyAgICBBU1NFUlQobV9mcmFtZXMuc2l6ZSgpID09IDEpOworICAgIEltYWdlRnJhbWUm
IGZyYW1lID0gbV9mcmFtZXNbMF07CisKKyAgICBBU1NFUlQoIWlzRGVjb2RlckF2YWlsYWJsZSgp
KTsKKworICAgIGZyYW1lLm1fbmF0aXZlSW1hZ2UgPSBXVEZNb3ZlKG5hdGl2ZUltYWdlKTsKKwor
ICAgIGZyYW1lLm1fZGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7Cisg
ICAgZnJhbWUubV9zaXplID0gZnJhbWUubV9uYXRpdmVJbWFnZS0+c2l6ZSgpOworICAgIGZyYW1l
Lm1faGFzQWxwaGEgPSBmcmFtZS5tX25hdGl2ZUltYWdlLT5oYXNBbHBoYSgpOworfQorCit2b2lk
IEltYWdlU291cmNlOjpjYWNoZU1ldGFkYXRhQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtX2ZyYW1l
cy5zaXplKCkpOworICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZXNbaW5kZXhdOworCisg
ICAgQVNTRVJUKGlzRGVjb2RlckF2YWlsYWJsZSgpKTsKKyAgICBpZiAoZnJhbWUuaGFzTWV0YWRh
dGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUubV9zdWJzYW1wbGluZ0xldmVsID0g
c3Vic2FtcGxpbmdMZXZlbDsKKworICAgIGlmIChmcmFtZS5tX2RlY29kaW5nT3B0aW9ucy5oYXNT
aXplRm9yRHJhd2luZygpKSB7CisgICAgICAgIEFTU0VSVChmcmFtZS5oYXNOYXRpdmVJbWFnZSgp
KTsKKyAgICAgICAgZnJhbWUubV9zaXplID0gZnJhbWUubmF0aXZlSW1hZ2UoKS0+c2l6ZSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBmcmFtZS5tX3NpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworCisgICAgYXV0byBtZXRhZGF0YSA9IG1f
ZGVjb2Rlci0+ZnJhbWVNZXRhZGF0YUF0SW5kZXgoaW5kZXgpOworICAgIGZyYW1lLm1fb3JpZW50
YXRpb24gPSBtZXRhZGF0YS5vcmllbnRhdGlvbjsKKyAgICBmcmFtZS5tX2RlbnNpdHlDb3JyZWN0
ZWRTaXplID0gbWV0YWRhdGEuZGVuc2l0eUNvcnJlY3RlZFNpemU7CisgICAgZnJhbWUubV9oYXNB
bHBoYSA9IG1fZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOworCisgICAgaWYg
KHJlcGV0aXRpb25Db3VudCgpKQorICAgICAgICBmcmFtZS5tX2R1cmF0aW9uID0gbV9kZWNvZGVy
LT5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNh
Y2hlUGxhdGZvcm1JbWFnZUF0SW5kZXgoUGxhdGZvcm1JbWFnZVB0ciYmIHBsYXRmb3JtSW1hZ2Us
IHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBE
ZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBt
X2ZyYW1lcy5zaXplKCkpOworICAgIEltYWdlRnJhbWUmIGZyYW1lID0gbV9mcmFtZXNbaW5kZXhd
OworCisgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgaW1hZ2UgZnJhbWUgYW5kIHVwZGF0ZSB0aGUg
b2JzZXJ2ZXIgd2l0aCB0aGlzIGNsZWFyYW5jZS4KKyAgICBkZWNvZGVkU2l6ZURlY3JlYXNlZChm
cmFtZS5jbGVhcigpKTsKKworICAgIC8vIERvIG5vdCBjYWNoZSB0aGUgTmF0aXZlSW1hZ2UgaWYg
YWRkaW5nIGl0cyBmcmFtZUJ5ZXMgdG8gdGhlIE1lbW9yeUNhY2hlIHdpbGwgY2F1c2UgbnVtZXJp
Y2FsIG92ZXJmbG93LgorICAgIHNpemVfdCBmcmFtZUJ5dGVzID0gc2l6ZSgpLnVuY2xhbXBlZEFy
ZWEoKSAqIHNpemVvZih1aW50MzJfdCk7CisgICAgaWYgKCFpc0luQm91bmRzPHVuc2lnbmVkPihm
cmFtZUJ5dGVzICsgZGVjb2RlZFNpemUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
ZGVjb2RpbmdTdGF0dXMgPSBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgp
ID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDogRGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisK
KyAgICAvLyBNb3ZlIHRoZSBuZXcgaW1hZ2UgdG8gdGhlIGNhY2hlLgorICAgIGZyYW1lLm1fbmF0
aXZlSW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUocGxhdGZvcm1JbWFnZSkpOwor
ICAgIGZyYW1lLm1fZGVjb2RpbmdPcHRpb25zID0gZGVjb2RpbmdPcHRpb25zOworICAgIGZyYW1l
Lm1fZGVjb2RpbmdTdGF0dXMgPSBkZWNvZGluZ1N0YXR1czsKKyAgICBjYWNoZU1ldGFkYXRhQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIG9ic2Vy
dmVyIHdpdGggdGhlIG5ldyBpbWFnZSBmcmFtZSBieXRlcy4KKyAgICBkZWNvZGVkU2l6ZUluY3Jl
YXNlZChmcmFtZS5mcmFtZUJ5dGVzKCkpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjYWNoZVBs
YXRmb3JtSW1hZ2VBdEluZGV4QXN5bmMoUGxhdGZvcm1JbWFnZVB0ciYmIHBsYXRmb3JtSW1hZ2Us
IHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBE
ZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKK3sKKyAgICBpZiAoIWlzRGVjb2RlckF2
YWlsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaW5kZXggPCBtX2ZyYW1l
cy5zaXplKCkpOworCisgICAgLy8gQ2xlYW4gdGhlIG9sZCBuYXRpdmUgaW1hZ2UgYW5kIHNldCBh
IG5ldyBvbmUKKyAgICBjYWNoZVBsYXRmb3JtSW1hZ2VBdEluZGV4KFdURk1vdmUocGxhdGZvcm1J
bWFnZSksIGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOworICAgIExP
RyhJbWFnZXMsICJJbWFnZVNvdXJjZTo6JXMgLSAlcCAtIHVybDogJXMgW2ZyYW1lICVsZCBoYXMg
YmVlbiBjYWNoZWRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpbmRleCk7CisKKyAgICAvLyBOb3RpZnkgdGhlIGltYWdlIHdpdGggdGhl
IHJlYWRpbmVzcyBvZiB0aGUgbmV3IGZyYW1lIE5hdGl2ZUltYWdlLgorICAgIGlmIChtX2ltYWdl
KQorICAgICAgICBtX2ltYWdlLT5pbWFnZUZyYW1lQXZhaWxhYmxlQXRJbmRleChpbmRleCk7Cit9
CisKK1dvcmtRdWV1ZSYgSW1hZ2VTb3VyY2U6OmRlY29kaW5nUXVldWUoKQoreworICAgIGlmICgh
bV9kZWNvZGluZ1F1ZXVlKQorICAgICAgICBtX2RlY29kaW5nUXVldWUgPSBXb3JrUXVldWU6OmNy
ZWF0ZSgib3JnLndlYmtpdC5JbWFnZURlY29kZXIiLCBXb3JrUXVldWU6OlFPUzo6RGVmYXVsdCk7
CisKKyAgICByZXR1cm4gKm1fZGVjb2RpbmdRdWV1ZTsKK30KKworSW1hZ2VTb3VyY2U6OkZyYW1l
UmVxdWVzdFF1ZXVlJiBJbWFnZVNvdXJjZTo6ZnJhbWVSZXF1ZXN0UXVldWUoKQoreworICAgIGlm
ICghbV9mcmFtZVJlcXVlc3RRdWV1ZSkKKyAgICAgICAgbV9mcmFtZVJlcXVlc3RRdWV1ZSA9IEZy
YW1lUmVxdWVzdFF1ZXVlOjpjcmVhdGUoKTsKKworICAgIHJldHVybiAqbV9mcmFtZVJlcXVlc3RR
dWV1ZTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6Y2FuVXNlQXN5bmNEZWNvZGluZygpCit7Cisg
ICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3IgZW5hYmxpbmcgYXN5
bmMgaW1hZ2UgZGVjb2RpbmcuCisgICAgcmV0dXJuIHNpemUoKS5hcmVhKCkgKiBzaXplb2YodWlu
dDMyX3QpID49IChmcmFtZUNvdW50KCkgPiAxID8gMTAwICogS0IgOiA1MDAgKiBLQik7Cit9CisK
K3ZvaWQgSW1hZ2VTb3VyY2U6OnN0YXJ0QXN5bmNEZWNvZGluZ1F1ZXVlKCkKK3sKKyAgICBpZiAo
aGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgfHwgIWlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBBc3luYyBkZWNvZGluZyBpcyBvbmx5IGVuYWJsZWQgZm9yIEhU
TUxJbWFnZUVsZW1lbnQgYW5kIENTUyBiYWNrZ3JvdW5kIGltYWdlcy4KKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCisgICAgLy8gV2UgbmVlZCB0byBwcm90ZWN0IHRoaXMsIG1fZGVjb2Rp
bmdRdWV1ZSBhbmQgbV9kZWNvZGVyIGZyb20gYmVpbmcgZGVsZXRlZCB3aGlsZSB3ZSBhcmUgaW4g
dGhlIGRlY29kaW5nIGxvb3AuCisgICAgZGVjb2RpbmdRdWV1ZSgpLmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcHJvdGVjdGVkRGVjb2RpbmdRdWV1ZSA9IFJlZiB7IGRl
Y29kaW5nUXVldWUoKSB9LCBwcm90ZWN0ZWRGcmFtZVJlcXVlc3RRdWV1ZSA9IFJlZiB7IGZyYW1l
UmVxdWVzdFF1ZXVlKCkgfSwgcHJvdGVjdGVkRGVjb2RlciA9IFJlZiB7ICptX2RlY29kZXIgfSwg
c291cmNlVVJMID0gc291cmNlVVJMKCkuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFi
bGUgeworICAgICAgICBJbWFnZUZyYW1lUmVxdWVzdCBmcmFtZVJlcXVlc3Q7CisgICAgICAgIFNl
Y29uZHMgbWluRGVjb2RpbmdEdXJhdGlvbiA9IHByb3RlY3RlZFRoaXMtPmZyYW1lRGVjb2RpbmdE
dXJhdGlvbkZvclRlc3RpbmcoKTsKKworICAgICAgICB3aGlsZSAocHJvdGVjdGVkRnJhbWVSZXF1
ZXN0UXVldWUtPmRlcXVldWUoZnJhbWVSZXF1ZXN0KSkgeworICAgICAgICAgICAgVHJhY2VTY29w
ZSB0cmFjaW5nU2NvcGUoQXN5bmNJbWFnZURlY29kZVN0YXJ0LCBBc3luY0ltYWdlRGVjb2RlRW5k
KTsKKworICAgICAgICAgICAgTW9ub3RvbmljVGltZSBzdGFydGluZ1RpbWU7CisgICAgICAgICAg
ICBpZiAobWluRGVjb2RpbmdEdXJhdGlvbiA+IDBfcykKKyAgICAgICAgICAgICAgICBzdGFydGlu
Z1RpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSBm
cmFtZSBOYXRpdmVJbWFnZSBvbiB0aGUgZGVjb2RpbmcgdGhyZWFkLgorICAgICAgICAgICAgYXV0
byBwbGF0Zm9ybUltYWdlID0gcHJvdGVjdGVkRGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoZnJhbWVSZXF1ZXN0LmluZGV4LCBmcmFtZVJlcXVlc3Quc3Vic2FtcGxpbmdMZXZlbCwgZnJh
bWVSZXF1ZXN0LmRlY29kaW5nT3B0aW9ucyk7CisgICAgICAgICAgICBpZiAocGxhdGZvcm1JbWFn
ZSkKKyAgICAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiSW1hZ2VTb3VyY2U6OiVzIC0gJXAgLSB1
cmw6ICVzIFtmcmFtZSAlbGQgaGFzIGJlZW4gZGVjb2RlZF0iLCBfX0ZVTkNUSU9OX18sIHByb3Rl
Y3RlZFRoaXMucHRyKCksIHNvdXJjZVVSTC51dGY4KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5k
ZXgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIklt
YWdlU291cmNlOjolcyAtICVwIC0gdXJsOiAlcyBbZGVjb2RpbmcgZm9yIGZyYW1lICVsZCBoYXMg
ZmFpbGVkXSIsIF9fRlVOQ1RJT05fXywgcHJvdGVjdGVkVGhpcy5wdHIoKSwgc291cmNlVVJMLnV0
ZjgoKS5kYXRhKCksIGZyYW1lUmVxdWVzdC5pbmRleCk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFByZXRlbmQgYXMgaWYgdGhlIGRl
Y29kaW5nIHRha2VzIG1pbkRlY29kaW5nRHVyYXRpb24uCisgICAgICAgICAgICBpZiAobWluRGVj
b2RpbmdEdXJhdGlvbiA+IDBfcykKKyAgICAgICAgICAgICAgICBzbGVlcChtaW5EZWNvZGluZ0R1
cmF0aW9uIC0gKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRpbmdUaW1lKSk7CisKKyAgICAg
ICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGVkIGZyYW1lcyBvbiB0aGUgY3JlYXRpb24gdGhyZWFk
IHRvIGF2b2lkIHVwZGF0aW5nIHRoZSBNZW1vcnlDYWNoZSBmcm9tIGEgZGlmZmVyZW50IHRocmVh
ZC4KKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMsIHByb3RlY3Rl
ZERlY29kaW5nUXVldWUsIHByb3RlY3RlZERlY29kZXIsIHNvdXJjZVVSTCA9IFdURk1vdmUoc291
cmNlVVJMKS5pc29sYXRlZENvcHkoKSwgcGxhdGZvcm1JbWFnZSA9IFdURk1vdmUocGxhdGZvcm1J
bWFnZSksIGZyYW1lUmVxdWVzdF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgLy8gVGhl
IHF1ZXVlIG1heSBoYXZlIGJlZW4gY2xvc2VkIGlmIGFmdGVyIHdlIGdvdCB0aGUgZnJhbWUgTmF0
aXZlSW1hZ2UsIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKSB3YXMgY2FsbGVkLgorICAgICAgICAg
ICAgICAgIGlmIChwcm90ZWN0ZWREZWNvZGluZ1F1ZXVlLnB0cigpID09IHByb3RlY3RlZFRoaXMt
Pm1fZGVjb2RpbmdRdWV1ZSAmJiBwcm90ZWN0ZWREZWNvZGVyLnB0cigpID09IHByb3RlY3RlZFRo
aXMtPm1fZGVjb2RlcikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdGVjdGVkVGhp
cy0+bV9mcmFtZUNvbW1pdFF1ZXVlLmZpcnN0KCkgPT0gZnJhbWVSZXF1ZXN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9mcmFtZUNvbW1pdFF1ZXVlLnJlbW92ZUZpcnN0
KCk7CisgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNhY2hlUGxhdGZvcm1JbWFn
ZUF0SW5kZXhBc3luYyhXVEZNb3ZlKHBsYXRmb3JtSW1hZ2UpLCBmcmFtZVJlcXVlc3QuaW5kZXgs
IGZyYW1lUmVxdWVzdC5zdWJzYW1wbGluZ0xldmVsLCBmcmFtZVJlcXVlc3QuZGVjb2RpbmdPcHRp
b25zKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgTE9HKElt
YWdlcywgIkltYWdlU291cmNlOjolcyAtICVwIC0gdXJsOiAlcyBbZnJhbWUgJWxkIHdpbGwgbm90
IGNhY2hlZF0iLCBfX0ZVTkNUSU9OX18sIHByb3RlY3RlZFRoaXMucHRyKCksIHNvdXJjZVVSTC51
dGY4KCkuZGF0YSgpLCBmcmFtZVJlcXVlc3QuaW5kZXgpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBFbnN1cmUgZGVzdHJ1Y3Rpb24gaGFwcGVucyBvbiBjcmVhdGlv
biB0aHJlYWQuCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpLCBwcm90ZWN0ZWRRdWV1ZSA9IFdURk1vdmUocHJvdGVjdGVkRGVj
b2RpbmdRdWV1ZSksIHByb3RlY3RlZERlY29kZXIgPSBXVEZNb3ZlKHByb3RlY3RlZERlY29kZXIp
XSAoKSBtdXRhYmxlIHsgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnJlcXVl
c3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+JiBzaXplRm9y
RHJhd2luZykKIHsKLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IHByaW1hcnlOYXRpdmVJbWFn
ZSgpKQotICAgICAgICByZXR1cm4gbmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwoKTsKLSAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpOworICAgIEFTU0VS
VChpc0RlY29kZXJBdmFpbGFibGUoKSk7CisgICAgaWYgKCFoYXNBc3luY0RlY29kaW5nUXVldWUo
KSkKKyAgICAgICAgc3RhcnRBc3luY0RlY29kaW5nUXVldWUoKTsKKworICAgIEFTU0VSVChpbmRl
eCA8IG1fZnJhbWVzLnNpemUoKSk7CisKKyAgICBMT0coSW1hZ2VzLCAiSW1hZ2VTb3VyY2U6OiVz
IC0gJXAgLSB1cmw6ICVzIFtlbnF1ZXVpbmcgZnJhbWUgJWxkIGZvciBkZWNvZGluZ10iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGluZGV4
KTsKKyAgICBEZWNvZGluZ09wdGlvbnMgZGVjb2RpbmdPcHRpb25zID0geyBEZWNvZGluZ01vZGU6
OkFzeW5jaHJvbm91cywgc2l6ZUZvckRyYXdpbmcgfTsKKyAgICBtX2ZyYW1lUmVxdWVzdFF1ZXVl
LT5lbnF1ZXVlKHsgaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kaW5nT3B0aW9ucyB9KTsK
KyAgICBtX2ZyYW1lQ29tbWl0UXVldWUuYXBwZW5kKHsgaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWws
IGRlY29kaW5nT3B0aW9ucyB9KTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNBc3luY0RlY29k
aW5nUXVldWVJZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZUNvbW1pdFF1ZXVlLmlz
RW1wdHkoKTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgp
Cit7CisgICAgaWYgKCFoYXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RkOjpmb3JfZWFjaChtX2ZyYW1lQ29tbWl0UXVldWUuYmVnaW4oKSwgbV9mcmFtZUNv
bW1pdFF1ZXVlLmVuZCgpLCBbdGhpc10oY29uc3QgSW1hZ2VGcmFtZVJlcXVlc3QmIGZyYW1lUmVx
dWVzdCkgeworICAgICAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVzW2ZyYW1lUmVxdWVz
dC5pbmRleF07CisgICAgICAgIGlmICghZnJhbWUuaXNJbnZhbGlkKCkpIHsKKyAgICAgICAgICAg
IExPRyhJbWFnZXMsICJJbWFnZVNvdXJjZTo6JXMgLSAlcCAtIHVybDogJXMgW2RlY29kaW5nIGhh
cyBiZWVuIGNhbmNlbGxlZCBmb3IgZnJhbWUgJWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291
cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZnJhbWVSZXF1ZXN0LmluZGV4KTsKKyAg
ICAgICAgICAgIGZyYW1lLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIENs
b3NlIG1fZnJhbWVSZXF1ZXN0UXVldWUgdGhlbiBzZXQgaXQgdG8gbnVsbHB0ci4gQSBuZXcgZGVj
b2RpbmcgdGhyZWFkIG1pZ2h0IHN0YXJ0IGFuZCBhCisgICAgLy8gbmV3IG1fZnJhbWVSZXF1ZXN0
UXVldWUgd2lsbCBiZSBjcmVhdGVkLiBTbyB0aGUgdGVybWluYXRpbmcgdGhyZWFkIHdpbGwgbm90
IGhhdmUgYWNjZXNzIHRvIGl0LgorICAgIG1fZnJhbWVSZXF1ZXN0UXVldWUtPmNsb3NlKCk7Cisg
ICAgbV9mcmFtZVJlcXVlc3RRdWV1ZSA9IG51bGxwdHI7CisgICAgbV9mcmFtZUNvbW1pdFF1ZXVl
LmNsZWFyKCk7CisgICAgbV9kZWNvZGluZ1F1ZXVlID0gbnVsbHB0cjsKKyAgICBMT0coSW1hZ2Vz
LCAiSW1hZ2VTb3VyY2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtkZWNvZGluZyBoYXMgYmVlbiBzdG9w
cGVkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Cit9CisKK2NvbnN0IEltYWdlRnJhbWUmIEltYWdlU291cmNlOjpmcmFtZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZTo6Q2FjaGluZyBjYWNoaW5nLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBj
b25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKK3sKKyAgICBpZiAoaW5kZXgg
Pj0gbV9mcmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZTo6ZGVmYXVsdEZy
YW1lKCk7CisKKyAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVzW2luZGV4XTsKKyAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpIHx8IGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBh
dGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01v
ZGU6OkFzeW5jaHJvbm91cykpKQorICAgICAgICByZXR1cm4gZnJhbWU7CisKKyAgICBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxWYWx1ZSA9IHN1YnNhbXBsaW5nTGV2ZWwgPyBzdWJz
YW1wbGluZ0xldmVsLnZhbHVlKCkgOiBmcmFtZS5zdWJzYW1wbGluZ0xldmVsKCk7CisKKyAgICBz
d2l0Y2ggKGNhY2hpbmcpIHsKKyAgICBjYXNlIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRh
OgorICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbWV0YWRhdGEgZnJvbSBJbWFnZURlY29kZXIgaWYg
dGhlIEltYWdlRnJhbWUgaXNuJ3QgY29tcGxldGUuCisgICAgICAgIGlmIChmcmFtZS5pc0NvbXBs
ZXRlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FjaGVNZXRhZGF0YUF0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWxWYWx1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbWFnZUZyYW1lOjpDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlOgorICAgICAgICAvLyBDYWNo
ZSB0aGUgaW1hZ2UgYW5kIHJldHJpZXZlIHRoZSBtZXRhZGF0YSBmcm9tIEltYWdlRGVjb2RlciBv
bmx5IGlmIHRoZXJlIHdhcyBub3QgdmFsaWQgaW1hZ2Ugc3RvcmVkLgorICAgICAgICBpZiAoZnJh
bWUuaXNDb21wbGV0ZSgpICYmIGZyYW1lLmhhc0Z1bGxTaXplTmF0aXZlSW1hZ2Uoc3Vic2FtcGxp
bmdMZXZlbCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBXZSBoYXZlIHRvIHBl
cmZvcm0gc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcgaW4gdGhpcyBjb2RlLgorICAgICAgICBh
dXRvIHBsYXRmb3JtSW1hZ2UgPSBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsVmFsdWUsIGRlY29kaW5nT3B0aW9ucyk7CisgICAgICAgIC8v
IENsZWFuIHRoZSBvbGQgbmF0aXZlIGltYWdlIGFuZCBzZXQgYSBuZXcgb25lLgorICAgICAgICBj
YWNoZVBsYXRmb3JtSW1hZ2VBdEluZGV4KFdURk1vdmUocGxhdGZvcm1JbWFnZSksIGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsVmFsdWUsIERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNo
cm9ub3VzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmcmFtZTsKK30K
Kwordm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXJNZXRhZGF0YSgpCit7CisgICAgbV9jYWNoZWRNZXRh
ZGF0YS5yZW1vdmUoeworICAgICAgICBNZXRhZGF0YVR5cGU6OkVuY29kZWREYXRhU3RhdHVzLAor
ICAgICAgICBNZXRhZGF0YVR5cGU6OkZyYW1lQ291bnQsCisgICAgICAgIE1ldGFkYXRhVHlwZTo6
UHJpbWFyeUZyYW1lSW5kZXgsCisgICAgICAgIE1ldGFkYXRhVHlwZTo6UmVwZXRpdGlvbkNvdW50
LAorICAgICAgICBNZXRhZGF0YVR5cGU6OlNpbmdsZVBpeGVsU29saWRDb2xvciwKKyAgICAgICAg
TWV0YWRhdGFUeXBlOjpVVEkKKyAgICB9KTsKK30KKworVVJMIEltYWdlU291cmNlOjpzb3VyY2VV
UkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+c291cmNlVVJMKCkg
OiBVUkwoKTsKK30KKworU3RyaW5nIEltYWdlU291cmNlOjptaW1lVHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLT5taW1lVHlwZSgpIDogZW1wdHlTdHJpbmcoKTsK
K30KKworbG9uZyBsb25nIEltYWdlU291cmNlOjpleHBlY3RlZENvbnRlbnRMZW5ndGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS0+ZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KCkgOiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBJbWFnZVNvdXJjZTo6bWV0YWRh
dGFDYWNoZUlmTmVlZGVkKFQmIGNhY2hlZFZhbHVlLCBjb25zdCBUJiBkZWZhdWx0VmFsdWUsIE1l
dGFkYXRhVHlwZSBtZXRhZGF0YVR5cGUsIFQgKEltYWdlRGVjb2Rlcjo6KmZ1bmN0b3IpKCkgY29u
c3QpCit7CisgICAgaWYgKG1fY2FjaGVkTWV0YWRhdGEuY29udGFpbnMobWV0YWRhdGFUeXBlKSkK
KyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworCisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFi
bGUoKSB8fCAhbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZTsKKworICAgIGNhY2hlZFZhbHVlID0gKCptX2RlY29kZXIuKmZ1bmN0b3IpKCk7
CisgICAgbV9jYWNoZWRNZXRhZGF0YS5hZGQobWV0YWRhdGFUeXBlKTsKKyAgICBkaWREZWNvZGVQ
cm9wZXJ0aWVzKG1fZGVjb2Rlci0+Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkp
OworICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Qg
SW1hZ2VTb3VyY2U6OmZpcnN0RnJhbWVNZXRhZGF0YUNhY2hlSWZOZWVkZWQoVCYgY2FjaGVkVmFs
dWUsIE1ldGFkYXRhVHlwZSBtZXRhZGF0YVR5cGUsIFQgKEltYWdlRnJhbWU6OipmdW5jdG9yKSgp
IGNvbnN0LCBJbWFnZUZyYW1lOjpDYWNoaW5nIGNhY2hpbmcsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgaWYgKG1fY2FjaGVk
TWV0YWRhdGEuY29udGFpbnMobWV0YWRhdGFUeXBlKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZh
bHVlOworCisgICAgY29uc3QgSW1hZ2VGcmFtZSYgZnJhbWUgPSBmcmFtZUF0SW5kZXhDYWNoZUlm
TmVlZGVkKDAsIGNhY2hpbmcsIHN1YnNhbXBsaW5nTGV2ZWwpOworCisgICAgLy8gRG9uJ3QgY2Fj
aGUgYW55IHVuYXZhaWxhYmxlIGZyYW1lIG1ldGFkYXRhLgorICAgIGlmICghZnJhbWUuaGFzTWV0
YWRhdGEoKSkKKyAgICAgICAgcmV0dXJuIChmcmFtZS4qZnVuY3RvcikoKTsKKworICAgIGNhY2hl
ZFZhbHVlID0gKGZyYW1lLipmdW5jdG9yKSgpOworICAgIG1fY2FjaGVkTWV0YWRhdGEuYWRkKG1l
dGFkYXRhVHlwZSk7CisgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworfQorCitFbmNvZGVkRGF0YVN0
YXR1cyBJbWFnZVNvdXJjZTo6ZW5jb2RlZERhdGFTdGF0dXMoKQoreworICAgIHJldHVybiBtZXRh
ZGF0YUNhY2hlSWZOZWVkZWQobV9lbmNvZGVkRGF0YVN0YXR1cywgRW5jb2RlZERhdGFTdGF0dXM6
OlVua25vd24sIE1ldGFkYXRhVHlwZTo6RW5jb2RlZERhdGFTdGF0dXMsICZJbWFnZURlY29kZXI6
OmVuY29kZWREYXRhU3RhdHVzKTsKK30KKworc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50
KCkKK3sKKyAgICByZXR1cm4gbWV0YWRhdGFDYWNoZUlmTmVlZGVkKG1fZnJhbWVDb3VudCwgbV9m
cmFtZXMuc2l6ZSgpLCBNZXRhZGF0YVR5cGU6OkZyYW1lQ291bnQsICZJbWFnZURlY29kZXI6OmZy
YW1lQ291bnQpOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OnByaW1hcnlGcmFtZUluZGV4KCkK
K3sKKyAgICByZXR1cm4gbWV0YWRhdGFDYWNoZUlmTmVlZGVkKG1fcHJpbWFyeUZyYW1lSW5kZXgs
IHN0YXRpY19jYXN0PHNpemVfdD4oMCksIE1ldGFkYXRhVHlwZTo6UHJpbWFyeUZyYW1lSW5kZXgs
ICZJbWFnZURlY29kZXI6OnByaW1hcnlGcmFtZUluZGV4KTsKK30KKworUmVwZXRpdGlvbkNvdW50
IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQoreworICAgIHJldHVybiBtZXRhZGF0YUNh
Y2hlSWZOZWVkZWQobV9yZXBldGl0aW9uQ291bnQsIHN0YXRpY19jYXN0PFJlcGV0aXRpb25Db3Vu
dD4oUmVwZXRpdGlvbkNvdW50Tm9uZSksIE1ldGFkYXRhVHlwZTo6UmVwZXRpdGlvbkNvdW50LCAm
SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6
OnV0aSgpCit7CisjaWYgVVNFKENHKQorICAgIHJldHVybiBtZXRhZGF0YUNhY2hlSWZOZWVkZWQo
bV91dGksIFN0cmluZygpLCBNZXRhZGF0YVR5cGU6OlVUSSwgJkltYWdlRGVjb2Rlcjo6dXRpKTsK
KyNlbHNlCisgICAgcmV0dXJuIFN0cmluZygpOworI2VuZGlmCit9CisKK1N0cmluZyBJbWFnZVNv
dXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKQoreworICAgIHJldHVybiBtZXRhZGF0YUNhY2hlSWZO
ZWVkZWQobV9maWxlbmFtZUV4dGVuc2lvbiwgU3RyaW5nKCksIE1ldGFkYXRhVHlwZTo6RmlsZU5h
bWVFeHRlbnNpb24sICZJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKTsKK30KKworU3Ry
aW5nIEltYWdlU291cmNlOjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKQoreworICAgIHJldHVy
biBtZXRhZGF0YUNhY2hlSWZOZWVkZWQobV9hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24sIFN0cmlu
ZygpLCBNZXRhZGF0YVR5cGU6OkFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbiwgJkltYWdlRGVjb2Rl
cjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKTsKK30KKworc3RkOjpvcHRpb25hbDxJbnRQb2lu
dD4gSW1hZ2VTb3VyY2U6OmhvdFNwb3QoKQoreworICAgIHJldHVybiBtZXRhZGF0YUNhY2hlSWZO
ZWVkZWQobV9ob3RTcG90LCB7IH0sIE1ldGFkYXRhVHlwZTo6SG90U3BvdCwgJkltYWdlRGVjb2Rl
cjo6aG90U3BvdCk7Cit9CisKK0ltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0
aW9uKCkKK3sKKyAgICByZXR1cm4gZmlyc3RGcmFtZU1ldGFkYXRhQ2FjaGVJZk5lZWRlZChtX29y
aWVudGF0aW9uLCBNZXRhZGF0YVR5cGU6Ok9yaWVudGF0aW9uLCAmSW1hZ2VGcmFtZTo6b3JpZW50
YXRpb24sIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhKTsKK30KKworc3RkOjpvcHRpb25h
bDxJbnRTaXplPiBJbWFnZVNvdXJjZTo6ZGVuc2l0eUNvcnJlY3RlZFNpemUoSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBhdXRvIHNpemUgPSBmaXJzdEZyYW1lTWV0YWRhdGFD
YWNoZUlmTmVlZGVkKG1fZGVuc2l0eUNvcnJlY3RlZFNpemUsIE1ldGFkYXRhVHlwZTo6RGVuc2l0
eUNvcnJlY3RlZFNpemUsICZJbWFnZUZyYW1lOjpkZW5zaXR5Q29ycmVjdGVkU2l6ZSwgSW1hZ2VG
cmFtZTo6Q2FjaGluZzo6TWV0YWRhdGEpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBJbWFnZU9yaWVudGF0aW9u
OjpPcmllbnRhdGlvbjo6RnJvbUltYWdlKQorICAgICAgICBvcmllbnRhdGlvbiA9IHRoaXMtPm9y
aWVudGF0aW9uKCk7CisKKyAgICByZXR1cm4gb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQo
KSA/IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4oc2l6ZS52YWx1ZSgpLnRyYW5zcG9zZWRTaXplKCkp
IDogc2l6ZTsKIH0KIAotRXhwZWN0ZWQ8UmVmPE5hdGl2ZUltYWdlPiwgRGVjb2RpbmdTdGF0dXM+
IEltYWdlU291cmNlOjpjdXJyZW50TmF0aXZlSW1hZ2VGb3JEcmF3aW5nKFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBvcHRpb25zKQorSW50
U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewot
ICAgIHJldHVybiBwcmltYXJ5TmF0aXZlSW1hZ2VGb3JEcmF3aW5nKHN1YnNhbXBsaW5nTGV2ZWws
IG9wdGlvbnMpOworICAgIGF1dG8gcHJlZmVycmVkU2l6ZSA9IGRlbnNpdHlDb3JyZWN0ZWRTaXpl
KG9yaWVudGF0aW9uKTsKKyAgICByZXR1cm4gcHJlZmVycmVkU2l6ZSA/IHByZWZlcnJlZFNpemUu
dmFsdWUoKSA6IHNvdXJjZVNpemUob3JpZW50YXRpb24pOwogfQogCi1ib29sIEltYWdlU291cmNl
OjpoYXNTb2xpZENvbG9yKCkgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNvdXJjZVNpemUo
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICByZXR1cm4gc2l6ZSgpID09IElu
dFNpemUoMSwgMSkgJiYgZnJhbWVDb3VudCgpID09IDE7CisgICAgSW50U2l6ZSBzaXplOworI2lm
ICFVU0UoQ0cpCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgZGVjb2RlZCB0aGUg
bWV0YWRhdGEsIGJ1dCBub3QgZnJhbWUgY29udGVudHMgeWV0LiBJbiB0aGF0IGNhc2UgSW1hZ2VE
ZWNvZGVyIGNsYWltcyB0bworICAgIC8vIGhhdmUgdGhlIHNpemUgYXZhaWxhYmxlLCBidXQgdGhl
IGZyYW1lIGNhY2hlIGlzIGVtcHR5LiBSZXR1cm4gdGhlIGRlY29kZXIgc2l6ZSB3aXRob3V0IGNh
Y2hpbmcgaW4gc3VjaCBjYXNlLgorICAgIGlmIChtX2ZyYW1lcy5pc0VtcHR5KCkgJiYgaXNEZWNv
ZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHNpemUgPSBtX2RlY29kZXItPnNpemUoKTsKKyAgICBl
bHNlCisjZW5kaWYKKyAgICAgICAgc2l6ZSA9IGZpcnN0RnJhbWVNZXRhZGF0YUNhY2hlSWZOZWVk
ZWQobV9zaXplLCBNZXRhZGF0YVR5cGU6OlNpemUsICZJbWFnZUZyYW1lOjpzaXplLCBJbWFnZUZy
YW1lOjpDYWNoaW5nOjpNZXRhZGF0YSwgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CisKKyAg
ICBpZiAob3JpZW50YXRpb24gPT0gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246OkZyb21J
bWFnZSkKKyAgICAgICAgb3JpZW50YXRpb24gPSB0aGlzLT5vcmllbnRhdGlvbigpOworCisgICAg
cmV0dXJuIG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRT
aXplKCkgOiBzaXplOworfQorCitDb2xvciBJbWFnZVNvdXJjZTo6c2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCkKK3sKKyAgICBpZiAoIW1fY2FjaGVkTWV0YWRhdGEuY29udGFpbnMoTWV0YWRhdGFUeXBl
OjpTaW5nbGVQaXhlbFNvbGlkQ29sb3IpICYmIChzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSB8fCBm
cmFtZUNvdW50KCkgIT0gMSkpIHsKKyAgICAgICAgbV9zaW5nbGVQaXhlbFNvbGlkQ29sb3IgPSBD
b2xvcigpOworICAgICAgICBtX2NhY2hlZE1ldGFkYXRhLmFkZChNZXRhZGF0YVR5cGU6OlNpbmds
ZVBpeGVsU29saWRDb2xvcik7CisgICAgfQorCisgICAgcmV0dXJuIGZpcnN0RnJhbWVNZXRhZGF0
YUNhY2hlSWZOZWVkZWQobV9zaW5nbGVQaXhlbFNvbGlkQ29sb3IsIE1ldGFkYXRhVHlwZTo6U2lu
Z2xlUGl4ZWxTb2xpZENvbG9yLCAmSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yLCBJ
bWFnZUZyYW1lOjpDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKK30KKworU3Vic2FtcGxpbmdM
ZXZlbCBJbWFnZVNvdXJjZTo6bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKQoreworICAgIGlmICht
X2NhY2hlZE1ldGFkYXRhLmNvbnRhaW5zKE1ldGFkYXRhVHlwZTo6TWF4aW11bVN1YnNhbXBsaW5n
TGV2ZWwpKQorICAgICAgICByZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKKworICAg
IGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkgfHwgIW1fZGVjb2Rlci0+ZnJhbWVBbGxvd1N1YnNh
bXBsaW5nQXRJbmRleCgwKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1
bHQ7CisKKyAgICAvLyBGSVhNRTogdGhpcyB2YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJp
YXRlIGZvciBpT1Mgc2luY2UgdGhlIGltYWdlCisgICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBl
bmFibGVkIGJ5IGRlZmF1bHQgb24gaU9TLiBDaG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAv
LyBpZiBpbWFnZSBzdWJzYW1wbGluZyBpcyBlbmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgorICAg
IGNvbnN0IGludCBtYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAq
IDEwMjQ7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkZp
cnN0OworCisgICAgZm9yICg7IGxldmVsIDwgU3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKytsZXZl
bCkgeworICAgICAgICBpZiAoZnJhbWVTaXplQXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpIDwgbWF4
aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOworICAgIG1fY2FjaGVk
TWV0YWRhdGEuYWRkKE1ldGFkYXRhVHlwZTo6TWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworICAg
IHJldHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsOworfQorCitib29sIEltYWdlU291cmNl
OjpmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNp
emVfdCBpbmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpCit7Cisg
ICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihtX2ZyYW1lQ29tbWl0UXVldWUuYmVnaW4oKSwgbV9m
cmFtZUNvbW1pdFF1ZXVlLmVuZCgpLCBbaW5kZXgsICZkZWNvZGluZ09wdGlvbnNdKGNvbnN0IElt
YWdlRnJhbWVSZXF1ZXN0JiBmcmFtZVJlcXVlc3QpIHsKKyAgICAgICAgcmV0dXJuIGZyYW1lUmVx
dWVzdC5pbmRleCA9PSBpbmRleCAmJiBmcmFtZVJlcXVlc3QuZGVjb2RpbmdPcHRpb25zLmlzQ29t
cGF0aWJsZVdpdGgoZGVjb2RpbmdPcHRpb25zKTsKKyAgICB9KTsKKyAgICByZXR1cm4gaXQgIT0g
bV9mcmFtZUNvbW1pdFF1ZXVlLmVuZCgpOworfQorCitEZWNvZGluZ1N0YXR1cyBJbWFnZVNvdXJj
ZTo6ZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVy
biBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4LCBJbWFnZUZyYW1lOjpDYWNoaW5nOjpN
ZXRhZGF0YSkuZGVjb2RpbmdTdGF0dXMoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBmcmFtZUF0SW5kZXgo
aW5kZXgpLmhhc0FscGhhKCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzRnVsbFNp
emVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1
YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsKQoreworICAgIHJldHVybiBmcmFtZUF0
SW5kZXgoaW5kZXgpLmhhc0Z1bGxTaXplTmF0aXZlSW1hZ2Uoc3Vic2FtcGxpbmdMZXZlbCk7Cit9
CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJs
ZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vi
c2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYg
ZGVjb2RpbmdPcHRpb25zKQoreworICAgIHJldHVybiBmcmFtZUF0SW5kZXgoaW5kZXgpLmhhc0Rl
Y29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBk
ZWNvZGluZ09wdGlvbnMpOworfQorCitTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpmcmFt
ZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gZnJh
bWVBdEluZGV4KGluZGV4KS5zdWJzYW1wbGluZ0xldmVsKCk7Cit9CisKK0ludFNpemUgSW1hZ2VT
b3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgcmV0dXJuIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQo
aW5kZXgsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhLCBzdWJzYW1wbGluZ0xldmVsKS5z
aXplKCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICByZXR1
cm4gZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6
TWV0YWRhdGEsIHN1YnNhbXBsaW5nTGV2ZWwpLmZyYW1lQnl0ZXMoKTsKK30KKworU2Vjb25kcyBJ
bWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJl
dHVybiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4LCBJbWFnZUZyYW1lOjpDYWNoaW5n
OjpNZXRhZGF0YSkuZHVyYXRpb24oKTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJj
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBm
cmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4LCBJbWFnZUZyYW1lOjpDYWNoaW5nOjpNZXRh
ZGF0YSkub3JpZW50YXRpb24oKTsKK30KKworUmVmUHRyPE5hdGl2ZUltYWdlPiBJbWFnZVNvdXJj
ZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE5hdGl2ZUltYWdlOjpjcmVhdGUobV9k
ZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkp
OworfQorCitSZWZQdHI8TmF0aXZlSW1hZ2U+IEltYWdlU291cmNlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIGZyYW1lQXRJbmRleChpbmRleCkubmF0aXZl
SW1hZ2UoKTsKK30KKworUmVmUHRyPE5hdGl2ZUltYWdlPiBJbWFnZVNvdXJjZTo6ZnJhbWVJbWFn
ZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKK3sK
KyAgICByZXR1cm4gZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgSW1hZ2VGcmFtZTo6
Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRp
b25zKS5uYXRpdmVJbWFnZSgpOworfQorCit2b2lkIEltYWdlU291cmNlOjpkdW1wKFRleHRTdHJl
YW0mIHRzKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgidHlwZSIsIGZpbGVuYW1lRXh0ZW5zaW9u
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZnJhbWUtY291bnQiLCBmcmFtZUNvdW50KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicHJpbWFyeS1mcmFtZS1pbmRleCIsIHByaW1hcnlGcmFtZUlu
ZGV4KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVwZXRpdGlvbnMiLCByZXBldGl0aW9uQ291
bnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIHNpbmdsZVBpeGVsU29s
aWRDb2xvcigpKTsKKworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBmcmFtZU9y
aWVudGF0aW9uQXRJbmRleCgwKTsKKyAgICBpZiAob3JpZW50YXRpb24gIT0gSW1hZ2VPcmllbnRh
dGlvbjo6T3JpZW50YXRpb246Ok5vbmUpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50
YXRpb24iLCBvcmllbnRhdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDNkM2Q0
NDVlZDYzMi4uYmZmOWQ0NjBkMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDgyICsyNiwxOTkgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24u
aCIKLSNpbmNsdWRlICJJbWFnZVR5cGVzLmgiCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1N5bmNocm9uaXplZEZpeGVk
UXVldWUuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVdlYWtQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEJpdG1hcEltYWdlOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworY2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsK
IAotY2xhc3MgSW1hZ2VTb3VyY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWRBbmRDYW5N
YWtlVGhyZWFkU2FmZVdlYWtQdHI8SW1hZ2VTb3VyY2U+IHsKK2NsYXNzIEltYWdlU291cmNlIGZp
bmFsCisgICAgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWRBbmRDYW5NYWtlVGhyZWFkU2Fm
ZVdlYWtQdHI8SW1hZ2VTb3VyY2U+IHsKKyAgICBmcmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCB+SW1hZ2VTb3VyY2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBF
bmNvZGVkIGFuZCBkZWNvZGVkIGRhdGEKLSAgICB2aXJ0dWFsIEVuY29kZWREYXRhU3RhdHVzIGRh
dGFDaGFuZ2VkKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIqLCBib29sKSB7IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBFbmNvZGVkRGF0YVN0YXR1czo6VW5rbm93bjsgfQotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICAvLyBBbmltYXRpb24KLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRBbmltYXRpb24oKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbigpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGlvbigpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0FuaW1hdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNB
bmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRGVjb2RpbmcKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNMYXJnZUZvckRlY29kaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcERlY29kaW5nV29ya1F1ZXVlKCkgeyBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlY29kZShGdW5jdGlvbjx2
b2lkKERlY29kaW5nU3RhdHVzKT4mJikgIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotCi0gICAgLy8gSW1hZ2VGcmFtZQotICAgIHZpcnR1YWwgdW5zaWduZWQgY3VycmVudEZyYW1l
SW5kZXgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5RnJhbWVJbmRleCgpOyB9Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IEltYWdlRnJhbWUmIHByaW1hcnlJbWFnZUZyYW1lKCkgPSAwOwotICAgIHZpcnR1
YWwgY29uc3QgSW1hZ2VGcmFtZSYgY3VycmVudEltYWdlRnJhbWUoKSB7IHJldHVybiBwcmltYXJ5
SW1hZ2VGcmFtZSgpOyB9Ci0KLSAgICAvLyBOYXRpdmVJbWFnZQotICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBwcmltYXJ5TmF0aXZlSW1hZ2UoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8TmF0aXZlSW1hZ2U+IGN1cnJlbnROYXRpdmVJbWFnZSgpIHsgcmV0dXJuIHByaW1hcnlOYXRp
dmVJbWFnZSgpOyB9Ci0gICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGN1cnJlbnRQcmVU
cmFuc2Zvcm1lZE5hdGl2ZUltYWdlKEltYWdlT3JpZW50YXRpb24pIHsgcmV0dXJuIGN1cnJlbnRO
YXRpdmVJbWFnZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZl
SW1hZ2VBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBwcmltYXJ5TmF0aXZlSW1hZ2UoKTsgfQot
Ci0gICAgdmlydHVhbCBFeHBlY3RlZDxSZWY8TmF0aXZlSW1hZ2U+LCBEZWNvZGluZ1N0YXR1cz4g
cHJpbWFyeU5hdGl2ZUltYWdlRm9yRHJhd2luZyhTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNv
ZGluZ09wdGlvbnMmKTsKLSAgICB2aXJ0dWFsIEV4cGVjdGVkPFJlZjxOYXRpdmVJbWFnZT4sIERl
Y29kaW5nU3RhdHVzPiBjdXJyZW50TmF0aXZlSW1hZ2VGb3JEcmF3aW5nKFN1YnNhbXBsaW5nTGV2
ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpOwotCi0gICAgLy8gSW1hZ2UgTWV0YWRhdGEKLSAg
ICB2aXJ0dWFsIEludFNpemUgc2l6ZShJbWFnZU9yaWVudGF0aW9uID0gSW1hZ2VPcmllbnRhdGlv
bjo6T3JpZW50YXRpb246OkZyb21JbWFnZSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50U2l6
ZSBzb3VyY2VTaXplKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0
aW9uOjpPcmllbnRhdGlvbjo6RnJvbUltYWdlKSBjb25zdCB7IHJldHVybiBzaXplKG9yaWVudGF0
aW9uKTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNEZW5zaXR5Q29ycmVjdGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgY29uc3QgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246Ok5vbmU7
IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHByaW1hcnlGcmFtZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gMDsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IDE7IH0KLSAgICB2aXJ0dWFsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCkgY29uc3QgPSAwOwotCi0gICAgYm9vbCBoYXNTb2xpZENvbG9yKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyB1dGkoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
KCk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxJbnRQb2lu
dD4gaG90U3BvdCgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQotCi0gICAgdmlydHVhbCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFNpemUmLCBBbGxvd0ltYWdlU3Vic2FtcGxpbmcpIHsgcmV0dXJuIFN1YnNh
bXBsaW5nTGV2ZWw6OkRlZmF1bHQ7IH0KLQotICAgIC8vIEltYWdlRnJhbWUgTWV0YWRhdGEKLSAg
ICB2aXJ0dWFsIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgodW5zaWduZWQpIGNvbnN0IHsg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDBfczsgfQotICAgIHZpcnR1YWwg
SW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleCh1bnNpZ25lZCkgY29uc3Qg
eyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6
T3JpZW50YXRpb246Ok5vbmU7IH0KLSAgICB2aXJ0dWFsIERlY29kaW5nU3RhdHVzIGZyYW1lRGVj
b2RpbmdTdGF0dXNBdEluZGV4KHVuc2lnbmVkKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBEZWNvZGluZ1N0YXR1czo6SW52YWxpZDsgfQotCi0gICAgLy8gVGVz
dGluZyBzdXBwb3J0Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVDb3VudEZvclRlc3Rpbmco
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pbmltdW1EZWNvZGlu
Z0R1cmF0aW9uRm9yVGVzdGluZyhTZWNvbmRzKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xlYXJEZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVx
dWVzdEZvclRlc3RpbmcoYm9vbCkgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEFzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGluZyhib29sKSB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBc3lu
Y0RlY29kaW5nRW5hYmxlZEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgeyB9CisgICAgfklt
YWdlU291cmNlKCk7CisKKyAgICBzdGF0aWMgUmVmPEltYWdlU291cmNlPiBjcmVhdGUoQml0bWFw
SW1hZ2UqIGltYWdlLCBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiA9IEFscGhhT3B0aW9uOjpQcmVt
dWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VTb3VyY2UoaW1hZ2UsIGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgIH0KKworICAgIHN0YXRpYyBSZWY8
SW1hZ2VTb3VyY2U+IGNyZWF0ZShSZWY8TmF0aXZlSW1hZ2U+JiYgbmF0aXZlSW1hZ2UpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZVNvdXJjZShXVEZNb3ZlKG5hdGl2
ZUltYWdlKSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RGF0YShGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCByZXNldERhdGEoRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciogZGF0YSk7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0YUNo
YW5nZWQoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OworICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKTsKKworICAgIHVuc2lnbmVkIGRlY29kZWRT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQorICAgIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCk7CisgICAgdm9pZCBkZXN0cm95SW5j
b21wbGV0ZURlY29kZWREYXRhKCk7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90IGJlZm9yZUZyYW1lKTsKKworICAgIHZvaWQgZ3Jvd0ZyYW1lcygpOworICAgIHZvaWQgY2xl
YXJNZXRhZGF0YSgpOworICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IG51bGxwdHI7
IH0KKyAgICBVUkwgc291cmNlVVJMKCkgY29uc3Q7CisgICAgU3RyaW5nIG1pbWVUeXBlKCkgY29u
c3Q7CisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0OworCisgICAg
Ly8gQXN5bmNocm9ub3VzIGltYWdlIGRlY29kaW5nCisgICAgYm9vbCBjYW5Vc2VBc3luY0RlY29k
aW5nKCk7CisgICAgdm9pZCBzdGFydEFzeW5jRGVjb2RpbmdRdWV1ZSgpOworICAgIHZvaWQgcmVx
dWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+JiA9IHsgfSk7CisgICAgdm9pZCBzdG9wQXN5bmNE
ZWNvZGluZ1F1ZXVlKCk7CisgICAgYm9vbCBoYXNBc3luY0RlY29kaW5nUXVldWUoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kaW5nUXVldWU7IH0KKyAgICBib29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVl
SWRsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RnJhbWVEZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGlu
ZyhTZWNvbmRzIGR1cmF0aW9uKSB7IG1fZnJhbWVEZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZyA9
IGR1cmF0aW9uOyB9CisgICAgU2Vjb25kcyBmcmFtZURlY29kaW5nRHVyYXRpb25Gb3JUZXN0aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZURlY29kaW5nRHVyYXRpb25Gb3JUZXN0aW5nOyB9CisK
KyAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVkIGVpdGhlciBieSB0aGUg
SW1hZ2VEZWNvZGVyIG9yIGRpcmVjdGx5CisgICAgLy8gZnJvbSB0aGUgTmF0aXZlSW1hZ2UgaWYg
dGhpcyBjbGFzcyB3YXMgY3JlYXRlZCBmb3IgYSBtZW1vcnkgaW1hZ2UuCisgICAgRW5jb2RlZERh
dGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKTsKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgp
IHsgcmV0dXJuIGVuY29kZWREYXRhU3RhdHVzKCkgPj0gRW5jb2RlZERhdGFTdGF0dXM6OlNpemVB
dmFpbGFibGU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgZnJhbWVDb3VudCgpOworICAg
IHNpemVfdCBwcmltYXJ5RnJhbWVJbmRleCgpOworICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0
aW9uQ291bnQoKTsKKyAgICBTdHJpbmcgdXRpKCk7CisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5z
aW9uKCk7CisgICAgU3RyaW5nIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOworICAgIHN0ZDo6
b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+
IGRlbnNpdHlDb3JyZWN0ZWRTaXplKEltYWdlT3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9u
OjpPcmllbnRhdGlvbjo6RnJvbUltYWdlKTsKKyAgICBib29sIGhhc0RlbnNpdHlDb3JyZWN0ZWRT
aXplKCkgeyByZXR1cm4gZGVuc2l0eUNvcnJlY3RlZFNpemUoKS5oYXNfdmFsdWUoKTsgfQorCisg
ICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpOworCisgICAgLy8gSW1hZ2UgbWV0YWRh
dGEgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJbWFnZUZyYW1lLgorICAgIFdF
QkNPUkVfRVhQT1JUIEludFNpemUgc2l6ZShJbWFnZU9yaWVudGF0aW9uID0gSW1hZ2VPcmllbnRh
dGlvbjo6T3JpZW50YXRpb246OkZyb21JbWFnZSk7CisgICAgSW50U2l6ZSBzb3VyY2VTaXplKElt
YWdlT3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRhdGlvbjo6RnJvbUltYWdl
KTsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKKyAgICBDb2xvciBz
aW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJz
YW1wbGluZ0xldmVsKCk7CisKKyAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMg
bm90IHJlcXVpcmUgY2FjaGluZyB0aGUgSW1hZ2VGcmFtZS4KKyAgICBib29sIGZyYW1lSXNCZWlu
Z0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90LCBjb25zdCBE
ZWNvZGluZ09wdGlvbnMmKTsKKyAgICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5nU3RhdHVz
QXRJbmRleChzaXplX3QpOworICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsK
KyAgICBib29sIGZyYW1lSGFzSW1hZ2VBdEluZGV4KHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUhh
c0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxT
dWJzYW1wbGluZ0xldmVsPiYpOworICAgIGJvb2wgZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VD
b21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxT
dWJzYW1wbGluZ0xldmVsPiYsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYpOworICAgIFN1YnNhbXBs
aW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QpOworCisgICAgLy8g
SW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGljaCBmb3JjZXMgY2FjaGluZyBvciByZS1jYWNoaW5nIHRo
ZSBJbWFnZUZyYW1lLgorICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKKyAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZWNvbmRzIGZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QpOworCisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBjcmVhdGVGcmFtZUltYWdl
QXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0KTsKKyAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7
CisgICAgUmVmUHRyPE5hdGl2ZUltYWdlPiBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQo
c2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJiA9IHsgfSk7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VTb3VyY2Uo
Qml0bWFwSW1hZ2UqLCBBbHBoYU9wdGlvbiA9IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkLCBH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpB
cHBsaWVkKTsKKyAgICBJbWFnZVNvdXJjZShSZWY8TmF0aXZlSW1hZ2U+JiYpOworCisgICAgZW51
bSBjbGFzcyBNZXRhZGF0YVR5cGUgeworICAgICAgICBBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24g
ICAgPSAxIDw8IDAsCisgICAgICAgIERlbnNpdHlDb3JyZWN0ZWRTaXplICAgICAgICA9IDEgPDwg
MSwKKyAgICAgICAgRW5jb2RlZERhdGFTdGF0dXMgICAgICAgICAgID0gMSA8PCAyLAorICAgICAg
ICBGaWxlTmFtZUV4dGVuc2lvbiAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAgIEZyYW1lQ291
bnQgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwKKyAgICAgICAgUHJpbWFyeUZyYW1lSW5kZXgg
ICAgICAgICAgID0gMSA8PCA1LAorICAgICAgICBIb3RTcG90ICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDYsCisgICAgICAgIE1heGltdW1TdWJzYW1wbGluZ0xldmVsICAgICA9IDEgPDwgNywK
KyAgICAgICAgT3JpZW50YXRpb24gICAgICAgICAgICAgICAgID0gMSA8PCA4LAorICAgICAgICBS
ZXBldGl0aW9uQ291bnQgICAgICAgICAgICAgPSAxIDw8IDksCisgICAgICAgIFNpbmdsZVBpeGVs
U29saWRDb2xvciAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIFNpemUgICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisgICAgICAgIFVUSSAgICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMTIKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIG1ldGFk
YXRhQ2FjaGVJZk5lZWRlZChUJiBjYWNoZWRWYWx1ZSwgY29uc3QgVCYgZGVmYXVsdFZhbHVlLCBN
ZXRhZGF0YVR5cGUsIFQgKEltYWdlRGVjb2Rlcjo6KmZ1bmN0b3IpKCkgY29uc3QpOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGZpcnN0RnJhbWVNZXRhZGF0YUNhY2hlSWZOZWVk
ZWQoVCYgY2FjaGVkVmFsdWUsIE1ldGFkYXRhVHlwZSwgVCAoSW1hZ2VGcmFtZTo6KmZ1bmN0b3Ip
KCkgY29uc3QsIEltYWdlRnJhbWU6OkNhY2hpbmcsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2Ft
cGxpbmdMZXZlbD4mID0geyB9KTsKKworICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShG
cmFnbWVudGVkU2hhcmVkQnVmZmVyKiBkYXRhKTsKKyAgICBib29sIGlzRGVjb2RlckF2YWlsYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQorICAgIHZvaWQgZGVjb2RlZFNpemVDaGFu
Z2VkKGxvbmcgbG9uZyBkZWNvZGVkU2l6ZSk7CisgICAgdm9pZCBkaWREZWNvZGVQcm9wZXJ0aWVz
KHVuc2lnbmVkIGRlY29kZWRQcm9wZXJ0aWVzU2l6ZSk7CisgICAgdm9pZCBkZWNvZGVkU2l6ZUlu
Y3JlYXNlZCh1bnNpZ25lZCBkZWNvZGVkU2l6ZSk7CisgICAgdm9pZCBkZWNvZGVkU2l6ZURlY3Jl
YXNlZCh1bnNpZ25lZCBkZWNvZGVkU2l6ZSk7CisgICAgdm9pZCBkZWNvZGVkU2l6ZVJlc2V0KHVu
c2lnbmVkIGRlY29kZWRTaXplKTsKKyAgICB2b2lkIGVuY29kZWREYXRhU3RhdHVzQ2hhbmdlZChF
bmNvZGVkRGF0YVN0YXR1cyk7CisKKyAgICB2b2lkIHNldE5hdGl2ZUltYWdlKFJlZjxOYXRpdmVJ
bWFnZT4mJik7CisgICAgdm9pZCBjYWNoZU1ldGFkYXRhQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwpOworICAgIHZvaWQgY2FjaGVQbGF0Zm9ybUltYWdlQXRJbmRleChQbGF0Zm9ybUlt
YWdlUHRyJiYsIHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25z
Jik7CisgICAgdm9pZCBjYWNoZVBsYXRmb3JtSW1hZ2VBdEluZGV4QXN5bmMoUGxhdGZvcm1JbWFn
ZVB0ciYmLCBzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYp
OworCisgICAgc3RydWN0IEltYWdlRnJhbWVSZXF1ZXN0OworICAgIHN0YXRpYyBjb25zdCBpbnQg
QnVmZmVyU2l6ZSA9IDg7CisgICAgV29ya1F1ZXVlJiBkZWNvZGluZ1F1ZXVlKCk7CisgICAgU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZTxJbWFnZUZyYW1lUmVxdWVzdCwgQnVmZmVyU2l6ZT4mIGZyYW1l
UmVxdWVzdFF1ZXVlKCk7CisKKyAgICBjb25zdCBJbWFnZUZyYW1lJiBmcmFtZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBpbmRleCA8IG1fZnJhbWVzLnNpemUoKSA/IG1fZnJhbWVzW2lu
ZGV4XSA6IEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgpOyB9CisgICAgY29uc3QgSW1hZ2VGcmFt
ZSYgZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIEltYWdlRnJhbWU6OkNhY2hpbmcs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9LCBjb25zdCBEZWNv
ZGluZ09wdGlvbnMmID0geyB9KTsKKworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJik7CisKKyAg
ICBCaXRtYXBJbWFnZSogbV9pbWFnZSB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8SW1hZ2VEZWNv
ZGVyPiBtX2RlY29kZXI7CisgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0
aW9uOjpQcmVtdWx0aXBsaWVkIH07CisgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiB7IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpB
cHBsaWVkIH07CisKKyAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXplIHsgMCB9OworICAgIHVuc2ln
bmVkIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplIHsgMCB9OworICAgIFZlY3RvcjxJbWFnZUZyYW1l
LCAxPiBtX2ZyYW1lczsKKworICAgIC8vIEFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZy4KKyAg
ICBzdHJ1Y3QgSW1hZ2VGcmFtZVJlcXVlc3QgeworICAgICAgICBzaXplX3QgaW5kZXg7CisgICAg
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbDsKKyAgICAgICAgRGVjb2RpbmdP
cHRpb25zIGRlY29kaW5nT3B0aW9uczsKKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBJbWFnZUZyYW1lUmVxdWVzdCYsIGNvbnN0IEltYWdlRnJhbWVSZXF1ZXN0JikgPSBkZWZh
dWx0OworICAgIH07CisgICAgdXNpbmcgRnJhbWVSZXF1ZXN0UXVldWUgPSBTeW5jaHJvbml6ZWRG
aXhlZFF1ZXVlPEltYWdlRnJhbWVSZXF1ZXN0LCBCdWZmZXJTaXplPjsKKyAgICB1c2luZyBGcmFt
ZUNvbW1pdFF1ZXVlID0gRGVxdWU8SW1hZ2VGcmFtZVJlcXVlc3QsIEJ1ZmZlclNpemU+OworICAg
IFJlZlB0cjxGcmFtZVJlcXVlc3RRdWV1ZT4gbV9mcmFtZVJlcXVlc3RRdWV1ZTsKKyAgICBGcmFt
ZUNvbW1pdFF1ZXVlIG1fZnJhbWVDb21taXRRdWV1ZTsKKyAgICBSZWZQdHI8V29ya1F1ZXVlPiBt
X2RlY29kaW5nUXVldWU7CisgICAgU2Vjb25kcyBtX2ZyYW1lRGVjb2RpbmdEdXJhdGlvbkZvclRl
c3Rpbmc7CisKKyAgICAvLyBJbWFnZSBtZXRhZGF0YS4KKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBt
X2VuY29kZWREYXRhU3RhdHVzIHsgRW5jb2RlZERhdGFTdGF0dXM6OlVua25vd24gfTsKKyAgICBz
aXplX3QgbV9mcmFtZUNvdW50IHsgMCB9OworICAgIHNpemVfdCBtX3ByaW1hcnlGcmFtZUluZGV4
IHsgMCB9OworICAgIFJlcGV0aXRpb25Db3VudCBtX3JlcGV0aXRpb25Db3VudCB7IFJlcGV0aXRp
b25Db3VudE5vbmUgfTsKKyAgICBTdHJpbmcgbV91dGk7CisgICAgU3RyaW5nIG1fZmlsZW5hbWVF
eHRlbnNpb247CisgICAgU3RyaW5nIG1fYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uOworICAgIHN0
ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IG1faG90U3BvdDsKKworICAgIC8vIEltYWdlIG1ldGFkYXRh
IHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZmlyc3QgSW1hZ2VGcmFtZS4KKyAgICBJbnRT
aXplIG1fc2l6ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IG1fZGVuc2l0eUNvcnJlY3Rl
ZFNpemU7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworICAgIENvbG9yIG1f
c2luZ2xlUGl4ZWxTb2xpZENvbG9yOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9tYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsKKworICAgIE9wdGlv
blNldDxNZXRhZGF0YVR5cGU+IG1fY2FjaGVkTWV0YWRhdGE7CisKKyAgICBSdW5Mb29wJiBtX3J1
bkxvb3A7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAppbmRleCA1ODA3MzllM2VkNmEuLjcxMTY4
OGNmMDNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIElu
dFNpemUgc2l6ZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKLSAgICBzdGQ6
Om9wdGlvbmFsPENvbG9yPiBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBDb2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0OwogCiAgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VTb3VyY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5NmYyOWE3MDg1YTAuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVNvdXJjZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDI0IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFn
ZVNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxOYXRpdmVJbWFnZVNvdXJj
ZT4gTmF0aXZlSW1hZ2VTb3VyY2U6OmNyZWF0ZShSZWY8TmF0aXZlSW1hZ2U+JiYgbmF0aXZlSW1h
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmF0aXZlSW1hZ2VTb3VyY2UoV1RGTW92
ZShuYXRpdmVJbWFnZSkpKTsKLX0KLQotTmF0aXZlSW1hZ2VTb3VyY2U6Ok5hdGl2ZUltYWdlU291
cmNlKFJlZjxOYXRpdmVJbWFnZT4mJiBuYXRpdmVJbWFnZSkKLXsKLSAgICBtX2ZyYW1lLm1fc2l6
ZSA9IG5hdGl2ZUltYWdlLT5zaXplKCk7Ci0gICAgbV9mcmFtZS5tX2hhc0FscGhhID0gbmF0aXZl
SW1hZ2UtPmhhc0FscGhhKCk7Ci0gICAgbV9mcmFtZS5tX25hdGl2ZUltYWdlID0gV1RGTW92ZShu
YXRpdmVJbWFnZSk7Ci19Ci0KLXZvaWQgTmF0aXZlSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgc2l6ZSgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlU291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM5NmNlNjE2YWNkNy4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlU291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDI0IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBOYXRpdmVJbWFnZVNvdXJjZSA6IHB1YmxpYyBJbWFnZVNvdXJjZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOYXRpdmVJbWFnZVNvdXJjZT4gY3JlYXRlKFJlZjxO
YXRpdmVJbWFnZT4mJik7Ci0KLXByaXZhdGU6Ci0gICAgTmF0aXZlSW1hZ2VTb3VyY2UoUmVmPE5h
dGl2ZUltYWdlPiYmKTsKLQotICAgIEludFNpemUgc2l6ZShJbWFnZU9yaWVudGF0aW9uID0gSW1h
Z2VPcmllbnRhdGlvbjo6T3JpZW50YXRpb246OkZyb21JbWFnZSkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9mcmFtZS5zaXplKCk7IH0KLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZnJhbWUubmF0aXZlSW1hZ2UoKS0+Y29sb3JTcGFj
ZSgpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9mcmFtZS5uYXRpdmVJbWFnZSgpLT5zaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKTsgfQotCi0gICAgY29uc3QgSW1hZ2VGcmFtZSYgcHJpbWFyeUltYWdlRnJhbWUo
KSBmaW5hbCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IHBy
aW1hcnlOYXRpdmVJbWFnZSgpIGZpbmFsIHsgcmV0dXJuIG1fZnJhbWUubmF0aXZlSW1hZ2UoKTsg
fQotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotICAgIEltYWdl
RnJhbWUgbV9mcmFtZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdl
RGVjb2RlckFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMuaAppbmRleCAwNmFjYTdhNjRlNWUuLjAz
N2NhOTBlM2RmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9i
akMuaApAQCAtNzcsOSArNzcsMTEgQEAgcHVibGljOgogCiAgICAgSW50U2l6ZSBmcmFtZVNpemVB
dEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1
bHQpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3Qp
IGNvbnN0IGZpbmFsOworICAgIEltYWdlRGVjb2Rlcjo6RnJhbWVNZXRhZGF0YSBmcmFtZU1ldGFk
YXRhQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwogCiAgICAgU2Vjb25kcyBmcmFtZUR1cmF0
aW9uQXRJbmRleChzaXplX3QpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZyYW1lQWxsb3dTdWJzYW1wbGlu
Z0F0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0
KSBjb25zdCBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtSW1hZ2VQdHIgY3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxp
bmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiA9IERlY29kaW5nT3B0aW9u
cyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzKSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJB
VkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQppbmRleCAyODEzOTEwNWZiOTAuLmYwMjM5Mzkz
YzRlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1t
CkBAIC01NDYsNiArNTQ2LDExIEBAIGJvb2wgSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIHNhbXBsZUlzQ29t
cGxldGUoKnNhbXBsZURhdGEpOwogfQogCitJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRhdGEgSW1h
Z2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25zdAorewor
ICAgIHJldHVybiB7IH07Cit9CisKIFNlY29uZHMgSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogewogICAgIGF1dG8qIHNhbXBsZURh
dGEgPSBzYW1wbGVBdEluZGV4KGluZGV4KTsKQEAgLTU3Miw2ICs1NzcsMTEgQEAgVmVjdG9yPElt
YWdlRGVjb2Rlcjo6RnJhbWVJbmZvPiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkg
Y29uc3QKICAgICB9KTsKIH0KIAorYm9vbCBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUFsbG93
U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5k
ZXggPD0gbV9zYW1wbGVEYXRhLnNpemUoKTsKK30KKwogdW5zaWduZWQgSW1hZ2VEZWNvZGVyQVZG
T2JqQzo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKCFmcmFtZUlzQ29tcGxldGVBdEluZGV4
KGluZGV4KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGYxYjQ1OTc4NTFhZC4uY2M0ZDg3NjYwYzMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKQEAgLTEyMTQsNyArMTIxNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICBpZiAo
aW1hZ2UpIHsKLSAgICAgICAgYXV0byBuZXdJbWFnZSA9IGltYWdlLT5jdXJyZW50TmF0aXZlSW1h
Z2UoKTsKKyAgICAgICAgYXV0byBuZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgICAgICBpZiAoIW5ld0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCmluZGV4IDY0ZWY1ZjVkZmE5MC4uMWUz
ZGZlZDYxYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMzAsMTEg
KzMwLDExIEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShDQUlSTykKIAotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRl
IDxjYWlyby5oPgpAQCAtNTAsMTYgKzUwLDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpCiAg
ICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGlt
YWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCiAgICAgQWxwaGFPcHRpb24g
YWxwaGFPcHRpb24gPSBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcHRpb246OlByZW11bHRpcGxp
ZWQgOiBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZDsKICAgICBHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZDsKLSAgICBhdXRvIGltYWdlID0gQml0bWFwSW1h
Z2U6OmNyZWF0ZShudWxscHRyLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pOworICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6OmNyZWF0ZShudWxscHRyLCBhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogICAgIG1fYWxwaGFPcCA9IEFs
cGhhT3A6OkRvTm90aGluZzsKIAogICAgIGlmIChtX2ltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAg
aW1hZ2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFpbWFn
ZS0+ZnJhbWVDb3VudCgpKQorICAgICAgICBzb3VyY2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgp
LCB0cnVlKTsKKyAgICAgICAgaWYgKCFzb3VyY2UtPmZyYW1lQ291bnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBpbWFnZS0+Y3VycmVudE5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKTsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBz
b3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApLT5wbGF0Zm9ybUltYWdlKCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5jdXJyZW50TmF0aXZl
SW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpOworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnBsYXRmb3JtSW1hZ2UoKTsKICAgICAg
ICAgLy8gMS4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MVmlkZW9FbG1lbnQgaW5wdXQsIGFzc3Vt
ZSBubyBQcmVtdWx0aXBseUFscGhhIGhhZCBiZWVuIGFwcGxpZWQgYW5kIHRoZSBhbHBoYSB2YWx1
ZSBpcyAweEZGIGZvciBlYWNoIHBpeGVsLAogICAgICAgICAvLyB3aGljaCBpcyB0cnVlIGF0IHBy
ZXNlbnQgYW5kIG1heSBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUgYW5kIG5lZWRzIGFkanVzdG1l
bnQgYWNjb3JkaW5nbHkuCiAgICAgICAgIC8vIDIuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENh
bnZhc0VsZW1lbnQgaW5wdXQgaW4gd2hpY2ggQWxwaGEgaXMgYWxyZWFkeSBQcmVtdWx0aXBsaWVk
IGluIHRoaXMgcG9ydCwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCmluZGV4IDQ3NGVkMzIzMGQ0OS4u
MzRjZjIwNjY2NTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApAQCAtNTEsMTQgKzUxLDE0IEBA
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBQbGF0Zm9ybUltYWdlTmF0aXZlSW1hZ2VCYWNrZW5kOjpj
b2xvclNwYWNlKCkgY29uc3QKICAgICByZXR1cm4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q29sb3I+IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKSBjb25zdAorQ29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0CiB7CiAgICAgaWYgKHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAogICAgIGF1dG8g
cGxhdGZvcm1JbWFnZSA9IHRoaXMtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKTsKICAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShwbGF0Zm9ybUltYWdlKSAhPSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBDb2xv
cigpOwogCiAgICAgdW5zaWduZWQqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHBsYXRmb3JtSW1hZ2UpKTsKICAgICBy
ZXR1cm4gdW5wcmVtdWx0aXBsaWVkKGFzU1JHQkEoUGFja2VkQ29sb3I6OkFSR0IgeyAqcGl4ZWwg
fSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAppbmRleCBjNTM5NmM2NjU0ZTIuLjc2ODk3MGIzYTUx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0R0xDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKQEAgLTMyOSwxMSArMzI5LDE0IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBpCiAgICAgYm9vbCBoYXNBbHBoYSA9ICFtX2ltYWdlLT5jdXJyZW50RnJh
bWVLbm93blRvQmVPcGFxdWUoKTsKIAogICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgp
KSB7Ci0gICAgICAgIGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKG51bGxwdHIsIEFs
cGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb246OkFwcGxpZWQpOwotICAgICAgICBpbWFnZS0+c2V0RGF0YShtX2ltYWdlLT5kYXRh
KCksIHRydWUpOwotICAgICAgICBkZWNvZGVkSW1hZ2UgPSBpbWFnZS0+cHJpbWFyeU5hdGl2ZUlt
YWdlKCk7CisgICAgICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6OmNyZWF0ZShudWxscHRy
LCBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKKyAgICAgICAgc291cmNlLT5zZXREYXRhKG1faW1hZ2Ut
PmRhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghc291cmNlLT5mcmFtZUNvdW50KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZGVjb2RlZEltYWdlID0gc291cmNlLT5j
cmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICB9IGVsc2UKLSAgICAgICAgZGVjb2RlZElt
YWdlID0gbV9pbWFnZS0+Y3VycmVudE5hdGl2ZUltYWdlKCk7CisgICAgICAgIGRlY29kZWRJbWFn
ZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICAgICBpZiAoIWRl
Y29kZWRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCmluZGV4IDRhYjkw
ZmQzMTU4NS4uYjZlYWMyMTYwOGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCkBAIC00MzksMjkgKzQzOSwyMSBA
QCBib29sIEltYWdlRGVjb2RlckNHOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKICAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRp
dmVEZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKIH0KIAot
SW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXJDRzo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAorSW1hZ2VEZWNvZGVyOjpGcmFtZU1ldGFkYXRhIEltYWdlRGVj
b2RlckNHOjpmcmFtZU1ldGFkYXRhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwogICAgIGlmICghcHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lOwotCi0gICAgcmV0
dXJuIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSk7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8SW50U2l6ZT4gSW1hZ2VEZWNvZGVyQ0c6OmRlbnNpdHlDb3JyZWN0ZWRTaXpl
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJ
bmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5n
ZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8gb3JpZW50YXRpb24gPSBv
cmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwogICAgIGlmICghbWF5
SGF2ZURlbnNpdHlDb3JyZWN0ZWRTaXplKHByb3BlcnRpZXMuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyBvcmllbnRhdGlvbiwgc3RkOjpudWxs
b3B0IH07CiAKICAgICBhdXRvIHByb3BlcnRpZXNXaXRoTWV0YWRhdGEgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRl
eCwgY3JlYXRlSW1hZ2VTb3VyY2VNZXRhZGF0YU9wdGlvbnMoKS5nZXQoKSkpOwogICAgIGlmICgh
cHJvcGVydGllc1dpdGhNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgcmV0dXJuIHsgb3JpZW50YXRpb24sIHN0ZDo6bnVsbG9wdCB9OwogICAgIAotICAgIHJl
dHVybiBkZW5zaXR5Q29ycmVjdGVkU2l6ZUZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXNXaXRoTWV0
YWRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IG9yaWVudGF0aW9uLCBkZW5zaXR5Q29ycmVjdGVk
U2l6ZUZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXNXaXRoTWV0YWRhdGEuZ2V0KCkpIH07CiB9CiAK
IFNlY29uZHMgSW1hZ2VEZWNvZGVyQ0c6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKQEAgLTQ5Nyw2ICs0ODksMTEgQEAgU2Vjb25kcyBJbWFnZURlY29kZXJDRzo6ZnJh
bWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBkdXJhdGlv
bjsKIH0KIAorYm9vbCBJbWFnZURlY29kZXJDRzo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRl
eChzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSW1hZ2VEZWNv
ZGVyQ0c6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsKICAgICBp
ZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKaW5kZXggYjVhMDE1YzY4
ZWJjLi45ZDBhMWNhZmQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaApAQCAtNjAsMTEgKzYwLDExIEBAIHB1YmxpYzoK
IAogICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwg
PSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKICAgICBib29sIGZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKLSAgICBJbWFnZU9yaWVudGF0
aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7Ci0gICAgc3Rk
OjpvcHRpb25hbDxJbnRTaXplPiBkZW5zaXR5Q29ycmVjdGVkU2l6ZUF0SW5kZXgoc2l6ZV90KSBj
b25zdCBmaW5hbDsKKyAgICBJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRhdGEgZnJhbWVNZXRhZGF0
YUF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKIAogICAgIFNlY29uZHMgZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90KSBjb25zdCBmaW5hbDsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmcmFtZUFsbG93U3Vic2FtcGxpbmdB
dEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkg
Y29uc3QgZmluYWw7CiAKICAgICBQbGF0Zm9ybUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQs
IGNvbnN0IERlY29kaW5nT3B0aW9ucyYgPSBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpT
eW5jaHJvbm91cykpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAppbmRleCBkNTJlYmFiNTVjMTkuLjY1YWJjZDQ2
YjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHAKQEAgLTc3LDE2ICs3NywxNiBAQCBSZWZQdHI8TmF0aXZlSW1hZ2U+
IE5hdGl2ZUltYWdlOjpjcmVhdGVUcmFuc2llbnQoUGxhdGZvcm1JbWFnZVB0ciYmIGltYWdlLCBS
ZW5kZQogICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZSh0cmFuc2llbnRJbWFnZSksIGlkZW50aWZp
ZXIpOwogfQogCi1zdGQ6Om9wdGlvbmFsPENvbG9yPiBOYXRpdmVJbWFnZTo6c2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCkgY29uc3QKK0NvbG9yIE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAogewogICAgIGlmIChzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKICAgICB1bnNp
Z25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCiAgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCks
IHNSR0JDb2xvclNwYWNlUmVmKCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpIHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtDR0JpdG1hcEJ5dGVP
cmRlcjMyQmlnKSkpOwogCiAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAogICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgcGxhdGZvcm1JbWFnZSgpLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZURlY29kZXJHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlRGVjb2RlckdT
dHJlYW1lci5jcHAKaW5kZXggNDE4YTMyNDI0YWM5Li5hODVjZWZmNjAyOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZURlY29kZXJH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZURlY29kZXJHU3RyZWFtZXIuY3BwCkBAIC0xODIsNiArMTgyLDE4IEBAIFJlcGV0
aXRpb25Db3VudCBJbWFnZURlY29kZXJHU3RyZWFtZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0
CiAgICAgcmV0dXJuIGZyYW1lQ291bnQoKSA+IDEgPyBSZXBldGl0aW9uQ291bnRJbmZpbml0ZSA6
IFJlcGV0aXRpb25Db3VudE5vbmU7CiB9CiAKK1N0cmluZyBJbWFnZURlY29kZXJHU3RyZWFtZXI6
OnV0aSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRhdGEgSW1hZ2VEZWNvZGVyR1N0cmVhbWVyOjpm
cmFtZU1ldGFkYXRhQXRJbmRleChzaXplX3QpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4geyB9OworfQorCiBTZWNvbmRzIEltYWdlRGVjb2RlckdTdHJlYW1lcjo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogewogICAgIGF1dG8qIHNh
bXBsZURhdGEgPSBzYW1wbGVBdEluZGV4KGluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZURlY29kZXJHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZURlY29kZXJH
U3RyZWFtZXIuaAppbmRleCA2MDliODZlZGY1NjUuLmNiYzJkZTJhOWMzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlRGVjb2RlckdT
dHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZURlY29kZXJHU3RyZWFtZXIuaApAQCAtNTQsMTQgKzU0LDE3IEBAIHB1YmxpYzoKICAg
ICBJbnRTaXplIHNpemUoKSBjb25zdCBmaW5hbDsKICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc2FtcGxlRGF0YS5zaXplKCk7IH0KICAgICBSZXBldGl0aW9u
Q291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIHV0aSgpIGNv
bnN0IGZpbmFsOwogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1f
bWltZVR5cGUpOyB9CiAgICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogCiAgICAgSW50U2l6ZSBmcmFtZVNpemVB
dEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1
bHQpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNpemUoKTsgfQogICAgIGJvb2wgZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHNhbXBsZUF0SW5k
ZXgoaW5kZXgpOyB9CisgICAgSW1hZ2VEZWNvZGVyOjpGcmFtZU1ldGFkYXRhIGZyYW1lTWV0YWRh
dGFBdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAKICAgICBTZWNvbmRzIGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZnJhbWVBbGxvd1N1YnNhbXBsaW5n
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGluZGV4IDw9IG1fc2Ft
cGxlRGF0YS5zaXplKCk7IH0KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3Qs
IFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSBjb25zdCBmaW5h
bDsKIAogICAgIFBsYXRmb3JtSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90
LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgRGVj
b2RpbmdPcHRpb25zJiA9IERlY29kaW5nT3B0aW9ucyhEZWNvZGluZ01vZGU6OlN5bmNocm9ub3Vz
KSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VBZGFwdGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUFkYXB0ZXJHdGsuY3BwCmluZGV4IDg5MmFkNTEzZWIwYy4uNDAwNmI1ODFjMmNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VB
ZGFwdGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
SW1hZ2VBZGFwdGVyR3RrLmNwcApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIEltYWdlQWRhcHRlcjo6
aW52YWxpZGF0ZSgpCiAKIEdSZWZQdHI8R2RrUGl4YnVmPiBJbWFnZUFkYXB0ZXI6Omdka1BpeGJ1
ZigpCiB7Ci0gICAgUmVmUHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UoKS5jdXJyZW50TmF0aXZlSW1h
Z2UoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UoKS5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCkBAIC02Nyw3ICs2Nyw3IEBAIEdSZWZQdHI8R2RrUGl4YnVmPiBJbWFnZUFkYXB0ZXI6Omdk
a1BpeGJ1ZigpCiAjaWYgVVNFKEdUSzQpCiBHUmVmUHRyPEdka1RleHR1cmU+IEltYWdlQWRhcHRl
cjo6Z2RrVGV4dHVyZSgpCiB7Ci0gICAgUmVmUHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UoKS5jdXJy
ZW50TmF0aXZlSW1hZ2UoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UoKS5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VBZGFwdGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ltYWdlQWRhcHRlck1hYy5tbQppbmRleCBjM2NhMjI1YWYzODcuLmVlZDljYzI3
MGZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlQWRhcHRlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VBZGFwdGVyTWFjLm1tCkBAIC0xNTIsNyArMTUyLDcgQEAgTlNJbWFnZSogSW1hZ2VB
ZGFwdGVyOjpuc0ltYWdlKCkKIAogUmV0YWluUHRyPE5TSW1hZ2U+IEltYWdlQWRhcHRlcjo6c25h
cHNob3ROU0ltYWdlKCkKIHsKLSAgICBSZWZQdHIgbmF0aXZlSW1hZ2UgPSAgaW1hZ2UoKS5jdXJy
ZW50TmF0aXZlSW1hZ2UoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gIGltYWdlKCkubmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCmluZGV4IGM0NjRlMTAzMGJlMS4uZTE0
OTZiMTI2NmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEuY3BwCkBAIC01MCwxMyArNTAsMTMgQEAgRGVzdGlu
YXRpb25Db2xvclNwYWNlIFBsYXRmb3JtSW1hZ2VOYXRpdmVJbWFnZUJhY2tlbmQ6OmNvbG9yU3Bh
Y2UoKSBjb25zdAogICAgIHJldHVybiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKIH0K
IAotc3RkOjpvcHRpb25hbDxDb2xvcj4gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xv
cigpIGNvbnN0CitDb2xvciBOYXRpdmVJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKIHsKICAgICBpZiAoc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBDb2xvcigpOwogCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBDb2xvcigpOwogfQog
CiB2b2lkIE5hdGl2ZUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwg
SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCmluZGV4IDdmNGNiN2QzNWUyNC4uZThkZDYxZWY3NDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTMxNCw3ICszMTQsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogICAgICAgICAvLyBNYWtlIHRoZSBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIHRo
ZSBpbWFnZSBoYXMgY2hhbmdlZC4KICAgICAgICAgLy8gVGhpcyBjb2RlIG1ha2VzIHRoZSBhc3N1
bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIFBsYXRmb3JtSW1hZ2VQdHIgaXMgYSB2
YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KICAgICAgICAgLy8gVGhp
cyBhc3N1bXB0aW9uIGlzIHRydWUgZm9yIHRoZSBHVEsrIHBvcnQuCi0gICAgICAgIGF1dG8gbmV3
TmF0aXZlSW1hZ2UgPSBpbWFnZS0+Y3VycmVudE5hdGl2ZUltYWdlKCk7CisgICAgICAgIGF1dG8g
bmV3TmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAg
ICAgICAgaWYgKCFuZXdOYXRpdmVJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyVGlsZS5jcHAKaW5kZXggODg3ZWM3NmY0OWVlLi5lY2Q1ODU1NWQxZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJUaWxlLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJUaWxlOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKICAgICAgICAgbV90ZXh0dXJlID0gQml0bWFwVGV4dHVyZTo6Y3JlYXRlKHRhcmdldFJl
Y3Quc2l6ZSgpLCBmbGFncyk7CiAgICAgfQogCi0gICAgYXV0byBuYXRpdmVJbWFnZSA9IGltYWdl
LT5jdXJyZW50TmF0aXZlSW1hZ2UoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50
cyhuYXRpdmVJbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgc291cmNlT2Zmc2V0KTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNw
cAppbmRleCAzYjUwNmM5ODdhZDIuLjRiZWQ0M2IxYzNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTYyNSw3ICs2
MjUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3Vu
dGVyKGJvb2wgc2hvdykKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgYXV0byBuYXRpdmVJbWFnZSA9IGltYWdl
ID8gaW1hZ2UtPmN1cnJlbnROYXRpdmVJbWFnZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvIG5hdGl2
ZUltYWdlID0gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IG51
bGxwdHI7CiAgICAgaWYgKG1fY29tcG9zaXRlZEltYWdlID09IGltYWdlICYmIG1fY29tcG9zaXRl
ZE5hdGl2ZUltYWdlID09IG5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKaW5kZXggOTQwZTQzODdkMGFmLi4yNGVl
NGU4MmYxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHN0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlQ3VzdG9tQ3Vy
c29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwCiAgICAgSW50UG9pbnQgZWZm
ZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOwogICAgIHJl
dHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV90ZXh0dXJlKHRleHR1cmUuZ2V0KCks
IGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSwgZmFsbGJhY2tDdXJz
b3IoKS5nZXQoKSkpOwogI2Vsc2UKLSAgICBhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmN1cnJl
bnROYXRpdmVJbWFnZSgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3Rr
LmNwcAppbmRleCAwNzQ4ZTBkMTBjODkuLjM3NjI1NzRhZjc1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgRHJhZ0lt
YWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZs
b2F0IGZyYWN0aW9uKQogCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKElt
YWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbikKIHsKLSAgICByZXR1cm4gaW1hZ2UtPmN1cnJl
bnROYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCk7CisgICAgcmV0dXJuIGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5wbGF0Zm9ybUltYWdlKCk7CiB9CiAKIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFtZShjb25zdCBTdHJp
bmcmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
U2NhbGFibGVJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgKaW5kZXggODExMzljZDJiZTI3Li5kOWZkYTc3
NmZkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L1NjYWxhYmxlSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuaApAQCAtMTQ3LDggKzE0Nyw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKGJvb2wgZmxhZykg
eyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQogICAgIGJvb2wgaWdub3Jl
c0dhbW1hQW5kQ29sb3JQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZTsgfQogCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KLSAgICBz
dGQ6Om9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0ZWRTaXplQXRJbmRleChzaXplX3Qp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVuc2l0eUNvcnJlY3RlZFNpemU7IH0KKyAgICBJbWFn
ZURlY29kZXI6OkZyYW1lTWV0YWRhdGEgZnJhbWVNZXRhZGF0YUF0SW5kZXgoc2l6ZV90KSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB7IG1fb3JpZW50YXRpb24sIG1fZGVuc2l0eUNvcnJlY3RlZFNp
emUgfTsgfQorCisgICAgYm9vbCBmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGVudW0geyBJQ0NDb2xvclBy
b2ZpbGVIZWFkZXJMZW5ndGggPSAxMjggfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAKaW5kZXggMTQ4Njg5N2NhZjYyLi5lOGY1NDc2
NDk3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VD
YWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNh
aXJvV2luLmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbikKICAgICBjYWlyb19zZXRf
c291cmNlX3JnYihjciwgMS4wLCAwLjAsIDEuMCk7CiAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShj
cik7CiAKLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltZy0+Y3VycmVudE5hdGl2ZUltYWdl
KCkpIHsKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSkgewogICAgICAgICBhdXRvJiBzdXJmYWNlID0gbmF0aXZlSW1hZ2UtPnBsYXRm
b3JtSW1hZ2UoKTsKICAgICAgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCiAgICAgICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFjZS5nZXQoKSwgMC4wLCAwLjApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggOTk3
ZTkyNWZiM2VhLi42NDkxZDVhMDU0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMzA1LDEyICszMDUsNiBAQCBib29sIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpoYXNBdXRvSGVpZ2h0T3JDb250YWluaW5nQmxvY2tXaXRoQXV0
b0hlaWdodCgpIGNvbnN0CiAKIERlY29kaW5nTW9kZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZGVj
b2RpbmdNb2RlRm9ySW1hZ2VEcmF3KGNvbnN0IEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gU29tZSBkb2N1bWVudCB0eXBlcyBmb3JjZSBz
eW5jaHJvbm91cyBkZWNvZGluZy4KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChJ
T1NBcHBsaWNhdGlvbjo6aXNJQm9va3NTdG9yeXRpbWUoKSkKLSAgICAgICAgcmV0dXJuIERlY29k
aW5nTW9kZTo6U3luY2hyb25vdXM7Ci0jZW5kaWYKLQogICAgIGlmIChkb2N1bWVudCgpLmlzSW1h
Z2VEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91czsK
IApAQCAtMzE4LDYgKzMxMiwxMCBAQCBEZWNvZGluZ01vZGUgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmRlY29kaW5nTW9kZUZvckltYWdlRHJhdyhjb25zdCBJbWFnZSYgaW1hZ2UsCiAgICAgaWYgKHBh
aW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNuYXBzaG90dGlu
ZykpCiAgICAgICAgIHJldHVybiBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzOwogCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoSU9TQXBwbGljYXRpb246OmlzSUJvb2tzU3Rvcnl0
aW1lKCkpCisgICAgICAgIHJldHVybiBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzOworI2VuZGlm
CiAKICAgICBhdXRvKiBiaXRtYXBJbWFnZSA9IGR5bmFtaWNEb3duY2FzdDxCaXRtYXBJbWFnZT4o
aW1hZ2UpOwogICAgIGlmICghYml0bWFwSW1hZ2UpCkBAIC0zNDYsNiArMzQ0LDcgQEAgRGVjb2Rp
bmdNb2RlIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkZWNvZGluZ01vZGVGb3JJbWFnZURyYXcoY29u
c3QgSW1hZ2UmIGltYWdlLAogICAgICAgICAvLyA8aW1nIGRlY29kaW5nPSJhc3luYyI+IGZvcmNl
cyBhc3luY2hyb25vdXMgZGVjb2RpbmcgYnV0IG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIHdp
bGwgbm90IGNhdXNlIGZsaWNrZXJpbmcuCiAgICAgICAgIGlmIChpbWdFbGVtZW50LT5kZWNvZGlu
Z01vZGUoKSA9PSBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cykgeworICAgICAgICAgICAgLy8g
aXNBc3luY0RlY29kaW5nRW5hYmxlZEZvclRlc3RpbmcoKSBmb3JjZXMgYXN5bmMgaW1hZ2UgZGVj
b2RpbmcgcmVnYXJkbGVzcyB3aGV0aGVyIGl0IGlzIGluIHRoZSB2aWV3cG9ydCBvciBub3QuCiAg
ICAgICAgICAgICBpZiAoYml0bWFwSW1hZ2UtPmlzQXN5bmNEZWNvZGluZ0VuYWJsZWRGb3JUZXN0
aW5nKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3Vz
OwogCkBAIC0zNTksMTAgKzM1OCwxMSBAQCBEZWNvZGluZ01vZGUgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRlY29kaW5nTW9kZUZvckltYWdlRHJhdyhjb25zdCBJbWFnZSYgaW1hZ2UsCiAgICAgICAg
IHJldHVybiBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91czsKIAogICAgIC8vIEFuaW1hdGVkIGlt
YWdlIGNhc2UuCi0gICAgaWYgKGJpdG1hcEltYWdlLT5pc0FuaW1hdGVkKCkpIHsKLSAgICAgICAg
aWYgKCEoYml0bWFwSW1hZ2UtPmlzTGFyZ2VGb3JEZWNvZGluZygpICYmIHNldHRpbmdzKCkuYW5p
bWF0ZWRJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKCkpKQorICAgIGlmIChiaXRtYXBJbWFnZS0+
Y2FuQW5pbWF0ZSgpKSB7CisgICAgICAgIGlmICghKGJpdG1hcEltYWdlLT5zaG91bGRVc2VBc3lu
Y0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXMoKSAmJiBzZXR0aW5ncygpLmFuaW1hdGVkSW1hZ2VB
c3luY0RlY29kaW5nRW5hYmxlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBEZWNvZGluZ01vZGU6
OlN5bmNocm9ub3VzOwogCisgICAgICAgIC8vIEZpcnN0IGZyYW1lIHNob3VsZCBiZSBkZWNvZGVk
IGFjY29yZGluZyB0byBpdHMgc3RhdGUgaW4gdGhlIHZpZXdwb3J0LgogICAgICAgICBpZiAoYml0
bWFwSW1hZ2UtPmN1cnJlbnRGcmFtZUluZGV4KCkpCiAgICAgICAgICAgICByZXR1cm4gRGVjb2Rp
bmdNb2RlOjpBc3luY2hyb25vdXM7CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBEZWNvZGluZ01vZGUg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlY29kaW5nTW9kZUZvckltYWdlRHJhdyhjb25zdCBJbWFn
ZSYgaW1hZ2UsCiAgICAgfQogCiAgICAgLy8gTGFyZ2UgaW1hZ2UgY2FzZS4KLSAgICBpZiAoIShi
aXRtYXBJbWFnZS0+aXNMYXJnZUZvckRlY29kaW5nKCkgJiYgc2V0dGluZ3MoKS5sYXJnZUltYWdl
QXN5bmNEZWNvZGluZ0VuYWJsZWQoKSkpCisgICAgaWYgKCEoYml0bWFwSW1hZ2UtPmNhblVzZUFz
eW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpICYmIHNldHRpbmdzKCkubGFyZ2VJbWFnZUFzeW5j
RGVjb2RpbmdFbmFibGVkKCkpKQogICAgICAgICByZXR1cm4gRGVjb2RpbmdNb2RlOjpTeW5jaHJv
bm91czsKIAogICAgIC8vIENob29zZSBhIGRlY29kaW5nTW9kZSBzdWNoIHRoYXQgdGhlIGltYWdl
IGRvZXMgbm90IGZsaWNrZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aAppbmRleCAwMmVjMzJlMWNmZGMuLjlhZTg4MDRiMjc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC0zNjIsNiArMzYyLDcgQEAgcHJpdmF0ZToKIAogICAg
IFN0eWxlRGlmZmVyZW5jZSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCBP
cHRpb25TZXQ8U3R5bGVEaWZmZXJlbmNlQ29udGV4dFNlbnNpdGl2ZVByb3BlcnR5PikgY29uc3Q7
CiAKKyAgICBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgpIGZpbmFsIHsgcmV0dXJuICFpc1Zp
c2libGVJblZpZXdwb3J0KCk7IH0KICAgICBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIGltYWdlRnJh
bWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRS
ZWN0KiBjaGFuZ2VSZWN0KSBmaW5hbDsKICAgICBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIGltYWdl
VmlzaWJsZUluVmlld3BvcnQoY29uc3QgRG9jdW1lbnQmKSBjb25zdCBmaW5hbDsKICAgICB2b2lk
IGRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZEltYWdlJikgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDk1MGFi
NTg3OTUxYS4uY2I4ZTA5NWJlZWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMzEwMSw3ICszMTAxLDcgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OmlzRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoKSBjb25zdAogICAgICAgICBp
ZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChpbWFn
ZS0+Y3VycmVudEZyYW1lT3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpPcmllbnRh
dGlvbjo6Tm9uZSkKKyAgICAgICAgaWYgKGltYWdlLT5vcmllbnRhdGlvbkZvckN1cnJlbnRGcmFt
ZSgpICE9IEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAjaWYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkKQEAg
LTMxNDgsNyArMzE0OCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc1Vuc2NhbGVkQml0
bWFwT25seSgpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKGltYWdlLT5jdXJyZW50RnJhbWVPcmll
bnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lKQorICAgICAg
ICAgICAgaWYgKGltYWdlLT5vcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpICE9IEltYWdlT3Jp
ZW50YXRpb246Ok9yaWVudGF0aW9uOjpOb25lKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRzLnNpemUoKSA9PSBpbWFnZS0+c2l6ZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5kZXggZTM4MmI2ZWY3
MzE4Li4zZmJlYjYyYTc1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcApAQCAtMjIyLDcgKzIyMiw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VF
bGVtZW50OjpjcmVhdGVGaWx0ZXJFZmZlY3QoY29uc3QgRmlsdGVyRWZmZWN0VmVjCiAgICAgICAg
IGlmICghaW1hZ2UgfHwgaW1hZ2UtPmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAgICAgUmVmUHRyIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmN1cnJlbnRQcmVUcmFu
c2Zvcm1lZE5hdGl2ZUltYWdlKCk7CisgICAgICAgIFJlZlB0ciBuYXRpdmVJbWFnZSA9IGltYWdl
LT5wcmVUcmFuc2Zvcm1lZE5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlm
ICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKaW5k
ZXggZDA2ZTgwYjAyNTdhLi44YzdhMmQ3YjdmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcApAQCAtNTgsOSArNTgsOSBA
QCB2b2lkIFNWR0ltYWdlRm9yQ29udGFpbmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAgIHByb3RlY3RlZEltYWdlKCktPmRyYXdQYXR0
ZXJuRm9yQ29udGFpbmVyKGNvbnRleHQsIG1fY29udGFpbmVyU2l6ZSwgbV9jb250YWluZXJab29t
LCBtX2luaXRpYWxGcmFnbWVudFVSTCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIGRzdFJlY3QsIG9wdGlvbnMpOwogfQogCi1SZWZQdHI8TmF0aXZlSW1hZ2U+IFNW
R0ltYWdlRm9yQ29udGFpbmVyOjpjdXJyZW50TmF0aXZlSW1hZ2UoKQorUmVmUHRyPE5hdGl2ZUlt
YWdlPiBTVkdJbWFnZUZvckNvbnRhaW5lcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQog
ewotICAgIHJldHVybiBwcm90ZWN0ZWRJbWFnZSgpLT5jdXJyZW50TmF0aXZlSW1hZ2UoKTsKKyAg
ICByZXR1cm4gcHJvdGVjdGVkSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlRm9yQ29udGFpbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuaAppbmRleCA3NjAzMTAzNzNkN2YuLjEzOGFl
ODU1MTBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
Rm9yQ29udGFpbmVyLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyB0byBiZSBsZXNzIGNvbnNlcnZhdGl2ZS4KICAgICBib29sIGN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGN1cnJlbnROYXRpdmVJbWFnZSgpIGZpbmFsOworICAgIFJl
ZlB0cjxOYXRpdmVJbWFnZT4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBmaW5hbDsKIAog
cHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBTVkdJbWFnZUZvckNvbnRhaW5lcihTVkdJbWFn
ZSosIGNvbnN0IEZsb2F0U2l6ZSYgY29udGFpbmVyU2l6ZSwgZmxvYXQgY29udGFpbmVyWm9vbSwg
Y29uc3QgVVJMJiBpbml0aWFsRnJhZ21lbnRVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCmluZGV4IDgyODYyZTZiNWNlMC4uZmNjZTdlY2RlNGE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMTAxLDcgKzExMDEsNyBAQCBmbG9hdCBJbnRlcm5hbHM6
OmltYWdlRnJhbWVEdXJhdGlvbkF0SW5kZXgoSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCwgdW5z
aWduZWQgaQogdm9pZCBJbnRlcm5hbHM6OnNldEltYWdlRnJhbWVEZWNvZGluZ0R1cmF0aW9uKEhU
TUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQsIGZsb2F0IGR1cmF0aW9uKQogewogICAgIGlmIChhdXRv
KiBiaXRtYXBJbWFnZSA9IGJpdG1hcEltYWdlRnJvbUltYWdlRWxlbWVudChlbGVtZW50KSkKLSAg
ICAgICAgYml0bWFwSW1hZ2UtPnNldE1pbmltdW1EZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZyhT
ZWNvbmRzIHsgZHVyYXRpb24gfSk7CisgICAgICAgIGJpdG1hcEltYWdlLT5zZXRGcmFtZURlY29k
aW5nRHVyYXRpb25Gb3JUZXN0aW5nKFNlY29uZHMgeyBkdXJhdGlvbiB9KTsKIH0KIAogdm9pZCBJ
bnRlcm5hbHM6OnJlc2V0SW1hZ2VBbmltYXRpb24oSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3Bw
CmluZGV4IDQ0NWFiODQ2Y2ZkZS4uNzUxNjYzZDE5ZGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTU4Miw3ICs1ODIsNyBA
QCB2b2lkIEljb25EYXRhYmFzZTo6bG9hZEljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFn
ZVVSTCwgQWxsb3dEYXRhYmFzZVdyaXRlCiAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+
c2V0RGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGljb25EYXRhKSksIHRydWUpIDwg
RW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICAgICAgICAgICAgICBhdXRvIG5hdGl2ZUltYWdl
ID0gaW1hZ2UtPmN1cnJlbnROYXRpdmVJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICBhdXRv
IG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNjE5LDcgKzYxOSw3IEBAIHZvaWQgSWNvbkRhdGFiYXNl
OjpzZXRJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IHVpbnQ4X3Qq
IGljb25ECiAgICAgICAgICAgICBpZiAoaWNvbkRhdGFTaXplKSB7CiAgICAgICAgICAgICAgICAg
UmVmUHRyPE5hdGl2ZUltYWdlPiBuYXRpdmVJbWFnZTsKICAgICAgICAgICAgICAgICBhdXRvIGlt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+
c2V0RGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZShpY29uRGF0YSwgaWNvbkRhdGFTaXplKSwgdHJ1
ZSkgPj0gRW5jb2RlZERhdGFTdGF0dXM6OlNpemVBdmFpbGFibGUgJiYgKG5hdGl2ZUltYWdlID0g
aW1hZ2UtPmN1cnJlbnROYXRpdmVJbWFnZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2Ut
PnNldERhdGEoU2hhcmVkQnVmZmVyOjpjcmVhdGUoaWNvbkRhdGEsIGljb25EYXRhU2l6ZSksIHRy
dWUpID49IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlICYmIChuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5maXJzdCA9IG5hdGl2ZUltYWdlLT5wbGF0Zm9y
bUltYWdlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V1BFV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVdlYlZp
ZXcuY3BwCmluZGV4IGQzMDE1N2U4MmJkOS4uNzk2M2M4MGMzNDU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFV2ViVmlldy5jcHAKQEAgLTkzNiw3ICs5MzYsNyBA
QCB2b2lkIFZpZXc6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKICNp
ZiBVU0UoQ0FJUk8pCiAgICAgQVNTRVJUKGN1cnNvci50eXBlKCkgPT0gV2ViQ29yZTo6Q3Vyc29y
OjpUeXBlOjpDdXN0b20pOwogICAgIGF1dG8gaW1hZ2UgPSBjdXJzb3IuaW1hZ2UoKTsKLSAgICBh
dXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPmN1cnJlbnROYXRpdmVJbWFnZSgpOworICAgIGF1dG8g
bmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBp
ZiAoIW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZGLmNw
cAppbmRleCBjZmVhYTg5OTc2ZWUuLjdlMmFkMWY5YzY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkYuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlSW1hZ2VEZWNvZGVyQVZG
LmNwcApAQCAtMTI2LDYgKzEyNiwxMSBAQCBib29sIFJlbW90ZUltYWdlRGVjb2RlckFWRjo6ZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGluZGV4
IDwgbV9mcmFtZUNvdW50OwogfQogCitJbWFnZURlY29kZXI6OkZyYW1lTWV0YWRhdGEgUmVtb3Rl
SW1hZ2VEZWNvZGVyQVZGOjpmcmFtZU1ldGFkYXRhQXRJbmRleChzaXplX3QpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwogU2Vjb25kcyBSZW1vdGVJbWFnZURlY29kZXJBVkY6OmZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAobV9mcmFtZUlu
Zm9zLmlzRW1wdHkoKSB8fCBpbmRleCA+PSBtX2ZyYW1lSW5mb3Muc2l6ZSgpKQpAQCAtMTQyLDYg
KzE0NywxMSBAQCBib29sIFJlbW90ZUltYWdlRGVjb2RlckFWRjo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lSW5mb3NbaW5kZXhdLmhh
c0FscGhhOwogfQogCitib29sIFJlbW90ZUltYWdlRGVjb2RlckFWRjo6ZnJhbWVBbGxvd1N1YnNh
bXBsaW5nQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluZGV4IDwg
bV9mcmFtZUNvdW50OworfQorCiB1bnNpZ25lZCBSZW1vdGVJbWFnZURlY29kZXJBVkY6OmZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKICAgICByZXR1
cm4gc2l6ZSgpLmFyZWEoKSAqIDQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRi5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkYuaAppbmRleCA5NGIxMjZlMGNk
N2MuLmJiNjYxZDQyMDBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9tZWRpYS9SZW1vdGVJbWFnZURlY29kZXJBVkYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL21lZGlhL1JlbW90ZUltYWdlRGVjb2RlckFWRi5oCkBAIC03MCw5ICs3MCwxMSBA
QCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
LCBXZWJDb3JlOjpTdWJzYW1wbGluZ0xldmVsID0gV2ViQ29yZTo6U3Vic2FtcGxpbmdMZXZlbDo6
RGVmYXVsdCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCkgY29uc3QgZmluYWw7CisgICAgRnJhbWVNZXRhZGF0YSBmcmFtZU1ldGFkYXRhQXRJbmRl
eChzaXplX3QpIGNvbnN0IGZpbmFsOwogCiAgICAgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRl
eChzaXplX3QpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6
ZV90KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgo
c2l6ZV90KSBjb25zdCBmaW5hbDsKICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXpl
X3QsIFdlYkNvcmU6OlN1YnNhbXBsaW5nTGV2ZWwgPSBXZWJDb3JlOjpTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0KSBjb25zdCBmaW5hbDsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VQdHIg
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBXZWJDb3JlOjpTdWJzYW1wbGluZ0xldmVs
ID0gV2ViQ29yZTo6U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgV2ViQ29yZTo6RGVj
b2RpbmdPcHRpb25zJiA9IFdlYkNvcmU6OkRlY29kaW5nT3B0aW9ucyhXZWJDb3JlOjpEZWNvZGlu
Z01vZGU6OlN5bmNocm9ub3VzKSkgZmluYWw7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU1ZHSW1hZ2VDYXN0cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvU1ZHSW1hZ2VDYXN0cy5jcHAKaW5kZXggMmE1YmIwOTliMDcxLi4wYjVm
ZjVmZGRiOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9T
VkdJbWFnZUNhc3RzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U1ZHSW1hZ2VDYXN0cy5jcHAKQEAgLTY3LDYgKzY3LDExIEBAIHByaXZhdGU6CiAgICAgewogICAg
IH0KIAorICAgIGJvb2wgY2FuRGVzdHJveURlY29kZWREYXRhKGNvbnN0IEltYWdlJikgZmluYWwK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHZvaWQgaW1hZ2VGcmFt
ZUF2YWlsYWJsZShjb25zdCBJbWFnZSYsIEltYWdlQW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJl
Y3QqIGNoYW5nZVJlY3QgPSBudWxscHRyLCBEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVz
OjpJbnZhbGlkKSBmaW5hbAogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVhdGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3JvdW5kLWltYWdlLXJlcGVh
dGVkLmh0bWwKaW5kZXggY2U5YWE5MjQ4YzhhLi4zZGNkMmViOTA2MjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2FzeW5jLWltYWdlLWJhY2tncm91bmQtaW1hZ2UtcmVwZWF0
ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3luYy1pbWFnZS1iYWNrZ3Jv
dW5kLWltYWdlLXJlcGVhdGVkLmh0bWwKQEAgLTUwLDEwICs1MCw4IEBACiAgICAgICAgICAgICB2
YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhc3luYyBpbWFnZSBkZWNvZGluZyBm
b3IgdGhpcyBpbWFnZS4KLSAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgewor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQogICAgICAgICAgICAgICAgICAg
ICBpbnRlcm5hbHMuc2V0QXN5bmNEZWNvZGluZ0VuYWJsZWRGb3JUZXN0aW5nKGltYWdlLCB0cnVl
KTsKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEltYWdlRnJhbWVEZWNvZGluZ0R1
cmF0aW9uKGltYWdlLCAxLjApOwotICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIENoYW5nZSB0aGUgYmFja2dyb3VuZCBvZiB0aGUgZWxlbWVudHMuCiAgICAgICAgICAgICAg
ICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaW1hZ2Ut
YmFja2dyb3VuZCIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMt
aW1hZ2UtY29tcG9zaXRlZC1zaG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9hc3lu
Yy1pbWFnZS1jb21wb3NpdGVkLXNob3cuaHRtbAppbmRleCA0YWE1MDNiYjkwZDAuLjM4Nzc3Y2Fm
NTI4NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtY29t
cG9zaXRlZC1zaG93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvYXN5bmMtaW1h
Z2UtY29tcG9zaXRlZC1zaG93Lmh0bWwKQEAgLTE0LDYgKzE0LDEzIEBACiAgICAgICAgIGJhY2tn
cm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgIHotaW5kZXg6IDA7CiAgICAgfQorICAg
IGJvZHkgeworICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAs
IDAsIDAsIDApOworICAgIH0KKyAgICBib2R5LmJhY2tncm91bmQtbG9hZGVkIHsKKyAgICAgICAg
b3BhY2l0eTogMTsKKyAgICB9CiA8L3N0eWxlPgogPGJvZHk+CiAgICAgPGRpdiBjbGFzcz0iY29u
dGFpbmVyIj4KQEAgLTIyLDcgKzI5LDYgQEAKICAgICA8c2NyaXB0PgogICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgIGludGVybmFscy5jbGVhck1lbW9yeUNhY2hl
KCk7Ci0gICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0V2Via2l0SW1hZ2VSZWFkeUV2
ZW50RW5hYmxlZCh0cnVlKTsKICAgICAgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRMYXJn
ZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQodHJ1ZSk7CiAgICAgICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKICAgICAgICAgfQpAQCAtMzAsMTggKzM2LDE2IEBACiAgICAgICAg
IHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOwogICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgIC8vIEZvcmNlIHZlcnkgbG9uZyBhc3luYyBpbWFnZSBkZWNvZGlu
ZyBmb3IgdGhpcyBpbWFnZS4KLSAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0g
ICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEFzeW5jRGVjb2RpbmdFbmFibGVkRm9yVGVzdGlu
ZyhpbWFnZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEltYWdlRnJhbWVE
ZWNvZGluZ0R1cmF0aW9uKGltYWdlLCAxLjApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEltYWdl
RnJhbWVEZWNvZGluZ0R1cmF0aW9uKGltYWdlLCA1MDAwKTsKIAogICAgICAgICAgICAgLy8gQ2hh
bmdlIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBlbGVtZW50LgogICAgICAgICAgICAgbGV0IGVsZW1l
bnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY29tcG9zaXRlZCIpOwogICAgICAgICAgICAg
ZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWFnZS5zcmMgKyAnKSc7
CiAKLSAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0SW1hZ2VGcmFt
ZVJlYWR5IiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Ci0gICAgICAgICAgICB9LCBmYWxzZSk7CisgICAgICAgICAgICAvLyBTaG93IHRoZSBi
b2R5IGVsZW1lbnQgYW5kIGVuZCB0aGUgdGVzdC4KKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHku
Y2xhc3NMaXN0LmFkZCgiYmFja2dyb3VuZC1sb2FkZWQiKTsKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOwogICAgICAgICB9OwogICAgICAgICBpbWFnZS5zcmMgPSAicmVzb3Vy
Y2VzL2dyZWVuLTQwMHg0MDAucG5nIjsKICAgICA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1hZ2UtZXhwZWN0ZWQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1h
Z2UtZXhwZWN0ZWQuaHRtbAppbmRleCA1Y2ZhZjNkZDQyOTkuLmI1MDUwYjdmZjgwNCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlbmRlci1hbmltYXRlZC1pbWFn
ZS1leHBlY3RlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5k
ZXItYW5pbWF0ZWQtaW1hZ2UtZXhwZWN0ZWQuaHRtbApAQCAtMSwyMyArMSwxMSBAQAogPHN0eWxl
PgotICAgIC5ib3ggeworICAgIGRpdiB7CiAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAg
aGVpZ2h0OiAxMDBweDsKLSAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIH0KLSAg
ICAucmVkLWJhY2tncm91bmQgewotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0gICAg
fQotICAgIC5ncmVlbi1iYWNrZ3JvdW5kIHsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3Jl
ZW47Ci0gICAgfQotICAgIC5ibHVlLWJhY2tncm91bmQgewogICAgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBibHVlOwogICAgIH0KIDwvc3R5bGU+CiA8Ym9keT4KLSAgICA8cD5UaGlzIHRlc3RzIGNh
bGxpbmcgZGVjb2RlKCkgZm9yIGEgYW5pbWF0ZWQgaW1hZ2Ugd2hpY2ggaXMgYWxzbyBhbiBlbGVt
ZW50IGluIHRoZSBET00gdHJlZS48L3A+Ci0gICAgPGRpdiBjbGFzcz0iYm94IHJlZC1iYWNrZ3Jv
dW5kIj48L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJib3ggZ3JlZW4tYmFja2dyb3VuZCI+PC9kaXY+
Ci0gICAgPGRpdiBjbGFzcz0iYm94IGJsdWUtYmFja2dyb3VuZCI+PC9kaXY+Ci0gICAgPGRpdiBj
bGFzcz0iYm94IHJlZC1iYWNrZ3JvdW5kIj48L2Rpdj4KKwk8cD5UaGlzIHRlc3RzIGNhbGxpbmcg
ZGVjb2RlKCkgZm9yIGEgYW5pbWF0ZWQgaW1hZ2Ugd2hpY2ggaXMgYWxzbyBhbiBlbGVtZW50IGlu
IHRoZSBET00gdHJlZS48L3A+CisgICAgPGRpdj48L2Rpdj4KIDwvYm9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1hZ2UuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1hZ2Uu
aHRtbAppbmRleCA0Y2YyMmM1ZmJkMmUuLmJhOGYzYWY0ODA3NSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvZGVjb2RlLXJlbmRlci1hbmltYXRlZC1pbWFnZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2RlY29kZS1yZW5kZXItYW5pbWF0ZWQtaW1hZ2UuaHRt
bApAQCAtMSwyMSArMSwyNyBAQAogIDxzdHlsZT4KKyAgICAgZGl2IHsKKyAgICAgICAgd2lkdGg6
IDEwMHB4OworICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgIH0KICAgICBjYW52YXMgewogICAg
ICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6IGJsYWNrOwogICAgIH0KKyAgICBpbWcgeworICAgICAgICBtYXgtd2lkdGg6
IDEwMCU7CisgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CisgICAgfQogPC9zdHlsZT4KIDxib2R5
PgogICAgIDxwPlRoaXMgdGVzdHMgY2FsbGluZyBkZWNvZGUoKSBmb3IgYSBhbmltYXRlZCBpbWFn
ZSB3aGljaCBpcyBhbHNvIGFuIGVsZW1lbnQgaW4gdGhlIERPTSB0cmVlLjwvcD4KLSAgICA8Y2Fu
dmFzIGlkPSJjYW52YXMxIj48L2NhbnZhcz4KLSAgICA8Y2FudmFzIGlkPSJjYW52YXMyIj48L2Nh
bnZhcz4KLSAgICA8Y2FudmFzIGlkPSJjYW52YXMzIj48L2NhbnZhcz4KLSAgICA8Y2FudmFzIGlk
PSJjYW52YXM0Ij48L2NhbnZhcz4KKyAgICA8Y2FudmFzPjwvY2FudmFzPgogICAgIDxkaXY+PC9k
aXY+CiAgICAgPHNjcmlwdD4KICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMgJiYgd2luZG93
LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgIGludGVybmFscy5jbGVhck1lbW9yeUNhY2hlKCk7
CiAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0QW5pbWF0ZWRJbWFnZURlYnVnQ2Fu
dmFzRHJhd2luZ0VuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Mu
c2V0V2Via2l0SW1hZ2VSZWFkeUV2ZW50RW5hYmxlZCh0cnVlKTsKICAgICAgICAgICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICB9CiAKQEAgLTIzLDI3ICsyOSwyNyBAQAog
ICAgICAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGl2Iik7CiAgICAg
ICAgIHBhcmVudC5hcHBlbmRDaGlsZChpbWFnZSk7CiAKLSAgICAgICAgZnVuY3Rpb24gZHJhd0lt
YWdlSW5DYW52YXMoaW1hZ2UsIGNhbnZhc0lkKSB7Ci0gICAgICAgICAgICB2YXIgY2FudmFzID0g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjYW52YXNJZCk7Ci0gICAgICAgICAgICB2YXIgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UoaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7Ci0gICAgICAgIH0K
LQogICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKCkgPT4gewotICAgICAgICAgICAgaW1hZ2UuZGVj
b2RlKCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZHJhd0ltYWdlSW5DYW52YXMoaW1h
Z2UsICIjY2FudmFzMSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZS5kZWNvZGUoKTsK
LSAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGRyYXdJbWFnZUlu
Q2FudmFzKGltYWdlLCAiI2NhbnZhczIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2Uu
ZGVjb2RlKCk7Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBk
cmF3SW1hZ2VJbkNhbnZhcyhpbWFnZSwgIiNjYW52YXMzIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGltYWdlLmRlY29kZSgpOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0gICAgICAg
ICAgICAgICAgZHJhd0ltYWdlSW5DYW52YXMoaW1hZ2UsICIjY2FudmFzNCIpOwotICAgICAgICAg
ICAgICAgIHBhcmVudC5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMgJiYgd2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3JjZSBsYXlv
dXQgYW5kIGRpc3BsYXkgc28gdGhlIGltYWdlIGdldHMgZHJhd24uIFRoZSBpbWFnZSB3aWxsIGRy
YXcgaXRzIHJlZCBmcmFtZS4KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldEhl
aWdodDsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXkoKTsKKworICAgICAgICAg
ICAgICAgIC8vIFdhaXQgdGlsbCBkZWNvZGluZyB0aGUgbmV4dCAoZ3JlZW4pIGZyYW1lIGZpbmlz
aGVzIGFuZCB0aGUgYW5pbWF0aW9uIGFkdmFuY2VzIHRvIGl0LgorICAgICAgICAgICAgICAgIGlt
YWdlLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdEltYWdlRnJhbWVSZWFkeSIsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVxdWVzdCBkZWNvZGluZyB0aGUgbmV4dCAoYmx1ZSkgZnJhbWUu
IFdhaXQgdGlsbCBkZWNvZGluZyBmaW5pc2hlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhbmltYXRpb24gYWR2YW5jZXMgdG8gaXQuCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbWFnZS5kZWNvZGUoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiY2FudmFzIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwg
MCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0pOwogICAgICAgICBpbWFnZS5zcmMgPSAicmVzb3VyY2VzL2FuaW1hdGVkLXJl
ZC1ncmVlbi1ibHVlLXJlcGVhdC0yLmdpZiI7CiAgICAgPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNjliMTZkNDU1NDE0Li5m
Y2RkMWM0MzkwMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTE0NTIsNyArMTQ1Miw2IEBAIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdv
cmsvZmV0Y2gtcmVzcG9uc2UtYm9keS0zMDQuaHRtbCBbIFNraXAgXQogIyBBc3luYyBpbWFnZSBk
ZWNvZGluZyBpcyBXSzIgb25seQogZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2UtYmFja2dyb3VuZC1j
aGFuZ2UuaHRtbAogZmFzdC9pbWFnZXMvYXN5bmMtaW1hZ2Utc3JjLWNoYW5nZS5odG1sCi1mYXN0
L2ltYWdlcy9hc3luYy1pbWFnZS1jb21wb3NpdGVkLXNob3cuaHRtbAogaHR0cC90ZXN0cy9tdWx0
aXBhcnQvbXVsdGlwYXJ0LWFzeW5jLWltYWdlLmh0bWwKIAogY3NzMy9tYXNraW5nL21hc2stcmVw
ZWF0LXNwYWNlLXBhZGRpbmcuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDdmN2JmNTY0NzE2YS4u
Y2Y3MGJhNmY2ODQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhw
ZWN0YXRpb25zCkBAIC0xMDQ0LDYgKzEwNDQsOCBAQCB3ZWJraXQub3JnL2IvMjA4NTc3IFsgUmVs
ZWFzZSBdIGZhc3QvaGlkcGkvaW1hZ2Utc3Jjc2V0LXJlbGF0aXZlLXN2Zy1jYW52YXMuaHRtbAog
CiB3ZWJraXQub3JnL2IvMjA4NTkwIFsgRGVidWcgXSBmYXN0L2V2ZW50cy9iZWZvcmV1bmxvYWQt
cHJvbXB0Lmh0bWwgWyBQYXNzIENyYXNoIF0KIAord2Via2l0Lm9yZy9iLzIwODg4OSBmYXN0L2lt
YWdlcy9kZWNvZGUtcmVuZGVyLWFuaW1hdGVkLWltYWdlLmh0bWwgWyBQYXNzIEltYWdlT25seUZh
aWx1cmUgXQorCiB3ZWJraXQub3JnL2IvMjA5MDA2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3Mvc2NyaXB0aW5nLTEvdGhlLXNjcmlwdC1lbGVtZW50L2V4ZWN1
dGlvbi10aW1pbmcvMDg1Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjA5
MDc3IHN2Zy9jdXN0b20vb2JqZWN0LXNpemluZy1leHBsaWNpdC13aWR0aC54aHRtbCBbIFBhc3Mg
RmFpbHVyZSBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>