<?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>143133</bug_id>
          
          <creation_ts>2015-03-27 09:12:07 -0700</creation_ts>
          <short_desc>Move CacheValidation to platform</short_desc>
          <delta_ts>2015-03-27 09:50:25 -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>Platform</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080612</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-27 09:12:07 -0700</bug_when>
    <thetext>It deals with platform types only and is currently violating layering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080621</commentid>
    <comment_count>1</comment_count>
      <attachid>249575</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-27 09:38:53 -0700</bug_when>
    <thetext>Created attachment 249575
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080622</commentid>
    <comment_count>2</comment_count>
      <attachid>249575</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 09:40:22 -0700</bug_when>
    <thetext>Comment on attachment 249575
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080625</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-27 09:50:25 -0700</bug_when>
    <thetext>https://trac.webkit.org/r182064</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249575</attachid>
            <date>2015-03-27 09:38:53 -0700</date>
            <delta_ts>2015-03-27 09:40:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache-validation-platform.patch</filename>
            <type>text/plain</type>
            <size>44755</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjA2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAzLTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIENhY2hlVmFsaWRhdGlv
biB0byBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSXQgZGVhbHMgd2l0aCBwbGF0Zm9ybSB0eXBlcyBvbmx5IGFuZCBpcyBjdXJyZW50bHkg
dmlvbGF0aW5nIGxheWVyaW5nLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uY3BwLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uaC4KKwogMjAxNS0w
My0yNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3Nzg5Ni4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxODIwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTg4OCw3ICsxODg4LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAg
IGxvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAKICAgICBsb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAogICAgIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNo
ZWV0LmNwcAotICAgIGxvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uY3BwCiAgICAgbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcAogCiAgICAgbG9hZGVyL2ljb24vSWNvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0yMjExLDYgKzIyMTAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnkuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlc291cmNlSGFuZGxlLmNw
cAorICAgIHBsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0aW9uLmNwcAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvQ3JlZGVudGlhbEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9DcmVkZW50
aWFsU3RvcmFnZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agkocmV2aXNpb24gMTgyMDA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzM1Nyw3ICs3MzU3LDYgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcY2FjaGVcQ2Fj
aGVkVGV4dFRyYWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxj
YWNoZVxDYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGxvYWRlclxjYWNoZVxDYWNoZVZhbGlkYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cbG9hZGVyXGNhY2hlXE1lbW9yeUNhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGF1ZGlvXEF1ZGlvSGFyZHdhcmVMaXN0ZW5lci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxDYWxjdWxhdGlvblZhbHVl
LmNwcCIgLz4KQEAgLTg2ODAsNiArODY3OSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JSZWdpc3RyeS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JSZWdpc3RyeUlt
cGwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xD
YWNoZVZhbGlkYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZv
cm1cbmV0d29ya1xDcmVkZW50aWFsQmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxuZXR3b3JrXENyZWRlbnRpYWxTdG9yYWdlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcRGF0YVVSTC5jcHAiIC8+CkBAIC0x
OTQyMSw3ICsxOTQyMSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcY2Fj
aGVcQ2FjaGVkVGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2Fk
ZXJcY2FjaGVcQ2FjaGVkWFNMU3R5bGVTaGVldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cbG9hZGVyXGNhY2hlXENhY2hlUG9saWN5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVWYWxpZGF0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxsb2FkZXJcY2FjaGVcTWVtb3J5Q2FjaGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGF1ZGlvXEF1ZGlvSGFyZHdhcmVMaXN0ZW5lci5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cQ2FsY3VsYXRpb25WYWx1ZS5o
IiAvPgpAQCAtMTk4ODksNiArMTk4ODgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cbmV0d29ya1xCbG9iUmVnaXN0cnlJbXBsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXEJsb2JSZXNvdXJjZUhhbmRsZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xDb29raWVTdG9yYWdlLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXENhY2hlVmFs
aWRhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29y
a1xDcmVkZW50aWFsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXENyZWRlbnRpYWxCYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXENyZWRlbnRpYWxTdG9yYWdlLmgiIC8+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
ODIwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYyMDYsNiArNjIwNiw4IEBACiAJCUU0MzEwNUJCMTY3NTBG
MTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZl
cnNhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUU0M0EwMjNCMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBMDIzQTE3RUIzNzBBMDA0Q0RE
MjUgLyogUmVuZGVyRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUU0M0EwMjNEMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0Ew
MjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJRTQzQUY4
RTYxQUM1QjdFODAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0Ug
LyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAqLzsgfTsKKwkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdF
IC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDYx
M0ExMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIwQ0Q2MzMxMDAwRkFE
QTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVt
ZW50LmggKi87IH07CiAJCUU0NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NDYxMzkyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNwcCAqLzsgfTsKQEAg
LTYyNTQsOCArNjI1Niw2IEBACiAJCUU0NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUz
OTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovOyB9OwogCQlFNDUzOTBBRTBF
QUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBT
eXN0ZW1NZW1vcnlJT1MuY3BwICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyog
SW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQ2NzY4MEUxQTAxNzdF
RTAwQjlFMjZCIC8qIENhY2hlVmFsaWRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDY3NjgwRDFBMDE3N0VFMDBCOUUyNkIgLyogQ2FjaGVW
YWxpZGF0aW9uLmNwcCAqLzsgfTsKLQkJRTQ2NzY4MTAxQTAxNzdGOTAwQjlFMjZCIC8qIENhY2hl
VmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ2NzY4MEYxQTAxNzdGOTAwQjlFMjZCIC8qIENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEyQjFDMTdDQTY1
QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFCMTdDQTY1QjkwMDBE
QkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZBMkIxRTE3Q0E3NkIxMDAwREJD
RDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFEMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hp
bGRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0NzEyN0NBMTYzNDM4QTEwMEVENkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5
c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCAq
LzsgfTsKQEAgLTEzODA4LDYgKzEzODA4LDggQEAKIAkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4
IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9k
ZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3RUIz
NzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0M0FGOEU1MUFDNUI3REQw
MENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1
ZGlvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQXVkaW9F
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkxMENENjMzMTAw
MEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBI
VE1MQXVkaW9FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODQ4
LDggKzEzODUwLDYgQEAKIAkJRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdpZGdldElPUy5tbTsg
cGF0aCA9IGlvcy9XaWRnZXRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NTM5MEFEMEVBRkY0QjUwMDM2OTVDOCAvKiBTeXN0ZW1NZW1vcnlJT1MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3lzdGVtTWVtb3J5SU9TLmNwcDsgcGF0aCA9IGlv
cy9TeXN0ZW1NZW1vcnlJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYy
QTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludFBvaW50SGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlFNDY3NjgwRDFBMDE3N0VFMDBCOUUyNkIgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhY2hlVmFsaWRhdGlvbi5jcHA7IHBh
dGggPSBsb2FkZXIvY2FjaGUvQ2FjaGVWYWxpZGF0aW9uLmNwcDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OwotCQlFNDY3NjgwRjFBMDE3N0Y5MDBCOUUyNkIgLyogQ2FjaGVWYWxpZGF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhY2hlVmFsaWRhdGlvbi5oOyBw
YXRoID0gbG9hZGVyL2NhY2hlL0NhY2hlVmFsaWRhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CiAJCUU0NkEyQjFCMTdDQTY1QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRF
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0NkEyQjFEMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hpbGRJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50Q2hpbGRJdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIgLyogSlND
dXN0b21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1
c3RvbUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTczLDYgKzE2
NTczLDggQEAKIAkJCQkyRURFRjFGMTEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1w
bC5oICovLAogCQkJCTJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5k
bGUuY3BwICovLAogCQkJCTJFQjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VI
YW5kbGUuaCAqLywKKwkJCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmNwcCAqLywKKwkJCQlFNDNBRjhFNTFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmggKi8sCiAJCQkJRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2Uu
aCAqLywKIAkJCQk1MTRDNzY1OTBDRTkyM0ExMDA3RUYzQ0QgLyogQ3JlZGVudGlhbC5oICovLAog
CQkJCTUxNEM3NjU4MENFOTIzQTEwMDdFRjNDRCAvKiBDcmVkZW50aWFsQmFzZS5jcHAgKi8sCkBA
IC0xOTgzMyw4ICsxOTgzNSw2IEBACiAJCQkJQkNCMTZDMEUwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZFhTTFN0eWxlU2hlZXQuY3BwICovLAogCQkJCUJDQjE2QzBGMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZWRYU0xTdHlsZVNoZWV0LmggKi8sCiAJCQkJRjU4Nzg2NDkwMkRFM0E5QTAxRUE0MTIy
IC8qIENhY2hlUG9saWN5LmggKi8sCi0JCQkJRTQ2NzY4MEQxQTAxNzdFRTAwQjlFMjZCIC8qIENh
Y2hlVmFsaWRhdGlvbi5jcHAgKi8sCi0JCQkJRTQ2NzY4MEYxQTAxNzdGOTAwQjlFMjZCIC8qIENh
Y2hlVmFsaWRhdGlvbi5oICovLAogCQkJCUJDQjE2QkZFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1v
cnlDYWNoZS5jcHAgKi8sCiAJCQkJQkNCMTZCRkYwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNh
Y2hlLmggKi8sCiAJCQkJMUMwOTM5RTgxQTEzRTEyOTAwQjc4OEU1IC8qIENhY2hlZFNWR0ZvbnQu
Y3BwICovLApAQCAtMjM4MDcsNyArMjM4MDcsNiBAQAogCQkJCTA3NTM4NjAzMTQ0ODlFOTgwMEI3
ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzI4MDk3
OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyogQ2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICov
LAotCQkJCUU0Njc2ODEwMUEwMTc3RjkwMEI5RTI2QiAvKiBDYWNoZVZhbGlkYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5QUUyRDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMUQ1RUNCNTEzNEI1OERBMDA4N0M3OEYgLyogQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0RTkxQUQxMEY3RkIzMTAwQTI3
NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzMx
LDYgKzI1MzMwLDcgQEAKIAkJCQlBQTdGRUVBNzE2QTRFNkYzMDA0QzBDMzMgLyogSlNTcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBN0ZFRUE5MTZBNEU2RjMw
MDRDMEMzMyAvKiBKU1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzgyNDMyOTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1
bHRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBK
U1NRTFJlc3VsdFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NDksNyArMjc1NDks
NiBAQAogCQkJCUUxQjUzMzQ3MTcxN0QwQTEwMEYyMDVGOSAvKiBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzUzODYwMjE0NDg5RTk4MDBCNzg0NTIg
LyogQ2FjaGVkVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQjE2QzI3MDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUU0Njc2ODBFMUEwMTc3RUUwMEI5RTI2QiAvKiBDYWNoZVZhbGlkYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDlBRTJEOTYxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxi
YWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkU0RTkxQUMxMEY3RkIzMTAwQTI3
NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk1
MzcsNiArMjk1MzYsNyBAQAogCQkJCUE0NTQ0MjRFMTE5QjM2ODcwMDlCRTkxMiAvKiBSZW5kZXJN
ZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM1ODZERjE1MjY0QzQ1MDAyMkE2NTkgLyog
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTMy
QjlFMTUxN0MyMjcwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlFNDNBRjhFNjFBQzVCN0U4MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDMUE3RDk3MThGQ0I1QjAwMDQyMTg3OSAvKiBSZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4QUM4
MjJGQzE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUEzRkY5QzMxNTI2NTM1OTAwMjI4OEExIC8qIFJlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZVZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAxODIwNTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVWYWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDYWNoZVZhbGlkYXRpb24uaCIKLQotI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhlc2UgcmVzcG9uc2UgaGVhZGVycyBh
cmUgbm90IGNvcGllZCBmcm9tIGEgcmV2YWxpZGF0ZWQgcmVzcG9uc2UgdG8gdGhlCi0vLyBjYWNo
ZWQgcmVzcG9uc2UgaGVhZGVycy4gRm9yIGNvbXBhdGliaWxpdHksIHRoaXMgbGlzdCBpcyBiYXNl
ZCBvbiBDaHJvbWl1bSdzCi0vLyBuZXQvaHR0cC9odHRwX3Jlc3BvbnNlX2hlYWRlcnMuY2MuCi1j
b25zdCBjaGFyKiBjb25zdCBoZWFkZXJzVG9JZ25vcmVBZnRlclJldmFsaWRhdGlvbltdID0gewot
ICAgICJhbGxvdyIsCi0gICAgImNvbm5lY3Rpb24iLAotICAgICJldGFnIiwKLSAgICAiZXhwaXJl
cyIsCi0gICAgImtlZXAtYWxpdmUiLAotICAgICJsYXN0LW1vZGlmaWVkIgotICAgICJwcm94eS1h
dXRoZW50aWNhdGUiLAotICAgICJwcm94eS1jb25uZWN0aW9uIiwKLSAgICAidHJhaWxlciIsCi0g
ICAgInRyYW5zZmVyLWVuY29kaW5nIiwKLSAgICAidXBncmFkZSIsCi0gICAgInd3dy1hdXRoZW50
aWNhdGUiLAotICAgICJ4LWZyYW1lLW9wdGlvbnMiLAotICAgICJ4LXhzcy1wcm90ZWN0aW9uIiwK
LX07Ci0KLS8vIFNvbWUgaGVhZGVyIHByZWZpeGVzIG1lYW4gIkRvbid0IGNvcHkgdGhpcyBoZWFk
ZXIgZnJvbSBhIDMwNCByZXNwb25zZS4iLgotLy8gUmF0aGVyIHRoYW4gbGlzdGluZyBhbGwgdGhl
IHJlbGV2YW50IGhlYWRlcnMsIHdlIGNhbiBjb25zb2xpZGF0ZSB0aGVtIGludG8KLS8vIHRoaXMg
bGlzdCwgYWxzbyBncmFiYmVkIGZyb20gQ2hyb21pdW0ncyBuZXQvaHR0cC9odHRwX3Jlc3BvbnNl
X2hlYWRlcnMuY2MuCi1jb25zdCBjaGFyKiBjb25zdCBoZWFkZXJQcmVmaXhlc1RvSWdub3JlQWZ0
ZXJSZXZhbGlkYXRpb25bXSA9IHsKLSAgICAiY29udGVudC0iLAotICAgICJ4LWNvbnRlbnQtIiwK
LSAgICAieC13ZWJraXQtIgotfTsKLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZFVwZGF0ZUhl
YWRlckFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFN0cmluZyYgaGVhZGVyKQotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChoZWFkZXJzVG9JZ25vcmVBZnRlclJl
dmFsaWRhdGlvbik7IGkrKykgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaGVhZGVy
LCBoZWFkZXJzVG9JZ25vcmVBZnRlclJldmFsaWRhdGlvbltpXSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChoZWFkZXJQcmVmaXhlc1RvSWdub3JlQWZ0ZXJSZXZhbGlkYXRpb24pOyBpKyspIHsKLSAg
ICAgICAgaWYgKGhlYWRlci5zdGFydHNXaXRoKGhlYWRlclByZWZpeGVzVG9JZ25vcmVBZnRlclJl
dmFsaWRhdGlvbltpXSwgZmFsc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCB1cGRhdGVSZXNwb25zZUhlYWRlcnNBZnRlclJl
dmFsaWRhdGlvbihSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQotewotICAgIC8vIFJGQzI2MTYgMTAuMy41Ci0gICAg
Ly8gVXBkYXRlIGNhY2hlZCBoZWFkZXJzIGZyb20gdGhlIDMwNCByZXNwb25zZQotICAgIGZvciAo
Y29uc3QgYXV0byYgaGVhZGVyIDogdmFsaWRhdGluZ1Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMo
KSkgewotICAgICAgICAvLyBFbnRpdHkgaGVhZGVycyBzaG91bGQgbm90IGJlIHNlbnQgYnkgc2Vy
dmVycyB3aGVuIGdlbmVyYXRpbmcgYSAzMDQKLSAgICAgICAgLy8gcmVzcG9uc2U7IG1pc2NvbmZp
Z3VyZWQgc2VydmVycyBzZW5kIHRoZW0gYW55d2F5LiBXZSBzaG91bGRuJ3QgYWxsb3cKLSAgICAg
ICAgLy8gc3VjaCBoZWFkZXJzIHRvIHVwZGF0ZSB0aGUgb3JpZ2luYWwgcmVxdWVzdC4gV2UnbGwg
YmFzZSB0aGlzIG9uIHRoZQotICAgICAgICAvLyBsaXN0IGRlZmluZWQgYnkgUkZDMjYxNiA3LjEs
IHdpdGggYSBmZXcgYWRkaXRpb25zIGZvciBleHRlbnNpb24gaGVhZGVycwotICAgICAgICAvLyB3
ZSBjYXJlIGFib3V0LgotICAgICAgICBpZiAoIXNob3VsZFVwZGF0ZUhlYWRlckFmdGVyUmV2YWxp
ZGF0aW9uKGhlYWRlci5rZXkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZChoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIH0K
LX0KLQotZG91YmxlIGNvbXB1dGVDdXJyZW50QWdlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBkb3VibGUgcmVzcG9uc2VUaW1lc3RhbXApCi17Ci0gICAgLy8gUkZDMjYxNiAxMy4y
LjMKLSAgICAvLyBObyBjb21wZW5zYXRpb24gZm9yIGxhdGVuY3kgYXMgdGhhdCBpcyBub3QgdGVy
cmlibHkgaW1wb3J0YW50IGluIHByYWN0aWNlCi0gICAgZG91YmxlIGRhdGVWYWx1ZSA9IHJlc3Bv
bnNlLmRhdGUoKTsKLSAgICBkb3VibGUgYXBwYXJlbnRBZ2UgPSBzdGQ6OmlzZmluaXRlKGRhdGVW
YWx1ZSkgPyBzdGQ6Om1heCgwLiwgcmVzcG9uc2VUaW1lc3RhbXAgLSBkYXRlVmFsdWUpIDogMDsK
LSAgICBkb3VibGUgYWdlVmFsdWUgPSByZXNwb25zZS5hZ2UoKTsKLSAgICBkb3VibGUgY29ycmVj
dGVkUmVjZWl2ZWRBZ2UgPSBzdGQ6OmlzZmluaXRlKGFnZVZhbHVlKSA/IHN0ZDo6bWF4KGFwcGFy
ZW50QWdlLCBhZ2VWYWx1ZSkgOiBhcHBhcmVudEFnZTsKLSAgICBkb3VibGUgcmVzaWRlbnRUaW1l
ID0gY3VycmVudFRpbWUoKSAtIHJlc3BvbnNlVGltZXN0YW1wOwotICAgIHJldHVybiBjb3JyZWN0
ZWRSZWNlaXZlZEFnZSArIHJlc2lkZW50VGltZTsKLX0KLQotZG91YmxlIGNvbXB1dGVGcmVzaG5l
c3NMaWZldGltZUZvckhUVFBGYW1pbHkoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IGRvdWJsZSByZXNwb25zZVRpbWVzdGFtcCkKLXsKLSAgICBBU1NFUlQocmVzcG9uc2UudXJsKCku
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKTsKLSAgICAvLyBSRkMyNjE2IDEzLjIuNAotICAgIGRv
dWJsZSBtYXhBZ2VWYWx1ZSA9IHJlc3BvbnNlLmNhY2hlQ29udHJvbE1heEFnZSgpOwotICAgIGlm
IChzdGQ6OmlzZmluaXRlKG1heEFnZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG1heEFnZVZhbHVl
OwotICAgIGRvdWJsZSBleHBpcmVzVmFsdWUgPSByZXNwb25zZS5leHBpcmVzKCk7Ci0gICAgZG91
YmxlIGRhdGVWYWx1ZSA9IHJlc3BvbnNlLmRhdGUoKTsKLSAgICBkb3VibGUgY3JlYXRpb25UaW1l
ID0gc3RkOjppc2Zpbml0ZShkYXRlVmFsdWUpID8gZGF0ZVZhbHVlIDogcmVzcG9uc2VUaW1lc3Rh
bXA7Ci0gICAgaWYgKHN0ZDo6aXNmaW5pdGUoZXhwaXJlc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGV4cGlyZXNWYWx1ZSAtIGNyZWF0aW9uVGltZTsKLSAgICBkb3VibGUgbGFzdE1vZGlmaWVkVmFs
dWUgPSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKLSAgICBpZiAoc3RkOjppc2Zpbml0ZShsYXN0
TW9kaWZpZWRWYWx1ZSkpCi0gICAgICAgIHJldHVybiAoY3JlYXRpb25UaW1lIC0gbGFzdE1vZGlm
aWVkVmFsdWUpICogMC4xOwotICAgIC8vIElmIG5vIGNhY2hlIGhlYWRlcnMgYXJlIHByZXNlbnQs
IHRoZSBzcGVjaWZpY2F0aW9uIGxlYXZlcyB0aGUgZGVjaXNpb24gdG8gdGhlIFVBLiBPdGhlciBi
cm93c2VycyBzZWVtIHRvIG9wdCBmb3IgMC4KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCB1cGRh
dGVSZWRpcmVjdENoYWluU3RhdHVzKFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyYgcmVkaXJlY3RD
aGFpbkNhY2hlU3RhdHVzLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAg
ICBpZiAocmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLnN0YXR1cyA9PSBSZWRpcmVjdENoYWluQ2Fj
aGVTdGF0dXM6Ok5vdENhY2hlZFJlZGlyZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpIHx8IHJlc3BvbnNlLmNhY2hl
Q29udHJvbENvbnRhaW5zTm9DYWNoZSgpIHx8IHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5z
TXVzdFJldmFsaWRhdGUoKSkgewotICAgICAgICByZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3Rh
dHVzID0gUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpOb3RDYWNoZWRSZWRpcmVjdGlvbjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3RhdHVz
ID0gUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpDYWNoZWRSZWRpcmVjdGlvbjsKLSAgICBkb3Vi
bGUgcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotICAgIC8vIFN0b3JlIHRoZSBu
ZWFyZXN0IGVuZCBvZiBjYWNoZSB2YWxpZGl0eSBkYXRlCi0gICAgZG91YmxlIGVuZE9mVmFsaWRp
dHkgPSByZXNwb25zZVRpbWVzdGFtcCArIGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBG
YW1pbHkocmVzcG9uc2UsIHJlc3BvbnNlVGltZXN0YW1wKSAtIGNvbXB1dGVDdXJyZW50QWdlKHJl
c3BvbnNlLCByZXNwb25zZVRpbWVzdGFtcCk7Ci0gICAgcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVz
LmVuZE9mVmFsaWRpdHkgPSBzdGQ6Om1pbihyZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuZW5kT2ZW
YWxpZGl0eSwgZW5kT2ZWYWxpZGl0eSk7Ci19Ci0KLWJvb2wgcmVkaXJlY3RDaGFpbkFsbG93c1Jl
dXNlKFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyByZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIFJl
dXNlRXhwaXJlZFJlZGlyZWN0aW9uT3JOb3QgcmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChyZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzKSB7Ci0gICAgY2FzZSBS
ZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6Ok5vUmVkaXJlY3Rpb246Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2UgUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpOb3RDYWNoZWRSZWRpcmVj
dGlvbjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgUmVkaXJlY3RDaGFpbkNhY2hl
U3RhdHVzOjpDYWNoZWRSZWRpcmVjdGlvbjoKLSAgICAgICAgcmV0dXJuIHJldXNlRXhwaXJlZFJl
ZGlyZWN0aW9uIHx8IGN1cnJlbnRUaW1lKCkgPD0gcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVu
ZE9mVmFsaWRpdHk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotaW5saW5lIGJvb2wgaXNDYWNoZUhlYWRlclNlcGFyYXRvcihVQ2hhciBj
KQotewotICAgIC8vIFNlZSBSRkMgMjYxNiwgU2VjdGlvbiAyLjIKLSAgICBzd2l0Y2ggKGMpIHsK
LSAgICBjYXNlICcoJzoKLSAgICBjYXNlICcpJzoKLSAgICBjYXNlICc8JzoKLSAgICBjYXNlICc+
JzoKLSAgICBjYXNlICdAJzoKLSAgICBjYXNlICcsJzoKLSAgICBjYXNlICc7JzoKLSAgICBjYXNl
ICc6JzoKLSAgICBjYXNlICdcXCc6Ci0gICAgY2FzZSAnIic6Ci0gICAgY2FzZSAnLyc6Ci0gICAg
Y2FzZSAnWyc6Ci0gICAgY2FzZSAnXSc6Ci0gICAgY2FzZSAnPyc6Ci0gICAgY2FzZSAnPSc6Ci0g
ICAgY2FzZSAneyc6Ci0gICAgY2FzZSAnfSc6Ci0gICAgY2FzZSAnICc6Ci0gICAgY2FzZSAnXHQn
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc0NvbnRyb2xDaGFyYWN0ZXIoVUNoYXIgYykK
LXsKLSAgICByZXR1cm4gYyA8ICcgJyB8fCBjID09IDEyNzsKLX0KLQotaW5saW5lIFN0cmluZyB0
cmltVG9OZXh0U2VwYXJhdG9yKGNvbnN0IFN0cmluZyYgc3RyKQotewotICAgIHJldHVybiBzdHIu
c3Vic3RyaW5nKDAsIHN0ci5maW5kKGlzQ2FjaGVIZWFkZXJTZXBhcmF0b3IpKTsKLX0KLQotc3Rh
dGljIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBwYXJzZUNhY2hlSGVhZGVyKGNv
bnN0IFN0cmluZyYgaGVhZGVyKQotewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJp
bmc+PiByZXN1bHQ7Ci0KLSAgICBjb25zdCBTdHJpbmcgc2FmZUhlYWRlciA9IGhlYWRlci5yZW1v
dmVDaGFyYWN0ZXJzKGlzQ29udHJvbENoYXJhY3Rlcik7Ci0gICAgdW5zaWduZWQgbWF4ID0gc2Fm
ZUhlYWRlci5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBwb3MgPSAwOwotICAgIHdoaWxlIChwb3Mg
PCBtYXgpIHsKLSAgICAgICAgc2l6ZV90IG5leHRDb21tYVBvc2l0aW9uID0gc2FmZUhlYWRlci5m
aW5kKCcsJywgcG9zKTsKLSAgICAgICAgc2l6ZV90IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA9IHNh
ZmVIZWFkZXIuZmluZCgnPScsIHBvcyk7Ci0gICAgICAgIGlmIChuZXh0RXF1YWxTaWduUG9zaXRp
b24gPT0gbm90Rm91bmQgJiYgbmV4dENvbW1hUG9zaXRpb24gPT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgICAgIC8vIEFkZCBsYXN0IGRpcmVjdGl2ZSB0byBtYXAgd2l0aCBlbXB0eSBzdHJpbmcgYXMg
dmFsdWUKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIodHJpbVRvTmV4
dFNlcGFyYXRvcihzYWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG1heCAtIHBvcykuc3RyaXBXaGl0
ZVNwYWNlKCkpLCAiIikpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24gIT0gbm90Rm91bmQgJiYgKG5leHRDb21tYVBv
c2l0aW9uIDwgbmV4dEVxdWFsU2lnblBvc2l0aW9uIHx8IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA9
PSBub3RGb3VuZCkpIHsKLSAgICAgICAgICAgIC8vIEFkZCBkaXJlY3RpdmUgdG8gbWFwIHdpdGgg
ZW1wdHkgc3RyaW5nIGFzIHZhbHVlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKHRyaW1Ub05leHRTZXBhcmF0b3Ioc2FmZUhlYWRlci5zdWJzdHJpbmcocG9zLCBuZXh0
Q29tbWFQb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpLCAiIikpOwotICAgICAgICAg
ICAgcG9zICs9IG5leHRDb21tYVBvc2l0aW9uIC0gcG9zICsgMTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEdldCBkaXJlY3RpdmUgbmFtZSwgcGFyc2Ugcmln
aHQgaGFuZCBzaWRlIG9mIGVxdWFsIHNpZ24sIHRoZW4gYWRkIHRvIG1hcAotICAgICAgICBTdHJp
bmcgZGlyZWN0aXZlID0gdHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVhZGVyLnN1YnN0cmluZyhw
b3MsIG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpOwotICAg
ICAgICBwb3MgKz0gbmV4dEVxdWFsU2lnblBvc2l0aW9uIC0gcG9zICsgMTsKLQotICAgICAgICBT
dHJpbmcgdmFsdWUgPSBzYWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG1heCAtIHBvcykuc3RyaXBX
aGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmICh2YWx1ZVswXSA9PSAnIicpIHsKLSAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBpcyBhIHF1b3RlZCBzdHJpbmcKLSAgICAgICAgICAgIHNpemVfdCBuZXh0
RG91YmxlUXVvdGVQb3NpdGlvbiA9IHZhbHVlLmZpbmQoJyInLCAxKTsKLSAgICAgICAgICAgIGlm
IChuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9PSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAg
IC8vIFBhcnNlIGVycm9yOyBqdXN0IHVzZSB0aGUgcmVzdCBhcyB0aGUgdmFsdWUKLSAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGRpcmVjdGl2ZSwgdHJpbVRvTmV4
dFNlcGFyYXRvcih2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoKCkgLSAxKS5zdHJpcFdo
aXRlU3BhY2UoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIGFzIGEgcXVvdGVkIHN0cmluZyB3
aXRob3V0IHF1b3RlcwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihk
aXJlY3RpdmUsIHZhbHVlLnN1YnN0cmluZygxLCBuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiAtIDEp
LnN0cmlwV2hpdGVTcGFjZSgpKSk7Ci0gICAgICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmlu
ZCgnIicsIHBvcykgLSBwb3MpICsgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gKyAxOwotICAgICAg
ICAgICAgLy8gTW92ZSBwYXN0IG5leHQgY29tbWEsIGlmIHRoZXJlIGlzIG9uZQotICAgICAgICAg
ICAgc2l6ZV90IG5leHRDb21tYVBvc2l0aW9uMiA9IHNhZmVIZWFkZXIuZmluZCgnLCcsIHBvcyk7
Ci0gICAgICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24yID09IG5vdEZvdW5kKQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIFBhcnNlIGVycm9yIGlmIHRoZXJlIGlzIGFueXRo
aW5nIGxlZnQgd2l0aCBubyBjb21tYQotICAgICAgICAgICAgcG9zICs9IG5leHRDb21tYVBvc2l0
aW9uMiAtIHBvcyArIDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBUaGUgdmFsdWUgaXMgYSB0b2tlbiB1bnRpbCB0aGUgbmV4dCBjb21tYQotICAgICAgICBz
aXplX3QgbmV4dENvbW1hUG9zaXRpb24yID0gdmFsdWUuZmluZCgnLCcpOwotICAgICAgICBpZiAo
bmV4dENvbW1hUG9zaXRpb24yID09IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAvLyBUaGUgcmVz
dCBpcyB0aGUgdmFsdWU7IG5vIGNoYW5nZSB0byB2YWx1ZSBuZWVkZWQKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZGlyZWN0aXZlLCB0cmltVG9OZXh0U2VwYXJhdG9y
KHZhbHVlKSkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAg
ICAvLyBUaGUgdmFsdWUgaXMgZGVsaW1pdGVkIGJ5IHRoZSBuZXh0IGNvbW1hCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZGlyZWN0aXZlLCB0cmltVG9OZXh0U2VwYXJhdG9y
KHZhbHVlLnN1YnN0cmluZygwLCBuZXh0Q29tbWFQb3NpdGlvbjIpLnN0cmlwV2hpdGVTcGFjZSgp
KSkpOwotICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmluZCgnLCcsIHBvcykgLSBwb3MpICsg
MTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQ2FjaGVDb250cm9sRGlyZWN0aXZl
cyBwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVy
cykKLXsKLSAgICBDYWNoZUNvbnRyb2xEaXJlY3RpdmVzIHJlc3VsdDsKLQotICAgIFN0cmluZyBj
YWNoZUNvbnRyb2xWYWx1ZSA9IGhlYWRlcnMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRy
b2wpOwotICAgIGlmICghY2FjaGVDb250cm9sVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1
dG8gZGlyZWN0aXZlcyA9IHBhcnNlQ2FjaGVIZWFkZXIoY2FjaGVDb250cm9sVmFsdWUpOwotCi0g
ICAgICAgIHNpemVfdCBkaXJlY3RpdmVzU2l6ZSA9IGRpcmVjdGl2ZXMuc2l6ZSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpcmVjdGl2ZXNTaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIC8vIFJGQzI2MTYgMTQuOS4xOiBBIG5vLWNhY2hlIGRpcmVjdGl2ZSB3aXRoIGEgdmFsdWUg
aXMgb25seSBtZWFuaW5nZnVsIGZvciBwcm94eSBjYWNoZXMuCi0gICAgICAgICAgICAvLyBJdCBz
aG91bGQgYmUgaWdub3JlZCBieSBhIGJyb3dzZXIgbGV2ZWwgY2FjaGUuCi0gICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgIm5vLWNhY2hlIikgJiYg
ZGlyZWN0aXZlc1tpXS5zZWNvbmQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5u
b0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRp
cmVjdGl2ZXNbaV0uZmlyc3QsICJuby1zdG9yZSIpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5u
b1N0b3JlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRp
cmVjdGl2ZXNbaV0uZmlyc3QsICJtdXN0LXJldmFsaWRhdGUiKSkKLSAgICAgICAgICAgICAgICBy
ZXN1bHQubXVzdFJldmFsaWRhdGUgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgIm1heC1hZ2UiKSkgewotICAgICAgICAg
ICAgICAgIGlmICghc3RkOjppc25hbihyZXN1bHQubWF4QWdlKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCBtYXgtYWdlIGRpcmVjdGl2ZSB3aW5zIGlmIHRoZXJlIGFyZSBtdWx0aXBs
ZSBvbmVzLgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWdl
ID0gZGlyZWN0aXZlc1tpXS5zZWNvbmQudG9Eb3VibGUoJm9rKTsKLSAgICAgICAgICAgICAgICBp
ZiAob2spCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXhBZ2UgPSBtYXhBZ2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdC5ub0NhY2hlKSB7
Ci0gICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hlCi0gICAgICAgIC8vIFRoaXMgaXMg
ZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1jb250cm9sOiBuby1jYWNoZQotICAg
ICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUgdmFsdWUsIGl0IGlzIG5vdCBpbXBv
cnRhbnQKLSAgICAgICAgU3RyaW5nIHByYWdtYVZhbHVlID0gaGVhZGVycy5nZXQoSFRUUEhlYWRl
ck5hbWU6OlByYWdtYSk7Ci0KLSAgICAgICAgcmVzdWx0Lm5vQ2FjaGUgPSBwcmFnbWFWYWx1ZS5j
b250YWlucygibm8tY2FjaGUiLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlVmFsaWRhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVZhbGlk
YXRpb24uaAkocmV2aXNpb24gMTgyMDU5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlVmFsaWRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIENhY2hlVmFsaWRhdGlvbl9oCi0jZGVmaW5lIENhY2hlVmFsaWRhdGlv
bl9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRUUEhlYWRlck1hcDsKLWNsYXNz
IFJlc291cmNlUmVzcG9uc2U7Ci0KLXN0cnVjdCBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMgewot
ICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgTm9SZWRpcmVjdGlvbiwKLSAgICAgICAgTm90Q2Fj
aGVkUmVkaXJlY3Rpb24sCi0gICAgICAgIENhY2hlZFJlZGlyZWN0aW9uCi0gICAgfTsKLSAgICBS
ZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMoKQotICAgICAgICA6IHN0YXR1cyhOb1JlZGlyZWN0aW9u
KQotICAgICAgICAsIGVuZE9mVmFsaWRpdHkoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
YXgoKSkKLSAgICB7IH0KLSAgICBTdGF0dXMgc3RhdHVzOwotICAgIGRvdWJsZSBlbmRPZlZhbGlk
aXR5OwotfTsKLQotV0VCQ09SRV9FWFBPUlQgZG91YmxlIGNvbXB1dGVDdXJyZW50QWdlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBkb3VibGUgcmVzcG9uc2VUaW1lc3RhbXApOwotV0VCQ09SRV9F
WFBPUlQgZG91YmxlIGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYsIGRvdWJsZSByZXNwb25zZVRpbWVzdGFtcCk7Ci1XRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZVJlc3BvbnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9uKFJlc291cmNl
UmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVSZWRpcmVjdENoYWluU3RhdHVzKFJlZGlyZWN0Q2hh
aW5DYWNoZVN0YXR1cyYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLQotZW51bSBSZXVzZUV4
cGlyZWRSZWRpcmVjdGlvbk9yTm90IHsgRG9Ob3RSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbiwgUmV1
c2VFeHBpcmVkUmVkaXJlY3Rpb24gfTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgcmVkaXJlY3RDaGFp
bkFsbG93c1JldXNlKFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgUmV1c2VFeHBpcmVkUmVkaXJl
Y3Rpb25Pck5vdCk7Ci0KLXN0cnVjdCBDYWNoZUNvbnRyb2xEaXJlY3RpdmVzIHsKLSAgICBkb3Vi
bGUgbWF4QWdlIHsgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSB9Owot
ICAgIGJvb2wgbm9DYWNoZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBub1N0b3JlIHsgZmFsc2UgfTsK
LSAgICBib29sIG11c3RSZXZhbGlkYXRlIHsgZmFsc2UgfTsKLX07Ci1XRUJDT1JFX0VYUE9SVCBD
YWNoZUNvbnRyb2xEaXJlY3RpdmVzIHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcyhjb25zdCBI
VFRQSGVhZGVyTWFwJik7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAxODIw
NTkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uY3Bw
OjE4MjA1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQ2FjaGVWYWxpZGF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZVZhbGlkYXRpb24uaCIKKworI2luY2x1
ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhl
c2UgcmVzcG9uc2UgaGVhZGVycyBhcmUgbm90IGNvcGllZCBmcm9tIGEgcmV2YWxpZGF0ZWQgcmVz
cG9uc2UgdG8gdGhlCisvLyBjYWNoZWQgcmVzcG9uc2UgaGVhZGVycy4gRm9yIGNvbXBhdGliaWxp
dHksIHRoaXMgbGlzdCBpcyBiYXNlZCBvbiBDaHJvbWl1bSdzCisvLyBuZXQvaHR0cC9odHRwX3Jl
c3BvbnNlX2hlYWRlcnMuY2MuCitjb25zdCBjaGFyKiBjb25zdCBoZWFkZXJzVG9JZ25vcmVBZnRl
clJldmFsaWRhdGlvbltdID0geworICAgICJhbGxvdyIsCisgICAgImNvbm5lY3Rpb24iLAorICAg
ICJldGFnIiwKKyAgICAiZXhwaXJlcyIsCisgICAgImtlZXAtYWxpdmUiLAorICAgICJsYXN0LW1v
ZGlmaWVkIgorICAgICJwcm94eS1hdXRoZW50aWNhdGUiLAorICAgICJwcm94eS1jb25uZWN0aW9u
IiwKKyAgICAidHJhaWxlciIsCisgICAgInRyYW5zZmVyLWVuY29kaW5nIiwKKyAgICAidXBncmFk
ZSIsCisgICAgInd3dy1hdXRoZW50aWNhdGUiLAorICAgICJ4LWZyYW1lLW9wdGlvbnMiLAorICAg
ICJ4LXhzcy1wcm90ZWN0aW9uIiwKK307CisKKy8vIFNvbWUgaGVhZGVyIHByZWZpeGVzIG1lYW4g
IkRvbid0IGNvcHkgdGhpcyBoZWFkZXIgZnJvbSBhIDMwNCByZXNwb25zZS4iLgorLy8gUmF0aGVy
IHRoYW4gbGlzdGluZyBhbGwgdGhlIHJlbGV2YW50IGhlYWRlcnMsIHdlIGNhbiBjb25zb2xpZGF0
ZSB0aGVtIGludG8KKy8vIHRoaXMgbGlzdCwgYWxzbyBncmFiYmVkIGZyb20gQ2hyb21pdW0ncyBu
ZXQvaHR0cC9odHRwX3Jlc3BvbnNlX2hlYWRlcnMuY2MuCitjb25zdCBjaGFyKiBjb25zdCBoZWFk
ZXJQcmVmaXhlc1RvSWdub3JlQWZ0ZXJSZXZhbGlkYXRpb25bXSA9IHsKKyAgICAiY29udGVudC0i
LAorICAgICJ4LWNvbnRlbnQtIiwKKyAgICAieC13ZWJraXQtIgorfTsKKworc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZFVwZGF0ZUhlYWRlckFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFN0cmluZyYg
aGVhZGVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCho
ZWFkZXJzVG9JZ25vcmVBZnRlclJldmFsaWRhdGlvbik7IGkrKykgeworICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoaGVhZGVyLCBoZWFkZXJzVG9JZ25vcmVBZnRlclJldmFsaWRhdGlvbltp
XSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChoZWFkZXJQcmVmaXhlc1RvSWdub3JlQWZ0ZXJSZXZh
bGlkYXRpb24pOyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlci5zdGFydHNXaXRoKGhlYWRlclBy
ZWZpeGVzVG9JZ25vcmVBZnRlclJldmFsaWRhdGlvbltpXSwgZmFsc2UpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCB1cGRhdGVS
ZXNwb25zZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQoreworICAgIC8v
IFJGQzI2MTYgMTAuMy41CisgICAgLy8gVXBkYXRlIGNhY2hlZCBoZWFkZXJzIGZyb20gdGhlIDMw
NCByZXNwb25zZQorICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogdmFsaWRhdGluZ1Jlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkgeworICAgICAgICAvLyBFbnRpdHkgaGVhZGVycyBzaG91
bGQgbm90IGJlIHNlbnQgYnkgc2VydmVycyB3aGVuIGdlbmVyYXRpbmcgYSAzMDQKKyAgICAgICAg
Ly8gcmVzcG9uc2U7IG1pc2NvbmZpZ3VyZWQgc2VydmVycyBzZW5kIHRoZW0gYW55d2F5LiBXZSBz
aG91bGRuJ3QgYWxsb3cKKyAgICAgICAgLy8gc3VjaCBoZWFkZXJzIHRvIHVwZGF0ZSB0aGUgb3Jp
Z2luYWwgcmVxdWVzdC4gV2UnbGwgYmFzZSB0aGlzIG9uIHRoZQorICAgICAgICAvLyBsaXN0IGRl
ZmluZWQgYnkgUkZDMjYxNiA3LjEsIHdpdGggYSBmZXcgYWRkaXRpb25zIGZvciBleHRlbnNpb24g
aGVhZGVycworICAgICAgICAvLyB3ZSBjYXJlIGFib3V0LgorICAgICAgICBpZiAoIXNob3VsZFVw
ZGF0ZUhlYWRlckFmdGVyUmV2YWxpZGF0aW9uKGhlYWRlci5rZXkpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChoZWFkZXIua2V5LCBo
ZWFkZXIudmFsdWUpOworICAgIH0KK30KKworZG91YmxlIGNvbXB1dGVDdXJyZW50QWdlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBkb3VibGUgcmVzcG9uc2VUaW1lc3RhbXApCit7
CisgICAgLy8gUkZDMjYxNiAxMy4yLjMKKyAgICAvLyBObyBjb21wZW5zYXRpb24gZm9yIGxhdGVu
Y3kgYXMgdGhhdCBpcyBub3QgdGVycmlibHkgaW1wb3J0YW50IGluIHByYWN0aWNlCisgICAgZG91
YmxlIGRhdGVWYWx1ZSA9IHJlc3BvbnNlLmRhdGUoKTsKKyAgICBkb3VibGUgYXBwYXJlbnRBZ2Ug
PSBzdGQ6OmlzZmluaXRlKGRhdGVWYWx1ZSkgPyBzdGQ6Om1heCgwLiwgcmVzcG9uc2VUaW1lc3Rh
bXAgLSBkYXRlVmFsdWUpIDogMDsKKyAgICBkb3VibGUgYWdlVmFsdWUgPSByZXNwb25zZS5hZ2Uo
KTsKKyAgICBkb3VibGUgY29ycmVjdGVkUmVjZWl2ZWRBZ2UgPSBzdGQ6OmlzZmluaXRlKGFnZVZh
bHVlKSA/IHN0ZDo6bWF4KGFwcGFyZW50QWdlLCBhZ2VWYWx1ZSkgOiBhcHBhcmVudEFnZTsKKyAg
ICBkb3VibGUgcmVzaWRlbnRUaW1lID0gY3VycmVudFRpbWUoKSAtIHJlc3BvbnNlVGltZXN0YW1w
OworICAgIHJldHVybiBjb3JyZWN0ZWRSZWNlaXZlZEFnZSArIHJlc2lkZW50VGltZTsKK30KKwor
ZG91YmxlIGNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIGRvdWJsZSByZXNwb25zZVRpbWVzdGFtcCkKK3sKKyAgICBB
U1NFUlQocmVzcG9uc2UudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKTsKKyAgICAvLyBS
RkMyNjE2IDEzLjIuNAorICAgIGRvdWJsZSBtYXhBZ2VWYWx1ZSA9IHJlc3BvbnNlLmNhY2hlQ29u
dHJvbE1heEFnZSgpOworICAgIGlmIChzdGQ6OmlzZmluaXRlKG1heEFnZVZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIG1heEFnZVZhbHVlOworICAgIGRvdWJsZSBleHBpcmVzVmFsdWUgPSByZXNwb25z
ZS5leHBpcmVzKCk7CisgICAgZG91YmxlIGRhdGVWYWx1ZSA9IHJlc3BvbnNlLmRhdGUoKTsKKyAg
ICBkb3VibGUgY3JlYXRpb25UaW1lID0gc3RkOjppc2Zpbml0ZShkYXRlVmFsdWUpID8gZGF0ZVZh
bHVlIDogcmVzcG9uc2VUaW1lc3RhbXA7CisgICAgaWYgKHN0ZDo6aXNmaW5pdGUoZXhwaXJlc1Zh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGV4cGlyZXNWYWx1ZSAtIGNyZWF0aW9uVGltZTsKKyAgICBk
b3VibGUgbGFzdE1vZGlmaWVkVmFsdWUgPSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKKyAgICBp
ZiAoc3RkOjppc2Zpbml0ZShsYXN0TW9kaWZpZWRWYWx1ZSkpCisgICAgICAgIHJldHVybiAoY3Jl
YXRpb25UaW1lIC0gbGFzdE1vZGlmaWVkVmFsdWUpICogMC4xOworICAgIC8vIElmIG5vIGNhY2hl
IGhlYWRlcnMgYXJlIHByZXNlbnQsIHRoZSBzcGVjaWZpY2F0aW9uIGxlYXZlcyB0aGUgZGVjaXNp
b24gdG8gdGhlIFVBLiBPdGhlciBicm93c2VycyBzZWVtIHRvIG9wdCBmb3IgMC4KKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCB1cGRhdGVSZWRpcmVjdENoYWluU3RhdHVzKFJlZGlyZWN0Q2hhaW5D
YWNoZVN0YXR1cyYgcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAocmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLnN0YXR1
cyA9PSBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6Ok5vdENhY2hlZFJlZGlyZWN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9y
ZSgpIHx8IHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIHx8IHJlc3BvbnNl
LmNhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUoKSkgeworICAgICAgICByZWRpcmVj
dENoYWluQ2FjaGVTdGF0dXMuc3RhdHVzID0gUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpOb3RD
YWNoZWRSZWRpcmVjdGlvbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWRpcmVjdENo
YWluQ2FjaGVTdGF0dXMuc3RhdHVzID0gUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpDYWNoZWRS
ZWRpcmVjdGlvbjsKKyAgICBkb3VibGUgcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgp
OworICAgIC8vIFN0b3JlIHRoZSBuZWFyZXN0IGVuZCBvZiBjYWNoZSB2YWxpZGl0eSBkYXRlCisg
ICAgZG91YmxlIGVuZE9mVmFsaWRpdHkgPSByZXNwb25zZVRpbWVzdGFtcCArIGNvbXB1dGVGcmVz
aG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkocmVzcG9uc2UsIHJlc3BvbnNlVGltZXN0YW1wKSAt
IGNvbXB1dGVDdXJyZW50QWdlKHJlc3BvbnNlLCByZXNwb25zZVRpbWVzdGFtcCk7CisgICAgcmVk
aXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9mVmFsaWRpdHkgPSBzdGQ6Om1pbihyZWRpcmVjdENo
YWluQ2FjaGVTdGF0dXMuZW5kT2ZWYWxpZGl0eSwgZW5kT2ZWYWxpZGl0eSk7Cit9CisKK2Jvb2wg
cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyByZWRpcmVj
dENoYWluQ2FjaGVTdGF0dXMsIFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uT3JOb3QgcmV1c2VFeHBp
cmVkUmVkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChyZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMu
c3RhdHVzKSB7CisgICAgY2FzZSBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6Ok5vUmVkaXJlY3Rp
b246CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgUmVkaXJlY3RDaGFpbkNhY2hlU3Rh
dHVzOjpOb3RDYWNoZWRSZWRpcmVjdGlvbjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNh
c2UgUmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzOjpDYWNoZWRSZWRpcmVjdGlvbjoKKyAgICAgICAg
cmV0dXJuIHJldXNlRXhwaXJlZFJlZGlyZWN0aW9uIHx8IGN1cnJlbnRUaW1lKCkgPD0gcmVkaXJl
Y3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9mVmFsaWRpdHk7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgaXNDYWNoZUhl
YWRlclNlcGFyYXRvcihVQ2hhciBjKQoreworICAgIC8vIFNlZSBSRkMgMjYxNiwgU2VjdGlvbiAy
LjIKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICcoJzoKKyAgICBjYXNlICcpJzoKKyAgICBj
YXNlICc8JzoKKyAgICBjYXNlICc+JzoKKyAgICBjYXNlICdAJzoKKyAgICBjYXNlICcsJzoKKyAg
ICBjYXNlICc7JzoKKyAgICBjYXNlICc6JzoKKyAgICBjYXNlICdcXCc6CisgICAgY2FzZSAnIic6
CisgICAgY2FzZSAnLyc6CisgICAgY2FzZSAnWyc6CisgICAgY2FzZSAnXSc6CisgICAgY2FzZSAn
Pyc6CisgICAgY2FzZSAnPSc6CisgICAgY2FzZSAneyc6CisgICAgY2FzZSAnfSc6CisgICAgY2Fz
ZSAnICc6CisgICAgY2FzZSAnXHQnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NvbnRy
b2xDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA8ICcgJyB8fCBjID09IDEyNzsK
K30KKworaW5saW5lIFN0cmluZyB0cmltVG9OZXh0U2VwYXJhdG9yKGNvbnN0IFN0cmluZyYgc3Ry
KQoreworICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIHN0ci5maW5kKGlzQ2FjaGVIZWFkZXJT
ZXBhcmF0b3IpKTsKK30KKworc3RhdGljIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQoreworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiByZXN1bHQ7CisKKyAgICBjb25zdCBTdHJpbmcgc2Fm
ZUhlYWRlciA9IGhlYWRlci5yZW1vdmVDaGFyYWN0ZXJzKGlzQ29udHJvbENoYXJhY3Rlcik7Cisg
ICAgdW5zaWduZWQgbWF4ID0gc2FmZUhlYWRlci5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwb3Mg
PSAwOworICAgIHdoaWxlIChwb3MgPCBtYXgpIHsKKyAgICAgICAgc2l6ZV90IG5leHRDb21tYVBv
c2l0aW9uID0gc2FmZUhlYWRlci5maW5kKCcsJywgcG9zKTsKKyAgICAgICAgc2l6ZV90IG5leHRF
cXVhbFNpZ25Qb3NpdGlvbiA9IHNhZmVIZWFkZXIuZmluZCgnPScsIHBvcyk7CisgICAgICAgIGlm
IChuZXh0RXF1YWxTaWduUG9zaXRpb24gPT0gbm90Rm91bmQgJiYgbmV4dENvbW1hUG9zaXRpb24g
PT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIC8vIEFkZCBsYXN0IGRpcmVjdGl2ZSB0byBtYXAg
d2l0aCBlbXB0eSBzdHJpbmcgYXMgdmFsdWUKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIodHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVhZGVyLnN1YnN0cmluZyhwb3Ms
IG1heCAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpLCAiIikpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24gIT0gbm90
Rm91bmQgJiYgKG5leHRDb21tYVBvc2l0aW9uIDwgbmV4dEVxdWFsU2lnblBvc2l0aW9uIHx8IG5l
eHRFcXVhbFNpZ25Qb3NpdGlvbiA9PSBub3RGb3VuZCkpIHsKKyAgICAgICAgICAgIC8vIEFkZCBk
aXJlY3RpdmUgdG8gbWFwIHdpdGggZW1wdHkgc3RyaW5nIGFzIHZhbHVlCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHRyaW1Ub05leHRTZXBhcmF0b3Ioc2FmZUhlYWRl
ci5zdWJzdHJpbmcocG9zLCBuZXh0Q29tbWFQb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0ZVNwYWNl
KCkpLCAiIikpOworICAgICAgICAgICAgcG9zICs9IG5leHRDb21tYVBvc2l0aW9uIC0gcG9zICsg
MTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIEdldCBkaXJl
Y3RpdmUgbmFtZSwgcGFyc2UgcmlnaHQgaGFuZCBzaWRlIG9mIGVxdWFsIHNpZ24sIHRoZW4gYWRk
IHRvIG1hcAorICAgICAgICBTdHJpbmcgZGlyZWN0aXZlID0gdHJpbVRvTmV4dFNlcGFyYXRvcihz
YWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAtIHBvcykuc3Ry
aXBXaGl0ZVNwYWNlKCkpOworICAgICAgICBwb3MgKz0gbmV4dEVxdWFsU2lnblBvc2l0aW9uIC0g
cG9zICsgMTsKKworICAgICAgICBTdHJpbmcgdmFsdWUgPSBzYWZlSGVhZGVyLnN1YnN0cmluZyhw
b3MsIG1heCAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIGlmICh2YWx1ZVswXSA9
PSAnIicpIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIHF1b3RlZCBzdHJpbmcKKyAg
ICAgICAgICAgIHNpemVfdCBuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9IHZhbHVlLmZpbmQoJyIn
LCAxKTsKKyAgICAgICAgICAgIGlmIChuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9PSBub3RGb3Vu
ZCkgeworICAgICAgICAgICAgICAgIC8vIFBhcnNlIGVycm9yOyBqdXN0IHVzZSB0aGUgcmVzdCBh
cyB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGRpcmVjdGl2ZSwgdHJpbVRvTmV4dFNlcGFyYXRvcih2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUu
bGVuZ3RoKCkgLSAxKS5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVl
IGFzIGEgcXVvdGVkIHN0cmluZyB3aXRob3V0IHF1b3RlcworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihkaXJlY3RpdmUsIHZhbHVlLnN1YnN0cmluZygxLCBuZXh0RG91
YmxlUXVvdGVQb3NpdGlvbiAtIDEpLnN0cmlwV2hpdGVTcGFjZSgpKSk7CisgICAgICAgICAgICBw
b3MgKz0gKHNhZmVIZWFkZXIuZmluZCgnIicsIHBvcykgLSBwb3MpICsgbmV4dERvdWJsZVF1b3Rl
UG9zaXRpb24gKyAxOworICAgICAgICAgICAgLy8gTW92ZSBwYXN0IG5leHQgY29tbWEsIGlmIHRo
ZXJlIGlzIG9uZQorICAgICAgICAgICAgc2l6ZV90IG5leHRDb21tYVBvc2l0aW9uMiA9IHNhZmVI
ZWFkZXIuZmluZCgnLCcsIHBvcyk7CisgICAgICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24y
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIFBhcnNlIGVy
cm9yIGlmIHRoZXJlIGlzIGFueXRoaW5nIGxlZnQgd2l0aCBubyBjb21tYQorICAgICAgICAgICAg
cG9zICs9IG5leHRDb21tYVBvc2l0aW9uMiAtIHBvcyArIDE7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgdmFsdWUgaXMgYSB0b2tlbiB1bnRpbCB0aGUg
bmV4dCBjb21tYQorICAgICAgICBzaXplX3QgbmV4dENvbW1hUG9zaXRpb24yID0gdmFsdWUuZmlu
ZCgnLCcpOworICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24yID09IG5vdEZvdW5kKSB7Cisg
ICAgICAgICAgICAvLyBUaGUgcmVzdCBpcyB0aGUgdmFsdWU7IG5vIGNoYW5nZSB0byB2YWx1ZSBu
ZWVkZWQKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZGlyZWN0aXZl
LCB0cmltVG9OZXh0U2VwYXJhdG9yKHZhbHVlKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZGVsaW1pdGVkIGJ5IHRoZSBu
ZXh0IGNvbW1hCisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZGlyZWN0aXZl
LCB0cmltVG9OZXh0U2VwYXJhdG9yKHZhbHVlLnN1YnN0cmluZygwLCBuZXh0Q29tbWFQb3NpdGlv
bjIpLnN0cmlwV2hpdGVTcGFjZSgpKSkpOworICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmlu
ZCgnLCcsIHBvcykgLSBwb3MpICsgMTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Q2FjaGVDb250cm9sRGlyZWN0aXZlcyBwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMoY29uc3Qg
SFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3sKKyAgICBDYWNoZUNvbnRyb2xEaXJlY3RpdmVzIHJl
c3VsdDsKKworICAgIFN0cmluZyBjYWNoZUNvbnRyb2xWYWx1ZSA9IGhlYWRlcnMuZ2V0KEhUVFBI
ZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2wpOworICAgIGlmICghY2FjaGVDb250cm9sVmFsdWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGF1dG8gZGlyZWN0aXZlcyA9IHBhcnNlQ2FjaGVIZWFkZXIoY2Fj
aGVDb250cm9sVmFsdWUpOworCisgICAgICAgIHNpemVfdCBkaXJlY3RpdmVzU2l6ZSA9IGRpcmVj
dGl2ZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpcmVjdGl2ZXNT
aXplOyArK2kpIHsKKyAgICAgICAgICAgIC8vIFJGQzI2MTYgMTQuOS4xOiBBIG5vLWNhY2hlIGRp
cmVjdGl2ZSB3aXRoIGEgdmFsdWUgaXMgb25seSBtZWFuaW5nZnVsIGZvciBwcm94eSBjYWNoZXMu
CisgICAgICAgICAgICAvLyBJdCBzaG91bGQgYmUgaWdub3JlZCBieSBhIGJyb3dzZXIgbGV2ZWwg
Y2FjaGUuCisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5m
aXJzdCwgIm5vLWNhY2hlIikgJiYgZGlyZWN0aXZlc1tpXS5zZWNvbmQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5ub0NhY2hlID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGRpcmVjdGl2ZXNbaV0uZmlyc3QsICJuby1zdG9yZSIpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5ub1N0b3JlID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGRpcmVjdGl2ZXNbaV0uZmlyc3QsICJtdXN0LXJldmFsaWRhdGUi
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQubXVzdFJldmFsaWRhdGUgPSB0cnVlOworICAgICAg
ICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgIm1h
eC1hZ2UiKSkgeworICAgICAgICAgICAgICAgIGlmICghc3RkOjppc25hbihyZXN1bHQubWF4QWdl
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBtYXgtYWdlIGRpcmVjdGl2ZSB3aW5z
IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvbmVzLgorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCBvazsKKyAgICAgICAg
ICAgICAgICBkb3VibGUgbWF4QWdlID0gZGlyZWN0aXZlc1tpXS5zZWNvbmQudG9Eb3VibGUoJm9r
KTsKKyAgICAgICAgICAgICAgICBpZiAob2spCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXhBZ2UgPSBtYXhBZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXJlc3VsdC5ub0NhY2hlKSB7CisgICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hl
CisgICAgICAgIC8vIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1j
b250cm9sOiBuby1jYWNoZQorICAgICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUg
dmFsdWUsIGl0IGlzIG5vdCBpbXBvcnRhbnQKKyAgICAgICAgU3RyaW5nIHByYWdtYVZhbHVlID0g
aGVhZGVycy5nZXQoSFRUUEhlYWRlck5hbWU6OlByYWdtYSk7CisKKyAgICAgICAgcmVzdWx0Lm5v
Q2FjaGUgPSBwcmFnbWFWYWx1ZS5jb250YWlucygibm8tY2FjaGUiLCBmYWxzZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9DYWNoZVZhbGlkYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5oCShyZXZpc2lvbiAxODIwNTkpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVZhbGlkYXRpb24uaDoxODIwNTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0NhY2hlVmFsaWRhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhY2hl
VmFsaWRhdGlvbl9oCisjZGVmaW5lIENhY2hlVmFsaWRhdGlvbl9oCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSFRUUEhlYWRlck1hcDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisK
K3N0cnVjdCBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMgeworICAgIGVudW0gU3RhdHVzIHsKKyAg
ICAgICAgTm9SZWRpcmVjdGlvbiwKKyAgICAgICAgTm90Q2FjaGVkUmVkaXJlY3Rpb24sCisgICAg
ICAgIENhY2hlZFJlZGlyZWN0aW9uCisgICAgfTsKKyAgICBSZWRpcmVjdENoYWluQ2FjaGVTdGF0
dXMoKQorICAgICAgICA6IHN0YXR1cyhOb1JlZGlyZWN0aW9uKQorICAgICAgICAsIGVuZE9mVmFs
aWRpdHkoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSkKKyAgICB7IH0KKyAgICBT
dGF0dXMgc3RhdHVzOworICAgIGRvdWJsZSBlbmRPZlZhbGlkaXR5OworfTsKKworV0VCQ09SRV9F
WFBPUlQgZG91YmxlIGNvbXB1dGVDdXJyZW50QWdlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBk
b3VibGUgcmVzcG9uc2VUaW1lc3RhbXApOworV0VCQ09SRV9FWFBPUlQgZG91YmxlIGNvbXB1dGVG
cmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1pbHkoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGRv
dWJsZSByZXNwb25zZVRpbWVzdGFtcCk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVJlc3Bv
bnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9uKFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVSZWRpcmVjdENoYWluU3RhdHVzKFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cyYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKworZW51bSBSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbk9yTm90
IHsgRG9Ob3RSZXVzZUV4cGlyZWRSZWRpcmVjdGlvbiwgUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24g
fTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgcmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKFJlZGlyZWN0
Q2hhaW5DYWNoZVN0YXR1cywgUmV1c2VFeHBpcmVkUmVkaXJlY3Rpb25Pck5vdCk7CisKK3N0cnVj
dCBDYWNoZUNvbnRyb2xEaXJlY3RpdmVzIHsKKyAgICBkb3VibGUgbWF4QWdlIHsgc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSB9OworICAgIGJvb2wgbm9DYWNoZSB7IGZh
bHNlIH07CisgICAgYm9vbCBub1N0b3JlIHsgZmFsc2UgfTsKKyAgICBib29sIG11c3RSZXZhbGlk
YXRlIHsgZmFsc2UgfTsKK307CitXRUJDT1JFX0VYUE9SVCBDYWNoZUNvbnRyb2xEaXJlY3RpdmVz
IHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcyhjb25zdCBIVFRQSGVhZGVyTWFwJik7CisKK30K
KworI2VuZGlmCg==
</data>
<flag name="review"
          id="274393"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>