<?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>170206</bug_id>
          
          <creation_ts>2017-03-28 15:01:06 -0700</creation_ts>
          <short_desc>webkitpy: Add IOSDevicePort and IOSPort tests</short_desc>
          <delta_ts>2017-03-29 10:22:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</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>1292115</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-28 15:01:06 -0700</bug_when>
    <thetext>We only have unit tests for IOSSimulatorPort.  Add unit tests for IOSDevicePort and IOSPort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292116</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-03-28 15:02:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/31308364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292118</commentid>
    <comment_count>2</comment_count>
      <attachid>305647</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-28 15:03:10 -0700</bug_when>
    <thetext>Created attachment 305647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292173</commentid>
    <comment_count>3</comment_count>
      <attachid>305647</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-03-28 16:27:41 -0700</bug_when>
    <thetext>Comment on attachment 305647
Patch

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

r=me, please fix class naming.

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:27
&gt; +class iosDeviceTest(ios_testcase.iOSTest):

Although there is one test class named like this, the WebKit style calls for &quot;IOSDeviceTest&quot; as the name. Most iOS classes in webkitpy follow the style.

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:28
&gt; +    os_name = &apos;ios-device&apos;

This shows a shortcoming in the code - the OS name is iOS, not iOS Device.

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:31
&gt; +    port_maker = IOSDevicePort

Maker is a strange name, there is no pattern like this that I&apos;m aware of.

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:32
&gt; +    is_simulator = True

Wut?

&gt; Tools/Scripts/webkitpy/port/ios_device_unittest.py:36
&gt; +        port.set_option(&apos;child_processes&apos;, 1)

This is worth explaining if it&apos;s needed (is it?)

&gt; Tools/Scripts/webkitpy/port/ios_simulator_unittest.py:32
&gt; +class iosSimulatorTest(ios_testcase.iOSTest):

Ditto w.r.t. naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292395</commentid>
    <comment_count>4</comment_count>
      <attachid>305735</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-29 08:30:53 -0700</bug_when>
    <thetext>Created attachment 305735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292450</commentid>
    <comment_count>5</comment_count>
      <attachid>305752</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-29 10:05:42 -0700</bug_when>
    <thetext>Created attachment 305752
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292461</commentid>
    <comment_count>6</comment_count>
      <attachid>305752</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 10:22:05 -0700</bug_when>
    <thetext>Comment on attachment 305752
Patch for landing

Clearing flags on attachment: 305752

