<?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>191974</bug_id>
          
          <creation_ts>2018-11-26 11:33:57 -0800</creation_ts>
          <short_desc>webkitpy: Add watchOS ports</short_desc>
          <delta_ts>2018-11-27 16:29:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1481605</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-11-26 11:33:57 -0800</bug_when>
    <thetext>Add ports for running layout tests on watchOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481607</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-26 11:34:41 -0800</bug_when>
    <thetext>&lt;rdar://problem/46251051&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481608</commentid>
    <comment_count>2</comment_count>
      <attachid>355660</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-11-26 11:36:44 -0800</bug_when>
    <thetext>Created attachment 355660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481649</commentid>
    <comment_count>3</comment_count>
      <attachid>355668</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-11-26 13:09:31 -0800</bug_when>
    <thetext>Created attachment 355668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482090</commentid>
    <comment_count>4</comment_count>
      <attachid>355668</attachid>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2018-11-27 13:48:30 -0800</bug_when>
    <thetext>Comment on attachment 355668
Patch

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

&gt; Tools/Scripts/webkitpy/port/watch_device.py:42
&gt; +    NO_ON_DEVICE_TESTING = &apos;On-device testing is not supported on this machine&apos;

is &apos;machine&apos; the right noun here?  How about: configuration | device | platform | scenario ?

&gt; Tools/Scripts/webkitpy/port/watch_simulator.py:39
&gt; +    DEFAULT_ARCHITECTURE = &apos;x86&apos;

I am not certain of watchOS conventions, but other places we use i386, or x86_64.

&gt; Tools/Scripts/webkitpy/port/watch_simulator.py:116
&gt; +        _log.error(&apos;No Simulated device matching &quot;{}&quot; found in watchOS SDK&apos;.format(str(target_device_type)))

nit: lower case simulated.

&gt; Tools/Scripts/webkitpy/port/watch_simulator.py:119
&gt; +    def setup_environ_for_server(self, server_name=None):

I think this should be setup_env_for_server, or fully spelled out as setup_environment_for_server</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482112</commentid>
    <comment_count>5</comment_count>
      <attachid>355668</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-27 14:06:17 -0800</bug_when>
    <thetext>Comment on attachment 355668
Patch

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

&gt; Tools/Scripts/webkitpy/port/watch.py:23
&gt; +

Nit: Do we need 2 or 1 empty lines here?

&gt; Tools/Scripts/webkitpy/port/watch.py:103
&gt; +        # The implementation of this funciton differs between on-device and simulator testing.

typo: funciton =&gt; function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482113</commentid>
    <comment_count>6</comment_count>
      <attachid>355668</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-11-27 14:10:28 -0800</bug_when>
    <thetext>Comment on attachment 355668
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/watch_simulator.py:39
&gt;&gt; +    DEFAULT_ARCHITECTURE = &apos;x86&apos;
&gt; 
&gt; I am not certain of watchOS conventions, but other places we use i386, or x86_64.

Testing this now, pretty sure you&apos;re right and i386 is required.

&gt;&gt; Tools/Scripts/webkitpy/port/watch_simulator.py:119
&gt;&gt; +    def setup_environ_for_server(self, server_name=None):
&gt; 
&gt; I think this should be setup_env_for_server, or fully spelled out as setup_environment_for_server

This function is coming from a base class, so we shouldn&apos;t change it&apos;s name here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482188</commentid>
    <comment_count>7</comment_count>
      <attachid>355800</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-11-27 15:52:00 -0800</bug_when>
    <thetext>Created attachment 355800
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482225</commentid>
    <comment_count>8</comment_count>
      <attachid>355800</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-27 16:29:49 -0800</bug_when>
    <thetext>Comment on attachment 355800
Patch for landing

Clearing flags on attachment: 355800

Committed r238590: &lt;https://trac.webkit.org/changeset/238590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482226</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-27 16:29:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355660</attachid>
            <date>2018-11-26 11:36:44 -0800</date>
            <delta_ts>2018-11-26 13:09:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191974-20181126113643.patch</filename>
            <type>text/plain</type>
            <size>25379</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzODQ5OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE4LTExLTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIHdhdGNoT1MgcG9ydHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTk3NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDYyNTEwNTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAg
