<?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>222770</bug_id>
          
          <creation_ts>2021-03-04 16:37:32 -0800</creation_ts>
          <short_desc>Adding Python type annotations to test_expectations.py</short_desc>
          <delta_ts>2021-03-10 11:00:17 -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>
          
          <blocked>220421</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Sneddon [:gsnedders]">gsnedders</reporter>
          <assigned_to name="Sam Sneddon [:gsnedders]">gsnedders</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1736102</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-03-04 16:37:32 -0800</bug_when>
    <thetext>This file has all kinds of confusing code flow, and I have no faith in my ability to refactor it without breaking everything in subtle ways.

This adds PEP 484-with-Python-2-support annotations to the file, which suffice for mypy --follow-imports skip --strict webkitpy/layout_tests/models/test_expectations.py to succeed without errors. I&apos;d much rather be using the Python 3-only syntax, but that&apos;s not an option. (Not rushing to add annotations to the rest of webkitpy till Python 2 support is gone, unless I end up similarly stuck.)

This is based on automatically generated annotations from https://github.com/dropbox/pyannotate running test_expectations_unittest.py, albeit with a fair bit of work to get everything passing with Mypy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736109</commentid>
    <comment_count>1</comment_count>
      <attachid>422313</attachid>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-03-04 16:52:55 -0800</bug_when>
    <thetext>Created attachment 422313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736382</commentid>
    <comment_count>2</comment_count>
      <attachid>422313</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-03-05 09:37:35 -0800</bug_when>
    <thetext>Comment on attachment 422313
Patch

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