Committed r214542: &lt;http://trac.webkit.org/changeset/214542&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292462</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 10:22:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305647</attachid>
            <date>2017-03-28 15:03:10 -0700</date>
            <delta_ts>2017-03-29 08:30:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170206-20170328150309.patch</filename>
            <type>text/plain</type>
            <size>18648</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDQ5NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE3LTAzLTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIElPU0RldmljZVBvcnQgYW5kIElPU1BvcnQgdGVz
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weTogUmVtb3ZlZCB1bnVzZWQgaW1w
b3J0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0
LnB5OiBBZGRlZC4KKyAgICAgICAgKGlvc0RldmljZVRlc3QpOiBDb250YWlucyB0ZXN0cyBmb3Ig
dGhlIElPU0RldmljZVBvcnQuCisgICAgICAgIChpb3NEZXZpY2VUZXN0Lm1ha2VfcG9ydCk6IENy
ZWF0ZXMgYW4gSU9TRGV2aWNlUG9ydCB3aXRoIGFyZ3VtZW50cy4KKyAgICAgICAgKGlvc0Rldmlj
ZVRlc3QudGVzdF9vcGVyYXRpbmdfc3lzdGVtKTogQ2hlY2sgZm9yIHRoZSBjb3JyZWN0IG9wZXJh
dGluZyBzeXN0ZW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0
b3JfdW5pdHRlc3QucHk6IE1vdmVkIGZyb20gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c191bml0dGVzdC5weS4KKyAgICAgICAgKGlvc1NpbXVsYXRvclRlc3QpOiBJbmhlcml0IGZyb20g
aW9zX3Rlc3RjYXNlLgorICAgICAgICAoaW9zU2ltdWxhdG9yVGVzdC5tYWtlX3BvcnQpOiBEaXR0
by4KKyAgICAgICAgKGlvc1NpbXVsYXRvclRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nKTogRGl0dG8u
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weTogQWRkZWQu
CisgICAgICAgIChpT1NUZXN0KTogQ29udGFpbnMgc2hhcmVkIHRlc3RzIGZvciB0aGUgSU9TRGV2
aWNlUG9ydCBhbmQgSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKGlPU1Rlc3QudGVzdF9kcml2
ZXJfbmFtZSk6IFRlc3RzIGZvciBpT1MgYXBwIGRyaXZlci4KKyAgICAgICAgKGlPU1Rlc3QudGVz
dF9iYXNlbGluZV9zZWFyY2hwYXRoKTogQ2hlY2sgdGhhdCBpb3MgYW5kIGlvcy13azEgYXJlIGlu
IHRoZSBiYXNlbGluZSBzZWFyY2ggcGF0aC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX3VuaXR0ZXN0LnB5OiBNb3ZlZCB0byBpb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Lgor
CiAyMDE3LTAzLTI4ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBTYWZhcmkgY3Jhc2hlcyB3aGVuIGF0dGVtcHRpbmcgdG8gY2xvc2UgdGFiIHRo
YXQgaXMgZGlzcGxheWluZyBQREYKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW5fdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjE0NDc0KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjEs
NyArMjEsNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBv
cnRfdGVzdGNhc2UKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sg
aW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29s
IGltcG9ydCBNb2NrT3B0aW9ucwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2
ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgTW9ja1Byb2Nlc3Ms
IFNjcmlwdEVycm9yCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2Rldmlj
ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX2RldmljZV91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20g
d2Via2l0cHkucG9ydC5pb3NfZGV2aWNlIGltcG9ydCBJT1NEZXZpY2VQb3J0Citmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGlvc190ZXN0Y2FzZQorCisKK2NsYXNzIGlvc0RldmljZVRlc3QoaW9z
X3Rlc3RjYXNlLmlPU1Rlc3QpOgorICAgIG9zX25hbWUgPSAnaW9zLWRldmljZScKKyAgICBvc192
ZXJzaW9uID0gJycKKyAgICBwb3J0X25hbWUgPSAnaW9zLWRldmljZScKKyAgICBwb3J0X21ha2Vy
ID0gSU9TRGV2aWNlUG9ydAorICAgIGlzX3NpbXVsYXRvciA9IFRydWUKKworICAgIGRlZiBtYWtl
X3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19u
YW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3Vw
ZXIoaW9zRGV2aWNlVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBv
cnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192
ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxkX3By
b2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9vcGVyYXRp
bmdfc3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3MtZGV2aWNlJywg
c2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weQkocmV2
aXNpb24gMjE0NDc0KQkoZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0
ZXN0LnB5OjIxNDQ3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxh
dG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQorCitmcm9t
IHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAorZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQor
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlLCBN
b2NrRXhlY3V0aXZlMiwgTW9ja1Byb2Nlc3MsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAorCisKK2Ns
YXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgorICAgIG9zX25hbWUgPSAn
aW9zLXNpbXVsYXRvcicKKyAgICBvc192ZXJzaW9uID0gJycKKyAgICBwb3J0X25hbWUgPSAnaW9z
LXNpbXVsYXRvcicKKyAgICBwb3J0X21ha2VyID0gSU9TU2ltdWxhdG9yUG9ydAorICAgIGlzX3Np
bXVsYXRvciA9IFRydWUKKworICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0
X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIoaW9zVGVzdCwgc2VsZikubWFrZV9wb3J0
KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1l
PW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0
CisKKyAgICBkZWYgdGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6CisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGxlYWtzPVRydWUsIGd1
YXJkX21hbGxvYz1UcnVlKSkKKyAgICAgICAgZW52ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9z
ZXJ2ZXIocG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsn
TWFsbG9jU3RhY2tMb2dnaW5nJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZb
J01hbGxvY1NjcmliYmxlJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0RZ
TERfSU5TRVJUX0xJQlJBUklFUyddLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisKKyAg
ICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdpb3Mtc2ltdWxhdG9yJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkp
CisKKyAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFz
aCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdl
IGRvbid0IGNyYXNoLgorICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0
aW1lcyA9IFswLCAyMCwgNDBdCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3Ao
MCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRv
cicpCisgICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwg
Tm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKKworICAgIGRlZiB0
ZXN0XzMyYml0KHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1N
b2NrT3B0aW9ucyhhcmNoaXRlY3R1cmU9J3g4NicpKQorCisgICAgICAgIGRlZiBydW5fc2NyaXB0
KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBh
cmdzCisKKyAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2JykKKyAgICAgICAgcG9ydC5f
YnVpbGRfZHJpdmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnQVJD
SFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKKworICAgIGRlZiB0ZXN0XzY0
Yml0KHNlbGYpOgorICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZhdWx0
CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4Nl82NCcpCisKKyAgICAgICAgZGVmIHJ1bl9zY3Jp
cHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9
IGFyZ3MKKworICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAorICAgICAgICBw
b3J0Ll9idWlsZF9kcml2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKKworICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNl
bGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuU0RLLCAnaXBob25lc2ltdWxhdG9yJykKKworICAgIGRlZiB0ZXN0X3hjcnVu
KHNlbGYpOgorICAgICAgICBkZWYgdGhyb3dpbmdfcnVuX2NvbW1hbmQoYXJncyk6CisgICAgICAg
ICAgICBwcmludCBhcmdzCisgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiTU9DSyBzY3Jp
cHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBv
cnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1
bl9jb21tYW5kKQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICctLXNkaycs
ICdpcGhvbmVzaW11bGF0b3InLCAnLWZpbmQnLCAndGVzdCddXG4iCisgICAgICAgIE91dHB1dENh
cHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0
JywgJ2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiAyMTQ0NzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3NpbXVsYXRvcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDEz
IEBACiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBv
cnQgSU9TU2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVz
dGNhc2UKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0
IE1vY2tGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlvc190ZXN0Y2FzZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENh
cHR1cmUKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1
dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4
ZWN1dGl2ZTIsIFNjcmlwdEVycm9yCiAKIAotY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2Uu
RGFyd2luVGVzdCk6CitjbGFzcyBpb3NTaW11bGF0b3JUZXN0KGlvc190ZXN0Y2FzZS5pT1NUZXN0
KToKICAgICBvc19uYW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAg
ICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCkBAIC0zOSw3ICszNyw3IEBAIGNsYXNzIGlv
c1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVl
CiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBv
cnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3Zl
cnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKGlv
c1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVy
c2lvbiwga3dhcmdzPWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9j
ZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01OCw3ICs1Niw3IEBAIGNsYXNz
IGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICAgICAgZGVmIGZha2VfdGlt
ZV9jYigpOgogICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQogICAgICAgICAgICAgcmV0
dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChw
b3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
cG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdE
dW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9s
b2c9RmFsc2UpCiAKICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHku
dG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworCitjbGFzcyBpT1NUZXN0KGRhcndp
bl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKKworICAgIGRlZiB0ZXN0X2RyaXZlcl9uYW1lKHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KCkuZHJpdmVyX25hbWUo
KSwgJ0R1bXBSZW5kZXJUcmVlLmFwcCcpCisKKyAgICBkZWYgdGVzdF9iYXNlbGluZV9zZWFyY2hw
YXRoKHNlbGYpOgorICAgICAgICBzZWFyY2hfcGF0aCA9IHNlbGYubWFrZV9wb3J0KCkuZGVmYXVs
dF9iYXNlbGluZV9zZWFyY2hfcGF0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbLTFdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFstMl0sICcvbW9jay1jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtd2sxJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc191bml0dGVzdC5weQkocmV2aXNpb24gMjE0NDc0KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDk5
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1p
bXBvcnQgdGltZQotCi1mcm9tIHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBvcnQgSU9T
U2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UK
LWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tG
aWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2Nr
T3B0aW9ucwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9y
dCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgTW9ja1Byb2Nlc3MsIFNjcmlwdEVycm9y
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2Nr
U3lzdGVtSG9zdAotCi0KLWNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3Qp
OgotICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRvcicKLSAgICBvc192ZXJzaW9uID0gJycKLSAg
ICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKLSAgICBwb3J0X21ha2VyID0gSU9TU2ltdWxh
dG9yUG9ydAotICAgIGlzX3NpbXVsYXRvciA9IFRydWUKLQotICAgIGRlZiBtYWtlX3BvcnQoc2Vs
ZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUs
IG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoaW9zVGVz
dCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9u
cz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9
a3dhcmdzKQotICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCi0g
ICAgICAgIHJldHVybiBwb3J0Ci0KLSAgICBkZWYgdGVzdF9zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRp
b25zKGxlYWtzPVRydWUsIGd1YXJkX21hbGxvYz1UcnVlKSkKLSAgICAgICAgZW52ID0gcG9ydC5z
ZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIocG9ydC5kcml2ZXJfbmFtZSgpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGVudlsnTWFsbG9jU3RhY2tMb2dnaW5nJ10sICcxJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChlbnZbJ01hbGxvY1NjcmliYmxlJ10sICcxJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChlbnZbJ0RZTERfSU5TRVJUX0xJQlJBUklFUyddLCAnL3Vzci9saWIvbGliZ21h
bGxvYy5keWxpYicpCi0KLSAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3Mtc2ltdWxhdG9yJywgc2VsZi5tYWtlX3BvcnQoKS5v
cGVyYXRpbmdfc3lzdGVtKCkpCi0KLSAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgot
ICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdl
IGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2Ni
KCk6Ci0gICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4g
bGFtYmRhOiB0aW1lcy5wb3AoMCkKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRf
bmFtZT0naW9zLXNpbXVsYXRvcicpCi0gICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBS
ZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1G
YWxzZSkKLQotICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhhcmNoaXRlY3R1cmU9J3g4NicpKQotCi0gICAg
ICAgIGRlZiBydW5fc2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6Ci0gICAgICAg
ICAgICBzZWxmLmFyZ3MgPSBhcmdzCi0KLSAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9z
Y3JpcHQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2
JykKLSAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkK
LQotICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgotICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlz
IDY0LWJpdCBieSBkZWZhdWx0Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4Nl82NCcpCi0KLSAg
ICAgICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKLSAgICAg
ICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKLQotICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVu
X3NjcmlwdAotICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKLQotICAgIGRl
ZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnaXBob25lc2ltdWxhdG9yJykKLQot
ICAgIGRlZiB0ZXN0X3hjcnVuKHNlbGYpOgotICAgICAgICBkZWYgdGhyb3dpbmdfcnVuX2NvbW1h
bmQoYXJncyk6Ci0gICAgICAgICAgICBwcmludCBhcmdzCi0gICAgICAgICAgICByYWlzZSBTY3Jp
cHRFcnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21t
YW5kX2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAi
Wyd4Y3J1bicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InLCAnLWZpbmQnLCAndGVzdCddXG4i
Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnhjcnVu
X2ZpbmQsIGFyZ3M9Wyd0ZXN0JywgJ2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVk
X3N0ZG91dCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305735</attachid>
            <date>2017-03-29 08:30:53 -0700</date>
            <delta_ts>2017-03-29 10:05:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170206-20170329083052.patch</filename>
            <type>text/plain</type>
            <size>20516</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDUzNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5IEBACisyMDE3LTAzLTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIElPU0RldmljZVBvcnQgYW5kIElPU1BvcnQgdGVz
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5OiBSZW1vdmVkIHVudXNl
ZCBpbXBvcnQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5p
dHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoaW9zRGV2aWNlVGVzdCk6IENvbnRhaW5zIHRlc3Rz
IGZvciB0aGUgSU9TRGV2aWNlUG9ydC4KKyAgICAgICAgKGlvc0RldmljZVRlc3QubWFrZV9wb3J0
KTogQ3JlYXRlcyBhbiBJT1NEZXZpY2VQb3J0IHdpdGggYXJndW1lbnRzLgorICAgICAgICAoaW9z
RGV2aWNlVGVzdC50ZXN0X29wZXJhdGluZ19zeXN0ZW0pOiBDaGVjayBmb3IgdGhlIGNvcnJlY3Qg
b3BlcmF0aW5nIHN5c3RlbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Np
bXVsYXRvcl91bml0dGVzdC5weTogTW92ZWQgZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX3VuaXR0ZXN0LnB5LgorICAgICAgICAoaW9zU2ltdWxhdG9yVGVzdCk6IEluaGVyaXQg
ZnJvbSBpb3NfdGVzdGNhc2UuCisgICAgICAgIChpb3NTaW11bGF0b3JUZXN0Lm1ha2VfcG9ydCk6
IERpdHRvLgorICAgICAgICAoaW9zU2ltdWxhdG9yVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBE
aXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5OiBB
ZGRlZC4KKyAgICAgICAgKGlPU1Rlc3QpOiBDb250YWlucyBzaGFyZWQgdGVzdHMgZm9yIHRoZSBJ
T1NEZXZpY2VQb3J0IGFuZCBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoaU9TVGVzdC50ZXN0
X2RyaXZlcl9uYW1lKTogVGVzdHMgZm9yIGlPUyBhcHAgZHJpdmVyLgorICAgICAgICAoaU9TVGVz
dC50ZXN0X2Jhc2VsaW5lX3NlYXJjaHBhdGgpOiBDaGVjayB0aGF0IGlvcyBhbmQgaW9zLXdrMSBh
cmUgaW4gdGhlIGJhc2VsaW5lIHNlYXJjaCBwYXRoLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6IE1vdmVkIHRvIGlvc19zaW11bGF0b3JfdW5pdHRlc3Qu
cHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHk6Cisg
ICAgICAgIChQb3J0VGVzdENhc2UpOiBSZW5hbWUgaXNfc2ltdWxhdG9yIHRvIGRpc2FibGVfc2V0
dXAgdG8gbW9yZSBhY2N1cmF0ZWx5IGRlc2NyaWJlIGl0J3MgbWVhbmluZy4KKyAgICAgICAgKFBv
cnRUZXN0Q2FzZS50ZXN0X2RpZmZfaW1hZ2UpOiBVc2UgZGlzYWJsZV9zZXR1cCBpbnN0ZWFkIG9m
IGlzX3NpbXVsYXRvci4KKyAgICAgICAgKFBvcnRUZXN0Q2FzZS50ZXN0X2RpZmZfaW1hZ2VfY3Jh
c2hlZCk6IERpdHRvLgorCiAyMDE3LTAzLTI4ICBKYXNvbiBNYXJjZWxsICA8am1hcmNlbGxAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBgaW5kZXgtZXhwZWN0ZWQudHh0YCBmb3IgZGFzaGJvYXJk
IHRlc3QgcmVzdWx0cy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5f
dGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rh
cndpbl90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjE0NTMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
NiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVz
dGNhc2UKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0
IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVy
ZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9y
dCBNb2NrT3B0aW9ucwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2Nr
IGltcG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgTW9ja1Byb2Nlc3MsIFNjcmlw
dEVycm9yCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2Rl
dmljZV91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4
IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0
cHkucG9ydC5pb3NfZGV2aWNlIGltcG9ydCBJT1NEZXZpY2VQb3J0Citmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGlvc190ZXN0Y2FzZQorCisKK2NsYXNzIElPU0RldmljZVRlc3QoaW9zX3Rlc3Rj
YXNlLklPU1Rlc3QpOgorICAgIG9zX25hbWUgPSAnaW9zLWRldmljZScKKyAgICBvc192ZXJzaW9u
ID0gJycKKyAgICBwb3J0X25hbWUgPSAnaW9zLWRldmljZScKKyAgICBwb3J0X21ha2VyID0gSU9T
RGV2aWNlUG9ydAorCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFt
ZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3
YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihJT1NEZXZpY2VUZXN0LCBzZWxmKS5tYWtlX3Bv
cnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25h
bWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCisgICAgICAg
IHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3MtZGV2aWNlJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVy
YXRpbmdfc3lzdGVtKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Np
bXVsYXRvcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE0NTMzKQkoZnJvbSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OjIxNDUzMykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQuaW9zX3Np
bXVsYXRvciBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9y
dCBkYXJ3aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVt
X21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
b3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRweS50b29sLm1v
Y2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgTW9ja1By
b2Nlc3MsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9z
dF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAorCisKK2NsYXNzIGlvc1Rlc3QoZGFyd2luX3Rl
c3RjYXNlLkRhcndpblRlc3QpOgorICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRvcicKKyAgICBv
c192ZXJzaW9uID0gJycKKyAgICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKKyAgICBwb3J0
X21ha2VyID0gSU9TU2ltdWxhdG9yUG9ydAorICAgIGlzX3NpbXVsYXRvciA9IFRydWUKKworICAg
IGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1O
b25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBw
b3J0ID0gc3VwZXIoaW9zVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1l
PXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1v
c192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdF9zZXR1
cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dChvcHRpb25zPU1vY2tPcHRpb25zKGxlYWtzPVRydWUsIGd1YXJkX21hbGxvYz1UcnVlKSkKKyAg
ICAgICAgZW52ID0gcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIocG9ydC5kcml2ZXJfbmFt
ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnTWFsbG9jU3RhY2tMb2dnaW5nJ10s
ICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ01hbGxvY1NjcmliYmxlJ10sICcx
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ0RZTERfSU5TRVJUX0xJQlJBUklFUydd
LCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisKKyAgICBkZWYgdGVzdF9vcGVyYXRpbmdf
c3lzdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3Mtc2ltdWxhdG9yJywg
c2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCisKKyAgICBkZWYgdGVzdF9nZXRf
Y3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxz
ZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAgICAg
ICBkZWYgZmFrZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCisg
ICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQuX2dl
dF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1l
KCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKKworICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYpOgorICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhhcmNoaXRlY3R1
cmU9J3g4NicpKQorCisgICAgICAgIGRlZiBydW5fc2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBl
bnY9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKyAgICAgICAgcG9ydC5f
cnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFy
Y2hpdGVjdHVyZSgpLCAneDg2JykKKyAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdp
cGhvbmVzaW11bGF0b3InXSkKKworICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgorICAgICAgICAj
IEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZhdWx0CisgICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUo
KSwgJ3g4Nl82NCcpCisKKyAgICAgICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUs
IGVudj1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgICAgICBwb3J0
Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAorICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11
bGF0b3InXSkKKworICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnaXBo
b25lc2ltdWxhdG9yJykKKworICAgIGRlZiB0ZXN0X3hjcnVuKHNlbGYpOgorICAgICAgICBkZWYg
dGhyb3dpbmdfcnVuX2NvbW1hbmQoYXJncyk6CisgICAgICAgICAgICBwcmludCBhcmdzCisgICAg
ICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tF
eGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQorICAgICAgICBl
eHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InLCAn
LWZpbmQnLCAndGVzdCddXG4iCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0
cyhzZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0JywgJ2ZhbGxpbmcnXSwgZXhwZWN0
ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTQ1
MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMjMsMjMgKzIzLDIwIEBACiBpbXBvcnQgdGltZQogCiBm
cm9tIHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAot
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCitmcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlvc190ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHku
dG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIs
IE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5
c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIsIFNjcmlwdEVycm9y
CiAKIAotY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CitjbGFzcyBJ
T1NTaW11bGF0b3JUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0KToKICAgICBvc19uYW1lID0gJ2lv
cy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAgICAgcG9ydF9uYW1lID0gJ2lvcy1z
aW11bGF0b3InCiAgICAgcG9ydF9tYWtlciA9IElPU1NpbXVsYXRvclBvcnQKLSAgICBpc19zaW11
bGF0b3IgPSBUcnVlCiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9u
YW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoq
a3dhcmdzKToKLSAgICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydCho
b3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1v
c19uYW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9y
dCA9IHN1cGVyKElPU1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBv
cnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3Zl
cnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9u
KCdjaGlsZF9wcm9jZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01OCw3ICs1
NSw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICAgICAg
ZGVmIGZha2VfdGltZV9jYigpOgogICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQogICAg
ICAgICAgICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQorICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9nZXRf
Y3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgp
LCB3YWl0X2Zvcl9sb2c9RmFsc2UpCiAKICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKK2Zy
b20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKKworCitjbGFzcyBJ
T1NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKKyAgICBkaXNhYmxlX3NldHVwID0g
VHJ1ZQorCisgICAgZGVmIHRlc3RfZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQoKS5kcml2ZXJfbmFtZSgpLCAnRHVtcFJlbmRlclRyZWUu
YXBwJykKKworICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3NlYXJjaHBhdGgoc2VsZik6CisgICAgICAg
IHNlYXJjaF9wYXRoID0gc2VsZi5tYWtlX3BvcnQoKS5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9w
YXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFstMV0sICcvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlYXJjaF9wYXRoWy0yXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy13azEnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiAyMTQ1MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKQEAgLTEsOTkgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB0aW1lCi0KLWZyb20g
d2Via2l0cHkucG9ydC5pb3Nfc2ltdWxhdG9yIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0Ci1mcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCi1m
cm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1v
Y2tFeGVjdXRpdmUyLCBNb2NrUHJvY2VzcywgU2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci0KLQotY2xh
c3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6Ci0gICAgb3NfbmFtZSA9ICdp
b3Mtc2ltdWxhdG9yJwotICAgIG9zX3ZlcnNpb24gPSAnJwotICAgIHBvcnRfbmFtZSA9ICdpb3Mt
c2ltdWxhdG9yJwotICAgIHBvcnRfbWFrZXIgPSBJT1NTaW11bGF0b3JQb3J0Ci0gICAgaXNfc2lt
dWxhdG9yID0gVHJ1ZQotCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRf
bmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAq
Kmt3YXJncyk6Ci0gICAgICAgIHBvcnQgPSBzdXBlcihpb3NUZXN0LCBzZWxmKS5tYWtlX3BvcnQo
aG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9
b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCi0gICAgICAgIHBv
cnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKLSAgICAgICAgcmV0dXJuIHBvcnQK
LQotICAgIGRlZiB0ZXN0X3NldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmKToKLSAgICAgICAg
cG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMobGVha3M9VHJ1ZSwgZ3Vh
cmRfbWFsbG9jPVRydWUpKQotICAgICAgICBlbnYgPSBwb3J0LnNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcihwb3J0LmRyaXZlcl9uYW1lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydN
YWxsb2NTdGFja0xvZ2dpbmcnXSwgJzEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsn
TWFsbG9jU2NyaWJibGUnXSwgJzEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnRFlM
RF9JTlNFUlRfTElCUkFSSUVTJ10sICcvdXNyL2xpYi9saWJnbWFsbG9jLmR5bGliJykKLQotICAg
IGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2lvcy1zaW11bGF0b3InLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0ZW0oKSkK
LQotICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6Ci0gICAgICAgICMgTWFjIGNyYXNo
IGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgY3Jhc2guCi0gICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRp
bWVzID0gWzAsIDIwLCA0MF0KLSAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgw
KQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9y
JykKLSAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBO
b25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQotCi0gICAgZGVmIHRl
c3RfMzJiaXQoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCi0KLSAgICAgICAgZGVmIHJ1bl9zY3JpcHQo
c2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuYXJncyA9IGFy
Z3MKLQotICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQotICAgICAgICBwb3J0Ll9i
dWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNI
Uz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQotCi0gICAgZGVmIHRlc3RfNjRi
aXQoc2VsZik6Ci0gICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2XzY0JykKLQotICAgICAgICBkZWYgcnVuX3Njcmlw
dChzY3JpcHQsIGFyZ3M9Tm9uZSwgZW52PU5vbmUpOgotICAgICAgICAgICAgc2VsZi5hcmdzID0g
YXJncwotCi0gICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0Ci0gICAgICAgIHBv
cnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBb
Jy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQotCi0gICAgZGVmIHRlc3Rfc2RrX25hbWUoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocG9ydC5TREssICdpcGhvbmVzaW11bGF0b3InKQotCi0gICAgZGVmIHRlc3RfeGNydW4o
c2VsZik6Ci0gICAgICAgIGRlZiB0aHJvd2luZ19ydW5fY29tbWFuZChhcmdzKToKLSAgICAgICAg
ICAgIHByaW50IGFyZ3MKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJNT0NLIHNjcmlw
dCBlcnJvciIpCi0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9y
dC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49dGhyb3dpbmdfcnVu
X2NvbW1hbmQpCi0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJ3hjcnVuJywgJy0tc2RrJywg
J2lwaG9uZXNpbXVsYXRvcicsICctZmluZCcsICd0ZXN0J11cbiIKLSAgICAgICAgT3V0cHV0Q2Fw
dHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQueGNydW5fZmluZCwgYXJncz1bJ3Rlc3Qn
LCAnZmFsbGluZyddLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkJKHJldmlzaW9uIDIx
NDUzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgb3NfdmVyc2lvbiA9IE5vbmUKICAgICBwb3J0X21ha2VyID0gVGVz
dFdlYktpdFBvcnQKICAgICBwb3J0X25hbWUgPSBOb25lCi0gICAgaXNfc2ltdWxhdG9yID0gRmFs
c2UKKyAgICBkaXNhYmxlX3NldHVwID0gRmFsc2UKIAogICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwg
aG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9z
X3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICBob3N0ID0gaG9zdCBvciBNb2NrU3lz
dGVtSG9zdChvc19uYW1lPShvc19uYW1lIG9yIHNlbGYub3NfbmFtZSksIG9zX3ZlcnNpb249KG9z
X3ZlcnNpb24gb3Igc2VsZi5vc192ZXJzaW9uKSkKQEAgLTI1Miw4ICsyNTIsOCBAQCBjbGFzcyBQ
b3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgc2VsZi5wcm9jID0g
TW9ja1NlcnZlclByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52LCBsaW5lcz1bJ2RpZmY6IDEwMCUg
ZmFpbGVkXG4nLCAnZGlmZjogMTAwJSBmYWlsZWRcbiddKQogICAgICAgICAgICAgcmV0dXJuIHNl
bGYucHJvYwogCi0gICAgICAgICMgRklYTUU6IENhbid0IHByZXRlbmQgdG8gcnVuIGEgc2ltdWxh
dG9yJ3Mgc2V0dXAsIHNvIGp1c3Qgc2tpcCB0aGlzIHRlc3QuCi0gICAgICAgIGlmIHNlbGYuaXNf
c2ltdWxhdG9yOgorICAgICAgICAjIEZJWE1FOiBDYW4ndCBwcmV0ZW5kIHRvIHJ1biBzZXR1cCBm
b3Igc29tZSBwb3J0cywgc28ganVzdCBza2lwIHRoaXMgdGVzdC4KKyAgICAgICAgaWYgc2VsZi5k
aXNhYmxlX3NldHVwOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgcG9ydC5fc2VydmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBtYWtlX3Byb2MKQEAgLTI3OSw4ICsyNzksOCBAQCBjbGFz
cyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgc2VsZi5wcm9j
ID0gTW9ja1NlcnZlclByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52LCBjcmFzaGVkPVRydWUpCiAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jCiAKLSAgICAgICAgIyBGSVhNRTogQ2FuJ3QgcHJl
dGVuZCB0byBydW4gYSBzaW11bGF0b3IncyBzZXR1cCwgc28ganVzdCBza2lwIHRoaXMgdGVzdC4K
LSAgICAgICAgaWYgc2VsZi5pc19zaW11bGF0b3I6CisgICAgICAgICMgRklYTUU6IENhbid0IHBy
ZXRlbmQgdG8gcnVuIHNldHVwIGZvciBzb21lIHBvcnRzLCBzbyBqdXN0IHNraXAgdGhpcyB0ZXN0
LgorICAgICAgICBpZiBzZWxmLmRpc2FibGVfc2V0dXA6CiAgICAgICAgICAgICByZXR1cm4KIAog
ICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IG1ha2VfcHJvYwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305752</attachid>
            <date>2017-03-29 10:05:42 -0700</date>
            <delta_ts>2017-03-29 10:22:05 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170206-20170329100542.patch</filename>
            <type>text/plain</type>
            <size>20551</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDUzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDE3LTAzLTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQWRkIElPU0RldmljZVBvcnQgYW5kIElPU1BvcnQgdGVz
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIw
NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEzMDgzNjQ+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW5fdGVzdGNhc2UucHk6IFJlbW92ZWQgdW51c2VkIGltcG9ydC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChpb3NEZXZpY2VUZXN0KTogQ29udGFpbnMgdGVzdHMgZm9yIHRoZSBJT1NEZXZpY2VQb3J0
LgorICAgICAgICAoaW9zRGV2aWNlVGVzdC5tYWtlX3BvcnQpOiBDcmVhdGVzIGFuIElPU0Rldmlj
ZVBvcnQgd2l0aCBhcmd1bWVudHMuCisgICAgICAgIChpb3NEZXZpY2VUZXN0LnRlc3Rfb3BlcmF0
aW5nX3N5c3RlbSk6IENoZWNrIGZvciB0aGUgY29ycmVjdCBvcGVyYXRpbmcgc3lzdGVtLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5OiBN
b3ZlZCBmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkuCisg
ICAgICAgIChpb3NTaW11bGF0b3JUZXN0KTogSW5oZXJpdCBmcm9tIGlvc190ZXN0Y2FzZS4KKyAg
ICAgICAgKGlvc1NpbXVsYXRvclRlc3QubWFrZV9wb3J0KTogRGl0dG8uCisgICAgICAgIChpb3NT
aW11bGF0b3JUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoaU9TVGVz
dCk6IENvbnRhaW5zIHNoYXJlZCB0ZXN0cyBmb3IgdGhlIElPU0RldmljZVBvcnQgYW5kIElPU1Np
bXVsYXRvclBvcnQuCisgICAgICAgIChpT1NUZXN0LnRlc3RfZHJpdmVyX25hbWUpOiBUZXN0cyBm
b3IgaU9TIGFwcCBkcml2ZXIuCisgICAgICAgIChpT1NUZXN0LnRlc3RfYmFzZWxpbmVfc2VhcmNo
cGF0aCk6IENoZWNrIHRoYXQgaW9zIGFuZCBpb3Mtd2sxIGFyZSBpbiB0aGUgYmFzZWxpbmUgc2Vh
cmNoIHBhdGguCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5w
eTogTW92ZWQgdG8gaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKFBvcnRUZXN0Q2FzZSk6
IFJlbmFtZSBpc19zaW11bGF0b3IgdG8gZGlzYWJsZV9zZXR1cCB0byBtb3JlIGFjY3VyYXRlbHkg
ZGVzY3JpYmUgaXQncyBtZWFuaW5nLgorICAgICAgICAoUG9ydFRlc3RDYXNlLnRlc3RfZGlmZl9p
bWFnZSk6IFVzZSBkaXNhYmxlX3NldHVwIGluc3RlYWQgb2YgaXNfc2ltdWxhdG9yLgorICAgICAg
ICAoUG9ydFRlc3RDYXNlLnRlc3RfZGlmZl9pbWFnZV9jcmFzaGVkKTogRGl0dG8uCisKIDIwMTct
MDMtMjggIEphc29uIE1hcmNlbGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IGBpbmRleC1leHBlY3RlZC50eHRgIGZvciBkYXNoYm9hcmQgdGVzdCByZXN1bHRzLgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CShyZXZp
c2lvbiAyMTQ1MzYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3Rj
YXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
CiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUs
IE1vY2tFeGVjdXRpdmUyLCBNb2NrUHJvY2VzcywgU2NyaXB0RXJyb3IKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19kZXZpY2UgaW1w
b3J0IElPU0RldmljZVBvcnQKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNl
CisKKworY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdCk6CisgICAgb3Nf
bmFtZSA9ICdpb3MtZGV2aWNlJworICAgIG9zX3ZlcnNpb24gPSAnJworICAgIHBvcnRfbmFtZSA9
ICdpb3MtZGV2aWNlJworICAgIHBvcnRfbWFrZXIgPSBJT1NEZXZpY2VQb3J0CisKKyAgICBkZWYg
bWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwg
b3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcG9ydCA9
IHN1cGVyKElPU0RldmljZVRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFt
ZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249
b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAgIGRl
ZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0ZW0oKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyMTQ1MzYpCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3NfdW5pdHRlc3QucHk6MjE0NTM2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5pb3Nfc2ltdWxhdG9yIGltcG9ydCBJT1NTaW11
bGF0b3JQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVT
eXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBP
dXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRp
b25zCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1v
Y2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBNb2NrUHJvY2VzcywgU2NyaXB0RXJyb3IKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0
ZW1Ib3N0CisKKworY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6Cisg
ICAgb3NfbmFtZSA9ICdpb3Mtc2ltdWxhdG9yJworICAgIG9zX3ZlcnNpb24gPSAnJworICAgIHBv
cnRfbmFtZSA9ICdpb3Mtc2ltdWxhdG9yJworICAgIHBvcnRfbWFrZXIgPSBJT1NTaW11bGF0b3JQ
b3J0CisgICAgaXNfc2ltdWxhdG9yID0gVHJ1ZQorCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBo
b3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3Nf
dmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihpb3NUZXN0LCBz
ZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9w
dGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2Fy
Z3MpCisgICAgICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKKyAgICAg
ICAgcmV0dXJuIHBvcnQKKworICAgIGRlZiB0ZXN0X3NldHVwX2Vudmlyb25fZm9yX3NlcnZlcihz
ZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMo
bGVha3M9VHJ1ZSwgZ3VhcmRfbWFsbG9jPVRydWUpKQorICAgICAgICBlbnYgPSBwb3J0LnNldHVw
X2Vudmlyb25fZm9yX3NlcnZlcihwb3J0LmRyaXZlcl9uYW1lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZW52WydNYWxsb2NTdGFja0xvZ2dpbmcnXSwgJzEnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGVudlsnTWFsbG9jU2NyaWJibGUnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGVudlsnRFlMRF9JTlNFUlRfTElCUkFSSUVTJ10sICcvdXNyL2xpYi9saWJnbWFsbG9j
LmR5bGliJykKKworICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2lvcy1zaW11bGF0b3InLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJh
dGluZ19zeXN0ZW0oKSkKKworICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAg
ICAgICMgTWFjIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVz
dCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCisgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToK
KyAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1i
ZGE6IHRpbWVzLnBvcCgwKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1l
PSdpb3Mtc2ltdWxhdG9yJykKKyAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRl
clRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNl
KQorCisgICAgZGVmIHRlc3RfMzJiaXQoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisKKyAgICAgICAg
ZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKKyAgICAgICAgICAg
IHNlbGYuYXJncyA9IGFyZ3MKKworICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Njcmlw
dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQor
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQorCisg
ICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CisgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQt
Yml0IGJ5IGRlZmF1bHQKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2XzY0JykKKworICAgICAg
ICBkZWYgcnVuX3NjcmlwdChzY3JpcHQsIGFyZ3M9Tm9uZSwgZW52PU5vbmUpOgorICAgICAgICAg
ICAgc2VsZi5hcmdzID0gYXJncworCisgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2Ny
aXB0CisgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5hcmdzLCBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQorCisgICAgZGVmIHRl
c3Rfc2RrX25hbWUoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5TREssICdpcGhvbmVzaW11bGF0b3InKQorCisgICAg
ZGVmIHRlc3RfeGNydW4oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5fY29tbWFuZChh
cmdzKToKKyAgICAgICAgICAgIHByaW50IGFyZ3MKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVy
cm9yKCJNT0NLIHNjcmlwdCBlcnJvciIpCisKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKKyAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRf
Zm49dGhyb3dpbmdfcnVuX2NvbW1hbmQpCisgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJ3hj
cnVuJywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvcicsICctZmluZCcsICd0ZXN0J11cbiIKKyAg
ICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQueGNydW5fZmlu
ZCwgYXJncz1bJ3Rlc3QnLCAnZmFsbGluZyddLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rk
b3V0KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3JfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19z
aW11bGF0b3JfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNDUzNikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yMywyMyArMjMsMjAgQEAKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5pb3Nf
c2ltdWxhdG9yIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQgaW1w
b3J0IGRhcndpbl90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
aW9zX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBp
bXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBN
b2NrT3B0aW9ucwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGlt
cG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgTW9ja1Byb2Nlc3MsIFNjcmlwdEVy
cm9yCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBN
b2NrU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2Nr
IGltcG9ydCBNb2NrRXhlY3V0aXZlMiwgU2NyaXB0RXJyb3IKIAogCi1jbGFzcyBpb3NUZXN0KGRh
cndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKK2NsYXNzIElPU1NpbXVsYXRvclRlc3QoaW9zX3Rl
c3RjYXNlLklPU1Rlc3QpOgogICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRvcicKICAgICBvc192
ZXJzaW9uID0gJycKICAgICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKICAgICBwb3J0X21h
a2VyID0gSU9TU2ltdWxhdG9yUG9ydAotICAgIGlzX3NpbXVsYXRvciA9IFRydWUKIAogICAgIGRl
ZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25l
LCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0
ID0gc3VwZXIoaW9zVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBv
cnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192
ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9y
VGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0
aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2Fy
Z3M9a3dhcmdzKQogICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEp
CiAgICAgICAgIHJldHVybiBwb3J0CiAKQEAgLTU4LDcgKzU1LDcgQEAgY2xhc3MgaW9zVGVzdChk
YXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6CiAg
ICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCiAgICAgICAgICAgICByZXR1cm4gbGFtYmRh
OiB0aW1lcy5wb3AoMCkKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0n
aW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9
c2VsZi5wb3J0X25hbWUpCiAgICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJU
cmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkK
IAogICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvc190ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJvbSB3ZWJraXRweS50b29sLm1vY2t0
b29sIGltcG9ydCBNb2NrT3B0aW9ucworCisKK2NsYXNzIElPU1Rlc3QoZGFyd2luX3Rlc3RjYXNl
LkRhcndpblRlc3QpOgorICAgIGRpc2FibGVfc2V0dXAgPSBUcnVlCisKKyAgICBkZWYgdGVzdF9k
cml2ZXJfbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9y
dCgpLmRyaXZlcl9uYW1lKCksICdEdW1wUmVuZGVyVHJlZS5hcHAnKQorCisgICAgZGVmIHRlc3Rf
YmFzZWxpbmVfc2VhcmNocGF0aChzZWxmKToKKyAgICAgICAgc2VhcmNoX3BhdGggPSBzZWxmLm1h
a2VfcG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWy0xXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Bs
YXRmb3JtL2lvcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbLTJdLCAn
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXdrMScpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNDUz
NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQpAQCAtMSw5OSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotaW1wb3J0IHRpbWUKLQotZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19zaW11
bGF0b3IgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
ZGFyd2luX3Rlc3RjYXNlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9t
b2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91
dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0cHkudG9vbC5tb2Nr
dG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9j
ZXNzLCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Rf
bW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLQotCi1jbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0
Y2FzZS5EYXJ3aW5UZXN0KToKLSAgICBvc19uYW1lID0gJ2lvcy1zaW11bGF0b3InCi0gICAgb3Nf
dmVyc2lvbiA9ICcnCi0gICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCi0gICAgcG9ydF9t
YWtlciA9IElPU1NpbXVsYXRvclBvcnQKLSAgICBpc19zaW11bGF0b3IgPSBUcnVlCi0KLSAgICBk
ZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9u
ZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgcG9y
dCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1w
b3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3Nf
dmVyc2lvbiwga3dhcmdzPWt3YXJncykKLSAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9w
cm9jZXNzZXMnLCAxKQotICAgICAgICByZXR1cm4gcG9ydAotCi0gICAgZGVmIHRlc3Rfc2V0dXBf
ZW52aXJvbl9mb3Jfc2VydmVyKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1Nb2NrT3B0aW9ucyhsZWFrcz1UcnVlLCBndWFyZF9tYWxsb2M9VHJ1ZSkpCi0gICAg
ICAgIGVudiA9IHBvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHBvcnQuZHJpdmVyX25hbWUo
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ01hbGxvY1N0YWNrTG9nZ2luZyddLCAn
MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydNYWxsb2NTY3JpYmJsZSddLCAnMScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydEWUxEX0lOU0VSVF9MSUJSQVJJRVMnXSwg
Jy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQotCi0gICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5
c3RlbShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRvcicsIHNl
bGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQotCi0gICAgZGVmIHRlc3RfZ2V0X2Ny
YXNoX2xvZyhzZWxmKToKLSAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVkIGVsc2V3
aGVyZSwgc28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAgICAgICAg
ZGVmIGZha2VfdGltZV9jYigpOgotICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQotICAg
ICAgICAgICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxm
Lm1ha2VfcG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0Ll9nZXRf
Y3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgp
LCB3YWl0X2Zvcl9sb2c9RmFsc2UpCi0KLSAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0ZWN0dXJl
PSd4ODYnKSkKLQotICAgICAgICBkZWYgcnVuX3NjcmlwdChzY3JpcHQsIGFyZ3M9Tm9uZSwgZW52
PU5vbmUpOgotICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncwotCi0gICAgICAgIHBvcnQuX3J1
bl9zY3JpcHQgPSBydW5fc2NyaXB0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNo
aXRlY3R1cmUoKSwgJ3g4NicpCi0gICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJ0FSQ0hTPWkzODYnLCAnLS1zZGsnLCAnaXBo
b25lc2ltdWxhdG9yJ10pCi0KLSAgICBkZWYgdGVzdF82NGJpdChzZWxmKToKLSAgICAgICAgIyBB
cHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkgZGVmYXVsdAotICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCks
ICd4ODZfNjQnKQotCi0gICAgICAgIGRlZiBydW5fc2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBl
bnY9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCi0KLSAgICAgICAgcG9ydC5f
cnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKLSAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxh
dG9yJ10pCi0KLSAgICBkZWYgdGVzdF9zZGtfbmFtZShzZWxmKToKLSAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LlNESywgJ2lwaG9u
ZXNpbXVsYXRvcicpCi0KLSAgICBkZWYgdGVzdF94Y3J1bihzZWxmKToKLSAgICAgICAgZGVmIHRo
cm93aW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAgICAgICAgcHJpbnQgYXJncwotICAgICAg
ICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk1PQ0sgc2NyaXB0IGVycm9yIikKLQotICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhl
Y3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29tbWFuZCkKLSAgICAgICAgZXhw
ZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy1m
aW5kJywgJ3Rlc3QnXVxuIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMo
c2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdzPVsndGVzdCcsICdmYWxsaW5nJ10sIGV4cGVjdGVk
X3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvcG9ydF90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjE0NTM2KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcg
KzgyLDcgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvc192
ZXJzaW9uID0gTm9uZQogICAgIHBvcnRfbWFrZXIgPSBUZXN0V2ViS2l0UG9ydAogICAgIHBvcnRf
bmFtZSA9IE5vbmUKLSAgICBpc19zaW11bGF0b3IgPSBGYWxzZQorICAgIGRpc2FibGVfc2V0dXAg
PSBGYWxzZQogCiAgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1O
b25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJn
cyk6CiAgICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9KG9zX25h
bWUgb3Igc2VsZi5vc19uYW1lKSwgb3NfdmVyc2lvbj0ob3NfdmVyc2lvbiBvciBzZWxmLm9zX3Zl
cnNpb24pKQpAQCAtMjUyLDggKzI1Miw4IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICBzZWxmLnByb2MgPSBNb2NrU2VydmVyUHJvY2Vzcyhwb3J0
LCBubSwgY21kLCBlbnYsIGxpbmVzPVsnZGlmZjogMTAwJSBmYWlsZWRcbicsICdkaWZmOiAxMDAl
IGZhaWxlZFxuJ10pCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jCiAKLSAgICAgICAgIyBG
SVhNRTogQ2FuJ3QgcHJldGVuZCB0byBydW4gYSBzaW11bGF0b3IncyBzZXR1cCwgc28ganVzdCBz
a2lwIHRoaXMgdGVzdC4KLSAgICAgICAgaWYgc2VsZi5pc19zaW11bGF0b3I6CisgICAgICAgICMg
RklYTUU6IENhbid0IHByZXRlbmQgdG8gcnVuIHNldHVwIGZvciBzb21lIHBvcnRzLCBzbyBqdXN0
IHNraXAgdGhpcyB0ZXN0LgorICAgICAgICBpZiBzZWxmLmRpc2FibGVfc2V0dXA6CiAgICAgICAg
ICAgICByZXR1cm4KIAogICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9
IG1ha2VfcHJvYwpAQCAtMjc5LDggKzI3OSw4IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBzZWxmLnByb2MgPSBNb2NrU2VydmVyUHJvY2Vzcyhw
b3J0LCBubSwgY21kLCBlbnYsIGNyYXNoZWQ9VHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBzZWxm
LnByb2MKIAotICAgICAgICAjIEZJWE1FOiBDYW4ndCBwcmV0ZW5kIHRvIHJ1biBhIHNpbXVsYXRv
cidzIHNldHVwLCBzbyBqdXN0IHNraXAgdGhpcyB0ZXN0LgotICAgICAgICBpZiBzZWxmLmlzX3Np
bXVsYXRvcjoKKyAgICAgICAgIyBGSVhNRTogQ2FuJ3QgcHJldGVuZCB0byBydW4gc2V0dXAgZm9y
IHNvbWUgcG9ydHMsIHNvIGp1c3Qgc2tpcCB0aGlzIHRlc3QuCisgICAgICAgIGlmIHNlbGYuZGlz
YWJsZV9zZXR1cDoKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIHBvcnQuX3NlcnZlcl9w
cm9jZXNzX2NvbnN0cnVjdG9yID0gbWFrZV9wcm9jCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>