KFBvcnRGYWN0b3J5KTogQWRkIFdhdGNoRGV2aWNlIGFuZCBXYXRjaFNpbXVsYXRvciBwb3J0cy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2gucHk6IEFkZGVkLgorICAgICAg
ICAoV2F0Y2hQb3J0KTogQmFzZSBjbGFzcyBmb3Igd2F0Y2hPUyBwb3J0cy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfZGV2aWNlLnB5OiBBZGRlZC4KKyAgICAgICAgKFdh
dGNoRGV2aWNlUG9ydCk6IENsYXNzIGZvciBydW5uaW5nIGxheW91dCB0ZXN0cyBvbiBhIHdhdGNo
T1MgZGV2aWNlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0
b3IucHk6IEFkZGVkLgorICAgICAgICAoV2F0Y2hTaW11bGF0b3JQb3J0KTogQ2xhc3MgZm9yIHJ1
bm5pbmcgbGF5b3V0IHRlc3RzIG9uIGEgd2F0Y2hPUyBzaW11bGF0b3IuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvcl91bml0dGVzdC5weTogQWRkZWQuCisg
ICAgICAgIChXYXRjaFNpbXVsYXRvclRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC93YXRjaF90ZXN0Y2FzZS5weTogQWRkZWQuCisgICAgICAgIChXYXRjaFRlc3QpOgorCiAy
MDE4LTExLTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q11bSUZDXSBVc2UgZmxvYXQgYm94J3MgbWFyZ2luIGJveCB0byBhZGp1c3QgdGhlIGxpbmUgY29u
c3RyYWludHMuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQkocmV2
aXNpb24gMjM4NDk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAjCiAjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtOTEsNiArOTEsOCBAQCBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3QpOgogICAgICAgICAnZ3Rr
Lkd0a1BvcnQnLAogICAgICAgICAnaW9zX3NpbXVsYXRvci5JT1NTaW11bGF0b3JQb3J0JywKICAg
ICAgICAgJ2lvc19kZXZpY2UuSU9TRGV2aWNlUG9ydCcsCisgICAgICAgICd3YXRjaF9zaW11bGF0
b3IuV2F0Y2hTaW11bGF0b3JQb3J0JywKKyAgICAgICAgJ3dhdGNoX2RldmljZS5XYXRjaERldmlj
ZVBvcnQnLAogICAgICAgICAnanNjX29ubHkuSnNjT25seVBvcnQnLAogICAgICAgICAnbWFjLk1h
Y1BvcnQnLAogICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQnLApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dhdGNoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC93YXRjaC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2F0Y2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29tbW9u
LnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwLCBJTlRFUk5BTF9UQUJMRQor
ZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCitmcm9tIHdl
YmtpdHB5LnBvcnQuZGV2aWNlX3BvcnQgaW1wb3J0IERldmljZVBvcnQKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV2F0Y2hQb3J0KERldmljZVBvcnQp
OgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zJworCisgICAgQ1VSUkVOVF9WRVJTSU9OID0gVmVy
c2lvbig1KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIHN1cGVyKFdhdGNoUG9ydCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpID09
IEZhbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEdW1wUmVuZGVyVHJlZSBp
cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uJykKKworICAgIGRlZiBkcml2ZXJfbmFt
ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKQorICAgICAgICBy
ZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJworCisgICAgZGVmIHZlcnNpb25fbmFtZShz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3Qu
cGxhdGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwgcGxhdGZvcm09V2F0Y2hQb3J0LnBv
cnRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYp
OgorICAgICAgICByZXR1cm4gNAorCisgICAgQG1lbW9pemVkCisgICAgZGVmIGRlZmF1bHRfYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIHZlcnNpb25zX3RvX2ZhbGxiYWNrID0g
W10KKyAgICAgICAgaWYgc2VsZi53YXRjaG9zX3ZlcnNpb24oKSA9PSBzZWxmLkNVUlJFTlRfVkVS
U0lPTjoKKyAgICAgICAgICAgIHZlcnNpb25zX3RvX2ZhbGxiYWNrID0gW3NlbGYuQ1VSUkVOVF9W
RVJTSU9OXQorICAgICAgICBlbGlmIHNlbGYud2F0Y2hvc192ZXJzaW9uKCk6CisgICAgICAgICAg
ICB0ZW1wX3ZlcnNpb24gPSBWZXJzaW9uKHNlbGYud2F0Y2hvc192ZXJzaW9uKCkubWFqb3IpCisg
ICAgICAgICAgICB3aGlsZSB0ZW1wX3ZlcnNpb24ubWFqb3IgIT0gc2VsZi5DVVJSRU5UX1ZFUlNJ
T04ubWFqb3I6CisgICAgICAgICAgICAgICAgdmVyc2lvbnNfdG9fZmFsbGJhY2suYXBwZW5kKFZl
cnNpb24uZnJvbV9pdGVyYWJsZSh0ZW1wX3ZlcnNpb24pKQorICAgICAgICAgICAgICAgIGlmIHRl
bXBfdmVyc2lvbiA8IHNlbGYuQ1VSUkVOVF9WRVJTSU9OOgorICAgICAgICAgICAgICAgICAgICB0
ZW1wX3ZlcnNpb24ubWFqb3IgKz0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHRlbXBfdmVyc2lvbi5tYWpvciAtPSAxCisKKyAgICAgICAgZXhwZWN0YXRpb25z
ID0gW10KKyAgICAgICAgZm9yIHZlcnNpb24gaW4gdmVyc2lvbnNfdG9fZmFsbGJhY2s6CisgICAg
ICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgICAgICBhcHBsZV9uYW1l
ID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZSh2ZXJzaW9u
LCBwbGF0Zm9ybT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJsZT1JTlRFUk5BTF9UQUJMRSkKKyAg
ICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIGFwcGxlX25hbWUubG93ZXIoKS5yZXBs
YWNlKCcgJywgJycpKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB2ZXJzaW9u
Lm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBl
eHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoc2VsZi5wb3J0X25h
bWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9w
YXRoKHNlbGYucG9ydF9uYW1lKSkKKworICAgICAgICBmb3IgdmVyc2lvbiBpbiB2ZXJzaW9uc190
b19mYWxsYmFjazoKKyAgICAgICAgICAgIGFwcGxlX25hbWUgPSBOb25lCisgICAgICAgICAgICBp
ZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgICAgICBhcHBsZV9uYW1lID0gVmVyc2lv
bk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9y
bT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJsZT1JTlRFUk5BTF9UQUJMRSkKKyAgICAgICAgICAg
IGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1h
dChXYXRjaFBvcnQucG9ydF9uYW1lLCBhcHBsZV9uYW1lLmxvd2VyKCkucmVwbGFjZSgnICcsICcn
KSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgne30te30nLmZvcm1hdChXYXRjaFBvcnQucG9ydF9uYW1lLCB2ZXJzaW9uLm1ham9y
KSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoV2F0Y2hQb3J0LnBvcnRfbmFt
ZSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgoV2F0Y2hQb3J0LnBvcnRfbmFtZSkpCisKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChz
ZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2syJykpCisKKyAgICAgICAgcmV0dXJuIGV4cGVj
dGF0aW9ucworCisgICAgZGVmIHdhdGNob3NfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBUaGUg
aW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jaXRvbiBkaWZmZXJzIGJldHdlZW4gb24tZGV2aWNl
IGFuZCBzaW11bGF0b3IgdGVzdGluZy4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX2RldmljZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfZGV2aWNlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9kZXZpY2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5jb21t
b24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
Y3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2Fk
ZGl0aW9ucworZnJvbSB3ZWJraXRweS5wb3J0LndhdGNoIGltcG9ydCBXYXRjaFBvcnQKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdhdGNoRGV2aWNlUG9y
dChXYXRjaFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zLWRldmljZScKKworICAgIEFS
Q0hJVEVDVFVSRVMgPSBbJ2FybXY3aycsICdhcm02NGUnLCAnYXJtNjRfMzInXQorICAgIERFRkFV
TFRfQVJDSElURUNUVVJFID0gJ2FybXY3aycKKworICAgIFNESyA9IGFwcGxlX2FkZGl0aW9ucygp
LmdldF9zZGsoJ3dhdGNob3MnKSBpZiBhcHBsZV9hZGRpdGlvbnMoKSBlbHNlICd3YXRjaG9zJwor
ICAgIERFVklDRV9NQU5BR0VSID0gYXBwbGVfYWRkaXRpb25zKCkuZGV2aWNlX21hbmFnZXIoKSBp
ZiBhcHBsZV9hZGRpdGlvbnMoKSBlbHNlIE5vbmUKKyAgICBOT19PTl9ERVZJQ0VfVEVTVElORyA9
ICdPbi1kZXZpY2UgdGVzdGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbWFjaGluZScKKwor
ICAgIEBtZW1vaXplZAorICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAg
ICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICByZXR1cm4gbGVuKGFwcGxl
X2FkZGl0aW9ucygpLmRldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoc2VsZiwgc29mdHdhcmVf
dmFyaWFudD0nd2F0Y2hPUycpKQorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9kcml2ZXJf
Y2xhc3Moc2VsZik6CisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAg
cmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLmRldmljZV9kcml2ZXIoKQorICAgICAgICByZXR1cm4g
c3VwZXIoV2F0Y2hEZXZpY2VQb3J0LCBzZWxmKS5fZHJpdmVyX2NsYXNzKCkKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRp
b25zLCBwb3J0X25hbWUpOgorICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZToK
KyAgICAgICAgICAgIHdhdGNob3Nfc2RrX3ZlcnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nk
a192ZXJzaW9uKGNscy5TREspCisgICAgICAgICAgICBpZiBub3Qgd2F0Y2hvc19zZGtfdmVyc2lv
bjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBpbnN0YWxsIHRoZSB3
YXRjaE9TIFNESy4iKQorICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsg
c3RyKHdhdGNob3Nfc2RrX3ZlcnNpb24ubWFqb3IpCisgICAgICAgIHJldHVybiBwb3J0X25hbWUK
KworICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CisgICAgICAgIGlmIG5vdCBhcHBs
ZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09O
X0RFVklDRV9URVNUSU5HKQorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25zKCkuZGV2aWNl
X2NyYXNoX2xvZ19wYXRoKCkKKworICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5f
bG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAg
ICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Q3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190
b19za2lwPXNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcF9mb3JfaG9zdC5nZXQoZGV2aWNlLCBbXSkp
CisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5j
bHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJu
IGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0
OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFdhdGNoRGV2aWNlUG9ydCwgc2VsZikuX2dldF9j
cmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10
aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPXdhaXRfZm9yX2xvZywgdGFy
Z2V0X2hvc3Q9dGFyZ2V0X2hvc3QpCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNlYXJjaCBldmVy
eSBkZXZpY2Ugc2luY2Ugb25lIHdhcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBmb3IgZGV2aWNl
IGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAgICAgc3RkZXJyX291dCwgY3Jhc2hsb2cgPSBz
dXBlcihXYXRjaERldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBf
Zm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAg
aWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQor
ICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKKworICAgIEBtZW1vaXplZAorICAgIGRlZiB3
YXRjaG9zX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lv
bicpOgorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24uZnJvbV9zdHJpbmcoc2VsZi5nZXRfb3B0
aW9uKCd2ZXJzaW9uJykpCisKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCisK
KyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpLmRldmljZV9mb3Jfd29ya2VyX251bWJl
cl9tYXAoc2VsZiwgc29mdHdhcmVfdmFyaWFudD0nd2F0Y2hPUycpOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdObyBkZXZpY2VzIGFyZSBhdmFpbGFibGUnKQorICAgICAgICB2ZXJz
aW9uID0gTm9uZQorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygpOgorICAgICAg
ICAgICAgaWYgbm90IHZlcnNpb246CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IGRldmljZS5w
bGF0Zm9ybS5vc192ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlm
IGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9IHZlcnNpb246CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlwbGUgY29ubmVjdGVkIGRldmljZXMgaGF2ZSBk
aWZmZXJlbnQgd2F0Y2hPUyB2ZXJzaW9ucycpCisgICAgICAgIHJldHVybiB2ZXJzaW9uCisKKyAg
ICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9i
bGVtLzMwNDk3OTkxPi4KKyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3Rl
bShzZWxmKToKKyAgICAgICAgcmV0dXJuICd3YXRjaG9zLWRldmljZScKKworICAgIGRlZiBfY3Jl
YXRlX2RldmljZXMoc2VsZiwgZGV2aWNlX2NsYXNzKToKKyAgICAgICAgaWYgbm90IGFwcGxlX2Fk
ZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVW
SUNFX1RFU1RJTkcpCisgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKS5kZXZpY2VfZm9y
X3dvcmtlcl9udW1iZXJfbWFwKHNlbGYsIHNvZnR3YXJlX3ZhcmlhbnQ9J3dhdGNoT1MnKToKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIGZv
ciB0ZXN0aW5nJykKKworICAgICAgICBpZiBzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkg
PCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdOb3QgZW5vdWdodCBjb25uZWN0ZWQgZGV2aWNlcyBmb3Ige30gcHJvY2Vzc2VzJy5mb3JtYXQo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2Vs
Zik6CisgICAgICAgIHN1cGVyKFdhdGNoRGV2aWNlUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9y
dW4oKQorICAgICAgICBhcHBsZV9hZGRpdGlvbnMoKS5kZXZpY2VfY2xlYW5fdXBfdGVzdF9ydW4o
c2VsZiwgc2VsZi5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5fYnVpbGRfcGF0aCgpKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfc2ltdWxhdG9yLnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3Iu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5jb21t
b24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9u
IGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9h
ZGRpdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydC53YXRjaCBpbXBvcnQgV2F0Y2hQb3J0Citmcm9t
IHdlYmtpdHB5Lnhjb2RlLmRldmljZV90eXBlIGltcG9ydCBEZXZpY2VUeXBlCitmcm9tIHdlYmtp
dHB5Lnhjb2RlLnNpbXVsYXRlZF9kZXZpY2UgaW1wb3J0IERldmljZVJlcXVlc3QsIFNpbXVsYXRl
ZERldmljZU1hbmFnZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIFdhdGNoU2ltdWxhdG9yUG9ydChXYXRjaFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3
YXRjaG9zLXNpbXVsYXRvcicKKworICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4NiddCisgICAgREVG
QVVMVF9BUkNISVRFQ1RVUkUgPSAneDg2JworCisgICAgREVWSUNFX01BTkFHRVIgPSBTaW11bGF0
ZWREZXZpY2VNYW5hZ2VyCisKKyAgICBERUZBVUxUX0RFVklDRV9DTEFTUyA9ICdBcHBsZSBXYXRj
aCBTZXJpZXMgMyAtIDQybW0nCisgICAgQ1VTVE9NX0RFVklDRV9DTEFTU0VTID0gW10KKyAgICBT
REsgPSBhcHBsZV9hZGRpdGlvbnMoKS5nZXRfc2RrKCd3YXRjaHNpbXVsYXRvcicpIGlmIGFwcGxl
X2FkZGl0aW9ucygpIGVsc2UgJ3dhdGNoc2ltdWxhdG9yJworCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFdhdGNoU2ltdWxhdG9yUG9ydCwg
c2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuX3NldF9kZXZp
Y2VfY2xhc3Moc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKSkKKyAgICAgICAgX2xvZy5k
ZWJ1ZygnV2F0Y2hTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMgJXMnLCBzZWxmLl9kZXZp
Y2VfY2xhc3MpCisKKyAgICAjIFRoaXMgc3VwcG9ydHMgdGhlIG1hcHBpbmcgb2YgYSBwb3J0IG5h
bWUgc3VjaCBhcyB3YXRjaG9zLXNpbXVsYXRvci01IHRvIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBw
b3J0CisgICAgIyB1c2luZyB3YXRjaE9TIDUuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBf
dmVyc2lvbl9mcm9tX25hbWUobmFtZSk6CisgICAgICAgIGlmIGxlbihuYW1lLnNwbGl0KCctJykp
ID4gMiBhbmQgbmFtZS5zcGxpdCgnLScpWzJdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHJldHVy
biBWZXJzaW9uLmZyb21fc3RyaW5nKG5hbWUuc3BsaXQoJy0nKVsyXSkKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIEBtZW1vaXplZAorICAgIGRlZiB3YXRjaG9zX3ZlcnNpb24oc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgorICAgICAgICAgICAgcmV0dXJu
IFZlcnNpb24uZnJvbV9zdHJpbmcoc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCisgICAgICAg
IHJldHVybiBXYXRjaFNpbXVsYXRvclBvcnQuX3ZlcnNpb25fZnJvbV9uYW1lKHNlbGYuX25hbWUp
IG9yIHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignd2F0Y2hzaW11bGF0b3In
KQorCisgICAgZGVmIGVudmlyb25tZW50X2Zvcl9hcGlfdGVzdHMoc2VsZik6CisgICAgICAgIGlu
aGVyaXRlZF9lbnYgPSBzdXBlcihXYXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmVudmlyb25tZW50
X2Zvcl9hcGlfdGVzdHMoKQorICAgICAgICBuZXdfZW52aXJvbm1lbnQgPSB7fQorICAgICAgICBT
SU1DVExfRU5WX1BSRUZJWCA9ICdTSU1DVExfQ0hJTERfJworICAgICAgICBmb3IgdmFsdWUgaW4g
aW5oZXJpdGVkX2VudjoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNU
TF9FTlZfUFJFRklYKToKKyAgICAgICAgICAgICAgICBuZXdfZW52aXJvbm1lbnRbU0lNQ1RMX0VO
Vl9QUkVGSVggKyB2YWx1ZV0gPSBpbmhlcml0ZWRfZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBuZXdfZW52aXJvbm1lbnRbdmFsdWVdID0gaW5oZXJpdGVkX2Vu
dlt2YWx1ZV0KKyAgICAgICAgcmV0dXJuIG5ld19lbnZpcm9ubWVudAorCisgICAgQG1lbW9pemVk
CisgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICBkZWYgZmls
dGVyX2Jvb3RlZF93YXRjaG9zX2RldmljZXMoZGV2aWNlKToKKyAgICAgICAgICAgIGlmIG5vdCBk
ZXZpY2UucGxhdGZvcm1fZGV2aWNlLmlzX2Jvb3RlZF9vcl9ib290aW5nKCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlLnBsYXRmb3JtX2Rl
dmljZS5kZXZpY2VfdHlwZSBpbiBEZXZpY2VUeXBlKHNvZnR3YXJlX3ZhcmlhbnQ9J3dhdGNoT1Mn
LCBzb2Z0d2FyZV92ZXJzaW9uPXNlbGYud2F0Y2hvc192ZXJzaW9uKCkpCisKKyAgICAgICAgaWYg
bm90IHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnLCBGYWxzZSk6CisgICAg
ICAgICAgICBudW1fYm9vdGVkX3NpbXMgPSBsZW4oU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5kZXZp
Y2VfYnlfZmlsdGVyKGZpbHRlcl9ib290ZWRfd2F0Y2hvc19kZXZpY2VzLCBob3N0PXNlbGYuaG9z
dCkpCisgICAgICAgICAgICBpZiBudW1fYm9vdGVkX3NpbXM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bV9ib290ZWRfc2ltcworICAgICAgICByZXR1cm4gU2ltdWxhdGVkRGV2aWNlTWFuYWdl
ci5tYXhfc3VwcG9ydGVkX3NpbXVsYXRvcnMoc2VsZi5ob3N0KQorCisgICAgZGVmIF9zZXRfZGV2
aWNlX2NsYXNzKHNlbGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX2RldmljZV9jbGFz
cyA9IGRldmljZV9jbGFzcyBvciBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCisKKyAgICBkZWYg
X2NyZWF0ZV9kZXZpY2VzKHNlbGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX3NldF9k
ZXZpY2VfY2xhc3MoZGV2aWNlX2NsYXNzKQorICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5
cGUuZnJvbV9zdHJpbmcoc2VsZi5fZGV2aWNlX2NsYXNzLCBzZWxmLndhdGNob3NfdmVyc2lvbigp
KQorCisgICAgICAgIF9sb2cuZGVidWcoJ1xuQ3JlYXRpbmcgZGV2aWNlcyBmb3Ige30nLmZvcm1h
dChkZXZpY2VfdHlwZSkpCisKKyAgICAgICAgcmVxdWVzdCA9IERldmljZVJlcXVlc3QoCisgICAg
ICAgICAgICBkZXZpY2VfdHlwZSwKKyAgICAgICAgICAgIHVzZV9ib290ZWRfc2ltdWxhdG9yPW5v
dCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJywgRmFsc2UpLAorICAgICAg
ICAgICAgdXNlX2V4aXN0aW5nX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIGFsbG93X2lu
Y29tcGxldGVfbWF0Y2g9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBTaW11bGF0ZWREZXZpY2VN
YW5hZ2VyLmluaXRpYWxpemVfZGV2aWNlcyhbcmVxdWVzdF0gKiBzZWxmLmNoaWxkX3Byb2Nlc3Nl
cygpLCBzZWxmLmhvc3QpCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICd3YXRjaG9zLXNpbXVsYXRvcicKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhz
ZWxmKToKKyAgICAgICAgdGFyZ2V0X2RldmljZV90eXBlID0gRGV2aWNlVHlwZShzb2Z0d2FyZV92
YXJpYW50PSd3YXRjaE9TJywgc29mdHdhcmVfdmVyc2lvbj1zZWxmLndhdGNob3NfdmVyc2lvbigp
KQorICAgICAgICBmb3IgZGV2aWNlIGluIFNpbXVsYXRlZERldmljZU1hbmFnZXIuYXZhaWxhYmxl
X2RldmljZXMoc2VsZi5ob3N0KToKKyAgICAgICAgICAgIGlmIGRldmljZS5wbGF0Zm9ybV9kZXZp
Y2UuZGV2aWNlX3R5cGUgaW4gdGFyZ2V0X2RldmljZV90eXBlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBzdXBlcihXYXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKCkKKyAg
ICAgICAgX2xvZy5lcnJvcignTm8gU2ltdWxhdGVkIGRldmljZSBtYXRjaGluZyAie30iIGZvdW5k
IGluIHdhdGNoT1MgU0RLJy5mb3JtYXQoc3RyKHRhcmdldF9kZXZpY2VfdHlwZSkpKQorICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwg
c2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIF9sb2cuZGVidWcoJ1NldHRpbmcgdXAgZW52aXJv
bm1lbnQgZm9yIHNlcnZlciBvbiB7fScuZm9ybWF0KHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpKSkK
KyAgICAgICAgZW52ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZp
cm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNl
bGYuZHJpdmVyX25hbWUoKSBhbmQgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAg
ICAgZW52WydNYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydfX1hQ
Q19NYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydNYWxsb2NTY3Jp
YmJsZSddID0gJzEnCisgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxlJ10gPSAn
MScKKyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYp
OgorICAgICAgICBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLnRlYXJfZG93bihzZWxmLmhvc3QpCisK
KyAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmlu
ZCgnbm0nKQorCisgICAgQHByb3BlcnR5CisgICAgQG1lbW9pemVkCisgICAgZGVmIGRldmVsb3Bl
cl9kaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
Wyd4Y29kZS1zZWxlY3QnLCAnLS1wcmludC1wYXRoJ10pLnJzdHJpcCgpCisKKyAgICBkZWYgbG9n
Z2luZ19wYXR0ZXJuc190b19zdHJpcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBk
ZWYgc3RkZXJyX3BhdHRlcm5zX3RvX3N0cmlwKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3JfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVs
YXRvcl91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd2F0Y2hfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZl
MiwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJl
IGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9y
dCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LnBvcnQud2F0Y2hfc2ltdWxhdG9yIGltcG9ydCBXYXRj
aFNpbXVsYXRvclBvcnQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgd2F0Y2hfdGVzdGNhc2UK
K2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworCitjbGFz
cyBXYXRjaFNpbXVsYXRvclRlc3Qod2F0Y2hfdGVzdGNhc2UuV2F0Y2hUZXN0KToKKyAgICAjIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTA3CisgICAg
b3NfbmFtZSA9ICdtYWMnCisgICAgb3NfdmVyc2lvbiA9IE5vbmUKKyAgICBwb3J0X25hbWUgPSAn
d2F0Y2gtc2ltdWxhdG9yJworICAgIHBvcnRfbWFrZXIgPSBXYXRjaFNpbXVsYXRvclBvcnQKKwor
ICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9u
cz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbig1KSwgKiprd2FyZ3MpOgor
ICAgICAgICBwb3J0ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JUZXN0LCBzZWxmKS5tYWtlX3BvcnQo
aG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9
b3NfbmFtZSwgb3NfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0
CisKKyAgICBkZWYgdGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6CisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGxlYWtzPVRydWUsIGd1
YXJkX21hbGxvYz1UcnVlKSkKKyAgICAgICAgZW52ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9z
ZXJ2ZXIocG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsn
TWFsbG9jU3RhY2tMb2dnaW5nJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZb
J01hbGxvY1NjcmliYmxlJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0RZ
TERfSU5TRVJUX0xJQlJBUklFUyddLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisKKyAg
ICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd3YXRjaG9zLXNpbXVsYXRvcicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3Rl
bSgpKQorCisgICAgZGVmIHRlc3RfMzJiaXQoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisKKyAgICAg
ICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKKyAgICAgICAg
ICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Nj
cmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYn
KQorICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLXNkaycsICd3YXRjaHNpbXVsYXRvcicsICdBUkNIUz14ODYnXSkKKwor
ICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnd2F0Y2hzaW11bGF0b3In
KQorCisgICAgZGVmIHRlc3RfeGNydW4oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5f
Y29tbWFuZChhcmdzKToKKyAgICAgICAgICAgIHByaW50KGFyZ3MpCisgICAgICAgICAgICByYWlz
ZSBTY3JpcHRFcnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisgICAg
ICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93
aW5nX3J1bl9jb21tYW5kKQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICct
LXNkaycsICd3YXRjaHNpbXVsYXRvcicsICctZmluZCcsICd0ZXN0J11cbiIKKyAgICAgICAgT3V0
cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQueGNydW5fZmluZCwgYXJncz1b
J3Rlc3QnLCAnZmFsbGluZyddLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3Rlc3RjYXNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF90ZXN0Y2FzZS5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfdGVzdGNhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorZnJvbSB3ZWJraXRweS5jb21tb24u
dmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5f
dGVzdGNhc2UKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMK
KworCitjbGFzcyBXYXRjaFRlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgorICAgIGRp
c2FibGVfc2V0dXAgPSBUcnVlCisKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwg
cG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPVZl
cnNpb24oNSksICoqa3dhcmdzKToKKyAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgIG9w
dGlvbnMuYXJjaGl0ZWN0dXJlID0gJ3g4NicKKyAgICAgICAgICAgIG9wdGlvbnMud2Via2l0X3Rl
c3RfcnVubmVyID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyA9IE1v
Y2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2Jywgd2Via2l0X3Rlc3RfcnVubmVyPVRydWUsIGNv
bmZpZ3VyYXRpb249J1JlbGVhc2UnKQorICAgICAgICBwb3J0ID0gc3VwZXIoV2F0Y2hUZXN0LCBz
ZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9w
dGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgb3NfdmVyc2lvbj1Ob25lLCBrd2FyZ3M9a3dhcmdzKQor
ICAgICAgICBwb3J0LnNldF9vcHRpb24oJ3ZlcnNpb24nLCBzdHIob3NfdmVyc2lvbikpCisgICAg
ICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9kcml2ZXJfbmFtZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydCgpLmRyaXZlcl9uYW1lKCksICdXZWJL
aXRUZXN0UnVubmVyQXBwLmFwcCcpCisKKyAgICAjIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB0ZXN0
IG9uY2Ugd2UgZGV0ZXJtaW5lIHdoYXQgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSA8cmRhcjovL3By
b2JsZW0vMzkzNjIyNDE+CisgICAgZGVmIHRlc3RfYmFzZWxpbmVfc2VhcmNocGF0aChzZWxmKToK
KyAgICAgICAgcGFzcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355668</attachid>
            <date>2018-11-26 13:09:31 -0800</date>
            <delta_ts>2018-11-27 15:51:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191974-20181126130931.patch</filename>
            <type>text/plain</type>
            <size>25506</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzODQ5OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE4LTExLTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIHdhdGNoT1MgcG9ydHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTk3NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDYyNTEwNTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAg
