<?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>66734</bug_id>
          
          <creation_ts>2011-08-22 17:31:02 -0700</creation_ts>
          <short_desc>Remove WebCore/platform/android</short_desc>
          <delta_ts>2011-08-23 03:00:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66688</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>peter</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>455084</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-22 17:31:02 -0700</bug_when>
    <thetext>Remove WebCore/platform/android</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455085</commentid>
    <comment_count>1</comment_count>
      <attachid>104771</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-22 17:31:54 -0700</bug_when>
    <thetext>Created attachment 104771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455114</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-22 17:48:02 -0700</bug_when>
    <thetext>@Peter: Please check whether we can remove all these files!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455255</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2011-08-23 01:55:33 -0700</bug_when>
    <thetext>All these files are in the /WebCore/platform/android/ directory, so LGTM. Steve, can you verify this please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455256</commentid>
    <comment_count>4</comment_count>
      <attachid>104771</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-08-23 01:59:40 -0700</bug_when>
    <thetext>Comment on attachment 104771
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455280</commentid>
    <comment_count>5</comment_count>
      <attachid>104771</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-23 03:00:03 -0700</bug_when>
    <thetext>Comment on attachment 104771
Patch

Clearing flags on attachment: 104771

Committed r93589: &lt;http://trac.webkit.org/changeset/93589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455281</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-23 03:00:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104771</attachid>
            <date>2011-08-22 17:31:54 -0700</date>
            <delta_ts>2011-08-23 03:00:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66734-20110822173153.patch</filename>
            <type>text/plain</type>
            <size>133334</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDgtMjIgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgZGlyZWN0b3J5IGlzIG5vdCBuZWVkZWQgbm93IHRoYXQgQW5kcm9pZCBzaGFyZXMgbW9y
