<?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>92381</bug_id>
          
          <creation_ts>2012-07-26 07:18:35 -0700</creation_ts>
          <short_desc>Import the Android Test Runner scripts</short_desc>
          <delta_ts>2012-08-08 11:12:59 -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>WONTFIX</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>84867</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Beverloo">peter</reporter>
          <assigned_to name="Peter Beverloo">peter</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>679297</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-26 07:18:35 -0700</bug_when>
    <thetext>Import the Android Test Runner scripts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679313</commentid>
    <comment_count>1</comment_count>
      <attachid>154653</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-26 07:36:00 -0700</bug_when>
    <thetext>Created attachment 154653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679318</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 07:40:43 -0700</bug_when>
    <thetext>Attachment 154653 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1
Tools/Scripts/webkitpy/thirdparty/android_testrunner/am_instrument_parser.py:34:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/thirdparty/android_testrunner/am_instrument_parser.py:69:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/thirdparty/android_testrunner/logger.py:67:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/thirdparty/android_testrunner/logger.py:86:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/thirdparty/android_testrunner/logger.py:91:  trailing whitespace  [pep8/W291] [5]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679320</commentid>
    <comment_count>3</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-26 07:41:12 -0700</bug_when>
    <thetext>To keep the testing procedures independent of port-specific dependencies, import this suite. There are no local modifications, as the README file states.

Chromium uses these scripts as well. The webkitpy/common/android/ scripts will be more of a convenience wrapper around it, i.e. to get a list of devices (also for sharding) and handling common operations safely.

http://src.chromium.org/viewvc/chrome/trunk/src/third_party/android_testrunner/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679375</commentid>
    <comment_count>4</comment_count>
      <attachid>154653</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-26 08:48:31 -0700</bug_when>
    <thetext>Comment on attachment 154653
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=154653&amp;action=review

&gt; Tools/Scripts/webkitpy/thirdparty/android_testrunner/LICENSE:4
&gt; +                                 Apache License
&gt; +                           Version 2.0, January 2004
&gt; +                        http://www.apache.org/licenses/

I don&apos;t think the Apache license is allowed in WebKit.  We&apos;re allowed to use LGPL 2.1, BSD, and MIT (because MIT is essentially the same as BSD).

Typically when we want to use third party Python code that can&apos;t be stored in svn.webkit.org we use autoinstall to download the code on the client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679376</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-26 08:50:17 -0700</bug_when>
    <thetext>It&apos;s also possible to use DEPS to bring in the code, but if we do that, we need to make sure that webkitpy continues to work for folks who don&apos;t have gclient installed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679391</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-07-26 09:06:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 154653 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154653&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/thirdparty/android_testrunner/LICENSE:4
&gt; &gt; +                                 Apache License
&gt; &gt; +                           Version 2.0, January 2004
&gt; &gt; +                        http://www.apache.org/licenses/
&gt; 
&gt; I don&apos;t think the Apache license is allowed in WebKit.  We&apos;re allowed to use LGPL 2.1, BSD, and MIT (because MIT is essentially the same as BSD).
&gt; 
&gt; Typically when we want to use third party Python code that can&apos;t be stored in svn.webkit.org we use autoinstall to download the code on the client.

I was unsure of the licensing issue. I asked Steve Block whether the licenses were compatible, which they seem to be, but this of course is independent of WebKit&apos;s regulations. I couldn&apos;t find a clear reference about our own licenses for third-party code.

I&apos;ll look into using autoinstall. Thank you for that suggestion. Using Chromium&apos;s DEPS for pulling in the Python code would mean that the Python code will be included in Source/WebKit/chromium/ (I don&apos;t think we should pull in port-specific DEPS in non-port specific directories). It actually already is available there as Source/WebKit/chromium/third_party/android_testrunner/.

The tricky thing there is, as you say, making sure that it also works with non-Chromium ports using this code. I&apos;m not sure how we can achieve that, as this is critical in communicating with the device..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679401</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-26 09:15:57 -0700</bug_when>
    <thetext>&gt; The tricky thing there is, as you say, making sure that it also works with non-Chromium ports using this code. I&apos;m not sure how we can achieve that, as this is critical in communicating with the device..

If this is only going to be used by Chromium for now, we just need to make sure it doesn&apos;t break other webkitpy uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690526</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-08-08 11:12:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; The tricky thing there is, as you say, making sure that it also works with non-Chromium ports using this code. I&apos;m not sure how we can achieve that, as this is critical in communicating with the device..
&gt; 
&gt; If this is only going to be used by Chromium for now, we just need to make sure it doesn&apos;t break other webkitpy uses.

Ok. Closing this as invalid, we&apos;ll try a different approach.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154653</attachid>
            <date>2012-07-26 07:36:00 -0700</date>
            <delta_ts>2012-07-26 08:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92381-20120726153548.patch</filename>
            <type>text/plain</type>
            <size>53928</size>
            <attacher name="Peter Beverloo">peter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNzQyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTIwNmU2MjIyMjZjNDk2NGIwOGIyMTRlN2M5YzdlMmQ1