I think we should land this without integrating Mypy into check-webkit-style, but if we intend to use more type annotations in webkitpy, we should integrate the type checker into check-webkit-style

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:47
&gt; +    from typing import (

How will we ever run this? Line 44 sets MYPY to false, is that overridden when running Mypy?

&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:450
&gt; +        s = self.to_string(None)

I would have done this like so:

return self.to_string(None) or &apos;&apos;

But more to the point, we usually try to use `if not s` unless we need an explicit None check, and I don&apos;t think we do need that explicit check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737718</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-03-09 12:47:24 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #2)
&gt; Comment on attachment 422313 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=422313&amp;action=review
&gt; 
&gt; I think we should land this without integrating Mypy into
&gt; check-webkit-style, but if we intend to use more type annotations in
&gt; webkitpy, we should integrate the type checker into check-webkit-style

I agree.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:47
&gt; &gt; +    from typing import (
&gt; 
&gt; How will we ever run this? Line 44 sets MYPY to false, is that overridden
&gt; when running Mypy?

MYPY automatically sets MYPY=True, so yes. What would clarify the comment?

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:450
&gt; &gt; +        s = self.to_string(None)
&gt; 
&gt; I would have done this like so:
&gt; 
&gt; return self.to_string(None) or &apos;&apos;

Yeah, I guess especially in the string case this isn&apos;t worth the perf cost.

&gt; But more to the point, we usually try to use `if not s` unless we need an
&gt; explicit None check, and I don&apos;t think we do need that explicit check here.

I guess I&apos;m too used to trying to avoid __bool__ calls for None-checks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737723</commentid>
    <comment_count>4</comment_count>
      <attachid>422313</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-03-09 12:59:51 -0800</bug_when>
    <thetext>Comment on attachment 422313
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/models/test_expectations.py:47
&gt;&gt;&gt; +    from typing import (
&gt;&gt; 
&gt;&gt; How will we ever run this? Line 44 sets MYPY to false, is that overridden when running Mypy?
&gt; 
&gt; MYPY automatically sets MYPY=True, so yes. What would clarify the comment?

Comment is fine, just weird that MYPY works that way. Not sure there is much to be done, this will hopefully die soon when Python 2 does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738134</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-10 10:59:17 -0800</bug_when>
    <thetext>Committed r274220: &lt;https://commits.webkit.org/r274220&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 422313.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738136</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-10 11:00:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/75272854&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422313</attachid>
            <date>2021-03-04 16:52:55 -0800</date>
            <delta_ts>2021-03-10 10:59:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222770-20210305005253.patch</filename>
            <type>text/plain</type>
            <size>40608</size>
            <attacher name="Sam Sneddon [:gsnedders]">gsnedders</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDRkZmRjNmQzMjdmM2Y4YjRhZTRhMjNjOTA4MTY5ZDc0
YWQ2YmYyNS4uMzQ0OTdmZjVkZmU5ZTNiZjg3ODMxYzhlYjZiYzY2M2E5YzAzNzVjMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5
IEBACisyMDIxLTAzLTA0ICBTYW0gU25lZGRvbiAgPGdzbmVkZGVyc0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkaW5nIFB5dGhvbiB0eXBlIGFubm90YXRpb25zIHRvIHRlc3RfZXhwZWN0YXRpb25z
LnB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI3
NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weToK
KyAgICAgICAgKFBhcnNlRXJyb3IuX19pbml0X18pOgorICAgICAgICAoUGFyc2VFcnJvci5fX3N0
cl9fKToKKyAgICAgICAgKFBhcnNlRXJyb3IuX19yZXByX18pOgorICAgICAgICAoVGVzdEV4cGVj
dGF0aW9uV2FybmluZy5fX2luaXRfXyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJzZXIp
OgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9faW5pdF9fKToKKyAgICAgICAgKFRl
c3RFeHBlY3RhdGlvblBhcnNlci5wYXJzZSk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJz
ZXIuZXhwZWN0YXRpb25fZm9yX3NraXBwZWRfdGVzdCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRp
b25QYXJzZXIuX3BhcnNlX2xpbmUpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9w
YXJzZV9tb2RpZmllcnMpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9wYXJzZV9l
eHBlY3RhdGlvbnMpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9jaGVja190ZXN0
X2V4aXN0cyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25QYXJzZXIuX2NvbGxlY3RfbWF0Y2hp
bmdfdGVzdHMpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl90b2tlbml6ZV9saW5l
KToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbkxpbmUpOgorICAgICAgICAoVGVzdEV4cGVjdGF0
aW9uTGluZS5fX2luaXRfXyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25MaW5lLl9fc3RyX18p
OgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uTGluZS5pc19pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RFeHBlY3RhdGlvbkxpbmUuaXNfZmxha3kpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uTGlu
ZS5leHBlY3RlZF9iZWhhdmlvcik6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25MaW5lLmNyZWF0
ZV9wYXNzaW5nX2V4cGVjdGF0aW9uKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbkxpbmUudG9f
c3RyaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbkxpbmUuX3NlcmlhbGl6ZV9wYXJzZWRf
ZXhwZWN0YXRpb25zKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbkxpbmUuX3NlcmlhbGl6ZV9w
YXJzZWRfbW9kaWZpZXJzKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbkxpbmUuX2Zvcm1hdF9s
aW5lKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbCk6CisgICAgICAgIChUZXN0RXhw
ZWN0YXRpb25zTW9kZWwuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVs
Ll9kaWN0X29mX3NldHMpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLmdldF90ZXN0
X3NldCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuZ2V0X3Rlc3Rfc2V0X2Zvcl9r
ZXl3b3JkKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5nZXRfdGVzdHNfd2l0aF9y
ZXN1bHRfdHlwZSk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuZ2V0X3Rlc3RzX3dp
dGhfdGltZWxpbmUpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLmdldF9tb2RpZmll
cnMpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9uc01vZGVsLmhhc19tb2RpZmllcik6CisgICAg
ICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuaGFzX2tleXdvcmQpOgorICAgICAgICAoVGVzdEV4
cGVjdGF0aW9uc01vZGVsLmhhc190ZXN0KToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2Rl
bC5nZXRfZXhwZWN0YXRpb25fbGluZSk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwu
Z2V0X2V4cGVjdGF0aW9ucyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuZ2V0X2V4
cGVjdGF0aW9uc19vcl9wYXNzKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5leHBl
Y3RhdGlvbnNfdG9fc3RyaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5nZXRf
ZXhwZWN0YXRpb25zX3N0cmluZyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuZXhw
ZWN0YXRpb25fdG9fc3RyaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5hZGRf
ZXhwZWN0YXRpb25fbGluZSk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuX2FkZF90
ZXN0KToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5fY2xlYXJfZXhwZWN0YXRpb25z
X2Zvcl90ZXN0KToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnNNb2RlbC5fcmVtb3ZlX2Zyb21f
c2V0cyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zTW9kZWwuX2FscmVhZHlfc2Vlbl9iZXR0
ZXJfbWF0Y2gpOgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9ucyk6CisgICAgICAgIChUZXN0RXhw
ZWN0YXRpb25zLmV4cGVjdGF0aW9uX2Zyb21fc3RyaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3Rh
dGlvbnMucmVzdWx0X3dhc19leHBlY3RlZCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLnJl
bW92ZV9waXhlbF9mYWlsdXJlcyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLnJlbW92ZV9s
ZWFrX2ZhaWx1cmVzKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuaGFzX3BpeGVsX2ZhaWx1
cmVzKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuc3VmZml4ZXNfZm9yX2V4cGVjdGF0aW9u
cyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLl9faW5pdF9fKToKKyAgICAgICAgKFRlc3RF
eHBlY3RhdGlvbnMucmVhZGFibGVfZmlsZW5hbWVfYW5kX2xpbmVfbnVtYmVyKToKKyAgICAgICAg
KFRlc3RFeHBlY3RhdGlvbnMucGFyc2VfZ2VuZXJpY19leHBlY3RhdGlvbnMpOgorICAgICAgICAo
VGVzdEV4cGVjdGF0aW9ucy5wYXJzZV9kZWZhdWx0X3BvcnRfZXhwZWN0YXRpb25zKToKKyAgICAg
ICAgKFRlc3RFeHBlY3RhdGlvbnMucGFyc2Vfb3ZlcnJpZGVfZXhwZWN0YXRpb25zKToKKyAgICAg
ICAgKFRlc3RFeHBlY3RhdGlvbnMucGFyc2VfYWxsX2V4cGVjdGF0aW9ucyk6CisgICAgICAgIChU
ZXN0RXhwZWN0YXRpb25zLm1vZGVsKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuZ2V0X3Jl
YmFzZWxpbmluZ19mYWlsdXJlcyk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLmZpbHRlcmVk
X2V4cGVjdGF0aW9uc19mb3JfdGVzdCk6CisgICAgICAgIChUZXN0RXhwZWN0YXRpb25zLm1hdGNo
ZXNfYW5fZXhwZWN0ZWRfcmVzdWx0KToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuaXNfcmVi
YXNlbGluaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuX3Nob3J0ZW5fZmlsZW5hbWUp
OgorICAgICAgICAoVGVzdEV4cGVjdGF0aW9ucy5fcmVwb3J0X3dhcm5pbmdzKToKKyAgICAgICAg
KFRlc3RFeHBlY3RhdGlvbnMuX3Byb2Nlc3NfdGVzdHNfd2l0aG91dF9leHBlY3RhdGlvbnMpOgor
ICAgICAgICAoVGVzdEV4cGVjdGF0aW9ucy5oYXNfd2FybmluZ3MpOgorICAgICAgICAoVGVzdEV4
cGVjdGF0aW9ucy5yZW1vdmVfY29uZmlndXJhdGlvbl9mcm9tX3Rlc3QpOgorICAgICAgICAoVGVz
dEV4cGVjdGF0aW9ucy5yZW1vdmVfcmViYXNlbGluZWRfdGVzdHMpOgorICAgICAgICAoVGVzdEV4
cGVjdGF0aW9ucy5yZW1vdmVfcmViYXNlbGluZWRfdGVzdHMud2l0aG91dF9yZWJhc2VsaW5lX21v
ZGlmaWVyKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMuX2FkZF9leHBlY3RhdGlvbnMpOgor
ICAgICAgICAoVGVzdEV4cGVjdGF0aW9ucy5hZGRfc2tpcHBlZF90ZXN0cyk6CisgICAgICAgIChU
ZXN0RXhwZWN0YXRpb25zLmxpc3RfdG9fc3RyaW5nKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlv
bnMuc2VyaWFsaXplKToKKyAgICAgICAgKFRlc3RFeHBlY3RhdGlvbnMubm9uZXNfb3V0KToKKwog
MjAyMS0wMy0wNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIGNhbWVyYSBhbmQgbWljcm9waG9uZSBjYXB0dXJlIHN0YXRlIGNvbnRyb2wgV0tXZWJW
aWV3IEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4IDM3YjhlNTc3ZTYzODYz
YTI4MWI5YjYxYTk3Njc2YzYxNTdlMWU4MjkuLjdlMDcxZThkMWJmOTMyYWRkYjMwMDIwOTkxMjA5
OTY1NDg5MTNkODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9ucy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnMucHkKQEAgLTM1LDcgKzM1
LDI3IEBAIGltcG9ydCByZQogaW1wb3J0IHN5cwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5pdGVy
YXRpb25fY29tcGF0aWJpbGl0eSBpbXBvcnQgaXRlcml0ZW1zLCBpdGVydmFsdWVzCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0
Q29uZmlndXJhdGlvbkNvbnZlcnRlcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxz
LnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgKAorICAgIFRlc3RDb25maWd1cmF0aW9uLAorICAg
IFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyLAorKQorZnJvbSB3ZWJraXRweS5wb3J0LmJhc2Ug
aW1wb3J0IFBvcnQKKworTVlQWSA9IEZhbHNlCitpZiBNWVBZOgorICAgICMgTVlQWSBpcyBUcnVl
IHdoZW4gcnVubmluZyBNeXB5OyB0eXBpbmcgaXMgc3RkbGliIG9ubHkgaW4gUHkzCisgICAgZnJv
bSB0eXBpbmcgaW1wb3J0ICgKKyAgICAgICAgQW55LAorICAgICAgICBDYWxsYWJsZSwKKyAgICAg
ICAgQ29udGFpbmVyLAorICAgICAgICBEaWN0LAorICAgICAgICBJdGVyYWJsZSwKKyAgICAgICAg
TGlzdCwKKyAgICAgICAgT3B0aW9uYWwsCisgICAgICAgIFNldCwKKyAgICAgICAgVHVwbGUsCisg
ICAgICAgIFVuaW9uLAorICAgICkKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQogCkBAIC01MywyNyArNzMsMzIgQEAgQkFTRUxJTkVfU1VGRklYX0xJU1QgPSAoJ3BuZycsICd3
YXYnLCAndHh0JykKIAogY2xhc3MgUGFyc2VFcnJvcihFeGNlcHRpb24pOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB3YXJuaW5ncyk6CisgICAgICAgICMgdHlwZTogKExpc3RbVGVzdEV4cGVjdGF0
aW9uV2FybmluZ10pIC0+IE5vbmUKICAgICAgICAgc3VwZXIoUGFyc2VFcnJvciwgc2VsZikuX19p
bml0X18oKQogICAgICAgICBzZWxmLndhcm5pbmdzID0gd2FybmluZ3MKIAogICAgIGRlZiBfX3N0
cl9fKHNlbGYpOgorICAgICAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKG1hcChzdHIsIHNlbGYud2FybmluZ3MpKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYp
OgorICAgICAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgICAgICByZXR1cm4gJ1BhcnNlRXJyb3Io
d2FybmluZ3M9JXMpJyAlIHNlbGYud2FybmluZ3MKIAogCiBjbGFzcyBUZXN0RXhwZWN0YXRpb25X
YXJuaW5nKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lX251
bWJlciwgbGluZSwgZXJyb3IsIHRlc3Q9Tm9uZSk6CisgICAgICAgICMgdHlwZTogKHN0ciwgaW50
LCBzdHIsIHN0ciwgT3B0aW9uYWxbc3RyXSkgLT4gTm9uZQogICAgICAgICBzZWxmLmZpbGVuYW1l
ID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5saW5lX251bWJlciA9IGxpbmVfbnVtYmVyCiAgICAg
ICAgIHNlbGYubGluZSA9IGxpbmUKICAgICAgICAgc2VsZi5lcnJvciA9IGVycm9yCiAgICAgICAg
IHNlbGYudGVzdCA9IHRlc3QKIAotICAgICAgICBzZWxmLnJlbGF0ZWRfZmlsZXMgPSB7fQorICAg
ICAgICBzZWxmLnJlbGF0ZWRfZmlsZXMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgT3B0aW9uYWxb
TGlzdFtpbnRdXV0KIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAjIHR5cGU6ICgp
IC0+IHN0cgogICAgICAgICByZXR1cm4gJ3t9Ont9IHt9IHt9Jy5mb3JtYXQoc2VsZi5maWxlbmFt
ZSwgc2VsZi5saW5lX251bWJlciwgc2VsZi5lcnJvciwgc2VsZi50ZXN0IGlmIHNlbGYudGVzdCBl
bHNlIHNlbGYubGluZSkKIAogCkBAIC05NCwxNiArMTE5LDE4IEBAIGNsYXNzIFRlc3RFeHBlY3Rh
dGlvblBhcnNlcihvYmplY3QpOgogICAgIE1JU1NJTkdfQlVHX1dBUk5JTkcgPSAnVGVzdCBsYWNr
cyBCVUcgbW9kaWZpZXIuJwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGZ1bGxfdGVz
dF9saXN0LCBhbGxvd19yZWJhc2VsaW5lX21vZGlmaWVyLCBzaG9ydGVuX2ZpbGVuYW1lPWxhbWJk
YSB4OiB4KToKKyAgICAgICAgIyB0eXBlOiAoUG9ydCwgT3B0aW9uYWxbTGlzdFtzdHJdXSwgYm9v
bCwgQ2FsbGFibGVbW3N0cl0sIHN0cl0pIC0+IE5vbmUKICAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnQKICAgICAgICAgc2VsZi5fdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciA9IFRlc3RDb25m
aWd1cmF0aW9uQ29udmVydGVyKHNldChwb3J0LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCkpLCBw
b3J0LmNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3JvcygpKQogICAgICAgICBpZiBmdWxsX3Rl
c3RfbGlzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fZnVsbF90ZXN0X2xpc3QgPSBOb25l
CisgICAgICAgICAgICBzZWxmLl9mdWxsX3Rlc3RfbGlzdCA9IE5vbmUgICMgdHlwZTogT3B0aW9u
YWxbU2V0W3N0cl1dCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9mdWxsX3Rlc3Rf
bGlzdCA9IHNldChmdWxsX3Rlc3RfbGlzdCkKICAgICAgICAgc2VsZi5fYWxsb3dfcmViYXNlbGlu
ZV9tb2RpZmllciA9IGFsbG93X3JlYmFzZWxpbmVfbW9kaWZpZXIKICAgICAgICAgc2VsZi5fc2hv
cnRlbl9maWxlbmFtZSA9IHNob3J0ZW5fZmlsZW5hbWUKIAogICAgIGRlZiBwYXJzZShzZWxmLCBm
aWxlbmFtZSwgZXhwZWN0YXRpb25zX3N0cmluZyk6CisgICAgICAgICMgdHlwZTogKHN0ciwgc3Ry
KSAtPiBMaXN0W1Rlc3RFeHBlY3RhdGlvbkxpbmVdCiAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmVz
ID0gW10KICAgICAgICAgbGluZV9udW1iZXIgPSAwCiAgICAgICAgIGZvciBsaW5lIGluIGV4cGVj
dGF0aW9uc19zdHJpbmcuc3BsaXQoIlxuIik6CkBAIC0xMTQsNiArMTQxLDcgQEAgY2xhc3MgVGVz
dEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbl9s
aW5lcwogCiAgICAgZGVmIGV4cGVjdGF0aW9uX2Zvcl9za2lwcGVkX3Rlc3Qoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICAgICAgIyB0eXBlOiAoc3RyKSAtPiBUZXN0RXhwZWN0YXRpb25MaW5lCiAgICAg
ICAgIGlmIG5vdCBzZWxmLl9wb3J0LnRlc3RfZXhpc3RzKHRlc3RfbmFtZSk6CiAgICAgICAgICAg
ICBfbG9nLndhcm5pbmcoJ1RoZSBmb2xsb3dpbmcgdGVzdCAlcyBmcm9tIHRoZSBTa2lwcGVkIGxp
c3QgZG9lc25cJ3QgZXhpc3QnICUgdGVzdF9uYW1lKQogICAgICAgICBleHBlY3RhdGlvbl9saW5l
ID0gVGVzdEV4cGVjdGF0aW9uTGluZSgpCkBAIC0xMzMsNiArMTYxLDcgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbl9saW5l
CiAKICAgICBkZWYgX3BhcnNlX2xpbmUoc2VsZiwgZXhwZWN0YXRpb25fbGluZSk6CisgICAgICAg
ICMgdHlwZTogKFRlc3RFeHBlY3RhdGlvbkxpbmUpIC0+IE5vbmUKICAgICAgICAgaWYgbm90IGV4
cGVjdGF0aW9uX2xpbmUubmFtZToKICAgICAgICAgICAgIHJldHVybgogCkBAIC0xNTEsNiArMTgw
LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X3BhcnNlX2V4cGVjdGF0aW9ucyhleHBlY3RhdGlvbl9saW5lKQogCiAgICAgZGVmIF9wYXJzZV9t
b2RpZmllcnMoc2VsZiwgZXhwZWN0YXRpb25fbGluZSk6CisgICAgICAgICMgdHlwZTogKFRlc3RF
eHBlY3RhdGlvbkxpbmUpIC0+IE5vbmUKICAgICAgICAgaGFzX3dvbnRmaXggPSBGYWxzZQogICAg
ICAgICBoYXNfYnVnaWQgPSBGYWxzZQogICAgICAgICBwYXJzZWRfc3BlY2lmaWVycyA9IHNldCgp
CkBAIC0xODQsNiArMjE0LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6
CiAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgPSBzZWxm
Ll90ZXN0X2NvbmZpZ3VyYXRpb25fY29udmVydGVyLnRvX2NvbmZpZ19zZXQocGFyc2VkX3NwZWNp
ZmllcnMsIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MpCiAKICAgICBkZWYgX3BhcnNlX2V4cGVj
dGF0aW9ucyhzZWxmLCBleHBlY3RhdGlvbl9saW5lKToKKyAgICAgICAgIyB0eXBlOiAoVGVzdEV4
cGVjdGF0aW9uTGluZSkgLT4gTm9uZQogICAgICAgICByZXN1bHQgPSBzZXQoKQogICAgICAgICBm
b3IgcGFydCBpbiBleHBlY3RhdGlvbl9saW5lLmV4cGVjdGF0aW9uczoKICAgICAgICAgICAgIGV4
cGVjdGF0aW9uID0gVGVzdEV4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl9mcm9tX3N0cmluZyhwYXJ0
KQpAQCAtMTk0LDYgKzIyNSw4IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3Qp
OgogICAgICAgICBleHBlY3RhdGlvbl9saW5lLnBhcnNlZF9leHBlY3RhdGlvbnMgPSByZXN1bHQK
IAogICAgIGRlZiBfY2hlY2tfdGVzdF9leGlzdHMoc2VsZiwgZXhwZWN0YXRpb25fbGluZSk6Cisg
ICAgICAgICMgdHlwZTogKFRlc3RFeHBlY3RhdGlvbkxpbmUpIC0+IGJvb2wKKyAgICAgICAgYXNz
ZXJ0IGV4cGVjdGF0aW9uX2xpbmUubmFtZSBpcyBub3QgTm9uZQogICAgICAgICAjIFdlYktpdCdz
IHdheSBvZiBza2lwcGluZyB0ZXN0cyBpcyB0byBhZGQgYSAtZGlzYWJsZWQgc3VmZml4LgogICAg
ICAgICAjIFNvIHdlIHNob3VsZCBjb25zaWRlciB0aGUgcGF0aCBleGlzdGluZyBpZiB0aGUgcGF0
aCBvciB0aGUKICAgICAgICAgIyAtZGlzYWJsZWQgdmVyc2lvbiBleGlzdHMuCkBAIC0yMDgsOCAr
MjQxLDEwIEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNlcihvYmplY3QpOgogICAgICAgICBy
ZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9jb2xsZWN0X21hdGNoaW5nX3Rlc3RzKHNlbGYsIGV4cGVj
dGF0aW9uX2xpbmUpOgorICAgICAgICAjIHR5cGU6IChUZXN0RXhwZWN0YXRpb25MaW5lKSAtPiBO
b25lCiAgICAgICAgICIiIkNvbnZlcnQgdGhlIHRlc3Qgc3BlY2lmaWNhdGlvbiB0byBhbiBhYnNv
bHV0ZSwgbm9ybWFsaXplZAogICAgICAgICBwYXRoIGFuZCBtYWtlIHN1cmUgZGlyZWN0b3JpZXMg
ZW5kIHdpdGggdGhlIE9TIHBhdGggc2VwYXJhdG9yLiIiIgorICAgICAgICBhc3NlcnQgZXhwZWN0
YXRpb25fbGluZS5wYXRoIGlzIG5vdCBOb25lCiAKICAgICAgICAgaWYgbm90IHNlbGYuX2Z1bGxf
dGVzdF9saXN0OgogICAgICAgICAgICAgZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ190ZXN0cyA9
IFtleHBlY3RhdGlvbl9saW5lLnBhdGhdCkBAIC0yNjIsNiArMjk3LDcgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uUGFyc2VyKG9iamVjdCk6CiAgICAgIyBGSVhNRTogU2VlbXMgbGlrZSB0aGVzZSBz
aG91bGQgYmUgY2xhc3NtZXRob2RzIG9uIFRlc3RFeHBlY3RhdGlvbkxpbmUgaW5zdGVhZCBvZiBU
ZXN0RXhwZWN0YXRpb25QYXJzZXIuCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90b2tlbml6
ZV9saW5lKGNscywgZmlsZW5hbWUsIGV4cGVjdGF0aW9uX3N0cmluZywgbGluZV9udW1iZXIpOgor
ICAgICAgICAjIHR5cGU6IChzdHIsIHN0ciwgaW50KSAtPiBUZXN0RXhwZWN0YXRpb25MaW5lCiAg
ICAgICAgICIiIlRva2VuaXplcyBhIGxpbmUgZnJvbSBUZXN0RXhwZWN0YXRpb25zIGFuZCByZXR1
cm5zIGFuIHVucGFyc2VkIFRlc3RFeHBlY3RhdGlvbkxpbmUgaW5zdGFuY2UgdXNpbmcgdGhlIG9s
ZCBmb3JtYXQuCiAKICAgICAgICAgVGhlIG5ldyBmb3JtYXQgZm9yIGEgdGVzdCBleHBlY3RhdGlv
biBsaW5lIGlzOgpAQCAtMzgwLDYgKzQxNiw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvblBhcnNl
cihvYmplY3QpOgogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9zcGxpdF9zcGFjZV9zZXBh
cmF0ZWQoY2xzLCBzcGFjZV9zZXBhcmF0ZWRfc3RyaW5nKToKKyAgICAgICAgIyB0eXBlOiAoc3Ry
KSAtPiBMaXN0W3N0cl0KICAgICAgICAgIiIiU3BsaXRzIGEgc3BhY2Utc2VwYXJhdGVkIHN0cmlu
ZyBpbnRvIGFuIGFycmF5LiIiIgogICAgICAgICByZXR1cm4gW3BhcnQuc3RyaXAoKSBmb3IgcGFy
dCBpbiBzcGFjZV9zZXBhcmF0ZWRfc3RyaW5nLnN0cmlwKCkuc3BsaXQoJyAnKV0KIApAQCAtMzg4
LDM1ICs0MjUsNDUgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uTGluZShvYmplY3QpOgogICAgICIi
IlJlcHJlc2VudHMgYSBsaW5lIGluIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuIiIiCiAKICAgICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgdHlwZTogKCkgLT4gTm9uZQogICAgICAgICAi
IiJJbml0aWFsaXplcyBhIGJsYW5rLWxpbmUgZXF1aXZhbGVudCBvZiBhbiBleHBlY3RhdGlvbi4i
IiIKLSAgICAgICAgc2VsZi5vcmlnaW5hbF9zdHJpbmcgPSBOb25lCi0gICAgICAgIHNlbGYuZmls
ZW5hbWUgPSBOb25lICAjIHRoaXMgaXMgdGhlIHBhdGggdG8gdGhlIGV4cGVjdGF0aW9ucyBmaWxl
IGZvciB0aGlzIGxpbmUKLSAgICAgICAgc2VsZi5saW5lX251bWJlciA9IE5vbmUKLSAgICAgICAg
c2VsZi5uYW1lID0gTm9uZSAgIyB0aGlzIGlzIHRoZSBwYXRoIGluIHRoZSBsaW5lIGl0c2VsZgot
ICAgICAgICBzZWxmLnBhdGggPSBOb25lICAjIHRoaXMgaXMgdGhlIG5vcm1wYXRoIG9mIHNlbGYu
bmFtZQotICAgICAgICBzZWxmLm1vZGlmaWVycyA9IFtdCi0gICAgICAgIHNlbGYucGFyc2VkX21v
ZGlmaWVycyA9IFtdCi0gICAgICAgIHNlbGYucGFyc2VkX2J1Z19tb2RpZmllcnMgPSBbXQotICAg
ICAgICBzZWxmLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zID0gc2V0KCkKLSAgICAgICAgc2VsZi5l
eHBlY3RhdGlvbnMgPSBbXQotICAgICAgICBzZWxmLnBhcnNlZF9leHBlY3RhdGlvbnMgPSBzZXQo
KQotICAgICAgICBzZWxmLmNvbW1lbnQgPSBOb25lCi0gICAgICAgIHNlbGYubWF0Y2hpbmdfdGVz
dHMgPSBbXQotICAgICAgICBzZWxmLndhcm5pbmdzID0gW10KLSAgICAgICAgc2VsZi5yZWxhdGVk
X2ZpbGVzID0ge30gICMgRGljdGlvbmFyeSBvZiBmaWxlcyB0byBsaW5lcyBudW1iZXIgaW4gdGhh
dCBmaWxlIHdoaWNoIG1heSBoYXZlIGNhdXNlZCB0aGUgbGlzdCBvZiB3YXJuaW5ncy4KKyAgICAg
ICAgc2VsZi5vcmlnaW5hbF9zdHJpbmcgPSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KKyAg
ICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUgICMgdHlwZTogT3B0aW9uYWxbc3RyXSAgIyB0aGlz
IGlzIHRoZSBwYXRoIHRvIHRoZSBleHBlY3RhdGlvbnMgZmlsZSBmb3IgdGhpcyBsaW5lOworICAg
ICAgICBzZWxmLmxpbmVfbnVtYmVyID0gTm9uZSAgIyB0eXBlOiBPcHRpb25hbFtpbnRdCisgICAg
ICAgIHNlbGYubmFtZSA9IE5vbmUgICMgdHlwZTogT3B0aW9uYWxbc3RyXSAgIyB0aGlzIGlzIHRo
ZSBwYXRoIGluIHRoZSBsaW5lIGl0c2VsZgorICAgICAgICBzZWxmLnBhdGggPSBOb25lICAjIHR5
cGU6IE9wdGlvbmFsW3N0cl0gICMgdGhpcyBpcyB0aGUgbm9ybXBhdGggb2Ygc2VsZi5uYW1lCisg
ICAgICAgIHNlbGYubW9kaWZpZXJzID0gW10gICMgdHlwZTogTGlzdFtzdHJdCisgICAgICAgIHNl
bGYucGFyc2VkX21vZGlmaWVycyA9IFtdICAjIHR5cGU6IExpc3Rbc3RyXQorICAgICAgICBzZWxm
LnBhcnNlZF9idWdfbW9kaWZpZXJzID0gW10gICMgdHlwZTogTGlzdFtzdHJdCisgICAgICAgIHNl
bGYubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMgPSBzZXQoKSAgIyB0eXBlOiBTZXRbVGVzdENvbmZp
Z3VyYXRpb25dCisgICAgICAgIHNlbGYuZXhwZWN0YXRpb25zID0gW10gICMgdHlwZTogTGlzdFtz
dHJdCisgICAgICAgIHNlbGYucGFyc2VkX2V4cGVjdGF0aW9ucyA9IHNldCgpICAjIHR5cGU6IFNl
dFtpbnRdCisgICAgICAgIHNlbGYuY29tbWVudCA9IE5vbmUgICMgdHlwZTogT3B0aW9uYWxbc3Ry
XQorICAgICAgICBzZWxmLm1hdGNoaW5nX3Rlc3RzID0gW10gICMgdHlwZTogTGlzdFtzdHJdCisg
ICAgICAgIHNlbGYud2FybmluZ3MgPSBbXSAgIyB0eXBlOiBMaXN0W3N0cl0KKyAgICAgICAgc2Vs
Zi5yZWxhdGVkX2ZpbGVzID0ge30gICMgdHlwZTogRGljdFtzdHIsIE9wdGlvbmFsW0xpc3RbaW50
XV1dICAjIERpY3Rpb25hcnkgb2YgZmlsZXMgdG8gbGluZXMgbnVtYmVyIGluIHRoYXQgZmlsZSB3
aGljaCBtYXkgaGF2ZSBjYXVzZWQgdGhlIGxpc3Qgb2Ygd2FybmluZ3MuCiAgICAgICAgIHNlbGYu
bm90X2FwcGxpY2FibGVfdG9fY3VycmVudF9wbGF0Zm9ybSA9IEZhbHNlCisgICAgICAgIHNlbGYu
aXNfZmlsZSA9IEZhbHNlCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYudG9fc3RyaW5nKE5vbmUpCisgICAgICAgICMgdHlwZTogKCkgLT4gc3RyCisgICAgICAg
IHMgPSBzZWxmLnRvX3N0cmluZyhOb25lKQorICAgICAgICBpZiBzIGlzIE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzCiAKICAg
ICBkZWYgaXNfaW52YWxpZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYud2FybmluZ3MgYW5k
IHNlbGYud2FybmluZ3MgIT0gW1Rlc3RFeHBlY3RhdGlvblBhcnNlci5NSVNTSU5HX0JVR19XQVJO
SU5HXQorICAgICAgICAjIHR5cGU6ICgpIC0+IGJvb2wKKyAgICAgICAgcmV0dXJuIGJvb2woc2Vs
Zi53YXJuaW5ncyBhbmQgc2VsZi53YXJuaW5ncyAhPSBbVGVzdEV4cGVjdGF0aW9uUGFyc2VyLk1J
U1NJTkdfQlVHX1dBUk5JTkddKQogCiAgICAgZGVmIGlzX2ZsYWt5KHNlbGYpOgorICAgICAgICAj
IHR5cGU6ICgpIC0+IGJvb2wKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnBhcnNlZF9leHBlY3Rh
dGlvbnMpID4gMQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4cGVjdGVkX2JlaGF2aW9yKHNl
bGYpOgorICAgICAgICAjIHR5cGU6ICgpIC0+IExpc3Rbc3RyXQogICAgICAgICBleHBlY3RhdGlv
bnMgPSBzZWxmLmV4cGVjdGF0aW9uc1s6XQogICAgICAgICBpZiAiU0xPVyIgaW4gc2VsZi5tb2Rp
ZmllcnM6CiAgICAgICAgICAgICBleHBlY3RhdGlvbnMgKz0gWyJTTE9XIl0KQEAgLTQzMiw2ICs0
NzksNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lKG9iamVjdCk6CiAKICAgICBAc3RhdGlj
bWV0aG9kCiAgICAgZGVmIGNyZWF0ZV9wYXNzaW5nX2V4cGVjdGF0aW9uKHRlc3QpOgorICAgICAg
ICAjIHR5cGU6IChzdHIpIC0+IFRlc3RFeHBlY3RhdGlvbkxpbmUKICAgICAgICAgZXhwZWN0YXRp
b25fbGluZSA9IFRlc3RFeHBlY3RhdGlvbkxpbmUoKQogICAgICAgICBleHBlY3RhdGlvbl9saW5l
Lm5hbWUgPSB0ZXN0CiAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucGF0aCA9IHRlc3QKQEAgLTQ0
MSw3ICs0ODksOCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lKG9iamVjdCk6CiAgICAgICAg
IHJldHVybiBleHBlY3RhdGlvbl9saW5lCiAKICAgICBkZWYgdG9fc3RyaW5nKHNlbGYsIHRlc3Rf
Y29uZmlndXJhdGlvbl9jb252ZXJ0ZXIsIGluY2x1ZGVfbW9kaWZpZXJzPVRydWUsIGluY2x1ZGVf
ZXhwZWN0YXRpb25zPVRydWUsIGluY2x1ZGVfY29tbWVudD1UcnVlKToKLSAgICAgICAgcGFyc2Vk
X2V4cGVjdGF0aW9uX3RvX3N0cmluZyA9IGRpY3QoW1twYXJzZWRfZXhwZWN0YXRpb24sIGV4cGVj
dGF0aW9uX3N0cmluZ10gZm9yIGV4cGVjdGF0aW9uX3N0cmluZywgcGFyc2VkX2V4cGVjdGF0aW9u
IGluIFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05TLml0ZW1zKCldKQorICAgICAgICAjIHR5
cGU6IChPcHRpb25hbFtUZXN0Q29uZmlndXJhdGlvbkNvbnZlcnRlcl0sIGJvb2wsIGJvb2wsIGJv
b2wpIC0+IE9wdGlvbmFsW3N0cl0KKyAgICAgICAgcGFyc2VkX2V4cGVjdGF0aW9uX3RvX3N0cmlu
ZyA9IGRpY3QoKHBhcnNlZF9leHBlY3RhdGlvbiwgZXhwZWN0YXRpb25fc3RyaW5nKSBmb3IgZXhw
ZWN0YXRpb25fc3RyaW5nLCBwYXJzZWRfZXhwZWN0YXRpb24gaW4gVGVzdEV4cGVjdGF0aW9ucy5F
WFBFQ1RBVElPTlMuaXRlbXMoKSkgICMgdHlwZTogRGljdFtpbnQsIHN0cl0KIAogICAgICAgICBp
ZiBzZWxmLmlzX2ludmFsaWQoKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9yaWdpbmFsX3N0
cmluZyBvciAnJwpAQCAtNDUwLDcgKzQ5OSw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUo
b2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiAnJyBpZiBzZWxmLmNvbW1lbnQgaXMgTm9uZSBl
bHNlICIjJXMiICUgc2VsZi5jb21tZW50CiAKICAgICAgICAgaWYgdGVzdF9jb25maWd1cmF0aW9u
X2NvbnZlcnRlciBhbmQgc2VsZi5wYXJzZWRfYnVnX21vZGlmaWVyczoKLSAgICAgICAgICAgIHNw
ZWNpZmllcnNfbGlzdCA9IHRlc3RfY29uZmlndXJhdGlvbl9jb252ZXJ0ZXIudG9fc3BlY2lmaWVy
c19saXN0KHNlbGYubWF0Y2hpbmdfY29uZmlndXJhdGlvbnMpCisgICAgICAgICAgICBzcGVjaWZp
ZXJzX2xpc3QgPSB0ZXN0X2NvbmZpZ3VyYXRpb25fY29udmVydGVyLnRvX3NwZWNpZmllcnNfbGlz
dChzZWxmLm1hdGNoaW5nX2NvbmZpZ3VyYXRpb25zKSAgIyB0eXBlOiBMaXN0W1NldFtUdXBsZVtz
dHIsIHN0cl1dXQogICAgICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgICAgIGZvciBzcGVj
aWZpZXJzIGluIHNwZWNpZmllcnNfbGlzdDoKICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0aGlz
IGlzIHNpbGx5IHRoYXQgd2Ugam9pbiB0aGUgbW9kaWZpZXJzIGFuZCB0aGVuIGltbWVkaWF0ZWx5
IHNwbGl0IHRoZW0uCkBAIC00NjMsNiArNTEyLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uTGlu
ZShvYmplY3QpOgogICAgICAgICAgICAgaW5jbHVkZV9tb2RpZmllcnMsIGluY2x1ZGVfZXhwZWN0
YXRpb25zLCBpbmNsdWRlX2NvbW1lbnQpCiAKICAgICBkZWYgX3NlcmlhbGl6ZV9wYXJzZWRfZXhw
ZWN0YXRpb25zKHNlbGYsIHBhcnNlZF9leHBlY3RhdGlvbl90b19zdHJpbmcpOgorICAgICAgICAj
IHR5cGU6IChEaWN0W2ludCwgc3RyXSkgLT4gc3RyCiAgICAgICAgIHJlc3VsdCA9IFtdCiAgICAg
ICAgIGZvciBpbmRleCBpbiBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OX09SREVSOgogICAg
ICAgICAgICAgaWYgaW5kZXggaW4gc2VsZi5wYXJzZWRfZXhwZWN0YXRpb25zOgpAQCAtNDcwLDYg
KzUyMCw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbkxpbmUob2JqZWN0KToKICAgICAgICAgcmV0
dXJuICcgJy5qb2luKHJlc3VsdCkKIAogICAgIGRlZiBfc2VyaWFsaXplX3BhcnNlZF9tb2RpZmll
cnMoc2VsZiwgdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlciwgc3BlY2lmaWVycyk6CisgICAg
ICAgICMgdHlwZTogKFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyLCBTZXRbVHVwbGVbc3RyLCBz
dHJdXSkgLT4gc3RyCiAgICAgICAgIHJlc3VsdCA9IFtdCiAgICAgICAgIGlmIHNlbGYucGFyc2Vk
X2J1Z19tb2RpZmllcnM6CiAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKHNvcnRlZChzZWxmLnBh
cnNlZF9idWdfbW9kaWZpZXJzKSkKQEAgLTQ3OCwxMCArNTI5LDE5IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbkxpbmUob2JqZWN0KToKICAgICAgICAgcmV0dXJuICcgJy5qb2luKHJlc3VsdCkKIAog
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2Zvcm1hdF9saW5lKG1vZGlmaWVycywgbmFtZSwg
ZXhwZWN0YXRpb25zLCBjb21tZW50LCBpbmNsdWRlX21vZGlmaWVycz1UcnVlLCBpbmNsdWRlX2V4
cGVjdGF0aW9ucz1UcnVlLCBpbmNsdWRlX2NvbW1lbnQ9VHJ1ZSk6Ci0gICAgICAgIGJ1Z3MgPSBb
XQotICAgICAgICBuZXdfbW9kaWZpZXJzID0gW10KLSAgICAgICAgbmV3X2V4cGVjdGF0aW9ucyA9
IFtdCisgICAgZGVmIF9mb3JtYXRfbGluZSgKKyAgICAgICAgbW9kaWZpZXJzLCAgIyB0eXBlOiBM
aXN0W3N0cl0KKyAgICAgICAgbmFtZSwgICMgdHlwZTogc3RyCisgICAgICAgIGV4cGVjdGF0aW9u
cywgICMgdHlwZTogTGlzdFtzdHJdCisgICAgICAgIGNvbW1lbnQsICAjIHR5cGU6IE9wdGlvbmFs
W3N0cl0KKyAgICAgICAgaW5jbHVkZV9tb2RpZmllcnM9VHJ1ZSwgICMgdHlwZTogYm9vbAorICAg
ICAgICBpbmNsdWRlX2V4cGVjdGF0aW9ucz1UcnVlLCAgIyB0eXBlOiBib29sCisgICAgICAgIGlu
Y2x1ZGVfY29tbWVudD1UcnVlLCAgIyB0eXBlOiBib29sCisgICAgKToKKyAgICAgICAgIyB0eXBl
OiAoLi4uKSAtPiBzdHIKKyAgICAgICAgYnVncyA9IFtdICAjIHR5cGU6IExpc3Rbc3RyXQorICAg
ICAgICBuZXdfbW9kaWZpZXJzID0gW10gICMgdHlwZTogTGlzdFtzdHJdCisgICAgICAgIG5ld19l
eHBlY3RhdGlvbnMgPSBbXSAgIyB0eXBlOiBMaXN0W3N0cl0KICAgICAgICAgZm9yIG1vZGlmaWVy
IGluIG1vZGlmaWVyczoKICAgICAgICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudXBwZXIoKQog
ICAgICAgICAgICAgaWYgbW9kaWZpZXIuc3RhcnRzd2l0aCgnQlVHV0snKToKQEAgLTQ5MCw3ICs1
NTAsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25MaW5lKG9iamVjdCk6CiAgICAgICAgICAgICAg
ICAgIyBGSVhNRTogd2Ugc2hvdWxkIHByZXNlcnZlIGNhc2Ugb25jZSB3ZSBjYW4gZHJvcCB0aGUg
b2xkIHN5bnRheC4KICAgICAgICAgICAgICAgICBidWdzLmFwcGVuZCgnQnVnKCcgKyBtb2RpZmll
clszOl0ubG93ZXIoKSArICcpJykKICAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgaW4gKCdTTE9X
JywgJ1NLSVAnLCAnUkVCQVNFTElORScsICdXT05URklYJywgJ0RVTVBKU0NPTlNPTEVMT0dJTlNU
REVSUicpOgotICAgICAgICAgICAgICAgIG5ld19leHBlY3RhdGlvbnMuYXBwZW5kKFRlc3RFeHBl
Y3RhdGlvblBhcnNlci5faW52ZXJ0ZWRfZXhwZWN0YXRpb25fdG9rZW5zLmdldChtb2RpZmllcikp
CisgICAgICAgICAgICAgICAgbmV3X2V4cGVjdGF0aW9ucy5hcHBlbmQoVGVzdEV4cGVjdGF0aW9u
UGFyc2VyLl9pbnZlcnRlZF9leHBlY3RhdGlvbl90b2tlbnNbbW9kaWZpZXJdKQogICAgICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgICAgICBuZXdfbW9kaWZpZXJzLmFwcGVuZChUZXN0RXhwZWN0
YXRpb25QYXJzZXIuX2ludmVydGVkX2NvbmZpZ3VyYXRpb25fdG9rZW5zLmdldChtb2RpZmllciwg
bW9kaWZpZXIpKQogCkBAIC01MTcsMzEgKzU3NywzNCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25z
TW9kZWwob2JqZWN0KToKICAgICAiIiJSZXByZXNlbnRzIHJlbGF0aW9uYWwgc3RvcmUgb2YgYWxs
IGV4cGVjdGF0aW9ucyBhbmQgcHJvdmlkZXMgQ1JVRCBzZW1hbnRpY3MgdG8gbWFuYWdlIGl0LiIi
IgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNob3J0ZW5fZmlsZW5hbWU9bGFtYmRhIHg6IHgp
OgorICAgICAgICAjIHR5cGU6IChDYWxsYWJsZVtbc3RyXSwgc3RyXSkgLT4gTm9uZQogICAgICAg
ICAjIE1hcHMgYSB0ZXN0IHRvIGl0cyBsaXN0IG9mIGV4cGVjdGF0aW9ucy4KLSAgICAgICAgc2Vs
Zi5fdGVzdF90b19leHBlY3RhdGlvbnMgPSB7fQorICAgICAgICBzZWxmLl90ZXN0X3RvX2V4cGVj
dGF0aW9ucyA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBTZXRbaW50XV0KIAogICAgICAgICAjIE1h
cHMgYSB0ZXN0IHRvIGxpc3Qgb2YgaXRzIG1vZGlmaWVycyAoc3RyaW5nIHZhbHVlcykKLSAgICAg
ICAgc2VsZi5fdGVzdF90b19tb2RpZmllcnMgPSB7fQorICAgICAgICBzZWxmLl90ZXN0X3RvX21v
ZGlmaWVycyA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBMaXN0W3N0cl1dCiAKICAgICAgICAgIyBN
YXBzIGEgdGVzdCB0byBhIFRlc3RFeHBlY3RhdGlvbkxpbmUgaW5zdGFuY2UuCi0gICAgICAgIHNl
bGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25fbGluZSA9IHt9CisgICAgICAgIHNlbGYuX3Rlc3RfdG9f
ZXhwZWN0YXRpb25fbGluZSA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBUZXN0RXhwZWN0YXRpb25M
aW5lXQogCi0gICAgICAgIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzID0gc2VsZi5fZGljdF9vZl9z
ZXRzKFRlc3RFeHBlY3RhdGlvbnMuTU9ESUZJRVJTKQotICAgICAgICBzZWxmLl9leHBlY3RhdGlv
bl90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0cyhUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFU
SU9OUykKLSAgICAgICAgc2VsZi5fdGltZWxpbmVfdG9fdGVzdHMgPSBzZWxmLl9kaWN0X29mX3Nl
dHMoVGVzdEV4cGVjdGF0aW9ucy5USU1FTElORVMpCi0gICAgICAgIHNlbGYuX3Jlc3VsdF90eXBl
X3RvX3Rlc3RzID0gc2VsZi5fZGljdF9vZl9zZXRzKFRlc3RFeHBlY3RhdGlvbnMuUkVTVUxUX1RZ
UEVTKQorICAgICAgICBzZWxmLl9tb2RpZmllcl90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0
cyhUZXN0RXhwZWN0YXRpb25zLk1PRElGSUVSUykgICMgdHlwZTogRGljdFtpbnQsIFNldFtzdHJd
XQorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbl90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0
cyhUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OUykgICMgdHlwZTogRGljdFtpbnQsIFNldFtz
dHJdXQorICAgICAgICBzZWxmLl90aW1lbGluZV90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0
cyhUZXN0RXhwZWN0YXRpb25zLlRJTUVMSU5FUykgICMgdHlwZTogRGljdFtpbnQsIFNldFtzdHJd
XQorICAgICAgICBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0cyA9IHNlbGYuX2RpY3Rfb2Zfc2V0
cyhUZXN0RXhwZWN0YXRpb25zLlJFU1VMVF9UWVBFUykgICMgdHlwZTogRGljdFtpbnQsIFNldFtz
dHJdXQogCiAgICAgICAgIHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUgPSBzaG9ydGVuX2ZpbGVuYW1l
CiAKICAgICBkZWYgX2RpY3Rfb2Zfc2V0cyhzZWxmLCBzdHJpbmdzX3RvX2NvbnN0YW50cyk6Cisg
ICAgICAgICMgdHlwZTogKERpY3Rbc3RyLCBpbnRdKSAtPiBEaWN0W2ludCwgU2V0W0FueV1dCiAg
ICAgICAgICIiIlRha2VzIGEgZGljdCBvZiBzdHJpbmdzLT5jb25zdGFudHMgYW5kIHJldHVybnMg
YSBkaWN0IG1hcHBpbmcKICAgICAgICAgZWFjaCBjb25zdGFudCB0byBhbiBlbXB0eSBzZXQuIiIi
Ci0gICAgICAgIGQgPSB7fQorICAgICAgICBkID0ge30gICMgdHlwZTogRGljdFtpbnQsIFNldFtB
bnldXQogICAgICAgICBmb3IgYyBpbiBzdHJpbmdzX3RvX2NvbnN0YW50cy52YWx1ZXMoKToKICAg
ICAgICAgICAgIGRbY10gPSBzZXQoKQogICAgICAgICByZXR1cm4gZAogCiAgICAgZGVmIGdldF90
ZXN0X3NldChzZWxmLCBtb2RpZmllciwgZXhwZWN0YXRpb249Tm9uZSwgaW5jbHVkZV9za2lwcz1U
cnVlKToKKyAgICAgICAgIyB0eXBlOiAoaW50LCBOb25lLCBib29sKSAtPiBTZXRbc3RyXQogICAg
ICAgICBpZiBleHBlY3RhdGlvbiBpcyBOb25lOgogICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9t
b2RpZmllcl90b190ZXN0c1ttb2RpZmllcl0KICAgICAgICAgZWxzZToKQEAgLTU1NCw2ICs2MTcs
NyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgcmV0dXJu
IHRlc3RzCiAKICAgICBkZWYgZ2V0X3Rlc3Rfc2V0X2Zvcl9rZXl3b3JkKHNlbGYsIGtleXdvcmQp
OgorICAgICAgICAjIHR5cGU6IChzdHIpIC0+IFNldFtzdHJdCiAgICAgICAgICMgRklYTUU6IGdl
dF90ZXN0X3NldCgpIGlzIGFuIGF3a3dhcmQgcHVibGljIGludGVyZmFjZSBiZWNhdXNlIGl0IHJl
cXVpcmVzCiAgICAgICAgICMgY2FsbGVycyB0byBrbm93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
bW9kaWZpZXJzIGFuZCBleHBlY3RhdGlvbnMuIFdlCiAgICAgICAgICMgc2hvdWxkIHJlcGxhY2Ug
dGhhdCB3aXRoIHRoaXMgd2hlcmUgcG9zc2libGUuCkBAIC01NzIsMzggKzYzNiw0OCBAQCBjbGFz
cyBUZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgcmV0dXJuIG1hdGNoaW5n
X3Rlc3RzCiAKICAgICBkZWYgZ2V0X3Rlc3RzX3dpdGhfcmVzdWx0X3R5cGUoc2VsZiwgcmVzdWx0
X3R5cGUpOgorICAgICAgICAjIHR5cGU6IChpbnQpIC0+IFNldFtzdHJdCiAgICAgICAgIHJldHVy
biBzZWxmLl9yZXN1bHRfdHlwZV90b190ZXN0c1tyZXN1bHRfdHlwZV0KIAogICAgIGRlZiBnZXRf
dGVzdHNfd2l0aF90aW1lbGluZShzZWxmLCB0aW1lbGluZSk6CisgICAgICAgICMgdHlwZTogKGlu
dCkgLT4gU2V0W3N0cl0KICAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWVsaW5lX3RvX3Rlc3RzW3Rp
bWVsaW5lXQogCiAgICAgZGVmIGdldF9tb2RpZmllcnMoc2VsZiwgdGVzdCk6CisgICAgICAgICMg
dHlwZTogKHN0cikgLT4gTGlzdFtzdHJdCiAgICAgICAgICIiIlRoaXMgcmV0dXJucyBtb2RpZmll
cnMgZm9yIHRoZSBnaXZlbiB0ZXN0ICh0aGUgbW9kaWZpZXJzIHBsdXMgdGhlIEJVR1hYWFggaWRl
bnRpZmllcikuIFRoaXMgaXMgdXNlZCBieSB0aGUgTFRURiBkYXNoYm9hcmQuIiIiCiAgICAgICAg
IHJldHVybiBzZWxmLl90ZXN0X3RvX21vZGlmaWVyc1t0ZXN0XQogCiAgICAgZGVmIGhhc19tb2Rp
ZmllcihzZWxmLCB0ZXN0LCBtb2RpZmllcik6CisgICAgICAgICMgdHlwZTogKHN0ciwgaW50KSAt
PiBib29sCiAgICAgICAgIHJldHVybiB0ZXN0IGluIHNlbGYuX21vZGlmaWVyX3RvX3Rlc3RzW21v
ZGlmaWVyXQogCiAgICAgZGVmIGhhc19rZXl3b3JkKHNlbGYsIHRlc3QsIGtleXdvcmQpOgorICAg
ICAgICAjIHR5cGU6IChzdHIsIHN0cikgLT4gYm9vbAogICAgICAgICByZXR1cm4gKGtleXdvcmQu
dXBwZXIoKSBpbiBzZWxmLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHRlc3QpIG9yCiAgICAgICAg
ICAgICAgICAga2V5d29yZC5sb3dlcigpIGluIHNlbGYuZ2V0X21vZGlmaWVycyh0ZXN0KSkKIAog
ICAgIGRlZiBoYXNfdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIyB0eXBlOiAoc3RyKSAtPiBi
b29sCiAgICAgICAgIHJldHVybiB0ZXN0IGluIHNlbGYuX3Rlc3RfdG9fZXhwZWN0YXRpb25fbGlu
ZQogCiAgICAgZGVmIGdldF9leHBlY3RhdGlvbl9saW5lKHNlbGYsIHRlc3QpOgorICAgICAgICAj
IHR5cGU6IChzdHIpIC0+IE9wdGlvbmFsW1Rlc3RFeHBlY3RhdGlvbkxpbmVdCiAgICAgICAgIHJl
dHVybiBzZWxmLl90ZXN0X3RvX2V4cGVjdGF0aW9uX2xpbmUuZ2V0KHRlc3QpCiAKICAgICBkZWYg
Z2V0X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIyB0eXBlOiAoc3RyKSAtPiBT
ZXRbaW50XQogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF90b19leHBlY3RhdGlvbnNbdGVzdF0K
IAogICAgIGRlZiBnZXRfZXhwZWN0YXRpb25zX29yX3Bhc3Moc2VsZiwgdGVzdCk6CisgICAgICAg
ICMgdHlwZTogKHN0cikgLT4gU2V0W2ludF0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0
dXJuIHNlbGYuZ2V0X2V4cGVjdGF0aW9ucyh0ZXN0KQogICAgICAgICBleGNlcHQ6CiAgICAgICAg
ICAgICByZXR1cm4gc2V0KFtQQVNTXSkKIAogICAgIGRlZiBleHBlY3RhdGlvbnNfdG9fc3RyaW5n
KHNlbGYsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgICMgdHlwZTogKEl0ZXJhYmxlW2ludF0pIC0+
IHN0cgogICAgICAgICByZXR2YWwgPSBbXQogCiAgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBl
eHBlY3RhdGlvbnM6CkBAIC02MTIsNiArNjg2LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc01v
ZGVsKG9iamVjdCk6CiAgICAgICAgIHJldHVybiAiICIuam9pbihyZXR2YWwpCiAKICAgICBkZWYg
Z2V0X2V4cGVjdGF0aW9uc19zdHJpbmcoc2VsZiwgdGVzdCk6CisgICAgICAgICMgdHlwZTogKHN0
cikgLT4gc3RyCiAgICAgICAgICIiIlJldHVybnMgdGhlIGV4cGVjdGF0aW9ucyBmb3IgdGhlIGdp
dmVuIHRlc3QgYXMgYW4gdXBwZXJjYXNlIHN0cmluZy4KICAgICAgICAgSWYgdGhlcmUgYXJlIG5v
IGV4cGVjdGF0aW9ucyBmb3IgdGhlIHRlc3QsIHRoZW4gIlBBU1MiIGlzIHJldHVybmVkLiIiIgog
ICAgICAgICB0cnk6CkBAIC02MjYsNiArNzAxLDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc01v
ZGVsKG9iamVjdCk6CiAgICAgICAgIHJldHVybiAiICIuam9pbihyZXR2YWwpCiAKICAgICBkZWYg
ZXhwZWN0YXRpb25fdG9fc3RyaW5nKHNlbGYsIGV4cGVjdGF0aW9uKToKKyAgICAgICAgIyB0eXBl
OiAoaW50KSAtPiBzdHIKICAgICAgICAgIiIiUmV0dXJuIHRoZSB1cHBlcmNhc2VkIHN0cmluZyBl
cXVpdmFsZW50IG9mIGEgZ2l2ZW4gZXhwZWN0YXRpb24uIiIiCiAgICAgICAgIGZvciBpdGVtIGlu
IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05TLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBp
dGVtWzFdID09IGV4cGVjdGF0aW9uOgpAQCAtNjMzLDYgKzcwOSw3IEBAIGNsYXNzIFRlc3RFeHBl
Y3RhdGlvbnNNb2RlbChvYmplY3QpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGV4cGVjdGF0
aW9uKQogCiAgICAgZGVmIGFkZF9leHBlY3RhdGlvbl9saW5lKHNlbGYsIGV4cGVjdGF0aW9uX2xp
bmUsIGluX3NraXBwZWQ9RmFsc2UpOgorICAgICAgICAjIHR5cGU6IChUZXN0RXhwZWN0YXRpb25M
aW5lLCBib29sKSAtPiBOb25lCiAgICAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHdhcm5pbmdz
IGVuY291bnRlcmVkIHdoaWxlIG1hdGNoaW5nIG1vZGlmaWVycy4iIiIKIAogICAgICAgICBpZiBl
eHBlY3RhdGlvbl9saW5lLmlzX2ludmFsaWQoKToKQEAgLTY0Nyw2ICs3MjQsNyBAQCBjbGFzcyBU
ZXN0RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2FkZF90ZXN0
KHRlc3QsIGV4cGVjdGF0aW9uX2xpbmUpCiAKICAgICBkZWYgX2FkZF90ZXN0KHNlbGYsIHRlc3Qs
IGV4cGVjdGF0aW9uX2xpbmUpOgorICAgICAgICAjIHR5cGU6IChzdHIsIFRlc3RFeHBlY3RhdGlv
bkxpbmUpIC0+IE5vbmUKICAgICAgICAgIiIiU2V0cyB0aGUgZXhwZWN0ZWQgc3RhdGUgZm9yIGEg
Z2l2ZW4gdGVzdC4KIAogICAgICAgICBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGUgdGVzdCBoYXMg
bm90IGJlZW4gYWRkZWQgYmVmb3JlLiBJZiBpdCBoYXMsCkBAIC02NzcsNiArNzU1LDcgQEAgY2xh
c3MgVGVzdEV4cGVjdGF0aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9yZXN1
bHRfdHlwZV90b190ZXN0c1tGQUlMXS5hZGQodGVzdCkKIAogICAgIGRlZiBfY2xlYXJfZXhwZWN0
YXRpb25zX2Zvcl90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAjIHR5cGU6IChzdHIpIC0+IE5v
bmUKICAgICAgICAgIiIiUmVtb3ZlIHByZXhpc3RpbmcgZXhwZWN0YXRpb25zIGZvciB0aGlzIHRl
c3QuCiAgICAgICAgIFRoaXMgaGFwcGVucyBpZiB3ZSBhcmUgc2VlaW5nIGEgbW9yZSBwcmVjaXNl
IHBhdGgKICAgICAgICAgdGhhbiBhIHByZXZpb3VzIGxpc3RpbmcuCkBAIC02ODksNiArNzY4LDcg
QEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
Ll9yZW1vdmVfZnJvbV9zZXRzKHRlc3QsIHNlbGYuX3Jlc3VsdF90eXBlX3RvX3Rlc3RzKQogCiAg
ICAgZGVmIF9yZW1vdmVfZnJvbV9zZXRzKHNlbGYsIHRlc3QsIGRpY3Rfb2Zfc2V0c19vZl90ZXN0
cyk6CisgICAgICAgICMgdHlwZTogKHN0ciwgRGljdFtpbnQsIFNldFtzdHJdXSkgLT4gTm9uZQog
ICAgICAgICAiIiJSZW1vdmVzIHRoZSBnaXZlbiB0ZXN0IGZyb20gdGhlIHNldHMgaW4gdGhlIGRp
Y3Rpb25hcnkuCiAKICAgICAgICAgQXJnczoKQEAgLTY5OSw2ICs3NzksNyBAQCBjbGFzcyBUZXN0
RXhwZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgICAgICAgICBzZXRfb2ZfdGVzdHMu
cmVtb3ZlKHRlc3QpCiAKICAgICBkZWYgX2FscmVhZHlfc2Vlbl9iZXR0ZXJfbWF0Y2goc2VsZiwg
dGVzdCwgZXhwZWN0YXRpb25fbGluZSk6CisgICAgICAgICMgdHlwZTogKHN0ciwgVGVzdEV4cGVj
dGF0aW9uTGluZSkgLT4gYm9vbAogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgd2UndmUgc2Vl
biBhIGJldHRlciBtYXRjaCBhbHJlYWR5IGluIHRoZSBmaWxlLgogCiAgICAgICAgIFJldHVybnMg
VHJ1ZSBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gYSBleHBlY3RhdGlvbl9saW5lLm5hbWUgdGhhdCBt
YXRjaGVzIG1vcmUgb2YgdGhlIHRlc3QKQEAgLTcxNSw2ICs3OTYsOSBAQCBjbGFzcyBUZXN0RXhw
ZWN0YXRpb25zTW9kZWwob2JqZWN0KToKICAgICAgICAgICAgICMgV2UndmUgbW92ZWQgb24gdG8g
YSBuZXcgZXhwZWN0YXRpb24gZmlsZSwgd2hpY2ggb3ZlcnJpZGVzIG9sZGVyIG9uZXMuCiAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgICAgICBhc3NlcnQgcHJldl9leHBlY3RhdGlvbl9s
aW5lLnBhdGggaXMgbm90IE5vbmUKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGF0aW9uX2xpbmUucGF0
aCBpcyBub3QgTm9uZQorCiAgICAgICAgIGlmIGxlbihwcmV2X2V4cGVjdGF0aW9uX2xpbmUucGF0
aCkgPiBsZW4oZXhwZWN0YXRpb25fbGluZS5wYXRoKToKICAgICAgICAgICAgICMgVGhlIHByZXZp
b3VzIHBhdGggbWF0Y2hlZCBtb3JlIG9mIHRoZSB0ZXN0LgogICAgICAgICAgICAgcmV0dXJuIFRy
dWUKQEAgLTczMiw5ICs4MTYsMTQgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9uc01vZGVsKG9iamVj
dCk6CiAgICAgICAgICMKICAgICAgICAgIyBUbyB1c2UgdGhlICJtb3JlIG1vZGlmaWVycyB3aW5z
IiBwb2xpY3ksIGNoYW5nZSB0aGUgZXJyb3JzIGZvciBvdmVycmlkZXMKICAgICAgICAgIyB0byBi
ZSB3YXJuaW5ncyBhbmQgcmV0dXJuIEZhbHNlIi4KKyAgICAgICAgYXNzZXJ0IHByZXZfZXhwZWN0
YXRpb25fbGluZS5maWxlbmFtZSBpcyBub3QgTm9uZQorICAgICAgICBhc3NlcnQgZXhwZWN0YXRp
b25fbGluZS5maWxlbmFtZSBpcyBub3QgTm9uZQogICAgICAgICBzaG9ydGVuZWRfZXhwZWN0YXRp
b25fZmlsZW5hbWUgPSBzZWxmLl9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uX2xpbmUuZmls
ZW5hbWUpCiAgICAgICAgIHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSA9
IHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUocHJldl9leHBlY3RhdGlvbl9saW5lLmZpbGVuYW1lKQog
CisgICAgICAgIGFzc2VydCBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIgaXMgbm90
IE5vbmUKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGF0aW9uX2xpbmUubGluZV9udW1iZXIgaXMgbm90
IE5vbmUKKwogICAgICAgICBpZiBwcmV2X2V4cGVjdGF0aW9uX2xpbmUubWF0Y2hpbmdfY29uZmln
dXJhdGlvbnMgPT0gZXhwZWN0YXRpb25fbGluZS5tYXRjaGluZ19jb25maWd1cmF0aW9uczoKICAg
ICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUud2FybmluZ3MuYXBwZW5kKCdEdXBsaWNhdGUgb3Ig
YW1iaWd1b3VzIGVudHJ5IGxpbmVzICVzOiVkIGFuZCAlczolZC4nICUgKAogICAgICAgICAgICAg
ICAgIHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlvbl9maWxlbmFtZSwgcHJldl9leHBlY3Rh
dGlvbl9saW5lLmxpbmVfbnVtYmVyLApAQCAtNzYxLDEzICs4NTAsMTkgQEAgY2xhc3MgVGVzdEV4
cGVjdGF0aW9uc01vZGVsKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAg
ICAgICAjIE1pc3NpbmcgZmlsZXMgd2lsbCBiZSAnTm9uZScuIEl0IHNob3VsZCBiZSBpbXBvc3Np
YmxlIHRvIGhhdmUgYSBtaXNzaW5nIGZpbGUgd2hpY2ggYWxzbyBoYXMgYSBsaW5lIGFzc29jaWF0
ZWQgd2l0aCBpdC4KLSAgICAgICAgYXNzZXJ0IHNob3J0ZW5lZF9wcmV2aW91c19leHBlY3RhdGlv
bl9maWxlbmFtZSBub3QgaW4gZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzIG9yIGV4cGVj
dGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25f
ZmlsZW5hbWVdIGlzIG5vdCBOb25lCi0gICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9m
aWxlc1tzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25fZmlsZW5hbWVdID0gZXhwZWN0YXRp
b25fbGluZS5yZWxhdGVkX2ZpbGVzLmdldChzaG9ydGVuZWRfcHJldmlvdXNfZXhwZWN0YXRpb25f
ZmlsZW5hbWUsIFtdKQotICAgICAgICBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hv
cnRlbmVkX3ByZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXS5hcHBlbmQocHJldl9leHBlY3Rh
dGlvbl9saW5lLmxpbmVfbnVtYmVyKQorICAgICAgICBpZiBzaG9ydGVuZWRfcHJldmlvdXNfZXhw
ZWN0YXRpb25fZmlsZW5hbWUgbm90IGluIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlczoK
KyAgICAgICAgICAgIGV4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfcHJl
dmlvdXNfZXhwZWN0YXRpb25fZmlsZW5hbWVdID0gW10KKworICAgICAgICBleHBlY3RhdGlvbl9s
aW5lX3JlbGF0ZWQgPSBleHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX3By
ZXZpb3VzX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXQorICAgICAgICBhc3NlcnQgZXhwZWN0YXRpb25f
bGluZV9yZWxhdGVkIGlzIG5vdCBOb25lCisgICAgICAgIGV4cGVjdGF0aW9uX2xpbmVfcmVsYXRl
ZC5hcHBlbmQocHJldl9leHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQogCi0gICAgICAgIGFz
c2VydCBzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWUgbm90IGluIHByZXZfZXhwZWN0YXRp
b25fbGluZS5yZWxhdGVkX2ZpbGVzIG9yIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2Zp
bGVzW3Nob3J0ZW5lZF9leHBlY3RhdGlvbl9maWxlbmFtZV0gaXMgbm90IE5vbmUKLSAgICAgICAg
cHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hvcnRlbmVkX2V4cGVjdGF0aW9u
X2ZpbGVuYW1lXSA9IHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2ZpbGVzLmdldChzaG9y
dGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWUsIFtdKQotICAgICAgICBwcmV2X2V4cGVjdGF0aW9u
X2xpbmUucmVsYXRlZF9maWxlc1tzaG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWVdLmFwcGVu
ZChleHBlY3RhdGlvbl9saW5lLmxpbmVfbnVtYmVyKQorICAgICAgICBpZiBzaG9ydGVuZWRfZXhw
ZWN0YXRpb25fZmlsZW5hbWUgbm90IGluIHByZXZfZXhwZWN0YXRpb25fbGluZS5yZWxhdGVkX2Zp
bGVzOgorICAgICAgICAgICAgcHJldl9leHBlY3RhdGlvbl9saW5lLnJlbGF0ZWRfZmlsZXNbc2hv
cnRlbmVkX2V4cGVjdGF0aW9uX2ZpbGVuYW1lXSA9IFtdCisKKyAgICAgICAgcHJldl9leHBlY3Rh
dGlvbl9saW5lX3JlbGF0ZWQgPSBwcmV2X2V4cGVjdGF0aW9uX2xpbmUucmVsYXRlZF9maWxlc1tz
aG9ydGVuZWRfZXhwZWN0YXRpb25fZmlsZW5hbWVdCisgICAgICAgIGFzc2VydCBwcmV2X2V4cGVj
dGF0aW9uX2xpbmVfcmVsYXRlZCBpcyBub3QgTm9uZQorICAgICAgICBwcmV2X2V4cGVjdGF0aW9u
X2xpbmVfcmVsYXRlZC5hcHBlbmQoZXhwZWN0YXRpb25fbGluZS5saW5lX251bWJlcikKIAogICAg
ICAgICByZXR1cm4gVHJ1ZQogCkBAIC04NjEsMTEgKzk1NiwxMyBAQCBjbGFzcyBUZXN0RXhwZWN0
YXRpb25zKG9iamVjdCk6CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZXhwZWN0YXRpb25f
ZnJvbV9zdHJpbmcoY2xzLCBzdHJpbmcpOgorICAgICAgICAjIHR5cGU6IChzdHIpIC0+IE9wdGlv
bmFsW2ludF0KICAgICAgICAgYXNzZXJ0KCcgJyBub3QgaW4gc3RyaW5nKSAgIyBUaGlzIG9ubHkg
aGFuZGxlcyBvbmUgZXhwZWN0YXRpb24gYXQgYSB0aW1lLgogICAgICAgICByZXR1cm4gY2xzLkVY
UEVDVEFUSU9OUy5nZXQoc3RyaW5nLmxvd2VyKCkpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ZGVmIHJlc3VsdF93YXNfZXhwZWN0ZWQocmVzdWx0LCBleHBlY3RlZF9yZXN1bHRzLCB0ZXN0X25l
ZWRzX3JlYmFzZWxpbmluZywgdGVzdF9pc19za2lwcGVkKToKKyAgICAgICAgIyB0eXBlOiAoaW50
LCBTZXRbaW50XSwgYm9vbCwgYm9vbCkgLT4gYm9vbAogICAgICAgICAiIiJSZXR1cm5zIHdoZXRo
ZXIgd2UgZ290IGEgcmVzdWx0IHdlIHdlcmUgZXhwZWN0aW5nLgogICAgICAgICBBcmdzOgogICAg
ICAgICAgICAgcmVzdWx0OiBhY3R1YWwgcmVzdWx0IG9mIGEgdGVzdCBleGVjdXRpb24KQEAgLTg4
NCw2ICs5ODEsNyBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAKICAgICBAc3Rh
dGljbWV0aG9kCiAgICAgZGVmIHJlbW92ZV9waXhlbF9mYWlsdXJlcyhleHBlY3RlZF9yZXN1bHRz
KToKKyAgICAgICAgIyB0eXBlOiAoU2V0W2ludF0pIC0+IFNldFtpbnRdCiAgICAgICAgICIiIlJl
dHVybnMgYSBjb3B5IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzIGZvciBhIHRlc3QsIGV4Y2VwdCB0
aGF0IHdlCiAgICAgICAgIGRyb3AgYW55IHBpeGVsIGZhaWx1cmVzIGFuZCByZXR1cm4gdGhlIHJl
bWFpbmluZyBleHBlY3RhdGlvbnMuIEZvciBleGFtcGxlLAogICAgICAgICBpZiB3ZSdyZSBub3Qg
cnVubmluZyBwaXhlbCB0ZXN0cywgdGhlbiB0ZXN0cyBleHBlY3RlZCB0byBmYWlsIGFzIElNQUdF
CkBAIC04OTYsNiArOTk0LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgogCiAg
ICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiByZW1vdmVfbGVha19mYWlsdXJlcyhleHBlY3RlZF9y
ZXN1bHRzKToKKyAgICAgICAgIyB0eXBlOiAoU2V0W2ludF0pIC0+IFNldFtpbnRdCiAgICAgICAg
ICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBleHBlY3RlZCByZXN1bHRzIGZvciBhIHRlc3QsIGV4
Y2VwdCB0aGF0IHdlCiAgICAgICAgIGRyb3AgYW55IGxlYWsgZmFpbHVyZXMgYW5kIHJldHVybiB0
aGUgcmVtYWluaW5nIGV4cGVjdGF0aW9ucy4gRm9yIGV4YW1wbGUsCiAgICAgICAgIGlmIHdlJ3Jl
IG5vdCBydW5uaW5nIHdpdGggLS13b3JsZC1sZWFrcywgdGhlbiB0ZXN0cyBleHBlY3RlZCB0byBm
YWlsIGFzIExFQUsKQEAgLTkwOSwxMCArMTAwOCwxMiBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25z
KG9iamVjdCk6CiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGhhc19waXhlbF9mYWlsdXJl
cyhhY3R1YWxfcmVzdWx0cyk6CisgICAgICAgICMgdHlwZTogKENvbnRhaW5lcltpbnRdKSAtPiBi
b29sCiAgICAgICAgIHJldHVybiBJTUFHRSBpbiBhY3R1YWxfcmVzdWx0cyBvciBGQUlMIGluIGFj
dHVhbF9yZXN1bHRzCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHN1ZmZpeGVzX2Zvcl9l
eHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zKToKKyAgICAgICAgIyB0eXBlOiAoU2V0W2ludF0pIC0+
IFNldFtzdHJdCiAgICAgICAgIHN1ZmZpeGVzID0gc2V0KCkKICAgICAgICAgaWYgSU1BR0UgaW4g
ZXhwZWN0YXRpb25zOgogICAgICAgICAgICAgc3VmZml4ZXMuYWRkKCdwbmcnKQpAQCAtOTIyLDE1
ICsxMDIzLDI1IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnMob2JqZWN0KToKICAgICAgICAgICAg
IHN1ZmZpeGVzLmFkZCgnd2F2JykKICAgICAgICAgcmV0dXJuIHNldChzdWZmaXhlcykKIAotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB0ZXN0cz1Ob25lLCBpbmNsdWRlX2dlbmVyaWM9VHJ1
ZSwgaW5jbHVkZV9vdmVycmlkZXM9VHJ1ZSwgZXhwZWN0YXRpb25zX3RvX2xpbnQ9Tm9uZSwgZm9y
Y2VfZXhwZWN0YXRpb25zX3Bhc3M9RmFsc2UsIGRldmljZV90eXBlPU5vbmUpOgorICAgIGRlZiBf
X2luaXRfXygKKyAgICAgICAgc2VsZiwKKyAgICAgICAgcG9ydCwgICMgdHlwZTogUG9ydAorICAg
ICAgICB0ZXN0cz1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtMaXN0W3N0cl1dCisgICAgICAgIGlu
Y2x1ZGVfZ2VuZXJpYz1UcnVlLCAgIyB0eXBlOiBib29sCisgICAgICAgIGluY2x1ZGVfb3ZlcnJp
ZGVzPVRydWUsICAjIHR5cGU6IGJvb2wKKyAgICAgICAgZXhwZWN0YXRpb25zX3RvX2xpbnQ9Tm9u
ZSwgICMgdHlwZTogT3B0aW9uYWxbRGljdFtzdHIsIHN0cl1dCisgICAgICAgIGZvcmNlX2V4cGVj
dGF0aW9uc19wYXNzPUZhbHNlLCAgIyB0eXBlOiBib29sCisgICAgICAgIGRldmljZV90eXBlPU5v
bmUsICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KKyAgICApOgorICAgICAgICAjIHR5cGU6ICguLi4p
IC0+IE5vbmUKICAgICAgICAgc2VsZi5fZnVsbF90ZXN0X2xpc3QgPSB0ZXN0cwotICAgICAgICBz
ZWxmLl90ZXN0X2NvbmZpZyA9IHBvcnQudGVzdF9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2Vs
Zi5fdGVzdF9jb25maWcgPSBwb3J0LnRlc3RfY29uZmlndXJhdGlvbigpICAjIHR5cGU6IFRlc3RD
b25maWd1cmF0aW9uCiAgICAgICAgIHNlbGYuX2lzX2xpbnRfbW9kZSA9IGV4cGVjdGF0aW9uc190
b19saW50IGlzIG5vdCBOb25lCiAgICAgICAgIHNlbGYuX21vZGVsID0gVGVzdEV4cGVjdGF0aW9u
c01vZGVsKHNlbGYuX3Nob3J0ZW5fZmlsZW5hbWUpCiAgICAgICAgIHNlbGYuX3BhcnNlciA9IFRl
c3RFeHBlY3RhdGlvblBhcnNlcihwb3J0LCB0ZXN0cywgc2VsZi5faXNfbGludF9tb2RlLCBzZWxm
Ll9zaG9ydGVuX2ZpbGVuYW1lKQogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAotICAgICAgICBz
ZWxmLl9za2lwcGVkX3Rlc3RzX3dhcm5pbmdzID0gW10KLSAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zID0gW10KKyAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0c193YXJuaW5ncyA9IFtdICAjIHR5
cGU6IExpc3RbVGVzdEV4cGVjdGF0aW9uV2FybmluZ10KKyAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zID0gW10gICMgdHlwZTogTGlzdFtUZXN0RXhwZWN0YXRpb25MaW5lXQogICAgICAgICBzZWxm
Ll9mb3JjZV9leHBlY3RhdGlvbnNfcGFzcyA9IGZvcmNlX2V4cGVjdGF0aW9uc19wYXNzCiAgICAg
ICAgIHNlbGYuX2RldmljZV90eXBlID0gZGV2aWNlX3R5cGUKICAgICAgICAgc2VsZi5faW5jbHVk
ZV9nZW5lcmljID0gaW5jbHVkZV9nZW5lcmljCkBAIC05MzgsNiArMTA0OSw3IEBAIGNsYXNzIFRl
c3RFeHBlY3RhdGlvbnMob2JqZWN0KToKICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX3RvX2xp
bnQgPSBleHBlY3RhdGlvbnNfdG9fbGludAogCiAgICAgZGVmIHJlYWRhYmxlX2ZpbGVuYW1lX2Fu
ZF9saW5lX251bWJlcihzZWxmLCBsaW5lKToKKyAgICAgICAgIyB0eXBlOiAoVGVzdEV4cGVjdGF0
aW9uTGluZSkgLT4gc3RyCiAgICAgICAgIGlmIGxpbmUubm90X2FwcGxpY2FibGVfdG9fY3VycmVu
dF9wbGF0Zm9ybToKICAgICAgICAgICAgIHJldHVybiAiKHNraXBwZWQgZm9yIHRoaXMgcGxhdGZv
cm0pIgogICAgICAgICBpZiBub3QgbGluZS5maWxlbmFtZToKQEAgLTk0Nyw2ICsxMDU5LDcgQEAg
Y2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICAgICByZXR1cm4gJ3t9Ont9Jy5m
b3JtYXQobGluZS5maWxlbmFtZSwgbGluZS5saW5lX251bWJlcikKIAogICAgIGRlZiBwYXJzZV9n
ZW5lcmljX2V4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAgICAgIyB0eXBlOiAoKSAtPiBOb25lCiAg
ICAgICAgIGlmIHNlbGYuX3BvcnQucGF0aF90b19nZW5lcmljX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGUoKSBpbiBzZWxmLl9leHBlY3RhdGlvbnNfZGljdDoKICAgICAgICAgICAgIGlmIHNlbGYuX2lu
Y2x1ZGVfZ2VuZXJpYzoKICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9wYXJz
ZXIucGFyc2UobGlzdChzZWxmLl9leHBlY3RhdGlvbnNfZGljdC5rZXlzKCkpW3NlbGYuX2V4cGVj
dGF0aW9uc19kaWN0X2luZGV4XSwgbGlzdChzZWxmLl9leHBlY3RhdGlvbnNfZGljdC52YWx1ZXMo
KSlbc2VsZi5fZXhwZWN0YXRpb25zX2RpY3RfaW5kZXhdKQpAQCAtOTU1LDYgKzEwNjgsNyBAQCBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnNfZGljdF9pbmRleCArPSAxCiAKICAgICBkZWYgcGFyc2VfZGVmYXVsdF9wb3J0X2V4cGVj
dGF0aW9ucyhzZWxmKToKKyAgICAgICAgIyB0eXBlOiAoKSAtPiBOb25lCiAgICAgICAgIGlmIGxl
bihzZWxmLl9leHBlY3RhdGlvbnNfZGljdCkgPiBzZWxmLl9leHBlY3RhdGlvbnNfZGljdF9pbmRl
eDoKICAgICAgICAgICAgIGV4cGVjdGF0aW9ucyA9IHNlbGYuX3BhcnNlci5wYXJzZShsaXN0KHNl
bGYuX2V4cGVjdGF0aW9uc19kaWN0LmtleXMoKSlbc2VsZi5fZXhwZWN0YXRpb25zX2RpY3RfaW5k
ZXhdLCBsaXN0KHNlbGYuX2V4cGVjdGF0aW9uc19kaWN0LnZhbHVlcygpKVtzZWxmLl9leHBlY3Rh
dGlvbnNfZGljdF9pbmRleF0pCiAgICAgICAgICAgICBzZWxmLl9hZGRfZXhwZWN0YXRpb25zKGV4
cGVjdGF0aW9ucykKQEAgLTk2Miw2ICsxMDc2LDcgQEAgY2xhc3MgVGVzdEV4cGVjdGF0aW9ucyhv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX2RpY3RfaW5kZXggKz0gMQog
CiAgICAgZGVmIHBhcnNlX292ZXJyaWRlX2V4cGVjdGF0aW9ucyhzZWxmKToKKyAgICAgICAgIyB0
eXBlOiAoKSAtPiBOb25lCiAgICAgICAgIHdoaWxlIGxlbihzZWxmLl9leHBlY3RhdGlvbnNfZGlj
dCkgPiBzZWxmLl9leHBlY3RhdGlvbnNfZGljdF9pbmRleCBhbmQgc2VsZi5faW5jbHVkZV9vdmVy
cmlkZXM6CiAgICAgICAgICAgICBleHBlY3RhdGlvbnMgPSBzZWxmLl9wYXJzZXIucGFyc2UobGlz
dChzZWxmLl9leHBlY3RhdGlvbnNfZGljdC5rZXlzKCkpW3NlbGYuX2V4cGVjdGF0aW9uc19kaWN0
X2luZGV4XSwgbGlzdChzZWxmLl9leHBlY3RhdGlvbnNfZGljdC52YWx1ZXMoKSlbc2VsZi5fZXhw
ZWN0YXRpb25zX2RpY3RfaW5kZXhdKQogICAgICAgICAgICAgc2VsZi5fYWRkX2V4cGVjdGF0aW9u
cyhleHBlY3RhdGlvbnMpCkBAIC05NjksNyArMTA4NCw4IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlv
bnMob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19kaWN0X2luZGV4ICs9
IDEKIAogICAgIGRlZiBwYXJzZV9hbGxfZXhwZWN0YXRpb25zKHNlbGYpOgotICAgICAgICBzZWxm
Ll9leHBlY3RhdGlvbnNfZGljdCA9IHNlbGYuX2V4cGVjdGF0aW9uc190b19saW50IG9yIHNlbGYu
X3BvcnQuZXhwZWN0YXRpb25zX2RpY3QoZGV2aWNlX3R5cGU9c2VsZi5fZGV2aWNlX3R5cGUpCisg
ICAgICAgICMgdHlwZTogKCkgLT4gTm9uZQorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfZGlj
dCA9IHNlbGYuX2V4cGVjdGF0aW9uc190b19saW50IG9yIHNlbGYuX3BvcnQuZXhwZWN0YXRpb25z
X2RpY3QoZGV2aWNlX3R5cGU9c2VsZi5fZGV2aWNlX3R5cGUpICAjIHR5cGU6IERpY3Rbc3RyLCBz
dHJdCiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19kaWN0X2luZGV4ID0gMAogCiAgICAgICAg
IHNlbGYuX2hhc193YXJuaW5ncyA9IEZhbHNlCkBAIC05ODcsMTIgKzExMDMsMTUgQEAgY2xhc3Mg
VGVzdEV4cGVjdGF0aW9ucyhvYmplY3QpOgogICAgICMgVE9ETyhvamFuKTogQWxsb3cgZm9yIHJl
bW92aW5nIHNraXBwZWQgdGVzdHMgd2hlbiBnZXR0aW5nIHRoZSBsaXN0IG9mCiAgICAgIyB0ZXN0
cyB0byBydW4sIGJ1dCBub3Qgd2hlbiBnZXR0aW5nIG1ldHJpY3MuCiAgICAgZGVmIG1vZGVsKHNl
bGYpOgorICAgICAgICAjIHR5cGU6ICgpIC0+IFRlc3RFeHBlY3RhdGlvbnNNb2RlbAogICAgICAg
ICByZXR1cm4gc2VsZi5fbW9kZWwKIAogICAgIGRlZiBnZXRfcmViYXNlbGluaW5nX2ZhaWx1cmVz
KHNlbGYpOgorICAgICAgICAjIHR5cGU6ICgpIC0+IFNldFtzdHJdCiAgICAgICAgIHJldHVybiBz
ZWxmLl9tb2RlbC5nZXRfdGVzdF9zZXQoUkVCQVNFTElORSkKIAogICAgIGRlZiBmaWx0ZXJlZF9l
eHBlY3RhdGlvbnNfZm9yX3Rlc3Qoc2VsZiwgdGVzdCwgcGl4ZWxfdGVzdHNfYXJlX2VuYWJsZWQs
IHdvcmxkX2xlYWtzX2FyZV9lbmFibGVkKToKKyAgICAgICAgIyB0eXBlOiAoc3RyLCBib29sLCBi
b29sKSAtPiBTZXRbaW50XQogICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gc2VsZi5fbW9kZWwu
Z2V0X2V4cGVjdGF0aW9uc19vcl9wYXNzKHRlc3QpCiAgICAgICAgIGlmIG5vdCBwaXhlbF90ZXN0
c19hcmVfZW5hYmxlZDoKICAgICAgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxmLnJlbW92
ZV9waXhlbF9mYWlsdXJlcyhleHBlY3RlZF9yZXN1bHRzKQpAQCAtMTAwMiw0OCArMTEyMSw2MiBA
QCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBleHBlY3Rl
ZF9yZXN1bHRzCiAKICAgICBkZWYgbWF0Y2hlc19hbl9leHBlY3RlZF9yZXN1bHQoc2VsZiwgdGVz
dCwgcmVzdWx0LCBleHBlY3RlZF9yZXN1bHRzKToKKyAgICAgICAgIyB0eXBlOiAoc3RyLCBpbnQs
IFNldFtpbnRdKSAtPiBib29sCiAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdF93YXNfZXhwZWN0
ZWQocmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9y
ZXN1bHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX3JlYmFz
ZWxpbmluZyh0ZXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
bW9kZWwuaGFzX21vZGlmaWVyKHRlc3QsIFNLSVApKQogCiAgICAgZGVmIGlzX3JlYmFzZWxpbmlu
ZyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIyB0eXBlOiAoc3RyKSAtPiBib29sCiAgICAgICAgIHJl
dHVybiBzZWxmLl9tb2RlbC5oYXNfbW9kaWZpZXIodGVzdCwgUkVCQVNFTElORSkKIAogICAgIGRl
ZiBfc2hvcnRlbl9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICMgdHlwZTogKHN0
cikgLT4gc3RyCiAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5fcG9ydC5wYXRo
X2Zyb21fd2Via2l0X2Jhc2UoKSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5ob3N0
LmZpbGVzeXN0ZW0ucmVscGF0aChmaWxlbmFtZSwgc2VsZi5fcG9ydC5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoKSkKKyAgICAgICAgICAgIHRyaW1tZWQgPSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3Rl
bS5yZWxwYXRoKGZpbGVuYW1lLCBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgpKQor
ICAgICAgICAgICAgaWYgTVlQWToKKyAgICAgICAgICAgICAgICAjIHRoaXMgZG9lc24ndCBhY3R1
YWxseSBob2xkIG9uIFB5MiAoaXQncyBhY3R1YWxseSB1bmljb2RlKQorICAgICAgICAgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKHRyaW1tZWQsIHN0cikKKyAgICAgICAgICAgIHJldHVybiB0cmlt
bWVkCiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogCiAgICAgZGVmIF9yZXBvcnRfd2FybmluZ3Mo
c2VsZik6CisgICAgICAgICMgdHlwZTogKCkgLT4gTm9uZQogICAgICAgICB3YXJuaW5ncyA9IFtd
CiAgICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBzZWxmLl9leHBlY3RhdGlvbnM6CisgICAgICAg
ICAgICBhc3NlcnQgZXhwZWN0YXRpb24uZmlsZW5hbWUgaXMgbm90IE5vbmUKKyAgICAgICAgICAg
IGFzc2VydCBleHBlY3RhdGlvbi5saW5lX251bWJlciBpcyBub3QgTm9uZQorICAgICAgICAgICAg
YXNzZXJ0IGV4cGVjdGF0aW9uLm9yaWdpbmFsX3N0cmluZyBpcyBub3QgTm9uZQogICAgICAgICAg
ICAgZm9yIHdhcm5pbmcgaW4gZXhwZWN0YXRpb24ud2FybmluZ3M6Ci0gICAgICAgICAgICAgICAg
d2FybmluZyA9IFRlc3RFeHBlY3RhdGlvbldhcm5pbmcoCisgICAgICAgICAgICAgICAgd2Fybmlu
Z19vYmogPSBUZXN0RXhwZWN0YXRpb25XYXJuaW5nKAogICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9zaG9ydGVuX2ZpbGVuYW1lKGV4cGVjdGF0aW9uLmZpbGVuYW1lKSwgZXhwZWN0YXRpb24ubGlu
ZV9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uLm9yaWdpbmFsX3N0cmlu
Zywgd2FybmluZywgZXhwZWN0YXRpb24ubmFtZSBpZiBleHBlY3RhdGlvbi5leHBlY3RhdGlvbnMg
ZWxzZSBOb25lKQotICAgICAgICAgICAgICAgIHdhcm5pbmcucmVsYXRlZF9maWxlcyA9IGV4cGVj
dGF0aW9uLnJlbGF0ZWRfZmlsZXMKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQod2Fy
bmluZykKKyAgICAgICAgICAgICAgICB3YXJuaW5nX29iai5yZWxhdGVkX2ZpbGVzID0gZXhwZWN0
YXRpb24ucmVsYXRlZF9maWxlcworICAgICAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCh3YXJu
aW5nX29iaikKIAogICAgICAgICBpZiB3YXJuaW5nczoKICAgICAgICAgICAgIHNlbGYuX2hhc193
YXJuaW5ncyA9IFRydWUKICAgICAgICAgICAgIGlmIHNlbGYuX2lzX2xpbnRfbW9kZToKICAgICAg
ICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKHdhcm5pbmdzKQogICAgICAgICAgICAgX2xvZy53
YXJuaW5nKCctLWxpbnQtdGVzdC1maWxlcyB3YXJuaW5nczonKQotICAgICAgICAgICAgZm9yIHdh
cm5pbmcgaW4gd2FybmluZ3M6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKHdhcm5pbmcp
CisgICAgICAgICAgICBmb3Igd2FybmluZ19vYmogaW4gd2FybmluZ3M6CisgICAgICAgICAgICAg
ICAgX2xvZy53YXJuaW5nKHdhcm5pbmdfb2JqKQogICAgICAgICAgICAgX2xvZy53YXJuaW5nKCcn
KQogCiAgICAgZGVmIF9wcm9jZXNzX3Rlc3RzX3dpdGhvdXRfZXhwZWN0YXRpb25zKHNlbGYpOgor
ICAgICAgICAjIHR5cGU6ICgpIC0+IE5vbmUKICAgICAgICAgaWYgc2VsZi5fZnVsbF90ZXN0X2xp
c3Q6CiAgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9mdWxsX3Rlc3RfbGlzdDoKICAgICAg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5fbW9kZWwuaGFzX3Rlc3QodGVzdCk6CiAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX21vZGVsLmFkZF9leHBlY3RhdGlvbl9saW5lKFRlc3RFeHBlY3RhdGlv
bkxpbmUuY3JlYXRlX3Bhc3NpbmdfZXhwZWN0YXRpb24odGVzdCkpCiAKICAgICBkZWYgaGFzX3dh
cm5pbmdzKHNlbGYpOgorICAgICAgICAjIHR5cGU6ICgpIC0+IGJvb2wKICAgICAgICAgcmV0dXJu
IHNlbGYuX2hhc193YXJuaW5ncwogCiAgICAgZGVmIHJlbW92ZV9jb25maWd1cmF0aW9uX2Zyb21f
dGVzdChzZWxmLCB0ZXN0LCB0ZXN0X2NvbmZpZ3VyYXRpb24pOgorICAgICAgICAjIHR5cGU6IChz
dHIsIFRlc3RDb25maWd1cmF0aW9uKSAtPiBzdHIKICAgICAgICAgZXhwZWN0YXRpb25zX3RvX3Jl
bW92ZSA9IFtdCiAgICAgICAgIG1vZGlmaWVkX2V4cGVjdGF0aW9ucyA9IFtdCiAKQEAgLTEwNjcs
OCArMTIwMCwxMCBAQCBjbGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgIHJl
dHVybiBzZWxmLmxpc3RfdG9fc3RyaW5nKHNlbGYuX2V4cGVjdGF0aW9ucywgc2VsZi5fcGFyc2Vy
Ll90ZXN0X2NvbmZpZ3VyYXRpb25fY29udmVydGVyLCBtb2RpZmllZF9leHBlY3RhdGlvbnMpCiAK
ICAgICBkZWYgcmVtb3ZlX3JlYmFzZWxpbmVkX3Rlc3RzKHNlbGYsIGV4Y2VwdF90aGVzZV90ZXN0
cywgZmlsZW5hbWUpOgorICAgICAgICAjIHR5cGU6IChMaXN0W3N0cl0sIHN0cikgLT4gc3RyCiAg
ICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBleHBlY3RhdGlvbnMgaW4gdGhlIGZpbGUg
d2l0aCB0aGUgdGVzdHMgcmVtb3ZlZC4iIiIKICAgICAgICAgZGVmIHdpdGhvdXRfcmViYXNlbGlu
ZV9tb2RpZmllcihleHBlY3RhdGlvbik6CisgICAgICAgICAgICAjIHR5cGU6IChUZXN0RXhwZWN0
YXRpb25MaW5lKSAtPiBib29sCiAgICAgICAgICAgICByZXR1cm4gKGV4cGVjdGF0aW9uLmZpbGVu
YW1lID09IGZpbGVuYW1lIGFuZAogICAgICAgICAgICAgICAgICAgICBub3QgKG5vdCBleHBlY3Rh
dGlvbi5pc19pbnZhbGlkKCkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0YXRp
b24ubmFtZSBpbiBleGNlcHRfdGhlc2VfdGVzdHMgYW5kCkBAIC0xMDc3LDYgKzEyMTIsNyBAQCBj
bGFzcyBUZXN0RXhwZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLmxpc3Rf
dG9fc3RyaW5nKGZpbHRlcih3aXRob3V0X3JlYmFzZWxpbmVfbW9kaWZpZXIsIHNlbGYuX2V4cGVj
dGF0aW9ucyksIHJlY29uc3RpdHV0ZV9vbmx5X3RoZXNlPVtdKQogCiAgICAgZGVmIF9hZGRfZXhw
ZWN0YXRpb25zKHNlbGYsIGV4cGVjdGF0aW9uX2xpc3QpOgorICAgICAgICAjIHR5cGU6IChMaXN0
W1Rlc3RFeHBlY3RhdGlvbkxpbmVdKSAtPiBOb25lCiAgICAgICAgIGZvciBleHBlY3RhdGlvbl9s
aW5lIGluIGV4cGVjdGF0aW9uX2xpc3Q6CiAgICAgICAgICAgICBpZiBzZWxmLl9mb3JjZV9leHBl
Y3RhdGlvbnNfcGFzczoKICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbl9saW5lLmV4cGVjdGF0
aW9ucyA9IFsnUEFTUyddCkBAIC0xMDg5LDEwICsxMjI1LDEzIEBAIGNsYXNzIFRlc3RFeHBlY3Rh
dGlvbnMob2JqZWN0KToKICAgICAgICAgICAgICAgICBzZWxmLl9tb2RlbC5hZGRfZXhwZWN0YXRp
b25fbGluZShleHBlY3RhdGlvbl9saW5lKQogCiAgICAgZGVmIGFkZF9za2lwcGVkX3Rlc3RzKHNl
bGYsIHRlc3RzX3RvX3NraXApOgorICAgICAgICAjIHR5cGU6IChTZXRbc3RyXSkgLT4gTm9uZQog
ICAgICAgICBpZiBub3QgdGVzdHNfdG9fc2tpcDoKICAgICAgICAgICAgIHJldHVybgogICAgICAg
ICBmb3IgdGVzdCBpbiBzZWxmLl9leHBlY3RhdGlvbnM6CiAgICAgICAgICAgICBpZiB0ZXN0Lm5h
bWUgYW5kIHRlc3QubmFtZSBpbiB0ZXN0c190b19za2lwOgorICAgICAgICAgICAgICAgIGFzc2Vy
dCB0ZXN0LmZpbGVuYW1lIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgYXNzZXJ0IHRlc3Qu
bGluZV9udW1iZXIgaXMgbm90IE5vbmUKICAgICAgICAgICAgICAgICB0ZXN0Lndhcm5pbmdzLmFw
cGVuZCgnJXM6JWQgJXMgaXMgYWxzbyBpbiBhIFNraXBwZWQgZmlsZS4nICUgKHRlc3QuZmlsZW5h
bWUsIHRlc3QubGluZV9udW1iZXIsIHRlc3QubmFtZSkpCiAKICAgICAgICAgZm9yIHRlc3RfbmFt
ZSBpbiB0ZXN0c190b19za2lwOgpAQCAtMTEwMCwxNSArMTIzOSwxOCBAQCBjbGFzcyBUZXN0RXhw
ZWN0YXRpb25zKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9tb2RlbC5hZGRfZXhwZWN0YXRp
b25fbGluZShleHBlY3RhdGlvbl9saW5lLCBpbl9za2lwcGVkPVRydWUpCiAKICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGxpc3RfdG9fc3RyaW5nKGV4cGVjdGF0aW9uX2xpbmVzLCB0ZXN0X2Nv
bmZpZ3VyYXRpb25fY29udmVydGVyPU5vbmUsIHJlY29uc3RpdHV0ZV9vbmx5X3RoZXNlPU5vbmUp
OgorICAgIGRlZiBsaXN0X3RvX3N0cmluZygKKyAgICAgICAgZXhwZWN0YXRpb25fbGluZXMsICAj
IHR5cGU6IEl0ZXJhYmxlW1Rlc3RFeHBlY3RhdGlvbkxpbmVdCisgICAgICAgIHRlc3RfY29uZmln
dXJhdGlvbl9jb252ZXJ0ZXI9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbVGVzdENvbmZpZ3VyYXRp
b25Db252ZXJ0ZXJdCisgICAgICAgIHJlY29uc3RpdHV0ZV9vbmx5X3RoZXNlPU5vbmUsICAjIHR5
cGU6IE9wdGlvbmFsW0xpc3RbVGVzdEV4cGVjdGF0aW9uTGluZV1dCisgICAgKToKKyAgICAgICAg
IyB0eXBlOiAoLi4uKSAtPiBzdHIKICAgICAgICAgZGVmIHNlcmlhbGl6ZShleHBlY3RhdGlvbl9s
aW5lKToKKyAgICAgICAgICAgICMgdHlwZTogKFRlc3RFeHBlY3RhdGlvbkxpbmUpIC0+IE9wdGlv
bmFsW3N0cl0KICAgICAgICAgICAgICMgSWYgcmVjb25zdGl0dXRlX29ubHlfdGhlc2UgaXMgYW4g
ZW1wdHkgbGlzdCwgd2Ugd2FudCB0byByZXR1cm4gb3JpZ2luYWxfc3RyaW5nLgogICAgICAgICAg
ICAgIyBTbyB3ZSBuZWVkIHRvIGNvbXBhcmUgcmVjb25zdGl0dXRlX29ubHlfdGhlc2UgdG8gTm9u
ZSwgbm90IGp1c3QgY2hlY2sgaWYgaXQncyBmYWxzZXkuCiAgICAgICAgICAgICBpZiByZWNvbnN0
aXR1dGVfb25seV90aGVzZSBpcyBOb25lIG9yIGV4cGVjdGF0aW9uX2xpbmUgaW4gcmVjb25zdGl0
dXRlX29ubHlfdGhlc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uX2xpbmUu
dG9fc3RyaW5nKHRlc3RfY29uZmlndXJhdGlvbl9jb252ZXJ0ZXIpCiAgICAgICAgICAgICByZXR1
cm4gZXhwZWN0YXRpb25fbGluZS5vcmlnaW5hbF9zdHJpbmcKIAotICAgICAgICBkZWYgbm9uZXNf
b3V0KGV4cGVjdGF0aW9uX2xpbmUpOgotICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9uX2xp
bmUgaXMgbm90IE5vbmUKLQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGZpbHRlcihub25lc19v
dXQsIG1hcChzZXJpYWxpemUsIGV4cGVjdGF0aW9uX2xpbmVzKSkpCisgICAgICAgIHJldHVybiAi
XG4iLmpvaW4obGluZSBmb3IgbGluZSBpbiBtYXAoc2VyaWFsaXplLCBleHBlY3RhdGlvbl9saW5l
cykgaWYgbGluZSBpcyBub3QgTm9uZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>