KFBvcnRGYWN0b3J5KTogQWRkIFdhdGNoRGV2aWNlIGFuZCBXYXRjaFNpbXVsYXRvciBwb3J0cy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2gucHk6IEFkZGVkLgorICAgICAg
ICAoV2F0Y2hQb3J0KTogQmFzZSBjbGFzcyBmb3Igd2F0Y2hPUyBwb3J0cy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfZGV2aWNlLnB5OiBBZGRlZC4KKyAgICAgICAgKFdh
dGNoRGV2aWNlUG9ydCk6IENsYXNzIGZvciBydW5uaW5nIGxheW91dCB0ZXN0cyBvbiBhIHdhdGNo
T1MgZGV2aWNlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0
b3IucHk6IEFkZGVkLgorICAgICAgICAoV2F0Y2hTaW11bGF0b3JQb3J0KTogQ2xhc3MgZm9yIHJ1
bm5pbmcgbGF5b3V0IHRlc3RzIG9uIGEgd2F0Y2hPUyBzaW11bGF0b3IuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvcl91bml0dGVzdC5weTogQWRkZWQuCisg
ICAgICAgIChXYXRjaFNpbXVsYXRvclRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC93YXRjaF90ZXN0Y2FzZS5weTogQWRkZWQuCisgICAgICAgIChXYXRjaFRlc3QpOgorCiAy
MDE4LTExLTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q11bSUZDXSBVc2UgZmxvYXQgYm94J3MgbWFyZ2luIGJveCB0byBhZGp1c3QgdGhlIGxpbmUgY29u
c3RyYWludHMuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQkocmV2
aXNpb24gMjM4NDk1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAjCiAjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtOTEsNiArOTEsOCBAQCBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3QpOgogICAgICAgICAnZ3Rr
Lkd0a1BvcnQnLAogICAgICAgICAnaW9zX3NpbXVsYXRvci5JT1NTaW11bGF0b3JQb3J0JywKICAg
ICAgICAgJ2lvc19kZXZpY2UuSU9TRGV2aWNlUG9ydCcsCisgICAgICAgICd3YXRjaF9zaW11bGF0
b3IuV2F0Y2hTaW11bGF0b3JQb3J0JywKKyAgICAgICAgJ3dhdGNoX2RldmljZS5XYXRjaERldmlj
ZVBvcnQnLAogICAgICAgICAnanNjX29ubHkuSnNjT25seVBvcnQnLAogICAgICAgICAnbWFjLk1h
Y1BvcnQnLAogICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQnLApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dhdGNoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC93YXRjaC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2F0Y2gucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZwor
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29tbW9u
LnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwLCBJTlRFUk5BTF9UQUJMRQor
ZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCitmcm9tIHdl
YmtpdHB5LnBvcnQuZGV2aWNlX3BvcnQgaW1wb3J0IERldmljZVBvcnQKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgV2F0Y2hQb3J0KERldmljZVBvcnQp
OgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zJworCisgICAgQ1VSUkVOVF9WRVJTSU9OID0gVmVy
c2lvbig1KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIHN1cGVyKFdhdGNoUG9ydCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpID09
IEZhbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEdW1wUmVuZGVyVHJlZSBp
cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uJykKKworICAgIGRlZiBkcml2ZXJfbmFt
ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKQorICAgICAgICBy
ZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJworCisgICAgZGVmIHZlcnNpb25fbmFtZShz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3Qu
cGxhdGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwgcGxhdGZvcm09V2F0Y2hQb3J0LnBv
cnRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYp
OgorICAgICAgICByZXR1cm4gNAorCisgICAgQG1lbW9pemVkCisgICAgZGVmIGRlZmF1bHRfYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIHZlcnNpb25zX3RvX2ZhbGxiYWNrID0g
W10KKyAgICAgICAgaWYgc2VsZi53YXRjaG9zX3ZlcnNpb24oKSA9PSBzZWxmLkNVUlJFTlRfVkVS
U0lPTjoKKyAgICAgICAgICAgIHZlcnNpb25zX3RvX2ZhbGxiYWNrID0gW3NlbGYuQ1VSUkVOVF9W
RVJTSU9OXQorICAgICAgICBlbGlmIHNlbGYud2F0Y2hvc192ZXJzaW9uKCk6CisgICAgICAgICAg
ICB0ZW1wX3ZlcnNpb24gPSBWZXJzaW9uKHNlbGYud2F0Y2hvc192ZXJzaW9uKCkubWFqb3IpCisg
ICAgICAgICAgICB3aGlsZSB0ZW1wX3ZlcnNpb24ubWFqb3IgIT0gc2VsZi5DVVJSRU5UX1ZFUlNJ
T04ubWFqb3I6CisgICAgICAgICAgICAgICAgdmVyc2lvbnNfdG9fZmFsbGJhY2suYXBwZW5kKFZl
cnNpb24uZnJvbV9pdGVyYWJsZSh0ZW1wX3ZlcnNpb24pKQorICAgICAgICAgICAgICAgIGlmIHRl
bXBfdmVyc2lvbiA8IHNlbGYuQ1VSUkVOVF9WRVJTSU9OOgorICAgICAgICAgICAgICAgICAgICB0
ZW1wX3ZlcnNpb24ubWFqb3IgKz0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHRlbXBfdmVyc2lvbi5tYWpvciAtPSAxCisKKyAgICAgICAgZXhwZWN0YXRpb25z
ID0gW10KKyAgICAgICAgZm9yIHZlcnNpb24gaW4gdmVyc2lvbnNfdG9fZmFsbGJhY2s6CisgICAg
ICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgICAgICBhcHBsZV9uYW1l
ID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZSh2ZXJzaW9u
LCBwbGF0Zm9ybT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJsZT1JTlRFUk5BTF9UQUJMRSkKKyAg
ICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIGFwcGxlX25hbWUubG93ZXIoKS5yZXBs
YWNlKCcgJywgJycpKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB2ZXJzaW9u
Lm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBl
eHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoc2VsZi5wb3J0X25h
bWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9w
YXRoKHNlbGYucG9ydF9uYW1lKSkKKworICAgICAgICBmb3IgdmVyc2lvbiBpbiB2ZXJzaW9uc190
b19mYWxsYmFjazoKKyAgICAgICAgICAgIGFwcGxlX25hbWUgPSBOb25lCisgICAgICAgICAgICBp
ZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgICAgICBhcHBsZV9uYW1lID0gVmVyc2lv
bk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9y
bT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJsZT1JTlRFUk5BTF9UQUJMRSkKKyAgICAgICAgICAg
IGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1h
dChXYXRjaFBvcnQucG9ydF9uYW1lLCBhcHBsZV9uYW1lLmxvd2VyKCkucmVwbGFjZSgnICcsICcn
KSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgne30te30nLmZvcm1hdChXYXRjaFBvcnQucG9ydF9uYW1lLCB2ZXJzaW9uLm1ham9y
KSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoV2F0Y2hQb3J0LnBvcnRfbmFt
ZSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgoV2F0Y2hQb3J0LnBvcnRfbmFtZSkpCisKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChz
ZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2syJykpCisKKyAgICAgICAgcmV0dXJuIGV4cGVj
dGF0aW9ucworCisgICAgZGVmIHdhdGNob3NfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBUaGUg
aW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jaXRvbiBkaWZmZXJzIGJldHdlZW4gb24tZGV2aWNl
IGFuZCBzaW11bGF0b3IgdGVzdGluZy4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX2RldmljZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfZGV2aWNlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9kZXZpY2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5jb21t
b24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
Y3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2Fk
ZGl0aW9ucworZnJvbSB3ZWJraXRweS5wb3J0LndhdGNoIGltcG9ydCBXYXRjaFBvcnQKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdhdGNoRGV2aWNlUG9y
dChXYXRjaFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zLWRldmljZScKKworICAgIEFS
Q0hJVEVDVFVSRVMgPSBbJ2FybXY3aycsICdhcm02NGUnLCAnYXJtNjRfMzInXQorICAgIERFRkFV
TFRfQVJDSElURUNUVVJFID0gJ2FybXY3aycKKworICAgIFNESyA9IGFwcGxlX2FkZGl0aW9ucygp
LmdldF9zZGsoJ3dhdGNob3MnKSBpZiBhcHBsZV9hZGRpdGlvbnMoKSBlbHNlICd3YXRjaG9zJwor
ICAgIERFVklDRV9NQU5BR0VSID0gYXBwbGVfYWRkaXRpb25zKCkuZGV2aWNlX21hbmFnZXIoKSBp
ZiBhcHBsZV9hZGRpdGlvbnMoKSBlbHNlIE5vbmUKKyAgICBOT19PTl9ERVZJQ0VfVEVTVElORyA9
ICdPbi1kZXZpY2UgdGVzdGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbWFjaGluZScKKwor
ICAgIEBtZW1vaXplZAorICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAg
ICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICByZXR1cm4gbGVuKGFwcGxl
X2FkZGl0aW9ucygpLmRldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoc2VsZiwgc29mdHdhcmVf
dmFyaWFudD0nd2F0Y2hPUycpKQorICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIF9kcml2ZXJf
Y2xhc3Moc2VsZik6CisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAg
cmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLmRldmljZV9kcml2ZXIoKQorICAgICAgICByZXR1cm4g
c3VwZXIoV2F0Y2hEZXZpY2VQb3J0LCBzZWxmKS5fZHJpdmVyX2NsYXNzKCkKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRp
b25zLCBwb3J0X25hbWUpOgorICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZToK
KyAgICAgICAgICAgIHdhdGNob3Nfc2RrX3ZlcnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nk
a192ZXJzaW9uKGNscy5TREspCisgICAgICAgICAgICBpZiBub3Qgd2F0Y2hvc19zZGtfdmVyc2lv
bjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBpbnN0YWxsIHRoZSB3
YXRjaE9TIFNESy4iKQorICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsg
c3RyKHdhdGNob3Nfc2RrX3ZlcnNpb24ubWFqb3IpCisgICAgICAgIHJldHVybiBwb3J0X25hbWUK
KworICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CisgICAgICAgIGlmIG5vdCBhcHBs
ZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09O
X0RFVklDRV9URVNUSU5HKQorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25zKCkuZGV2aWNl
X2NyYXNoX2xvZ19wYXRoKCkKKworICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5f
bG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAg
ICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Q3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190
b19za2lwPXNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcF9mb3JfaG9zdC5nZXQoZGV2aWNlLCBbXSkp
CisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5j
bHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJu
IGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0
OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFdhdGNoRGV2aWNlUG9ydCwgc2VsZikuX2dldF9j
cmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10
aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPXdhaXRfZm9yX2xvZywgdGFy
Z2V0X2hvc3Q9dGFyZ2V0X2hvc3QpCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNlYXJjaCBldmVy
eSBkZXZpY2Ugc2luY2Ugb25lIHdhcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBmb3IgZGV2aWNl
IGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAgICAgc3RkZXJyX291dCwgY3Jhc2hsb2cgPSBz
dXBlcihXYXRjaERldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBf
Zm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAg
aWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQor
ICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKKworICAgIEBtZW1vaXplZAorICAgIGRlZiB3
YXRjaG9zX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lv
bicpOgorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24uZnJvbV9zdHJpbmcoc2VsZi5nZXRfb3B0
aW9uKCd2ZXJzaW9uJykpCisKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCisK
KyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpLmRldmljZV9mb3Jfd29ya2VyX251bWJl
cl9tYXAoc2VsZiwgc29mdHdhcmVfdmFyaWFudD0nd2F0Y2hPUycpOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdObyBkZXZpY2VzIGFyZSBhdmFpbGFibGUnKQorICAgICAgICB2ZXJz
aW9uID0gTm9uZQorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygpOgorICAgICAg
ICAgICAgaWYgbm90IHZlcnNpb246CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IGRldmljZS5w
bGF0Zm9ybS5vc192ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlm
IGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9IHZlcnNpb246CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlwbGUgY29ubmVjdGVkIGRldmljZXMgaGF2ZSBk
aWZmZXJlbnQgd2F0Y2hPUyB2ZXJzaW9ucycpCisgICAgICAgIHJldHVybiB2ZXJzaW9uCisKKyAg
ICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9i
bGVtLzMwNDk3OTkxPi4KKyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3Rl
bShzZWxmKToKKyAgICAgICAgcmV0dXJuICd3YXRjaG9zLWRldmljZScKKworICAgIGRlZiBfY3Jl
YXRlX2RldmljZXMoc2VsZiwgZGV2aWNlX2NsYXNzKToKKyAgICAgICAgaWYgbm90IGFwcGxlX2Fk
ZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVW
SUNFX1RFU1RJTkcpCisgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKS5kZXZpY2VfZm9y
X3dvcmtlcl9udW1iZXJfbWFwKHNlbGYsIHNvZnR3YXJlX3ZhcmlhbnQ9J3dhdGNoT1MnKToKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIGZv
ciB0ZXN0aW5nJykKKworICAgICAgICBpZiBzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkg
PCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdOb3QgZW5vdWdodCBjb25uZWN0ZWQgZGV2aWNlcyBmb3Ige30gcHJvY2Vzc2VzJy5mb3JtYXQo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2Vs
Zik6CisgICAgICAgIHN1cGVyKFdhdGNoRGV2aWNlUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9y
dW4oKQorICAgICAgICBhcHBsZV9hZGRpdGlvbnMoKS5kZXZpY2VfY2xlYW5fdXBfdGVzdF9ydW4o
c2VsZiwgc2VsZi5fcGF0aF90b19kcml2ZXIoKSwgc2VsZi5fYnVpbGRfcGF0aCgpKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfc2ltdWxhdG9yLnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3Iu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5jb21t
b24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9u
IGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9h
ZGRpdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydC53YXRjaCBpbXBvcnQgV2F0Y2hQb3J0Citmcm9t
IHdlYmtpdHB5Lnhjb2RlLmRldmljZV90eXBlIGltcG9ydCBEZXZpY2VUeXBlCitmcm9tIHdlYmtp
dHB5Lnhjb2RlLnNpbXVsYXRlZF9kZXZpY2UgaW1wb3J0IERldmljZVJlcXVlc3QsIFNpbXVsYXRl
ZERldmljZU1hbmFnZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIFdhdGNoU2ltdWxhdG9yUG9ydChXYXRjaFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3
YXRjaG9zLXNpbXVsYXRvcicKKworICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4NiddCisgICAgREVG
QVVMVF9BUkNISVRFQ1RVUkUgPSAneDg2JworCisgICAgREVWSUNFX01BTkFHRVIgPSBTaW11bGF0
ZWREZXZpY2VNYW5hZ2VyCisKKyAgICBERUZBVUxUX0RFVklDRV9DTEFTUyA9ICdBcHBsZSBXYXRj
aCBTZXJpZXMgMyAtIDQybW0nCisgICAgQ1VTVE9NX0RFVklDRV9DTEFTU0VTID0gW10KKyAgICBT
REsgPSBhcHBsZV9hZGRpdGlvbnMoKS5nZXRfc2RrKCd3YXRjaHNpbXVsYXRvcicpIGlmIGFwcGxl
X2FkZGl0aW9ucygpIGVsc2UgJ3dhdGNoc2ltdWxhdG9yJworCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFdhdGNoU2ltdWxhdG9yUG9ydCwg
c2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuX3NldF9kZXZp
Y2VfY2xhc3Moc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKSkKKyAgICAgICAgX2xvZy5k
ZWJ1ZygnV2F0Y2hTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMgJXMnLCBzZWxmLl9kZXZp
Y2VfY2xhc3MpCisKKyAgICAjIFRoaXMgc3VwcG9ydHMgdGhlIG1hcHBpbmcgb2YgYSBwb3J0IG5h
bWUgc3VjaCBhcyB3YXRjaG9zLXNpbXVsYXRvci01IHRvIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBw
b3J0CisgICAgIyB1c2luZyB3YXRjaE9TIDUuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBf
dmVyc2lvbl9mcm9tX25hbWUobmFtZSk6CisgICAgICAgIGlmIGxlbihuYW1lLnNwbGl0KCctJykp
ID4gMiBhbmQgbmFtZS5zcGxpdCgnLScpWzJdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHJldHVy
biBWZXJzaW9uLmZyb21fc3RyaW5nKG5hbWUuc3BsaXQoJy0nKVsyXSkKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIEBtZW1vaXplZAorICAgIGRlZiB3YXRjaG9zX3ZlcnNpb24oc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgorICAgICAgICAgICAgcmV0dXJu
IFZlcnNpb24uZnJvbV9zdHJpbmcoc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCisgICAgICAg
IHJldHVybiBXYXRjaFNpbXVsYXRvclBvcnQuX3ZlcnNpb25fZnJvbV9uYW1lKHNlbGYuX25hbWUp
IG9yIHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignd2F0Y2hzaW11bGF0b3In
KQorCisgICAgZGVmIGVudmlyb25tZW50X2Zvcl9hcGlfdGVzdHMoc2VsZik6CisgICAgICAgIGlu
aGVyaXRlZF9lbnYgPSBzdXBlcihXYXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmVudmlyb25tZW50
X2Zvcl9hcGlfdGVzdHMoKQorICAgICAgICBuZXdfZW52aXJvbm1lbnQgPSB7fQorICAgICAgICBT
SU1DVExfRU5WX1BSRUZJWCA9ICdTSU1DVExfQ0hJTERfJworICAgICAgICBmb3IgdmFsdWUgaW4g
aW5oZXJpdGVkX2VudjoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNU
TF9FTlZfUFJFRklYKToKKyAgICAgICAgICAgICAgICBuZXdfZW52aXJvbm1lbnRbU0lNQ1RMX0VO
Vl9QUkVGSVggKyB2YWx1ZV0gPSBpbmhlcml0ZWRfZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBuZXdfZW52aXJvbm1lbnRbdmFsdWVdID0gaW5oZXJpdGVkX2Vu
dlt2YWx1ZV0KKyAgICAgICAgcmV0dXJuIG5ld19lbnZpcm9ubWVudAorCisgICAgQG1lbW9pemVk
CisgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICBkZWYgZmls
dGVyX2Jvb3RlZF93YXRjaG9zX2RldmljZXMoZGV2aWNlKToKKyAgICAgICAgICAgIGlmIG5vdCBk
ZXZpY2UucGxhdGZvcm1fZGV2aWNlLmlzX2Jvb3RlZF9vcl9ib290aW5nKCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlLnBsYXRmb3JtX2Rl
dmljZS5kZXZpY2VfdHlwZSBpbiBEZXZpY2VUeXBlKHNvZnR3YXJlX3ZhcmlhbnQ9J3dhdGNoT1Mn
LCBzb2Z0d2FyZV92ZXJzaW9uPXNlbGYud2F0Y2hvc192ZXJzaW9uKCkpCisKKyAgICAgICAgaWYg
bm90IHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnLCBGYWxzZSk6CisgICAg
ICAgICAgICBudW1fYm9vdGVkX3NpbXMgPSBsZW4oU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5kZXZp
Y2VfYnlfZmlsdGVyKGZpbHRlcl9ib290ZWRfd2F0Y2hvc19kZXZpY2VzLCBob3N0PXNlbGYuaG9z
dCkpCisgICAgICAgICAgICBpZiBudW1fYm9vdGVkX3NpbXM6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bV9ib290ZWRfc2ltcworICAgICAgICByZXR1cm4gU2ltdWxhdGVkRGV2aWNlTWFuYWdl
ci5tYXhfc3VwcG9ydGVkX3NpbXVsYXRvcnMoc2VsZi5ob3N0KQorCisgICAgZGVmIF9zZXRfZGV2
aWNlX2NsYXNzKHNlbGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX2RldmljZV9jbGFz
cyA9IGRldmljZV9jbGFzcyBvciBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCisKKyAgICBkZWYg
X2NyZWF0ZV9kZXZpY2VzKHNlbGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX3NldF9k
ZXZpY2VfY2xhc3MoZGV2aWNlX2NsYXNzKQorICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5
cGUuZnJvbV9zdHJpbmcoc2VsZi5fZGV2aWNlX2NsYXNzLCBzZWxmLndhdGNob3NfdmVyc2lvbigp
KQorCisgICAgICAgIF9sb2cuZGVidWcoJ1xuQ3JlYXRpbmcgZGV2aWNlcyBmb3Ige30nLmZvcm1h
dChkZXZpY2VfdHlwZSkpCisKKyAgICAgICAgcmVxdWVzdCA9IERldmljZVJlcXVlc3QoCisgICAg
ICAgICAgICBkZXZpY2VfdHlwZSwKKyAgICAgICAgICAgIHVzZV9ib290ZWRfc2ltdWxhdG9yPW5v
dCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJywgRmFsc2UpLAorICAgICAg
ICAgICAgdXNlX2V4aXN0aW5nX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIGFsbG93X2lu
Y29tcGxldGVfbWF0Y2g9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBTaW11bGF0ZWREZXZpY2VN
YW5hZ2VyLmluaXRpYWxpemVfZGV2aWNlcyhbcmVxdWVzdF0gKiBzZWxmLmNoaWxkX3Byb2Nlc3Nl
cygpLCBzZWxmLmhvc3QpCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICd3YXRjaG9zLXNpbXVsYXRvcicKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhz
ZWxmKToKKyAgICAgICAgdGFyZ2V0X2RldmljZV90eXBlID0gRGV2aWNlVHlwZShzb2Z0d2FyZV92
YXJpYW50PSd3YXRjaE9TJywgc29mdHdhcmVfdmVyc2lvbj1zZWxmLndhdGNob3NfdmVyc2lvbigp
KQorICAgICAgICBmb3IgZGV2aWNlIGluIFNpbXVsYXRlZERldmljZU1hbmFnZXIuYXZhaWxhYmxl
X2RldmljZXMoc2VsZi5ob3N0KToKKyAgICAgICAgICAgIGlmIGRldmljZS5wbGF0Zm9ybV9kZXZp
Y2UuZGV2aWNlX3R5cGUgaW4gdGFyZ2V0X2RldmljZV90eXBlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBzdXBlcihXYXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKCkKKyAg
ICAgICAgX2xvZy5lcnJvcignTm8gU2ltdWxhdGVkIGRldmljZSBtYXRjaGluZyAie30iIGZvdW5k
IGluIHdhdGNoT1MgU0RLJy5mb3JtYXQoc3RyKHRhcmdldF9kZXZpY2VfdHlwZSkpKQorICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwg
c2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIF9sb2cuZGVidWcoJ1NldHRpbmcgdXAgZW52aXJv
bm1lbnQgZm9yIHNlcnZlciBvbiB7fScuZm9ybWF0KHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpKSkK
KyAgICAgICAgZW52ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZp
cm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNl
bGYuZHJpdmVyX25hbWUoKSBhbmQgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAg
ICAgZW52WydNYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydfX1hQ
Q19NYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydNYWxsb2NTY3Jp
YmJsZSddID0gJzEnCisgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxlJ10gPSAn
MScKKyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYp
OgorICAgICAgICBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLnRlYXJfZG93bihzZWxmLmhvc3QpCisK
KyAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmlu
ZCgnbm0nKQorCisgICAgQHByb3BlcnR5CisgICAgQG1lbW9pemVkCisgICAgZGVmIGRldmVsb3Bl
cl9kaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
Wyd4Y29kZS1zZWxlY3QnLCAnLS1wcmludC1wYXRoJ10pLnJzdHJpcCgpCisKKyAgICBkZWYgbG9n
Z2luZ19wYXR0ZXJuc190b19zdHJpcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBk
ZWYgc3RkZXJyX3BhdHRlcm5zX3RvX3N0cmlwKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3JfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVs
YXRvcl91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd2F0Y2hfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZl
MiwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJl
IGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9y
dCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LnBvcnQud2F0Y2hfc2ltdWxhdG9yIGltcG9ydCBXYXRj
aFNpbXVsYXRvclBvcnQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgd2F0Y2hfdGVzdGNhc2UK
K2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworCitjbGFz
cyBXYXRjaFNpbXVsYXRvclRlc3Qod2F0Y2hfdGVzdGNhc2UuV2F0Y2hUZXN0KToKKyAgICAjIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTA3CisgICAg
b3NfbmFtZSA9ICdtYWMnCisgICAgb3NfdmVyc2lvbiA9IE5vbmUKKyAgICBwb3J0X25hbWUgPSAn
d2F0Y2gtc2ltdWxhdG9yJworICAgIHBvcnRfbWFrZXIgPSBXYXRjaFNpbXVsYXRvclBvcnQKKwor
ICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9u
cz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbig1KSwgKiprd2FyZ3MpOgor
ICAgICAgICBwb3J0ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JUZXN0LCBzZWxmKS5tYWtlX3BvcnQo
aG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9
b3NfbmFtZSwgb3NfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0
CisKKyAgICBkZWYgdGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6CisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGxlYWtzPVRydWUsIGd1
YXJkX21hbGxvYz1UcnVlKSkKKyAgICAgICAgZW52ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9z
ZXJ2ZXIocG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsn
TWFsbG9jU3RhY2tMb2dnaW5nJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZb
J01hbGxvY1NjcmliYmxlJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0RZ
TERfSU5TRVJUX0xJQlJBUklFUyddLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisKKyAg
ICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd3YXRjaG9zLXNpbXVsYXRvcicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3Rl
bSgpKQorCisgICAgZGVmIHRlc3RfMzJiaXQoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisKKyAgICAg
ICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKKyAgICAgICAg
ICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Nj
cmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYn
KQorICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLXNkaycsICd3YXRjaHNpbXVsYXRvcicsICdBUkNIUz14ODYnXSkKKwor
ICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnd2F0Y2hzaW11bGF0b3In
KQorCisgICAgZGVmIHRlc3RfeGNydW4oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5f
Y29tbWFuZChhcmdzKToKKyAgICAgICAgICAgIHByaW50KGFyZ3MpCisgICAgICAgICAgICByYWlz
ZSBTY3JpcHRFcnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisgICAg
ICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93
aW5nX3J1bl9jb21tYW5kKQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICct
LXNkaycsICd3YXRjaHNpbXVsYXRvcicsICctZmluZCcsICd0ZXN0J11cbiIKKyAgICAgICAgT3V0
cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQueGNydW5fZmluZCwgYXJncz1b
J3Rlc3QnLCAnZmFsbGluZyddLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3Rlc3RjYXNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF90ZXN0Y2FzZS5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfdGVzdGNhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnJvbSB3ZWJraXRweS5jb21tb24u
dmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5f
dGVzdGNhc2UKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMK
KworCitjbGFzcyBXYXRjaFRlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgorICAgIGRp
c2FibGVfc2V0dXAgPSBUcnVlCisKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwg
cG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPVZl
cnNpb24oNSksICoqa3dhcmdzKToKKyAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgIG9w
dGlvbnMuYXJjaGl0ZWN0dXJlID0gJ3g4NicKKyAgICAgICAgICAgIG9wdGlvbnMud2Via2l0X3Rl
c3RfcnVubmVyID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyA9IE1v
Y2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2Jywgd2Via2l0X3Rlc3RfcnVubmVyPVRydWUsIGNv
bmZpZ3VyYXRpb249J1JlbGVhc2UnKQorICAgICAgICBwb3J0ID0gc3VwZXIoV2F0Y2hUZXN0LCBz
ZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9w
dGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgb3NfdmVyc2lvbj1Ob25lLCBrd2FyZ3M9a3dhcmdzKQor
ICAgICAgICBwb3J0LnNldF9vcHRpb24oJ3ZlcnNpb24nLCBzdHIob3NfdmVyc2lvbikpCisgICAg
ICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9kcml2ZXJfbmFtZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydCgpLmRyaXZlcl9uYW1lKCksICdXZWJL
aXRUZXN0UnVubmVyQXBwLmFwcCcpCisKKyAgICBkZWYgdGVzdF9iYXNlbGluZV9zZWFyY2hwYXRo
KHNlbGYpOgorICAgICAgICBzZWFyY2hfcGF0aCA9IHNlbGYubWFrZV9wb3J0KCkuZGVmYXVsdF9i
YXNlbGluZV9zZWFyY2hfcGF0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3Bh
dGhbLTFdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFstMl0sICcvbW9jay1jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93YXRjaG9zJykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355800</attachid>
            <date>2018-11-27 15:52:00 -0800</date>
            <delta_ts>2018-11-27 16:29:49 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191974-20181127155200.patch</filename>
            <type>text/plain</type>
            <size>25612</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzODU3OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE4LTExLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIHdhdGNoT1MgcG9ydHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTk3NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNDYyNTEwNTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWFrYXNoIEphaW4uCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAgKFBv
cnRGYWN0b3J5KTogQWRkIFdhdGNoRGV2aWNlIGFuZCBXYXRjaFNpbXVsYXRvciBwb3J0cy4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2gucHk6IEFkZGVkLgorICAgICAgICAo
V2F0Y2hQb3J0KTogQmFzZSBjbGFzcyBmb3Igd2F0Y2hPUyBwb3J0cy4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfZGV2aWNlLnB5OiBBZGRlZC4KKyAgICAgICAgKFdhdGNo
RGV2aWNlUG9ydCk6IENsYXNzIGZvciBydW5uaW5nIGxheW91dCB0ZXN0cyBvbiBhIHdhdGNoT1Mg
ZGV2aWNlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3Iu
cHk6IEFkZGVkLgorICAgICAgICAoV2F0Y2hTaW11bGF0b3JQb3J0KTogQ2xhc3MgZm9yIHJ1bm5p
bmcgbGF5b3V0IHRlc3RzIG9uIGEgd2F0Y2hPUyBzaW11bGF0b3IuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChXYXRjaFNpbXVsYXRvclRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC93YXRjaF90ZXN0Y2FzZS5weTogQWRkZWQuCisgICAgICAgIChXYXRjaFRlc3QpOgorCiAyMDE4
LTExLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVncmVz
c2lvbihQU09OKSBjcmFzaCB1bmRlciBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9mYWN0b3J5LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9mYWN0b3J5LnB5CShyZXZpc2lvbiAyMzg1NzkpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZmFjdG9yeS5weQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKICMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05MSw2ICs5MSw4IEBAIGNsYXNzIFBvcnRGYWN0b3J5
KG9iamVjdCk6CiAgICAgICAgICdndGsuR3RrUG9ydCcsCiAgICAgICAgICdpb3Nfc2ltdWxhdG9y
LklPU1NpbXVsYXRvclBvcnQnLAogICAgICAgICAnaW9zX2RldmljZS5JT1NEZXZpY2VQb3J0JywK
KyAgICAgICAgJ3dhdGNoX3NpbXVsYXRvci5XYXRjaFNpbXVsYXRvclBvcnQnLAorICAgICAgICAn
d2F0Y2hfZGV2aWNlLldhdGNoRGV2aWNlUG9ydCcsCiAgICAgICAgICdqc2Nfb25seS5Kc2NPbmx5
UG9ydCcsCiAgICAgICAgICdtYWMuTWFjUG9ydCcsCiAgICAgICAgICdtb2NrX2RydC5Nb2NrRFJU
UG9ydCcsCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2gucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaC5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQgbG9nZ2luZworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBv
cnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24K
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1l
TWFwLCBJTlRFUk5BTF9UQUJMRQorZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBw
bGVfYWRkaXRpb25zCitmcm9tIHdlYmtpdHB5LnBvcnQuZGV2aWNlX3BvcnQgaW1wb3J0IERldmlj
ZVBvcnQKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3Mg
V2F0Y2hQb3J0KERldmljZVBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zJworCisgICAg
Q1VSUkVOVF9WRVJTSU9OID0gVmVyc2lvbig1KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFdhdGNoUG9ydCwgc2VsZikuX19pbml0X18o
KmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rl
c3RfcnVubmVyJywgRmFsc2UpID09IEZhbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdEdW1wUmVuZGVyVHJlZSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uJykK
KworICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9u
KCdkcml2ZXJfbmFtZScpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZHJp
dmVyX25hbWUnKQorICAgICAgICByZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJworCisg
ICAgZGVmIHZlcnNpb25fbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25O
YW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwg
cGxhdGZvcm09V2F0Y2hQb3J0LnBvcnRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9u
c19maWxlX3Bvc2l0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gNAorCisgICAgQG1lbW9pemVk
CisgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIHZl
cnNpb25zX3RvX2ZhbGxiYWNrID0gW10KKyAgICAgICAgaWYgc2VsZi53YXRjaG9zX3ZlcnNpb24o
KSA9PSBzZWxmLkNVUlJFTlRfVkVSU0lPTjoKKyAgICAgICAgICAgIHZlcnNpb25zX3RvX2ZhbGxi
YWNrID0gW3NlbGYuQ1VSUkVOVF9WRVJTSU9OXQorICAgICAgICBlbGlmIHNlbGYud2F0Y2hvc192
ZXJzaW9uKCk6CisgICAgICAgICAgICB0ZW1wX3ZlcnNpb24gPSBWZXJzaW9uKHNlbGYud2F0Y2hv
c192ZXJzaW9uKCkubWFqb3IpCisgICAgICAgICAgICB3aGlsZSB0ZW1wX3ZlcnNpb24ubWFqb3Ig
IT0gc2VsZi5DVVJSRU5UX1ZFUlNJT04ubWFqb3I6CisgICAgICAgICAgICAgICAgdmVyc2lvbnNf
dG9fZmFsbGJhY2suYXBwZW5kKFZlcnNpb24uZnJvbV9pdGVyYWJsZSh0ZW1wX3ZlcnNpb24pKQor
ICAgICAgICAgICAgICAgIGlmIHRlbXBfdmVyc2lvbiA8IHNlbGYuQ1VSUkVOVF9WRVJTSU9OOgor
ICAgICAgICAgICAgICAgICAgICB0ZW1wX3ZlcnNpb24ubWFqb3IgKz0gMQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRlbXBfdmVyc2lvbi5tYWpvciAtPSAxCisK
KyAgICAgICAgZXhwZWN0YXRpb25zID0gW10KKyAgICAgICAgZm9yIHZlcnNpb24gaW4gdmVyc2lv
bnNfdG9fZmFsbGJhY2s6CisgICAgICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAg
ICAgICAgICAgICBhcHBsZV9uYW1lID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0
Zm9ybSkudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9ybT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJs
ZT1JTlRFUk5BTF9UQUJMRSkKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNl
bGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIGFw
cGxlX25hbWUubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpKSkpCisgICAgICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNl
bGYucG9ydF9uYW1lLCB2ZXJzaW9uLm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRp
b25zKCk6CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2Vs
aW5lX3BhdGgoc2VsZi5wb3J0X25hbWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNl
bGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKKworICAgICAgICBmb3Ig
dmVyc2lvbiBpbiB2ZXJzaW9uc190b19mYWxsYmFjazoKKyAgICAgICAgICAgIGFwcGxlX25hbWUg
PSBOb25lCisgICAgICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgICAg
ICBhcHBsZV9uYW1lID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9f
bmFtZSh2ZXJzaW9uLCBwbGF0Zm9ybT1XYXRjaFBvcnQucG9ydF9uYW1lLCB0YWJsZT1JTlRFUk5B
TF9UQUJMRSkKKyAgICAgICAgICAgIGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhw
ZWN0YXRpb25zLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXBwbGVfYmFzZWxp
bmVfcGF0aCgne30te30nLmZvcm1hdChXYXRjaFBvcnQucG9ydF9uYW1lLCBhcHBsZV9uYW1lLmxv
d2VyKCkucmVwbGFjZSgnICcsICcnKSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVu
ZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChXYXRjaFBvcnQucG9y
dF9uYW1lLCB2ZXJzaW9uLm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6
CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoV2F0Y2hQb3J0LnBvcnRfbmFtZSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoV2F0Y2hQb3J0LnBvcnRfbmFtZSkpCisKKyAgICAgICAg
ZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2syJykpCisK
KyAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucworCisgICAgZGVmIHdhdGNob3NfdmVyc2lvbihz
ZWxmKToKKyAgICAgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBkaWZm
ZXJzIGJldHdlZW4gb24tZGV2aWNlIGFuZCBzaW11bGF0b3IgdGVzdGluZy4KKyAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3dhdGNoX2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvd2F0Y2hfZGV2aWNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93YXRjaF9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcK
KworZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkucG9ydC5j
b25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucworZnJvbSB3ZWJraXRweS5wb3J0LndhdGNoIGlt
cG9ydCBXYXRjaFBvcnQKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIFdhdGNoRGV2aWNlUG9ydChXYXRjaFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3YXRj
aG9zLWRldmljZScKKworICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3aycsICdhcm02NGUnLCAn
YXJtNjRfMzInXQorICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ2FybXY3aycKKworICAgIFNE
SyA9IGFwcGxlX2FkZGl0aW9ucygpLmdldF9zZGsoJ3dhdGNob3MnKSBpZiBhcHBsZV9hZGRpdGlv
bnMoKSBlbHNlICd3YXRjaG9zJworICAgIERFVklDRV9NQU5BR0VSID0gYXBwbGVfYWRkaXRpb25z
KCkuZGV2aWNlX21hbmFnZXIoKSBpZiBhcHBsZV9hZGRpdGlvbnMoKSBlbHNlIE5vbmUKKyAgICBO
T19PTl9ERVZJQ0VfVEVTVElORyA9ICdPbi1kZXZpY2UgdGVzdGluZyBpcyBub3Qgc3VwcG9ydGVk
IGluIHRoaXMgY29uZmlndXJhdGlvbicKKworICAgIEBtZW1vaXplZAorICAgIGRlZiBkZWZhdWx0
X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6Cisg
ICAgICAgICAgICByZXR1cm4gbGVuKGFwcGxlX2FkZGl0aW9ucygpLmRldmljZV9mb3Jfd29ya2Vy
X251bWJlcl9tYXAoc2VsZiwgc29mdHdhcmVfdmFyaWFudD0nd2F0Y2hPUycpKQorICAgICAgICBy
ZXR1cm4gMQorCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIGlmIGFwcGxl
X2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLmRldmlj
ZV9kcml2ZXIoKQorICAgICAgICByZXR1cm4gc3VwZXIoV2F0Y2hEZXZpY2VQb3J0LCBzZWxmKS5f
ZHJpdmVyX2NsYXNzKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXRlcm1pbmVfZnVs
bF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgorICAgICAgICBpZiBw
b3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZToKKyAgICAgICAgICAgIHdhdGNob3Nfc2RrX3ZlcnNp
b24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKGNscy5TREspCisgICAgICAgICAg
ICBpZiBub3Qgd2F0Y2hvc19zZGtfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlBsZWFzZSBpbnN0YWxsIHRoZSB3YXRjaE9TIFNESy4iKQorICAgICAgICAgICAgcG9y
dF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgc3RyKHdhdGNob3Nfc2RrX3ZlcnNpb24ubWFqb3Ip
CisgICAgICAgIHJldHVybiBwb3J0X25hbWUKKworICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Mo
c2VsZik6CisgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09OX0RFVklDRV9URVNUSU5HKQorICAgICAgICByZXR1
cm4gYXBwbGVfYWRkaXRpb25zKCkuZGV2aWNlX2NyYXNoX2xvZ19wYXRoKCkKKworICAgIGRlZiBf
bG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAg
ICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygp
OgorICAgICAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190b19za2lwPXNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tp
cF9mb3JfaG9zdC5nZXQoZGV2aWNlLCBbXSkpCisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUo
Y3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1u
ZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJuIGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFz
aF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9m
bj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9u
ZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFdh
dGNoRGV2aWNlUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0
ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2Fp
dF9mb3JfbG9nPXdhaXRfZm9yX2xvZywgdGFyZ2V0X2hvc3Q9dGFyZ2V0X2hvc3QpCisKKyAgICAg
ICAgIyBXZSBuZWVkIHRvIHNlYXJjaCBldmVyeSBkZXZpY2Ugc2luY2Ugb25lIHdhcyBub3Qgc3Bl
Y2lmaWVkLgorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAg
ICAgc3RkZXJyX291dCwgY3Jhc2hsb2cgPSBzdXBlcihXYXRjaERldmljZVBvcnQsIHNlbGYpLl9n
ZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0
X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAg
cmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkK
KworICAgIEBtZW1vaXplZAorICAgIGRlZiB3YXRjaG9zX3ZlcnNpb24oc2VsZik6CisgICAgICAg
IGlmIHNlbGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgorICAgICAgICAgICAgcmV0dXJuIFZlcnNp
b24uZnJvbV9zdHJpbmcoc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCisKKyAgICAgICAgaWYg
bm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNl
bGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCisKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9u
cygpLmRldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoc2VsZiwgc29mdHdhcmVfdmFyaWFudD0n
d2F0Y2hPUycpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdObyBkZXZpY2VzIGFy
ZSBhdmFpbGFibGUnKQorICAgICAgICB2ZXJzaW9uID0gTm9uZQorICAgICAgICBmb3IgZGV2aWNl
IGluIHNlbGYuZGV2aWNlcygpOgorICAgICAgICAgICAgaWYgbm90IHZlcnNpb246CisgICAgICAg
ICAgICAgICAgdmVyc2lvbiA9IGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9
IHZlcnNpb246CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlw
bGUgY29ubmVjdGVkIGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgd2F0Y2hPUyB2ZXJzaW9ucycpCisg
ICAgICAgIHJldHVybiB2ZXJzaW9uCisKKyAgICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBp
bXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPi4KKyAgICBkZWYgY2hlY2tf
Zm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAgICAgcmV0dXJuICd3YXRj
aG9zLWRldmljZScKKworICAgIGRlZiBfY3JlYXRlX2RldmljZXMoc2VsZiwgZGV2aWNlX2NsYXNz
KToKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2Ug
UnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCisgICAgICAgIGlmIG5vdCBh
cHBsZV9hZGRpdGlvbnMoKS5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKHNlbGYsIHNvZnR3
YXJlX3ZhcmlhbnQ9J3dhdGNoT1MnKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcign
Tm8gZGV2aWNlcyBhcmUgYXZhaWxhYmxlIGZvciB0ZXN0aW5nJykKKworICAgICAgICBpZiBzZWxm
LmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3QgZW5vdWdodCBjb25uZWN0ZWQgZGV2aWNl
cyBmb3Ige30gcHJvY2Vzc2VzJy5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisKKyAg
ICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHN1cGVyKFdhdGNoRGV2aWNl
UG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorICAgICAgICBhcHBsZV9hZGRpdGlvbnMo
KS5kZXZpY2VfY2xlYW5fdXBfdGVzdF9ydW4oc2VsZiwgc2VsZi5fcGF0aF90b19kcml2ZXIoKSwg
c2VsZi5fYnVpbGRfcGF0aCgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dh
dGNoX3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvd2F0Y2hfc2ltdWxhdG9yLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxv
Z2dpbmcKKworZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5
LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKK2Zyb20gd2Via2l0cHkucG9ydC53
YXRjaCBpbXBvcnQgV2F0Y2hQb3J0Citmcm9tIHdlYmtpdHB5Lnhjb2RlLmRldmljZV90eXBlIGlt
cG9ydCBEZXZpY2VUeXBlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRlZF9kZXZpY2UgaW1w
b3J0IERldmljZVJlcXVlc3QsIFNpbXVsYXRlZERldmljZU1hbmFnZXIKKworX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFdhdGNoU2ltdWxhdG9yUG9ydChXYXRj
aFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICd3YXRjaG9zLXNpbXVsYXRvcicKKworICAgIEFSQ0hJ
VEVDVFVSRVMgPSBbJ2kzODYnXQorICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ2kzODYnCisK
KyAgICBERVZJQ0VfTUFOQUdFUiA9IFNpbXVsYXRlZERldmljZU1hbmFnZXIKKworICAgIERFRkFV
TFRfREVWSUNFX0NMQVNTID0gJ0FwcGxlIFdhdGNoIFNlcmllcyAzIC0gNDJtbScKKyAgICBDVVNU
T01fREVWSUNFX0NMQVNTRVMgPSBbXQorICAgIFNESyA9IGFwcGxlX2FkZGl0aW9ucygpLmdldF9z
ZGsoJ3dhdGNoc2ltdWxhdG9yJykgaWYgYXBwbGVfYWRkaXRpb25zKCkgZWxzZSAnd2F0Y2hzaW11
bGF0b3InCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgc3VwZXIoV2F0Y2hTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2Fy
Z3MpCisKKyAgICAgICAgc2VsZi5fc2V0X2RldmljZV9jbGFzcyhzZWxmLmdldF9vcHRpb24oJ2Rl
dmljZV9jbGFzcycpKQorICAgICAgICBfbG9nLmRlYnVnKCdXYXRjaFNpbXVsYXRvclBvcnQgX2Rl
dmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKKworICAgIGRlZiBhcmNoaXRl
Y3R1cmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLkRFRkFVTFRfQVJDSElURUNUVVJFCisK
KyAgICAjIFRoaXMgc3VwcG9ydHMgdGhlIG1hcHBpbmcgb2YgYSBwb3J0IG5hbWUgc3VjaCBhcyB3
YXRjaG9zLXNpbXVsYXRvci01IHRvIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBwb3J0CisgICAgIyB1
c2luZyB3YXRjaE9TIDUuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfdmVyc2lvbl9mcm9t
X25hbWUobmFtZSk6CisgICAgICAgIGlmIGxlbihuYW1lLnNwbGl0KCctJykpID4gMiBhbmQgbmFt
ZS5zcGxpdCgnLScpWzJdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uLmZy
b21fc3RyaW5nKG5hbWUuc3BsaXQoJy0nKVsyXSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
IEBtZW1vaXplZAorICAgIGRlZiB3YXRjaG9zX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbigndmVyc2lvbicpOgorICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24uZnJv
bV9zdHJpbmcoc2VsZi5nZXRfb3B0aW9uKCd2ZXJzaW9uJykpCisgICAgICAgIHJldHVybiBXYXRj
aFNpbXVsYXRvclBvcnQuX3ZlcnNpb25fZnJvbV9uYW1lKHNlbGYuX25hbWUpIG9yIHNlbGYuaG9z
dC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignd2F0Y2hzaW11bGF0b3InKQorCisgICAgZGVm
IGVudmlyb25tZW50X2Zvcl9hcGlfdGVzdHMoc2VsZik6CisgICAgICAgIGluaGVyaXRlZF9lbnYg
PSBzdXBlcihXYXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmVudmlyb25tZW50X2Zvcl9hcGlfdGVz
dHMoKQorICAgICAgICBuZXdfZW52aXJvbm1lbnQgPSB7fQorICAgICAgICBTSU1DVExfRU5WX1BS
RUZJWCA9ICdTSU1DVExfQ0hJTERfJworICAgICAgICBmb3IgdmFsdWUgaW4gaW5oZXJpdGVkX2Vu
djoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNUTF9FTlZfUFJFRklY
KToKKyAgICAgICAgICAgICAgICBuZXdfZW52aXJvbm1lbnRbU0lNQ1RMX0VOVl9QUkVGSVggKyB2
YWx1ZV0gPSBpbmhlcml0ZWRfZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBuZXdfZW52aXJvbm1lbnRbdmFsdWVdID0gaW5oZXJpdGVkX2Vudlt2YWx1ZV0KKyAg
ICAgICAgcmV0dXJuIG5ld19lbnZpcm9ubWVudAorCisgICAgQG1lbW9pemVkCisgICAgZGVmIGRl
ZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICBkZWYgZmlsdGVyX2Jvb3RlZF93
YXRjaG9zX2RldmljZXMoZGV2aWNlKToKKyAgICAgICAgICAgIGlmIG5vdCBkZXZpY2UucGxhdGZv
cm1fZGV2aWNlLmlzX2Jvb3RlZF9vcl9ib290aW5nKCk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gZGV2aWNlLnBsYXRmb3JtX2RldmljZS5kZXZpY2Vf
dHlwZSBpbiBEZXZpY2VUeXBlKHNvZnR3YXJlX3ZhcmlhbnQ9J3dhdGNoT1MnLCBzb2Z0d2FyZV92
ZXJzaW9uPXNlbGYud2F0Y2hvc192ZXJzaW9uKCkpCisKKyAgICAgICAgaWYgbm90IHNlbGYuZ2V0
X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnLCBGYWxzZSk6CisgICAgICAgICAgICBudW1f
Ym9vdGVkX3NpbXMgPSBsZW4oU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5kZXZpY2VfYnlfZmlsdGVy
KGZpbHRlcl9ib290ZWRfd2F0Y2hvc19kZXZpY2VzLCBob3N0PXNlbGYuaG9zdCkpCisgICAgICAg
ICAgICBpZiBudW1fYm9vdGVkX3NpbXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bV9ib290
ZWRfc2ltcworICAgICAgICByZXR1cm4gU2ltdWxhdGVkRGV2aWNlTWFuYWdlci5tYXhfc3VwcG9y
dGVkX3NpbXVsYXRvcnMoc2VsZi5ob3N0KQorCisgICAgZGVmIF9zZXRfZGV2aWNlX2NsYXNzKHNl
bGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IGRldmljZV9j
bGFzcyBvciBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCisKKyAgICBkZWYgX2NyZWF0ZV9kZXZp
Y2VzKHNlbGYsIGRldmljZV9jbGFzcyk6CisgICAgICAgIHNlbGYuX3NldF9kZXZpY2VfY2xhc3Mo
ZGV2aWNlX2NsYXNzKQorICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9zdHJp
bmcoc2VsZi5fZGV2aWNlX2NsYXNzLCBzZWxmLndhdGNob3NfdmVyc2lvbigpKQorCisgICAgICAg
IF9sb2cuZGVidWcoJ1xuQ3JlYXRpbmcgZGV2aWNlcyBmb3Ige30nLmZvcm1hdChkZXZpY2VfdHlw
ZSkpCisKKyAgICAgICAgcmVxdWVzdCA9IERldmljZVJlcXVlc3QoCisgICAgICAgICAgICBkZXZp
Y2VfdHlwZSwKKyAgICAgICAgICAgIHVzZV9ib290ZWRfc2ltdWxhdG9yPW5vdCBzZWxmLmdldF9v
cHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJywgRmFsc2UpLAorICAgICAgICAgICAgdXNlX2V4
aXN0aW5nX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIGFsbG93X2luY29tcGxldGVfbWF0
Y2g9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBTaW11bGF0ZWREZXZpY2VNYW5hZ2VyLmluaXRp
YWxpemVfZGV2aWNlcyhbcmVxdWVzdF0gKiBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpLCBzZWxmLmhv
c3QpCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAgICAgcmV0dXJuICd3
YXRjaG9zLXNpbXVsYXRvcicKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKKyAgICAg
ICAgdGFyZ2V0X2RldmljZV90eXBlID0gRGV2aWNlVHlwZShzb2Z0d2FyZV92YXJpYW50PSd3YXRj
aE9TJywgc29mdHdhcmVfdmVyc2lvbj1zZWxmLndhdGNob3NfdmVyc2lvbigpKQorICAgICAgICBm
b3IgZGV2aWNlIGluIFNpbXVsYXRlZERldmljZU1hbmFnZXIuYXZhaWxhYmxlX2RldmljZXMoc2Vs
Zi5ob3N0KToKKyAgICAgICAgICAgIGlmIGRldmljZS5wbGF0Zm9ybV9kZXZpY2UuZGV2aWNlX3R5
cGUgaW4gdGFyZ2V0X2RldmljZV90eXBlOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihX
YXRjaFNpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKCkKKyAgICAgICAgX2xvZy5l
cnJvcignTm8gc2ltdWxhdGVkIGRldmljZSBtYXRjaGluZyAie30iIGZvdW5kIGluIHdhdGNoT1Mg
U0RLJy5mb3JtYXQoc3RyKHRhcmdldF9kZXZpY2VfdHlwZSkpKQorICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9
Tm9uZSk6CisgICAgICAgIF9sb2cuZGVidWcoJ1NldHRpbmcgdXAgZW52aXJvbm1lbnQgZm9yIHNl
cnZlciBvbiB7fScuZm9ybWF0KHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpKSkKKyAgICAgICAgZW52
ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIoc2VydmVyX25hbWUpCisgICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNlbGYuZHJpdmVyX25h
bWUoKSBhbmQgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgZW52WydNYWxs
b2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydfX1hQQ19NYWxsb2NTdGFj
a0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgZW52WydNYWxsb2NTY3JpYmJsZSddID0gJzEn
CisgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxlJ10gPSAnMScKKyAgICAgICAg
cmV0dXJuIGVudgorCisgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICBT
aW11bGF0ZWREZXZpY2VNYW5hZ2VyLnRlYXJfZG93bihzZWxmLmhvc3QpCisKKyAgICBkZWYgbm1f
Y29tbWFuZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbm0nKQorCisg
ICAgQHByb3BlcnR5CisgICAgQG1lbW9pemVkCisgICAgZGVmIGRldmVsb3Blcl9kaXIoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y29kZS1zZWxl
Y3QnLCAnLS1wcmludC1wYXRoJ10pLnJzdHJpcCgpCisKKyAgICBkZWYgbG9nZ2luZ19wYXR0ZXJu
c190b19zdHJpcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgc3RkZXJyX3Bh
dHRlcm5zX3RvX3N0cmlwKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF9zaW11bGF0b3JfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3NpbXVsYXRvcl91bml0dGVz
dC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hf
c2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlMiwgU2NyaXB0RXJy
b3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRw
dXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitm
cm9tIHdlYmtpdHB5LnBvcnQud2F0Y2hfc2ltdWxhdG9yIGltcG9ydCBXYXRjaFNpbXVsYXRvclBv
cnQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgd2F0Y2hfdGVzdGNhc2UKK2Zyb20gd2Via2l0
cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworCitjbGFzcyBXYXRjaFNpbXVs
YXRvclRlc3Qod2F0Y2hfdGVzdGNhc2UuV2F0Y2hUZXN0KToKKyAgICAjIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTA3CisgICAgb3NfbmFtZSA9ICdt
YWMnCisgICAgb3NfdmVyc2lvbiA9IE5vbmUKKyAgICBwb3J0X25hbWUgPSAnd2F0Y2gtc2ltdWxh
dG9yJworICAgIHBvcnRfbWFrZXIgPSBXYXRjaFNpbXVsYXRvclBvcnQKKworICAgIGRlZiBtYWtl
X3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19u
YW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbig1KSwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0
ID0gc3VwZXIoV2F0Y2hTaW11bGF0b3JUZXN0LCBzZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBw
b3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgb3Nf
dmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYg
dGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGxlYWtzPVRydWUsIGd1YXJkX21hbGxvYz1U
cnVlKSkKKyAgICAgICAgZW52ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIocG9ydC5k
cml2ZXJfbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnTWFsbG9jU3RhY2tM
b2dnaW5nJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ01hbGxvY1Njcmli
YmxlJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0RZTERfSU5TRVJUX0xJ
QlJBUklFUyddLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisKKyAgICBkZWYgdGVzdF9v
cGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd3YXRjaG9z
LXNpbXVsYXRvcicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQorCisgICAg
ZGVmIHRlc3RfMzJiaXQoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRp
b25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0naTM4NicpKQorCisgICAgICAgIGRlZiBydW5f
c2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmFy
Z3MgPSBhcmdzCisKKyAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAnaTM4NicpCisgICAgICAg
IHBvcnQuX2J1aWxkX2RyaXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdz
LCBbJy0tc2RrJywgJ3dhdGNoc2ltdWxhdG9yJywgJ0FSQ0hTPWkzODYnXSkKKworICAgIGRlZiB0
ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnd2F0Y2hzaW11bGF0b3InKQorCisgICAg
ZGVmIHRlc3RfeGNydW4oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5fY29tbWFuZChh
cmdzKToKKyAgICAgICAgICAgIHByaW50KGFyZ3MpCisgICAgICAgICAgICByYWlzZSBTY3JpcHRF
cnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0naTM4NicpKQorICAgICAgICBwb3J0
Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5f
Y29tbWFuZCkKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAnLS1zZGsnLCAn
d2F0Y2hzaW11bGF0b3InLCAnLWZpbmQnLCAndGVzdCddXG4iCisgICAgICAgIE91dHB1dENhcHR1
cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0Jywg
J2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC93YXRjaF90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2F0Y2hfdGVzdGNhc2UucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dhdGNoX3Rlc3RjYXNlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNl
Citmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCisKKworY2xh
c3MgV2F0Y2hUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKKyAgICBkaXNhYmxlX3Nl
dHVwID0gVHJ1ZQorCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFt
ZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1WZXJzaW9uKDUp
LCAqKmt3YXJncyk6CisgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICBvcHRpb25zLmFy
Y2hpdGVjdHVyZSA9ICd4ODYnCisgICAgICAgICAgICBvcHRpb25zLndlYmtpdF90ZXN0X3J1bm5l
ciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9u
cyhhcmNoaXRlY3R1cmU9J3g4NicsIHdlYmtpdF90ZXN0X3J1bm5lcj1UcnVlLCBjb25maWd1cmF0
aW9uPSdSZWxlYXNlJykKKyAgICAgICAgcG9ydCA9IHN1cGVyKFdhdGNoVGVzdCwgc2VsZikubWFr
ZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBv
c19uYW1lPW9zX25hbWUsIG9zX3ZlcnNpb249Tm9uZSwga3dhcmdzPWt3YXJncykKKyAgICAgICAg
cG9ydC5zZXRfb3B0aW9uKCd2ZXJzaW9uJywgc3RyKG9zX3ZlcnNpb24pKQorICAgICAgICByZXR1
cm4gcG9ydAorCisgICAgZGVmIHRlc3RfZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQoKS5kcml2ZXJfbmFtZSgpLCAnV2ViS2l0VGVzdFJ1
bm5lckFwcC5hcHAnKQorCisgICAgZGVmIHRlc3RfYmFzZWxpbmVfc2VhcmNocGF0aChzZWxmKToK
KyAgICAgICAgc2VhcmNoX3BhdGggPSBzZWxmLm1ha2VfcG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVf
c2VhcmNoX3BhdGgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWy0xXSwg
Jy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3drMicpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbLTJdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2F0Y2hvcycpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>