MGQ2YjRlNC4uNjc3NzUyODk1MTk2MmU3MDEzYTIyNDBiYmM1NmY5ODIzZjlkNTc1ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1
IEBACisyMDEyLTA3LTI2ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBJbXBvcnQgdGhlIEFuZHJvaWQgVGVzdCBSdW5uZXIgc2NyaXB0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIzODEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcG9ydHMgdGhlIEFu
ZHJvaWQgVGVzdCBSdW5uZXIgc2NyaXB0cyB0byBUb29scy9TY3JpcHRzL3dlYmtpdHB5LgorICAg
ICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSB0aGUgQ2hyb21pdW0gcG9ydCBmb3IgQW5kcm9pZCwg
YXMgYWxsIHRlc3RzIHdpbGwgYmUKKyAgICAgICAgcnVuIG9uIGRldmljZXMuIEFkZGl0aW9uYWwg
Y29kZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYWRiIGludGVyZmFjZQorICAgICAgICB3aWxs
IGJlIGFkZGVkIHRvIHdlYmtpdHB5L2NvbW1vbi9hbmRyb2lkLyBpbiBzdWJzZXF1ZW50IGNvbW1p
dHMuCisKKyAgICAgICAgVGhlIGxpY2Vuc2UgdXNlZCBmb3IgdGhpcyBjb2RlIGlzIHRoZSBBcGFj
aGUgbGljZW5zZSwgdmVyc2lvbiAyLjAuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hbmRyb2lkX3Rlc3RydW5uZXIvUkVBRE1FOiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVu
bmVyL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJk
cGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL2FkYl9pbnRlcmZhY2UucHk6IEFkZGVkLgorICAgICAg
ICAoQWRiSW50ZXJmYWNlKToKKyAgICAgICAgKEFkYkludGVyZmFjZS5mb3IpOgorICAgICAgICAo
QWRiSW50ZXJmYWNlLlNldEVtdWxhdG9yVGFyZ2V0KToKKyAgICAgICAgKEFkYkludGVyZmFjZS5T
ZXREZXZpY2VUYXJnZXQpOgorICAgICAgICAoQWRiSW50ZXJmYWNlLlNldFRhcmdldFNlcmlhbCk6
CisgICAgICAgIChBZGJJbnRlcmZhY2UuU2VuZENvbW1hbmQpOgorICAgICAgICAoQWRiSW50ZXJm
YWNlLlNlbmRTaGVsbENvbW1hbmQpOgorICAgICAgICAoQWRiSW50ZXJmYWNlLkJ1Z1JlcG9ydCk6
CisgICAgICAgIChBZGJJbnRlcmZhY2UuUHVzaCk6CisgICAgICAgIChBZGJJbnRlcmZhY2UuUHVs
bCk6CisgICAgICAgIChBZGJJbnRlcmZhY2UuRG9lc0ZpbGVFeGlzdCk6CisgICAgICAgIChBZGJJ
bnRlcmZhY2UuRW5hYmxlQWRiUm9vdCk6CisgICAgICAgIChBZGJJbnRlcmZhY2UuU3RhcnRJbnN0
cnVtZW50YXRpb25Gb3JQYWNrYWdlKToKKyAgICAgICAgKEFkYkludGVyZmFjZS5TdGFydEluc3Ry
dW1lbnRhdGlvbik6CisgICAgICAgIChBZGJJbnRlcmZhY2UuU3RhcnRJbnN0cnVtZW50YXRpb24u
b24pOgorICAgICAgICAoQWRiSW50ZXJmYWNlLlN0YXJ0SW5zdHJ1bWVudGF0aW9uTm9SZXN1bHRz
KToKKyAgICAgICAgKEFkYkludGVyZmFjZS5QcmV2aWV3SW5zdHJ1bWVudGF0aW9uQ29tbWFuZCk6
CisgICAgICAgIChBZGJJbnRlcmZhY2UuX0J1aWxkSW5zdHJ1bWVudGF0aW9uQ29tbWFuZCk6Cisg
ICAgICAgIChBZGJJbnRlcmZhY2UuX0J1aWxkSW5zdHJ1bWVudGF0aW9uQ29tbWFuZFBhdGgpOgor
ICAgICAgICAoQWRiSW50ZXJmYWNlLl9DcmVhdGVUcmFjZURpcik6CisgICAgICAgIChBZGJJbnRl
cmZhY2UuV2FpdEZvckRldmljZVBtKToKKyAgICAgICAgKEFkYkludGVyZmFjZS5XYWl0Rm9ySW5z
dHJ1bWVudGF0aW9uKToKKyAgICAgICAgKEFkYkludGVyZmFjZS5XYWl0Rm9yUHJvY2Vzcyk6Cisg
ICAgICAgIChBZGJJbnRlcmZhY2UuV2FpdEZvclByb2Nlc3NFbmQpOgorICAgICAgICAoQWRiSW50
ZXJmYWNlLl9XYWl0Rm9yU2hlbGxDb21tYW5kQ29udGVudHMpOgorICAgICAgICAoQWRiSW50ZXJm
YWNlLldhaXRGb3JCb290Q29tcGxldGUpOgorICAgICAgICAoQWRiSW50ZXJmYWNlLlN5bmMpOgor
ICAgICAgICAoQWRiSW50ZXJmYWNlLkdldFNlcmlhbE51bWJlcik6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9hbV9pbnN0cnVtZW50X3Bh
cnNlci5weTogQWRkZWQuCisgICAgICAgIChQYXJzZUFtSW5zdHJ1bWVudE91dHB1dCk6CisgICAg
ICAgIChfUGFyc2VJbnN0cnVtZW50YXRpb25GaW5pc2hlZEJ1bmRsZSk6CisgICAgICAgIChUZXN0
UmVzdWx0KToKKyAgICAgICAgKFRlc3RSZXN1bHQudGhhdCk6CisgICAgICAgIChUZXN0UmVzdWx0
Ll9faW5pdF9fKToKKyAgICAgICAgKFRlc3RSZXN1bHQuR2V0VGVzdE5hbWUpOgorICAgICAgICAo
VGVzdFJlc3VsdC5HZXRTdGF0dXNDb2RlKToKKyAgICAgICAgKFRlc3RSZXN1bHQuR2V0RmFpbHVy
ZVJlYXNvbik6CisgICAgICAgIChUZXN0UmVzdWx0LkdldFJlc3VsdEZpZWxkcyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9lcnJvcnMu
cHk6IEFkZGVkLgorICAgICAgICAoTXNnRXhjZXB0aW9uKToKKyAgICAgICAgKE1zZ0V4Y2VwdGlv
bi5fX2luaXRfXyk6CisgICAgICAgIChXYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yKToKKyAg
ICAgICAgKERldmljZVVucmVzcG9uc2l2ZUVycm9yKToKKyAgICAgICAgKEluc3RydW1lbnRhdGlv
bkVycm9yKToKKyAgICAgICAgKEFib3J0RXJyb3IpOgorICAgICAgICAoUGFyc2VFcnJvcik6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9s
b2dnZXIucHk6IEFkZGVkLgorICAgICAgICAoSW5pdCk6CisgICAgICAgIChHZXRMb2dGaWxlUGF0
aCk6CisgICAgICAgIChMb2cpOgorICAgICAgICAoX1dyaXRlTG9nKToKKyAgICAgICAgKF9QcmVw
ZW5kVGltZVN0YW1wKToKKyAgICAgICAgKFNpbGVudExvZyk6CisgICAgICAgIChTZXRWZXJib3Nl
KToKKyAgICAgICAgKFNldFRpbWVzdGFtcExvZ2dpbmcpOgorICAgICAgICAobWFpbik6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9ydW5f
Y29tbWFuZC5weTogQWRkZWQuCisgICAgICAgIChTZXRBYm9ydE9uRXJyb3IpOgorICAgICAgICAo
UnVuQ29tbWFuZCk6CisgICAgICAgIChSdW5PbmNlKToKKyAgICAgICAgKFJ1bk9uY2UuUnVuKToK
KyAgICAgICAgKFJ1bkhvc3RDb21tYW5kKToKKyAgICAgICAgKEhhc1ZhbGdyaW5kKToKKwogMjAx
Mi0wNy0yNiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBzcGVjdWxhdGl2ZSBNYWMgYnVpbGRmaXggYWZ0ZXIgcjEyMzcyOSAtIDJuZCBh
dHRlbXB0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2Fu
ZHJvaWRfdGVzdHJ1bm5lci9MSUNFTlNFIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBh
cnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2NDU2OTU2NzMzNDll
Mzk0N2U4ZTVhZTQyMzMyZDBhYzMxNjRjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL0xJQ0VOU0UKQEAgLTAs
MCArMSwyMDIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExp
Y2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIw
MDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl
cy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQg
RElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hh
bGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAor
ICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5
IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29w
eXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0
IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRp
dHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAg
ICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFy
ZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBw
dXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRo
ZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlv
biBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisg
ICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkg
b3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZp
Y2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIp
IHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNp
bmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2Ui
IGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRp
b25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2Ug
Y29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxl
cy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBm
cm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEg
U291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVk
IG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJz
aW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhl
IHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBm
b3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEK
KyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0
byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4
IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmss
IHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBv
biAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRp
dG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9k
aWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3Jr
IG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwg
RGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAg
ICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRo
ZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhl
cmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRo
b3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3Jr
IGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBv
ciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAg
c3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNv
cHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkg
YXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93
bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAg
ICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21t
dW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRp
dmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9u
IGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAor
ICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Ig
b24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNj
dXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11
bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAg
IGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBD
b250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3Ig
YW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdo
b20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAg
ICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3Jh
bnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRp
b25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50
cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5v
LWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vu
c2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJs
aWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0
ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3Ig
T2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRv
IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENv
bnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3
aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUK
KyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2Ug
dG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBv
cnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxp
Y2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAg
ICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkg
dGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0
aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBD
b250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0
ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jv
c3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUg
V29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29y
ayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmlu
Z2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVu
ZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMg
b2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1
dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAg
ICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBv
ciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBm
b3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRo
ZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNl
bnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0
byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hh
bmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUg
U291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBk
aXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAg
ICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywK
KyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRv
IGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAg
ICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBv
ZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3Mg
dGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNv
cHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGlu
IHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90Cisg
ICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4g
YXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBh
IE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBE
ZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9j
dW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsg
b3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRp
dmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90
aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJ
Q0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAg
ICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1
dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3Ug
ZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhl
IE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNo
IGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAg
ICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3Vy
IG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAg
IG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNv
bmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9m
IFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdv
cmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBh
bmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAg
ICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNz
aW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndp
c2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBp
bmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwg
YmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2Us
IHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdp
dGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBt
b2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQg
eW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNo
IENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5v
dCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1h
cmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAg
ICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBp
biBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2lu
ZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2Yg
V2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAor
ICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91
dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRM
RSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisg
ICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBk
ZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3Ry
aWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3
aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisg
ICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxl
Z2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Up
LCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2Vu
dCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJl
CisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwg
aW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRh
bWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlz
IExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAg
IFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBn
b29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVu
Y3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3Ig
bG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2Vk
IG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBX
YXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAg
ICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2Ug
dG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBw
b3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGln
YXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2Uu
IEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5
CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0
eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25s
eSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNo
IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBi
eSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29u
CisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFs
IGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVO
RElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAg
ICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBm
b2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xv
c2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRp
ZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAg
VGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29t
bWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBh
CisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUg
aW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmln
aHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1w
YXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQg
b3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90
ZXN0cnVubmVyL1JFQURNRSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hbmRy
b2lkX3Rlc3RydW5uZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MmMzNzNhZjNmMGVjZWY0ZmQ4NTg0
ODNiMGQ4MmJmNzIzNjhkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL1JFQURNRQpAQCAtMCwwICsxLDI3IEBA
CitOYW1lOiBBbmRyb2lkIFRlc3QgcnVubmVyIHNjcmlwdAorVVJMOiBodHRwOi8vc291cmNlLmFu
ZHJvaWQuY29tCitWZXJzaW9uOiAzLjEuNAorTGljZW5zZTogQXBhY2hlIFZlcnNpb24gMi4wCitT
ZWN1cml0eSBDcml0aWNhbDogbm8KKworRGVzY3JpcHRpb246CitUaGlzIHBhY2thZ2UgaXMgdGhl
IHNjcmlwdHMgdXNlZCB0byBydW4gdGhlIHVuaXQgdGVzdCBmb3IgQW5kcm9pZCBhbmQgZnJvbQor
QW5kcm9pZCBHaW5nZXJicmVhZC4KKworTG9jYWwgTW9kaWZpY2F0aW9uczoKK1RoZXJlIGFyZSBu
byBsb2NhbCBtb2RpZmljYXRpb25zLCBhbGwgZmlsZXMgd2VyZSBjb3BpZWQgZnJvbQorPGFuZHJv
aWRfZ2luZ2VyYnJlYWRfdHJlZT4vZGV2ZWxvcG1lbnQvdGVzdHJ1bm5lci8KKworSGVyZSBpcyB0
aGUgZGV0YWlsIHN0ZXBzCisxLiBDaGVja291dCBBbmRyb2lkIHNvdXJjZSBjb2RlCisKKyQgcmVw
byBpbml0IC11IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvcGxhdGZvcm0vbWFuaWZlc3Qu
Z2l0IC1iIGdpbmdlcmJyZWFkCiskIHJlcG8gc3luYworJCBjZCBkZXZlbG9wbWVudAorJCBnaXQg
cmVzZXQgLS1oYXJkIDc2ZjYzNTUxZDM2YjFkZTYzYzYzZjM1N2U1ZjA2NDZlZDhjMzA2YmIKKwor
Mi4gQ29weSB0aGUgcmVsYXRlZCBmaWxlcyBmcm9tCisgICA8YW5kcm9pZF9naW5nZXJicmVhZF90
cmVlPi9kZXZlbG9wbWVudC90ZXN0cnVubmVyLworCitNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBm
b3VuZCBpbgoraHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9zb3VyY2UvZG93bmxvYWRpbmcuaHRt
bApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRf
dGVzdHJ1bm5lci9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9hbmRyb2lkX3Rlc3RydW5uZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY2NWJlZTViYjc3
ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hbmRyb2lkX3Rlc3RydW5uZXIvX19pbml0X18ucHkK
QEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL2FkYl9pbnRlcmZhY2UucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL2FkYl9pbnRlcmZh
Y2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTkyOGM3M2E4ZTZiYTdjNDFjNGE3MjVkMTk4OGY2MDQ0ZGZlMDgy
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9h
bmRyb2lkX3Rlc3RydW5uZXIvYWRiX2ludGVyZmFjZS5weQpAQCAtMCwwICsxLDUwNyBAQAorIyEv
dXNyL2Jpbi9weXRob24yLjQKKyMKKyMKKyMgQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKworIiIiUHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHdpdGggdGhl
IGRldmljZSB2aWEgdGhlIGFkYiBjb21tYW5kLgorCitBc3N1bWVzIGFkYiBiaW5hcnkgaXMgY3Vy
cmVudGx5IG9uIHN5c3RlbSBwYXRoLgorIiIiCisjIFB5dGhvbiBpbXBvcnRzCitpbXBvcnQgb3MK
K2ltcG9ydCBzdHJpbmcKK2ltcG9ydCB0aW1lCisKKyMgbG9jYWwgaW1wb3J0cworaW1wb3J0IGFt
X2luc3RydW1lbnRfcGFyc2VyCitpbXBvcnQgZXJyb3JzCitpbXBvcnQgbG9nZ2VyCitpbXBvcnQg
cnVuX2NvbW1hbmQKKworCitjbGFzcyBBZGJJbnRlcmZhY2U6CisgICIiIkhlbHBlciBjbGFzcyBm
b3IgY29tbXVuaWNhdGluZyB3aXRoIEFuZHJvaWQgZGV2aWNlIHZpYSBhZGIuIiIiCisKKyAgIyBh
cmd1bWVudCB0byBwYXNzIHRvIGFkYiwgdG8gZGlyZWN0IGNvbW1hbmQgdG8gc3BlY2lmaWMgZGV2
aWNlCisgIF90YXJnZXRfYXJnID0gIiIKKworICBERVZJQ0VfVFJBQ0VfRElSID0gIi9kYXRhL3Rl
c3RfcmVzdWx0cy8iCisKKyAgZGVmIFNldEVtdWxhdG9yVGFyZ2V0KHNlbGYpOgorICAgICIiIkRp
cmVjdCBhbGwgZnV0dXJlIGNvbW1hbmRzIHRvIHRoZSBvbmx5IHJ1bm5pbmcgZW11bGF0b3IuIiIi
CisgICAgc2VsZi5fdGFyZ2V0X2FyZyA9ICItZSIKKworICBkZWYgU2V0RGV2aWNlVGFyZ2V0KHNl
bGYpOgorICAgICIiIkRpcmVjdCBhbGwgZnV0dXJlIGNvbW1hbmRzIHRvIHRoZSBvbmx5IGNvbm5l
Y3RlZCBVU0IgZGV2aWNlLiIiIgorICAgIHNlbGYuX3RhcmdldF9hcmcgPSAiLWQiCisKKyAgZGVm
IFNldFRhcmdldFNlcmlhbChzZWxmLCBzZXJpYWwpOgorICAgICIiIkRpcmVjdCBhbGwgZnV0dXJl
IGNvbW1hbmRzIHRvIEFuZHJvaWQgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIHNlcmlhbC4iIiIKKyAg
ICBzZWxmLl90YXJnZXRfYXJnID0gIi1zICVzIiAlIHNlcmlhbAorCisgIGRlZiBTZW5kQ29tbWFu
ZChzZWxmLCBjb21tYW5kX3N0cmluZywgdGltZW91dF90aW1lPTIwLCByZXRyeV9jb3VudD0zKToK
KyAgICAiIiJTZW5kIGEgY29tbWFuZCB2aWEgYWRiLgorCisgICAgQXJnczoKKyAgICAgIGNvbW1h
bmRfc3RyaW5nOiBhZGIgY29tbWFuZCB0byBydW4KKyAgICAgIHRpbWVvdXRfdGltZTogbnVtYmVy
IG9mIHNlY29uZHMgdG8gd2FpdCBmb3IgY29tbWFuZCB0byByZXNwb25kIGJlZm9yZQorICAgICAg
ICByZXRyeWluZworICAgICAgcmV0cnlfY291bnQ6IG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBj
b21tYW5kIGJlZm9yZSByYWlzaW5nCisgICAgICAgIFdhaXRGb3JSZXNwb25zZVRpbWVkT3V0RXJy
b3IKKyAgICBSZXR1cm5zOgorICAgICAgc3RyaW5nIG91dHB1dCBvZiBjb21tYW5kCisKKyAgICBS
YWlzZXM6CisgICAgICBXYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yIGlmIGRldmljZSBkb2Vz
IG5vdCByZXNwb25kIHRvIGNvbW1hbmQgd2l0aGluIHRpbWUKKyAgICAiIiIKKyAgICBhZGJfY21k
ID0gImFkYiAlcyAlcyIgJSAoc2VsZi5fdGFyZ2V0X2FyZywgY29tbWFuZF9zdHJpbmcpCisgICAg
bG9nZ2VyLlNpbGVudExvZygiYWJvdXQgdG8gcnVuICVzIiAlIGFkYl9jbWQpCisgICAgcmV0dXJu
IHJ1bl9jb21tYW5kLlJ1bkNvbW1hbmQoYWRiX2NtZCwgdGltZW91dF90aW1lPXRpbWVvdXRfdGlt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeV9jb3VudD1yZXRyeV9j
b3VudCkKKworICBkZWYgU2VuZFNoZWxsQ29tbWFuZChzZWxmLCBjbWQsIHRpbWVvdXRfdGltZT0y
MCwgcmV0cnlfY291bnQ9Myk6CisgICAgIiIiU2VuZCBhIGFkYiBzaGVsbCBjb21tYW5kLgorCisg
ICAgQXJnczoKKyAgICAgIGNtZDogYWRiIHNoZWxsIGNvbW1hbmQgdG8gcnVuCisgICAgICB0aW1l
b3V0X3RpbWU6IG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGNvbW1hbmQgdG8gcmVzcG9u
ZCBiZWZvcmUKKyAgICAgICAgcmV0cnlpbmcKKyAgICAgIHJldHJ5X2NvdW50OiBudW1iZXIgb2Yg
dGltZXMgdG8gcmV0cnkgY29tbWFuZCBiZWZvcmUgcmFpc2luZworICAgICAgICBXYWl0Rm9yUmVz
cG9uc2VUaW1lZE91dEVycm9yCisKKyAgICBSZXR1cm5zOgorICAgICAgc3RyaW5nIG91dHB1dCBv
ZiBjb21tYW5kCisKKyAgICBSYWlzZXM6CisgICAgICBXYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVy
cm9yOiBpZiBkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBjb21tYW5kCisgICAgIiIiCisgICAg
cmV0dXJuIHNlbGYuU2VuZENvbW1hbmQoInNoZWxsICVzIiAlIGNtZCwgdGltZW91dF90aW1lPXRp
bWVvdXRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeV9jb3VudD1yZXRy
eV9jb3VudCkKKworICBkZWYgQnVnUmVwb3J0KHNlbGYsIHBhdGgpOgorICAgICIiIkR1bXBzIGFk
YiBidWdyZXBvcnQgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZSBwYXRoLgorCisgICAgQXJn
czoKKyAgICAgIHBhdGg6IFBhdGggb2YgdGhlIGZpbGUgd2hlcmUgYWRiIGJ1Z3JlcG9ydCBpcyBk
dW1wZWQgdG8uCisgICAgIiIiCisgICAgYnVnX291dHB1dCA9IHNlbGYuU2VuZFNoZWxsQ29tbWFu
ZCgiYnVncmVwb3J0IiwgdGltZW91dF90aW1lPTYwKQorICAgIGJ1Z3JlcG9ydF9maWxlID0gb3Bl
bihwYXRoLCAidyIpCisgICAgYnVncmVwb3J0X2ZpbGUud3JpdGUoYnVnX291dHB1dCkKKyAgICBi
dWdyZXBvcnRfZmlsZS5jbG9zZSgpCisKKyAgZGVmIFB1c2goc2VsZiwgc3JjLCBkZXN0KToKKyAg
ICAiIiJQdXNoZXMgdGhlIGZpbGUgc3JjIG9udG8gdGhlIGRldmljZSBhdCBkZXN0LgorCisgICAg
QXJnczoKKyAgICAgIHNyYzogZmlsZSBwYXRoIG9mIGhvc3QgZmlsZSB0byBwdXNoCisgICAgICBk
ZXN0OiBkZXN0aW5hdGlvbiBhYnNvbHV0ZSBmaWxlIHBhdGggb24gZGV2aWNlCisgICAgIiIiCisg
ICAgc2VsZi5TZW5kQ29tbWFuZCgicHVzaCAlcyAlcyIgJSAoc3JjLCBkZXN0KSwgdGltZW91dF90
aW1lPTYwKQorCisgIGRlZiBQdWxsKHNlbGYsIHNyYywgZGVzdCk6CisgICAgIiIiUHVsbHMgdGhl
IGZpbGUgc3JjIG9uIHRoZSBkZXZpY2Ugb250byBkZXN0IG9uIHRoZSBob3N0LgorCisgICAgQXJn
czoKKyAgICAgIHNyYzogYWJzb2x1dGUgZmlsZSBwYXRoIG9mIGZpbGUgb24gZGV2aWNlIHRvIHB1
bGwKKyAgICAgIGRlc3Q6IGRlc3RpbmF0aW9uIGZpbGUgcGF0aCBvbiBob3N0CisKKyAgICBSZXR1
cm5zOgorICAgICAgVHJ1ZSBpZiBzdWNjZXNzIGFuZCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIi
CisgICAgIyBDcmVhdGUgdGhlIGJhc2UgZGlyIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeQor
ICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoZGVzdCkpOgorICAgICAg
b3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGRlc3QpKQorCisgICAgaWYgc2VsZi5Eb2VzRmls
ZUV4aXN0KHNyYyk6CisgICAgICBzZWxmLlNlbmRDb21tYW5kKCJwdWxsICVzICVzIiAlIChzcmMs
IGRlc3QpLCB0aW1lb3V0X3RpbWU9NjApCisgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6Cisg
ICAgICBsb2dnZXIuTG9nKCJBREIgUHVsbCBGYWlsZWQ6IFNvdXJjZSBmaWxlICVzIGRvZXMgbm90
IGV4aXN0LiIgJSBzcmMpCisgICAgICByZXR1cm4gRmFsc2UKKworICBkZWYgRG9lc0ZpbGVFeGlz
dChzZWxmLCBzcmMpOgorICAgICIiIkNoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMgb24g
ZGV2aWNlIHRhcmdldC4KKworICAgIEFyZ3M6CisgICAgICBzcmM6IGZpbGUgcGF0aCB0byBiZSBj
aGVja2VkLgorCisgICAgUmV0dXJuczoKKyAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMKKyAgICAi
IiIKKworICAgIG91dHB1dCA9IHNlbGYuU2VuZFNoZWxsQ29tbWFuZCgibHMgJXMiICUgc3JjKQor
ICAgIGVycm9yID0gIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisKKyAgICBpZiBlcnJvciBp
biBvdXRwdXQ6CisgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisgIGRlZiBF
bmFibGVBZGJSb290KHNlbGYpOgorICAgICIiIkVuYWJsZSBhZGIgcm9vdCBvbiBkZXZpY2UuIiIi
CisgICAgb3V0cHV0ID0gc2VsZi5TZW5kQ29tbWFuZCgicm9vdCIpCisgICAgaWYgImFkYmQgaXMg
YWxyZWFkeSBydW5uaW5nIGFzIHJvb3QiIGluIG91dHB1dDoKKyAgICAgIHJldHVybiBUcnVlCisg
ICAgZWxpZiAicmVzdGFydGluZyBhZGJkIGFzIHJvb3QiIGluIG91dHB1dDoKKyAgICAgICMgZGV2
aWNlIHdpbGwgZGlzYXBwZWFyIGZyb20gYWRiLCB3YWl0IGZvciBpdCB0byBjb21lIGJhY2sKKyAg
ICAgIHNlbGYuU2VuZENvbW1hbmQoIndhaXQtZm9yLWRldmljZSIpCisgICAgICByZXR1cm4gVHJ1
ZQorICAgIGVsc2U6CisgICAgICBsb2dnZXIuTG9nKCJVbnJlY29nbml6ZWQgb3V0cHV0IGZyb20g
YWRiIHJvb3Q6ICVzIiAlIG91dHB1dCkKKyAgICAgIHJldHVybiBGYWxzZQorCisgIGRlZiBTdGFy
dEluc3RydW1lbnRhdGlvbkZvclBhY2thZ2UoCisgICAgICBzZWxmLCBwYWNrYWdlX25hbWUsIHJ1
bm5lcl9uYW1lLCB0aW1lb3V0X3RpbWU9NjAqMTAsCisgICAgICBub193aW5kb3dfYW5pbWF0aW9u
PUZhbHNlLCBpbnN0cnVtZW50YXRpb25fYXJncz17fSk6CisgICAgIiIiUnVuIGluc3RydW1lbnRh
dGlvbiB0ZXN0IGZvciBnaXZlbiBwYWNrYWdlIGFuZCBydW5uZXIuCisKKyAgICBFcXVpdmFsZW50
IHRvIFN0YXJ0SW5zdHJ1bWVudGF0aW9uLCBleGNlcHQgaW5zdHJ1bWVudGF0aW9uIHBhdGggaXMK
KyAgICBzZXBhcmF0ZWQgaW50byBpdHMgcGFja2FnZSBhbmQgcnVubmVyIGNvbXBvbmVudHMuCisg
ICAgIiIiCisgICAgaW5zdHJ1bWVudGF0aW9uX3BhdGggPSAiJXMvJXMiICUgKHBhY2thZ2VfbmFt
ZSwgcnVubmVyX25hbWUpCisgICAgcmV0dXJuIHNlbGYuU3RhcnRJbnN0cnVtZW50YXRpb24oaW5z
dHJ1bWVudGF0aW9uX3BhdGgsIHRpbWVvdXRfdGltZT10aW1lb3V0X3RpbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fd2luZG93X2FuaW1hdGlvbj1ub193aW5kb3df
YW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1l
bnRhdGlvbl9hcmdzPWluc3RydW1lbnRhdGlvbl9hcmdzKQorCisgIGRlZiBTdGFydEluc3RydW1l
bnRhdGlvbigKKyAgICAgIHNlbGYsIGluc3RydW1lbnRhdGlvbl9wYXRoLCB0aW1lb3V0X3RpbWU9
NjAqMTAsIG5vX3dpbmRvd19hbmltYXRpb249RmFsc2UsCisgICAgICBwcm9maWxlPUZhbHNlLCBp
bnN0cnVtZW50YXRpb25fYXJncz17fSk6CisKKyAgICAiIiJSdW5zIGFuIGluc3RydW1lbnRhdGlv
biBjbGFzcyBvbiB0aGUgdGFyZ2V0LgorCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFp
bmluZyB0aGUga2V5IHZhbHVlIHBhaXJzIGZyb20gdGhlCisgICAgaW5zdHJ1bWVudGF0aW9ucyBy
ZXN1bHQgYnVuZGxlIGFuZCBhIGxpc3Qgb2YgVGVzdFJlc3VsdHMuIEFsc28gaGFuZGxlcyB0aGUK
KyAgICBpbnRlcnByZXRpbmcgb2YgZXJyb3Igb3V0cHV0IGZyb20gdGhlIGRldmljZSBhbmQgcmFp
c2VzIHRoZSBuZWNlc3NhcnkKKyAgICBleGNlcHRpb25zLgorCisgICAgQXJnczoKKyAgICAgIGlu
c3RydW1lbnRhdGlvbl9wYXRoOiBzdHJpbmcuIEl0IHNob3VsZCBiZSB0aGUgZnVsbHkgY2xhc3Np
ZmllZCBwYWNrYWdlCisgICAgICBuYW1lLCBhbmQgaW5zdHJ1bWVudGF0aW9uIHRlc3QgcnVubmVy
LCBzZXBhcmF0ZWQgYnkgIi8iCisgICAgICAgIGUuZy4gY29tLmFuZHJvaWQuZ2xvYmFsdGltZWxh
dW5jaC8uR2xvYmFsVGltZUxhdW5jaAorICAgICAgdGltZW91dF90aW1lOiBUaW1lb3V0IHZhbHVl
IGZvciB0aGUgYW0gY29tbWFuZC4KKyAgICAgIG5vX3dpbmRvd19hbmltYXRpb246IGJvb2xlYW4s
IFdoZXRoZXIgeW91IHdhbnQgd2luZG93IGFuaW1hdGlvbnMgZW5hYmxlZAorICAgICAgICBvciBk
aXNhYmxlZAorICAgICAgcHJvZmlsZTogSWYgVHJ1ZSwgcHJvZmlsaW5nIHdpbGwgYmUgdHVybmVk
IG9uIGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uLgorICAgICAgaW5zdHJ1bWVudGF0aW9uX2FyZ3M6
IERpY3Rpb25hcnkgb2Yga2V5IHZhbHVlIGJ1bmRsZSBhcmd1bWVudHMgdG8gcGFzcyB0bworICAg
ICAgaW5zdHJ1bWVudGF0aW9uLgorCisgICAgUmV0dXJuczoKKyAgICAgICh0ZXN0X3Jlc3VsdHMs
IGluc3RfZmluaXNoZWRfYnVuZGxlKQorCisgICAgICB0ZXN0X3Jlc3VsdHM6IGEgbGlzdCBvZiBU
ZXN0UmVzdWx0cworICAgICAgaW5zdF9maW5pc2hlZF9idW5kbGUgKGRpY3QpOiBLZXkvdmFsdWUg
cGFpcnMgY29udGFpbmVkIGluIHRoZSBidW5kbGUgdGhhdAorICAgICAgICBpcyBwYXNzZWQgaW50
byBBY3Rpdml0eU1hbmFnZXIuZmluaXNoSW5zdHJ1bWVudGF0aW9uKCkuIEluY2x1ZGVkIGluIHRo
aXMKKyAgICAgICAgYnVuZGxlIGlzIHRoZSByZXR1cm4gY29kZSBvZiB0aGUgSW5zdHJ1bWVudGF0
aW9uIHByb2Nlc3MsIGFueSBlcnJvcgorICAgICAgICBjb2RlcyByZXBvcnRlZCBieSB0aGUgYWN0
aXZpdHkgbWFuYWdlciwgYW5kIGFueSByZXN1bHRzIGV4cGxpY2l0bHkgYWRkZWQKKyAgICAgICAg
YnkgdGhlIGluc3RydW1lbnRhdGlvbiBjb2RlLgorCisgICAgIFJhaXNlczoKKyAgICAgICBXYWl0
Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yOiBpZiB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRp
bmcgZm9yCisgICAgICAgICByZXNwb25zZSB0byBhZGIgaW5zdHJ1bWVudCBjb21tYW5kCisgICAg
ICAgRGV2aWNlVW5yZXNwb25zaXZlRXJyb3I6IGlmIGRldmljZSBzeXN0ZW0gcHJvY2VzcyBpcyBu
b3QgcmVzcG9uZGluZworICAgICAgIEluc3RydW1lbnRhdGlvbkVycm9yOiBpZiBpbnN0cnVtZW50
YXRpb24gZmFpbGVkIHRvIHJ1bgorICAgICIiIgorCisgICAgY29tbWFuZF9zdHJpbmcgPSBzZWxm
Ll9CdWlsZEluc3RydW1lbnRhdGlvbkNvbW1hbmRQYXRoKAorICAgICAgICBpbnN0cnVtZW50YXRp
b25fcGF0aCwgbm9fd2luZG93X2FuaW1hdGlvbj1ub193aW5kb3dfYW5pbWF0aW9uLAorICAgICAg
ICBwcm9maWxlPXByb2ZpbGUsIHJhd19tb2RlPVRydWUsCisgICAgICAgIGluc3RydW1lbnRhdGlv
bl9hcmdzPWluc3RydW1lbnRhdGlvbl9hcmdzKQorICAgIGxvZ2dlci5Mb2coY29tbWFuZF9zdHJp
bmcpCisgICAgKHRlc3RfcmVzdWx0cywgaW5zdF9maW5pc2hlZF9idW5kbGUpID0gKAorICAgICAg
ICBhbV9pbnN0cnVtZW50X3BhcnNlci5QYXJzZUFtSW5zdHJ1bWVudE91dHB1dCgKKyAgICAgICAg
ICAgIHNlbGYuU2VuZFNoZWxsQ29tbWFuZChjb21tYW5kX3N0cmluZywgdGltZW91dF90aW1lPXRp
bWVvdXRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeV9jb3Vu
dD0yKSkpCisKKyAgICBpZiAiY29kZSIgbm90IGluIGluc3RfZmluaXNoZWRfYnVuZGxlOgorICAg
ICAgcmFpc2UgZXJyb3JzLkluc3RydW1lbnRhdGlvbkVycm9yKCJubyB0ZXN0IHJlc3VsdHMuLi4g
ZGV2aWNlIHNldHVwICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29ycmVjdGx5PyIpCisKKyAgICBpZiBpbnN0X2ZpbmlzaGVkX2J1bmRsZVsiY29kZSJdID09ICIw
IjoKKyAgICAgIHNob3J0X21zZ19yZXN1bHQgPSAibm8gZXJyb3IgbWVzc2FnZSIKKyAgICAgIGlm
ICJzaG9ydE1zZyIgaW4gaW5zdF9maW5pc2hlZF9idW5kbGU6CisgICAgICAgIHNob3J0X21zZ19y
ZXN1bHQgPSBpbnN0X2ZpbmlzaGVkX2J1bmRsZVsic2hvcnRNc2ciXQorICAgICAgICBsb2dnZXIu
TG9nKCJFcnJvciEgVGVzdCBydW4gZmFpbGVkOiAlcyIgJSBzaG9ydF9tc2dfcmVzdWx0KQorICAg
ICAgcmFpc2UgZXJyb3JzLkluc3RydW1lbnRhdGlvbkVycm9yKHNob3J0X21zZ19yZXN1bHQpCisK
KyAgICBpZiAiSU5TVFJVTUVOVEFUSU9OX0FCT1JURUQiIGluIGluc3RfZmluaXNoZWRfYnVuZGxl
OgorICAgICAgbG9nZ2VyLkxvZygiSU5TVFJVTUVOVEFUSU9OIEFCT1JURUQhIikKKyAgICAgIHJh
aXNlIGVycm9ycy5EZXZpY2VVbnJlc3BvbnNpdmVFcnJvcgorCisgICAgcmV0dXJuICh0ZXN0X3Jl
c3VsdHMsIGluc3RfZmluaXNoZWRfYnVuZGxlKQorCisgIGRlZiBTdGFydEluc3RydW1lbnRhdGlv
bk5vUmVzdWx0cygKKyAgICAgIHNlbGYsIHBhY2thZ2VfbmFtZSwgcnVubmVyX25hbWUsIG5vX3dp
bmRvd19hbmltYXRpb249RmFsc2UsCisgICAgICByYXdfbW9kZT1GYWxzZSwgaW5zdHJ1bWVudGF0
aW9uX2FyZ3M9e30pOgorICAgICIiIlJ1bnMgaW5zdHJ1bWVudGF0aW9uIGFuZCBkdW1wcyBvdXRw
dXQgdG8gc3Rkb3V0LgorCisgICAgRXF1aXZhbGVudCB0byBTdGFydEluc3RydW1lbnRhdGlvbiwg
YnV0IHdpbGwgZHVtcCBpbnN0cnVtZW50YXRpb24KKyAgICAnbm9ybWFsJyBvdXRwdXQgdG8gc3Rk
b3V0LCBpbnN0ZWFkIG9mIHBhcnNpbmcgcmV0dXJuIHJlc3VsdHMuIENvbW1hbmQgd2lsbAorICAg
IG5ldmVyIHRpbWVvdXQuCisgICAgIiIiCisgICAgYWRiX2NvbW1hbmRfc3RyaW5nID0gc2VsZi5Q
cmV2aWV3SW5zdHJ1bWVudGF0aW9uQ29tbWFuZCgKKyAgICAgICAgcGFja2FnZV9uYW1lLCBydW5u
ZXJfbmFtZSwgbm9fd2luZG93X2FuaW1hdGlvbj1ub193aW5kb3dfYW5pbWF0aW9uLAorICAgICAg
ICByYXdfbW9kZT1yYXdfbW9kZSwgaW5zdHJ1bWVudGF0aW9uX2FyZ3M9aW5zdHJ1bWVudGF0aW9u
X2FyZ3MpCisgICAgbG9nZ2VyLkxvZyhhZGJfY29tbWFuZF9zdHJpbmcpCisgICAgcnVuX2NvbW1h
bmQuUnVuQ29tbWFuZChhZGJfY29tbWFuZF9zdHJpbmcsIHJldHVybl9vdXRwdXQ9RmFsc2UpCisK
KyAgZGVmIFByZXZpZXdJbnN0cnVtZW50YXRpb25Db21tYW5kKAorICAgICAgc2VsZiwgcGFja2Fn
ZV9uYW1lLCBydW5uZXJfbmFtZSwgbm9fd2luZG93X2FuaW1hdGlvbj1GYWxzZSwKKyAgICAgIHJh
d19tb2RlPUZhbHNlLCBpbnN0cnVtZW50YXRpb25fYXJncz17fSk6CisgICAgIiIiUmV0dXJucyBh
IHN0cmluZyBvZiBhZGIgY29tbWFuZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIiIiCisgICAgaW5z
dF9jb21tYW5kX3N0cmluZyA9IHNlbGYuX0J1aWxkSW5zdHJ1bWVudGF0aW9uQ29tbWFuZCgKKyAg
ICAgICAgcGFja2FnZV9uYW1lLCBydW5uZXJfbmFtZSwgbm9fd2luZG93X2FuaW1hdGlvbj1ub193
aW5kb3dfYW5pbWF0aW9uLAorICAgICAgICByYXdfbW9kZT1yYXdfbW9kZSwgaW5zdHJ1bWVudGF0
aW9uX2FyZ3M9aW5zdHJ1bWVudGF0aW9uX2FyZ3MpCisgICAgY29tbWFuZF9zdHJpbmcgPSAiYWRi
ICVzIHNoZWxsICVzIiAlIChzZWxmLl90YXJnZXRfYXJnLCBpbnN0X2NvbW1hbmRfc3RyaW5nKQor
ICAgIHJldHVybiBjb21tYW5kX3N0cmluZworCisgIGRlZiBfQnVpbGRJbnN0cnVtZW50YXRpb25D
b21tYW5kKAorICAgICAgc2VsZiwgcGFja2FnZSwgcnVubmVyX25hbWUsIG5vX3dpbmRvd19hbmlt
YXRpb249RmFsc2UsIHByb2ZpbGU9RmFsc2UsCisgICAgICByYXdfbW9kZT1UcnVlLCBpbnN0cnVt
ZW50YXRpb25fYXJncz17fSk6CisgICAgaW5zdHJ1bWVudGF0aW9uX3BhdGggPSAiJXMvJXMiICUg
KHBhY2thZ2UsIHJ1bm5lcl9uYW1lKQorCisgICAgcmV0dXJuIHNlbGYuX0J1aWxkSW5zdHJ1bWVu
dGF0aW9uQ29tbWFuZFBhdGgoCisgICAgICAgIGluc3RydW1lbnRhdGlvbl9wYXRoLCBub193aW5k
b3dfYW5pbWF0aW9uPW5vX3dpbmRvd19hbmltYXRpb24sCisgICAgICAgIHByb2ZpbGU9cHJvZmls
ZSwgcmF3X21vZGU9cmF3X21vZGUsCisgICAgICAgIGluc3RydW1lbnRhdGlvbl9hcmdzPWluc3Ry
dW1lbnRhdGlvbl9hcmdzKQorCisgIGRlZiBfQnVpbGRJbnN0cnVtZW50YXRpb25Db21tYW5kUGF0
aCgKKyAgICAgIHNlbGYsIGluc3RydW1lbnRhdGlvbl9wYXRoLCBub193aW5kb3dfYW5pbWF0aW9u
PUZhbHNlLCBwcm9maWxlPUZhbHNlLAorICAgICAgcmF3X21vZGU9VHJ1ZSwgaW5zdHJ1bWVudGF0
aW9uX2FyZ3M9e30pOgorICAgIGNvbW1hbmRfc3RyaW5nID0gImFtIGluc3RydW1lbnQiCisgICAg
aWYgbm9fd2luZG93X2FuaW1hdGlvbjoKKyAgICAgIGNvbW1hbmRfc3RyaW5nICs9ICIgLS1ub193
aW5kb3dfYW5pbWF0aW9uIgorICAgIGlmIHByb2ZpbGU6CisgICAgICBzZWxmLl9DcmVhdGVUcmFj
ZURpcigpCisgICAgICBjb21tYW5kX3N0cmluZyArPSAoCisgICAgICAgICAgIiAtcCAlcy8lcy5k
bXRyYWNlIiAlCisgICAgICAgICAgKHNlbGYuREVWSUNFX1RSQUNFX0RJUiwgaW5zdHJ1bWVudGF0
aW9uX3BhdGguc3BsaXQoIi4iKVstMV0pKQorCisgICAgZm9yIGtleSwgdmFsdWUgaW4gaW5zdHJ1
bWVudGF0aW9uX2FyZ3MuaXRlbXMoKToKKyAgICAgIGNvbW1hbmRfc3RyaW5nICs9ICIgLWUgJXMg
JyVzJyIgJSAoa2V5LCB2YWx1ZSkKKyAgICBpZiByYXdfbW9kZToKKyAgICAgIGNvbW1hbmRfc3Ry
aW5nICs9ICIgLXIiCisgICAgY29tbWFuZF9zdHJpbmcgKz0gIiAtdyAlcyIgJSBpbnN0cnVtZW50
YXRpb25fcGF0aAorICAgIHJldHVybiBjb21tYW5kX3N0cmluZworCisgIGRlZiBfQ3JlYXRlVHJh
Y2VEaXIoc2VsZik6CisgICAgbHNfcmVzcG9uc2UgPSBzZWxmLlNlbmRTaGVsbENvbW1hbmQoImxz
IC9kYXRhL3RyYWNlIikKKyAgICBpZiBsc19yZXNwb25zZS5zdHJpcCgiIyIpLnN0cmlwKHN0cmlu
Zy53aGl0ZXNwYWNlKSAhPSAiIjoKKyAgICAgIHNlbGYuU2VuZFNoZWxsQ29tbWFuZCgiY3JlYXRl
IC9kYXRhL3RyYWNlIiwgIm1rZGlyIC9kYXRhL3RyYWNlIikKKyAgICAgIHNlbGYuU2VuZFNoZWxs
Q29tbWFuZCgibWFrZSAvZGF0YS90cmFjZSB3b3JsZCB3cml0ZWFibGUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjaG1vZCA3NzcgL2RhdGEvdHJhY2UiKQorCisgIGRlZiBXYWl0Rm9y
RGV2aWNlUG0oc2VsZiwgd2FpdF90aW1lPTEyMCk6CisgICAgIiIiV2FpdHMgZm9yIHRhcmdldGVk
IGRldmljZSdzIHBhY2thZ2UgbWFuYWdlciB0byBiZSB1cC4KKworICAgIEFyZ3M6CisgICAgICB3
YWl0X3RpbWU6IHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0CisKKyAgICBSYWlzZXM6CisgICAgICBX
YWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yIGlmIHdhaXRfdGltZSBlbGFwc2VzIGFuZCBwbSBz
dGlsbCBkb2VzIG5vdAorICAgICAgcmVzcG9uZC4KKyAgICAiIiIKKyAgICBsb2dnZXIuTG9nKCJX
YWl0aW5nIGZvciBkZXZpY2UgcGFja2FnZSBtYW5hZ2VyLi4uIikKKyAgICBzZWxmLlNlbmRDb21t
YW5kKCJ3YWl0LWZvci1kZXZpY2UiKQorICAgICMgTm93IHRoZSBkZXZpY2UgaXMgdGhlcmUsIGJ1
dCBtYXkgbm90IGJlIHJ1bm5pbmcuCisgICAgIyBRdWVyeSB0aGUgcGFja2FnZSBtYW5hZ2VyIHdp
dGggYSBiYXNpYyBjb21tYW5kCisgICAgdHJ5OgorICAgICAgc2VsZi5fV2FpdEZvclNoZWxsQ29t
bWFuZENvbnRlbnRzKCJwbSBwYXRoIGFuZHJvaWQiLCAicGFja2FnZToiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfdGltZSkKKyAgICBleGNlcHQgZXJyb3Jz
LldhaXRGb3JSZXNwb25zZVRpbWVkT3V0RXJyb3I6CisgICAgICByYWlzZSBlcnJvcnMuV2FpdEZv
clJlc3BvbnNlVGltZWRPdXRFcnJvcigKKyAgICAgICAgICAiUGFja2FnZSBtYW5hZ2VyIGRpZCBu
b3QgcmVzcG9uZCBhZnRlciAlcyBzZWNvbmRzIiAlIHdhaXRfdGltZSkKKworICBkZWYgV2FpdEZv
ckluc3RydW1lbnRhdGlvbihzZWxmLCBwYWNrYWdlX25hbWUsIHJ1bm5lcl9uYW1lLCB3YWl0X3Rp
bWU9MTIwKToKKyAgICAiIiJXYWl0cyBmb3IgZ2l2ZW4gaW5zdHJ1bWVudGF0aW9uIHRvIGJlIHBy
ZXNlbnQgb24gZGV2aWNlCisKKyAgICBBcmdzOgorICAgICAgd2FpdF90aW1lOiB0aW1lIGluIHNl
Y29uZHMgdG8gd2FpdAorCisgICAgUmFpc2VzOgorICAgICAgV2FpdEZvclJlc3BvbnNlVGltZWRP
dXRFcnJvciBpZiB3YWl0X3RpbWUgZWxhcHNlcyBhbmQgaW5zdHJ1bWVudGF0aW9uCisgICAgICBz
dGlsbCBub3QgcHJlc2VudC4KKyAgICAiIiIKKyAgICBpbnN0cnVtZW50YXRpb25fcGF0aCA9ICIl
cy8lcyIgJSAocGFja2FnZV9uYW1lLCBydW5uZXJfbmFtZSkKKyAgICBsb2dnZXIuTG9nKCJXYWl0
aW5nIGZvciBpbnN0cnVtZW50YXRpb24gdG8gYmUgcHJlc2VudCIpCisgICAgIyBRdWVyeSB0aGUg
cGFja2FnZSBtYW5hZ2VyCisgICAgdHJ5OgorICAgICAgY29tbWFuZCA9ICJwbSBsaXN0IGluc3Ry
dW1lbnRhdGlvbiB8IGdyZXAgJXMiICUgaW5zdHJ1bWVudGF0aW9uX3BhdGgKKyAgICAgIHNlbGYu
X1dhaXRGb3JTaGVsbENvbW1hbmRDb250ZW50cyhjb21tYW5kLCAiaW5zdHJ1bWVudGF0aW9uOiIs
IHdhaXRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlz
ZV9hYm9ydD1GYWxzZSkKKyAgICBleGNlcHQgZXJyb3JzLldhaXRGb3JSZXNwb25zZVRpbWVkT3V0
RXJyb3IgOgorICAgICAgbG9nZ2VyLkxvZygKKyAgICAgICAgICAiQ291bGQgbm90IGZpbmQgaW5z
dHJ1bWVudGF0aW9uICVzIG9uIGRldmljZS4gRG9lcyB0aGUgIgorICAgICAgICAgICJpbnN0cnVt
ZW50YXRpb24gaW4gdGVzdCdzIEFuZHJvaWRNYW5pZmVzdC54bWwgbWF0Y2ggZGVmaW5pdGlvbiIK
KyAgICAgICAgICAiaW4gdGVzdF9kZWZzLnhtbD8iICUgaW5zdHJ1bWVudGF0aW9uX3BhdGgpCisg
ICAgICByYWlzZQorCisgIGRlZiBXYWl0Rm9yUHJvY2VzcyhzZWxmLCBuYW1lLCB3YWl0X3RpbWU9
MTIwKToKKyAgICAiIiJXYWl0IHVudGlsIGEgcHJvY2VzcyBpcyBydW5uaW5nIG9uIHRoZSBkZXZp
Y2UuCisKKyAgICBBcmdzOgorICAgICAgbmFtZTogdGhlIHByb2Nlc3MgbmFtZSBhcyBpdCBhcHBl
YXJzIGluIGBwc2AKKyAgICAgIHdhaXRfdGltZTogdGltZSBpbiBzZWNvbmRzIHRvIHdhaXQKKwor
ICAgIFJhaXNlczoKKyAgICAgIFdhaXRGb3JSZXNwb25zZVRpbWVkT3V0RXJyb3IgaWYgd2FpdF90
aW1lIGVsYXBzZXMgYW5kIHRoZSBwcm9jZXNzIGlzCisgICAgICAgICAgc3RpbGwgbm90IHJ1bm5p
bmcKKyAgICAiIiIKKyAgICBsb2dnZXIuTG9nKCJXYWl0aW5nIGZvciBwcm9jZXNzICVzIiAlIG5h
bWUpCisgICAgc2VsZi5TZW5kQ29tbWFuZCgid2FpdC1mb3ItZGV2aWNlIikKKyAgICBzZWxmLl9X
YWl0Rm9yU2hlbGxDb21tYW5kQ29udGVudHMoInBzIiwgbmFtZSwgd2FpdF90aW1lKQorCisgIGRl
ZiBXYWl0Rm9yUHJvY2Vzc0VuZChzZWxmLCBuYW1lLCB3YWl0X3RpbWU9MTIwKToKKyAgICAiIiJX
YWl0IHVudGlsIGEgcHJvY2VzcyBpcyBubyBsb25nZXIgcnVubmluZyBvbiB0aGUgZGV2aWNlLgor
CisgICAgQXJnczoKKyAgICAgIG5hbWU6IHRoZSBwcm9jZXNzIG5hbWUgYXMgaXQgYXBwZWFycyBp
biBgcHNgCisgICAgICB3YWl0X3RpbWU6IHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0CisKKyAgICBS
YWlzZXM6CisgICAgICBXYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yIGlmIHdhaXRfdGltZSBl
bGFwc2VzIGFuZCB0aGUgcHJvY2VzcyBpcworICAgICAgICAgIHN0aWxsIHJ1bm5pbmcKKyAgICAi
IiIKKyAgICBsb2dnZXIuTG9nKCJXYWl0aW5nIGZvciBwcm9jZXNzICVzIHRvIGVuZCIgJSBuYW1l
KQorICAgIHNlbGYuX1dhaXRGb3JTaGVsbENvbW1hbmRDb250ZW50cygicHMiLCBuYW1lLCB3YWl0
X3RpbWUsIGludmVydD1UcnVlKQorCisgIGRlZiBfV2FpdEZvclNoZWxsQ29tbWFuZENvbnRlbnRz
KHNlbGYsIGNvbW1hbmQsIGV4cGVjdGVkLCB3YWl0X3RpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlX2Fib3J0PVRydWUsIGludmVydD1GYWxzZSk6CisgICAgIiIi
V2FpdCB1bnRpbCB0aGUgcmVzcG9uc2UgdG8gYSBjb21tYW5kIGNvbnRhaW5zIGEgZ2l2ZW4gb3V0
cHV0LgorCisgICAgQXNzdW1lcyB0aGF0IGEgb25seSBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiAi
YWRiIHNoZWxsIDxjb21tYW5kPiIgY29udGFpbnMKKyAgICB0aGUgc3Vic3RyaW5nIGV4cGVjdGVk
LiBBc3N1bWVzIHRoYXQgYSBkZXZpY2UgaXMgcHJlc2VudC4KKworICAgIEFyZ3M6CisgICAgICBj
b21tYW5kOiBhZGIgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlCisgICAgICBleHBlY3RlZDogdGhl
IHN0cmluZyB0aGF0IHNob3VsZCBhcHBlYXIgdG8gY29uc2lkZXIgdGhlCisgICAgICAgICAgY29t
bWFuZCBzdWNjZXNzZnVsLgorICAgICAgd2FpdF90aW1lOiB0aW1lIGluIHNlY29uZHMgdG8gd2Fp
dAorICAgICAgcmFpc2VfYWJvcnQ6IGlmIEZhbHNlLCByZXRyeSB3aGVuIGV4ZWN1dGluZyB0aGUg
Y29tbWFuZCByYWlzZXMgYW4KKyAgICAgICAgICBBYm9ydEVycm9yLCByYXRoZXIgdGhhbiBmYWls
aW5nLgorICAgICAgaW52ZXJ0OiBpZiBUcnVlLCB3YWl0IHVudGlsIHRoZSBjb21tYW5kIG91dHB1
dCBubyBsb25nZXIgY29udGFpbnMgdGhlCisgICAgICAgICAgZXhwZWN0ZWQgY29udGVudHMuCisK
KyAgICBSYWlzZXM6CisgICAgICBXYWl0Rm9yUmVzcG9uc2VUaW1lZE91dEVycm9yOiBJZiB3YWl0
X3RpbWUgZWxhcHNlcyBhbmQgdGhlIGNvbW1hbmQgaGFzIG5vdAorICAgICAgICAgIHJldHVybmVk
IGFuIG91dHB1dCBjb250YWluaW5nIGV4cGVjdGVkIHlldC4KKyAgICAiIiIKKyAgICAjIFF1ZXJ5
IHRoZSBkZXZpY2Ugd2l0aCB0aGUgY29tbWFuZAorICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgIGF0
dGVtcHRzID0gMAorICAgIHdhaXRfcGVyaW9kID0gNQorICAgIHdoaWxlIG5vdCBzdWNjZXNzIGFu
ZCAoYXR0ZW1wdHMqd2FpdF9wZXJpb2QpIDwgd2FpdF90aW1lOgorICAgICAgIyBhc3N1bWUgdGhl
IGNvbW1hbmQgd2lsbCBhbHdheXMgY29udGFpbiBleHBlY3RlZCBpbiB0aGUgc3VjY2VzcyBjYXNl
CisgICAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IHNlbGYuU2VuZFNoZWxsQ29tbWFuZChjb21t
YW5kLCByZXRyeV9jb3VudD0xKQorICAgICAgICBpZiAoKG5vdCBpbnZlcnQgYW5kIGV4cGVjdGVk
IGluIG91dHB1dCkKKyAgICAgICAgICAgIG9yIChpbnZlcnQgYW5kIGV4cGVjdGVkIG5vdCBpbiBv
dXRwdXQpKToKKyAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgZXhjZXB0IGVycm9ycy5B
Ym9ydEVycm9yLCBlOgorICAgICAgICBpZiByYWlzZV9hYm9ydDoKKyAgICAgICAgICByYWlzZQor
ICAgICAgICAjIGlnbm9yZSBvdGhlcndpc2UKKworICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAg
ICAgIHRpbWUuc2xlZXAod2FpdF9wZXJpb2QpCisgICAgICAgIGF0dGVtcHRzICs9IDEKKworICAg
IGlmIG5vdCBzdWNjZXNzOgorICAgICAgcmFpc2UgZXJyb3JzLldhaXRGb3JSZXNwb25zZVRpbWVk
T3V0RXJyb3IoKQorCisgIGRlZiBXYWl0Rm9yQm9vdENvbXBsZXRlKHNlbGYsIHdhaXRfdGltZT0x
MjApOgorICAgICIiIldhaXRzIGZvciB0YXJnZXRlZCBkZXZpY2UncyBib290Y29tcGxldGUgZmxh
ZyB0byBiZSBzZXQuCisKKyAgICBBcmdzOgorICAgICAgd2FpdF90aW1lOiB0aW1lIGluIHNlY29u
ZHMgdG8gd2FpdAorCisgICAgUmFpc2VzOgorICAgICAgV2FpdEZvclJlc3BvbnNlVGltZWRPdXRF
cnJvciBpZiB3YWl0X3RpbWUgZWxhcHNlcyBhbmQgcG0gc3RpbGwgZG9lcyBub3QKKyAgICAgIHJl
c3BvbmQuCisgICAgIiIiCisgICAgbG9nZ2VyLkxvZygiV2FpdGluZyBmb3IgYm9vdCBjb21wbGV0
ZS4uLiIpCisgICAgc2VsZi5TZW5kQ29tbWFuZCgid2FpdC1mb3ItZGV2aWNlIikKKyAgICAjIE5v
dyB0aGUgZGV2aWNlIGlzIHRoZXJlLCBidXQgbWF5IG5vdCBiZSBydW5uaW5nLgorICAgICMgUXVl
cnkgdGhlIHBhY2thZ2UgbWFuYWdlciB3aXRoIGEgYmFzaWMgY29tbWFuZAorICAgIGJvb3RfY29t
cGxldGUgPSBGYWxzZQorICAgIGF0dGVtcHRzID0gMAorICAgIHdhaXRfcGVyaW9kID0gNQorICAg
IHdoaWxlIG5vdCBib290X2NvbXBsZXRlIGFuZCAoYXR0ZW1wdHMqd2FpdF9wZXJpb2QpIDwgd2Fp
dF90aW1lOgorICAgICAgb3V0cHV0ID0gc2VsZi5TZW5kU2hlbGxDb21tYW5kKCJnZXRwcm9wIGRl
di5ib290Y29tcGxldGUiLCByZXRyeV9jb3VudD0xKQorICAgICAgb3V0cHV0ID0gb3V0cHV0LnN0
cmlwKCkKKyAgICAgIGlmIG91dHB1dCA9PSAiMSI6CisgICAgICAgIGJvb3RfY29tcGxldGUgPSBU
cnVlCisgICAgICBlbHNlOgorICAgICAgICB0aW1lLnNsZWVwKHdhaXRfcGVyaW9kKQorICAgICAg
ICBhdHRlbXB0cyArPSAxCisgICAgaWYgbm90IGJvb3RfY29tcGxldGU6CisgICAgICByYWlzZSBl
cnJvcnMuV2FpdEZvclJlc3BvbnNlVGltZWRPdXRFcnJvcigKKyAgICAgICAgICAiZGV2LmJvb3Rj
b21wbGV0ZSBmbGFnIHdhcyBub3Qgc2V0IGFmdGVyICVzIHNlY29uZHMiICUgd2FpdF90aW1lKQor
CisgIGRlZiBTeW5jKHNlbGYsIHJldHJ5X2NvdW50PTMsIHJ1bnRpbWVfcmVzdGFydD1GYWxzZSk6
CisgICAgIiIiUGVyZm9ybSBhIGFkYiBzeW5jLgorCisgICAgQmxvY2tzIHVudGlsIGRldmljZSBw
YWNrYWdlIG1hbmFnZXIgaXMgcmVzcG9uZGluZy4KKworICAgIEFyZ3M6CisgICAgICByZXRyeV9j
b3VudDogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IHN5bmMgYmVmb3JlIGZhaWxpbmcKKyAgICAg
IHJ1bnRpbWVfcmVzdGFydDogc3RvcCBydW50aW1lIGR1cmluZyBzeW5jIGFuZCByZXN0YXJ0IGFm
dGVyd2FyZHMsIHVzZWZ1bAorICAgICAgICBmb3Igc3luY2luZyBzeXN0ZW0gbGlicmFyaWVzIChj
b3JlLCBmcmFtZXdvcmsgZXRjKQorCisgICAgUmFpc2VzOgorICAgICAgV2FpdEZvclJlc3BvbnNl
VGltZWRPdXRFcnJvciBpZiBwYWNrYWdlIG1hbmFnZXIgZG9lcyBub3QgcmVzcG9uZAorICAgICAg
QWJvcnRFcnJvciBpZiB1bnJlY292ZXJhYmxlIGVycm9yIG9jY3VycmVkCisgICAgIiIiCisgICAg
b3V0cHV0ID0gIiIKKyAgICBlcnJvciA9IE5vbmUKKyAgICBpZiBydW50aW1lX3Jlc3RhcnQ6Cisg
ICAgICBzZWxmLlNlbmRTaGVsbENvbW1hbmQoInNldHByb3Agcm8ubW9ua2V5IDEiLCByZXRyeV9j
b3VudD1yZXRyeV9jb3VudCkKKyAgICAgICMgbWFudWFsIHJlc3QgYm9vdGNvbXBsZXRlIGZsYWcK
KyAgICAgIHNlbGYuU2VuZFNoZWxsQ29tbWFuZCgic2V0cHJvcCBkZXYuYm9vdGNvbXBsZXRlIDAi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5X2NvdW50PXJldHJ5X2NvdW50KQor
ICAgICAgc2VsZi5TZW5kU2hlbGxDb21tYW5kKCJzdG9wIiwgcmV0cnlfY291bnQ9cmV0cnlfY291
bnQpCisKKyAgICB0cnk6CisgICAgICBvdXRwdXQgPSBzZWxmLlNlbmRDb21tYW5kKCJzeW5jIiwg
cmV0cnlfY291bnQ9cmV0cnlfY291bnQpCisgICAgZXhjZXB0IGVycm9ycy5BYm9ydEVycm9yLCBl
OgorICAgICAgZXJyb3IgPSBlCisgICAgICBvdXRwdXQgPSBlLm1zZworICAgIGlmICJSZWFkLW9u
bHkgZmlsZSBzeXN0ZW0iIGluIG91dHB1dDoKKyAgICAgIGxvZ2dlci5TaWxlbnRMb2cob3V0cHV0
KQorICAgICAgbG9nZ2VyLkxvZygiUmVtb3VudGluZyByZWFkLW9ubHkgZmlsZXN5c3RlbSIpCisg
ICAgICBzZWxmLlNlbmRDb21tYW5kKCJyZW1vdW50IikKKyAgICAgIG91dHB1dCA9IHNlbGYuU2Vu
ZENvbW1hbmQoInN5bmMiLCByZXRyeV9jb3VudD1yZXRyeV9jb3VudCkKKyAgICBlbGlmICJObyBz
cGFjZSBsZWZ0IG9uIGRldmljZSIgaW4gb3V0cHV0OgorICAgICAgbG9nZ2VyLlNpbGVudExvZyhv
dXRwdXQpCisgICAgICBsb2dnZXIuTG9nKCJSZXN0YXJ0aW5nIGRldmljZSBydW50aW1lIikKKyAg
ICAgIHNlbGYuU2VuZFNoZWxsQ29tbWFuZCgic3RvcCIsIHJldHJ5X2NvdW50PXJldHJ5X2NvdW50
KQorICAgICAgb3V0cHV0ID0gc2VsZi5TZW5kQ29tbWFuZCgic3luYyIsIHJldHJ5X2NvdW50PXJl
dHJ5X2NvdW50KQorICAgICAgc2VsZi5TZW5kU2hlbGxDb21tYW5kKCJzdGFydCIsIHJldHJ5X2Nv
dW50PXJldHJ5X2NvdW50KQorICAgIGVsaWYgZXJyb3IgaXMgbm90IE5vbmU6CisgICAgICAjIGV4
Y2VwdGlvbiBvY2N1cnJlZCB0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQgZnJvbQorICAgICAgcmFp
c2UgZXJyb3IKKyAgICBsb2dnZXIuU2lsZW50TG9nKG91dHB1dCkKKyAgICBpZiBydW50aW1lX3Jl
c3RhcnQ6CisgICAgICAjIHN0YXJ0IHJ1bnRpbWUgYW5kIHdhaXQgdGlsbCBib290IGNvbXBsZXRl
IGZsYWcgaXMgc2V0CisgICAgICBzZWxmLlNlbmRTaGVsbENvbW1hbmQoInN0YXJ0IiwgcmV0cnlf
Y291bnQ9cmV0cnlfY291bnQpCisgICAgICBzZWxmLldhaXRGb3JCb290Q29tcGxldGUoKQorICAg
ICAgIyBwcmVzcyB0aGUgTUVOVSBrZXksIHRoaXMgd2lsbCBkaXNhYmxlIGtleSBndWFyZCBpZiBy
dW50aW1lIGlzIHN0YXJ0ZWQKKyAgICAgICMgd2l0aCByby5tb25rZXkgc2V0IHRvIDEKKyAgICAg
IHNlbGYuU2VuZFNoZWxsQ29tbWFuZCgiaW5wdXQga2V5ZXZlbnQgODIiLCByZXRyeV9jb3VudD1y
ZXRyeV9jb3VudCkKKyAgICBlbHNlOgorICAgICAgc2VsZi5XYWl0Rm9yRGV2aWNlUG0oKQorICAg
IHJldHVybiBvdXRwdXQKKworICBkZWYgR2V0U2VyaWFsTnVtYmVyKHNlbGYpOgorICAgICIiIlJl
dHVybnMgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIHRhcmdldGVkIGRldmljZS4iIiIKKyAgICBy
ZXR1cm4gc2VsZi5TZW5kQ29tbWFuZCgiZ2V0LXNlcmlhbG5vIikuc3RyaXAoKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9h
bV9pbnN0cnVtZW50X3BhcnNlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9hbmRyb2lkX3Rlc3RydW5uZXIvYW1faW5zdHJ1bWVudF9wYXJzZXIucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDU1NGM0ZDU2NWYyOGY2M2M1MTE2MTRjY2NhMTQ3OWRmMDRmMjU5NQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hbmRyb2lkX3Rlc3RydW5uZXIv
YW1faW5zdHJ1bWVudF9wYXJzZXIucHkKQEAgLTAsMCArMSwxNjkgQEAKKyMhL3Vzci9iaW4vcHl0
aG9uMi40CisjCisjCisjIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIi
Ik1vZHVsZSB0aGF0IGFzc2lzdHMgaW4gcGFyc2luZyB0aGUgb3V0cHV0IG9mICJhbSBpbnN0cnVt
ZW50IiBjb21tYW5kcyBydW4gb24KK3RoZSBkZXZpY2UuIiIiCisKK2ltcG9ydCByZQoraW1wb3J0
IHN0cmluZworCisKK2RlZiBQYXJzZUFtSW5zdHJ1bWVudE91dHB1dChyZXN1bHQpOgorICAiIiJH
aXZlbiB0aGUgcmF3IG91dHB1dCBvZiBhbiAiYW0gaW5zdHJ1bWVudCIgY29tbWFuZCB0aGF0IHRh
cmdldHMgYW5kCisgIEluc3RydW1lbnRhdGlvblRlc3RSdW5uZXIsIHJldHVybiBzdHJ1Y3R1cmVk
IGRhdGEuCisKKyAgQXJnczoKKyAgICByZXN1bHQgKHN0cmluZyk6IFJhdyBvdXRwdXQgb2YgImFt
IGluc3RydW1lbnQiCisKKyAgUmV0dXJuCisgICh0ZXN0X3Jlc3VsdHMsIGluc3RfZmluaXNoZWRf
YnVuZGxlKQorICAKKyAgdGVzdF9yZXN1bHRzIChsaXN0IG9mIGFtX291dHB1dF9wYXJzZXIuVGVz
dFJlc3VsdCkKKyAgaW5zdF9maW5pc2hlZF9idW5kbGUgKGRpY3QpOiBLZXkvdmFsdWUgcGFpcnMg
Y29udGFpbmVkIGluIHRoZSBidW5kbGUgdGhhdCBpcworICAgIHBhc3NlZCBpbnRvIEFjdGl2aXR5
TWFuYWdlci5maW5pc2hJbnN0cnVtZW50YXRpb24oKS4gSW5jbHVkZWQgaW4gdGhpcyBidW5kbGUg
aXMgdGhlIHJldHVybgorICAgIGNvZGUgb2YgdGhlIEluc3RydW1lbnRhdGlvbiBwcm9jZXNzLCBh
bnkgZXJyb3IgY29kZXMgcmVwb3J0ZWQgYnkgdGhlCisgICAgYWN0aXZpdHkgbWFuYWdlciwgYW5k
IGFueSByZXN1bHRzIGV4cGxpY2l0eSBhZGRlZCBieSB0aGUgaW5zdHJ1bWVudGF0aW9uCisgICAg
Y29kZS4KKyAgIiIiCisKKyAgcmVfc3RhdHVzX2NvZGUgPSByZS5jb21waWxlKHInSU5TVFJVTUVO
VEFUSU9OX1NUQVRVU19DT0RFOiAoP1A8c3RhdHVzX2NvZGU+LT9cZCkkJykKKyAgdGVzdF9yZXN1
bHRzID0gW10KKyAgaW5zdF9maW5pc2hlZF9idW5kbGUgPSB7fQorCisgIHJlc3VsdF9ibG9ja19z
dHJpbmcgPSAiIgorICBmb3IgbGluZSBpbiByZXN1bHQuc3BsaXRsaW5lcygpOgorICAgIHJlc3Vs
dF9ibG9ja19zdHJpbmcgKz0gbGluZSArICdcbicKKworICAgIGlmICJJTlNUUlVNRU5UQVRJT05f
U1RBVFVTX0NPREU6IiBpbiBsaW5lOgorICAgICAgdGVzdF9yZXN1bHQgPSBUZXN0UmVzdWx0KHJl
c3VsdF9ibG9ja19zdHJpbmcpCisgICAgICBpZiB0ZXN0X3Jlc3VsdC5HZXRTdGF0dXNDb2RlKCkg
PT0gMTogIyBUaGUgdGVzdCBzdGFydGVkCisgICAgICAgIHBhc3MKKyAgICAgIGVsaWYgdGVzdF9y
ZXN1bHQuR2V0U3RhdHVzQ29kZSgpIGluIFswLCAtMSwgLTJdOgorICAgICAgICB0ZXN0X3Jlc3Vs
dHMuYXBwZW5kKHRlc3RfcmVzdWx0KQorICAgICAgZWxzZToKKyAgICAgICAgcGFzcworICAgICAg
cmVzdWx0X2Jsb2NrX3N0cmluZyA9ICIiCisgICAgaWYgIklOU1RSVU1FTlRBVElPTl9DT0RFOiIg
aW4gbGluZToKKyAgICAgIGluc3RfZmluaXNoZWRfYnVuZGxlID0gX1BhcnNlSW5zdHJ1bWVudGF0
aW9uRmluaXNoZWRCdW5kbGUocmVzdWx0X2Jsb2NrX3N0cmluZykKKyAgICAgIHJlc3VsdF9ibG9j
a19zdHJpbmcgPSAiIgorCisgIHJldHVybiAodGVzdF9yZXN1bHRzLCBpbnN0X2ZpbmlzaGVkX2J1
bmRsZSkKKworCitkZWYgX1BhcnNlSW5zdHJ1bWVudGF0aW9uRmluaXNoZWRCdW5kbGUocmVzdWx0
KToKKyAgIiIiR2l2ZW4gdGhlIHJhdyBvdXRwdXQgb2YgImFtIGluc3RydW1lbnQiIHJldHVybnMg
YSBkaWN0aW9uYXJ5IG9mIHRoZQorICBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUgYnVuZGxlIHBh
c3NlZCBpbnRvIAorICBBY3Rpdml0eU1hbmFnZXIuZmluaXNoSW5zdHJ1bWVudGF0aW9uKCkuCisK
KyAgQXJnczoKKyAgICByZXN1bHQgKHN0cmluZyk6IFJhdyBvdXRwdXQgb2YgImFtIGluc3RydW1l
bnQiCisKKyAgUmV0dXJuOgorICBpbnN0X2ZpbmlzaGVkX2J1bmRsZSAoZGljdCk6IEtleS92YWx1
ZSBwYWlycyBjb250YWluZWQgaW4gdGhlIGJ1bmRsZSB0aGF0IGlzCisgICAgcGFzc2VkIGludG8g
QWN0aXZpdHlNYW5hZ2VyLmZpbmlzaEluc3RydW1lbnRhdGlvbigpLiBJbmNsdWRlZCBpbiB0aGlz
IGJ1bmRsZSBpcyB0aGUgcmV0dXJuCisgICAgY29kZSBvZiB0aGUgSW5zdHJ1bWVudGF0aW9uIHBy
b2Nlc3MsIGFueSBlcnJvciBjb2RlcyByZXBvcnRlZCBieSB0aGUKKyAgICBhY3Rpdml0eSBtYW5h
Z2VyLCBhbmQgYW55IHJlc3VsdHMgZXhwbGljaXR5IGFkZGVkIGJ5IHRoZSBpbnN0cnVtZW50YXRp
b24KKyAgICBjb2RlLgorICAiIiIKKworICByZV9yZXN1bHQgPSByZS5jb21waWxlKHInSU5TVFJV
TUVOVEFUSU9OX1JFU1VMVDogKFtePV0rKT0oLiopJCcpCisgIHJlX2NvZGUgPSByZS5jb21waWxl
KHInSU5TVFJVTUVOVEFUSU9OX0NPREU6IChcLT9cZCkkJykKKyAgcmVzdWx0X2RpY3QgPSB7fQor
ICBrZXkgPSAnJworICB2YWwgPSAnJworICBsYXN0X3RhZyA9ICcnCisKKyAgZm9yIGxpbmUgaW4g
cmVzdWx0LnNwbGl0KCdcbicpOgorICAgIGxpbmUgPSBsaW5lLnN0cmlwKHN0cmluZy53aGl0ZXNw
YWNlKQorICAgIGlmIHJlX3Jlc3VsdC5tYXRjaChsaW5lKToKKyAgICAgIGxhc3RfdGFnID0gJ0lO
U1RSVU1FTlRBVElPTl9SRVNVTFQnCisgICAgICBrZXkgPSByZV9yZXN1bHQuc2VhcmNoKGxpbmUp
Lmdyb3VwKDEpLnN0cmlwKHN0cmluZy53aGl0ZXNwYWNlKQorICAgICAgaWYga2V5LnN0YXJ0c3dp
dGgoJ3BlcmZvcm1hbmNlLicpOgorICAgICAgICBrZXkgPSBrZXlbbGVuKCdwZXJmb3JtYW5jZS4n
KTpdCisgICAgICB2YWwgPSByZV9yZXN1bHQuc2VhcmNoKGxpbmUpLmdyb3VwKDIpLnN0cmlwKHN0
cmluZy53aGl0ZXNwYWNlKQorICAgICAgdHJ5OgorICAgICAgICByZXN1bHRfZGljdFtrZXldID0g
ZmxvYXQodmFsKQorICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJlc3VsdF9kaWN0
W2tleV0gPSB2YWwKKyAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJlc3VsdF9kaWN0
W2tleV0gPSB2YWwKKyAgICBlbGlmIHJlX2NvZGUubWF0Y2gobGluZSk6CisgICAgICBsYXN0X3Rh
ZyA9ICdJTlNUUlVNRU5UQVRJT05fQ09ERScKKyAgICAgIGtleSA9ICdjb2RlJworICAgICAgdmFs
ID0gcmVfY29kZS5zZWFyY2gobGluZSkuZ3JvdXAoMSkuc3RyaXAoc3RyaW5nLndoaXRlc3BhY2Up
CisgICAgICByZXN1bHRfZGljdFtrZXldID0gdmFsCisgICAgZWxpZiAnSU5TVFJVTUVOVEFUSU9O
X0FCT1JURUQ6JyBpbiBsaW5lOgorICAgICAgbGFzdF90YWcgPSAnSU5TVFJVTUVOVEFUSU9OX0FC
T1JURUQnCisgICAgICBrZXkgPSAnSU5TVFJVTUVOVEFUSU9OX0FCT1JURUQnCisgICAgICB2YWwg
PSAnJworICAgICAgcmVzdWx0X2RpY3Rba2V5XSA9IHZhbAorICAgIGVsaWYgbGFzdF90YWcgPT0g
J0lOU1RSVU1FTlRBVElPTl9SRVNVTFQnOgorICAgICAgcmVzdWx0X2RpY3Rba2V5XSArPSAnXG4n
ICsgbGluZQorCisgIGlmIG5vdCByZXN1bHRfZGljdC5oYXNfa2V5KCdjb2RlJyk6CisgICAgcmVz
dWx0X2RpY3RbJ2NvZGUnXSA9ICcwJworICAgIHJlc3VsdF9kaWN0WydzaG9ydE1zZyddID0gIk5v
IHJlc3VsdCByZXR1cm5lZCBmcm9tIGluc3RydW1lbnRhdGlvbiIKKworICByZXR1cm4gcmVzdWx0
X2RpY3QKKworCitjbGFzcyBUZXN0UmVzdWx0KG9iamVjdCk6CisgICIiIkEgY2xhc3MgdGhhdCBj
b250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSB0ZXN0IHJlc3VsdC4iIiIKKworICBk
ZWYgX19pbml0X18oc2VsZiwgcmVzdWx0X2Jsb2NrX3N0cmluZyk6CisgICAgIiIiCisgICAgQXJn
czoKKyAgICAgIHJlc3VsdF9ibG9ja19zdHJpbmcgKHN0cmluZyk6IElzIGEgc2luZ2xlICJibG9j
ayIgb2Ygb3V0cHV0LiBBIHNpbmdsZQorICAgICAgImJsb2NrIiB3b3VsZCBiZSBlaXRoZXIgYSAi
dGVzdCBzdGFydGVkIiBzdGF0dXMgcmVwb3J0LCBvciBhICJ0ZXN0CisgICAgICBmaW5pc2hlZCIg
c3RhdHVzIHJlcG9ydC4KKyAgICAiIiIKKworICAgIHNlbGYuX3Rlc3RfbmFtZSA9IE5vbmUKKyAg
ICBzZWxmLl9zdGF0dXNfY29kZSA9IE5vbmUKKyAgICBzZWxmLl9mYWlsdXJlX3JlYXNvbiA9IE5v
bmUKKyAgICBzZWxmLl9maWVsZHNfbWFwID0ge30KKworICAgIHJlX3N0YXR1c19jb2RlID0gcmUu
c2VhcmNoKHInSU5TVFJVTUVOVEFUSU9OX1NUQVRVU19DT0RFOiAnCisgICAgICAgICcoP1A8c3Rh
dHVzX2NvZGU+MXwwfC0xfC0yKScsIHJlc3VsdF9ibG9ja19zdHJpbmcpCisgICAgcmVfZmllbGRz
ID0gcmUuY29tcGlsZShyJ0lOU1RSVU1FTlRBVElPTl9TVEFUVVM6ICcKKyAgICAgICAgJyg/UDxr
ZXk+W1x3Ll0rKT0oP1A8dmFsdWU+Lio/KSg/PVxuSU5TVFJVTUVOVEFUSU9OX1NUQVRVUyknLCBy
ZS5ET1RBTEwpCisKKyAgICBmb3IgZmllbGQgaW4gcmVfZmllbGRzLmZpbmRpdGVyKHJlc3VsdF9i
bG9ja19zdHJpbmcpOgorICAgICAga2V5LCB2YWx1ZSA9IChmaWVsZC5ncm91cCgna2V5Jykuc3Ry
aXAoKSwgZmllbGQuZ3JvdXAoJ3ZhbHVlJykuc3RyaXAoKSkKKyAgICAgIGlmIGtleS5zdGFydHN3
aXRoKCdwZXJmb3JtYW5jZS4nKToKKyAgICAgICAga2V5ID0ga2V5W2xlbigncGVyZm9ybWFuY2Uu
Jyk6XQorICAgICAgc2VsZi5fZmllbGRzX21hcFtrZXldID0gdmFsdWUKKyAgICBzZWxmLl9maWVs
ZHNfbWFwLnNldGRlZmF1bHQoJ2NsYXNzJykKKyAgICBzZWxmLl9maWVsZHNfbWFwLnNldGRlZmF1
bHQoJ3Rlc3QnKQorCisgICAgc2VsZi5fdGVzdF9uYW1lID0gJyVzOiVzJyAlIChzZWxmLl9maWVs
ZHNfbWFwWydjbGFzcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
ZmllbGRzX21hcFsndGVzdCddKQorICAgIHNlbGYuX3N0YXR1c19jb2RlID0gaW50KHJlX3N0YXR1
c19jb2RlLmdyb3VwKCdzdGF0dXNfY29kZScpKQorICAgIGlmICdzdGFjaycgaW4gc2VsZi5fZmll
bGRzX21hcDoKKyAgICAgIHNlbGYuX2ZhaWx1cmVfcmVhc29uID0gc2VsZi5fZmllbGRzX21hcFsn
c3RhY2snXQorCisgIGRlZiBHZXRUZXN0TmFtZShzZWxmKToKKyAgICByZXR1cm4gc2VsZi5fdGVz
dF9uYW1lCisKKyAgZGVmIEdldFN0YXR1c0NvZGUoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX3N0
YXR1c19jb2RlCisKKyAgZGVmIEdldEZhaWx1cmVSZWFzb24oc2VsZik6CisgICAgcmV0dXJuIHNl
bGYuX2ZhaWx1cmVfcmVhc29uCisKKyAgZGVmIEdldFJlc3VsdEZpZWxkcyhzZWxmKToKKyAgICBy
ZXR1cm4gc2VsZi5fZmllbGRzX21hcApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9lcnJvcnMucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL2Vycm9ycy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMTYzZGQ0NWIzNmFiYjZiZDhjNDlmNDlmYmYxZmJjNjhmMGI2MjcxCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1
bm5lci9lcnJvcnMucHkKQEAgLTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9weXRob24yLjQKKyMK
KyMKKyMgQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMK
KyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2Vl
IHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Np
b25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiRGVmaW5lcyBj
b21tb24gZXhjZXB0aW9uIGNsYXNzZXMgZm9yIHRoaXMgcGFja2FnZS4iIiIKKworCitjbGFzcyBN
c2dFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgIiIiR2VuZXJpYyBleGNlcHRpb24gd2l0aCBhbiBv
cHRpb25hbCBzdHJpbmcgbXNnLiIiIgorICBkZWYgX19pbml0X18oc2VsZiwgbXNnPSIiKToKKyAg
ICBzZWxmLm1zZyA9IG1zZworCisKK2NsYXNzIFdhaXRGb3JSZXNwb25zZVRpbWVkT3V0RXJyb3Io
RXhjZXB0aW9uKToKKyAgIiIiV2Ugc2VudCBhIGNvbW1hbmQgYW5kIGhhZCB0byB3YWl0IHRvbyBs
b25nIGZvciByZXNwb25zZS4iIiIKKworCitjbGFzcyBEZXZpY2VVbnJlc3BvbnNpdmVFcnJvcihF
eGNlcHRpb24pOgorICAiIiJEZXZpY2UgaXMgdW5yZXNwb25zaXZlIHRvIGNvbW1hbmQuIiIiCisK
KworY2xhc3MgSW5zdHJ1bWVudGF0aW9uRXJyb3IoRXhjZXB0aW9uKToKKyAgIiIiRmFpbGVkIHRv
IHJ1biBpbnN0cnVtZW50YXRpb24uIiIiCisKKworY2xhc3MgQWJvcnRFcnJvcihNc2dFeGNlcHRp
b24pOgorICAiIiJHZW5lcmljIGV4Y2VwdGlvbiB0aGF0IGluZGljYXRlcyBhIGZhdGFsIGVycm9y
IGhhcyBvY2N1cnJlZCBhbmQgcHJvZ3JhbQorICBleGVjdXRpb24gc2hvdWxkIGJlIGFib3J0ZWQu
IiIiCisKKworY2xhc3MgUGFyc2VFcnJvcihNc2dFeGNlcHRpb24pOgorICAiIiJSYWlzZWQgd2hl
biB4bWwgZGF0YSB0byBwYXJzZSBoYXMgdW5yZWNvZ25pemVkIGZvcm1hdC4iIiIKKwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5l
ci9sb2dnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90
ZXN0cnVubmVyL2xvZ2dlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTQ2M2ExOThjOTY2OGU1N2IwZjFlNWFl
ODc4NGY1Y2VhNjEzZWFjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90aGlyZHBhcnR5L2FuZHJvaWRfdGVzdHJ1bm5lci9sb2dnZXIucHkKQEAgLTAsMCArMSw5NiBA
QAorIyEvdXNyL2Jpbi9weXRob24yLjQKKyMKKyMKKyMgQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFw
YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFw
cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KKworIiIiU2ltcGxlIGxvZ2dpbmcgdXRpbGl0eS4gRHVtcHMgbG9nIG1lc3Nh
Z2VzIHRvIHN0ZG91dCwgYW5kIG9wdGlvbmFsbHksIHRvIGEKK2xvZyBmaWxlLgorCitJbml0KHBh
dGgpIG11c3QgYmUgY2FsbGVkIHRvIGVuYWJsZSBsb2dnaW5nIHRvIGEgZmlsZQorIiIiCisKK2lt
cG9ydCBkYXRldGltZQorCitfTE9HX0ZJTEUgPSBOb25lCitfdmVyYm9zZSA9IEZhbHNlCitfbG9n
X3RpbWUgPSBUcnVlCisKK2RlZiBJbml0KGxvZ19maWxlX3BhdGgpOgorICAiIiJTZXQgdGhlIHBh
dGggdG8gdGhlIGxvZyBmaWxlIiIiCisgIGdsb2JhbCBfTE9HX0ZJTEUKKyAgX0xPR19GSUxFID0g
bG9nX2ZpbGVfcGF0aAorICBwcmludCAiVXNpbmcgbG9nIGZpbGU6ICVzIiAlIF9MT0dfRklMRQor
CitkZWYgR2V0TG9nRmlsZVBhdGgoKToKKyAgIiIiUmV0dXJucyB0aGUgcGF0aCBhbmQgbmFtZSBv
ZiB0aGUgTG9nIGZpbGUiIiIKKyAgZ2xvYmFsIF9MT0dfRklMRQorICByZXR1cm4gX0xPR19GSUxF
CisKK2RlZiBMb2cobmV3X3N0cik6CisgICIiIkFwcGVuZHMgbmV3X3N0ciB0byB0aGUgZW5kIG9m
IF9MT0dfRklMRSBhbmQgcHJpbnRzIGl0IHRvIHN0ZG91dC4KKworICBBcmdzOgorICAgICMgbmV3
X3N0ciBpcyBhIHN0cmluZy4KKyAgICBuZXdfc3RyOiAnc29tZSBtZXNzYWdlIHRvIGxvZycKKyAg
IiIiCisgIG1zZyA9IF9QcmVwZW5kVGltZVN0YW1wKG5ld19zdHIpCisgIHByaW50IG1zZworICBf
V3JpdGVMb2cobXNnKQorCitkZWYgX1dyaXRlTG9nKG1zZyk6CisgIGdsb2JhbCBfTE9HX0ZJTEUK
KyAgaWYgX0xPR19GSUxFIGlzIG5vdCBOb25lOgorICAgIGZpbGVfaGFuZGxlID0gZmlsZShfTE9H
X0ZJTEUsICdhJykKKyAgICBmaWxlX2hhbmRsZS53cml0ZSgnXG4nICsgc3RyKG1zZykpCisgICAg
ZmlsZV9oYW5kbGUuY2xvc2UoKQorCitkZWYgX1ByZXBlbmRUaW1lU3RhbXAobG9nX3N0cmluZyk6
CisgICIiIlJldHVybnMgdGhlIGxvZ19zdHJpbmcgcHJlcGVuZGVkIHdpdGggY3VycmVudCB0aW1l
c3RhbXAgIiIiCisgIGdsb2JhbCBfbG9nX3RpbWUKKyAgaWYgX2xvZ190aW1lOgorICAgIHJldHVy
biAiIyAlczogJXMiICUgKGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlbS8lZC8l
eSAlSDolTTolUyIpLAorICAgICAgICBsb2dfc3RyaW5nKQorICBlbHNlOgorICAgICMgdGltZXN0
YW1wIGxvZ2dpbmcgZGlzYWJsZWQKKyAgICByZXR1cm4gbG9nX3N0cmluZyAgCisKK2RlZiBTaWxl
bnRMb2cobmV3X3N0cik6CisgICIiIlNpbGVudGx5IGxvZyBuZXdfc3RyLiBVbmxlc3MgdmVyYm9z
ZSBtb2RlIGlzIGVuYWJsZWQsIHdpbGwgbG9nIG5ld19zdHIKKyAgICBvbmx5IHRvIHRoZSBsb2cg
ZmlsZQorICBBcmdzOgorICAgICMgbmV3X3N0ciBpcyBhIHN0cmluZy4KKyAgICBuZXdfc3RyOiAn
c29tZSBtZXNzYWdlIHRvIGxvZycKKyAgIiIiCisgIGdsb2JhbCBfdmVyYm9zZQorICBtc2cgPSBf
UHJlcGVuZFRpbWVTdGFtcChuZXdfc3RyKQorICBpZiBfdmVyYm9zZToKKyAgICBwcmludCBtc2cK
KyAgX1dyaXRlTG9nKG1zZykKKworZGVmIFNldFZlcmJvc2UobmV3X3ZlcmJvc2U9VHJ1ZSk6Cisg
ICIiIiBFbmFibGUgb3IgZGlzYWJsZSB2ZXJib3NlIGxvZ2dpbmciIiIKKyAgZ2xvYmFsIF92ZXJi
b3NlCisgIF92ZXJib3NlID0gbmV3X3ZlcmJvc2UKKyAgCitkZWYgU2V0VGltZXN0YW1wTG9nZ2lu
ZyhuZXdfdGltZXN0YW1wPVRydWUpOgorICAiIiIgRW5hYmxlIG9yIGRpc2FibGUgb3V0cHV0dGlu
ZyBhIHRpbWVzdGFtcCB3aXRoIGVhY2ggbG9nIGVudHJ5IiIiCisgIGdsb2JhbCBfbG9nX3RpbWUK
KyAgX2xvZ190aW1lID0gbmV3X3RpbWVzdGFtcAorICAgIAorZGVmIG1haW4oKToKKyAgcGFzcwor
CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9hbmRyb2lkX3Rlc3RydW5uZXIvcnVuX2NvbW1h
bmQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVu
bmVyL3J1bl9jb21tYW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzOThkYWEyODNiMTBmZmU1YmFlYWRkZTI5
NTc0ZDMyMGNhNzJjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvYW5kcm9pZF90ZXN0cnVubmVyL3J1bl9jb21tYW5kLnB5CkBAIC0wLDAgKzEs
MTk2IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIworIyBDb3B5cmlnaHQgMjAwNywgVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorCisjIFN5c3RlbSBpbXBvcnRzCitpbXBvcnQgb3MKK2ltcG9ydCBz
aWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQor
CisjIGxvY2FsIGltcG9ydHMKK2ltcG9ydCBlcnJvcnMKK2ltcG9ydCBsb2dnZXIKKworX2Fib3J0
X29uX2Vycm9yID0gRmFsc2UKKworZGVmIFNldEFib3J0T25FcnJvcihhYm9ydD1UcnVlKToKKyAg
IiIiU2V0cyBiZWhhdmlvciBvZiBSdW5Db21tYW5kIHRvIHRocm93IEFib3J0RXJyb3IgaWYgY29t
bWFuZCBwcm9jZXNzIHJldHVybnMKKyAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIiIiCisgIGdsb2Jh
bCBfYWJvcnRfb25fZXJyb3IKKyAgX2Fib3J0X29uX2Vycm9yID0gYWJvcnQKKworZGVmIFJ1bkNv
bW1hbmQoY21kLCB0aW1lb3V0X3RpbWU9Tm9uZSwgcmV0cnlfY291bnQ9MywgcmV0dXJuX291dHB1
dD1UcnVlLAorICAgICAgICAgICAgICAgc3RkaW5faW5wdXQ9Tm9uZSk6CisgICIiIlNwYXduIGFu
ZCByZXRyeSBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBnaXZlbiBzaGVsbCBjb21tYW5kLgorCisg
IEFyZ3M6CisgICAgY21kOiBzaGVsbCBjb21tYW5kIHRvIHJ1bgorICAgIHRpbWVvdXRfdGltZTog
dGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIGNvbW1hbmQgdG8gcnVuIGJlZm9yZSBhYm9ydGlu
Zy4KKyAgICByZXRyeV9jb3VudDogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQKKyAg
ICByZXR1cm5fb3V0cHV0OiBpZiBUcnVlIHJldHVybiBvdXRwdXQgb2YgY29tbWFuZCBhcyBzdHJp
bmcuIE90aGVyd2lzZSwKKyAgICAgIGRpcmVjdCBvdXRwdXQgb2YgY29tbWFuZCB0byBzdGRvdXQu
CisgICAgc3RkaW5faW5wdXQ6IGRhdGEgdG8gZmVlZCB0byBzdGRpbgorICBSZXR1cm5zOgorICAg
IG91dHB1dCBvZiBjb21tYW5kCisgICIiIgorICByZXN1bHQgPSBOb25lCisgIHdoaWxlIFRydWU6
CisgICAgdHJ5OgorICAgICAgcmVzdWx0ID0gUnVuT25jZShjbWQsIHRpbWVvdXRfdGltZT10aW1l
b3V0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9vdXRwdXQ9cmV0dXJuX291
dHB1dCwgc3RkaW5faW5wdXQ9c3RkaW5faW5wdXQpCisgICAgZXhjZXB0IGVycm9ycy5XYWl0Rm9y
UmVzcG9uc2VUaW1lZE91dEVycm9yOgorICAgICAgaWYgcmV0cnlfY291bnQgPT0gMDoKKyAgICAg
ICAgcmFpc2UKKyAgICAgIHJldHJ5X2NvdW50IC09IDEKKyAgICAgIGxvZ2dlci5Mb2coIk5vIHJl
c3BvbnNlIGZvciAlcywgcmV0cnlpbmciICUgY21kKQorICAgIGVsc2U6CisgICAgICAjIFN1Y2Nl
c3MKKyAgICAgIHJldHVybiByZXN1bHQKKworZGVmIFJ1bk9uY2UoY21kLCB0aW1lb3V0X3RpbWU9
Tm9uZSwgcmV0dXJuX291dHB1dD1UcnVlLCBzdGRpbl9pbnB1dD1Ob25lKToKKyAgIiIiU3Bhd25z
IGEgc3VicHJvY2VzcyB0byBydW4gdGhlIGdpdmVuIHNoZWxsIGNvbW1hbmQuCisKKyAgQXJnczoK
KyAgICBjbWQ6IHNoZWxsIGNvbW1hbmQgdG8gcnVuCisgICAgdGltZW91dF90aW1lOiB0aW1lIGlu
IHNlY29uZHMgdG8gd2FpdCBmb3IgY29tbWFuZCB0byBydW4gYmVmb3JlIGFib3J0aW5nLgorICAg
IHJldHVybl9vdXRwdXQ6IGlmIFRydWUgcmV0dXJuIG91dHB1dCBvZiBjb21tYW5kIGFzIHN0cmlu
Zy4gT3RoZXJ3aXNlLAorICAgICAgZGlyZWN0IG91dHB1dCBvZiBjb21tYW5kIHRvIHN0ZG91dC4K
KyAgICBzdGRpbl9pbnB1dDogZGF0YSB0byBmZWVkIHRvIHN0ZGluCisgIFJldHVybnM6CisgICAg
b3V0cHV0IG9mIGNvbW1hbmQKKyAgUmFpc2VzOgorICAgIGVycm9ycy5XYWl0Rm9yUmVzcG9uc2VU
aW1lZE91dEVycm9yIGlmIGNvbW1hbmQgZGlkIG5vdCBjb21wbGV0ZSB3aXRoaW4KKyAgICAgIHRp
bWVvdXRfdGltZSBzZWNvbmRzLgorICAgIGVycm9ycy5BYm9ydEVycm9yIGlzIGNvbW1hbmQgcmV0
dXJuZWQgZXJyb3IgY29kZSBhbmQgU2V0QWJvcnRPbkVycm9yIGlzIG9uLgorICAiIiIKKyAgc3Rh
cnRfdGltZSA9IHRpbWUudGltZSgpCisgIHNvID0gW10KKyAgcGlkID0gW10KKyAgZ2xvYmFsIF9h
Ym9ydF9vbl9lcnJvciwgZXJyb3Jfb2NjdXJyZWQKKyAgZXJyb3Jfb2NjdXJyZWQgPSBGYWxzZQor
CisgIGRlZiBSdW4oKToKKyAgICBnbG9iYWwgZXJyb3Jfb2NjdXJyZWQKKyAgICBpZiByZXR1cm5f
b3V0cHV0OgorICAgICAgb3V0cHV0X2Rlc3QgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICBlbHNlOgor
ICAgICAgIyBOb25lIG1lYW5zIGRpcmVjdCB0byBzdGRvdXQKKyAgICAgIG91dHB1dF9kZXN0ID0g
Tm9uZQorICAgIGlmIHN0ZGluX2lucHV0OgorICAgICAgc3RkaW5fZGVzdCA9IHN1YnByb2Nlc3Mu
UElQRQorICAgIGVsc2U6CisgICAgICBzdGRpbl9kZXN0ID0gTm9uZQorICAgIHBpcGUgPSBzdWJw
cm9jZXNzLlBvcGVuKAorICAgICAgICBjbWQsCisgICAgICAgIGV4ZWN1dGFibGU9Jy9iaW4vYmFz
aCcsCisgICAgICAgIHN0ZGluPXN0ZGluX2Rlc3QsCisgICAgICAgIHN0ZG91dD1vdXRwdXRfZGVz
dCwKKyAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICBzaGVsbD1UcnVl
KQorICAgIHBpZC5hcHBlbmQocGlwZS5waWQpCisgICAgdHJ5OgorICAgICAgb3V0cHV0ID0gcGlw
ZS5jb21tdW5pY2F0ZShpbnB1dD1zdGRpbl9pbnB1dClbMF0KKyAgICAgIGlmIG91dHB1dCBpcyBu
b3QgTm9uZSBhbmQgbGVuKG91dHB1dCkgPiAwOgorICAgICAgICBzby5hcHBlbmQob3V0cHV0KQor
ICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgbG9nZ2VyLlNpbGVudExvZygiZmFpbGVkIHRv
IHJldHJpZXZlIHN0ZG91dCBmcm9tOiAlcyIgJSBjbWQpCisgICAgICBsb2dnZXIuTG9nKGUpCisg
ICAgICBzby5hcHBlbmQoIkVSUk9SIikKKyAgICAgIGVycm9yX29jY3VycmVkID0gVHJ1ZQorICAg
IGlmIHBpcGUucmV0dXJuY29kZToKKyAgICAgIGxvZ2dlci5TaWxlbnRMb2coIkVycm9yOiAlcyBy
ZXR1cm5lZCAlZCBlcnJvciBjb2RlIiAlKGNtZCwKKyAgICAgICAgICBwaXBlLnJldHVybmNvZGUp
KQorICAgICAgZXJyb3Jfb2NjdXJyZWQgPSBUcnVlCisKKyAgdCA9IHRocmVhZGluZy5UaHJlYWQo
dGFyZ2V0PVJ1bikKKyAgdC5zdGFydCgpCisKKyAgYnJlYWtfbG9vcCA9IEZhbHNlCisgIHdoaWxl
IG5vdCBicmVha19sb29wOgorICAgIGlmIG5vdCB0LmlzQWxpdmUoKToKKyAgICAgIGJyZWFrX2xv
b3AgPSBUcnVlCisKKyAgICAjIENoZWNrIHRoZSB0aW1lb3V0CisgICAgaWYgKG5vdCBicmVha19s
b29wIGFuZCB0aW1lb3V0X3RpbWUgaXMgbm90IE5vbmUKKyAgICAgICAgYW5kIHRpbWUudGltZSgp
ID4gc3RhcnRfdGltZSArIHRpbWVvdXRfdGltZSk6CisgICAgICB0cnk6CisgICAgICAgIG9zLmtp
bGwocGlkWzBdLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAg
ICAjIHByb2Nlc3MgYWxyZWFkeSBkZWFkLiBObyBhY3Rpb24gcmVxdWlyZWQuCisgICAgICAgIHBh
c3MKKworICAgICAgbG9nZ2VyLlNpbGVudExvZygiYWJvdXQgdG8gcmFpc2UgYSB0aW1lb3V0IGZv
cjogJXMiICUgY21kKQorICAgICAgcmFpc2UgZXJyb3JzLldhaXRGb3JSZXNwb25zZVRpbWVkT3V0
RXJyb3IKKyAgICBpZiBub3QgYnJlYWtfbG9vcDoKKyAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisg
IHQuam9pbigpCisgIG91dHB1dCA9ICIiLmpvaW4oc28pCisgIGlmIF9hYm9ydF9vbl9lcnJvciBh
bmQgZXJyb3Jfb2NjdXJyZWQ6CisgICAgcmFpc2UgZXJyb3JzLkFib3J0RXJyb3IobXNnPW91dHB1
dCkKKworICByZXR1cm4gIiIuam9pbihzbykKKworCitkZWYgUnVuSG9zdENvbW1hbmQoYmluYXJ5
LCB2YWxncmluZD1GYWxzZSk6CisgICIiIlJ1biBhIGNvbW1hbmQgb24gdGhlIGhvc3QgKG9wdCB1
c2luZyB2YWxncmluZCkuCisKKyAgUnVucyB0aGUgaG9zdCBiaW5hcnkgYW5kIHJldHVybnMgdGhl
IGV4aXQgY29kZS4KKyAgSWYgc3VjY2Vzc2Z1bGwsIHRoZSBvdXRwdXQgKHN0ZG91dCBhbmQgc3Rk
ZXJyKSBhcmUgZGlzY2FyZGVkLAorICBidXQgcHJpbnRlZCBpbiBjYXNlIG9mIGVycm9yLgorICBU
aGUgY29tbWFuZCBjYW4gYmUgcnVuIHVuZGVyIHZhbGdyaW5kIGluIHdoaWNoIGNhc2UgYWxsIHRo
ZQorICBvdXRwdXQgYXJlIGFsd2F5cyBkaXNjYXJkZWQuCisKKyAgQXJnczoKKyAgICBiaW5hcnk6
IGZ1bGwgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBydW4uCisgICAgdmFsZ3JpbmQ6IElmIFRydWUg
dGhlIGNvbW1hbmQgd2lsbCBiZSBydW4gdW5kZXIgdmFsZ3JpbmQuCisKKyAgUmV0dXJuczoKKyAg
ICBUaGUgY29tbWFuZCBleGl0IGNvZGUgKGludCkKKyAgIiIiCisgIGlmIG5vdCB2YWxncmluZDoK
KyAgICBzdWJwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihiaW5hcnksIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3Mu
U1RET1VUKQorICAgIHN1YnByb2Mud2FpdCgpCisgICAgaWYgc3VicHJvYy5yZXR1cm5jb2RlICE9
IDA6ICAgICAgICAgIyBJbiBjYXNlIG9mIGVycm9yIHByaW50IHRoZSBvdXRwdXQKKyAgICAgIHBy
aW50IHN1YnByb2MuY29tbXVuaWNhdGUoKVswXQorICAgIHJldHVybiBzdWJwcm9jLnJldHVybmNv
ZGUKKyAgZWxzZToKKyAgICAjIE5lZWQgdGhlIGZ1bGwgcGF0aCB0byB2YWxncmluZCB0byBhdm9p
ZCBvdGhlciB2ZXJzaW9ucyBvbiB0aGUgc3lzdGVtLgorICAgIHN1YnByb2MgPSBzdWJwcm9jZXNz
LlBvcGVuKFsiL3Vzci9iaW4vdmFsZ3JpbmQiLCAiLS10b29sPW1lbWNoZWNrIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIi0tbGVhay1jaGVjaz15ZXMiLCAiLXEiLCBiaW5hcnld
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
IHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAjIENhbm5vdCByZWx5IG9uIHRoZSByZXRj
b2RlIG9mIHZhbGdyaW5kLiBJbnN0ZWFkIGxvb2sgZm9yIGFuIGVtcHR5IG91dHB1dC4KKyAgICB2
YWxncmluZF9vdXQgPSBzdWJwcm9jLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgIGlmIHZh
bGdyaW5kX291dDoKKyAgICAgIHByaW50IHZhbGdyaW5kX291dAorICAgICAgcmV0dXJuIDEKKyAg
ICBlbHNlOgorICAgICAgcmV0dXJuIDAKKworCitkZWYgSGFzVmFsZ3JpbmQoKToKKyAgIiIiQ2hl
Y2sgdGhhdCAvdXNyL2Jpbi92YWxncmluZCBleGlzdHMuCisKKyAgV2UgbG9vayBmb3IgdGhlIGZ1
bGxwYXRoIHRvIGF2b2lkIHBpY2tpbmcgdXAgJ2FsdGVybmF0aXZlJyB2YWxncmluZAorICBvbiB0
aGUgc3lzdGVtLgorCisgIFJldHVybnM6CisgICAgVHJ1ZSBpZiBhIHN5c3RlbSB2YWxncmluZCB3
YXMgZm91bmQuCisgICIiIgorICByZXR1cm4gb3MucGF0aC5leGlzdHMoIi91c3IvYmluL3ZhbGdy
aW5kIikK
</data>
<flag name="review"
          id="163936"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>