ZSBjb2RlIHdpdGgKKyAgICAgICAgQ2hyb21pdW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRy
b2lkOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvQ2xpcGJvYXJkQW5kcm9p
ZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9DbGlwYm9hcmRBbmRy
b2lkLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lk
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5kcm9p
ZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9FdmVudExvb3BBbmRy
b2lkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0ZpbGVTeXN0ZW1B
bmRyb2lkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0
aW9uU2VydmljZUFuZHJvaWQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lkLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0xhbmd1YWdlQW5kcm9pZC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9Mb2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1Ub3VjaEV2ZW50
QW5kcm9pZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9y
bVRvdWNoUG9pbnRBbmRyb2lkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRy
b2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Fu
ZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2FuZHJvaWQvU1NMS2V5R2VuZXJhdG9yQW5kcm9pZC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1NlYXJjaFBvcHVwTWVudUFuZHJvaWQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvU2hhcmVkVGltZXJBbmRyb2lkLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1NvdW5kQW5kcm9pZC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9pZC5jcHA6
IFJlbW92ZWQuCisKIDIwMTEtMDgtMjIgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2FyZEFuZHJvaWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ2xpcGJvYXJkQW5kcm9pZC5j
cHAJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9D
bGlwYm9hcmRBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNsaXBib2FyZEFuZHJvaWQu
aCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9h
cmQ6OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIERyYWdEYXRhKiwgRnJhbWUqKQotewot
ICAgIHJldHVybiAwOwotfQotCi1DbGlwYm9hcmRBbmRyb2lkOjpDbGlwYm9hcmRBbmRyb2lkKENs
aXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkK
LSAgICA6IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCi17Ci19Ci0KLUNsaXBib2Fy
ZEFuZHJvaWQ6On5DbGlwYm9hcmRBbmRyb2lkKCkKLXsKLX0KLQotdm9pZCBDbGlwYm9hcmRBbmRy
b2lkOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJikKLXsKLSAgICBBU1NFUlQoaXNGb3JEcmFnQW5k
RHJvcCgpKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpjbGVhckFsbERhdGEoKQotewot
ICAgIEFTU0VSVChpc0ZvckRyYWdBbmREcm9wKCkpOwotfQotCi1TdHJpbmcgQ2xpcGJvYXJkQW5k
cm9pZDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJiBzdWNjZXNzKSBjb25zdAoteyAgICAg
Ci0gICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIHJldHVybiAiIjsKLX0KLQotYm9vbCBDbGlwYm9h
cmRBbmRyb2lkOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
QVNTRVJUKGlzRm9yRHJhZ0FuZERyb3AoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEFuZHJv
aWQ6OnR5cGVzKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOwotfQot
Ci1QYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRBbmRyb2lkOjpmaWxlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RHJhZ0ltYWdl
KENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotewotfQotCi12b2lkIENsaXBib2FyZEFu
ZHJvaWQ6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50JikKLXsKLX0K
LQotRHJhZ0ltYWdlUmVmIENsaXBib2FyZEFuZHJvaWQ6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2lu
dCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiwgRnJhbWUqKQotewotfQotCi12b2lkIENsaXBib2FyZEFuZHJvaWQ6OndyaXRlVVJMKGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCi17Ci19Ci0KLXZvaWQgQ2xpcGJvYXJk
QW5kcm9pZDo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqKQotewotICAg
IEFTU0VSVChzZWxlY3RlZFJhbmdlKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRBbmRyb2lkOjp3cml0
ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKQotewotfQotCi1ib29sIENsaXBib2FyZEFuZHJvaWQ6
Omhhc0RhdGEoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DbGlwYm9hcmRBbmRy
b2lkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DbGlw
Ym9hcmRBbmRyb2lkLmgJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9DbGlwYm9hcmRBbmRyb2lkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRBbmRyb2lkX2gKLSNkZWZpbmUgQ2xp
cGJvYXJkQW5kcm9pZF9oCi0KLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2Fj
aGVkSW1hZ2U7Ci0KLWNsYXNzIENsaXBib2FyZEFuZHJvaWQgOiBwdWJsaWMgQ2xpcGJvYXJkLCBw
dWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewotcHVibGljOgotICAgIENsaXBib2FyZEFuZHJv
aWQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgQ2xpcGJvYXJkVHlwZSk7Ci0gICAgfkNs
aXBib2FyZEFuZHJvaWQoKTsKLQotICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7Ci0gICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5n
JiwgYm9vbCYgc3VjY2VzcykgY29uc3Q7Ci0gICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAg
ICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEZpbGVMaXN0
PiBmaWxlcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBj
b25zdCBJbnRQb2ludCYpOwotICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29u
c3QgSW50UG9pbnQmKTsKLSAgICAKLSAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRl
RHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZy
YW1lKik7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwotICAg
IHZpcnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBoYXNEYXRhKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBDbGlwYm9hcmRBbmRyb2lkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fu
ZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0N1cnNvckFuZHJvaWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lk
IE9wZW4gU291cmNlIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2RlZmluZSBMT0df
VEFHICJXZWJDb3JlIgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3Vyc29yLmgi
Ci0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLUN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotQ3Vyc29yOjp+Q3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1DdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXN0YXRpYyBD
dXJzb3IgYzsKLWNvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBoYW5kQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
d2FpdEN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
bm9ydGhSZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RS
ZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RSZXNpemVD
dXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1
cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29u
c3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0
U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiByb3dS
ZXNpemVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgY29udGV4dE1lbnVDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNvcHlDdXJzb3Io
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgYWxpYXNDdXJzb3IoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9uZUN1cnNvcigp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5v
cnRoUGFubmluZ0N1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFz
dFBhbm5pbmdDdXJzb3IoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGM7
Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB3ZXN0UGFu
bmluZ0N1cnNvcigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBjOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5k
cm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9E
cmFnRGF0YUFuZHJvaWQuY3BwCShyZXZpc2lvbiA5MzU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuZHJvaWQvRHJhZ0RhdGFBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNl
IFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEu
aCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFj
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIERy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi1Db2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIENvbG9yKCk7Ci19Ci0gICAgCi1ib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAg
Ci1ib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBv
bGljeSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1TdHJpbmcgRHJhZ0Rh
dGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5LCBTdHJpbmcqKSBjb25z
dAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSAgICAKLSAgICAKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJh
bmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRHJh
Z0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QKLXsKLX0KLQotYm9vbCBE
cmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5kcm9pZC5jcHAJKHJldmlzaW9uIDkzNTY1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9FdmVudExvb3BBbmRyb2lkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDgsIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJv
aWQuY3BwCShyZXZpc2lvbiA5MzU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKLQotI2luY2x1ZGUgImN1dGlscy9sb2cuaCIKLSNpbmNsdWRlIDxkaXJl
bnQuaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8
Zm5tYXRjaC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBHbG9iYWwgc3RhdGljIHVzZWQgdG8gc3RvcmUgdGhlIGJhc2UgdG8g
dGhlIHBsdWdpbiBwYXRoLgotLy8gVGhpcyBpcyBzZXQgaW4gV2ViU2V0dGluZ3MuY3BwCi1TdHJp
bmcgc1BsdWdpblBhdGg7Ci0KLUNTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gcGF0aC51dGY4KCk7Ci19Ci0KLVN0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgaW50IG51bWJlciA9IHJhbmQoKSAlIDEwMDAwICsgMTsKLSAgICBT
dHJpbmcgZmlsZW5hbWU7Ci0gICAgZG8gewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNQbHVnaW5QYXRoKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoJy8nKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQocHJlZml4KTsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobnVtYmVyKSk7Ci0gICAgICAgIGZpbGVuYW1lID0g
YnVpbGRlci50b1N0cmluZygpOwotICAgICAgICBoYW5kbGUgPSBvcGVuKGZpbGVuYW1lLnV0Zjgo
KS5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgU19JUlVTUiB8IFNfSVdVU1Ip
OwotICAgICAgICBudW1iZXIrKzsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYW5kbGUgIT0gLTEp
Ci0gICAgICAgICAgICByZXR1cm4gZmlsZW5hbWU7Ci0gICAgfSB3aGlsZSAoZXJybm8gPT0gRUVY
SVNUKTsKLSAgICAKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgdW5sb2FkTW9kdWxl
KFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKLXsKLSAgICByZXR1cm4gIWRsY2xvc2UobW9kdWxlKTsK
LX0KLQotU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkgCi17Ci0gICAgcmV0dXJuIHNQbHVnaW5Q
YXRoOwotfQotCi1WZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsK
LSAgICBDU3RyaW5nIGNwYXRoID0gcGF0aC51dGY4KCk7Ci0gICAgQ1N0cmluZyBjZmlsdGVyID0g
ZmlsdGVyLnV0ZjgoKTsKLSAgICBESVIqIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKLSAg
ICBpZiAoZGlyKSB7Ci0gICAgICAgIHN0cnVjdCBkaXJlbnQqIGRwOwotICAgICAgICB3aGlsZSAo
KGRwID0gcmVhZGRpcihkaXIpKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRw
LT5kX25hbWU7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiLiIpIHx8ICFzdHJjbXAo
bmFtZSwgIi4uIikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
Zm5tYXRjaChjZmlsdGVyLmRhdGEoKSwgbmFtZSwgMCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBjaGFyIGZpbGVQYXRoWzEwMjRdOwotICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKGZpbGVQYXRoKSAtIDEpIDwgc25wcmludGYoZmlsZVBhdGgs
IHNpemVvZihmaWxlUGF0aCksICIlcy8lcyIsIGNwYXRoLmRhdGEoKSwgbmFtZSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7IC8vIGJ1ZmZlciBvdmVyZmxvdwotICAgICAgICAgICAgZW50cmll
cy5hcHBlbmQoZmlsZVBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGNsb3NlZGlyKGRpcik7Ci0g
ICAgfQotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUFu
ZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5jcHAJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBU
aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQuaCIKLQotI2luY2x1ZGUgIkdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgotI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCi0jaW5j
bHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgotCi0j
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIEpTQzo6QmluZGluZ3M6OmdldEpO
SUVudjsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZCBpcyB0aGUgQW5kcm9pZCBpbXBsbWVudGF0aW9uIG9m
IEdlb2xvY2F0aW9uCi0vLyBzZXJ2aWNlLiBFYWNoIG9iamVjdCBvZiB0aGlzIGNsYXNzIG93bnMg
YW4gb2JqZWN0IG9mIHR5cGUKLS8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSwgd2hpY2ggaW4g
dHVybiBvd25zIGEgSmF2YSBHZW9sb2NhdGlvblNlcnZpY2UKLS8vIG9iamVjdC4gVGhlcmVmb3Jl
LCB0aGVyZSBpcyBhIDE6MSBtYXBwaW5nIGJldHdlZW4gR2VvbG9jYXRpb24sCi0vLyBHZW9sb2Nh
dGlvblNlcnZpY2VBbmRyb2lkLCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgYW5kIEphdmEKLS8v
IEdlb2xvY2F0aW9uU2VydmljZSBvYmplY3RzLiBJbiB0aGUgY2FzZSB3aGVyZSBtdWx0aXBsZSBH
ZW9sb2NhdGlvbiBvYmplY3RzCi0vLyBleGlzdCBzaW11bHRhbmVvdXNseSwgdGhlIGNvcnJlc3Bv
bnNpbmcgSmF2YSBHZW9sb2NhdGlvblNlcnZpY2Ugb2JqZWN0cyBhbGwKLS8vIHJlZ2lzdGVyIHdp
dGggdGhlIHBsYXRmb3JtIGxvY2F0aW9uIHNlcnZpY2UuIEl0IGlzIHRoZSBwbGF0Zm9ybSBzZXJ2
aWNlIHRoYXQKLS8vIGhhbmRsZXMgbWFraW5nIHN1cmUgdGhhdCB1cGRhdGVzIGFyZSBwYXNzZWQg
dG8gYWxsIEdlb2xvY2F0aW9uIG9iamVjdHMuCi1QYXNzT3duUHRyPEdlb2xvY2F0aW9uU2Vydmlj
ZT4gR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDo6Y3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNs
aWVudCogY2xpZW50KQotewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9p
ZChjbGllbnQpOwotfQotCi1HZW9sb2NhdGlvblNlcnZpY2U6OkZhY3RvcnlGdW5jdGlvbiogR2Vv
bG9jYXRpb25TZXJ2aWNlOjpzX2ZhY3RvcnlGdW5jdGlvbiA9ICZHZW9sb2NhdGlvblNlcnZpY2VB
bmRyb2lkOjpjcmVhdGU7Ci0KLUdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6Okdlb2xvY2F0aW9u
U2VydmljZUFuZHJvaWQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBH
ZW9sb2NhdGlvblNlcnZpY2UoY2xpZW50KQotICAgICwgbV90aW1lcih0aGlzLCAmR2VvbG9jYXRp
b25TZXJ2aWNlQW5kcm9pZDo6dGltZXJGaXJlZCkKLSAgICAsIG1famF2YUJyaWRnZSgwKQotewot
fQotCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0YXJ0VXBkYXRpbmcoUG9zaXRp
b25PcHRpb25zKiBvcHRpb25zKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVy
eSB0aW1lIGEgbmV3IHdhdGNoIG9yIG9uZS1zaG90IHBvc2l0aW9uIHJlcXVlc3QKLSAgICAvLyBp
cyBzdGFydGVkLiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwb3NpdGlvbiBvciBhbiBlcnJvciwgY2Fs
bCBiYWNrCi0gICAgLy8gaW1tZWRpYXRlbHkuCi0gICAgaWYgKG1fbGFzdFBvc2l0aW9uIHx8IG1f
bGFzdEVycm9yKSB7Ci0gICAgICAgIEFTU0VSVChtX2phdmFCcmlkZ2UpOwotICAgICAgICBtX3Rp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLSAgICAvLyBMYXppbGx5IGNyZWF0ZSB0aGUg
SmF2YSBvYmplY3QuCi0gICAgYm9vbCBoYXZlSmF2YUJyaWRnZSA9IG1famF2YUJyaWRnZTsKLSAg
ICBpZiAoIWhhdmVKYXZhQnJpZGdlKQotICAgICAgICBtX2phdmFCcmlkZ2Uuc2V0KG5ldyBHZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UodGhpcykpOwotICAgIEFTU0VSVChtX2phdmFCcmlkZ2UpOwot
Ci0gICAgLy8gT24gQW5kcm9pZCwgaGlnaCBwb3dlciA9PSBHUFMuIFNldCB3aGV0aGVyIHRvIHVz
ZSBHUFMgYmVmb3JlIHdlIHN0YXJ0IHRoZQotICAgIC8vIGltcGxlbWVudGF0aW9uLgotICAgIEFT
U0VSVChvcHRpb25zKTsKLSAgICBpZiAob3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpCi0g
ICAgICAgIG1famF2YUJyaWRnZS0+c2V0RW5hYmxlR3BzKHRydWUpOwotCi0gICAgaWYgKCFoYXZl
SmF2YUJyaWRnZSkKLSAgICAgICAgbV9qYXZhQnJpZGdlLT5zdGFydCgpOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDo6c3RvcFVwZGF0aW5n
KCkKLXsKLSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgR2VvbG9jYXRpb24gb2JqZWN0IGhhcyBubyB3
YXRjaGVzIG9yIG9uZSBzaG90cyBpbgotICAgIC8vIHByb2dyZXNzLgotICAgIG1famF2YUJyaWRn
ZS5jbGVhcigpOwotICAgIC8vIFJlc2V0IGxhc3QgcG9zaXRpb24gYW5kIGVycm9yIHRvIG1ha2Ug
c3VyZSB0aGF0IHdlIGFsd2F5cyB0cnkgdG8gZ2V0IGEKLSAgICAvLyBuZXcgcG9zaXRpb24gZnJv
bSB0aGUgc3lzdGVtIHNlcnZpY2Ugd2hlbiBhIHJlcXVlc3QgaXMgZmlyc3QgbWFkZS4KLSAgICBt
X2xhc3RQb3NpdGlvbiA9IDA7Ci0gICAgbV9sYXN0RXJyb3IgPSAwOwotfQotCi12b2lkIEdlb2xv
Y2F0aW9uU2VydmljZUFuZHJvaWQ6OnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX2phdmFCcmlk
Z2UpOwotICAgIG1famF2YUJyaWRnZS0+c3RvcCgpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQ6OnJlc3VtZSgpCi17Ci0gICAgQVNTRVJUKG1famF2YUJyaWRnZSk7Ci0gICAg
bV9qYXZhQnJpZGdlLT5zdGFydCgpOwotfQotCi0vLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZ3Vh
cmFudGVlIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byB0aGlzIG1ldGhvZCBvZmZlciBhCi0vLyBt
b3JlIGFjY3VyYXRlIG9yIHVwZGF0ZWQgcG9zaXRpb24uCi12b2lkIEdlb2xvY2F0aW9uU2Vydmlj
ZUFuZHJvaWQ6Om5ld1Bvc2l0aW9uQXZhaWxhYmxlKFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHBv
c2l0aW9uKQotewotICAgIEFTU0VSVChwb3NpdGlvbik7Ci0gICAgaWYgKCFtX2xhc3RQb3NpdGlv
bgotICAgICAgICB8fCBpc1Bvc2l0aW9uTW92ZW1lbnQobV9sYXN0UG9zaXRpb24uZ2V0KCksIHBv
c2l0aW9uLmdldCgpKQotICAgICAgICB8fCBpc1Bvc2l0aW9uTW9yZUFjY3VyYXRlKG1fbGFzdFBv
c2l0aW9uLmdldCgpLCBwb3NpdGlvbi5nZXQoKSkKLSAgICAgICAgfHwgaXNQb3NpdGlvbk1vcmVU
aW1lbHkobV9sYXN0UG9zaXRpb24uZ2V0KCksIHBvc2l0aW9uLmdldCgpKSkgewotICAgICAgICBt
X2xhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICAvLyBSZW1vdmUgdGhlIGxhc3QgZXJy
b3IuCi0gICAgICAgIG1fbGFzdEVycm9yID0gMDsKLSAgICAgICAgcG9zaXRpb25DaGFuZ2VkKCk7
Ci0gICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6Om5ld0Vycm9yQXZh
aWxhYmxlKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IpCi17Ci0gICAgQVNTRVJUKGVy
cm9yKTsKLSAgICAvLyBXZSBsZWF2ZSB0aGUgbGFzdCBwb3NpdGlvbgotICAgIG1fbGFzdEVycm9y
ID0gZXJyb3I7Ci0gICAgZXJyb3JPY2N1cnJlZCgpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQ6OnRpbWVyRmlyZWQoVGltZXI8R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZD4q
IHRpbWVyKQotewotICAgIEFTU0VSVCgmbV90aW1lciA9PSB0aW1lcik7Ci0gICAgQVNTRVJUKG1f
bGFzdFBvc2l0aW9uIHx8IG1fbGFzdEVycm9yKTsKLSAgICBpZiAobV9sYXN0UG9zaXRpb24pCi0g
ICAgICAgIHBvc2l0aW9uQ2hhbmdlZCgpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3JPY2N1cnJl
ZCgpOwotfQotCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OmlzUG9zaXRpb25Nb3Zl
bWVudChHZW9wb3NpdGlvbiogcG9zaXRpb24xLCBHZW9wb3NpdGlvbiogcG9zaXRpb24yKQotewot
ICAgIEFTU0VSVChwb3NpdGlvbjEgJiYgcG9zaXRpb24yKTsKLSAgICAvLyBGb3IgdGhlIHNtYWxs
IGRpc3RhbmNlcyBpbiB3aGljaCB3ZSBhcmUgbGlrZWx5IGNvbmNlcm5lZCwgaXQncyByZWFzb25h
YmxlCi0gICAgLy8gdG8gYXBwcm94aW1hdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBw
b3NpdGlvbnMgYXMgdGhlIHN1bSBvZiB0aGUKLSAgICAvLyBkaWZmZXJlbmNlcyBpbiBsYXRpdHVk
ZSBhbmQgbG9uZ2l0dWRlLgotICAgIGRvdWJsZSBkZWx0YSA9IGZhYnMocG9zaXRpb24xLT5jb29y
ZHMoKS0+bGF0aXR1ZGUoKSAtIHBvc2l0aW9uMi0+Y29vcmRzKCktPmxhdGl0dWRlKCkpCi0gICAg
ICAgICsgZmFicyhwb3NpdGlvbjEtPmNvb3JkcygpLT5sb25naXR1ZGUoKSAtIHBvc2l0aW9uMi0+
Y29vcmRzKCktPmxvbmdpdHVkZSgpKTsKLSAgICAvLyBBcHByb3hpbWF0ZSBjb252ZXJzaW9uIGZy
b20gZGVncmVlcyBvZiBhcmMgdG8gbWV0cmVzLgotICAgIGRlbHRhICo9IDYwICogMTg1MjsKLSAg
ICAvLyBUaGUgdGhyZXNob2xkIGlzIHdoZW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBw
b3NpdGlvbnMgZXhjZWVkcyB0aGUKLSAgICAvLyB3b3JzZSAobGFyZ2VyKSBvZiB0aGUgdHdvIGFj
Y3VyYWNpZXMuCi0gICAgaW50IG1heEFjY3VyYWN5ID0gbWF4KHBvc2l0aW9uMS0+Y29vcmRzKCkt
PmFjY3VyYWN5KCksIHBvc2l0aW9uMi0+Y29vcmRzKCktPmFjY3VyYWN5KCkpOwotICAgIHJldHVy
biBkZWx0YSA+IG1heEFjY3VyYWN5OwotfQotCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJv
aWQ6OmlzUG9zaXRpb25Nb3JlQWNjdXJhdGUoR2VvcG9zaXRpb24qIHBvc2l0aW9uMSwgR2VvcG9z
aXRpb24qIHBvc2l0aW9uMikKLXsKLSAgICBBU1NFUlQocG9zaXRpb24xICYmIHBvc2l0aW9uMik7
Ci0gICAgcmV0dXJuIHBvc2l0aW9uMi0+Y29vcmRzKCktPmFjY3VyYWN5KCkgPCBwb3NpdGlvbjEt
PmNvb3JkcygpLT5hY2N1cmFjeSgpOwotfQotCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJv
aWQ6OmlzUG9zaXRpb25Nb3JlVGltZWx5KEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjEsIEdlb3Bvc2l0
aW9uKiBwb3NpdGlvbjIpCi17Ci0gICAgQVNTRVJUKHBvc2l0aW9uMSAmJiBwb3NpdGlvbjIpOwot
ICAgIERPTVRpbWVTdGFtcCBjdXJyZW50VGltZSA9IGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3Rh
bXAoV1RGOjpjdXJyZW50VGltZSgpKTsKLSAgICBET01UaW1lU3RhbXAgbWF4aW11bUFnZSA9IGNv
bnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoMTAgKiA2MCk7IC8vIDEwIG1pbnV0ZXMKLSAgICBy
ZXR1cm4gY3VycmVudFRpbWUgLSBwb3NpdGlvbjEtPnRpbWVzdGFtcCgpID4gbWF4aW11bUFnZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmgJ
KHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9s
b2NhdGlvblNlcnZpY2VBbmRyb2lkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkX2gKLSNkZWZpbmUgR2VvbG9j
YXRpb25TZXJ2aWNlQW5kcm9pZF9oCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIK
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBUaGUgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIGlzIHRoZSBicmlkZ2Ug
dG8gdGhlIEphdmEgaW1wbGVtZW50YXRpb24gb2YKLS8vIHRoZSBHZW9sb2NhdGlvbiBzZXJ2aWNl
LiBJdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YKLS8vIEdlb2xvY2F0aW9uU2Vydmlj
ZUFuZHJvaWQuCi1jbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7Ci0KLWNsYXNzIEdlb2xv
Y2F0aW9uU2VydmljZUFuZHJvaWQgOiBwdWJsaWMgR2VvbG9jYXRpb25TZXJ2aWNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHZW9sb2NhdGlvblNlcnZpY2U+IGNyZWF0ZShHZW9s
b2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2Vydmlj
ZUFuZHJvaWQoKSB7IH07Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlv
bk9wdGlvbnMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7Ci0KLSAgICB2aXJ0
dWFsIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RQb3Np
dGlvbi5nZXQoKTsgfQotICAgIHZpcnR1YWwgUG9zaXRpb25FcnJvciogbGFzdEVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0RXJyb3IuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzdXNw
ZW5kKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOwotCi0gICAgLy8gQW5kcm9pZC1zcGVj
aWZpYwotICAgIHZvaWQgbmV3UG9zaXRpb25BdmFpbGFibGUoUGFzc1JlZlB0cjxHZW9wb3NpdGlv
bj4pOwotICAgIHZvaWQgbmV3RXJyb3JBdmFpbGFibGUoUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9y
Pik7Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ+
KiB0aW1lcik7Ci0KLXByaXZhdGU6Ci0gICAgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZChHZW9s
b2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLQotICAgIHN0YXRpYyBib29sIGlzUG9zaXRpb25Nb3Zl
bWVudChHZW9wb3NpdGlvbiogcG9zaXRpb24xLCBHZW9wb3NpdGlvbiogcG9zaXRpb24yKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uTW9yZUFjY3VyYXRlKEdlb3Bvc2l0aW9uKiBwb3NpdGlv
bjEsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjIpOwotICAgIHN0YXRpYyBib29sIGlzUG9zaXRpb25N
b3JlVGltZWx5KEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjEsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjIp
OwotCi0gICAgVGltZXI8R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZD4gbV90aW1lcjsKLSAgICBS
ZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwotICAgIFJlZlB0cjxQb3NpdGlvbkVy
cm9yPiBtX2xhc3RFcnJvcjsKLSAgICBPd25QdHI8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlPiBt
X2phdmFCcmlkZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBH
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5jcHAJ
KHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9s
b2NhdGlvblNlcnZpY2VCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNl
QnJpZGdlLmgiCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmgiCi0jaW5j
bHVkZSAiR2VvcG9zaXRpb24uaCIKLSNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCi0jaW5jbHVk
ZSAiV2ViVmlld0NvcmUuaCIKLSNpbmNsdWRlIDxKTklIZWxwLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdXNpbmcgSlNDOjpCaW5kaW5nczo6Z2V0Sk5JRW52OwotCi1zdGF0aWMgY29uc3Qg
Y2hhciogamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzTmFtZSA9ICJhbmRyb2lkL3dlYmtpdC9H
ZW9sb2NhdGlvblNlcnZpY2UiOwotZW51bSBqYXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3NNZXRo
b2RzIHsKLSAgICBHZW9sb2NhdGlvblNlcnZpY2VNZXRob2RJbml0ID0gMCwKLSAgICBHZW9sb2Nh
dGlvblNlcnZpY2VNZXRob2RTdGFydCwKLSAgICBHZW9sb2NhdGlvblNlcnZpY2VNZXRob2RTdG9w
LAotICAgIEdlb2xvY2F0aW9uU2VydmljZU1ldGhvZFNldEVuYWJsZUdwcywKLSAgICBHZW9sb2Nh
dGlvblNlcnZpY2VNZXRob2RDb3VudCwKLX07Ci1zdGF0aWMgam1ldGhvZElEIGphdmFHZW9sb2Nh
dGlvblNlcnZpY2VDbGFzc01ldGhvZElEc1tHZW9sb2NhdGlvblNlcnZpY2VNZXRob2RDb3VudF07
Ci0KLXN0YXRpYyBjb25zdCBKTklOYXRpdmVNZXRob2QgamF2YUdlb2xvY2F0aW9uU2VydmljZUNs
YXNzTmF0aXZlTWV0aG9kc1tdID0gewotICAgIHsgIm5hdGl2ZU5ld0xvY2F0aW9uQXZhaWxhYmxl
IiwgIihKTGFuZHJvaWQvbG9jYXRpb24vTG9jYXRpb247KVYiLAotICAgICAgICAodm9pZCopIEdl
b2xvY2F0aW9uU2VydmljZUJyaWRnZTo6bmV3TG9jYXRpb25BdmFpbGFibGUgfSwKLSAgICB7ICJu
YXRpdmVOZXdFcnJvckF2YWlsYWJsZSIsICIoSkxqYXZhL2xhbmcvU3RyaW5nOylWIiwKLSAgICAg
ICAgKHZvaWQqKSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U6Om5ld0Vycm9yQXZhaWxhYmxlIH0K
LX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpqYXZhTG9jYXRpb25DbGFzc05hbWUgPSAiYW5kcm9p
ZC9sb2NhdGlvbi9Mb2NhdGlvbiI7Ci1lbnVtIGphdmFMb2NhdGlvbkNsYXNzTWV0aG9kcyB7Ci0g
ICAgTG9jYXRpb25NZXRob2RHZXRMYXRpdHVkZSA9IDAsCi0gICAgTG9jYXRpb25NZXRob2RHZXRM
b25naXR1ZGUsCi0gICAgTG9jYXRpb25NZXRob2RIYXNBbHRpdHVkZSwKLSAgICBMb2NhdGlvbk1l
dGhvZEdldEFsdGl0dWRlLAotICAgIExvY2F0aW9uTWV0aG9kSGFzQWNjdXJhY3ksCi0gICAgTG9j
YXRpb25NZXRob2RHZXRBY2N1cmFjeSwKLSAgICBMb2NhdGlvbk1ldGhvZEhhc0JlYXJpbmcsCi0g
ICAgTG9jYXRpb25NZXRob2RHZXRCZWFyaW5nLAotICAgIExvY2F0aW9uTWV0aG9kSGFzU3BlZWQs
Ci0gICAgTG9jYXRpb25NZXRob2RHZXRTcGVlZCwKLSAgICBMb2NhdGlvbk1ldGhvZEdldFRpbWUs
Ci0gICAgTG9jYXRpb25NZXRob2RDb3VudCwKLX07Ci1zdGF0aWMgam1ldGhvZElEIGphdmFMb2Nh
dGlvbkNsYXNzTWV0aG9kSURzW0xvY2F0aW9uTWV0aG9kQ291bnRdOwotCi1HZW9sb2NhdGlvblNl
cnZpY2VCcmlkZ2U6Okdlb2xvY2F0aW9uU2VydmljZUJyaWRnZShMaXN0ZW5lckludGVyZmFjZSog
bGlzdGVuZXIpCi0gICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQotICAgICwgbV9qYXZhR2VvbG9j
YXRpb25TZXJ2aWNlT2JqZWN0KDApCi17Ci0gICAgQVNTRVJUKG1fbGlzdGVuZXIpOwotICAgIHN0
YXJ0SmF2YUltcGxlbWVudGF0aW9uKCk7Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTo6
fkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpCi17Ci0gICAgc3RvcCgpOwotICAgIHN0b3BKYXZh
SW1wbGVtZW50YXRpb24oKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U6OnN0
YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9qYXZhR2VvbG9jYXRpb25TZXJ2aWNlT2JqZWN0KTsKLSAg
ICBnZXRKTklFbnYoKS0+Q2FsbFZvaWRNZXRob2QobV9qYXZhR2VvbG9jYXRpb25TZXJ2aWNlT2Jq
ZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhR2VvbG9jYXRpb25TZXJ2
aWNlQ2xhc3NNZXRob2RJRHNbR2VvbG9jYXRpb25TZXJ2aWNlTWV0aG9kU3RhcnRdKTsKLX0KLQot
dm9pZCBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U6OnN0b3AoKQotewotICAgIEFTU0VSVChtX2ph
dmFHZW9sb2NhdGlvblNlcnZpY2VPYmplY3QpOwotICAgIGdldEpOSUVudigpLT5DYWxsVm9pZE1l
dGhvZChtX2phdmFHZW9sb2NhdGlvblNlcnZpY2VPYmplY3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGphdmFHZW9sb2NhdGlvblNlcnZpY2VDbGFzc01ldGhvZElEc1tHZW9sb2Nh
dGlvblNlcnZpY2VNZXRob2RTdG9wXSk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJp
ZGdlOjpzZXRFbmFibGVHcHMoYm9vbCBlbmFibGUpCi17Ci0gICAgQVNTRVJUKG1famF2YUdlb2xv
Y2F0aW9uU2VydmljZU9iamVjdCk7Ci0gICAgZ2V0Sk5JRW52KCktPkNhbGxWb2lkTWV0aG9kKG1f
amF2YUdlb2xvY2F0aW9uU2VydmljZU9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzTWV0aG9kSURzW0dlb2xvY2F0aW9uU2Vy
dmljZU1ldGhvZFNldEVuYWJsZUdwc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuYWJsZSk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOjpuZXdMb2NhdGlv
bkF2YWlsYWJsZShKTklFbnYqIGVudiwgamNsYXNzLCBqbG9uZyBuYXRpdmVPYmplY3QsIGpvYmpl
Y3QgbG9jYXRpb24pCi17Ci0gICAgQVNTRVJUKG5hdGl2ZU9iamVjdCk7Ci0gICAgQVNTRVJUKGxv
Y2F0aW9uKTsKLSAgICBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIG9iamVjdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKj4obmF0aXZlT2JqZWN0KTsKLSAgICBv
YmplY3QtPm1fbGlzdGVuZXItPm5ld1Bvc2l0aW9uQXZhaWxhYmxlKHRvR2VvcG9zaXRpb24oZW52
LCBsb2NhdGlvbikpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTo6bmV3RXJy
b3JBdmFpbGFibGUoSk5JRW52KiBlbnYsIGpjbGFzcywgamxvbmcgbmF0aXZlT2JqZWN0LCBqc3Ry
aW5nIG1lc3NhZ2UpCi17Ci0gICAgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBvYmplY3QgPSBy
ZWludGVycHJldF9jYXN0PEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSo+KG5hdGl2ZU9iamVjdCk7
Ci0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0KLSAgICAgICAgUG9zaXRpb25FcnJv
cjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCBhbmRyb2lkOjp0
b19zdHJpbmcoZW52LCBtZXNzYWdlKSk7Ci0gICAgb2JqZWN0LT5tX2xpc3RlbmVyLT5uZXdFcnJv
ckF2YWlsYWJsZShlcnJvci5yZWxlYXNlKCkpOwotfQotCi1QYXNzUmVmUHRyPEdlb3Bvc2l0aW9u
PiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U6OnRvR2VvcG9zaXRpb24oSk5JRW52ICplbnYsIGNv
bnN0IGpvYmplY3QgJmxvY2F0aW9uKQotewotICAgIC8vIEFsdGl0dWRlIGlzIG9wdGlvbmFsIGFu
ZCBtYXkgbm90IGJlIHN1cHBsaWVkLgotICAgIGJvb2wgaGFzQWx0aXR1ZGUgPQotICAgICAgICBl
bnYtPkNhbGxCb29sZWFuTWV0aG9kKGxvY2F0aW9uLCBqYXZhTG9jYXRpb25DbGFzc01ldGhvZElE
c1tMb2NhdGlvbk1ldGhvZEhhc0FsdGl0dWRlXSk7Ci0gICAgZG91YmxlIEFsdGl0dWRlID0KLSAg
ICAgICAgaGFzQWx0aXR1ZGUgPwotICAgICAgICBlbnYtPkNhbGxEb3VibGVNZXRob2QobG9jYXRp
b24sIGphdmFMb2NhdGlvbkNsYXNzTWV0aG9kSURzW0xvY2F0aW9uTWV0aG9kR2V0QWx0aXR1ZGVd
KSA6Ci0gICAgICAgIDAuMDsKLSAgICAvLyBBY2N1cmFjeSBpcyByZXF1aXJlZCwgYnV0IGlzIG5v
dCBzdXBwbGllZCBieSB0aGUgZW11bGF0b3IuCi0gICAgZG91YmxlIEFjY3VyYWN5ID0KLSAgICAg
ICAgZW52LT5DYWxsQm9vbGVhbk1ldGhvZChsb2NhdGlvbiwgamF2YUxvY2F0aW9uQ2xhc3NNZXRo
b2RJRHNbTG9jYXRpb25NZXRob2RIYXNBY2N1cmFjeV0pID8KLSAgICAgICAgZW52LT5DYWxsRmxv
YXRNZXRob2QobG9jYXRpb24sIGphdmFMb2NhdGlvbkNsYXNzTWV0aG9kSURzW0xvY2F0aW9uTWV0
aG9kR2V0QWNjdXJhY3ldKSA6Ci0gICAgICAgIDAuMDsKLSAgICAvLyBoZWFkaW5nIGlzIG9wdGlv
bmFsIGFuZCBtYXkgbm90IGJlIHN1cHBsaWVkLgotICAgIGJvb2wgaGFzSGVhZGluZyA9Ci0gICAg
ICAgIGVudi0+Q2FsbEJvb2xlYW5NZXRob2QobG9jYXRpb24sIGphdmFMb2NhdGlvbkNsYXNzTWV0
aG9kSURzW0xvY2F0aW9uTWV0aG9kSGFzQmVhcmluZ10pOwotICAgIGRvdWJsZSBoZWFkaW5nID0K
LSAgICAgICAgaGFzSGVhZGluZyA/Ci0gICAgICAgIGVudi0+Q2FsbEZsb2F0TWV0aG9kKGxvY2F0
aW9uLCBqYXZhTG9jYXRpb25DbGFzc01ldGhvZElEc1tMb2NhdGlvbk1ldGhvZEdldEJlYXJpbmdd
KSA6Ci0gICAgICAgIDAuMDsKLSAgICAvLyBzcGVlZCBpcyBvcHRpb25hbCBhbmQgbWF5IG5vdCBi
ZSBzdXBwbGllZC4KLSAgICBib29sIGhhc1NwZWVkID0KLSAgICAgICAgZW52LT5DYWxsQm9vbGVh
bk1ldGhvZChsb2NhdGlvbiwgamF2YUxvY2F0aW9uQ2xhc3NNZXRob2RJRHNbTG9jYXRpb25NZXRo
b2RIYXNTcGVlZF0pOwotICAgIGRvdWJsZSBzcGVlZCA9Ci0gICAgICAgIGhhc1NwZWVkID8KLSAg
ICAgICAgZW52LT5DYWxsRmxvYXRNZXRob2QobG9jYXRpb24sIGphdmFMb2NhdGlvbkNsYXNzTWV0
aG9kSURzW0xvY2F0aW9uTWV0aG9kR2V0U3BlZWRdKSA6Ci0gICAgICAgIDAuMDsKLQotICAgIFJl
ZlB0cjxDb29yZGluYXRlcz4gbmV3Q29vcmRpbmF0ZXMgPSBXZWJDb3JlOjpDb29yZGluYXRlczo6
Y3JlYXRlKAotICAgICAgICBlbnYtPkNhbGxEb3VibGVNZXRob2QobG9jYXRpb24sIGphdmFMb2Nh
dGlvbkNsYXNzTWV0aG9kSURzW0xvY2F0aW9uTWV0aG9kR2V0TGF0aXR1ZGVdKSwKLSAgICAgICAg
ZW52LT5DYWxsRG91YmxlTWV0aG9kKGxvY2F0aW9uLCBqYXZhTG9jYXRpb25DbGFzc01ldGhvZElE
c1tMb2NhdGlvbk1ldGhvZEdldExvbmdpdHVkZV0pLAotICAgICAgICBoYXNBbHRpdHVkZSwgQWx0
aXR1ZGUsCi0gICAgICAgIEFjY3VyYWN5LAotICAgICAgICBmYWxzZSwgMC4wLCAgLy8gQWx0aXR1
ZGVBY2N1cmFjeSBub3QgcHJvdmlkZWQuCi0gICAgICAgIGhhc0hlYWRpbmcsIGhlYWRpbmcsCi0g
ICAgICAgIGhhc1NwZWVkLCBzcGVlZCk7Ci0KLSAgICByZXR1cm4gV2ViQ29yZTo6R2VvcG9zaXRp
b246OmNyZWF0ZSgKLSAgICAgICAgIG5ld0Nvb3JkaW5hdGVzLnJlbGVhc2UoKSwKLSAgICAgICAg
IGVudi0+Q2FsbExvbmdNZXRob2QobG9jYXRpb24sIGphdmFMb2NhdGlvbkNsYXNzTWV0aG9kSURz
W0xvY2F0aW9uTWV0aG9kR2V0VGltZV0pKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2U6OnN0YXJ0SmF2YUltcGxlbWVudGF0aW9uKCkKLXsKLSAgICBKTklFbnYqIGVudiA9IGdl
dEpOSUVudigpOwotCi0gICAgLy8gR2V0IHRoZSBKYXZhIEdlb2xvY2F0aW9uU2VydmljZSBjbGFz
cy4KLSAgICBqY2xhc3MgamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzID0gZW52LT5GaW5kQ2xh
c3MoamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzTmFtZSk7Ci0gICAgQVNTRVJUKGphdmFHZW9s
b2NhdGlvblNlcnZpY2VDbGFzcyk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIG1ldGhvZHMgd2Ugd2lz
aCB0byBjYWxsIG9uIHRoZSBKYXZhIEdlb2xvY2F0aW9uU2VydmljZSBjbGFzcy4KLSAgICBqYXZh
R2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3NNZXRob2RJRHNbR2VvbG9jYXRpb25TZXJ2aWNlTWV0aG9k
SW5pdF0gPQotICAgICAgICAgICAgZW52LT5HZXRNZXRob2RJRChqYXZhR2VvbG9jYXRpb25TZXJ2
aWNlQ2xhc3MsICI8aW5pdD4iLCAiKEopViIpOwotICAgIGphdmFHZW9sb2NhdGlvblNlcnZpY2VD
bGFzc01ldGhvZElEc1tHZW9sb2NhdGlvblNlcnZpY2VNZXRob2RTdGFydF0gPQotICAgICAgICAg
ICAgZW52LT5HZXRNZXRob2RJRChqYXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3MsICJzdGFydCIs
ICIoKVYiKTsKLSAgICBqYXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3NNZXRob2RJRHNbR2VvbG9j
YXRpb25TZXJ2aWNlTWV0aG9kU3RvcF0gPQotICAgICAgICAgICAgZW52LT5HZXRNZXRob2RJRChq
YXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3MsICJzdG9wIiwgIigpViIpOwotICAgIGphdmFHZW9s
b2NhdGlvblNlcnZpY2VDbGFzc01ldGhvZElEc1tHZW9sb2NhdGlvblNlcnZpY2VNZXRob2RTZXRF
bmFibGVHcHNdID0KLSAgICAgICAgICAgIGVudi0+R2V0TWV0aG9kSUQoamF2YUdlb2xvY2F0aW9u
U2VydmljZUNsYXNzLCAic2V0RW5hYmxlR3BzIiwgIihaKVYiKTsKLQotICAgIC8vIENyZWF0ZSB0
aGUgSmF2YSBHZW9sb2NhdGlvblNlcnZpY2Ugb2JqZWN0LgotICAgIGpsb25nIG5hdGl2ZU9iamVj
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KHRoaXMpOwotICAgIGpvYmplY3Qgb2JqZWN0ID0g
ZW52LT5OZXdPYmplY3QoamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamF2YUdlb2xvY2F0aW9uU2VydmljZUNsYXNzTWV0aG9k
SURzW0dlb2xvY2F0aW9uU2VydmljZU1ldGhvZEluaXRdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmF0aXZlT2JqZWN0KTsKLQotICAgIG1famF2YUdlb2xvY2F0aW9uU2Vy
dmljZU9iamVjdCA9IGdldEpOSUVudigpLT5OZXdHbG9iYWxSZWYob2JqZWN0KTsKLSAgICBBU1NF
UlQobV9qYXZhR2VvbG9jYXRpb25TZXJ2aWNlT2JqZWN0KTsKLQotICAgIC8vIFJlZ2lzdGVyIHRv
IGhhbmRsZSBjYWxscyB0byBuYXRpdmUgbWV0aG9kcyBvZiB0aGUgSmF2YSBHZW9sb2NhdGlvblNl
cnZpY2UKLSAgICAvLyBvYmplY3QuIFdlIHJlZ2lzdGVyIG9uY2Ugb25seS4KLSAgICBzdGF0aWMg
aW50IHJlZ2lzdGVyZWQgPSBqbmlSZWdpc3Rlck5hdGl2ZU1ldGhvZHMoZW52LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhR2VvbG9jYXRp
b25TZXJ2aWNlQ2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqYXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3NOYXRpdmVNZXRob2Rz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
RUxFTShqYXZhR2VvbG9jYXRpb25TZXJ2aWNlQ2xhc3NOYXRpdmVNZXRob2RzKSk7Ci0gICAgQVNT
RVJUKHJlZ2lzdGVyZWQgPT0gSk5JX09LKTsKLQotICAgIC8vIFNldCB1cCB0aGUgbWV0aG9kcyB3
ZSB3aXNoIHRvIGNhbGwgb24gdGhlIEphdmEgTG9jYXRpb24gY2xhc3MuCi0gICAgamNsYXNzIGph
dmFMb2NhdGlvbkNsYXNzID0gZW52LT5GaW5kQ2xhc3MoamF2YUxvY2F0aW9uQ2xhc3NOYW1lKTsK
LSAgICBBU1NFUlQoamF2YUxvY2F0aW9uQ2xhc3MpOwotICAgIGphdmFMb2NhdGlvbkNsYXNzTWV0
aG9kSURzW0xvY2F0aW9uTWV0aG9kR2V0TGF0aXR1ZGVdID0KLSAgICAgICAgZW52LT5HZXRNZXRo
b2RJRChqYXZhTG9jYXRpb25DbGFzcywgImdldExhdGl0dWRlIiwgIigpRCIpOwotICAgIGphdmFM
b2NhdGlvbkNsYXNzTWV0aG9kSURzW0xvY2F0aW9uTWV0aG9kR2V0TG9uZ2l0dWRlXSA9Ci0gICAg
ICAgIGVudi0+R2V0TWV0aG9kSUQoamF2YUxvY2F0aW9uQ2xhc3MsICJnZXRMb25naXR1ZGUiLCAi
KClEIik7Ci0gICAgamF2YUxvY2F0aW9uQ2xhc3NNZXRob2RJRHNbTG9jYXRpb25NZXRob2RIYXNB
bHRpdHVkZV0gPQotICAgICAgICBlbnYtPkdldE1ldGhvZElEKGphdmFMb2NhdGlvbkNsYXNzLCAi
aGFzQWx0aXR1ZGUiLCAiKClaIik7Ci0gICAgamF2YUxvY2F0aW9uQ2xhc3NNZXRob2RJRHNbTG9j
YXRpb25NZXRob2RHZXRBbHRpdHVkZV0gPQotICAgICAgICBlbnYtPkdldE1ldGhvZElEKGphdmFM
b2NhdGlvbkNsYXNzLCAiZ2V0QWx0aXR1ZGUiLCAiKClEIik7Ci0gICAgamF2YUxvY2F0aW9uQ2xh
c3NNZXRob2RJRHNbTG9jYXRpb25NZXRob2RIYXNBY2N1cmFjeV0gPQotICAgICAgICBlbnYtPkdl
dE1ldGhvZElEKGphdmFMb2NhdGlvbkNsYXNzLCAiaGFzQWNjdXJhY3kiLCAiKClaIik7Ci0gICAg
amF2YUxvY2F0aW9uQ2xhc3NNZXRob2RJRHNbTG9jYXRpb25NZXRob2RHZXRBY2N1cmFjeV0gPQot
ICAgICAgICBlbnYtPkdldE1ldGhvZElEKGphdmFMb2NhdGlvbkNsYXNzLCAiZ2V0QWNjdXJhY3ki
LCAiKClGIik7Ci0gICAgamF2YUxvY2F0aW9uQ2xhc3NNZXRob2RJRHNbTG9jYXRpb25NZXRob2RI
YXNCZWFyaW5nXSA9Ci0gICAgICAgIGVudi0+R2V0TWV0aG9kSUQoamF2YUxvY2F0aW9uQ2xhc3Ms
ICJoYXNCZWFyaW5nIiwgIigpWiIpOwotICAgIGphdmFMb2NhdGlvbkNsYXNzTWV0aG9kSURzW0xv
Y2F0aW9uTWV0aG9kR2V0QmVhcmluZ10gPQotICAgICAgICBlbnYtPkdldE1ldGhvZElEKGphdmFM
b2NhdGlvbkNsYXNzLCAiZ2V0QmVhcmluZyIsICIoKUYiKTsKLSAgICBqYXZhTG9jYXRpb25DbGFz
c01ldGhvZElEc1tMb2NhdGlvbk1ldGhvZEhhc1NwZWVkXSA9Ci0gICAgICAgIGVudi0+R2V0TWV0
aG9kSUQoamF2YUxvY2F0aW9uQ2xhc3MsICJoYXNTcGVlZCIsICIoKVoiKTsKLSAgICBqYXZhTG9j
YXRpb25DbGFzc01ldGhvZElEc1tMb2NhdGlvbk1ldGhvZEdldFNwZWVkXSA9Ci0gICAgICAgIGVu
di0+R2V0TWV0aG9kSUQoamF2YUxvY2F0aW9uQ2xhc3MsICJnZXRTcGVlZCIsICIoKUYiKTsKLSAg
ICBqYXZhTG9jYXRpb25DbGFzc01ldGhvZElEc1tMb2NhdGlvbk1ldGhvZEdldFRpbWVdID0KLSAg
ICAgICAgZW52LT5HZXRNZXRob2RJRChqYXZhTG9jYXRpb25DbGFzcywgImdldFRpbWUiLCAiKClK
Iik7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOjpzdG9wSmF2YUltcGxlbWVu
dGF0aW9uKCkKLXsKLSAgICAvLyBDYWxsZWQgYnkgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZCBv
biBXZWJLaXQgdGhyZWFkLgotICAgIEFTU0VSVChtX2phdmFHZW9sb2NhdGlvblNlcnZpY2VPYmpl
Y3QpOwotICAgIGdldEpOSUVudigpLT5EZWxldGVHbG9iYWxSZWYobV9qYXZhR2VvbG9jYXRpb25T
ZXJ2aWNlT2JqZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2Vy
dmljZUJyaWRnZS5oCShyZXZpc2lvbiA5MzU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJj
ZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VfaAotI2Rl
ZmluZSBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VfaAotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eS5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDsKLWNsYXNzIEdlb3Bvc2l0aW9uOwotCi0v
LyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UgaXMgdGhlIGJyaWRnZSB0byB0aGUgSmF2YSBpbXBs
ZW1lbnRhdGlvbi4gSXQgbWFuYWdlcwotLy8gdGhlIGxpZmV0aW1lIG9mIHRoZSBKYXZhIG9iamVj
dC4gSXQgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mCi0vLyBHZW9sb2NhdGlvblNlcnZp
Y2VBbmRyb2lkLgotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQgTGlzdGVuZXJJbnRlcmZhY2U7Ci0g
ICAgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKExpc3RlbmVySW50ZXJmYWNlKiBsaXN0ZW5lcik7
Ci0gICAgfkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZSgpOwotCi0gICAgdm9pZCBzdGFydCgpOwot
ICAgIHZvaWQgc3RvcCgpOwotICAgIHZvaWQgc2V0RW5hYmxlR3BzKGJvb2wgZW5hYmxlKTsKLQot
ICAgIC8vIFN0YXRpYyB3cmFwcGVyIGZ1bmN0aW9ucyB0byBoaWRlIEpOSSBuYXN0aW5lc3MuCi0g
ICAgc3RhdGljIHZvaWQgbmV3TG9jYXRpb25BdmFpbGFibGUoSk5JRW52ICplbnYsIGpjbGFzcywg
amxvbmcgbmF0aXZlT2JqZWN0LCBqb2JqZWN0IGxvY2F0aW9uKTsKLSAgICBzdGF0aWMgdm9pZCBu
ZXdFcnJvckF2YWlsYWJsZShKTklFbnYgKmVudiwgamNsYXNzLCBqbG9uZyBuYXRpdmVPYmplY3Qs
IGpzdHJpbmcgbWVzc2FnZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHRv
R2VvcG9zaXRpb24oSk5JRW52ICplbnYsIGNvbnN0IGpvYmplY3QgJmxvY2F0aW9uKTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIHN0YXJ0SmF2YUltcGxlbWVudGF0aW9uKCk7Ci0gICAgdm9pZCBzdG9w
SmF2YUltcGxlbWVudGF0aW9uKCk7Ci0KLSAgICBMaXN0ZW5lckludGVyZmFjZSogbV9saXN0ZW5l
cjsKLSAgICBqb2JqZWN0IG1famF2YUdlb2xvY2F0aW9uU2VydmljZU9iamVjdDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZUJyaWRn
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2ZW50QW5kcm9p
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlF
dmVudEFuZHJvaWQuY3BwCShyZXZpc2lvbiA5MzU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyODEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0KLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0jaW5j
bHVkZSA8dWkvS2V5Y29kZUxhYmVscy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIGNv
bXBhcmUgdG8gc2FtZSBmdW5jdGlvbiBpbiBnZGsvS2V5RXZlbnRHZGsuY3BwCi1zdGF0aWMgaW50
IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleUNvZGUpCi17Ci0gICAg
Ly8gRG9lcyBub3QgcHJvdmlkZSBhbGwga2V5IGNvZGVzLCBhbmQgZG9lcyBub3QgaGFuZGxlIGFs
bCBrZXlzLgotICAgIHN3aXRjaCAoa2V5Q29kZSkgewotICAgIGNhc2Uga0tleUNvZGVEZWw6Ci0g
ICAgICAgIHJldHVybiBWS19CQUNLOwotICAgIGNhc2Uga0tleUNvZGVUYWI6Ci0gICAgICAgIHJl
dHVybiBWS19UQUI7Ci0gICAgY2FzZSBrS2V5Q29kZUNsZWFyOgotICAgICAgICByZXR1cm4gVktf
Q0xFQVI7Ci0gICAgY2FzZSBrS2V5Q29kZURwYWRDZW50ZXI6Ci0gICAgY2FzZSBrS2V5Q29kZU5l
d2xpbmU6Ci0gICAgICAgIHJldHVybiBWS19SRVRVUk47Ci0gICAgY2FzZSBrS2V5Q29kZVNoaWZ0
TGVmdDoKLSAgICBjYXNlIGtLZXlDb2RlU2hpZnRSaWdodDoKLSAgICAgICAgcmV0dXJuIFZLX1NI
SUZUOwotICAgIC8vIGJhY2sgd2lsbCBzZXJ2ZSBhcyBlc2NhcGUsIGFsdGhvdWdoIHdlIHByb2Jh
Ymx5IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBpdAotICAgIGNhc2Uga0tleUNvZGVCYWNrOgotICAg
ICAgICByZXR1cm4gVktfRVNDQVBFOwotICAgIGNhc2Uga0tleUNvZGVTcGFjZToKLSAgICAgICAg
cmV0dXJuIFZLX1NQQUNFOwotICAgIGNhc2Uga0tleUNvZGVIb21lOgotICAgICAgICByZXR1cm4g
VktfSE9NRTsKLSAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6Ci0gICAgICAgIHJldHVybiBWS19M
RUZUOwotICAgIGNhc2Uga0tleUNvZGVEcGFkVXA6Ci0gICAgICAgIHJldHVybiBWS19VUDsKLSAg
ICBjYXNlIGtLZXlDb2RlRHBhZFJpZ2h0OgotICAgICAgICByZXR1cm4gVktfUklHSFQ7Ci0gICAg
Y2FzZSBrS2V5Q29kZURwYWREb3duOgotICAgICAgICByZXR1cm4gVktfRE9XTjsKLSAgICBjYXNl
IGtLZXlDb2RlMDoKLSAgICAgICAgcmV0dXJuIFZLXzA7Ci0gICAgY2FzZSBrS2V5Q29kZTE6Ci0g
ICAgICAgIHJldHVybiBWS18xOwotICAgIGNhc2Uga0tleUNvZGUyOgotICAgICAgICByZXR1cm4g
VktfMjsKLSAgICBjYXNlIGtLZXlDb2RlMzoKLSAgICAgICAgcmV0dXJuIFZLXzM7Ci0gICAgY2Fz
ZSBrS2V5Q29kZTQ6Ci0gICAgICAgIHJldHVybiBWS180OwotICAgIGNhc2Uga0tleUNvZGU1Ogot
ICAgICAgICByZXR1cm4gVktfNTsKLSAgICBjYXNlIGtLZXlDb2RlNjoKLSAgICAgICAgcmV0dXJu
IFZLXzY7Ci0gICAgY2FzZSBrS2V5Q29kZTc6Ci0gICAgICAgIHJldHVybiBWS183OwotICAgIGNh
c2Uga0tleUNvZGU4OgotICAgICAgICByZXR1cm4gVktfODsKLSAgICBjYXNlIGtLZXlDb2RlOToK
LSAgICAgICAgcmV0dXJuIFZLXzk7Ci0gICAgY2FzZSBrS2V5Q29kZUE6Ci0gICAgICAgIHJldHVy
biBWS19BOwotICAgIGNhc2Uga0tleUNvZGVCOgotICAgICAgICByZXR1cm4gVktfQjsKLSAgICBj
YXNlIGtLZXlDb2RlQzoKLSAgICAgICAgcmV0dXJuIFZLX0M7Ci0gICAgY2FzZSBrS2V5Q29kZUQ6
Ci0gICAgICAgIHJldHVybiBWS19EOwotICAgIGNhc2Uga0tleUNvZGVFOgotICAgICAgICByZXR1
cm4gVktfRTsKLSAgICBjYXNlIGtLZXlDb2RlRjoKLSAgICAgICAgcmV0dXJuIFZLX0Y7Ci0gICAg
Y2FzZSBrS2V5Q29kZUc6Ci0gICAgICAgIHJldHVybiBWS19HOwotICAgIGNhc2Uga0tleUNvZGVI
OgotICAgICAgICByZXR1cm4gVktfSDsKLSAgICBjYXNlIGtLZXlDb2RlSToKLSAgICAgICAgcmV0
dXJuIFZLX0k7Ci0gICAgY2FzZSBrS2V5Q29kZUo6Ci0gICAgICAgIHJldHVybiBWS19KOwotICAg
IGNhc2Uga0tleUNvZGVLOgotICAgICAgICByZXR1cm4gVktfSzsKLSAgICBjYXNlIGtLZXlDb2Rl
TDoKLSAgICAgICAgcmV0dXJuIFZLX0w7Ci0gICAgY2FzZSBrS2V5Q29kZU06Ci0gICAgICAgIHJl
dHVybiBWS19NOwotICAgIGNhc2Uga0tleUNvZGVOOgotICAgICAgICByZXR1cm4gVktfTjsKLSAg
ICBjYXNlIGtLZXlDb2RlTzoKLSAgICAgICAgcmV0dXJuIFZLX087Ci0gICAgY2FzZSBrS2V5Q29k
ZVA6Ci0gICAgICAgIHJldHVybiBWS19QOwotICAgIGNhc2Uga0tleUNvZGVROgotICAgICAgICBy
ZXR1cm4gVktfUTsKLSAgICBjYXNlIGtLZXlDb2RlUjoKLSAgICAgICAgcmV0dXJuIFZLX1I7Ci0g
ICAgY2FzZSBrS2V5Q29kZVM6Ci0gICAgICAgIHJldHVybiBWS19TOwotICAgIGNhc2Uga0tleUNv
ZGVUOgotICAgICAgICByZXR1cm4gVktfVDsKLSAgICBjYXNlIGtLZXlDb2RlVToKLSAgICAgICAg
cmV0dXJuIFZLX1U7Ci0gICAgY2FzZSBrS2V5Q29kZVY6Ci0gICAgICAgIHJldHVybiBWS19WOwot
ICAgIGNhc2Uga0tleUNvZGVXOgotICAgICAgICByZXR1cm4gVktfVzsKLSAgICBjYXNlIGtLZXlD
b2RlWDoKLSAgICAgICAgcmV0dXJuIFZLX1g7Ci0gICAgY2FzZSBrS2V5Q29kZVk6Ci0gICAgICAg
IHJldHVybiBWS19ZOwotICAgIGNhc2Uga0tleUNvZGVaOgotICAgICAgICByZXR1cm4gVktfWjsK
LSAgICAvLyBjb2xvbgotICAgIGNhc2Uga0tleUNvZGVTZW1pY29sb246Ci0gICAgICAgIHJldHVy
biBWS19PRU1fMTsKLSAgICBjYXNlIGtLZXlDb2RlQ29tbWE6Ci0gICAgICAgIHJldHVybiBWS19P
RU1fQ09NTUE7Ci0gICAgY2FzZSBrS2V5Q29kZU1pbnVzOgotICAgICAgICByZXR1cm4gVktfT0VN
X01JTlVTOwotICAgIGNhc2Uga0tleUNvZGVFcXVhbHM6Ci0gICAgICAgIHJldHVybiBWS19PRU1f
UExVUzsKLSAgICBjYXNlIGtLZXlDb2RlUGVyaW9kOgotICAgICAgICByZXR1cm4gVktfT0VNX1BF
UklPRDsKLSAgICBjYXNlIGtLZXlDb2RlU2xhc2g6Ci0gICAgICAgIHJldHVybiBWS19PRU1fMjsK
LSAgICAvLyBtYXliZSBub3QgdGhlIHJpZ2h0IGNob2ljZQotICAgIGNhc2Uga0tleUNvZGVMZWZ0
QnJhY2tldDoKLSAgICAgICAgcmV0dXJuIFZLX09FTV80OwotICAgIGNhc2Uga0tleUNvZGVCYWNr
c2xhc2g6Ci0gICAgICAgIHJldHVybiBWS19PRU1fNTsKLSAgICBjYXNlIGtLZXlDb2RlUmlnaHRC
cmFja2V0OgotICAgICAgICByZXR1cm4gVktfT0VNXzY7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JBbmRy
b2lkS2V5Q29kZShpbnQga2V5Q29kZSkKLXsKLSAgICAvLyBEb2VzIG5vdCByZXR1cm4gYWxsIG9m
IHRoZSBzYW1lIGtleSBpZGVudGlmaWVycywgYW5kCi0gICAgLy8gZG9lcyBub3QgaGFuZGxlIGFs
bCB0aGUga2V5cy4KLSAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAgICBjYXNlIGtLZXlDb2RlQ2xl
YXI6Ci0gICAgICAgIHJldHVybiAiQ2xlYXIiOwotICAgIGNhc2Uga0tleUNvZGVOZXdsaW5lOgot
ICAgIGNhc2Uga0tleUNvZGVEcGFkQ2VudGVyOgotICAgICAgICByZXR1cm4gIkVudGVyIjsKLSAg
ICBjYXNlIGtLZXlDb2RlSG9tZToKLSAgICAgICAgcmV0dXJuICJIb21lIjsKLSAgICBjYXNlIGtL
ZXlDb2RlRHBhZERvd246Ci0gICAgICAgIHJldHVybiAiRG93biI7Ci0gICAgY2FzZSBrS2V5Q29k
ZURwYWRMZWZ0OgotICAgICAgICByZXR1cm4gIkxlZnQiOwotICAgIGNhc2Uga0tleUNvZGVEcGFk
UmlnaHQ6Ci0gICAgICAgIHJldHVybiAiUmlnaHQiOwotICAgIGNhc2Uga0tleUNvZGVEcGFkVXA6
Ci0gICAgICAgIHJldHVybiAiVXAiOwotICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVj
b21lcyBVKzAwMDA3Ri4KLSAgICBjYXNlIGtLZXlDb2RlRGVsOgotICAgICAgICByZXR1cm4gIlUr
MDAwMDdGIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBjaGFyIHVwcGVyWzE2XTsKLSAgICAgICAg
c3ByaW50Zih1cHBlciwgIlUrJTA2WCIsIHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoa2V5Q29k
ZSkpOwotICAgICAgICByZXR1cm4gU3RyaW5nKHVwcGVyKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhcjMyIGMpIAotewotICAgIGlm
ICghYykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmIChjID4gMHhmZmZmKSB7Ci0g
ICAgICAgIFVDaGFyIGxlYWQgPSBVMTZfTEVBRChjKTsKLSAgICAgICAgVUNoYXIgdHJhaWwgPSBV
MTZfVFJBSUwoYyk7Ci0gICAgICAgIFVDaGFyIHV0ZjE2WzJdID0ge2xlYWQsIHRyYWlsfTsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1dGYxNiwgMik7Ci0gICAgfQotICAgIFVDaGFyIG4gPSAoVUNo
YXIpYzsKLSAgICByZXR1cm4gU3RyaW5nKCZuLCAxKTsKLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoaW50IGtleUNvZGUsIFVDaGFyMzIgdW5pY2hhciwK
LSAgICAgICAgaW50IHJlcGVhdENvdW50LCBib29sIGRvd24sIGJvb2wgY2FwLCBib29sIGFsdCwg
Ym9vbCBzeW0pCi0gICAgOiBtX3R5cGUoZG93biA/IEtleURvd24gOiBLZXlVcCkKLSAgICAsIG1f
dGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5pY2hhcikpCi0gICAgLCBtX3VubW9kaWZpZWRU
ZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyh1bmljaGFyKSkKLSAgICAsIG1fa2V5SWRlbnRpZmll
cihrZXlJZGVudGlmaWVyRm9yQW5kcm9pZEtleUNvZGUoa2V5Q29kZSkpCi0gICAgLCBtX2F1dG9S
ZXBlYXQocmVwZWF0Q291bnQgPiAwKQotICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUod2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSkKLSAgICAsIG1fbmF0aXZlVmlydHVhbEtl
eUNvZGUoa2V5Q29kZSkKLSAgICAsIG1faXNLZXlwYWQoZmFsc2UpCi0gICAgLCBtX3NoaWZ0S2V5
KGNhcCA/IFNoaWZ0S2V5IDogMCkKLSAgICAsIG1fY3RybEtleShzeW0gPyBDdHJsS2V5IDogMCkK
LSAgICAsIG1fYWx0S2V5KGFsdCA/IEFsdEtleSA6IDApCi0gICAgLCBtX21ldGFLZXkoMCkKLSAg
ICAvLyBhZGRlZCBmb3IgYW5kcm9pZAotICAgICwgbV9yZXBlYXRDb3VudChyZXBlYXRDb3VudCkK
LSAgICAsIG1fdW5pY2hhcih1bmljaGFyKQotewotICAgIC8vIENvcGllZCBmcm9tIHRoZSBtYWMg
cG9ydAotICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSAnXHInKSB7Ci0gICAgICAg
IG1fdGV4dCA9ICJcciI7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOwotICAgIH0K
LQotICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQotICAgICAgICBtX3RleHQgPSAiXHg4IjsKLSAg
ICBpZiAobV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCi0gICAgICAgIG1fdW5tb2RpZmllZFRl
eHQgPSAiXHg4IjsKLQotICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSA5KSB7Ci0g
ICAgICAgIG1fdGV4dCA9ICJceDkiOwotICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OSI7
Ci0gICAgfQotfQotCi1ib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2Nr
U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoYm9v
bCYgc2hpZnRLZXksIGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHNoaWZ0S2V5ID0gZmFsc2U7Ci0gICAgY3Ry
bEtleSA9IGZhbHNlOwotICAgIGFsdEtleSA9IGZhbHNlOwotICAgIG1ldGFLZXkgPSBmYWxzZTsK
LX0KLQotdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVu
dChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKLXsKLSAgICAvLyBD
b3BpZWQgd2l0aCBtb2RpZmljYXRpb24gZnJvbSB0aGUgbWFjIHBvcnQuCi0gICAgQVNTRVJUKG1f
dHlwZSA9PSBLZXlEb3duKTsKLSAgICBBU1NFUlQodHlwZSA9PSBSYXdLZXlEb3duIHx8IHR5cGUg
PT0gQ2hhcik7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICBpZiAoYmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gUmF3S2V5RG93bikg
ewotICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9
IFN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmlu
ZygpOwotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7Ci0gICAgfQotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0xhbmd1YWdlQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9MYW5ndWFnZUFuZHJvaWQuY3BwCShyZXZpc2lvbiA5MzU2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvTGFuZ3VhZ2VBbmRyb2lkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTGFuZ3VhZ2UuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGZ1
bmN0aW9uIGlzIHVzZWQgYnkgSmF2YXNjcmlwdCB0byBmaW5kIG91dCB3aGF0IHRoZSBkZWZhdWx0
IGxhbmd1YWdlCi0vLyB0aGUgdXNlciBoYXMgc2VsZWN0ZWQuIEl0IGlzIHVzZWQgYnkgdGhlIEpT
IG9iamVjdCBOYXZpZ2F0b3IubGFuZ3VhZ2UKLS8vIEkgZ3Vlc3MgdGhpcyBpbmZvcm1hdGlvbiBz
aG91bGQgYmUgbWFwcGVkIHdpdGggdGhlIEFjY2VwdC1MYW5ndWFnZTogSFRUUCBoZWFkZXIuCi1T
dHJpbmcgcGxhdGZvcm1EZWZhdWx0TGFuZ3VhZ2UoKQotewotICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6Y29tcHV0ZURlZmF1bHRMYW5ndWFnZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0cmlu
Z3NBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0xvY2FsaXplZFN0cmluZ3NBbmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0cmluZ3NBbmRyb2lkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBU
aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJ
bnNwZWN0RWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygiSW5zcGVjdCBFbGVtZW50Iik7
Ci19Ci0KLVN0cmluZyB1bmtub3duRmlsZVNpemVUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
KCJVbmtub3duIik7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2Fk
SW1hZ2VUb0Rpc2soKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5OZXdXaW5kb3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
Q29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRp
b0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRy
b2xzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdN
ZWRpYVBsYXkoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVzZSgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdNZWRpYU11dGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5O
ZXdXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2soKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1N0b3AoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0N1dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVTcGVsbGluZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdNZW51KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGlu
Z1BhbmVsKGJvb2wgc2hvdykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdGb250TWVudSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0l0YWxpYygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5n
RGlyZWN0aW9uTWVudSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0xlZnRUb1JpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TGl2
ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3Ry
aW5nKGNvbnN0IFN0cmluZyYgY29udHJvbE5hbWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xF
bGVtZW50SGVscFRleHQoY29uc3QgU3RyaW5nJiBjb250cm9sTmFtZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXplZE1l
ZGlhVGltZURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgY29udHJvbE5hbWUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBzZWFyY2hh
YmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgcmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKQotewot
ICAgIHJldHVybiBTdHJpbmcoIlJlc2V0Iik7Ci19Ci0KLVN0cmluZyBkZWZhdWx0RGV0YWlsc1N1
bW1hcnlUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJEZXRhaWxzIik7Ci19Ci0KLVN0cmlu
ZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmcoIlN1Ym1p
dCIpOwotfQotCi1TdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdG
b3JDaGVja2JveFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlv
bk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0K
LVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
VmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1p
c3NpbmdGb3JSYWRpb1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRh
dGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsK
LX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1h
aWxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoRm9yVVJMVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2VUb29Mb25nVGV4dChpbnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZs
b3dUZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dU
ZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaAko
cmV2aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRm
b3JtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwOSwgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgUGxhdGZvcm1CcmlkZ2VfaAotI2RlZmluZSBQbGF0Zm9ybUJyaWRnZV9oCi0KLSNp
bmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAibnBhcGkuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0vLyBWOCBiaW5kaW5ncyB1c2Ug
dGhlIEFSUkFZU0laRV9VTlNBRkUgbWFjcm8uIFRoaXMgbWFjcm8gd2FzIGNvcGllZAotLy8gZnJv
bSBodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy9iYXNlL2Jh
c2ljdHlwZXMuaAotLy8KLS8vIEFSUkFZU0laRV9VTlNBRkUgcGVyZm9ybXMgZXNzZW50aWFsbHkg
dGhlIHNhbWUgY2FsY3VsYXRpb24gYXMgYXJyYXlzaXplLAotLy8gYnV0IGNhbiBiZSB1c2VkIG9u
IGFub255bW91cyB0eXBlcyBvciB0eXBlcyBkZWZpbmVkIGluc2lkZQotLy8gZnVuY3Rpb25zLiBJ
dCdzIGxlc3Mgc2FmZSB0aGFuIGFycmF5c2l6ZSBhcyBpdCBhY2NlcHRzIHNvbWUKLS8vIChhbHRo
b3VnaCBub3QgYWxsKSBwb2ludGVycy4gVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIHVzZSBhcnJheXNp
emUKLS8vIHdoZW5ldmVyIHBvc3NpYmxlLgotLy8KLS8vIFRoZSBleHByZXNzaW9uIEFSUkFZU0la
RV9VTlNBRkUoYSkgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb2YgdHlwZQotLy8gc2l6ZV90
LgotLy8KLS8vIEFSUkFZU0laRV9VTlNBRkUgY2F0Y2hlcyBhIGZldyB0eXBlIGVycm9ycy4gSWYg
eW91IHNlZSBhIGNvbXBpbGVyIGVycm9yCi0vLwotLy8gICAid2FybmluZzogZGl2aXNpb24gYnkg
emVybyBpbiAuLi4iCi0vLwotLy8gd2hlbiB1c2luZyBBUlJBWVNJWkVfVU5TQUZFLCB5b3UgYXJl
ICh3cm9uZ2Z1bGx5KSBnaXZpbmcgaXQgYSBwb2ludGVyLgotLy8gWW91IHNob3VsZCBvbmx5IHVz
ZSBBUlJBWVNJWkVfVU5TQUZFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cy4KLS8vCi0v
LyBUaGUgZm9sbG93aW5nIGNvbW1lbnRzIGFyZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWls
cywgYW5kIGNhbgotLy8gYmUgaWdub3JlZCBieSB0aGUgdXNlcnMuCi0vLwotLy8gQVJSQVlTSVpF
X1VOU0FGRShhcnIpIHdvcmtzIGJ5IGluc3BlY3Rpbmcgc2l6ZW9mKGFycikgKHRoZSAjIG9mIGJ5
dGVzIGluCi0vLyB0aGUgYXJyYXkpIGFuZCBzaXplb2YoKihhcnIpKSAodGhlICMgb2YgYnl0ZXMg
aW4gb25lIGFycmF5Ci0vLyBlbGVtZW50KS4gSWYgdGhlIGZvcm1lciBpcyBkaXZpc2libGUgYnkg
dGhlIGxhdHRlciwgcGVyaGFwcyBhcnIgaXMKLS8vIGluZGVlZCBhbiBhcnJheSwgaW4gd2hpY2gg
Y2FzZSB0aGUgZGl2aXNpb24gcmVzdWx0IGlzIHRoZSAjIG9mCi0vLyBlbGVtZW50cyBpbiB0aGUg
YXJyYXkuIE90aGVyd2lzZSwgYXJyIGNhbm5vdCBwb3NzaWJseSBiZSBhbiBhcnJheSwKLS8vIGFu
ZCB3ZSBnZW5lcmF0ZSBhIGNvbXBpbGVyIGVycm9yIHRvIHByZXZlbnQgdGhlIGNvZGUgZnJvbQot
Ly8gY29tcGlsaW5nLgotLy8KLS8vIFNpbmNlIHRoZSBzaXplIG9mIGJvb2wgaXMgaW1wbGVtZW50
YXRpb24tZGVmaW5lZCwgd2UgbmVlZCB0byBjYXN0Ci0vLyAhKHNpemVvZihhKSAmIHNpemVvZigq
KGEpKSkgdG8gc2l6ZV90IGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZmluYWwKLS8vIHJlc3VsdCBo
YXMgdHlwZSBzaXplX3QuCi0vLwotLy8gVGhpcyBtYWNybyBpcyBub3QgcGVyZmVjdCBhcyBpdCB3
cm9uZ2Z1bGx5IGFjY2VwdHMgY2VydGFpbgotLy8gcG9pbnRlcnMsIG5hbWVseSB3aGVyZSB0aGUg
cG9pbnRlciBzaXplIGlzIGRpdmlzaWJsZSBieSB0aGUgcG9pbnRlZQotLy8gc2l6ZS4gU2luY2Ug
YWxsIG91ciBjb2RlIGhhcyB0byBnbyB0aHJvdWdoIGEgMzItYml0IGNvbXBpbGVyLAotLy8gd2hl
cmUgYSBwb2ludGVyIGlzIDQgYnl0ZXMsIHRoaXMgbWVhbnMgYWxsIHBvaW50ZXJzIHRvIGEgdHlw
ZSB3aG9zZQotLy8gc2l6ZSBpcyAzIG9yIGdyZWF0ZXIgdGhhbiA0IHdpbGwgYmUgKHJpZ2h0ZW91
c2x5KSByZWplY3RlZC4KLQotI2RlZmluZSBBUlJBWVNJWkVfVU5TQUZFKGEpIFwKLSAgKChzaXpl
b2YoYSkgLyBzaXplb2YoKihhKSkpIC8gXAotICAgc3RhdGljX2Nhc3Q8c2l6ZV90PighKHNpemVv
ZihhKSAlIHNpemVvZigqKGEpKSkpKQotCi0KLWNsYXNzIE5QT2JqZWN0OwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbFZpZXc7Ci1jbGFzcyBXaWRnZXQ7Ci0KLS8vIEFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8g
YW5zd2VyCi0vLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24uLi4KLS8vIFRo
aXMgaXMgdmVyeSBzaW1pbGFyIHRvIGNocm9taXVtL1BsYXRmb3JtQnJpZGdlIGFuZCB0aGUgdHdv
IGFyZSBsaWtlbHkgdG8gY29udmVyZ2UKLS8vIGluIHRoZSBmdXR1cmUuCi0vLwotLy8gVGhlIG1l
dGhvZHMgaW4gdGhpcyBjbGFzcyBhbGwgbmVlZCB0byByZWFjaCBhY3Jvc3MgYSBKTkkgbGF5ZXIg
dG8gdGhlIEphdmEgVk0KLS8vIHdoZXJlIHRoZSBlbWJlZGRlciBydW5zLiBUaGUgSk5JIG1hY2hp
bmVyeSBpcyBjdXJyZW50bHkgYWxsIGluIFdlYktpdC9hbmRyb2lkCi0vLyBidXQgdGhlIGxvbmcg
dGVybSBwbGFuIGlzIHRvIG1vdmUgdG8gdGhlIFdlYktpdCBBUEkgYW5kIHNoYXJlIHRoZSBicmlk
Z2UgYW5kIGl0cwotLy8gaW1wbGVtZW50YXRpb24gd2l0aCBDaHJvbWl1bS4gVGhlIEpOSSBtYWNo
aW5lcnkgd2lsbCB0aGVuIG1vdmUgb3V0c2lkZSBvZiBXZWJLaXQsCi0vLyBzaW1pbGFybHkgdG8g
aG93IENocm9taXVtJ3MgSVBDIGxheWVyIGxpdmVzIG91dHNpZGUgb2YgV2ViS2l0LgotY2xhc3Mg
UGxhdGZvcm1CcmlkZ2UgewotcHVibGljOgotICAgIC8vIEtleUdlbmVyYXRvcgotICAgIHN0YXRp
YyBXVEY6OlZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEtleVN0cmVuZ3RoTGlzdCgpOwotICAg
IHN0YXRpYyBTdHJpbmcgZ2V0U2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYpOwotICAgIC8v
IENvb2tpZXMKLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYpOwot
ICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFibGVkKCk7Ci0gICAgLy8gUGx1Z2luCi0gICAgc3Rh
dGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOwotCi0gICAgc3Rh
dGljIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oU2Nyb2xsVmlldyosIGludCB4LCBpbnQgeSk7Ci0K
LSAgICAvLyBMYW5ndWFnZQotICAgIHN0YXRpYyBTdHJpbmcgY29tcHV0ZURlZmF1bHRMYW5ndWFn
ZSgpOwotICAgIC8vIE1lbW9yeSBkZXRhaWxzIGZvciBWOCBHQwotICAgIHN0YXRpYyBpbnQgbG93
TWVtb3J5VXNhZ2VNQigpOwotICAgIHN0YXRpYyBpbnQgaGlnaE1lbW9yeVVzYWdlTUIoKTsKLSAg
ICBzdGF0aWMgaW50IG1lbW9yeVVzYWdlTUIoKTsKLSAgICBzdGF0aWMgaW50IGFjdHVhbE1lbW9y
eVVzYWdlTUIoKTsKLX07Ci0KLX0KLSNlbmRpZiAvLyBQbGF0Zm9ybUJyaWRnZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtVG91Y2hFdmVudEFuZHJvaWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZv
cm1Ub3VjaEV2ZW50QW5kcm9pZC5jcHAJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybVRvdWNoRXZlbnRBbmRyb2lkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Ub3VjaEV2ZW50LmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IFRoZXNlIHZhbHVlcyBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhvc2UgZGVmaW5lZCBp
biB0aGUgYW5kcm9pZC52aWV3LktleUV2ZW50IGNsYXNzIGZyb20gdGhlIEFuZHJvaWQgU0RLLgot
ZW51bSBBbmRyb2lkTWV0YUtleVN0YXRlIHsKLSAgICBNRVRBX1NISUZUX09OID0gMHgwMSwKLSAg
ICBNRVRBX0FMVF9PTiA9IDB4MDIsCi0gICAgTUVUQV9TWU1fT04gPSAweDA0Ci19OwotCi1QbGF0
Zm9ybVRvdWNoRXZlbnQ6OlBsYXRmb3JtVG91Y2hFdmVudChjb25zdCBWZWN0b3I8aW50PiYgaWRz
LCBjb25zdCBWZWN0b3I8SW50UG9pbnQ+JiB3aW5kb3dQb2ludHMsIFRvdWNoRXZlbnRUeXBlIHR5
cGUsIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlPiYgc3RhdGVzLCBpbnQg
bWV0YVN0YXRlKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX21ldGFLZXkoZmFsc2UpCi0g
ICAgLCBtX3RpbWVzdGFtcChXVEY6OmN1cnJlbnRUaW1lKCkpCi17Ci0gICAgbV90b3VjaFBvaW50
cy5yZXNlcnZlQ2FwYWNpdHkod2luZG93UG9pbnRzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBjID0gMDsgYyA8IHdpbmRvd1BvaW50cy5zaXplKCk7IGMrKykKLSAgICAgICAgbV90b3VjaFBv
aW50cy5hcHBlbmQoUGxhdGZvcm1Ub3VjaFBvaW50KGlkc1tjXSwgd2luZG93UG9pbnRzW2NdLCBz
dGF0ZXNbY10pKTsKLQotICAgIG1fYWx0S2V5ID0gbWV0YVN0YXRlICYgTUVUQV9BTFRfT047Ci0g
ICAgbV9zaGlmdEtleSA9IG1ldGFTdGF0ZSAmIE1FVEFfU0hJRlRfT047Ci0gICAgbV9jdHJsS2V5
ID0gbWV0YVN0YXRlICYgTUVUQV9TWU1fT047Ci19Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtVG91Y2hQb2ludEFuZHJvaWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1U
b3VjaFBvaW50QW5kcm9pZC5jcHAJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybVRvdWNoUG9pbnRBbmRyb2lkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lk
IE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Ub3VjaFBvaW50LmgiCi0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsYXRmb3JtVG91Y2hQb2ludDo6UGxhdGZvcm1Ub3VjaFBv
aW50KHVuc2lnbmVkIGlkLCBjb25zdCBJbnRQb2ludCYgd2luZG93UG9zLCBTdGF0ZSBzdGF0ZSkK
LSAgICA6IG1faWQoaWQpCi0gICAgLCBtX3N0YXRlKHN0YXRlKQotICAgICwgbV9zY3JlZW5Qb3Mo
d2luZG93UG9zKQotICAgICwgbV9wb3Mod2luZG93UG9zKSB7IH0KLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVB
bmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAg
QEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRh
dGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQg
MjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE5vdyB3ZSBoYW5kbGUg
YWxsIG9mIHRoaXMgaW4gV2ViVmlld0NvcmUuY3BwLgotUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9w
dXBNZW51Q2xpZW50KiBtZW51TGlzdCkKLSAgICA6IG1fcG9wdXBDbGllbnQobWVudUxpc3QpCi17
Ci19Ci0KLVBvcHVwTWVudTo6flBvcHVwTWVudSgpCi17Ci19Ci0KLXZvaWQgUG9wdXBNZW51Ojpz
aG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpCi17Ci19Ci0KLXZvaWQgUG9wdXBN
ZW51OjpoaWRlKCkKLXsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KCkg
Ci17Ci19Ci0KLWJvb2wgUG9wdXBNZW51OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVt
ZUFuZHJvaWQuY3BwCShyZXZpc2lvbiA5MzU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1l
QW5kcm9pZC5oIgotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5o
IgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlJlbmRlclNraW5BbmRyb2lkLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2tpbkJ1
dHRvbi5oIgotI2luY2x1ZGUgIlJlbmRlclNraW5Db21iby5oIgotI2luY2x1ZGUgIlJlbmRlclNr
aW5SYWRpby5oIgotI2luY2x1ZGUgIlNrQ2FudmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gQWRkIGEgY29uc3RhbnQgYW1vdW50IG9mIHBhZGRpbmcgdG8gdGhlIHRleHRzaXplIHRv
IGdldCB0aGUgZmluYWwgaGVpZ2h0Ci0vLyBvZiBidXR0b25zLCBzbyB0aGF0IG91ciBidXR0b24g
aW1hZ2VzIGFyZSBsYXJnZSBlbm91Z2ggdG8gcHJvcGVybHkgZml0Ci0vLyB0aGUgdGV4dC4KLWNv
bnN0IGludCBidXR0b25QYWRkaW5nID0gMTg7Ci0KLS8vIEFkZCBwYWRkaW5nIHRvIHRoZSBmb250
U2l6ZSBvZiBMaXN0Qm94ZXMgdG8gZ2V0IHRoZWlyIG1heGltdW0gc2l6ZXMuCi0vLyBMaXN0Ym94
ZXMgb2Z0ZW4gaGF2ZSBhIHNwZWNpZmllZCBzaXplLiAgU2luY2Ugd2UgY2hhbmdlIHRoZW0gaW50
bwotLy8gZHJvcGRvd25zLCB3ZSB3YW50IGEgbXVjaCBzbWFsbGVyIGhlaWdodCwgd2hpY2ggZW5j
b21wYXNzZXMgdGhlIHRleHQuCi1jb25zdCBpbnQgbGlzdGJveFBhZGRpbmcgPSA1OwotCi0vLyBU
aGlzIGlzIHRoZSBjb2xvciBvZiBzZWxlY3Rpb24gaW4gYSB0ZXh0ZmllbGQuICBJdCB3YXMgb2J0
YWluZWQgYnkgY2hlY2tpbmcKLS8vIHRoZSBjb2xvciBvZiBzZWxlY3Rpb24gaW4gVGV4dFZpZXdz
IGluIHRoZSBzeXN0ZW0uCi1jb25zdCBSR0JBMzIgc2VsZWN0aW9uQ29sb3IgPSBtYWtlUkdCKDI1
NSwgMTQ2LCAwKTsKLQotc3RhdGljIFNrQ2FudmFzKiBnZXRDYW52YXNGcm9tSW5mbyhjb25zdCBQ
YWludEluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPm1DYW52YXM7Ci19Ci0KLVJlbmRlclRoZW1lKiB0aGVtZSgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZW5kZXJUaGVtZUFuZHJvaWQsIGFuZHJvaWRUaGVtZSwgKCkpOwotICAg
IHJldHVybiAmYW5kcm9pZFRoZW1lOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRo
ZW1lKiBydCA9IFJlbmRlclRoZW1lQW5kcm9pZDo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOwotICAg
IHJldHVybiBydDsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVBbmRy
b2lkOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVBbmRy
b2lkKCkpOwotfQotCi1SZW5kZXJUaGVtZUFuZHJvaWQ6OlJlbmRlclRoZW1lQW5kcm9pZCgpCi17
Ci19Ci0KLVJlbmRlclRoZW1lQW5kcm9pZDo6flJlbmRlclRoZW1lQW5kcm9pZCgpCi17Ci19Ci0K
LXZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjpjbG9zZSgpCi17Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVBbmRyb2lkOjpzdGF0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmosIENvbnRyb2xTdGF0ZSBz
dGF0ZSkgY29uc3QKLXsKLSAgICBpZiAoQ2hlY2tlZFN0YXRlID09IHN0YXRlKSB7Ci0gICAgICAg
IG9iai0+cmVwYWludCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3Ioc2VsZWN0
aW9uQ29sb3IpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnQpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q29sb3I6OmJsYWNrOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xv
cjo6YmxhY2s7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1UZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcihDb2xvcjo6dHJh
bnNwYXJlbnQpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZl
TGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENv
bG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6
cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAot
ewotICAgIHJldHVybiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwotfQotCi1Db2xvciBSZW5k
ZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcihDb2xvcjo6
dHJhbnNwYXJlbnQpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVBbmRyb2lkOjpiYXNlbGluZVBvc2l0
aW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqKSBjb25zdAotewotICAgIC8vIEZyb20gdGhlIGRl
c2NyaXB0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaW4gUmVuZGVyVGhlbWUuaDoKLSAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCi0gICAgLy8gcG9zaXRpb24g
Y2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCi0gICAgLy8gY29udHJvbHMgdGhh
dCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgLy8KLSAgICAvLyBPdXIgY2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBuZWVkIHRvIGJlIG9mZnNldCB0byBsaW5lIHVwIHByb3Blcmx5LgotICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvYmopIC0gMjsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUFuZHJvaWQ6OmFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAotewotICAgIC8vIEN1dCBvdXQgdGhlIGludHJpbnNpYyBtYXJnaW5zIGNvbXBsZXRl
bHkgaWYgd2UgZW5kIHVwIHVzaW5nIGEgc21hbGwgZm9udCBzaXplCi0gICAgaWYgKHN0eWxlLT5m
b250U2l6ZSgpIDwgMTEpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBJbnRyaW5zaWMg
bWFyZ2luIHZhbHVlLgotICAgIGNvbnN0IGludCBtID0gMjsKLSAgICAKLSAgICAvLyBGSVhNRTog
VXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdp
ZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkK
LSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtLCBGaXhlZCkpOwotICAg
ICAgICBpZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxl
LT5zZXRNYXJnaW5SaWdodChMZW5ndGgobSwgRml4ZWQpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCku
cXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Ub3AoTGVuZ3RoKG0sIEZpeGVk
KSk7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKLSAgICAgICAg
ICAgIHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKG0sIEZpeGVkKSk7Ci0gICAgfQotfQot
Ci1ib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBl
YXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFBhZGRpbmcgY29kZSBpcyB0YWtl
biBmcm9tIFJlbmRlclRoZW1lU2FmYXJpLmNwcAotICAgIC8vIEl0IG1ha2VzIHN1cmUgd2UgaGF2
ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBidXR0b24gdGV4dC4KLSAgICBjb25zdCBpbnQgcGFkZGlu
ZyA9IDg7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc3R5bGUtPmZvbnRTaXplKCkgKyBidXR0b25Q
YWRkaW5nLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRDaGVj
a2JveChSZW5kZXJPYmplY3QqIG9iaiwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIFJlbmRlclNraW5SYWRpbzo6RHJhdyhnZXRDYW52YXNGcm9tSW5m
byhpbmZvKSwgb2JqLT5ub2RlKCksIHJlY3QsIHRydWUpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2Jq
LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8g
SWYgaXQgaXMgYSBkaXNhYmxlZCBidXR0b24sIHNpbXBseSBwYWludCBpdCB0byB0aGUgbWFzdGVy
IHBpY3R1cmUuCi0gICAgTm9kZSogbm9kZSA9IG9iai0+bm9kZSgpOwotICAgIEVsZW1lbnQqIGZv
cm1Db250cm9sRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBpZiAo
Zm9ybUNvbnRyb2xFbGVtZW50ICYmICFmb3JtQ29udHJvbEVsZW1lbnQtPmlzRW5hYmxlZEZvcm1D
b250cm9sKCkpCi0gICAgICAgIFJlbmRlclNraW5CdXR0b246OkRyYXcoZ2V0Q2FudmFzRnJvbUlu
Zm8oaW5mbyksIHJlY3QsIFJlbmRlclNraW5BbmRyb2lkOjprRGlzYWJsZWQpOwotICAgIGVsc2UK
LSAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gdGhlIHBs
YXRmb3JtIGNvbnRleHQuCi0gICAgICAgIGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PnN0b3JlQnV0dG9uSW5mbyhub2RlLCByZWN0KTsKLQotICAgIC8vIFdlIGFsd2F5cyByZXR1cm4g
ZmFsc2Ugc28gd2UgZG8gbm90IHJlcXVlc3QgdG8gYmUgcmVkcmF3bi4KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFJhZGlvKFJlbmRlck9iamVj
dCogb2JqLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgUmVuZGVyU2tpblJhZGlvOjpEcmF3KGdldENhbnZhc0Zyb21JbmZvKGluZm8pLCBvYmotPm5v
ZGUoKSwgcmVjdCwgZmFsc2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUFuZHJvaWQ6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxOSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aCgxOSwgRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBp
cyB0aGUgc2FtZSBhcyBjaGVja2JveGVzLgotICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3QK
LXsKLSAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUFuZHJvaWQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKQotewotICAgIHJldHVybiB0cnVlOyAgICAKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRkSW50
cmluc2ljTWFyZ2lucyhzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWlu
dFRleHRBcmVhKFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFvYmotPmlzTGlzdEJveCgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHBhaW50Q29tYm8ob2JqLCBpbmZvLCByZWN0KTsKLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBvYmotPnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlKQotICAgICAgICBz
dHlsZS0+c2V0Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBOb2RlKiBub2RlID0gb2Jq
LT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2VsZWN0VGFnKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKTsKLSAgICAv
LyBUaGUgZmlyc3QgaXRlbSBtYXkgYmUgdmlzaWJsZS4gIE1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBk
cmF3LgotICAgIC8vIElmIGl0IGhhcyBhIHN0eWxlLCBpdCBvdmVycmlkZXMgdGhlIFJlbmRlckxp
c3RCb3gncyBzdHlsZSwgc28gd2UKLSAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGFyZSBz
ZXQgdG8gdHJhbnNwYXJlbnQuCi0gICAgbm9kZSA9IHNlbGVjdC0+aXRlbSgwKTsKLSAgICBpZiAo
bm9kZSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKLSAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogcmVu
ZGVyU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJTdHls
ZSkKLSAgICAgICAgICAgICAgICByZW5kZXJTdHlsZS0+c2V0Q29sb3IoQ29sb3I6OnRyYW5zcGFy
ZW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBzZWxlY3RlZCBv
cHRpb24sIGFuZCBkcmF3IGl0cyB0ZXh0LgotICAgIC8vIEZJWE1FOiBJbiBhIGxhdGVyIGNoYW5n
ZSwgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBpdGVtIHNlbGVjdGVkLAotICAgIC8vIGRyYXcg
YSBzdHJpbmcgdGhhdCBzYXlzICJYIGl0ZW1zIiBsaWtlIGlQaG9uZSBTYWZhcmkgZG9lcwotICAg
IGludCBpbmRleCA9IHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgpOwotICAgIG5vZGUgPSBzZWxlY3Qt
Pml0ZW0oaW5kZXgpOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9wdGlvblRhZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4obm9kZSk7Ci0g
ICAgU3RyaW5nIGxhYmVsID0gb3B0aW9uLT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVs
KCk7Ci0gICAgU2tSZWN0IHIocmVjdCk7Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50
LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICBwYWludC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6
a1VURjE2X1RleHRFbmNvZGluZyk7Ci0gICAgLy8gVmFsdWVzIGZvciB0ZXh0IHNpemUgYW5kIHBv
c2l0aW9uaW5nIGRldGVybWluZWQgYnkgdHJpYWwgYW5kIGVycm9yCi0gICAgcGFpbnQuc2V0VGV4
dFNpemUoci5oZWlnaHQoKSAtIFNrSW50VG9TY2FsYXIoNikpOwotCi0gICAgU2tDYW52YXMqIGNh
bnZhcyA9IGdldENhbnZhc0Zyb21JbmZvKGluZm8pOwotICAgIGludCBzYXZlQ291bnQgPSBjYW52
YXMtPnNhdmUoKTsKLSAgICByLmZSaWdodCAtPSBTa0ludFRvU2NhbGFyKFJlbmRlclNraW5Db21i
bzo6ZXh0cmFXaWR0aCgpKTsKLSAgICBjYW52YXMtPmNsaXBSZWN0KHIpOwotICAgIGNhbnZhcy0+
ZHJhd1RleHQobGFiZWwuY2hhcmFjdGVycygpLCBsYWJlbC5sZW5ndGgoKSA8PCAxLAotICAgICAg
ICAgICAgIHIuZkxlZnQgKyBTa0ludFRvU2NhbGFyKDUpLCByLmZCb3R0b20gLSBTa0ludFRvU2Nh
bGFyKDUpLCBwYWludCk7Ci0gICAgY2FudmFzLT5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOwot
Ci0gICAgcmV0dXJuIHRydWU7ICAgIAotfQotCi12b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCi17Ci0gICAgcmV0dXJuIHRydWU7
ICAgIAotfQotCi12b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TGlzdGJveFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5Db21ibzo6ZXh0cmFX
aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNYXhIZWlnaHQoTGVuZ3RoKHN0eWxlLT5m
b250U2l6ZSgpICsgbGlzdGJveFBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgLy8gTWFrZSB3ZWJraXQg
ZHJhdyBpbnZpc2libGUsIHNpbmNlIGl0IHdpbGwgc2ltcGx5IGRyYXcgdGhlIGZpcnN0IGVsZW1l
bnQKLSAgICBzdHlsZS0+c2V0Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBhZGRJbnRy
aW5zaWNNYXJnaW5zKHN0eWxlKTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0TWVudUxpc3RTdHls
ZUNvbW1vbihSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpCi17Ci0gICAgLy8gQWRkZWQg
dG8gbWFrZSByb29tIGZvciBvdXIgYXJyb3cuCi0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChM
ZW5ndGgoUmVuZGVyU2tpbkNvbWJvOjpleHRyYVdpZHRoKCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0TWVu
dUxpc3RTdHlsZUNvbW1vbihzdHlsZSwgZSk7Ci0gICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHls
ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludENvbWJvKFJlbmRlck9iamVj
dCogb2JqLCBjb25zdCBQYWludEluZm8mIGluZm8sICBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmIChvYmotPnN0eWxlKCkgJiYgIW9iai0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCku
YWxwaGEoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJlbmRlclNraW5Db21i
bzo6RHJhdyhnZXRDYW52YXNGcm9tSW5mbyhpbmZvKSwgb2JqLT5ub2RlKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUFuZHJvaWQ6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkgCi17IAotICAgIHJldHVybiBwYWludENv
bWJvKG9iaiwgaW5mbywgcmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8gQ29waWVkIGZyb20gUmVuZGVyVGhlbWVT
YWZhcmkuCi0gICAgY29uc3QgZmxvYXQgYmFzZUZvbnRTaXplID0gMTEuMGY7Ci0gICAgY29uc3Qg
aW50IGJhc2VCb3JkZXJSYWRpdXMgPSA1OwotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5m
b250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwotICAgIAotICAgIHN0eWxlLT5yZXNldFBhZGRpbmco
KTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNpemUoaW50KGJhc2VCb3JkZXJSYWRp
dXMgKyBmb250U2NhbGUgLSAxKSwgaW50KGJhc2VCb3JkZXJSYWRpdXMgKyBmb250U2NhbGUgLSAx
KSkpOyAvLyBGSVhNRTogUm91bmQgdXA/Ci0KLSAgICBjb25zdCBpbnQgbWluSGVpZ2h0ID0gMTU7
Ci0gICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkpOwotICAg
IAotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKLSAgICAvLyBGb3VuZCB0aGVzZSBwYWRkaW5nIG51bWJlcnMgYnkgdHJpYWwgYW5kIGVy
cm9yLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gNDsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgYWRqdXN0TWVudUxpc3RTdHlsZUNvbW1vbihzdHls
ZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludE1lbnVMaXN0QnV0dG9u
KFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpIAotewotICAgIHJldHVybiBwYWludENvbWJvKG9iaiwgaW5mbywgcmVjdCk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlLT5vcGFjaXR5KCkgPiAwCi0g
ICAgICAgICYmIHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgCi0gICAgICAgICYmIHN0eWxlLT5hcHBl
YXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAKLSAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2Uo
KSAhPSBTZWFyY2hGaWVsZFBhcnQgCi0gICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0g
VGV4dEFyZWFQYXJ0IAotICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IENoZWNrYm94
UGFydAotICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFJhZGlvUGFydAotICAgICAg
ICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFB1c2hCdXR0b25QYXJ0Ci0gICAgICAgICYmIHN0
eWxlLT5hcHBlYXJhbmNlKCkgIT0gU3F1YXJlQnV0dG9uUGFydAotICAgICAgICAmJiBzdHlsZS0+
YXBwZWFyYW5jZSgpICE9IEJ1dHRvblBhcnQKLSAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2Uo
KSAhPSBCdXR0b25CZXZlbFBhcnQKLSAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBN
ZW51bGlzdFBhcnQKLSAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1
dHRvblBhcnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuaAkocmV2
aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRo
ZW1lQW5kcm9pZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBSZW5kZXJUaGVtZUFuZHJvaWRfaAotI2RlZmluZSBSZW5kZXJUaGVtZUFuZHJvaWRfaAot
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBSZW5kZXJTa2luQnV0dG9uOwotY2xhc3MgUmVuZGVyU2tpblJhZGlvOwotY2xhc3MgUmVuZGVy
U2tpbkNvbWJvOwotCi1zdHJ1Y3QgVGhlbWVEYXRhIHsKLSAgICBUaGVtZURhdGEoKQotICAgICAg
ICA6IG1fcGFydCgwKQotICAgICAgICAsIG1fc3RhdGUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbV9wYXJ0OwotICAgIHVuc2lnbmVkIG1fc3RhdGU7Ci19OwotCi1jbGFzcyBSZW5k
ZXJUaGVtZUFuZHJvaWQgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKLSAgICB+UmVuZGVyVGhlbWVBbmRy
b2lkKCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChSZW5kZXJPYmplY3Qq
LCBDb250cm9sU3RhdGUpIGNvbnN0OwotICAgICAgIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2lu
ZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZS0+YWZmZWN0ZWRCeUhvdmVyUnVs
ZXMoKTsgfQotCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChp
bnQsIFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IHt9Ci0KLSAgICB2aXJ0dWFsIGlu
dCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIAotICAgIGJvb2wgcGFpbnRDb21ibyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCAgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdExpc3Rib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToK
LSAgICBSZW5kZXJUaGVtZUFuZHJvaWQoKTsKLSAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMo
UmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBib29sIHN1cHBv
cnRzRm9jdXMoQ29udHJvbFBhcnQpOwotICAgIGZyaWVuZCBSZW5kZXJUaGVtZSogdGhlbWUoKTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lQW5k
cm9pZF9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU1NMS2V5R2Vu
ZXJhdG9yQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9TU0xLZXlHZW5lcmF0b3JBbmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NTTEtleUdlbmVyYXRvckFuZHJvaWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSwg
VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXpl
cyhWZWN0b3I8U3RyaW5nPiYga2V5cykKLXsKLSAgICBrZXlzID0gUGxhdGZvcm1CcmlkZ2U6Omdl
dFN1cHBvcnRlZEtleVN0cmVuZ3RoTGlzdCgpOwotfQotCi1TdHJpbmcgc2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5n
ZSwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Z2V0U2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGluZGV4LCBjaGFsbGVuZ2UsIHVybCk7Ci19
Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9p
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3Jl
ZW5BbmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1NjcmVlbkFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIExPR19UQUcgIldlYkNvcmUiCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JlZW4uaCIKLQotLy8gVGhpcyBpbmNsdWRlIG11c3Qg
Y29tZSBmaXJzdC4KLSN1bmRlZiBMT0cgLy8gRklYTUU6IFN0aWxsIGhhdmUgdG8gZG8gdGhpcyB0
byBnZXQgdGhlIGxvZyB0byBzaG93IHVwCi0jaW5jbHVkZSAidXRpbHMvTG9nLmgiCi0KLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRlICJ1aS9EaXNw
bGF5SW5mby5oIgotI2luY2x1ZGUgInVpL1BpeGVsRm9ybWF0LmgiCi0jaW5jbHVkZSAidWkvU3Vy
ZmFjZUNvbXBvc2VyQ2xpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW50IHNjcmVl
bkRlcHRoKFdpZGdldCogcGFnZSkKLXsKLSAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOwot
ICAgIGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9p
ZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7Ci0gICAgcmV0dXJuIGluZm8ucGl4ZWxGb3JtYXRJbmZv
LmJpdHNQZXJQaXhlbDsKLX0KLQotaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCog
cGFnZSkKLXsKLSAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOwotICAgIGFuZHJvaWQ6OlN1
cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDAp
LCAmaW5mbyk7Ci0gICAgcmV0dXJuIGluZm8ucGl4ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbDsK
LX0KLQotYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiBwYWdlKQotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2lmZGVmIEFORFJPSURfT1JJRU5UQVRJT05fU1VQUE9SVAotaW50IFNj
cmVlbjo6b3JpZW50YXRpb24oKSBjb25zdAotewotICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGlu
Zm87Ci0gICAgYW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbygK
LSAgICAgICAgICAgIGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOwotICAgIC8vIGdldERp
c3BsYXlJbmZvIHJldHVybnMgYW4gZW51bSBkZXNjcmliaW5nIHRoZSBvcmllbnRhdGlvbi4gTWFw
IHRoZSBlbnVtCi0gICAgLy8gdG8gdGhlIHZhbHVlcyBkZXNjcmliZWQgaGVyZQotICAgIC8vICho
dHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0FwcGxlQXBwbGljYXRpb25z
L1JlZmVyZW5jZS9TYWZhcmlXZWJDb250ZW50L0hhbmRsaW5nRXZlbnRzL2NoYXB0ZXJfOF9zZWN0
aW9uXzYuaHRtbCkKLSAgICBzd2l0Y2ggKGluZm8ub3JpZW50YXRpb24pIHsKLSAgICBjYXNlIGFu
ZHJvaWQ6OklTdXJmYWNlQ29tcG9zZXI6OmVPcmllbnRhdGlvbkRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZhY2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9u
OTA6Ci0gICAgICAgIHJldHVybiA5MDsKLSAgICBjYXNlIGFuZHJvaWQ6OklTdXJmYWNlQ29tcG9z
ZXI6OmVPcmllbnRhdGlvbjE4MDoKLSAgICAgICAgcmV0dXJuIDE4MDsKLSAgICBjYXNlIGFuZHJv
aWQ6OklTdXJmYWNlQ29tcG9zZXI6OmVPcmllbnRhdGlvbjI3MDoKLSAgICAgICAgcmV0dXJuIC05
MDsKLSAgICBkZWZhdWx0OgotICAgICAgICBMT0dFKCJCYWQgb3JpZW50YXRpb24gcmV0dXJuZWQg
ZnJvbSBnZXREaXNwbGF5SW5kbyAlZCIsCi0gICAgICAgICAgICAgICAgaW5mby5vcmllbnRhdGlv
bik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBUaGUgb25seSBw
bGFjZSBJIGhhdmUgc2VlbiB0aGVzZSB2YWx1ZXMgdXNlZCBpcwotLy8gcG9zaXRpb25pbmcgcG9w
dXAgd2luZG93cy4gSWYgd2Ugc3VwcG9ydCBtdWx0aXBsZSB3aW5kb3dzCi0vLyB0aGV5IHdpbGwg
YmUgbW9zdCBsaWtlbHkgZnVsbCBzY3JlZW4uIFRoZXJlZm9yZSwKLS8vIHRoZSBhY2N1cmFjeSBv
ZiB0aGVzZSBudW1iZXIgYXJlIG5vdCB0b28gaW1wb3J0YW50LgotRmxvYXRSZWN0IHNjcmVlblJl
Y3QoV2lkZ2V0KiBwYWdlKQotewotICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87Ci0gICAg
YW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpE
aXNwbGF5SUQoMCksICZpbmZvKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KDAuMCwgMC4wLCBpbmZv
LncsIGluZm8uaCk7Ci19Ci0KLS8vIFNpbWlsYXIgc2NyZWVuUmVjdCwgdGhpcyBmdW5jdGlvbiBp
cyBjb21tb25seSB1c2VkIGJ5IGphdmFzY3JpcHRzCi0vLyB0byBwb3NpdGlvbiBhbmQgcmVzaXpl
IHdpbmRvd3MgKHVzdWFsbHkgdG8gZnVsbCBzY3JlZW4pLiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFp
bGFibGVSZWN0KFdpZGdldCopCi17Ci0gICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsKLSAg
ICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKGFuZHJvaWQ6
OkRpc3BsYXlJRCgwKSwgJmluZm8pOwotICAgIHJldHVybiBGbG9hdFJlY3QoMC4wLCAwLjAsIGlu
Zm8udywgaW5mby5oKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5j
cHAJKHJldmlzaW9uIDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9T
Y3JvbGxWaWV3QW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotI2RlZmluZSBMT0dfVEFHICJXZWJDb3JlIgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNrUmVnaW9uLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVZpZXdC
cmlkZ2UuaCIKLSNpbmNsdWRlICJXZWJWaWV3Q29yZS5oIgotCi0vKgotICAgIFRoaXMgY2xhc3Mg
aW1wbGVtZW50YXRpb24gZG9lcyBOT1QgYWN0dWFsbHkgZW11bGF0ZSB0aGUgUXQgU2Nyb2xsVmll
dy4KLSAgICBJdCBkb2VzIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBraHRtbCB3aWxs
IHVzZSB0byBpbnRlcmFjdCB3aXRoCi0gICAgV2ViS2l0J3MgV2ViRnJhbWVWaWV3IGRvY3VtZW50
VmlldyBhbmQgb3VyIE5TU2Nyb2xsVmlldyBzdWJjbGFzcy4KLQotICAgIFNjcm9sbFZpZXcncyB2
aWV3IGlzIGEgTlNTY3JvbGxWaWV3IChvciBzdWJjbGFzcyBvZiBOU1Njcm9sbFZpZXcpCi0gICAg
aW4gbW9zdCBjYXNlcy4gVGhhdCBzY3JvbGx2aWV3IGlzIGEgc3VidmlldyBvZiBhbgotICAgIFdl
YkNvcmVGcmFtZVZpZXcuIFRoZSBXZWJDb3JlRnJhbWVWaWV3J3MgZG9jdW1lbnRWaWV3IHdpbGwg
YWxzbyBiZQotICAgIHRoZSBzY3JvbGwgdmlldydzIGRvY3VtZW50Vmlldy4KLSAgICAKLSAgICBU
aGUgV2ViQ29yZUZyYW1lVmlldydzIHNpemUgaXMgdGhlIGZyYW1lIHNpemUuICBUaGUgV2ViQ29y
ZUZyYW1lVmlldydzIGRvY3VtZW50VmlldwotICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBmcmFtZSBj
b250ZW50IHNpemUuICBUaGUgc2Nyb2xsdmlldyBpdHNlbGYgaXMgYXV0b3NpemVkIHRvIHRoZQot
ICAgIFdlYkNvcmVGcmFtZVZpZXcncyBzaXplIChzZWUgV2lkZ2V0OjpyZXNpemUpLgotKi8KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJs
ZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0Ci17Ci0gICAgSW50UmVj
dCByZWN0ID0gcGxhdGZvcm1XaWRnZXQoKS0+Z2V0Qm91bmRzKCk7Ci0gICAgLy8gVGhpcyBtYWtl
cyBzdWJmcmFtZXMgZHJhdyBjb3JyZWN0bHksIHNpbmNlIHN1YmZyYW1lcyBjYW5ub3Qgc2Nyb2xs
LgotICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50U2l6ZSBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
Y29udGVudHNTaXplOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHB0KQotewotICAgIGlmIChwYXJlbnQoKSkg
Ly8gZG9uJ3QgYXR0ZW1wdCB0byBzY3JvbGwgc3ViZnJhbWVzOyB0aGV5J3JlIGZ1bGx5IHZpc2li
bGUKLSAgICAgICAgcmV0dXJuOwotICAgIFBsYXRmb3JtQnJpZGdlOjpzZXRTY3JvbGxQb3NpdGlv
bih0aGlzLCBwdC54KCksIHB0LnkoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1T
Y3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlJiBoLCBTY3JvbGxiYXJNb2RlJiB2KSBjb25zdAot
ewotICAgIGggPSB2ID0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwotfQotCi1ib29sIFNjcm9sbFZpZXc6
OnBsYXRmb3JtUHJvaGliaXRzU2Nyb2xsaW5nKCkKLXsKLSAgICBpZiAoIWlzRnJhbWVWaWV3KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGlzKTsKLSAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSByZXF1ZXN0cyB0
byBzY3JvbGwgdGhhdCB3ZXJlIG5vdCBpbml0aWF0ZWQgYnkgdGhlIHVzZXIuICBBbgotICAgIC8v
IGV4YW1wbGUgb2YgdGhpcyBpcyB3aGVuIHRleHQgaXMgaW5zZXJ0ZWQgaW50byBhIHRleHRmaWVs
ZC9hcmVhLCB3aGljaCByZXN1bHRzIGluCi0gICAgLy8gYSBzY3JvbGwuICBXZSBpZ25vcmUgdGhp
cyBiZWNhdXNlIHdlIG5vdyBob3cgdG8gZG8gdGhpcyBvdXJzZWx2ZXMgaW4gdGhlIFVJIHRocmVh
ZC4KLSAgICAvLyBBbiBleGFtcGxlIG9mIGl0IGJlaW5nIGluaXRpYXRlZCBieSB0aGUgdXNlciBp
cyBpZiB0aGUgdXNlciBjbGlja3MgYW4gYW5jaG9yCi0gICAgLy8gZWxlbWVudCB3aGljaCBzaW1w
bHkgc2Nyb2xscyB0aGUgcGFnZS4KLSAgICByZXR1cm4gIWFuZHJvaWQ6OldlYkZyYW1lOjpnZXRX
ZWJGcmFtZSh2aWV3LT5mcmFtZSgpKS0+dXNlckluaXRpYXRlZENsaWNrKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0
ICZyZWN0LCBib29sIG5vdykKLXsKLSAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0V2ViVmll
d0NvcmUodGhpcyktPmNvbnRlbnRJbnZhbGlkYXRlKHJlY3QpOwotfQotCi0jaWZkZWYgQU5EUk9J
RF9DQVBUVVJFX09GRlNDUkVFTl9QQUlOVFMKLS8vICBDb21wdXRlIHRoZSBvZmZzY3JlZW4gcGFy
dHMgb2YgdGhlIGRyYXduIHJlY3RhbmdsZSBieSBzdWJ0cmFjdGluZwotLy8gIHZpcyBmcm9tIHJl
Y3QuIFRoaXMgY2FuIGNvbXB1dGUgdXAgdG8gZm91ciByZWN0YW5ndWxhciBzbGljZXMuCi12b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtT2Zmc2NyZWVuQ29udGVudFJlY3RhbmdsZShjb25zdCBJbnRS
ZWN0JiB2aXMsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgU2tSZWdpb24gcmVjdFJnbiA9
IFNrUmVnaW9uKHJlY3QpOwotICAgIHJlY3RSZ24ub3AodmlzLCBTa1JlZ2lvbjo6a0RpZmZlcmVu
Y2VfT3ApOwotICAgIFNrUmVnaW9uOjpJdGVyYXRvciBpdGVyKHJlY3RSZ24pOwotICAgIGZvciAo
OyAhaXRlci5kb25lKCk7IGl0ZXIubmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IFNrSVJlY3QmIGRp
ZmYgPSBpdGVyLnJlY3QoKTsKLSAgICAgICAgYW5kcm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZp
ZXdDb3JlKHRoaXMpLT5vZmZJbnZhbGlkYXRlKGRpZmYpOwotICAgIH0KLX0KLSNlbmRpZgotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1NlYXJjaFBvcHVwTWVudUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvU2VhcmNoUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJldmlzaW9u
IDkzNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1l
bnVBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIFNhdmUgdGhlIHBhc3Qgc2VhcmNoZXMgc3RvcmVkIGluICdzZWFy
Y2hJdGVtcycgdG8gYSBkYXRhYmFzZSBhc3NvY2lhdGVkIHdpdGggJ25hbWUnCi12b2lkIFNlYXJj
aFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKSAKLXsgCi19Ci0KLS8vIExvYWQgcGFz
dCBzZWFyY2hlcyBhc3NvY2lhdGVkIHdpdGggJ25hbWUnIGZyb20gdGhlIGRhdGFiYXNlIHRvICdz
ZWFyY2hJdGVtcycKLXZvaWQgU2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIAoteyAK
LX0KLQotLy8gQ3JlYXRlIGEgc2VhcmNoIHBvcHVwIG1lbnUgLSBub3Qgc3VyZSB3aGF0IGVsc2Ug
d2UgaGF2ZSB0byBkbyBoZXJlCi1TZWFyY2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudShQb3B1
cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IFBvcHVwTWVudShjbGllbnQpIAoteyAKLX0KLSAg
ICAgICAgCi1ib29sIFNlYXJjaFBvcHVwTWVudTo6ZW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9TaGFyZWRUaW1lckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2hhcmVkVGltZXJBbmRyb2lkLmNwcAkocmV2
aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NoYXJlZFRp
bWVyQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCi0KLSNkZWZpbmUgTE9H
X1RBRyAiVGltZXJzIgotCi0jaW5jbHVkZSA8VGltZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxKYXZh
U2hhcmVkQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8dXRpbHMvTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLS8vIFNpbmdsZSB0aW1lciwgc2hhcmVkIHRvIGltcGxlbWVudCBhbGwgdGhlIHRp
bWVycyBtYW5hZ2VkIGJ5IHRoZSBUaW1lciBjbGFzcy4KLS8vIE5vdCBpbnRlbmRlZCB0byBiZSB1
c2VkIGRpcmVjdGx5OyB1c2UgdGhlIFRpbWVyIGNsYXNzIGluc3RlYWQuCi12b2lkIHNldFNoYXJl
ZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBpZiAoSmF2YVNoYXJlZENs
aWVudDo6R2V0VGltZXJDbGllbnQoKSkKLSAgICAgICAgSmF2YVNoYXJlZENsaWVudDo6R2V0VGlt
ZXJDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJDYWxsYmFjayhmKTsKLX0KLQotdm9pZCBzZXRTaGFy
ZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCi17Ci0gICAgbG9uZyBsb25nIHRp
bWVJbk1zID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihpbnRlcnZhbCAqIDEwMDApOwotCi0gICAg
TE9HVigic2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWw6IGluICVsZCBtaWxsaXNlYyIsIHRpbWVJ
bk1zKTsKLSAgICBpZiAoSmF2YVNoYXJlZENsaWVudDo6R2V0VGltZXJDbGllbnQoKSkKLSAgICAg
ICAgSmF2YVNoYXJlZENsaWVudDo6R2V0VGltZXJDbGllbnQoKS0+c2V0U2hhcmVkVGltZXIodGlt
ZUluTXMpOwotfQotCi12b2lkIHN0b3BTaGFyZWRUaW1lcigpCi17Ci0gICAgaWYgKEphdmFTaGFy
ZWRDbGllbnQ6OkdldFRpbWVyQ2xpZW50KCkpCi0gICAgICAgIEphdmFTaGFyZWRDbGllbnQ6Okdl
dFRpbWVyQ2xpZW50KCktPnN0b3BTaGFyZWRUaW1lcigpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Tb3VuZEFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU291
bmRBbmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1NvdW5kQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNvdW5kLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzeXN0ZW1CZWVwKCkKLXsKLSAgICAvLyBkbyBub3RoaW5n
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNwcAkocmV2aXNpb24g
OTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRy
b2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1mbG9hdCB1c2VySWRsZVRpbWUoKQotewotICAgIC8vIE5lZWRlZCBmb3IgUGFnZUNhY2hl
LCB3aGljaCB3ZSBjdXJyZW50bHkgaGF2ZSBkaXNhYmxlZC4KLSAgICByZXR1cm4gMC4wRjsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDkz
NTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNkZWZpbmUgTE9H
X1RBRyAiV2ViQ29yZSIKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jZGVmaW5lIEFORFJPSURf
Q09NUElMRV9IQUNLCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUGFnZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0j
aW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5j
bHVkZSAiQ29va2llU3RvcmFnZS5oIgotI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJFZGl0b3Iu
aCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEtleWdl
bkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXN0b3J5LmgiCi0jaW5jbHVkZSAiSWNvbi5oIgotI2lu
Y2x1ZGUgIkljb25EYXRhYmFzZS5oIgotI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKLSNpbmNsdWRl
ICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMYW5ndWFnZS5oIgot
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZUNhY2hlLmgiCi0jaW5j
bHVkZSAiUGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRlci5oIgotI2luY2x1ZGUgIlNjcmVlbi5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiU21hcnRSZXBsYWNlLmgiCi0j
aW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgVVNFKEpTQykKLSNpbmNs
dWRlICJBUEkvSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCi0j
aW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUgIlNjcmlwdERlYnVnU2Vy
dmVyLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENvbXBs
ZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KLS8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSBicmlkZ2Ug
dGhhdCBhIHJlc291cmNlIHdhcyBsb2FkZWQgZnJvbSB0aGUgY2FjaGUgYW5kIHRodXMKLS8vIHRo
ZSBhcHAgbWF5IHVwZGF0ZSBwcm9ncmVzcyB3aXRoIHRoZSBhbW91bnQgb2YgZGF0YSBsb2FkZWQu
Ci12b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBDYWNo
ZWRSZXNvdXJjZSopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgg
dGhlIEZpbGUgVXBsb2FkIGZvcm0gZWxlbWVudCwgYW5kCi0vLyB0aGVyZWZvcmUgcmVsYXRlcyB0
byB0aGUgYWJvdmUuIFdoZW4gYSBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLCBhbiBpY29uCi0vLyBy
ZXByZXNlbnRpbmcgdGhlIGZpbGUgdHlwZSBjYW4gYmUgcmVuZGVyZWQgbmV4dCB0byB0aGUgZmls
ZW5hbWUgb24gdGhlCi0vLyB3ZWIgcGFnZS4gVGhlIGljb24gZm9yIHRoZSBmaWxlIGlzIGVuY2Fw
c3VsYXRlZCB3aXRoaW4gdGhpcyBjbGFzcy4KLUljb246On5JY29uKCkgeyB9Ci12b2lkIEljb246
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7IH0KLQotfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotLy8gRklYTUUsIG5vIHN1cHBvcnQgZm9yIHNwZWxsaW5nIHlldC4K
LVBhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkKLXsKLSAgICByZXR1
cm4gbmV3IFBhc3RlYm9hcmQoKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bihSYW5nZSosIGJvb2wsIEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4s
IGJvb2wsIGJvb2wmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLVN0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJv
YXJkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXN0ZWJvYXJkOjp+UGFzdGVi
b2FyZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotCi1Db250ZXh0TWVudTo6Q29u
dGV4dE1lbnUoKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLUNvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1l
bnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51OjpzZXRQ
bGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsK
LX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb247Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJ
dGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNvbnRl
eHRNZW51SXRlbShDb250ZXh0TWVudSopCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0
ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSwgQ29udGV4dE1lbnVBY3Rpb24sIGNvbnN0IFN0cmluZyYs
IENvbnRleHRNZW51KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1Db250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9y
bURlc2NyaXB0aW9uKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci19Ci0KLUNvbnRl
eHRNZW51SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBBY3Rp
b25UeXBlOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0TWVudUl0
ZW1UeXBlKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLUNvbnRleHRNZW51QWN0aW9uIENvbnRleHRNZW51SXRlbTo6YWN0aW9uKCkgY29u
c3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjsKLX0KLQotdm9pZCBDb250ZXh0
TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVudUFjdGlvbikKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1TdHJpbmcgQ29udGV4dE1l
bnVJdGVtOjp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0
aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QKLXsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwot
fQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0TWVudSopCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0RW5hYmxlZChib29sKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLS8vIHN5c3RlbUJlZXAoKSBpcyBjYWxsZWQgYnkgdGhlIEVk
aXRvciB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIHdhcyBub3RoaW5nIHRvIGNvcHksIGFuZCBtYXkg
YmUgY2FsbGVkIGZyb20KLS8vIG90aGVyIHBsYWNlcyB0b28uCi12b2lkIHN5c3RlbUJlZXAoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQqIFdlYkNvcmU6OkZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24oKQotewotICAgIHJldHVybiAwOwotfQotCi0KLVdURjo6U3RyaW5n
IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFdURjo6
U3RyaW5nIGNvbnN0JikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHJldHVy
biBXVEY6OlN0cmluZygpOwotfQotCi12b2lkIFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1h
Z2UoV2ViQ29yZTo6Tm9kZSosIFdlYkNvcmU6OktVUkwgY29uc3QmLCBXVEY6OlN0cmluZyBjb25z
dCYpIHt9Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50U2l6ZSBkcmFnSW1hZ2VTaXplKHZv
aWQqKQotewotICAgIHJldHVybiBJbnRTaXplKDAsIDApOwotfQotCi12b2lkIGRlbGV0ZURyYWdJ
bWFnZSh2b2lkKikge30KLXZvaWQqIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSopCi17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbih2
b2lkKiwgZmxvYXQpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIGNyZWF0ZURyYWdJbWFn
ZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LUN1cnNvciBkdW1teUN1cnNvcjsKLWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKLXsKLSAg
ICByZXR1cm4gZHVtbXlDdXJzb3I7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigp
Ci17Ci0gICAgcmV0dXJuIGR1bW15Q3Vyc29yOwotfQotCi1jb25zdCBDdXJzb3ImIG5vdEFsbG93
ZWRDdXJzb3IoKQotewotICAgIHJldHVybiBkdW1teUN1cnNvcjsKLX0KLQotdm9pZCogc2NhbGVE
cmFnSW1hZ2Uodm9pZCosIEZsb2F0U2l6ZSkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5n
IHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNU
ZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHN1cHBv
cnRlZEtleVNpemVzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLS8vIGlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0IGlzIGRlZmluZWQgaW4g
U21hcnRSZXBsYWNlSUNVLmNwcDsgaW4gdGhlb3J5LCB3ZSBjb3VsZCB1c2UgdGhhdCBvbmUKLS8v
ICAgICAgYnV0IHdlIGRvbid0IHN1cHBvcnQgYWxsIG9mIHRoZSByZXF1aXJlZCBpY3UgZnVuY3Rp
b25zCi1ib29sIGlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KFVDaGFyMzIsIGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIFdl
YkNvcmUKLQotaW50IE1ha2VEYXRhRXhlY3V0YWJsZTsKLQotU3RyaW5nIEtVUkw6OmZpbGVTeXN0
ZW1QYXRoKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotCi1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVh
dGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi0KLSNpZiBVU0UoSlNDKQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCaW5kaW5ncyB7Ci1ib29sIGRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBj
b25zdCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywg
Sk5JVHlwZSByZXR1cm5UeXBlLCAKLSAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUq
IGFyZ3MsIGp2YWx1ZSYgcmVzdWx0LCBjb25zdCBjaGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlJiBl
eGNlcHRpb25EZXNjcmlwdGlvbikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSB9ICAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLSNlbmRpZgotCi1jaGFy
KiBkaXJuYW1lKGNvbnN0IGNoYXIqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLSAgICAvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAzODA2OCwgTm92IDUsIDIw
MDgKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNzUmVmUHRyPEljb24+IEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpIGlzIGNh
bGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQotLy8gbGlrZSB0aGlz
OiBzY3JvbGxiYXJTaXplID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJh
clRoaWNrbmVzcygpOwotLy8gd2l0aCB0aGlzIGNvbW1lbnQ6Ci0vLyAvLyBGSVhNRTogV2Ugc2hv
dWxkIGdldCB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIGZyb20gdGhlIFJlbmRlclRoZW1lIGlu
c3RlYWQuCi0vLyBzaW5jZSBvdXIgdGV4dCBjb250cm9sIGRvZXNuJ3QgaGF2ZSBzY3JvbGxiYXJz
LCB0aGUgZGVmYXVsdCBzaXplIG9mIDAgd2lkdGggc2hvdWxkIGJlCi0vLyBvay4gbm90SW1wbGVt
ZW50ZWQoKSBpcyBjb21tZW50ZWQgb3V0IGJlbG93IHNvIHRoYXQgd2UgY2FuIGZpbmQgb3RoZXIg
dW5yZXNvbHZlZAotLy8gdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCi1TY3JvbGxiYXJUaGVtZSog
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICAvKiBub3RJbXBsZW1lbnRlZCgp
OyAqLwotICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1l
OwotfQotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1BWE9iamVjdENhY2hlOjp+QVhPYmpl
Y3RDYWNoZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLy8gVGhpcyB2YWx1ZSB0
dXJucyBvbiBvciBvZmYgdGhlIE1hYyBzcGVjaWZpYyBBY2Nlc3NpYmlsaXR5IHN1cHBvcnQuCi1i
b29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IGZhbHNlOwotYm9vbCBB
WE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQg
PSBmYWxzZTsKLQotdm9pZCBBWE9iamVjdENhY2hlOjpjaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2Jq
ZWN0KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFYT2JqZWN0Q2FjaGU6
OnJlbW92ZShSZW5kZXJPYmplY3QqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNp
ZiBVU0UoSlNDKQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotCi1PcGFxdWVKU0NsYXNzOjp+T3Bh
cXVlSlNDbGFzcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotT3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhOjp+T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHNl
dENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBzdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgc3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9XaWRnZXRB
bmRyb2lkLmNwcAkocmV2aXNpb24gOTM1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1dpZGdldEFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZUZyYW1lQnJpZGdlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVZpZXdCcmlkZ2UuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3Q29yZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdpZGdldDo6V2lkZ2V0
KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLXsKLSAgICBpbml0KHdpZGdldCk7Ci19Ci0KLVdpZGdl
dDo6fldpZGdldCgpCi17Ci0gICAgQVNTRVJUKCFwYXJlbnQoKSk7Ci0gICAgcmVsZWFzZVBsYXRm
b3JtV2lkZ2V0KCk7Ci19Ci0KLUludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiB1c2UgbV9mcmFtZSBpbnN0ZWFkPwotICAgIGlmICghcGxhdGZvcm1XaWRn
ZXQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgMCwgMCk7Ci0gICAgcmV0dXJuIHBs
YXRmb3JtV2lkZ2V0KCktPmdldEJvdW5kcygpOwotfQotCi12b2lkIFdpZGdldDo6c2V0Rm9jdXMo
Ym9vbCBmb2N1c2VkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAv
LyBGSVhNRTogaW4gd2hhdCBjYXNlLCB3aWxsIHRoaXMgYmUgY2FsbGVkIGZvciB0aGUgdG9wIGZy
YW1lPwotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBs
YXRmb3JtV2lkZ2V0KCktPmRyYXcoY3R4LCByKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnJlbGVhc2VQ
bGF0Zm9ybVdpZGdldCgpCi17Ci0gICAgUmVsZWFzZShwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQot
dm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKLXsKLSAgICBSZXRhaW4ocGxhdGZv
cm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3co
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7IAotfQotCi12b2lkIFdpZGdldDo6aGlkZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBGSVhNRTogc2V0IG1fZnJhbWUgaW5zdGVh
ZD8KLSAgICAvLyBwbGF0Zm9ybVdpZGdldCgpIGlzIDAgd2hlbiBjYWxsZWQgZnJvbSBTY3JvbGxi
YXIKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwbGF0
Zm9ybVdpZGdldCgpLT5zZXRMb2NhdGlvbihyZWN0LngoKSwgcmVjdC55KCkpOwotICAgIHBsYXRm
b3JtV2lkZ2V0KCktPnNldFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQot
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1NlbGVjdGVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWludCBXaWRnZXQ6OnNjcmVlbldpZHRoKCkgY29uc3QKLXsKLSAg
ICBjb25zdCBXaWRnZXQqIHdpZGdldCA9IHRoaXM7Ci0gICAgd2hpbGUgKCF3aWRnZXQtPmlzRnJh
bWVWaWV3KCkpIHsKLSAgICAgICAgd2lkZ2V0ID0gd2lkZ2V0LT5wYXJlbnQoKTsKLSAgICAgICAg
aWYgKCF3aWRnZXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCF3aWRnZXQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGFuZHJvaWQ6OldlYlZpZXdDb3JlKiBjb3JlID0gYW5k
cm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKAotICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBTY3JvbGxWaWV3Kj4od2lkZ2V0KSk7Ci0gICAgaWYgKCFjb3JlKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY29yZS0+c2NyZWVuV2lkdGgoKTsKLX0KLQotfSAvLyBXZWJDb3Jl
IG5hbWVwc2FjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>