<?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>78989</bug_id>
          
          <creation_ts>2012-02-18 21:36:00 -0800</creation_ts>
          <short_desc>Move more logic from handler classes to model classes and add unit tests</short_desc>
          <delta_ts>2012-02-20 16:25:47 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77037</blocked>
    
    <blocked>79018</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559865</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-18 21:36:00 -0800</bug_when>
    <thetext>Move more logic from handler classes to model classes and add unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559866</commentid>
    <comment_count>1</comment_count>
      <attachid>127727</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-18 21:41:38 -0800</bug_when>
    <thetext>Created attachment 127727
Cleanup and add more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559867</commentid>
    <comment_count>2</comment_count>
      <attachid>127728</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-18 21:48:20 -0800</bug_when>
    <thetext>Created attachment 127728
Added one more line of refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559964</commentid>
    <comment_count>3</comment_count>
      <attachid>127728</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-19 16:13:50 -0800</bug_when>
    <thetext>Comment on attachment 127728
Added one more line of refactoring

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

&gt; Websites/webkit-perf.appspot.com/create_handler.py:85
&gt;      def _create_branch(self, key, name):

Looks to be able to @classmethod?

&gt; Websites/webkit-perf.appspot.com/create_handler.py:90
&gt;      def _create_platform(self, key, name):

ditto.

&gt; Websites/webkit-perf.appspot.com/models.py:186
&gt; +    @staticmethod

You can use @classmethod, then TestResult.all() can be cls.get_or_insert().

&gt; Websites/webkit-perf.appspot.com/models.py:203
&gt; +    @staticmethod

Ditto for @classmethod.

&gt; Websites/webkit-perf.appspot.com/runs_handler.py:64
&gt;          test = model_from_numeric_id(test_id, Test)

The triple (branch, platorm,test) could form a class. It can be done in separate change though.

&gt; Websites/webkit-perf.appspot.com/runs_handler.py:74
&gt; +        for build, result in TestResult.generate_runs(branch, platform, test.name):

If &quot;runs&quot; were a class, We can write Runs.to_json() and test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560097</commentid>
    <comment_count>4</comment_count>
      <attachid>127728</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 01:15:12 -0800</bug_when>
    <thetext>Comment on attachment 127728
Added one more line of refactoring

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

&gt;&gt; Websites/webkit-perf.appspot.com/create_handler.py:85
&gt;&gt;      def _create_branch(self, key, name):
&gt; 
&gt; Looks to be able to @classmethod?

They could be. I don&apos;t feel the need since these functions are called at exactly one place.
Also, I&apos;m planning to rewrite all of these admin. handlers since they&apos;re way too primitive and limited.
(They are inherited from my first prototype I write in less than a day...)

&gt;&gt; Websites/webkit-perf.appspot.com/create_handler.py:90
&gt;&gt;      def _create_platform(self, key, name):
&gt; 
&gt; ditto.

Ditto.

&gt;&gt; Websites/webkit-perf.appspot.com/models.py:186
&gt;&gt; +    @staticmethod
&gt; 
&gt; You can use @classmethod, then TestResult.all() can be cls.get_or_insert().

Done.

&gt;&gt; Websites/webkit-perf.appspot.com/models.py:203
&gt;&gt; +    @staticmethod
&gt; 
&gt; Ditto for @classmethod.

I didn&apos;t make this change since this method uses both Build and TestResult, and I think it&apos;s much more confusing to use cls for the latter.

&gt;&gt; Websites/webkit-perf.appspot.com/runs_handler.py:74
&gt;&gt; +        for build, result in TestResult.generate_runs(branch, platform, test.name):
&gt; 
&gt; If &quot;runs&quot; were a class, We can write Runs.to_json() and test it.

Right. But that should probably be done in a separate patch (I&apos;ve tried but the diff becomes unintelligible) since manifest and dashboard JSON responses should also have their own classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560099</commentid>
    <comment_count>5</comment_count>
      <attachid>127779</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 01:17:29 -0800</bug_when>
    <thetext>Created attachment 127779
Fixed per morrita&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560425</commentid>
    <comment_count>6</comment_count>
      <attachid>127779</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-20 15:40:08 -0800</bug_when>
    <thetext>Comment on attachment 127779
Fixed per morrita&apos;s comment

BTW, Why did you change the python27 to python? I heard that python27 is preferable option if possible because of
performance perspective since it supports multi-threaded handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560439</commentid>
    <comment_count>7</comment_count>
      <attachid>127779</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 16:07:57 -0800</bug_when>
    <thetext>Comment on attachment 127779
Fixed per morrita&apos;s comment

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

&gt; Websites/webkit-perf.appspot.com/app.yaml:3
&gt; -runtime: python27
&gt; +runtime: python

Oh oops, this change to be reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560449</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 16:25:33 -0800</bug_when>
    <thetext>Committed r108270: &lt;http://trac.webkit.org/changeset/108270&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560450</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-20 16:25:47 -0800</bug_when>
    <thetext>Thanks for the reviews!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127727</attachid>
            <date>2012-02-18 21:41:38 -0800</date>
            <delta_ts>2012-02-18 21:48:16 -0800</delta_ts>
            <desc>Cleanup and add more tests</desc>
            <filename>bug-78989-20120218214137.patch</filename>
            <type>text/plain</type>
            <size>30956</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwODE4
MykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAy
LTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgbW9y
ZSBsb2dpYyBmcm9tIGhhbmRsZXIgY2xhc3NlcyB0byBtb2RlbCBjbGFzc2VzIGFuZCBhZGQgdW5p
dCB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHRyYWN0ZWQgdmFyaW91cyBmdW5jdGlvbnMgZnJvbSBDcmVhdGVIYW5kbGVyLCBSZXBvcnRIYW5s
ZGVyLCBhbmQgUnVuc0hhbmxkZXIgdG8gbW9kZWwgY2xhc3NlcworICAgICAgICBpbiBvcmRlciB0
byB1bml0LXRlc3QgdGhlbSwgYWRkZWQgRGF0YVN0b3JlVGVzdHNCYXNlIHRvIHJlZHVjZSB0aGUg
Y29kZSBkdXBsaWNhdGlvbiBpbiB0ZXN0cywKKyAgICAgICAgYW5kIGFkZGVkIGEgd2hvbGUgYnVu
Y2ggb2YgdW5pdCB0ZXN0cyBpbiBtb2RlbHNfdW5pdHRlc3QucHkuCisKKyAgICAgICAgKiBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jcmVhdGVfaGFuZGxlci5weToKKyAgICAgICAg
KENyZWF0ZUhhbmRsZXIuX2NyZWF0ZV9icmFuY2gpOgorICAgICAgICAoQ3JlYXRlSGFuZGxlci5f
Y3JlYXRlX3BsYXRmb3JtKToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9tb2RlbHMucHk6CisgICAgICAgIChfY3JlYXRlX2lmX3Bvc3NpYmxlKToKKyAgICAgICAg
KF9jcmVhdGVfaWZfcG9zc2libGUuZXhlY3V0ZSk6CisgICAgICAgIChCcmFuY2gpOgorICAgICAg
ICAoQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSk6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAg
ICAgIChQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGQpOgorICAg
ICAgICAoQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xvZyk6CisgICAgICAgIChUZXN0KToKKyAg
ICAgICAgKFRlc3QudXBkYXRlX29yX2luc2VydCk6CisgICAgICAgIChUZXN0LnVwZGF0ZV9vcl9p
bnNlcnQuZXhlY3V0ZSk6CisgICAgICAgIChUZXN0UmVzdWx0KToKKyAgICAgICAgKFRlc3RSZXN1
bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKToKKyAgICAgICAgKFRlc3RSZXN1bHQu
Z2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uLl9mbG9hdF9vcl9ub25lKToKKyAgICAgICAg
KFRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVucyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRGF0YVN0b3JlVGVz
dHNCYXNlKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRUaGVyZUlzTm9JbnN0
YW5jZU9mKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRPbmx5SW5zdGFuY2Up
OgorICAgICAgICAoRGF0YVN0b3JlVGVzdHNCYXNlLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCk6
CisgICAgICAgIChIZWxwZXJUZXN0cyk6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X2NyZWF0
ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKToKKyAgICAgICAgKEhlbHBl
clRlc3RzLnRlc3RfZmFpbGluZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmlj
X2lkX2hvbGRlcik6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X3JhaXNpbmdfaW5fY3JlYXRl
X2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIpOgorICAgICAgICAoSGVscGVy
VGVzdHMudGVzdF9kZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcik6CisgICAgICAg
IChCcmFuY2hUZXN0cyk6CisgICAgICAgIChCcmFuY2hUZXN0cy50ZXN0X2NyZWF0ZV9pZl9wb3Nz
aWJsZSk6CisgICAgICAgIChQbGF0Zm9ybVRlc3RzKToKKyAgICAgICAgKFBsYXRmb3JtVGVzdHMu
dGVzdF9jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGRlclRlc3RzKToKKyAgICAg
ICAgKF9jcmVhdGVfc29tZV9idWlsZGVyKToKKyAgICAgICAgKEJ1aWxkVGVzdHMpOgorICAgICAg
ICAoQnVpbGRUZXN0cy50ZXN0X2dldF9vcl9pbnNlcnRfZnJvbV9sb2cpOgorICAgICAgICAoVGVz
dE1vZGVsVGVzdHMpOgorICAgICAgICAoVGVzdE1vZGVsVGVzdHMudGVzdF91cGRhdGVfb3JfaW5z
ZXJ0KToKKyAgICAgICAgKFRlc3RNb2RlbFRlc3RzLnRlc3RfdXBkYXRlX29yX2luc2VydF90b191
cGRhdGUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzKToKKyAgICAgICAgKFRlc3RSZXN1bHRU
ZXN0cy5fY3JlYXRlX2J1aWxkKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy50ZXN0X2dldF9v
cl9pbnNlcnRfdmFsdWUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2V0X29yX2lu
c2VydF9zdGF0X3ZhbHVlKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy5fY3JlYXRlX3Jlc3Vs
dHMpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2VuZXJhdGVfcnVucyk6CisgICAg
ICAgIChSZXBvcnRMb2dUZXN0cyk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X2JyYW5j
aCk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X3BsYXRmb3JtKToKKyAgICAgICAgKFBl
cnNpc3RlbnRDYWNoZVRlc3RzKToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnNldFVw
KToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnRlc3Rfc2V0KToKKyAgICAgICAgKiBX
ZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5
OgorICAgICAgICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIucG9zdCk6CisgICAgICAgICogV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5OgorICAgICAgICAoUnVu
c0hhbmRsZXIuZ2V0KToKKyAgICAgICAgKFJ1bnNIYW5kbGVyLnBvc3QpOgorCiAyMDEyLTAyLTE4
ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3
eF0gRXhjbHVkZSBhIGNvdXBsZSB1bnVzZWQgYmluZGluZ3MgZmlsZXMgZnJvbSB0aGUgYnVpbGQK
SW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NyZWF0ZV9oYW5kbGVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NyZWF0ZV9o
YW5kbGVyLnB5CShyZXZpc2lvbiAxMDgwOTQpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9jcmVhdGVfaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtODUsMzMgKzg1LDEw
IEBAIGNsYXNzIENyZWF0ZUhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGwKICAgICBkZWYgX2Ny
ZWF0ZV9icmFuY2goc2VsZiwga2V5LCBuYW1lKToKICAgICAgICAgaWYgbm90IGtleSBvciBub3Qg
bmFtZToKICAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCBrZXkgb3IgbmFtZScKLQotICAgICAg
ICBlcnJvciA9IFtOb25lXQotCi0gICAgICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAg
IGlmIEJyYW5jaC5nZXRfYnlfa2V5X25hbWUoa2V5KToKLSAgICAgICAgICAgICAgICBlcnJvclsw
XSA9ICdCcmFuY2ggIiVzIiBhbHJlYWR5IGV4aXN0cycgJSBrZXkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4KLSAgICAgICAgICAgIGJyYW5jaCA9IEJyYW5jaChpZD1pZCwgbmFtZT1uYW1lLCBrZXlf
bmFtZT1rZXkpCi0gICAgICAgICAgICBicmFuY2gucHV0KCkKLSAgICAgICAgICAgIHJldHVybiBi
cmFuY2gKLQotICAgICAgICBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hv
bGRlcihleGVjdXRlKQotICAgICAgICByZXR1cm4gZXJyb3JbMF0KKyAgICAgICAgcmV0dXJuIE5v
bmUgaWYgQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZShrZXksIG5hbWUpIGVsc2UgJ0JyYW5jaCAi
JXMiIGFscmVhZHkgZXhpc3RzJyAlIGtleQogCiAgICAgZGVmIF9jcmVhdGVfcGxhdGZvcm0oc2Vs
Ziwga2V5LCBuYW1lKToKICAgICAgICAgaWYgbm90IGtleSBvciBub3QgbmFtZToKICAgICAgICAg
ICAgIHJldHVybiAnSW52YWxpZCBrZXkgbmFtZScKIAotICAgICAgICBlcnJvciA9IFtOb25lXQot
Ci0gICAgICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAgIGlmIFBsYXRmb3JtLmdldF9i
eV9rZXlfbmFtZShrZXkpOgotICAgICAgICAgICAgICAgIGVycm9yWzBdID0gJ1BsYXRmb3JtICIl
cyIgYWxyZWFkeSBleGlzdHMnICUga2V5Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtKGlkPWlkLCBuYW1lPW5hbWUsIGtleV9uYW1lPWtleSkK
LSAgICAgICAgICAgIHBsYXRmb3JtLnB1dCgpCi0gICAgICAgICAgICByZXR1cm4gcGxhdGZvcm0K
LQotICAgICAgICBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihl
eGVjdXRlKQotICAgICAgICByZXR1cm4gZXJyb3JbMF0KKyAgICAgICAgcmV0dXJuIE5vbmUgaWYg
UGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFtZSkgZWxzZSAnUGxhdGZvcm0gIiVz
IiBhbHJlYWR5IGV4aXN0cycgJSBrZXkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL21vZGVscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9tb2RlbHMucHkJKHJldmlzaW9uIDEwODA5NCkKKysrIFdlYnNpdGVzL3dlYmtpdC1w
ZXJmLmFwcHNwb3QuY29tL21vZGVscy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBpbXBvcnQgcmUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0IGltcG9ydCBkYgogZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQg
bWVtY2FjaGUKK2Zyb20gdGltZSBpbXBvcnQgbWt0aW1lCiAKIAogY2xhc3MgTnVtZXJpY0lkSG9s
ZGVyKGRiLk1vZGVsKToKQEAgLTY4LDE1ICs2OSwzNSBAQCBkZWYgbW9kZWxfZnJvbV9udW1lcmlj
X2lkKGlkLCBleHBlY3RlZF9rCiAgICAgcmV0dXJuIGlkX2hvbGRlci5vd25lciBpZiBpZF9ob2xk
ZXIgYW5kIGlkX2hvbGRlci5vd25lciBhbmQgaXNpbnN0YW5jZShpZF9ob2xkZXIub3duZXIsIGV4
cGVjdGVkX2tpbmQpIGVsc2UgTm9uZQogCiAKK2RlZiBfY3JlYXRlX2lmX3Bvc3NpYmxlKG1vZGVs
LCBrZXksIG5hbWUpOgorCisgICAgZGVmIGV4ZWN1dGUoaWQpOgorICAgICAgICBpZiBtb2RlbC5n
ZXRfYnlfa2V5X25hbWUoa2V5KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGJy
YW5jaCA9IG1vZGVsKGlkPWlkLCBuYW1lPW5hbWUsIGtleV9uYW1lPWtleSkKKyAgICAgICAgYnJh
bmNoLnB1dCgpCisgICAgICAgIHJldHVybiBicmFuY2gKKworICAgIHJldHVybiBjcmVhdGVfaW5f
dHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKQorCisKIGNsYXNzIEJy
YW5jaChkYi5Nb2RlbCk6CiAgICAgaWQgPSBkYi5JbnRlZ2VyUHJvcGVydHkocmVxdWlyZWQ9VHJ1
ZSkKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKIAorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFtZSk6CisgICAg
ICAgIHJldHVybiBfY3JlYXRlX2lmX3Bvc3NpYmxlKEJyYW5jaCwga2V5LCBuYW1lKQorCiAKIGNs
YXNzIFBsYXRmb3JtKGRiLk1vZGVsKToKICAgICBpZCA9IGRiLkludGVnZXJQcm9wZXJ0eShyZXF1
aXJlZD1UcnVlKQogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQog
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfaWZfcG9zc2libGUoa2V5LCBuYW1l
KToKKyAgICAgICAgcmV0dXJuIF9jcmVhdGVfaWZfcG9zc2libGUoUGxhdGZvcm0sIGtleSwgbmFt
ZSkKKwogCiBjbGFzcyBCdWlsZGVyKGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIuU3RyaW5nUHJv
cGVydHkocmVxdWlyZWQ9VHJ1ZSkKQEAgLTEwNyw2ICsxMjgsMTUgQEAgY2xhc3MgQnVpbGQoZGIu
TW9kZWwpOgogICAgIGNocm9taXVtUmV2aXNpb24gPSBkYi5JbnRlZ2VyUHJvcGVydHkoKQogICAg
IHRpbWVzdGFtcCA9IGRiLkRhdGVUaW1lUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKIAorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X29yX2luc2VydF9mcm9tX2xvZyhsb2cpOgorICAgICAg
ICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQorICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIubmFt
ZSArICc6JyArIHN0cihpbnQobWt0aW1lKGxvZy50aW1lc3RhbXAoKS50aW1ldHVwbGUoKSkpKQor
CisgICAgICAgIHJldHVybiBCdWlsZC5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBicmFuY2g9bG9n
LmJyYW5jaCgpLCBwbGF0Zm9ybT1sb2cucGxhdGZvcm0oKSwgYnVpbGRlcj1idWlsZGVyLAorICAg
ICAgICAgICAgYnVpbGROdW1iZXI9bG9nLmJ1aWxkX251bWJlcigpLCB0aW1lc3RhbXA9bG9nLnRp
bWVzdGFtcCgpLAorICAgICAgICAgICAgcmV2aXNpb249bG9nLndlYmtpdF9yZXZpc2lvbigpLCBj
aHJvbWl1bVJldmlzaW9uPWxvZy5jaHJvbWl1bV9yZXZpc2lvbigpKQorCiAKICMgVXNlZCB0byBn
ZW5lcmF0ZSBUZXN0TWFwIGluIHRoZSBtYW5pZmVzdCBlZmZpY2llbnRseQogY2xhc3MgVGVzdChk
Yi5Nb2RlbCk6CkBAIC0xMTksNiArMTQ5LDI2IEBAIGNsYXNzIFRlc3QoZGIuTW9kZWwpOgogICAg
IGRlZiBjYWNoZV9rZXkodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCk6CiAgICAgICAg
IHJldHVybiAncnVuczolZCwlZCwlZCcgJSAodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9p
ZCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdXBkYXRlX29yX2luc2VydCh0ZXN0X25h
bWUsIGJyYW5jaCwgcGxhdGZvcm0pOgorICAgICAgICBleGlzdGluZ190ZXN0ID0gW05vbmVdCisK
KyAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgorICAgICAgICAgICAgdGVzdCA9IFRlc3QuZ2V0X2J5
X2tleV9uYW1lKHRlc3RfbmFtZSkKKyAgICAgICAgICAgIGlmIHRlc3Q6CisgICAgICAgICAgICAg
ICAgaWYgYnJhbmNoLmtleSgpIG5vdCBpbiB0ZXN0LmJyYW5jaGVzOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChicmFuY2gua2V5KCkpCisgICAgICAgICAgICAgICAg
aWYgcGxhdGZvcm0ua2V5KCkgbm90IGluIHRlc3QucGxhdGZvcm1zOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0LnBsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0ua2V5KCkpCisgICAgICAgICAgICAg
ICAgZXhpc3RpbmdfdGVzdFswXSA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1pZCwgbmFtZT10ZXN0X25hbWUsIGtleV9uYW1l
PXRlc3RfbmFtZSwgYnJhbmNoZXM9W2JyYW5jaC5rZXkoKV0sIHBsYXRmb3Jtcz1bcGxhdGZvcm0u
a2V5KCldKQorICAgICAgICAgICAgdGVzdC5wdXQoKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QK
KworICAgICAgICByZXR1cm4gY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9o
b2xkZXIoZXhlY3V0ZSkgb3IgZXhpc3RpbmdfdGVzdFswXQorCiAKIGNsYXNzIFRlc3RSZXN1bHQo
ZGIuTW9kZWwpOgogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQpA
QCAtMTMzLDYgKzE4MywzNyBAQCBjbGFzcyBUZXN0UmVzdWx0KGRiLk1vZGVsKToKICAgICBkZWYg
a2V5X25hbWUoYnVpbGQsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVybiBidWlsZC5rZXkoKS5u
YW1lKCkgKyAnOicgKyB0ZXN0X25hbWUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0
X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKHRlc3RfbmFtZSwgYnVpbGQsIHJlc3VsdCk6Cisg
ICAgICAgIGtleV9uYW1lID0gVGVzdFJlc3VsdC5rZXlfbmFtZShidWlsZCwgdGVzdF9uYW1lKQor
CisgICAgICAgIGRlZiBfZmxvYXRfb3Jfbm9uZShkaWN0aW9uYXJ5LCBrZXkpOgorICAgICAgICAg
ICAgdmFsdWUgPSBkaWN0aW9uYXJ5LmdldChrZXkpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmxvYXQodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCk6CisgICAgICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFt
ZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdCkpCisKKyAgICAgICAgcmV0dXJuIFRl
c3RSZXN1bHQuZ2V0X29yX2luc2VydChrZXlfbmFtZSwgbmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1
aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHRbJ2F2ZyddKSwKKyAgICAgICAgICAgIHZhbHVlTWVkaWFu
PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21lZGlhbicpLCB2YWx1ZVN0ZGV2PV9mbG9hdF9vcl9u
b25lKHJlc3VsdCwgJ3N0ZGV2JyksCisgICAgICAgICAgICB2YWx1ZU1pbj1fZmxvYXRfb3Jfbm9u
ZShyZXN1bHQsICdtaW4nKSwgdmFsdWVNYXg9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWF4Jykp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3J1bnMoYnJhbmNoLCBwbGF0
Zm9ybSwgdGVzdF9uYW1lKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQuYWxsKCkKKyAgICAgICAg
YnVpbGRzLmZpbHRlcignYnJhbmNoID0nLCBicmFuY2gpCisgICAgICAgIGJ1aWxkcy5maWx0ZXIo
J3BsYXRmb3JtID0nLCBwbGF0Zm9ybSkKKworICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgor
ICAgICAgICAgICAgcmVzdWx0cyA9IFRlc3RSZXN1bHQuYWxsKCkKKyAgICAgICAgICAgIHJlc3Vs
dHMuZmlsdGVyKCduYW1lID0nLCB0ZXN0X25hbWUpCisgICAgICAgICAgICByZXN1bHRzLmZpbHRl
cignYnVpbGQgPScsIGJ1aWxkKQorICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRzOgor
ICAgICAgICAgICAgICAgIHlpZWxkIGJ1aWxkLCByZXN1bHQKKyAgICAgICAgcmFpc2UgU3RvcEl0
ZXJhdGlvbgorCiAKIGNsYXNzIFJlcG9ydExvZyhkYi5Nb2RlbCk6CiAgICAgdGltZXN0YW1wID0g
ZGIuRGF0ZVRpbWVQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQpJbmRleDogV2Vic2l0ZXMvd2Via2l0
LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21vZGVsc191bml0dGVzdC5weQkocmV2aXNpb24g
MTA4MDk0KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxMCBAQCBpbXBvcnQgdW5pdHRlc3QK
IGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBp
IGltcG9ydCBtZW1jYWNoZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgdGVzdGJl
ZAorZnJvbSB0aW1lIGltcG9ydCBta3RpbWUKIAogCi1jbGFzcyBIZWxwZXJUZXN0cyh1bml0dGVz
dC5UZXN0Q2FzZSk6CitjbGFzcyBEYXRhU3RvcmVUZXN0c0Jhc2UodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0YmVkID0gdGVzdGJlZC5U
ZXN0YmVkKCkKICAgICAgICAgc2VsZi50ZXN0YmVkLmFjdGl2YXRlKCkKQEAgLTQ0LDYgKzQ1LDE4
IEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRv
d24oc2VsZik6CiAgICAgICAgIHNlbGYudGVzdGJlZC5kZWFjdGl2YXRlKCkKIAorICAgIGRlZiBh
c3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKHNlbGYsIG1vZGVsKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsZW4obW9kZWwuYWxsKCkuZmV0Y2goNSkpLCAwKQorCisgICAgZGVmIGFzc2VydE9u
bHlJbnN0YW5jZShzZWxmLCBvbmx5X2luc3Rhc25jZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobGVuKG9ubHlfaW5zdGFzbmNlLl9fY2xhc3NfXy5hbGwoKS5mZXRjaCg1KSksIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvbmx5X2luc3Rhc25jZS5fX2NsYXNzX18uZ2V0KG9ubHlfaW5z
dGFzbmNlLmtleSgpKSkKKworICAgIGRlZiBhc3NlcnRFcXVhbFVub3JkZXJlZExpc3Qoc2VsZiwg
bGlzdDEsIGxpc3QyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobGlzdDEpLCBzZXQo
bGlzdDIpKQorCisKK2NsYXNzIEhlbHBlclRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CiAgICAg
ZGVmIF9hc3NlcnRfdGhlcmVfaXNfZXhhY3RseV9vbmVfaWRfaG9sZGVyX2FuZF9tYXRjaGVzKHNl
bGYsIGlkKToKICAgICAgICAgaWRfaG9sZGVycyA9IG1vZGVscy5OdW1lcmljSWRIb2xkZXIuYWxs
KCkuZmV0Y2goNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaWRfaG9sZGVycyksIDEp
CkBAIC01NSw4ICs2OCw4IEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgogICAgICAgICAgICAgcmV0dXJuIG1vZGVscy5CcmFu
Y2goaWQ9aWQsIG5hbWU9J3NvbWUgYnJhbmNoJywga2V5X25hbWU9J3NvbWUtYnJhbmNoJykucHV0
KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJhbmNoLmFsbCgpLmZl
dGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLk51bWVyaWNJ
ZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05v
SW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0lu
c3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgICAgICBzZWxmLmFzc2VydFRy
dWUobW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4
ZWN1dGUpKQogCkBAIC03MiwxMyArODUsMTMgQEAgY2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBkZWYgZXhlY3V0ZShpZCk6CiAgICAgICAgICAgICByZXR1cm4g
Tm9uZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2guYWxsKCku
ZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuTnVtZXJp
Y0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlz
Tm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05v
SW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UobW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVy
KGV4ZWN1dGUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2gu
YWxsKCkuZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMu
TnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRU
aGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhl
cmVJc05vSW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQogCiAgICAgZGVmIHRlc3Rf
cmFpc2luZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihz
ZWxmKToKIApAQCAtODYsMTMgKzk5LDEzIEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgogICAgICAgICAgICAgcmV0dXJu
IE5vbmUKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJhbmNoLmFsbCgp
LmZldGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLk51bWVy
aWNJZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJ
c05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNO
b0luc3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhUeXBlRXJyb3IsIG1vZGVscy5jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1l
cmljX2lkX2hvbGRlciwgKGV4ZWN1dGUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KG1vZGVscy5CcmFuY2guYWxsKCkuZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAg
IHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQog
CiAgICAgZGVmIHRlc3RfZGVsZXRlX21vZGVsX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoc2VsZik6
CiAKQEAgLTEwNCw4ICsxMTcsOCBAQCBjbGFzcyBIZWxwZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAKICAgICAgICAgbW9kZWxzLmRlbGV0ZV9tb2RlbF93aXRoX251bWVyaWNfaWRfaG9sZGVy
KGJyYW5jaCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJhbmNoLmFs
bCgpLmZldGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLk51
bWVyaWNJZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhl
cmVJc05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJl
SXNOb0luc3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgIGRlZiB0ZXN0X21v
ZGVsX2Zyb21fbnVtZXJpY19pZChzZWxmKToKIApAQCAtMTIwLDE1ICsxMzMsMzcgQEAgY2xhc3Mg
SGVscGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG1vZGVscy5tb2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoLmlkLCBtb2RlbHMuQnJhbmNoKSwg
Tm9uZSkKIAogCi1jbGFzcyBCdWlsZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRl
ZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0YmVkID0gdGVzdGJlZC5UZXN0YmVkKCkK
LSAgICAgICAgc2VsZi50ZXN0YmVkLmFjdGl2YXRlKCkKLSAgICAgICAgc2VsZi50ZXN0YmVkLmlu
aXRfZGF0YXN0b3JlX3YzX3N0dWIoKQorY2xhc3MgQnJhbmNoVGVzdHMoRGF0YVN0b3JlVGVzdHNC
YXNlKToKKyAgICBkZWYgdGVzdF9jcmVhdGVfaWZfcG9zc2libGUoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorCisgICAgICAgIGJy
YW5jaCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdz
b21lIGJyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShicmFuY2gpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShicmFuY2gua2V5KCkubmFtZSgpLCAnc29tZS1icmFuY2gnKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoYnJhbmNoLm5hbWUsICdzb21lIGJyYW5jaCcpCisgICAgICAgIHNl
bGYuYXNzZXJ0T25seUluc3RhbmNlKGJyYW5jaCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdzb21lIG90
aGVyIGJyYW5jaCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnJhbmNoLm5hbWUsICdzb21l
IGJyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKGJyYW5jaCkKKworCitj
bGFzcyBQbGF0Zm9ybVRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfY3Jl
YXRlX2lmX3Bvc3NpYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3Rh
bmNlT2YobW9kZWxzLlBsYXRmb3JtKQorCisgICAgICAgIHBsYXRmb3JtID0gbW9kZWxzLlBsYXRm
b3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdzb21lIHBsYXRmb3JtJykK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGxhdGZvcm0ua2V5KCkubmFtZSgpLCAnc29tZS1wbGF0Zm9ybScpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwbGF0Zm9ybS5uYW1lLCAnc29tZSBwbGF0Zm9ybScpCisgICAgICAgIHNlbGYu
YXNzZXJ0T25seUluc3RhbmNlKHBsYXRmb3JtKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
bW9kZWxzLlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdzb21l
IG90aGVyIHBsYXRmb3JtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0Zm9ybS5uYW1l
LCAnc29tZSBwbGF0Zm9ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKHBsYXRm
b3JtKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnRlc3RiZWQuZGVh
Y3RpdmF0ZSgpCiAKK2NsYXNzIEJ1aWxkZXJUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgogICAg
IGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKICAgICAgICAgYnVpbGRlcl9rZXkgPSBtb2RlbHMuQnVp
bGRlci5jcmVhdGUoJ3NvbWUgYnVpbGRlcicsICdzb21lIHBhc3N3b3JkJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGJ1aWxkZXJfa2V5KQpAQCAtMTU4LDE1ICsxOTMsMTIzIEBAIGNsYXNzIEJ1
aWxkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
YnVpbGRlci5hdXRoZW50aWNhdGUoJ2JhZCBwYXNzd29yZCcpKQogCiAKLWNsYXNzIFJlcG9ydExv
Zyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxm
LnRlc3RiZWQgPSB0ZXN0YmVkLlRlc3RiZWQoKQotICAgICAgICBzZWxmLnRlc3RiZWQuYWN0aXZh
dGUoKQotICAgICAgICBzZWxmLnRlc3RiZWQuaW5pdF9kYXRhc3RvcmVfdjNfc3R1YigpCitkZWYg
X2NyZWF0ZV9zb21lX2J1aWxkZXIoKToKKyAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNyZWF0
ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAgIHBsYXRmb3Jt
ID0gbW9kZWxzLlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdT
b21lIFBsYXRmb3JtJykKKyAgICBidWlsZGVyX2tleSA9IG1vZGVscy5CdWlsZGVyLmNyZWF0ZSgn
c29tZS1idWlsZGVyJywgJ1NvbWUgQnVpbGRlcicpCisgICAgcmV0dXJuIGJyYW5jaCwgcGxhdGZv
cm0sIG1vZGVscy5CdWlsZGVyLmdldChidWlsZGVyX2tleSkKKworCitjbGFzcyBCdWlsZFRlc3Rz
KERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF9mcm9tX2xv
ZyhzZWxmKToKKyAgICAgICAgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9jcmVhdGVfc29t
ZV9idWlsZGVyKCkKKworICAgICAgICB0aW1lc3RhbXAgPSBkYXRldGltZS5ub3coKS5yZXBsYWNl
KG1pY3Jvc2Vjb25kPTApCisgICAgICAgIGxvZyA9IG1vZGVscy5SZXBvcnRMb2codGltZXN0YW1w
PXRpbWVzdGFtcCwgaGVhZGVycz0nc29tZSBoZWFkZXJzJywKKyAgICAgICAgICAgIHBheWxvYWQ9
J3siYnJhbmNoIjogInNvbWUtYnJhbmNoIiwgInBsYXRmb3JtIjogInNvbWUtcGxhdGZvcm0iLCAi
YnVpbGRlci1uYW1lIjogInNvbWUtYnVpbGRlciIsJyArCisgICAgICAgICAgICAgICAgJyJidWls
ZC1udW1iZXIiOiAxMjMsICJ3ZWJraXQtcmV2aXNpb24iOiA0NTYsICJ0aW1lc3RhbXAiOiAlZH0n
ICUgaW50KG1rdGltZSh0aW1lc3RhbXAudGltZXR1cGxlKCkpKSkKKworICAgICAgICBzZWxmLmFz
c2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLkJ1aWxkKQorCisgICAgICAgIGJ1aWxkID0g
bW9kZWxzLkJ1aWxkLmdldF9vcl9pbnNlcnRfZnJvbV9sb2cobG9nKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQuYnJhbmNoLmtl
eSgpLCBicmFuY2gua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQucGxhdGZv
cm0ua2V5KCksIHBsYXRmb3JtLmtleSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxk
LmJ1aWxkZXIua2V5KCksIGJ1aWxkZXIua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
YnVpbGQuYnVpbGROdW1iZXIsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZC5y
ZXZpc2lvbiwgNDU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLmNocm9taXVtUmV2
aXNpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQudGltZXN0YW1wLCB0
aW1lc3RhbXApCisKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UoYnVpbGQpCisKKwor
Y2xhc3MgVGVzdE1vZGVsVGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKKyAgICBkZWYgdGVzdF91
cGRhdGVfb3JfaW5zZXJ0KHNlbGYpOgorICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNy
ZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAgICAgICBw
bGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZv
cm0nLCAnU29tZSBQbGF0Zm9ybScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0
YW5jZU9mKG1vZGVscy5UZXN0KQorCisgICAgICAgIHRlc3QgPSBtb2RlbHMuVGVzdC51cGRhdGVf
b3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBicmFuY2gsIHBsYXRmb3JtKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUodGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmJyYW5jaGVzLCBb
YnJhbmNoLmtleSgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBsYXRmb3Jtcywg
W3BsYXRmb3JtLmtleSgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UodGVzdCkK
KworICAgIGRlZiB0ZXN0X3VwZGF0ZV9vcl9pbnNlcnRfdG9fdXBkYXRlKHNlbGYpOgorICAgICAg
ICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gn
LCAnU29tZSBCcmFuY2gnKQorICAgICAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5jcmVh
dGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCisgICAgICAg
IHRlc3QgPSBtb2RlbHMuVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBicmFuY2gs
IHBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZSh0ZXN0KQorCisgICAg
ICAgIG90aGVyX2JyYW5jaCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdvdGhl
ci1icmFuY2gnLCAnT3RoZXIgQnJhbmNoJykKKyAgICAgICAgb3RoZXJfcGxhdGZvcm0gPSBtb2Rl
bHMuUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdvdGhlci1wbGF0Zm9ybScsICdPdGhlciBQ
bGF0Zm9ybScpCisgICAgICAgIHRlc3QgPSBtb2RlbHMuVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdz
b21lLXRlc3QnLCBvdGhlcl9icmFuY2gsIG90aGVyX3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFz
c2VydE9ubHlJbnN0YW5jZSh0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVk
TGlzdCh0ZXN0LmJyYW5jaGVzLCBbYnJhbmNoLmtleSgpLCBvdGhlcl9icmFuY2gua2V5KCldKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCh0ZXN0LnBsYXRmb3JtcywgW3Bs
YXRmb3JtLmtleSgpLCBvdGhlcl9wbGF0Zm9ybS5rZXkoKV0pCisKKworY2xhc3MgVGVzdFJlc3Vs
dFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIF9jcmVhdGVfYnVpbGQoc2VsZik6
CisgICAgICAgIGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIgPSBfY3JlYXRlX3NvbWVfYnVpbGRl
cigpCisgICAgICAgIGJ1aWxkX2tleSA9IG1vZGVscy5CdWlsZChrZXlfbmFtZT0nc29tZS1idWls
ZCcsIGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxkZXIsCisg
ICAgICAgICAgICBidWlsZE51bWJlcj0xLCByZXZpc2lvbj0xMDAsIHRpbWVzdGFtcD1kYXRldGlt
ZS5ub3coKSkucHV0KCkKKyAgICAgICAgcmV0dXJuIG1vZGVscy5CdWlsZC5nZXQoYnVpbGRfa2V5
KQorCisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF92YWx1ZShzZWxmKToKKyAgICAgICAgYnVp
bGQgPSBzZWxmLl9jcmVhdGVfYnVpbGQoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0lu
c3RhbmNlT2YobW9kZWxzLlRlc3RSZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IG1vZGVscy5UZXN0
UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbignc29tZS10ZXN0JywgYnVpbGQs
IDUwKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShyZXN1bHQpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUsICdzb21lLXRlc3QnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHJlc3VsdC5idWlsZC5rZXkoKSwgYnVpbGQua2V5KCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCA1MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHJlc3VsdC52YWx1ZU1lZGlhbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1
bHQudmFsdWVTdGRldiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFs
dWVNaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWF4LCBO
b25lKQorCisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF9zdGF0X3ZhbHVlKHNlbGYpOgorICAg
ICAgICBidWlsZCA9IHNlbGYuX2NyZWF0ZV9idWlsZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhl
cmVJc05vSW5zdGFuY2VPZihtb2RlbHMuVGVzdFJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gbW9k
ZWxzLlRlc3RSZXN1bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKCdzb21lLXRlc3Qn
LCBidWlsZCwKKyAgICAgICAgICAgIHsiYXZnIjogNDAsICJtZWRpYW4iOiAiNDAuMSIsICJzdGRl
diI6IDMuMjUsICJtaW4iOiAzMC41LCAibWF4IjogNDV9KQorICAgICAgICBzZWxmLmFzc2VydE9u
bHlJbnN0YW5jZShyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUs
ICdzb21lLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5idWlsZC5rZXko
KSwgYnVpbGQua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCA0
MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1lZGlhbiwgNDAuMSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVTdGRldiwgMy4yNSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVNaW4sIDMwLjUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWF4LCA0NSkKKworICAgIGRlZiBfY3JlYXRlX3Jlc3Vs
dHMoc2VsZiwgdGVzdF9uYW1lLCB2YWx1ZXMpOgorICAgICAgICBicmFuY2gsIHBsYXRmb3JtLCBi
dWlsZGVyID0gX2NyZWF0ZV9zb21lX2J1aWxkZXIoKQorICAgICAgICByZXN1bHRzID0gW10KKyAg
ICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgorICAgICAgICAgICAgYnVp
bGQgPSBtb2RlbHMuQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxk
ZXI9YnVpbGRlciwKKyAgICAgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lvbj0xMDAg
KyBpLCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpCisgICAgICAgICAgICBidWlsZC5wdXQoKQor
ICAgICAgICAgICAgcmVzdWx0ID0gbW9kZWxzLlRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIGJ1
aWxkPWJ1aWxkLCB2YWx1ZT12YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXQoKQorICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICByZXR1cm4gYnJhbmNoLCBwbGF0
Zm9ybSwgcmVzdWx0cworCisgICAgZGVmIHRlc3RfZ2VuZXJhdGVfcnVucyhzZWxmKToKKyAgICAg
ICAgYnJhbmNoLCBwbGF0Zm9ybSwgcmVzdWx0cyA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzKCdzb21l
LXRlc3QnLCBbNTAuMCwgNTEuMCwgNTIuMCwgNDkuMCwgNDguMF0pCisgICAgICAgIGxhc3RfaSA9
IDAKKyAgICAgICAgZm9yIGksIChidWlsZCwgcmVzdWx0KSBpbiBlbnVtZXJhdGUobW9kZWxzLlRl
c3RSZXN1bHQuZ2VuZXJhdGVfcnVucyhicmFuY2gsIHBsYXRmb3JtLCAic29tZS10ZXN0IikpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZC5idWlsZE51bWJlciwgaSkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQucmV2aXNpb24sIDEwMCArIGkpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5uYW1lLCAnc29tZS10ZXN0JykKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCByZXN1bHRzW2ldLnZhbHVlKQorICAg
ICAgICAgICAgbGFzdF9pID0gaQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGFzdF9pICsgMSwg
bGVuKHJlc3VsdHMpKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnRl
c3RiZWQuZGVhY3RpdmF0ZSgpCiAKK2NsYXNzIFJlcG9ydExvZ1Rlc3RzKERhdGFTdG9yZVRlc3Rz
QmFzZSk6CiAgICAgZGVmIF9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZChzZWxmLCBwYXlsb2FkKToK
ICAgICAgICAgcmV0dXJuIG1vZGVscy5SZXBvcnRMb2codGltZXN0YW1wPWRhdGV0aW1lLm5vdygp
LCBoZWFkZXJzPSdzb21lIGhlYWRlcnMnLCBwYXlsb2FkPXBheWxvYWQpCiAKQEAgLTIwNiw3ICsz
NDksMjcgQEAgY2xhc3MgUmVwb3J0TG9nKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgbG9n
ID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3siYnVpbGRlci1uYW1lIjogIiVzIn0n
ICUgYnVpbGRlcl9uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5idWlsZGVyKCku
a2V5KCksIGJ1aWxkZXJfa2V5KQogCi0gICAgIyBGSVhNRSB0ZXN0X2JyYW5jaCBhbmQgdGVzdF9w
bGF0Zm9ybQorICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgbG9nID0gc2VsZi5f
Y3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sia2V5IjogInZhbHVlIn0nKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxvZy5icmFuY2goKSwgTm9uZSkKKworICAgICAgICBsb2cgPSBzZWxmLl9j
cmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJicmFuY2giOiAic29tZS1icmFuY2gifScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLmJyYW5jaCgpLCBOb25lKQorCisgICAgICAgIGJyYW5j
aCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCJzb21lLWJyYW5jaCIsICJTb21l
IEJyYW5jaCIpCisgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7
ImJyYW5jaCI6ICJzb21lLWJyYW5jaCJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cu
YnJhbmNoKCkua2V5KCksIGJyYW5jaC5rZXkoKSkKKworICAgIGRlZiB0ZXN0X3BsYXRmb3JtKHNl
bGYpOgorICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJrZXki
OiAidmFsdWUifScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRmb3JtKCksIE5v
bmUpCisKKyAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sicGxh
dGZvcm0iOiAic29tZS1wbGF0Zm9ybSJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cu
cGxhdGZvcm0oKSwgTm9uZSkKKworICAgICAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5j
cmVhdGVfaWZfcG9zc2libGUoInNvbWUtcGxhdGZvcm0iLCAiU29tZSBQbGF0Zm9ybSIpCisgICAg
ICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7InBsYXRmb3JtIjogInNv
bWUtcGxhdGZvcm0ifScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRmb3JtKCku
a2V5KCksIHBsYXRmb3JtLmtleSgpKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfbnVtYmVyKHNlbGYp
OgogICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJidWlsZC1u
dW1iZXIiOiAxMjN9JykKQEAgLTIzMCwyMiArMzkzLDE5IEBAIGNsYXNzIFJlcG9ydExvZyh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLndlYmtpdF9yZXZp
c2lvbigpLCBOb25lKQogCiAKLWNsYXNzIFBlcnNpc3RlbnRDYWNoZVRlc3RzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKK2NsYXNzIFBlcnNpc3RlbnRDYWNoZVRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6
CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3RiZWQgPSB0ZXN0YmVkLlRl
c3RiZWQoKQogICAgICAgICBzZWxmLnRlc3RiZWQuYWN0aXZhdGUoKQogICAgICAgICBzZWxmLnRl
c3RiZWQuaW5pdF9kYXRhc3RvcmVfdjNfc3R1YigpCiAgICAgICAgIHNlbGYudGVzdGJlZC5pbml0
X21lbWNhY2hlX3N0dWIoKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxm
LnRlc3RiZWQuZGVhY3RpdmF0ZSgpCi0KICAgICBkZWYgX2Fzc2VydF9wZXJzaXN0ZW50X2NhY2hl
KHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlbHMuUGVy
c2lzdGVudENhY2hlLmdldF9ieV9rZXlfbmFtZShuYW1lKS52YWx1ZSwgdmFsdWUpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobWVtY2FjaGUuZ2V0KG5hbWUpLCB2YWx1ZSkKIAogICAgIGRlZiB0
ZXN0X3NldChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLlBlcnNp
c3RlbnRDYWNoZS5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJ
c05vSW5zdGFuY2VPZihtb2RlbHMuUGVyc2lzdGVudENhY2hlKQogCiAgICAgICAgIG1vZGVscy5Q
ZXJzaXN0ZW50Q2FjaGUuc2V0X2NhY2hlKCdzb21lLWNhY2hlJywgJ3NvbWUgZGF0YScpCiAgICAg
ICAgIHNlbGYuX2Fzc2VydF9wZXJzaXN0ZW50X2NhY2hlKCdzb21lLWNhY2hlJywgJ3NvbWUgZGF0
YScpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vz
c19oYW5kbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3Qu
Y29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJKHJldmlzaW9uIDEwODA5MykKKysrIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCiBm
cm9tIG1vZGVscyBpbXBvcnQgUmVwb3J0TG9nCiBmcm9tIG1vZGVscyBpbXBvcnQgVGVzdAogZnJv
bSBtb2RlbHMgaW1wb3J0IFRlc3RSZXN1bHQKLWZyb20gbW9kZWxzIGltcG9ydCBjcmVhdGVfaW5f
dHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcgogCiAKIGNsYXNzIFJlcG9ydFByb2Nl
c3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgpAQCAtNTUsMTEgKzU0LDExIEBAIGNs
YXNzIFJlcG9ydFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWUKIAogICAgICAgICBicmFuY2gg
PSBsb2cuYnJhbmNoKCkKICAgICAgICAgcGxhdGZvcm0gPSBsb2cucGxhdGZvcm0oKQotICAgICAg
ICBidWlsZCA9IHNlbGYuX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShsb2csIGJyYW5jaCwgcGxh
dGZvcm0pCisgICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xvZyhsb2cp
CiAKICAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIGxvZy5yZXN1bHRzKCkuaXRlcml0
ZW1zKCk6Ci0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fYWRkX3Rlc3RfaWZfbmVlZGVkKHRlc3Rf
bmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSkKLSAgICAgICAgICAgIHNlbGYuX2FkZF90ZXN0X3Jlc3Vs
dF9pZl9uZWVkZWQodGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0KQorICAgICAgICAgICAgdGVzdCA9
IFRlc3QudXBkYXRlX29yX2luc2VydCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pCisgICAg
ICAgICAgICBUZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbih0ZXN0X25h
bWUsIGJ1aWxkLCByZXN1bHQpCiAgICAgICAgICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0
LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQogCiAgICAgICAgIGxvZyA9IFJlcG9ydExvZy5n
ZXQobG9nLmtleSgpKQpAQCAtNzAsNDIgKzY5LDMgQEAgY2xhc3MgUmVwb3J0UHJvY2Vzc0hhbmRs
ZXIod2ViYXBwMi5SZXF1ZQogICAgICAgICBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUoKQogCiAg
ICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCi0KLSAgICBkZWYgX2NyZWF0ZV9i
dWlsZF9pZl9wb3NzaWJsZShzZWxmLCBsb2csIGJyYW5jaCwgcGxhdGZvcm0pOgotICAgICAgICBi
dWlsZGVyID0gbG9nLmJ1aWxkZXIoKQotICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIubmFtZSAr
ICc6JyArIHN0cihpbnQodGltZS5ta3RpbWUobG9nLnRpbWVzdGFtcCgpLnRpbWV0dXBsZSgpKSkp
Ci0KLSAgICAgICAgcmV0dXJuIEJ1aWxkLmdldF9vcl9pbnNlcnQoa2V5X25hbWUsIGJyYW5jaD1i
cmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxkZXIsIGJ1aWxkTnVtYmVyPWxv
Zy5idWlsZF9udW1iZXIoKSwKLSAgICAgICAgICAgIHRpbWVzdGFtcD1sb2cudGltZXN0YW1wKCks
IHJldmlzaW9uPWxvZy53ZWJraXRfcmV2aXNpb24oKSwgY2hyb21pdW1SZXZpc2lvbj1sb2cuY2hy
b21pdW1fcmV2aXNpb24oKSkKLQotICAgIGRlZiBfYWRkX3Rlc3RfaWZfbmVlZGVkKHNlbGYsIHRl
c3RfbmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSk6Ci0KLSAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgot
ICAgICAgICAgICAgdGVzdCA9IFRlc3QuZ2V0X2J5X2tleV9uYW1lKHRlc3RfbmFtZSkKLSAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHRlc3Q6Ci0gICAg
ICAgICAgICAgICAgdGVzdCA9IFRlc3QoaWQ9aWQsIG5hbWU9dGVzdF9uYW1lLCBrZXlfbmFtZT10
ZXN0X25hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0ZXN0Ci0gICAgICAgICAg
ICBpZiBicmFuY2gua2V5KCkgbm90IGluIHRlc3QuYnJhbmNoZXM6Ci0gICAgICAgICAgICAgICAg
dGVzdC5icmFuY2hlcy5hcHBlbmQoYnJhbmNoLmtleSgpKQotICAgICAgICAgICAgaWYgcGxhdGZv
cm0ua2V5KCkgbm90IGluIHRlc3QucGxhdGZvcm1zOgotICAgICAgICAgICAgICAgIHRlc3QucGxh
dGZvcm1zLmFwcGVuZChwbGF0Zm9ybS5rZXkoKSkKLSAgICAgICAgICAgIHRlc3QucHV0KCkKLSAg
ICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZQotICAgICAgICByZXR1cm4gY3JlYXRlX2luX3Ry
YW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkgb3IgVGVzdC5nZXRfYnlf
a2V5X25hbWUodGVzdF9uYW1lKQotCi0gICAgZGVmIF9hZGRfdGVzdF9yZXN1bHRfaWZfbmVlZGVk
KHNlbGYsIHRlc3RfbmFtZSwgYnVpbGQsIHJlc3VsdCk6Ci0gICAgICAgIGtleV9uYW1lID0gVGVz
dFJlc3VsdC5rZXlfbmFtZShidWlsZCwgdGVzdF9uYW1lKQotCi0gICAgICAgIGRlZiBfZmxvYXRf
b3Jfbm9uZShkaWN0aW9uYXJ5LCBrZXkpOgotICAgICAgICAgICAgdmFsdWUgPSBkaWN0aW9uYXJ5
LmdldChrZXkpCi0gICAgICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmxvYXQodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKHJlc3VsdCwgZGljdCk6Ci0gICAgICAgICAgICByZXR1cm4gVGVzdFJlc3VsdC5n
ZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVl
PWZsb2F0KHJlc3VsdCkpCi0KLSAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQuZ2V0X29yX2luc2Vy
dChrZXlfbmFtZSwgbmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1
bHRbJ2F2ZyddKSwKLSAgICAgICAgICAgIHZhbHVlTWVkaWFuPV9mbG9hdF9vcl9ub25lKHJlc3Vs
dCwgJ21lZGlhbicpLCB2YWx1ZVN0ZGV2PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ3N0ZGV2Jyks
Ci0gICAgICAgICAgICB2YWx1ZU1pbj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdtaW4nKSwgdmFs
dWVNYXg9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWF4JykpCkluZGV4OiBXZWJzaXRlcy93ZWJr
aXQtcGVyZi5hcHBzcG90LmNvbS9ydW5zX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5CShyZXZpc2lvbiAxMDgw
OTQpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9ydW5zX2hhbmRsZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDUyICs0NSw0NyBAQCBmcm9tIG1vZGVscyBpbXBvcnQgbW9k
ZWxfZnJvbV9udW1lcmljX2lkCiAKIAogY2xhc3MgUnVuc0hhbmRsZXIod2ViYXBwMi5SZXF1ZXN0
SGFuZGxlcik6CisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgc2VsZi5wb3N0KCkKKwogICAg
IGRlZiBwb3N0KHNlbGYpOgogICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQt
VHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnCiAKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgdGVzdF9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsIDApKQotICAgICAg
ICAgICAgYnJhbmNoX2lkID0gaW50KHNlbGYucmVxdWVzdC5nZXQoJ2JyYW5jaGlkJywgMCkpCi0g
ICAgICAgICAgICBwbGF0Zm9ybV9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdwbGF0Zm9ybWlk
JywgMCkpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAjIEZJWE1FOiBP
dXRwdXQgYW4gZXJyb3IgaGVyZQotICAgICAgICAgICAgdGVzdF9pZCA9IDAKLSAgICAgICAgICAg
IGJyYW5jaF9pZCA9IDAKLSAgICAgICAgICAgIHBsYXRmb3JtX2lkID0gMAorICAgICAgICAjIExl
dCBleGNlcHRpb25zIHJhaXNlIGFzIHRoaXMgaGFuZGxlciBpcyBjYWxsZWQgaW5zaWRlIGEgdGFz
ay1xdWV1ZQorICAgICAgICB0ZXN0X2lkID0gaW50KHNlbGYucmVxdWVzdC5nZXQoJ2lkJywgMCkp
CisgICAgICAgIGJyYW5jaF9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdicmFuY2hpZCcsIDAp
KQorICAgICAgICBwbGF0Zm9ybV9pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdwbGF0Zm9ybWlk
JywgMCkpCiAKICAgICAgICAgIyBGSVhNRTogSnVzdCBmZXRjaCBidWlsZHMgc3BlY2lmaWVkIGJ5
ICJkYXlzIgogICAgICAgICAjIGRheXMgPSBzZWxmLnJlcXVlc3QuZ2V0KCdkYXlzJywgMzY1KQog
Ci0gICAgICAgIGJ1aWxkcyA9IEJ1aWxkLmFsbCgpCi0gICAgICAgIGJ1aWxkcy5maWx0ZXIoJ2Jy
YW5jaCA9JywgbW9kZWxfZnJvbV9udW1lcmljX2lkKGJyYW5jaF9pZCwgQnJhbmNoKSkKLSAgICAg
ICAgYnVpbGRzLmZpbHRlcigncGxhdGZvcm0gPScsIG1vZGVsX2Zyb21fbnVtZXJpY19pZChwbGF0
Zm9ybV9pZCwgUGxhdGZvcm0pKQotCisgICAgICAgIGJyYW5jaCA9IG1vZGVsX2Zyb21fbnVtZXJp
Y19pZChicmFuY2hfaWQsIEJyYW5jaCkKKyAgICAgICAgcGxhdGZvcm0gPSBtb2RlbF9mcm9tX251
bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQogICAgICAgICB0ZXN0ID0gbW9kZWxfZnJv
bV9udW1lcmljX2lkKHRlc3RfaWQsIFRlc3QpCi0gICAgICAgIHRlc3RfbmFtZSA9IHRlc3QubmFt
ZSBpZiB0ZXN0IGVsc2UgTm9uZQorICAgICAgICBhc3NlcnQgYnJhbmNoCisgICAgICAgIGFzc2Vy
dCBwbGF0Zm9ybQorICAgICAgICBhc3NlcnQgdGVzdAorCiAgICAgICAgIHRlc3RfcnVucyA9IFtd
CiAgICAgICAgIGF2ZXJhZ2VzID0ge30KICAgICAgICAgdmFsdWVzID0gW10KICAgICAgICAgdGlt
ZXN0YW1wcyA9IFtdCiAKLSAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKLSAgICAgICAgICAg
IHJlc3VsdHMgPSBUZXN0UmVzdWx0LmFsbCgpCi0gICAgICAgICAgICByZXN1bHRzLmZpbHRlcign
bmFtZSA9JywgdGVzdF9uYW1lKQotICAgICAgICAgICAgcmVzdWx0cy5maWx0ZXIoJ2J1aWxkID0n
LCBidWlsZCkKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKLSAgICAgICAgICAg
ICAgICBidWlsZGVySWQgPSBidWlsZC5idWlsZGVyLmtleSgpLmlkKCkKLSAgICAgICAgICAgICAg
ICBwb3NpeFRpbWVzdGFtcCA9IG1rdGltZShidWlsZC50aW1lc3RhbXAudGltZXR1cGxlKCkpCi0g
ICAgICAgICAgICAgICAgc3RhdGlzdGljcyA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiByZXN1
bHQudmFsdWVTdGRldiAhPSBOb25lIGFuZCByZXN1bHQudmFsdWVNaW4gIT0gTm9uZSBhbmQgcmVz
dWx0LnZhbHVlTWF4ICE9IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MgPSB7
J3N0ZGV2JzogcmVzdWx0LnZhbHVlU3RkZXYsICdtaW4nOiByZXN1bHQudmFsdWVNaW4sICdtYXgn
OiByZXN1bHQudmFsdWVNYXh9Ci0gICAgICAgICAgICAgICAgdGVzdF9ydW5zLmFwcGVuZChbcmVz
dWx0LmtleSgpLmlkKCksCi0gICAgICAgICAgICAgICAgICAgIFtidWlsZC5rZXkoKS5pZCgpLCBi
dWlsZC5idWlsZE51bWJlciwgYnVpbGQucmV2aXNpb25dLAotICAgICAgICAgICAgICAgICAgICBw
b3NpeFRpbWVzdGFtcCwgcmVzdWx0LnZhbHVlLCAwLCAgIyBydW5OdW1iZXIKLSAgICAgICAgICAg
ICAgICAgICAgW10sICAjIGFubm90YXRpb25zCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXJJ
ZCwgc3RhdGlzdGljc10pCi0gICAgICAgICAgICAgICAgIyBGSVhNRTogQ2FsY3VsYXRlIHRoZSBh
dmVyYWdlOyBpbiBwcmFjdGljZSwgd2Ugd291bGRuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVl
IGZvciBhIGdpdmVuIHJldmlzaW9uCi0gICAgICAgICAgICAgICAgYXZlcmFnZXNbYnVpbGQucmV2
aXNpb25dID0gcmVzdWx0LnZhbHVlCi0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChyZXN1
bHQudmFsdWUpCi0gICAgICAgICAgICAgICAgdGltZXN0YW1wcy5hcHBlbmQocG9zaXhUaW1lc3Rh
bXApCisgICAgICAgIGZvciBidWlsZCwgcmVzdWx0IGluIFRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVu
cyhicmFuY2gsIHBsYXRmb3JtLCB0ZXN0Lm5hbWUpOgorICAgICAgICAgICAgYnVpbGRlcklkID0g
YnVpbGQuYnVpbGRlci5rZXkoKS5pZCgpCisgICAgICAgICAgICBwb3NpeFRpbWVzdGFtcCA9IG1r
dGltZShidWlsZC50aW1lc3RhbXAudGltZXR1cGxlKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNz
ID0gTm9uZQorICAgICAgICAgICAgaWYgcmVzdWx0LnZhbHVlU3RkZXYgIT0gTm9uZSBhbmQgcmVz
dWx0LnZhbHVlTWluICE9IE5vbmUgYW5kIHJlc3VsdC52YWx1ZU1heCAhPSBOb25lOgorICAgICAg
ICAgICAgICAgIHN0YXRpc3RpY3MgPSB7J3N0ZGV2JzogcmVzdWx0LnZhbHVlU3RkZXYsICdtaW4n
OiByZXN1bHQudmFsdWVNaW4sICdtYXgnOiByZXN1bHQudmFsdWVNYXh9CisgICAgICAgICAgICB0
ZXN0X3J1bnMuYXBwZW5kKFtyZXN1bHQua2V5KCkuaWQoKSwKKyAgICAgICAgICAgICAgICBbYnVp
bGQua2V5KCkuaWQoKSwgYnVpbGQuYnVpbGROdW1iZXIsIGJ1aWxkLnJldmlzaW9uXSwKKyAgICAg
ICAgICAgICAgICBwb3NpeFRpbWVzdGFtcCwgcmVzdWx0LnZhbHVlLCAwLCAgIyBydW5OdW1iZXIK
KyAgICAgICAgICAgICAgICBbXSwgICMgYW5ub3RhdGlvbnMKKyAgICAgICAgICAgICAgICBidWls
ZGVySWQsIHN0YXRpc3RpY3NdKQorICAgICAgICAgICAgIyBGSVhNRTogQ2FsY3VsYXRlIHRoZSBh
dmVyYWdlOyBpbiBwcmFjdGljZSwgd2Ugd291bGRuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lIHZhbHVl
IGZvciBhIGdpdmVuIHJldmlzaW9uCisgICAgICAgICAgICBhdmVyYWdlc1tidWlsZC5yZXZpc2lv
bl0gPSByZXN1bHQudmFsdWUKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQocmVzdWx0LnZhbHVl
KQorICAgICAgICAgICAgdGltZXN0YW1wcy5hcHBlbmQocG9zaXhUaW1lc3RhbXApCiAKICAgICAg
ICAgcmVzdWx0ID0ganNvbi5kdW1wcyh7CiAgICAgICAgICAgICAndGVzdF9ydW5zJzogdGVzdF9y
dW5zLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127728</attachid>
            <date>2012-02-18 21:48:20 -0800</date>
            <delta_ts>2012-02-20 01:17:25 -0800</delta_ts>
            <desc>Added one more line of refactoring</desc>
            <filename>bug-78989-20120218214819.patch</filename>
            <type>text/plain</type>
            <size>31263</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwODE4
MykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAy
LTE4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgbW9y
ZSBsb2dpYyBmcm9tIGhhbmRsZXIgY2xhc3NlcyB0byBtb2RlbCBjbGFzc2VzIGFuZCBhZGQgdW5p
dCB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHRyYWN0ZWQgdmFyaW91cyBmdW5jdGlvbnMgZnJvbSBDcmVhdGVIYW5kbGVyLCBSZXBvcnRIYW5s
ZGVyLCBhbmQgUnVuc0hhbmxkZXIgdG8gbW9kZWwgY2xhc3NlcworICAgICAgICBpbiBvcmRlciB0
byB1bml0LXRlc3QgdGhlbSwgYWRkZWQgRGF0YVN0b3JlVGVzdHNCYXNlIHRvIHJlZHVjZSB0aGUg
Y29kZSBkdXBsaWNhdGlvbiBpbiB0ZXN0cywKKyAgICAgICAgYW5kIGFkZGVkIGEgd2hvbGUgYnVu
Y2ggb2YgdW5pdCB0ZXN0cyBpbiBtb2RlbHNfdW5pdHRlc3QucHkuCisKKyAgICAgICAgKiBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jcmVhdGVfaGFuZGxlci5weToKKyAgICAgICAg
KENyZWF0ZUhhbmRsZXIuX2NyZWF0ZV9icmFuY2gpOgorICAgICAgICAoQ3JlYXRlSGFuZGxlci5f
Y3JlYXRlX3BsYXRmb3JtKToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9tb2RlbHMucHk6CisgICAgICAgIChfY3JlYXRlX2lmX3Bvc3NpYmxlKToKKyAgICAgICAg
KF9jcmVhdGVfaWZfcG9zc2libGUuZXhlY3V0ZSk6CisgICAgICAgIChCcmFuY2gpOgorICAgICAg
ICAoQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSk6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAg
ICAgIChQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGQpOgorICAg
ICAgICAoQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xvZyk6CisgICAgICAgIChUZXN0KToKKyAg
ICAgICAgKFRlc3QudXBkYXRlX29yX2luc2VydCk6CisgICAgICAgIChUZXN0LnVwZGF0ZV9vcl9p
bnNlcnQuZXhlY3V0ZSk6CisgICAgICAgIChUZXN0UmVzdWx0KToKKyAgICAgICAgKFRlc3RSZXN1
bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKToKKyAgICAgICAgKFRlc3RSZXN1bHQu
Z2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uLl9mbG9hdF9vcl9ub25lKToKKyAgICAgICAg
KFRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVucyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRGF0YVN0b3JlVGVz
dHNCYXNlKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRUaGVyZUlzTm9JbnN0
YW5jZU9mKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRPbmx5SW5zdGFuY2Up
OgorICAgICAgICAoRGF0YVN0b3JlVGVzdHNCYXNlLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCk6
CisgICAgICAgIChIZWxwZXJUZXN0cyk6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X2NyZWF0
ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKToKKyAgICAgICAgKEhlbHBl
clRlc3RzLnRlc3RfZmFpbGluZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmlj
X2lkX2hvbGRlcik6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X3JhaXNpbmdfaW5fY3JlYXRl
X2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIpOgorICAgICAgICAoSGVscGVy
VGVzdHMudGVzdF9kZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcik6CisgICAgICAg
IChCcmFuY2hUZXN0cyk6CisgICAgICAgIChCcmFuY2hUZXN0cy50ZXN0X2NyZWF0ZV9pZl9wb3Nz
aWJsZSk6CisgICAgICAgIChQbGF0Zm9ybVRlc3RzKToKKyAgICAgICAgKFBsYXRmb3JtVGVzdHMu
dGVzdF9jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGRlclRlc3RzKToKKyAgICAg
ICAgKF9jcmVhdGVfc29tZV9idWlsZGVyKToKKyAgICAgICAgKEJ1aWxkVGVzdHMpOgorICAgICAg
ICAoQnVpbGRUZXN0cy50ZXN0X2dldF9vcl9pbnNlcnRfZnJvbV9sb2cpOgorICAgICAgICAoVGVz
dE1vZGVsVGVzdHMpOgorICAgICAgICAoVGVzdE1vZGVsVGVzdHMudGVzdF91cGRhdGVfb3JfaW5z
ZXJ0KToKKyAgICAgICAgKFRlc3RNb2RlbFRlc3RzLnRlc3RfdXBkYXRlX29yX2luc2VydF90b191
cGRhdGUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzKToKKyAgICAgICAgKFRlc3RSZXN1bHRU
ZXN0cy5fY3JlYXRlX2J1aWxkKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy50ZXN0X2dldF9v
cl9pbnNlcnRfdmFsdWUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2V0X29yX2lu
c2VydF9zdGF0X3ZhbHVlKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy5fY3JlYXRlX3Jlc3Vs
dHMpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2VuZXJhdGVfcnVucyk6CisgICAg
ICAgIChSZXBvcnRMb2dUZXN0cyk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X2JyYW5j
aCk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X3BsYXRmb3JtKToKKyAgICAgICAgKFBl
cnNpc3RlbnRDYWNoZVRlc3RzKToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnNldFVw
KToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnRlc3Rfc2V0KToKKyAgICAgICAgKiBX
ZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5
OgorICAgICAgICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIucG9zdCk6CisgICAgICAgICogV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5OgorICAgICAgICAoUnVu
c0hhbmRsZXIuZ2V0KToKKyAgICAgICAgKFJ1bnNIYW5kbGVyLnBvc3QpOgorCiAyMDEyLTAyLTE4
ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3
eF0gRXhjbHVkZSBhIGNvdXBsZSB1bnVzZWQgYmluZGluZ3MgZmlsZXMgZnJvbSB0aGUgYnVpbGQK
SW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NyZWF0ZV9oYW5kbGVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NyZWF0ZV9o
YW5kbGVyLnB5CShyZXZpc2lvbiAxMDgwOTQpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9jcmVhdGVfaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtODUsMzMgKzg1LDEw
IEBAIGNsYXNzIENyZWF0ZUhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGwKICAgICBkZWYgX2Ny
ZWF0ZV9icmFuY2goc2VsZiwga2V5LCBuYW1lKToKICAgICAgICAgaWYgbm90IGtleSBvciBub3Qg
bmFtZToKICAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCBrZXkgb3IgbmFtZScKLQotICAgICAg
ICBlcnJvciA9IFtOb25lXQotCi0gICAgICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAg
IGlmIEJyYW5jaC5nZXRfYnlfa2V5X25hbWUoa2V5KToKLSAgICAgICAgICAgICAgICBlcnJvclsw
XSA9ICdCcmFuY2ggIiVzIiBhbHJlYWR5IGV4aXN0cycgJSBrZXkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4KLSAgICAgICAgICAgIGJyYW5jaCA9IEJyYW5jaChpZD1pZCwgbmFtZT1uYW1lLCBrZXlf
bmFtZT1rZXkpCi0gICAgICAgICAgICBicmFuY2gucHV0KCkKLSAgICAgICAgICAgIHJldHVybiBi
cmFuY2gKLQotICAgICAgICBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hv
bGRlcihleGVjdXRlKQotICAgICAgICByZXR1cm4gZXJyb3JbMF0KKyAgICAgICAgcmV0dXJuIE5v
bmUgaWYgQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZShrZXksIG5hbWUpIGVsc2UgJ0JyYW5jaCAi
JXMiIGFscmVhZHkgZXhpc3RzJyAlIGtleQogCiAgICAgZGVmIF9jcmVhdGVfcGxhdGZvcm0oc2Vs
Ziwga2V5LCBuYW1lKToKICAgICAgICAgaWYgbm90IGtleSBvciBub3QgbmFtZToKICAgICAgICAg
ICAgIHJldHVybiAnSW52YWxpZCBrZXkgbmFtZScKIAotICAgICAgICBlcnJvciA9IFtOb25lXQot
Ci0gICAgICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAgIGlmIFBsYXRmb3JtLmdldF9i
eV9rZXlfbmFtZShrZXkpOgotICAgICAgICAgICAgICAgIGVycm9yWzBdID0gJ1BsYXRmb3JtICIl
cyIgYWxyZWFkeSBleGlzdHMnICUga2V5Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtKGlkPWlkLCBuYW1lPW5hbWUsIGtleV9uYW1lPWtleSkK
LSAgICAgICAgICAgIHBsYXRmb3JtLnB1dCgpCi0gICAgICAgICAgICByZXR1cm4gcGxhdGZvcm0K
LQotICAgICAgICBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihl
eGVjdXRlKQotICAgICAgICByZXR1cm4gZXJyb3JbMF0KKyAgICAgICAgcmV0dXJuIE5vbmUgaWYg
UGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFtZSkgZWxzZSAnUGxhdGZvcm0gIiVz
IiBhbHJlYWR5IGV4aXN0cycgJSBrZXkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL21vZGVscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9tb2RlbHMucHkJKHJldmlzaW9uIDEwODA5NCkKKysrIFdlYnNpdGVzL3dlYmtpdC1w
ZXJmLmFwcHNwb3QuY29tL21vZGVscy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBpbXBvcnQgcmUKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0IGltcG9ydCBkYgogZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQg
bWVtY2FjaGUKK2Zyb20gdGltZSBpbXBvcnQgbWt0aW1lCiAKIAogY2xhc3MgTnVtZXJpY0lkSG9s
ZGVyKGRiLk1vZGVsKToKQEAgLTY4LDE1ICs2OSwzNSBAQCBkZWYgbW9kZWxfZnJvbV9udW1lcmlj
X2lkKGlkLCBleHBlY3RlZF9rCiAgICAgcmV0dXJuIGlkX2hvbGRlci5vd25lciBpZiBpZF9ob2xk
ZXIgYW5kIGlkX2hvbGRlci5vd25lciBhbmQgaXNpbnN0YW5jZShpZF9ob2xkZXIub3duZXIsIGV4
cGVjdGVkX2tpbmQpIGVsc2UgTm9uZQogCiAKK2RlZiBfY3JlYXRlX2lmX3Bvc3NpYmxlKG1vZGVs
LCBrZXksIG5hbWUpOgorCisgICAgZGVmIGV4ZWN1dGUoaWQpOgorICAgICAgICBpZiBtb2RlbC5n
ZXRfYnlfa2V5X25hbWUoa2V5KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGJy
YW5jaCA9IG1vZGVsKGlkPWlkLCBuYW1lPW5hbWUsIGtleV9uYW1lPWtleSkKKyAgICAgICAgYnJh
bmNoLnB1dCgpCisgICAgICAgIHJldHVybiBicmFuY2gKKworICAgIHJldHVybiBjcmVhdGVfaW5f
dHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKQorCisKIGNsYXNzIEJy
YW5jaChkYi5Nb2RlbCk6CiAgICAgaWQgPSBkYi5JbnRlZ2VyUHJvcGVydHkocmVxdWlyZWQ9VHJ1
ZSkKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKIAorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFtZSk6CisgICAg
ICAgIHJldHVybiBfY3JlYXRlX2lmX3Bvc3NpYmxlKEJyYW5jaCwga2V5LCBuYW1lKQorCiAKIGNs
YXNzIFBsYXRmb3JtKGRiLk1vZGVsKToKICAgICBpZCA9IGRiLkludGVnZXJQcm9wZXJ0eShyZXF1
aXJlZD1UcnVlKQogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQog
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfaWZfcG9zc2libGUoa2V5LCBuYW1l
KToKKyAgICAgICAgcmV0dXJuIF9jcmVhdGVfaWZfcG9zc2libGUoUGxhdGZvcm0sIGtleSwgbmFt
ZSkKKwogCiBjbGFzcyBCdWlsZGVyKGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIuU3RyaW5nUHJv
cGVydHkocmVxdWlyZWQ9VHJ1ZSkKQEAgLTEwNyw2ICsxMjgsMTUgQEAgY2xhc3MgQnVpbGQoZGIu
TW9kZWwpOgogICAgIGNocm9taXVtUmV2aXNpb24gPSBkYi5JbnRlZ2VyUHJvcGVydHkoKQogICAg
IHRpbWVzdGFtcCA9IGRiLkRhdGVUaW1lUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKIAorICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X29yX2luc2VydF9mcm9tX2xvZyhsb2cpOgorICAgICAg
ICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQorICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIubmFt
ZSArICc6JyArIHN0cihpbnQobWt0aW1lKGxvZy50aW1lc3RhbXAoKS50aW1ldHVwbGUoKSkpKQor
CisgICAgICAgIHJldHVybiBCdWlsZC5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBicmFuY2g9bG9n
LmJyYW5jaCgpLCBwbGF0Zm9ybT1sb2cucGxhdGZvcm0oKSwgYnVpbGRlcj1idWlsZGVyLAorICAg
ICAgICAgICAgYnVpbGROdW1iZXI9bG9nLmJ1aWxkX251bWJlcigpLCB0aW1lc3RhbXA9bG9nLnRp
bWVzdGFtcCgpLAorICAgICAgICAgICAgcmV2aXNpb249bG9nLndlYmtpdF9yZXZpc2lvbigpLCBj
aHJvbWl1bVJldmlzaW9uPWxvZy5jaHJvbWl1bV9yZXZpc2lvbigpKQorCiAKICMgVXNlZCB0byBn
ZW5lcmF0ZSBUZXN0TWFwIGluIHRoZSBtYW5pZmVzdCBlZmZpY2llbnRseQogY2xhc3MgVGVzdChk
Yi5Nb2RlbCk6CkBAIC0xMTksNiArMTQ5LDI2IEBAIGNsYXNzIFRlc3QoZGIuTW9kZWwpOgogICAg
IGRlZiBjYWNoZV9rZXkodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCk6CiAgICAgICAg
IHJldHVybiAncnVuczolZCwlZCwlZCcgJSAodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9p
ZCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdXBkYXRlX29yX2luc2VydCh0ZXN0X25h
bWUsIGJyYW5jaCwgcGxhdGZvcm0pOgorICAgICAgICBleGlzdGluZ190ZXN0ID0gW05vbmVdCisK
KyAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgorICAgICAgICAgICAgdGVzdCA9IFRlc3QuZ2V0X2J5
X2tleV9uYW1lKHRlc3RfbmFtZSkKKyAgICAgICAgICAgIGlmIHRlc3Q6CisgICAgICAgICAgICAg
ICAgaWYgYnJhbmNoLmtleSgpIG5vdCBpbiB0ZXN0LmJyYW5jaGVzOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChicmFuY2gua2V5KCkpCisgICAgICAgICAgICAgICAg
aWYgcGxhdGZvcm0ua2V5KCkgbm90IGluIHRlc3QucGxhdGZvcm1zOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0LnBsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0ua2V5KCkpCisgICAgICAgICAgICAg
ICAgZXhpc3RpbmdfdGVzdFswXSA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1pZCwgbmFtZT10ZXN0X25hbWUsIGtleV9uYW1l
PXRlc3RfbmFtZSwgYnJhbmNoZXM9W2JyYW5jaC5rZXkoKV0sIHBsYXRmb3Jtcz1bcGxhdGZvcm0u
a2V5KCldKQorICAgICAgICAgICAgdGVzdC5wdXQoKQorICAgICAgICAgICAgcmV0dXJuIHRlc3QK
KworICAgICAgICByZXR1cm4gY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9o
b2xkZXIoZXhlY3V0ZSkgb3IgZXhpc3RpbmdfdGVzdFswXQorCiAKIGNsYXNzIFRlc3RSZXN1bHQo
ZGIuTW9kZWwpOgogICAgIG5hbWUgPSBkYi5TdHJpbmdQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQpA
QCAtMTMzLDYgKzE4MywzNyBAQCBjbGFzcyBUZXN0UmVzdWx0KGRiLk1vZGVsKToKICAgICBkZWYg
a2V5X25hbWUoYnVpbGQsIHRlc3RfbmFtZSk6CiAgICAgICAgIHJldHVybiBidWlsZC5rZXkoKS5u
YW1lKCkgKyAnOicgKyB0ZXN0X25hbWUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0
X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKHRlc3RfbmFtZSwgYnVpbGQsIHJlc3VsdCk6Cisg
ICAgICAgIGtleV9uYW1lID0gVGVzdFJlc3VsdC5rZXlfbmFtZShidWlsZCwgdGVzdF9uYW1lKQor
CisgICAgICAgIGRlZiBfZmxvYXRfb3Jfbm9uZShkaWN0aW9uYXJ5LCBrZXkpOgorICAgICAgICAg
ICAgdmFsdWUgPSBkaWN0aW9uYXJ5LmdldChrZXkpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmxvYXQodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCk6CisgICAgICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFt
ZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdCkpCisKKyAgICAgICAgcmV0dXJuIFRl
c3RSZXN1bHQuZ2V0X29yX2luc2VydChrZXlfbmFtZSwgbmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1
aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHRbJ2F2ZyddKSwKKyAgICAgICAgICAgIHZhbHVlTWVkaWFu
PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21lZGlhbicpLCB2YWx1ZVN0ZGV2PV9mbG9hdF9vcl9u
b25lKHJlc3VsdCwgJ3N0ZGV2JyksCisgICAgICAgICAgICB2YWx1ZU1pbj1fZmxvYXRfb3Jfbm9u
ZShyZXN1bHQsICdtaW4nKSwgdmFsdWVNYXg9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWF4Jykp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX3J1bnMoYnJhbmNoLCBwbGF0
Zm9ybSwgdGVzdF9uYW1lKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQuYWxsKCkKKyAgICAgICAg
YnVpbGRzLmZpbHRlcignYnJhbmNoID0nLCBicmFuY2gpCisgICAgICAgIGJ1aWxkcy5maWx0ZXIo
J3BsYXRmb3JtID0nLCBwbGF0Zm9ybSkKKworICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgor
ICAgICAgICAgICAgcmVzdWx0cyA9IFRlc3RSZXN1bHQuYWxsKCkKKyAgICAgICAgICAgIHJlc3Vs
dHMuZmlsdGVyKCduYW1lID0nLCB0ZXN0X25hbWUpCisgICAgICAgICAgICByZXN1bHRzLmZpbHRl
cignYnVpbGQgPScsIGJ1aWxkKQorICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRzOgor
ICAgICAgICAgICAgICAgIHlpZWxkIGJ1aWxkLCByZXN1bHQKKyAgICAgICAgcmFpc2UgU3RvcEl0
ZXJhdGlvbgorCiAKIGNsYXNzIFJlcG9ydExvZyhkYi5Nb2RlbCk6CiAgICAgdGltZXN0YW1wID0g
ZGIuRGF0ZVRpbWVQcm9wZXJ0eShyZXF1aXJlZD1UcnVlKQpJbmRleDogV2Vic2l0ZXMvd2Via2l0
LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21vZGVsc191bml0dGVzdC5weQkocmV2aXNpb24g
MTA4MDk0KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxMCBAQCBpbXBvcnQgdW5pdHRlc3QK
IGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuYXBp
IGltcG9ydCBtZW1jYWNoZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgdGVzdGJl
ZAorZnJvbSB0aW1lIGltcG9ydCBta3RpbWUKIAogCi1jbGFzcyBIZWxwZXJUZXN0cyh1bml0dGVz
dC5UZXN0Q2FzZSk6CitjbGFzcyBEYXRhU3RvcmVUZXN0c0Jhc2UodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0YmVkID0gdGVzdGJlZC5U
ZXN0YmVkKCkKICAgICAgICAgc2VsZi50ZXN0YmVkLmFjdGl2YXRlKCkKQEAgLTQ0LDYgKzQ1LDE4
IEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRv
d24oc2VsZik6CiAgICAgICAgIHNlbGYudGVzdGJlZC5kZWFjdGl2YXRlKCkKIAorICAgIGRlZiBh
c3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKHNlbGYsIG1vZGVsKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsZW4obW9kZWwuYWxsKCkuZmV0Y2goNSkpLCAwKQorCisgICAgZGVmIGFzc2VydE9u
bHlJbnN0YW5jZShzZWxmLCBvbmx5X2luc3Rhc25jZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobGVuKG9ubHlfaW5zdGFzbmNlLl9fY2xhc3NfXy5hbGwoKS5mZXRjaCg1KSksIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShvbmx5X2luc3Rhc25jZS5fX2NsYXNzX18uZ2V0KG9ubHlfaW5z
dGFzbmNlLmtleSgpKSkKKworICAgIGRlZiBhc3NlcnRFcXVhbFVub3JkZXJlZExpc3Qoc2VsZiwg
bGlzdDEsIGxpc3QyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobGlzdDEpLCBzZXQo
bGlzdDIpKQorCisKK2NsYXNzIEhlbHBlclRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CiAgICAg
ZGVmIF9hc3NlcnRfdGhlcmVfaXNfZXhhY3RseV9vbmVfaWRfaG9sZGVyX2FuZF9tYXRjaGVzKHNl
bGYsIGlkKToKICAgICAgICAgaWRfaG9sZGVycyA9IG1vZGVscy5OdW1lcmljSWRIb2xkZXIuYWxs
KCkuZmV0Y2goNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaWRfaG9sZGVycyksIDEp
CkBAIC01NSw4ICs2OCw4IEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgZGVmIGV4ZWN1dGUoaWQpOgogICAgICAgICAgICAgcmV0dXJuIG1vZGVscy5CcmFu
Y2goaWQ9aWQsIG5hbWU9J3NvbWUgYnJhbmNoJywga2V5X25hbWU9J3NvbWUtYnJhbmNoJykucHV0
KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJhbmNoLmFsbCgpLmZl
dGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLk51bWVyaWNJ
ZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05v
SW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0lu
c3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgICAgICBzZWxmLmFzc2VydFRy
dWUobW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4
ZWN1dGUpKQogCkBAIC03MiwxMyArODUsMTMgQEAgY2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBkZWYgZXhlY3V0ZShpZCk6CiAgICAgICAgICAgICByZXR1cm4g
Tm9uZQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2guYWxsKCku
ZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuTnVtZXJp
Y0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlz
Tm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05v
SW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UobW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVy
KGV4ZWN1dGUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2gu
YWxsKCkuZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMu
TnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRU
aGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhl
cmVJc05vSW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQogCiAgICAgZGVmIHRlc3Rf
cmFpc2luZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihz
ZWxmKToKIApAQCAtODYsMTMgKzk5LDEzIEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgogICAgICAgICAgICAgcmV0dXJu
IE5vbmUKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJhbmNoLmFsbCgp
LmZldGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLk51bWVy
aWNJZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJ
c05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNO
b0luc3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhUeXBlRXJyb3IsIG1vZGVscy5jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1l
cmljX2lkX2hvbGRlciwgKGV4ZWN1dGUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVu
KG1vZGVscy5CcmFuY2guYWxsKCkuZmV0Y2goNSkpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5CcmFuY2gpCisgICAgICAg
IHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyKQog
CiAgICAgZGVmIHRlc3RfZGVsZXRlX21vZGVsX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoc2VsZik6
CiAKQEAgLTEwMCwxMiArMTEzLDEyIEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgICAgIHJldHVybiBtb2RlbHMuQnJhbmNoKGlkPWlkLCBuYW1lPSdzb21l
IGJyYW5jaCcsIGtleV9uYW1lPSdzb21lLWJyYW5jaCcpLnB1dCgpCiAKICAgICAgICAgYnJhbmNo
ID0gbW9kZWxzLkJyYW5jaC5nZXQobW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251
bWVyaWNfaWRfaG9sZGVyKGV4ZWN1dGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbiht
b2RlbHMuTnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZldGNoKDUpKSwgMSkKKyAgICAgICAgc2VsZi5h
c3NlcnRPbmx5SW5zdGFuY2UoYnJhbmNoKQogCiAgICAgICAgIG1vZGVscy5kZWxldGVfbW9kZWxf
d2l0aF9udW1lcmljX2lkX2hvbGRlcihicmFuY2gpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4obW9kZWxzLkJyYW5jaC5hbGwoKS5mZXRjaCg1KSksIDApCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobGVuKG1vZGVscy5OdW1lcmljSWRIb2xkZXIuYWxsKCkuZmV0Y2goNSkpLCAwKQor
ICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLkJyYW5jaCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5OdW1lcmljSWRIb2xk
ZXIpCiAKICAgICBkZWYgdGVzdF9tb2RlbF9mcm9tX251bWVyaWNfaWQoc2VsZik6CiAKQEAgLTEy
MCwxNSArMTMzLDM3IEBAIGNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RlbHMubW9kZWxfZnJvbV9udW1lcmljX2lkKGJyYW5j
aC5pZCwgbW9kZWxzLkJyYW5jaCksIE5vbmUpCiAKIAotY2xhc3MgQnVpbGRlclRlc3RzKHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYudGVzdGJl
ZCA9IHRlc3RiZWQuVGVzdGJlZCgpCi0gICAgICAgIHNlbGYudGVzdGJlZC5hY3RpdmF0ZSgpCi0g
ICAgICAgIHNlbGYudGVzdGJlZC5pbml0X2RhdGFzdG9yZV92M19zdHViKCkKK2NsYXNzIEJyYW5j
aFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfY3JlYXRlX2lmX3Bvc3Np
YmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxz
LkJyYW5jaCkKKworICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNyZWF0ZV9pZl9wb3Nz
aWJsZSgnc29tZS1icmFuY2gnLCAnc29tZSBicmFuY2gnKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoYnJhbmNoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnJhbmNoLmtleSgpLm5hbWUoKSwg
J3NvbWUtYnJhbmNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJyYW5jaC5uYW1lLCAnc29t
ZSBicmFuY2gnKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShicmFuY2gpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2RlbHMuQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgn
c29tZS1icmFuY2gnLCAnc29tZSBvdGhlciBicmFuY2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGJyYW5jaC5uYW1lLCAnc29tZSBicmFuY2gnKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJ
bnN0YW5jZShicmFuY2gpCisKKworY2xhc3MgUGxhdGZvcm1UZXN0cyhEYXRhU3RvcmVUZXN0c0Jh
c2UpOgorICAgIGRlZiB0ZXN0X2NyZWF0ZV9pZl9wb3NzaWJsZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5QbGF0Zm9ybSkKKworICAgICAgICBw
bGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZv
cm0nLCAnc29tZSBwbGF0Zm9ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0Zm9ybSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRmb3JtLmtleSgpLm5hbWUoKSwgJ3NvbWUtcGxh
dGZvcm0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm0ubmFtZSwgJ3NvbWUgcGxh
dGZvcm0nKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShwbGF0Zm9ybSkKKworICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKG1vZGVscy5QbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUo
J3NvbWUtcGxhdGZvcm0nLCAnc29tZSBvdGhlciBwbGF0Zm9ybScpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUocGxhdGZvcm0ubmFtZSwgJ3NvbWUgcGxhdGZvcm0nKQorICAgICAgICBzZWxmLmFz
c2VydE9ubHlJbnN0YW5jZShwbGF0Zm9ybSkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAg
ICAgICAgc2VsZi50ZXN0YmVkLmRlYWN0aXZhdGUoKQogCitjbGFzcyBCdWlsZGVyVGVzdHMoRGF0
YVN0b3JlVGVzdHNCYXNlKToKICAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CiAgICAgICAgIGJ1
aWxkZXJfa2V5ID0gbW9kZWxzLkJ1aWxkZXIuY3JlYXRlKCdzb21lIGJ1aWxkZXInLCAnc29tZSBw
YXNzd29yZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShidWlsZGVyX2tleSkKQEAgLTE1OCwx
NSArMTkzLDEyMyBAQCBjbGFzcyBCdWlsZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGJ1aWxkZXIuYXV0aGVudGljYXRlKCdiYWQgcGFzc3dvcmQn
KSkKIAogCi1jbGFzcyBSZXBvcnRMb2codW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRV
cChzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0YmVkID0gdGVzdGJlZC5UZXN0YmVkKCkKLSAgICAg
ICAgc2VsZi50ZXN0YmVkLmFjdGl2YXRlKCkKLSAgICAgICAgc2VsZi50ZXN0YmVkLmluaXRfZGF0
YXN0b3JlX3YzX3N0dWIoKQorZGVmIF9jcmVhdGVfc29tZV9idWlsZGVyKCk6CisgICAgYnJhbmNo
ID0gbW9kZWxzLkJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUg
QnJhbmNoJykKKyAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2li
bGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCisgICAgYnVpbGRlcl9rZXkgPSBt
b2RlbHMuQnVpbGRlci5jcmVhdGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKQorICAg
IHJldHVybiBicmFuY2gsIHBsYXRmb3JtLCBtb2RlbHMuQnVpbGRlci5nZXQoYnVpbGRlcl9rZXkp
CisKKworY2xhc3MgQnVpbGRUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgorICAgIGRlZiB0ZXN0
X2dldF9vcl9pbnNlcnRfZnJvbV9sb2coc2VsZik6CisgICAgICAgIGJyYW5jaCwgcGxhdGZvcm0s
IGJ1aWxkZXIgPSBfY3JlYXRlX3NvbWVfYnVpbGRlcigpCisKKyAgICAgICAgdGltZXN0YW1wID0g
ZGF0ZXRpbWUubm93KCkucmVwbGFjZShtaWNyb3NlY29uZD0wKQorICAgICAgICBsb2cgPSBtb2Rl
bHMuUmVwb3J0TG9nKHRpbWVzdGFtcD10aW1lc3RhbXAsIGhlYWRlcnM9J3NvbWUgaGVhZGVycycs
CisgICAgICAgICAgICBwYXlsb2FkPSd7ImJyYW5jaCI6ICJzb21lLWJyYW5jaCIsICJwbGF0Zm9y
bSI6ICJzb21lLXBsYXRmb3JtIiwgImJ1aWxkZXItbmFtZSI6ICJzb21lLWJ1aWxkZXIiLCcgKwor
ICAgICAgICAgICAgICAgICciYnVpbGQtbnVtYmVyIjogMTIzLCAid2Via2l0LXJldmlzaW9uIjog
NDU2LCAidGltZXN0YW1wIjogJWR9JyAlIGludChta3RpbWUodGltZXN0YW1wLnRpbWV0dXBsZSgp
KSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5CdWls
ZCkKKworICAgICAgICBidWlsZCA9IG1vZGVscy5CdWlsZC5nZXRfb3JfaW5zZXJ0X2Zyb21fbG9n
KGxvZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGJ1aWxkLmJyYW5jaC5rZXkoKSwgYnJhbmNoLmtleSgpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGJ1aWxkLnBsYXRmb3JtLmtleSgpLCBwbGF0Zm9ybS5rZXkoKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChidWlsZC5idWlsZGVyLmtleSgpLCBidWlsZGVyLmtleSgpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLmJ1aWxkTnVtYmVyLCAxMjMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoYnVpbGQucmV2aXNpb24sIDQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChidWlsZC5jaHJvbWl1bVJldmlzaW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGJ1aWxkLnRpbWVzdGFtcCwgdGltZXN0YW1wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0T25s
eUluc3RhbmNlKGJ1aWxkKQorCisKK2NsYXNzIFRlc3RNb2RlbFRlc3RzKERhdGFTdG9yZVRlc3Rz
QmFzZSk6CisgICAgZGVmIHRlc3RfdXBkYXRlX29yX2luc2VydChzZWxmKToKKyAgICAgICAgYnJh
bmNoID0gbW9kZWxzLkJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1Nv
bWUgQnJhbmNoJykKKyAgICAgICAgcGxhdGZvcm0gPSBtb2RlbHMuUGxhdGZvcm0uY3JlYXRlX2lm
X3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuVGVzdCkKKworICAgICAgICB0ZXN0
ID0gbW9kZWxzLlRlc3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0JywgYnJhbmNoLCBwbGF0
Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwodGVzdC5icmFuY2hlcywgW2JyYW5jaC5rZXkoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwodGVzdC5wbGF0Zm9ybXMsIFtwbGF0Zm9ybS5rZXkoKV0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0T25seUluc3RhbmNlKHRlc3QpCisKKyAgICBkZWYgdGVzdF91cGRhdGVfb3JfaW5zZXJ0X3Rv
X3VwZGF0ZShzZWxmKToKKyAgICAgICAgYnJhbmNoID0gbW9kZWxzLkJyYW5jaC5jcmVhdGVfaWZf
cG9zc2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKKyAgICAgICAgcGxhdGZvcm0g
PSBtb2RlbHMuUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1Nv
bWUgUGxhdGZvcm0nKQorICAgICAgICB0ZXN0ID0gbW9kZWxzLlRlc3QudXBkYXRlX29yX2luc2Vy
dCgnc29tZS10ZXN0JywgYnJhbmNoLCBwbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5
SW5zdGFuY2UodGVzdCkKKworICAgICAgICBvdGhlcl9icmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNy
ZWF0ZV9pZl9wb3NzaWJsZSgnb3RoZXItYnJhbmNoJywgJ090aGVyIEJyYW5jaCcpCisgICAgICAg
IG90aGVyX3BsYXRmb3JtID0gbW9kZWxzLlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnb3Ro
ZXItcGxhdGZvcm0nLCAnT3RoZXIgUGxhdGZvcm0nKQorICAgICAgICB0ZXN0ID0gbW9kZWxzLlRl
c3QudXBkYXRlX29yX2luc2VydCgnc29tZS10ZXN0Jywgb3RoZXJfYnJhbmNoLCBvdGhlcl9wbGF0
Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UodGVzdCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbFVub3JkZXJlZExpc3QodGVzdC5icmFuY2hlcywgW2JyYW5jaC5rZXkoKSwg
b3RoZXJfYnJhbmNoLmtleSgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVub3JkZXJlZExp
c3QodGVzdC5wbGF0Zm9ybXMsIFtwbGF0Zm9ybS5rZXkoKSwgb3RoZXJfcGxhdGZvcm0ua2V5KCld
KQorCisKK2NsYXNzIFRlc3RSZXN1bHRUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgorICAgIGRl
ZiBfY3JlYXRlX2J1aWxkKHNlbGYpOgorICAgICAgICBicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVy
ID0gX2NyZWF0ZV9zb21lX2J1aWxkZXIoKQorICAgICAgICBidWlsZF9rZXkgPSBtb2RlbHMuQnVp
bGQoa2V5X25hbWU9J3NvbWUtYnVpbGQnLCBicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9y
bSwgYnVpbGRlcj1idWlsZGVyLAorICAgICAgICAgICAgYnVpbGROdW1iZXI9MSwgcmV2aXNpb249
MTAwLCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpLnB1dCgpCisgICAgICAgIHJldHVybiBtb2Rl
bHMuQnVpbGQuZ2V0KGJ1aWxkX2tleSkKKworICAgIGRlZiB0ZXN0X2dldF9vcl9pbnNlcnRfdmFs
dWUoc2VsZik6CisgICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5UZXN0UmVzdWx0KQorICAgICAg
ICByZXN1bHQgPSBtb2RlbHMuVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0X2Zyb21fcGFyc2VkX2pz
b24oJ3NvbWUtdGVzdCcsIGJ1aWxkLCA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFu
Y2UocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5uYW1lLCAnc29tZS10
ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuYnVpbGQua2V5KCksIGJ1aWxk
LmtleSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZSwgNTAuMCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVNZWRpYW4sIE5vbmUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlU3RkZXYsIE5vbmUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWluLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHJlc3VsdC52YWx1ZU1heCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldF9vcl9pbnNlcnRf
c3RhdF92YWx1ZShzZWxmKToKKyAgICAgICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGQoKQor
ICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLlRlc3RSZXN1bHQp
CisgICAgICAgIHJlc3VsdCA9IG1vZGVscy5UZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9w
YXJzZWRfanNvbignc29tZS10ZXN0JywgYnVpbGQsCisgICAgICAgICAgICB7ImF2ZyI6IDQwLCAi
bWVkaWFuIjogIjQwLjEiLCAic3RkZXYiOiAzLjI1LCAibWluIjogMzAuNSwgIm1heCI6IDQ1fSkK
KyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UocmVzdWx0KQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHJlc3VsdC5uYW1lLCAnc29tZS10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXN1bHQuYnVpbGQua2V5KCksIGJ1aWxkLmtleSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdC52YWx1ZSwgNDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1
bHQudmFsdWVNZWRpYW4sIDQwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZh
bHVlU3RkZXYsIDMuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWlu
LCAzMC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1heCwgNDUpCisK
KyAgICBkZWYgX2NyZWF0ZV9yZXN1bHRzKHNlbGYsIHRlc3RfbmFtZSwgdmFsdWVzKToKKyAgICAg
ICAgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9jcmVhdGVfc29tZV9idWlsZGVyKCkKKyAg
ICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFs
dWVzKToKKyAgICAgICAgICAgIGJ1aWxkID0gbW9kZWxzLkJ1aWxkKGJyYW5jaD1icmFuY2gsIHBs
YXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxkZXIsCisgICAgICAgICAgICAgICAgYnVpbGRO
dW1iZXI9aSwgcmV2aXNpb249MTAwICsgaSwgdGltZXN0YW1wPWRhdGV0aW1lLm5vdygpKQorICAg
ICAgICAgICAgYnVpbGQucHV0KCkKKyAgICAgICAgICAgIHJlc3VsdCA9IG1vZGVscy5UZXN0UmVz
dWx0KG5hbWU9dGVzdF9uYW1lLCBidWlsZD1idWlsZCwgdmFsdWU9dmFsdWUpCisgICAgICAgICAg
ICByZXN1bHQucHV0KCkKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaCwgcGxhdGZvcm0sIHJlc3VsdHMKKworICAgIGRlZiB0ZXN0X2dlbmVy
YXRlX3J1bnMoc2VsZik6CisgICAgICAgIGJyYW5jaCwgcGxhdGZvcm0sIHJlc3VsdHMgPSBzZWxm
Ll9jcmVhdGVfcmVzdWx0cygnc29tZS10ZXN0JywgWzUwLjAsIDUxLjAsIDUyLjAsIDQ5LjAsIDQ4
LjBdKQorICAgICAgICBsYXN0X2kgPSAwCisgICAgICAgIGZvciBpLCAoYnVpbGQsIHJlc3VsdCkg
aW4gZW51bWVyYXRlKG1vZGVscy5UZXN0UmVzdWx0LmdlbmVyYXRlX3J1bnMoYnJhbmNoLCBwbGF0
Zm9ybSwgInNvbWUtdGVzdCIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQu
YnVpbGROdW1iZXIsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLnJldmlz
aW9uLCAxMDAgKyBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQubmFtZSwg
J3NvbWUtdGVzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZSwg
cmVzdWx0c1tpXS52YWx1ZSkKKyAgICAgICAgICAgIGxhc3RfaSA9IGkKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGxhc3RfaSArIDEsIGxlbihyZXN1bHRzKSkKIAotICAgIGRlZiB0ZWFyRG93bihz
ZWxmKToKLSAgICAgICAgc2VsZi50ZXN0YmVkLmRlYWN0aXZhdGUoKQogCitjbGFzcyBSZXBvcnRM
b2dUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgogICAgIGRlZiBfY3JlYXRlX2xvZ193aXRoX3Bh
eWxvYWQoc2VsZiwgcGF5bG9hZCk6CiAgICAgICAgIHJldHVybiBtb2RlbHMuUmVwb3J0TG9nKHRp
bWVzdGFtcD1kYXRldGltZS5ub3coKSwgaGVhZGVycz0nc29tZSBoZWFkZXJzJywgcGF5bG9hZD1w
YXlsb2FkKQogCkBAIC0yMDYsNyArMzQ5LDI3IEBAIGNsYXNzIFJlcG9ydExvZyh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7
ImJ1aWxkZXItbmFtZSI6ICIlcyJ9JyAlIGJ1aWxkZXJfbmFtZSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsb2cuYnVpbGRlcigpLmtleSgpLCBidWlsZGVyX2tleSkKIAotICAgICMgRklYTUUg
dGVzdF9icmFuY2ggYW5kIHRlc3RfcGxhdGZvcm0KKyAgICBkZWYgdGVzdF9icmFuY2goc2VsZik6
CisgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7ImtleSI6ICJ2
YWx1ZSJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2cuYnJhbmNoKCksIE5vbmUpCisK
KyAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3siYnJhbmNoIjog
InNvbWUtYnJhbmNoIn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5icmFuY2goKSwg
Tm9uZSkKKworICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJs
ZSgic29tZS1icmFuY2giLCAiU29tZSBCcmFuY2giKQorICAgICAgICBsb2cgPSBzZWxmLl9jcmVh
dGVfbG9nX3dpdGhfcGF5bG9hZCgneyJicmFuY2giOiAic29tZS1icmFuY2gifScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobG9nLmJyYW5jaCgpLmtleSgpLCBicmFuY2gua2V5KCkpCisKKyAg
ICBkZWYgdGVzdF9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xv
Z193aXRoX3BheWxvYWQoJ3sia2V5IjogInZhbHVlIn0nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxvZy5wbGF0Zm9ybSgpLCBOb25lKQorCisgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9s
b2dfd2l0aF9wYXlsb2FkKCd7InBsYXRmb3JtIjogInNvbWUtcGxhdGZvcm0ifScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRmb3JtKCksIE5vbmUpCisKKyAgICAgICAgcGxhdGZv
cm0gPSBtb2RlbHMuUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCJzb21lLXBsYXRmb3JtIiwg
IlNvbWUgUGxhdGZvcm0iKQorICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5
bG9hZCgneyJwbGF0Zm9ybSI6ICJzb21lLXBsYXRmb3JtIn0nKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxvZy5wbGF0Zm9ybSgpLmtleSgpLCBwbGF0Zm9ybS5rZXkoKSkKIAogICAgIGRlZiB0
ZXN0X2J1aWxkX251bWJlcihzZWxmKToKICAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193
aXRoX3BheWxvYWQoJ3siYnVpbGQtbnVtYmVyIjogMTIzfScpCkBAIC0yMzAsMjIgKzM5MywxOSBA
QCBjbGFzcyBSZXBvcnRMb2codW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxvZy53ZWJraXRfcmV2aXNpb24oKSwgTm9uZSkKIAogCi1jbGFzcyBQZXJzaXN0ZW50
Q2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQZXJzaXN0ZW50Q2FjaGVUZXN0
cyhEYXRhU3RvcmVUZXN0c0Jhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2Vs
Zi50ZXN0YmVkID0gdGVzdGJlZC5UZXN0YmVkKCkKICAgICAgICAgc2VsZi50ZXN0YmVkLmFjdGl2
YXRlKCkKICAgICAgICAgc2VsZi50ZXN0YmVkLmluaXRfZGF0YXN0b3JlX3YzX3N0dWIoKQogICAg
ICAgICBzZWxmLnRlc3RiZWQuaW5pdF9tZW1jYWNoZV9zdHViKCkKIAotICAgIGRlZiB0ZWFyRG93
bihzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0YmVkLmRlYWN0aXZhdGUoKQotCiAgICAgZGVmIF9h
c3NlcnRfcGVyc2lzdGVudF9jYWNoZShzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobW9kZWxzLlBlcnNpc3RlbnRDYWNoZS5nZXRfYnlfa2V5X25hbWUobmFtZSku
dmFsdWUsIHZhbHVlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWNhY2hlLmdldChuYW1l
KSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9zZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKG1vZGVscy5QZXJzaXN0ZW50Q2FjaGUuYWxsKCkuZmV0Y2goNSkpLCAwKQorICAg
ICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLlBlcnNpc3RlbnRDYWNo
ZSkKIAogICAgICAgICBtb2RlbHMuUGVyc2lzdGVudENhY2hlLnNldF9jYWNoZSgnc29tZS1jYWNo
ZScsICdzb21lIGRhdGEnKQogICAgICAgICBzZWxmLl9hc3NlcnRfcGVyc2lzdGVudF9jYWNoZSgn
c29tZS1jYWNoZScsICdzb21lIGRhdGEnKQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5CShyZXZp
c2lvbiAxMDgwOTMpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRf
cHJvY2Vzc19oYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIGZyb20g
bW9kZWxzIGltcG9ydCBCdWlsZAogZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZwogZnJvbSBt
b2RlbHMgaW1wb3J0IFRlc3QKIGZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Ci1mcm9tIG1v
ZGVscyBpbXBvcnQgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIK
IAogCiBjbGFzcyBSZXBvcnRQcm9jZXNzSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToK
QEAgLTU1LDExICs1NCwxMSBAQCBjbGFzcyBSZXBvcnRQcm9jZXNzSGFuZGxlcih3ZWJhcHAyLlJl
cXVlCiAKICAgICAgICAgYnJhbmNoID0gbG9nLmJyYW5jaCgpCiAgICAgICAgIHBsYXRmb3JtID0g
bG9nLnBsYXRmb3JtKCkKLSAgICAgICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9z
c2libGUobG9nLCBicmFuY2gsIHBsYXRmb3JtKQorICAgICAgICBidWlsZCA9IEJ1aWxkLmdldF9v
cl9pbnNlcnRfZnJvbV9sb2cobG9nKQogCiAgICAgICAgIGZvciB0ZXN0X25hbWUsIHJlc3VsdCBp
biBsb2cucmVzdWx0cygpLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2Fk
ZF90ZXN0X2lmX25lZWRlZCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pCi0gICAgICAgICAg
ICBzZWxmLl9hZGRfdGVzdF9yZXN1bHRfaWZfbmVlZGVkKHRlc3RfbmFtZSwgYnVpbGQsIHJlc3Vs
dCkKKyAgICAgICAgICAgIHRlc3QgPSBUZXN0LnVwZGF0ZV9vcl9pbnNlcnQodGVzdF9uYW1lLCBi
cmFuY2gsIHBsYXRmb3JtKQorICAgICAgICAgICAgVGVzdFJlc3VsdC5nZXRfb3JfaW5zZXJ0X2Zy
b21fcGFyc2VkX2pzb24odGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0KQogICAgICAgICAgICAgc2No
ZWR1bGVfcnVuc191cGRhdGUodGVzdC5pZCwgYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCkKIAogICAg
ICAgICBsb2cgPSBSZXBvcnRMb2cuZ2V0KGxvZy5rZXkoKSkKQEAgLTcwLDQyICs2OSwzIEBAIGNs
YXNzIFJlcG9ydFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWUKICAgICAgICAgc2NoZWR1bGVf
bWFuaWZlc3RfdXBkYXRlKCkKIAogICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgnT0sn
KQotCi0gICAgZGVmIF9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUoc2VsZiwgbG9nLCBicmFuY2gs
IHBsYXRmb3JtKToKLSAgICAgICAgYnVpbGRlciA9IGxvZy5idWlsZGVyKCkKLSAgICAgICAga2V5
X25hbWUgPSBidWlsZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1lKGxvZy50aW1l
c3RhbXAoKS50aW1ldHVwbGUoKSkpKQotCi0gICAgICAgIHJldHVybiBCdWlsZC5nZXRfb3JfaW5z
ZXJ0KGtleV9uYW1lLCBicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRlcj1i
dWlsZGVyLCBidWlsZE51bWJlcj1sb2cuYnVpbGRfbnVtYmVyKCksCi0gICAgICAgICAgICB0aW1l
c3RhbXA9bG9nLnRpbWVzdGFtcCgpLCByZXZpc2lvbj1sb2cud2Via2l0X3JldmlzaW9uKCksIGNo
cm9taXVtUmV2aXNpb249bG9nLmNocm9taXVtX3JldmlzaW9uKCkpCi0KLSAgICBkZWYgX2FkZF90
ZXN0X2lmX25lZWRlZChzZWxmLCB0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pOgotCi0gICAg
ICAgIGRlZiBleGVjdXRlKGlkKToKLSAgICAgICAgICAgIHRlc3QgPSBUZXN0LmdldF9ieV9rZXlf
bmFtZSh0ZXN0X25hbWUpCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IE5vbmUKLSAgICAgICAg
ICAgIGlmIG5vdCB0ZXN0OgotICAgICAgICAgICAgICAgIHRlc3QgPSBUZXN0KGlkPWlkLCBuYW1l
PXRlc3RfbmFtZSwga2V5X25hbWU9dGVzdF9uYW1lKQotICAgICAgICAgICAgICAgIHJldHVyblZh
bHVlID0gdGVzdAotICAgICAgICAgICAgaWYgYnJhbmNoLmtleSgpIG5vdCBpbiB0ZXN0LmJyYW5j
aGVzOgotICAgICAgICAgICAgICAgIHRlc3QuYnJhbmNoZXMuYXBwZW5kKGJyYW5jaC5rZXkoKSkK
LSAgICAgICAgICAgIGlmIHBsYXRmb3JtLmtleSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKLSAg
ICAgICAgICAgICAgICB0ZXN0LnBsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0ua2V5KCkpCi0gICAg
ICAgICAgICB0ZXN0LnB1dCgpCi0gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4
ZWN1dGUpIG9yIFRlc3QuZ2V0X2J5X2tleV9uYW1lKHRlc3RfbmFtZSkKLQotICAgIGRlZiBfYWRk
X3Rlc3RfcmVzdWx0X2lmX25lZWRlZChzZWxmLCB0ZXN0X25hbWUsIGJ1aWxkLCByZXN1bHQpOgot
ICAgICAgICBrZXlfbmFtZSA9IFRlc3RSZXN1bHQua2V5X25hbWUoYnVpbGQsIHRlc3RfbmFtZSkK
LQotICAgICAgICBkZWYgX2Zsb2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKLSAgICAgICAg
ICAgIHZhbHVlID0gZGljdGlvbmFyeS5nZXQoa2V5KQotICAgICAgICAgICAgaWYgdmFsdWU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpOgotICAgICAgICAg
ICAgcmV0dXJuIFRlc3RSZXN1bHQuZ2V0X29yX2luc2VydChrZXlfbmFtZSwgbmFtZT10ZXN0X25h
bWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHQpKQotCi0gICAgICAgIHJldHVybiBU
ZXN0UmVzdWx0LmdldF9vcl9pbnNlcnQoa2V5X25hbWUsIG5hbWU9dGVzdF9uYW1lLCBidWlsZD1i
dWlsZCwgdmFsdWU9ZmxvYXQocmVzdWx0WydhdmcnXSksCi0gICAgICAgICAgICB2YWx1ZU1lZGlh
bj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdtZWRpYW4nKSwgdmFsdWVTdGRldj1fZmxvYXRfb3Jf
bm9uZShyZXN1bHQsICdzdGRldicpLAotICAgICAgICAgICAgdmFsdWVNaW49X2Zsb2F0X29yX25v
bmUocmVzdWx0LCAnbWluJyksIHZhbHVlTWF4PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21heCcp
KQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3J1bnNfaGFu
ZGxlci5weQkocmV2aXNpb24gMTA4MDk0KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vcnVuc19oYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NSw1MiArNDUsNDcgQEAg
ZnJvbSBtb2RlbHMgaW1wb3J0IG1vZGVsX2Zyb21fbnVtZXJpY19pZAogCiAKIGNsYXNzIFJ1bnNI
YW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBnZXQoc2VsZik6CisgICAg
ICAgIHNlbGYucG9zdCgpCisKICAgICBkZWYgcG9zdChzZWxmKToKICAgICAgICAgc2VsZi5yZXNw
b25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04
JwogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3RfaWQgPSBpbnQoc2VsZi5yZXF1ZXN0
LmdldCgnaWQnLCAwKSkKLSAgICAgICAgICAgIGJyYW5jaF9pZCA9IGludChzZWxmLnJlcXVlc3Qu
Z2V0KCdicmFuY2hpZCcsIDApKQotICAgICAgICAgICAgcGxhdGZvcm1faWQgPSBpbnQoc2VsZi5y
ZXF1ZXN0LmdldCgncGxhdGZvcm1pZCcsIDApKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgot
ICAgICAgICAgICAgIyBGSVhNRTogT3V0cHV0IGFuIGVycm9yIGhlcmUKLSAgICAgICAgICAgIHRl
c3RfaWQgPSAwCi0gICAgICAgICAgICBicmFuY2hfaWQgPSAwCi0gICAgICAgICAgICBwbGF0Zm9y
bV9pZCA9IDAKKyAgICAgICAgIyBMZXQgZXhjZXB0aW9ucyByYWlzZSBhcyB0aGlzIGhhbmRsZXIg
aXMgY2FsbGVkIGluc2lkZSBhIHRhc2stcXVldWUKKyAgICAgICAgdGVzdF9pZCA9IGludChzZWxm
LnJlcXVlc3QuZ2V0KCdpZCcsIDApKQorICAgICAgICBicmFuY2hfaWQgPSBpbnQoc2VsZi5yZXF1
ZXN0LmdldCgnYnJhbmNoaWQnLCAwKSkKKyAgICAgICAgcGxhdGZvcm1faWQgPSBpbnQoc2VsZi5y
ZXF1ZXN0LmdldCgncGxhdGZvcm1pZCcsIDApKQogCiAgICAgICAgICMgRklYTUU6IEp1c3QgZmV0
Y2ggYnVpbGRzIHNwZWNpZmllZCBieSAiZGF5cyIKICAgICAgICAgIyBkYXlzID0gc2VsZi5yZXF1
ZXN0LmdldCgnZGF5cycsIDM2NSkKIAotICAgICAgICBidWlsZHMgPSBCdWlsZC5hbGwoKQotICAg
ICAgICBidWlsZHMuZmlsdGVyKCdicmFuY2ggPScsIG1vZGVsX2Zyb21fbnVtZXJpY19pZChicmFu
Y2hfaWQsIEJyYW5jaCkpCi0gICAgICAgIGJ1aWxkcy5maWx0ZXIoJ3BsYXRmb3JtID0nLCBtb2Rl
bF9mcm9tX251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKSkKLQorICAgICAgICBicmFu
Y2ggPSBtb2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoX2lkLCBCcmFuY2gpCisgICAgICAgIHBs
YXRmb3JtID0gbW9kZWxfZnJvbV9udW1lcmljX2lkKHBsYXRmb3JtX2lkLCBQbGF0Zm9ybSkKICAg
ICAgICAgdGVzdCA9IG1vZGVsX2Zyb21fbnVtZXJpY19pZCh0ZXN0X2lkLCBUZXN0KQotICAgICAg
ICB0ZXN0X25hbWUgPSB0ZXN0Lm5hbWUgaWYgdGVzdCBlbHNlIE5vbmUKKyAgICAgICAgYXNzZXJ0
IGJyYW5jaAorICAgICAgICBhc3NlcnQgcGxhdGZvcm0KKyAgICAgICAgYXNzZXJ0IHRlc3QKKwog
ICAgICAgICB0ZXN0X3J1bnMgPSBbXQogICAgICAgICBhdmVyYWdlcyA9IHt9CiAgICAgICAgIHZh
bHVlcyA9IFtdCiAgICAgICAgIHRpbWVzdGFtcHMgPSBbXQogCi0gICAgICAgIGZvciBidWlsZCBp
biBidWlsZHM6Ci0gICAgICAgICAgICByZXN1bHRzID0gVGVzdFJlc3VsdC5hbGwoKQotICAgICAg
ICAgICAgcmVzdWx0cy5maWx0ZXIoJ25hbWUgPScsIHRlc3RfbmFtZSkKLSAgICAgICAgICAgIHJl
c3VsdHMuZmlsdGVyKCdidWlsZCA9JywgYnVpbGQpCi0gICAgICAgICAgICBmb3IgcmVzdWx0IGlu
IHJlc3VsdHM6Ci0gICAgICAgICAgICAgICAgYnVpbGRlcklkID0gYnVpbGQuYnVpbGRlci5rZXko
KS5pZCgpCi0gICAgICAgICAgICAgICAgcG9zaXhUaW1lc3RhbXAgPSBta3RpbWUoYnVpbGQudGlt
ZXN0YW1wLnRpbWV0dXBsZSgpKQotICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MgPSBOb25lCi0g
ICAgICAgICAgICAgICAgaWYgcmVzdWx0LnZhbHVlU3RkZXYgIT0gTm9uZSBhbmQgcmVzdWx0LnZh
bHVlTWluICE9IE5vbmUgYW5kIHJlc3VsdC52YWx1ZU1heCAhPSBOb25lOgotICAgICAgICAgICAg
ICAgICAgICBzdGF0aXN0aWNzID0geydzdGRldic6IHJlc3VsdC52YWx1ZVN0ZGV2LCAnbWluJzog
cmVzdWx0LnZhbHVlTWluLCAnbWF4JzogcmVzdWx0LnZhbHVlTWF4fQotICAgICAgICAgICAgICAg
IHRlc3RfcnVucy5hcHBlbmQoW3Jlc3VsdC5rZXkoKS5pZCgpLAotICAgICAgICAgICAgICAgICAg
ICBbYnVpbGQua2V5KCkuaWQoKSwgYnVpbGQuYnVpbGROdW1iZXIsIGJ1aWxkLnJldmlzaW9uXSwK
LSAgICAgICAgICAgICAgICAgICAgcG9zaXhUaW1lc3RhbXAsIHJlc3VsdC52YWx1ZSwgMCwgICMg
cnVuTnVtYmVyCi0gICAgICAgICAgICAgICAgICAgIFtdLCAgIyBhbm5vdGF0aW9ucwotICAgICAg
ICAgICAgICAgICAgICBidWlsZGVySWQsIHN0YXRpc3RpY3NdKQotICAgICAgICAgICAgICAgICMg
RklYTUU6IENhbGN1bGF0ZSB0aGUgYXZlcmFnZTsgaW4gcHJhY3RpY2UsIHdlIHdvdWxkbid0IGhh
dmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgYSBnaXZlbiByZXZpc2lvbgotICAgICAgICAgICAg
ICAgIGF2ZXJhZ2VzW2J1aWxkLnJldmlzaW9uXSA9IHJlc3VsdC52YWx1ZQotICAgICAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmQocmVzdWx0LnZhbHVlKQotICAgICAgICAgICAgICAgIHRpbWVzdGFt
cHMuYXBwZW5kKHBvc2l4VGltZXN0YW1wKQorICAgICAgICBmb3IgYnVpbGQsIHJlc3VsdCBpbiBU
ZXN0UmVzdWx0LmdlbmVyYXRlX3J1bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1lKToKKyAg
ICAgICAgICAgIGJ1aWxkZXJJZCA9IGJ1aWxkLmJ1aWxkZXIua2V5KCkuaWQoKQorICAgICAgICAg
ICAgcG9zaXhUaW1lc3RhbXAgPSBta3RpbWUoYnVpbGQudGltZXN0YW1wLnRpbWV0dXBsZSgpKQor
ICAgICAgICAgICAgc3RhdGlzdGljcyA9IE5vbmUKKyAgICAgICAgICAgIGlmIHJlc3VsdC52YWx1
ZVN0ZGV2ICE9IE5vbmUgYW5kIHJlc3VsdC52YWx1ZU1pbiAhPSBOb25lIGFuZCByZXN1bHQudmFs
dWVNYXggIT0gTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzID0geydzdGRldic6IHJl
c3VsdC52YWx1ZVN0ZGV2LCAnbWluJzogcmVzdWx0LnZhbHVlTWluLCAnbWF4JzogcmVzdWx0LnZh
bHVlTWF4fQorICAgICAgICAgICAgdGVzdF9ydW5zLmFwcGVuZChbcmVzdWx0LmtleSgpLmlkKCks
CisgICAgICAgICAgICAgICAgW2J1aWxkLmtleSgpLmlkKCksIGJ1aWxkLmJ1aWxkTnVtYmVyLCBi
dWlsZC5yZXZpc2lvbl0sCisgICAgICAgICAgICAgICAgcG9zaXhUaW1lc3RhbXAsIHJlc3VsdC52
YWx1ZSwgMCwgICMgcnVuTnVtYmVyCisgICAgICAgICAgICAgICAgW10sICAjIGFubm90YXRpb25z
CisgICAgICAgICAgICAgICAgYnVpbGRlcklkLCBzdGF0aXN0aWNzXSkKKyAgICAgICAgICAgICMg
RklYTUU6IENhbGN1bGF0ZSB0aGUgYXZlcmFnZTsgaW4gcHJhY3RpY2UsIHdlIHdvdWxkbid0IGhh
dmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgYSBnaXZlbiByZXZpc2lvbgorICAgICAgICAgICAg
YXZlcmFnZXNbYnVpbGQucmV2aXNpb25dID0gcmVzdWx0LnZhbHVlCisgICAgICAgICAgICB2YWx1
ZXMuYXBwZW5kKHJlc3VsdC52YWx1ZSkKKyAgICAgICAgICAgIHRpbWVzdGFtcHMuYXBwZW5kKHBv
c2l4VGltZXN0YW1wKQogCiAgICAgICAgIHJlc3VsdCA9IGpzb24uZHVtcHMoewogICAgICAgICAg
ICAgJ3Rlc3RfcnVucyc6IHRlc3RfcnVucywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127779</attachid>
            <date>2012-02-20 01:17:29 -0800</date>
            <delta_ts>2012-02-20 16:07:57 -0800</delta_ts>
            <desc>Fixed per morrita&apos;s comment</desc>
            <filename>bug-78989-20120220011728.patch</filename>
            <type>text/plain</type>
            <size>31215</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwODIw
OSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAy
LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgbW9y
ZSBsb2dpYyBmcm9tIGhhbmRsZXIgY2xhc3NlcyB0byBtb2RlbCBjbGFzc2VzIGFuZCBhZGQgdW5p
dCB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHRyYWN0ZWQgdmFyaW91cyBmdW5jdGlvbnMgZnJvbSBDcmVhdGVIYW5kbGVyLCBSZXBvcnRIYW5s
ZGVyLCBhbmQgUnVuc0hhbmxkZXIgdG8gbW9kZWwgY2xhc3NlcworICAgICAgICBpbiBvcmRlciB0
byB1bml0LXRlc3QgdGhlbSwgYWRkZWQgRGF0YVN0b3JlVGVzdHNCYXNlIHRvIHJlZHVjZSB0aGUg
Y29kZSBkdXBsaWNhdGlvbiBpbiB0ZXN0cywKKyAgICAgICAgYW5kIGFkZGVkIGEgd2hvbGUgYnVu
Y2ggb2YgdW5pdCB0ZXN0cyBpbiBtb2RlbHNfdW5pdHRlc3QucHkuCisKKyAgICAgICAgKiBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jcmVhdGVfaGFuZGxlci5weToKKyAgICAgICAg
KENyZWF0ZUhhbmRsZXIuX2NyZWF0ZV9icmFuY2gpOgorICAgICAgICAoQ3JlYXRlSGFuZGxlci5f
Y3JlYXRlX3BsYXRmb3JtKToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9tb2RlbHMucHk6CisgICAgICAgIChfY3JlYXRlX2lmX3Bvc3NpYmxlKToKKyAgICAgICAg
KF9jcmVhdGVfaWZfcG9zc2libGUuZXhlY3V0ZSk6CisgICAgICAgIChCcmFuY2gpOgorICAgICAg
ICAoQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSk6CisgICAgICAgIChQbGF0Zm9ybSk6CisgICAg
ICAgIChQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGQpOgorICAg
ICAgICAoQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xvZyk6CisgICAgICAgIChUZXN0KToKKyAg
ICAgICAgKFRlc3QudXBkYXRlX29yX2luc2VydCk6CisgICAgICAgIChUZXN0LnVwZGF0ZV9vcl9p
bnNlcnQuZXhlY3V0ZSk6CisgICAgICAgIChUZXN0UmVzdWx0KToKKyAgICAgICAgKFRlc3RSZXN1
bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKToKKyAgICAgICAgKFRlc3RSZXN1bHQu
Z2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uLl9mbG9hdF9vcl9ub25lKToKKyAgICAgICAg
KFRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVucyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRGF0YVN0b3JlVGVz
dHNCYXNlKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRUaGVyZUlzTm9JbnN0
YW5jZU9mKToKKyAgICAgICAgKERhdGFTdG9yZVRlc3RzQmFzZS5hc3NlcnRPbmx5SW5zdGFuY2Up
OgorICAgICAgICAoRGF0YVN0b3JlVGVzdHNCYXNlLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCk6
CisgICAgICAgIChIZWxwZXJUZXN0cyk6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X2NyZWF0
ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKToKKyAgICAgICAgKEhlbHBl
clRlc3RzLnRlc3RfZmFpbGluZ19pbl9jcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmlj
X2lkX2hvbGRlcik6CisgICAgICAgIChIZWxwZXJUZXN0cy50ZXN0X3JhaXNpbmdfaW5fY3JlYXRl
X2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIpOgorICAgICAgICAoSGVscGVy
VGVzdHMudGVzdF9kZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcik6CisgICAgICAg
IChCcmFuY2hUZXN0cyk6CisgICAgICAgIChCcmFuY2hUZXN0cy50ZXN0X2NyZWF0ZV9pZl9wb3Nz
aWJsZSk6CisgICAgICAgIChQbGF0Zm9ybVRlc3RzKToKKyAgICAgICAgKFBsYXRmb3JtVGVzdHMu
dGVzdF9jcmVhdGVfaWZfcG9zc2libGUpOgorICAgICAgICAoQnVpbGRlclRlc3RzKToKKyAgICAg
ICAgKF9jcmVhdGVfc29tZV9idWlsZGVyKToKKyAgICAgICAgKEJ1aWxkVGVzdHMpOgorICAgICAg
ICAoQnVpbGRUZXN0cy50ZXN0X2dldF9vcl9pbnNlcnRfZnJvbV9sb2cpOgorICAgICAgICAoVGVz
dE1vZGVsVGVzdHMpOgorICAgICAgICAoVGVzdE1vZGVsVGVzdHMudGVzdF91cGRhdGVfb3JfaW5z
ZXJ0KToKKyAgICAgICAgKFRlc3RNb2RlbFRlc3RzLnRlc3RfdXBkYXRlX29yX2luc2VydF90b191
cGRhdGUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzKToKKyAgICAgICAgKFRlc3RSZXN1bHRU
ZXN0cy5fY3JlYXRlX2J1aWxkKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy50ZXN0X2dldF9v
cl9pbnNlcnRfdmFsdWUpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2V0X29yX2lu
c2VydF9zdGF0X3ZhbHVlKToKKyAgICAgICAgKFRlc3RSZXN1bHRUZXN0cy5fY3JlYXRlX3Jlc3Vs
dHMpOgorICAgICAgICAoVGVzdFJlc3VsdFRlc3RzLnRlc3RfZ2VuZXJhdGVfcnVucyk6CisgICAg
ICAgIChSZXBvcnRMb2dUZXN0cyk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X2JyYW5j
aCk6CisgICAgICAgIChSZXBvcnRMb2dUZXN0cy50ZXN0X3BsYXRmb3JtKToKKyAgICAgICAgKFBl
cnNpc3RlbnRDYWNoZVRlc3RzKToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnNldFVw
KToKKyAgICAgICAgKFBlcnNpc3RlbnRDYWNoZVRlc3RzLnRlc3Rfc2V0KToKKyAgICAgICAgKiBX
ZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5
OgorICAgICAgICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIucG9zdCk6CisgICAgICAgICogV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5OgorICAgICAgICAoUnVu
c0hhbmRsZXIuZ2V0KToKKyAgICAgICAgKFJ1bnNIYW5kbGVyLnBvc3QpOgorCiAyMDEyLTAyLTE5
ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCiAgICAgICAgIFtHVEtd
IFJlbW92ZSB1bnVzZWQgR1NldHRpbmdzIHN0dWZmCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9hcHAueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9hcHAueWFtbAkocmV2aXNpb24gMTA4MjA5KQorKysgV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiBhcHBsaWNhdGlvbjogd2Via2l0LXBlcmYKIHZlcnNpb246IDEzCi1ydW50aW1lOiBweXRo
b24yNworcnVudGltZTogcHl0aG9uCiBhcGlfdmVyc2lvbjogMQogdGhyZWFkc2FmZTogZmFsc2UK
IApJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY3JlYXRlX2hhbmRsZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY3JlYXRl
X2hhbmRsZXIucHkJKHJldmlzaW9uIDEwODIwOSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL2NyZWF0ZV9oYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04NSwzMyArODUs
OSBAQCBjbGFzcyBDcmVhdGVIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAgICAgZGVmIF9j
cmVhdGVfYnJhbmNoKHNlbGYsIGtleSwgbmFtZSk6CiAgICAgICAgIGlmIG5vdCBrZXkgb3Igbm90
IG5hbWU6CiAgICAgICAgICAgICByZXR1cm4gJ0ludmFsaWQga2V5IG9yIG5hbWUnCi0KLSAgICAg
ICAgZXJyb3IgPSBbTm9uZV0KLQotICAgICAgICBkZWYgZXhlY3V0ZShpZCk6Ci0gICAgICAgICAg
ICBpZiBCcmFuY2guZ2V0X2J5X2tleV9uYW1lKGtleSk6Ci0gICAgICAgICAgICAgICAgZXJyb3Jb
MF0gPSAnQnJhbmNoICIlcyIgYWxyZWFkeSBleGlzdHMnICUga2V5Ci0gICAgICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICAgICBicmFuY2ggPSBCcmFuY2goaWQ9aWQsIG5hbWU9bmFtZSwga2V5
X25hbWU9a2V5KQotICAgICAgICAgICAgYnJhbmNoLnB1dCgpCi0gICAgICAgICAgICByZXR1cm4g
YnJhbmNoCi0KLSAgICAgICAgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9o
b2xkZXIoZXhlY3V0ZSkKLSAgICAgICAgcmV0dXJuIGVycm9yWzBdCisgICAgICAgIHJldHVybiBO
b25lIGlmIEJyYW5jaC5jcmVhdGVfaWZfcG9zc2libGUoa2V5LCBuYW1lKSBlbHNlICdCcmFuY2gg
IiVzIiBhbHJlYWR5IGV4aXN0cycgJSBrZXkKIAogICAgIGRlZiBfY3JlYXRlX3BsYXRmb3JtKHNl
bGYsIGtleSwgbmFtZSk6CiAgICAgICAgIGlmIG5vdCBrZXkgb3Igbm90IG5hbWU6CiAgICAgICAg
ICAgICByZXR1cm4gJ0ludmFsaWQga2V5IG5hbWUnCi0KLSAgICAgICAgZXJyb3IgPSBbTm9uZV0K
LQotICAgICAgICBkZWYgZXhlY3V0ZShpZCk6Ci0gICAgICAgICAgICBpZiBQbGF0Zm9ybS5nZXRf
Ynlfa2V5X25hbWUoa2V5KToKLSAgICAgICAgICAgICAgICBlcnJvclswXSA9ICdQbGF0Zm9ybSAi
JXMiIGFscmVhZHkgZXhpc3RzJyAlIGtleQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybShpZD1pZCwgbmFtZT1uYW1lLCBrZXlfbmFtZT1rZXkp
Ci0gICAgICAgICAgICBwbGF0Zm9ybS5wdXQoKQotICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
Ci0KLSAgICAgICAgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIo
ZXhlY3V0ZSkKLSAgICAgICAgcmV0dXJuIGVycm9yWzBdCisgICAgICAgIHJldHVybiBOb25lIGlm
IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZShrZXksIG5hbWUpIGVsc2UgJ1BsYXRmb3JtICIl
cyIgYWxyZWFkeSBleGlzdHMnICUga2V5CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9tb2RlbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vbW9kZWxzLnB5CShyZXZpc2lvbiAxMDgyMDkpCisrKyBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAgaW1wb3J0IHJlCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQogZnJvbSBnb29nbGUu
YXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0
IG1lbWNhY2hlCitmcm9tIHRpbWUgaW1wb3J0IG1rdGltZQogCiAKIGNsYXNzIE51bWVyaWNJZEhv
bGRlcihkYi5Nb2RlbCk6CkBAIC02OCwxNSArNjksMzUgQEAgZGVmIG1vZGVsX2Zyb21fbnVtZXJp
Y19pZChpZCwgZXhwZWN0ZWRfawogICAgIHJldHVybiBpZF9ob2xkZXIub3duZXIgaWYgaWRfaG9s
ZGVyIGFuZCBpZF9ob2xkZXIub3duZXIgYW5kIGlzaW5zdGFuY2UoaWRfaG9sZGVyLm93bmVyLCBl
eHBlY3RlZF9raW5kKSBlbHNlIE5vbmUKIAogCitkZWYgX2NyZWF0ZV9pZl9wb3NzaWJsZShtb2Rl
bCwga2V5LCBuYW1lKToKKworICAgIGRlZiBleGVjdXRlKGlkKToKKyAgICAgICAgaWYgbW9kZWwu
Z2V0X2J5X2tleV9uYW1lKGtleSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBi
cmFuY2ggPSBtb2RlbChpZD1pZCwgbmFtZT1uYW1lLCBrZXlfbmFtZT1rZXkpCisgICAgICAgIGJy
YW5jaC5wdXQoKQorICAgICAgICByZXR1cm4gYnJhbmNoCisKKyAgICByZXR1cm4gY3JlYXRlX2lu
X3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkKKworCiBjbGFzcyBC
cmFuY2goZGIuTW9kZWwpOgogICAgIGlkID0gZGIuSW50ZWdlclByb3BlcnR5KHJlcXVpcmVkPVRy
dWUpCiAgICAgbmFtZSA9IGRiLlN0cmluZ1Byb3BlcnR5KHJlcXVpcmVkPVRydWUpCiAKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9pZl9wb3NzaWJsZShrZXksIG5hbWUpOgorICAg
ICAgICByZXR1cm4gX2NyZWF0ZV9pZl9wb3NzaWJsZShCcmFuY2gsIGtleSwgbmFtZSkKKwogCiBj
bGFzcyBQbGF0Zm9ybShkYi5Nb2RlbCk6CiAgICAgaWQgPSBkYi5JbnRlZ2VyUHJvcGVydHkocmVx
dWlyZWQ9VHJ1ZSkKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkK
IAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2lmX3Bvc3NpYmxlKGtleSwgbmFt
ZSk6CisgICAgICAgIHJldHVybiBfY3JlYXRlX2lmX3Bvc3NpYmxlKFBsYXRmb3JtLCBrZXksIG5h
bWUpCisKIAogY2xhc3MgQnVpbGRlcihkYi5Nb2RlbCk6CiAgICAgbmFtZSA9IGRiLlN0cmluZ1By
b3BlcnR5KHJlcXVpcmVkPVRydWUpCkBAIC0xMDcsNiArMTI4LDE1IEBAIGNsYXNzIEJ1aWxkKGRi
Lk1vZGVsKToKICAgICBjaHJvbWl1bVJldmlzaW9uID0gZGIuSW50ZWdlclByb3BlcnR5KCkKICAg
ICB0aW1lc3RhbXAgPSBkYi5EYXRlVGltZVByb3BlcnR5KHJlcXVpcmVkPVRydWUpCiAKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9vcl9pbnNlcnRfZnJvbV9sb2cobG9nKToKKyAgICAg
ICAgYnVpbGRlciA9IGxvZy5idWlsZGVyKCkKKyAgICAgICAga2V5X25hbWUgPSBidWlsZGVyLm5h
bWUgKyAnOicgKyBzdHIoaW50KG1rdGltZShsb2cudGltZXN0YW1wKCkudGltZXR1cGxlKCkpKSkK
KworICAgICAgICByZXR1cm4gQnVpbGQuZ2V0X29yX2luc2VydChrZXlfbmFtZSwgYnJhbmNoPWxv
Zy5icmFuY2goKSwgcGxhdGZvcm09bG9nLnBsYXRmb3JtKCksIGJ1aWxkZXI9YnVpbGRlciwKKyAg
ICAgICAgICAgIGJ1aWxkTnVtYmVyPWxvZy5idWlsZF9udW1iZXIoKSwgdGltZXN0YW1wPWxvZy50
aW1lc3RhbXAoKSwKKyAgICAgICAgICAgIHJldmlzaW9uPWxvZy53ZWJraXRfcmV2aXNpb24oKSwg
Y2hyb21pdW1SZXZpc2lvbj1sb2cuY2hyb21pdW1fcmV2aXNpb24oKSkKKwogCiAjIFVzZWQgdG8g
Z2VuZXJhdGUgVGVzdE1hcCBpbiB0aGUgbWFuaWZlc3QgZWZmaWNpZW50bHkKIGNsYXNzIFRlc3Qo
ZGIuTW9kZWwpOgpAQCAtMTE5LDYgKzE0OSwyNiBAQCBjbGFzcyBUZXN0KGRiLk1vZGVsKToKICAg
ICBkZWYgY2FjaGVfa2V5KHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQpOgogICAgICAg
ICByZXR1cm4gJ3J1bnM6JWQsJWQsJWQnICUgKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQpCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHVwZGF0ZV9vcl9pbnNlcnQodGVzdF9u
YW1lLCBicmFuY2gsIHBsYXRmb3JtKToKKyAgICAgICAgZXhpc3RpbmdfdGVzdCA9IFtOb25lXQor
CisgICAgICAgIGRlZiBleGVjdXRlKGlkKToKKyAgICAgICAgICAgIHRlc3QgPSBUZXN0LmdldF9i
eV9rZXlfbmFtZSh0ZXN0X25hbWUpCisgICAgICAgICAgICBpZiB0ZXN0OgorICAgICAgICAgICAg
ICAgIGlmIGJyYW5jaC5rZXkoKSBub3QgaW4gdGVzdC5icmFuY2hlczoKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdC5icmFuY2hlcy5hcHBlbmQoYnJhbmNoLmtleSgpKQorICAgICAgICAgICAgICAg
IGlmIHBsYXRmb3JtLmtleSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgpKQorICAgICAgICAgICAg
ICAgIGV4aXN0aW5nX3Rlc3RbMF0gPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICAgICAgdGVzdCA9IFRlc3QoaWQ9aWQsIG5hbWU9dGVzdF9uYW1lLCBrZXlfbmFt
ZT10ZXN0X25hbWUsIGJyYW5jaGVzPVticmFuY2gua2V5KCldLCBwbGF0Zm9ybXM9W3BsYXRmb3Jt
LmtleSgpXSkKKyAgICAgICAgICAgIHRlc3QucHV0KCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0
CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRf
aG9sZGVyKGV4ZWN1dGUpIG9yIGV4aXN0aW5nX3Rlc3RbMF0KKwogCiBjbGFzcyBUZXN0UmVzdWx0
KGRiLk1vZGVsKToKICAgICBuYW1lID0gZGIuU3RyaW5nUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkK
QEAgLTEzMyw2ICsxODMsMzcgQEAgY2xhc3MgVGVzdFJlc3VsdChkYi5Nb2RlbCk6CiAgICAgZGVm
IGtleV9uYW1lKGJ1aWxkLCB0ZXN0X25hbWUpOgogICAgICAgICByZXR1cm4gYnVpbGQua2V5KCku
bmFtZSgpICsgJzonICsgdGVzdF9uYW1lCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0
X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKGNscywgdGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0
KToKKyAgICAgICAga2V5X25hbWUgPSBjbHMua2V5X25hbWUoYnVpbGQsIHRlc3RfbmFtZSkKKwor
ICAgICAgICBkZWYgX2Zsb2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKKyAgICAgICAgICAg
IHZhbHVlID0gZGljdGlvbmFyeS5nZXQoa2V5KQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpOgorICAgICAgICAgICAg
cmV0dXJuIGNscy5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9
YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdCkpCisKKyAgICAgICAgcmV0dXJuIGNscy5nZXRfb3Jf
aW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0
KHJlc3VsdFsnYXZnJ10pLAorICAgICAgICAgICAgdmFsdWVNZWRpYW49X2Zsb2F0X29yX25vbmUo
cmVzdWx0LCAnbWVkaWFuJyksIHZhbHVlU3RkZXY9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnc3Rk
ZXYnKSwKKyAgICAgICAgICAgIHZhbHVlTWluPV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21pbicp
LCB2YWx1ZU1heD1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdtYXgnKSkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgZ2VuZXJhdGVfcnVucyhicmFuY2gsIHBsYXRmb3JtLCB0ZXN0X25hbWUp
OgorICAgICAgICBidWlsZHMgPSBCdWlsZC5hbGwoKQorICAgICAgICBidWlsZHMuZmlsdGVyKCdi
cmFuY2ggPScsIGJyYW5jaCkKKyAgICAgICAgYnVpbGRzLmZpbHRlcigncGxhdGZvcm0gPScsIHBs
YXRmb3JtKQorCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICByZXN1
bHRzID0gVGVzdFJlc3VsdC5hbGwoKQorICAgICAgICAgICAgcmVzdWx0cy5maWx0ZXIoJ25hbWUg
PScsIHRlc3RfbmFtZSkKKyAgICAgICAgICAgIHJlc3VsdHMuZmlsdGVyKCdidWlsZCA9JywgYnVp
bGQpCisgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAg
eWllbGQgYnVpbGQsIHJlc3VsdAorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKIAogY2xh
c3MgUmVwb3J0TG9nKGRiLk1vZGVsKToKICAgICB0aW1lc3RhbXAgPSBkYi5EYXRlVGltZVByb3Bl
cnR5KHJlcXVpcmVkPVRydWUpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tb2RlbHNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYu
YXBwc3BvdC5jb20vbW9kZWxzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDgyMDkpCisrKyBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHNfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDkgKzMzLDEwIEBAIGltcG9ydCB1bml0dGVzdAogZnJvbSBkYXRldGltZSBp
bXBvcnQgZGF0ZXRpbWUKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IG1lbWNhY2hl
CiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCB0ZXN0YmVkCitmcm9tIHRpbWUgaW1w
b3J0IG1rdGltZQogCiAKLWNsYXNzIEhlbHBlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2Ns
YXNzIERhdGFTdG9yZVRlc3RzQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVw
KHNlbGYpOgogICAgICAgICBzZWxmLnRlc3RiZWQgPSB0ZXN0YmVkLlRlc3RiZWQoKQogICAgICAg
ICBzZWxmLnRlc3RiZWQuYWN0aXZhdGUoKQpAQCAtNDQsNiArNDUsMTggQEAgY2xhc3MgSGVscGVy
VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAg
ICAgc2VsZi50ZXN0YmVkLmRlYWN0aXZhdGUoKQogCisgICAgZGVmIGFzc2VydFRoZXJlSXNOb0lu
c3RhbmNlT2Yoc2VsZiwgbW9kZWwpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2Rl
bC5hbGwoKS5mZXRjaCg1KSksIDApCisKKyAgICBkZWYgYXNzZXJ0T25seUluc3RhbmNlKHNlbGYs
IG9ubHlfaW5zdGFzbmNlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob25seV9pbnN0
YXNuY2UuX19jbGFzc19fLmFsbCgpLmZldGNoKDUpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKG9ubHlfaW5zdGFzbmNlLl9fY2xhc3NfXy5nZXQob25seV9pbnN0YXNuY2Uua2V5KCkpKQor
CisgICAgZGVmIGFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdChzZWxmLCBsaXN0MSwgbGlzdDIpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsaXN0MSksIHNldChsaXN0MikpCisKKworY2xh
c3MgSGVscGVyVGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKICAgICBkZWYgX2Fzc2VydF90aGVy
ZV9pc19leGFjdGx5X29uZV9pZF9ob2xkZXJfYW5kX21hdGNoZXMoc2VsZiwgaWQpOgogICAgICAg
ICBpZF9ob2xkZXJzID0gbW9kZWxzLk51bWVyaWNJZEhvbGRlci5hbGwoKS5mZXRjaCg1KQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpZF9ob2xkZXJzKSwgMSkKQEAgLTU1LDggKzY4LDgg
QEAgY2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgZXhl
Y3V0ZShpZCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kZWxzLkJyYW5jaChpZD1pZCwgbmFtZT0n
c29tZSBicmFuY2gnLCBrZXlfbmFtZT0nc29tZS1icmFuY2gnKS5wdXQoKQogCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2guYWxsKCkuZmV0Y2goNSkpLCAwKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyLmFsbCgpLmZl
dGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVs
cy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMu
TnVtZXJpY0lkSG9sZGVyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2RlbHMuY3JlYXRl
X2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkpCiAKQEAgLTcy
LDEzICs4NSwxMyBAQCBjbGFzcyBIZWxwZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIGRlZiBleGVjdXRlKGlkKToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLkJyYW5jaC5hbGwoKS5mZXRjaCg1KSksIDApCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5OdW1lcmljSWRIb2xkZXIuYWxsKCku
ZmV0Y2goNSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9k
ZWxzLkJyYW5jaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1vZGVs
cy5OdW1lcmljSWRIb2xkZXIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2RlbHMuY3Jl
YXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkpCiAKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLkJyYW5jaC5hbGwoKS5mZXRjaCg1KSks
IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5OdW1lcmljSWRIb2xkZXIu
YWxsKCkuZmV0Y2goNSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNl
T2YobW9kZWxzLkJyYW5jaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9m
KG1vZGVscy5OdW1lcmljSWRIb2xkZXIpCiAKICAgICBkZWYgdGVzdF9yYWlzaW5nX2luX2NyZWF0
ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKHNlbGYpOgogCkBAIC04Niwx
MyArOTksMTMgQEAgY2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICAgcmFpc2UgVHlwZUVycm9yCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5CcmFuY2guYWxsKCkuZmV0Y2goNSkpLCAwKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuTnVtZXJpY0lkSG9sZGVyLmFsbCgp
LmZldGNoKDUpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlzTm9JbnN0YW5jZU9mKG1v
ZGVscy5CcmFuY2gpCisgICAgICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2Rl
bHMuTnVtZXJpY0lkSG9sZGVyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJv
ciwgbW9kZWxzLmNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyLCAo
ZXhlY3V0ZSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxzLkJyYW5jaC5h
bGwoKS5mZXRjaCg1KSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5O
dW1lcmljSWRIb2xkZXIuYWxsKCkuZmV0Y2goNSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRo
ZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLkJyYW5jaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVy
ZUlzTm9JbnN0YW5jZU9mKG1vZGVscy5OdW1lcmljSWRIb2xkZXIpCiAKICAgICBkZWYgdGVzdF9k
ZWxldGVfbW9kZWxfd2l0aF9udW1lcmljX2lkX2hvbGRlcihzZWxmKToKIApAQCAtMTAwLDEyICsx
MTMsMTIgQEAgY2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAg
ICAgcmV0dXJuIG1vZGVscy5CcmFuY2goaWQ9aWQsIG5hbWU9J3NvbWUgYnJhbmNoJywga2V5X25h
bWU9J3NvbWUtYnJhbmNoJykucHV0KCkKIAogICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNo
LmdldChtb2RlbHMuY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIo
ZXhlY3V0ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vZGVscy5OdW1lcmljSWRI
b2xkZXIuYWxsKCkuZmV0Y2goNSkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5j
ZShicmFuY2gpCiAKICAgICAgICAgbW9kZWxzLmRlbGV0ZV9tb2RlbF93aXRoX251bWVyaWNfaWRf
aG9sZGVyKGJyYW5jaCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2RlbHMuQnJh
bmNoLmFsbCgpLmZldGNoKDUpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9k
ZWxzLk51bWVyaWNJZEhvbGRlci5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNz
ZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLk51bWVyaWNJZEhvbGRlcikKIAogICAgIGRlZiB0
ZXN0X21vZGVsX2Zyb21fbnVtZXJpY19pZChzZWxmKToKIApAQCAtMTIwLDE1ICsxMzMsMzcgQEAg
Y2xhc3MgSGVscGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG1vZGVscy5tb2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoLmlkLCBtb2RlbHMuQnJh
bmNoKSwgTm9uZSkKIAogCi1jbGFzcyBCdWlsZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgot
ICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0YmVkID0gdGVzdGJlZC5UZXN0
YmVkKCkKLSAgICAgICAgc2VsZi50ZXN0YmVkLmFjdGl2YXRlKCkKLSAgICAgICAgc2VsZi50ZXN0
YmVkLmluaXRfZGF0YXN0b3JlX3YzX3N0dWIoKQorY2xhc3MgQnJhbmNoVGVzdHMoRGF0YVN0b3Jl
VGVzdHNCYXNlKToKKyAgICBkZWYgdGVzdF9jcmVhdGVfaWZfcG9zc2libGUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuQnJhbmNoKQorCisgICAg
ICAgIGJyYW5jaCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5j
aCcsICdzb21lIGJyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShicmFuY2gpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShicmFuY2gua2V5KCkubmFtZSgpLCAnc29tZS1icmFuY2gnKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoYnJhbmNoLm5hbWUsICdzb21lIGJyYW5jaCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKGJyYW5jaCkKKworICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdz
b21lIG90aGVyIGJyYW5jaCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnJhbmNoLm5hbWUs
ICdzb21lIGJyYW5jaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKGJyYW5jaCkK
KworCitjbGFzcyBQbGF0Zm9ybVRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRl
c3RfY3JlYXRlX2lmX3Bvc3NpYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNO
b0luc3RhbmNlT2YobW9kZWxzLlBsYXRmb3JtKQorCisgICAgICAgIHBsYXRmb3JtID0gbW9kZWxz
LlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdzb21lIHBsYXRm
b3JtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBsYXRmb3JtKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUocGxhdGZvcm0ua2V5KCkubmFtZSgpLCAnc29tZS1wbGF0Zm9ybScpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwbGF0Zm9ybS5uYW1lLCAnc29tZSBwbGF0Zm9ybScpCisgICAgICAg
IHNlbGYuYXNzZXJ0T25seUluc3RhbmNlKHBsYXRmb3JtKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UobW9kZWxzLlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScs
ICdzb21lIG90aGVyIHBsYXRmb3JtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0Zm9y
bS5uYW1lLCAnc29tZSBwbGF0Zm9ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0T25seUluc3RhbmNl
KHBsYXRmb3JtKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnRlc3Ri
ZWQuZGVhY3RpdmF0ZSgpCiAKK2NsYXNzIEJ1aWxkZXJUZXN0cyhEYXRhU3RvcmVUZXN0c0Jhc2Up
OgogICAgIGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKICAgICAgICAgYnVpbGRlcl9rZXkgPSBtb2Rl
bHMuQnVpbGRlci5jcmVhdGUoJ3NvbWUgYnVpbGRlcicsICdzb21lIHBhc3N3b3JkJykKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkZXJfa2V5KQpAQCAtMTU4LDE1ICsxOTMsMTIzIEBAIGNs
YXNzIEJ1aWxkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoYnVpbGRlci5hdXRoZW50aWNhdGUoJ2JhZCBwYXNzd29yZCcpKQogCiAKLWNsYXNzIFJl
cG9ydExvZyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAg
ICBzZWxmLnRlc3RiZWQgPSB0ZXN0YmVkLlRlc3RiZWQoKQotICAgICAgICBzZWxmLnRlc3RiZWQu
YWN0aXZhdGUoKQotICAgICAgICBzZWxmLnRlc3RiZWQuaW5pdF9kYXRhc3RvcmVfdjNfc3R1Yigp
CitkZWYgX2NyZWF0ZV9zb21lX2J1aWxkZXIoKToKKyAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNo
LmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAgIHBs
YXRmb3JtID0gbW9kZWxzLlBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9y
bScsICdTb21lIFBsYXRmb3JtJykKKyAgICBidWlsZGVyX2tleSA9IG1vZGVscy5CdWlsZGVyLmNy
ZWF0ZSgnc29tZS1idWlsZGVyJywgJ1NvbWUgQnVpbGRlcicpCisgICAgcmV0dXJuIGJyYW5jaCwg
cGxhdGZvcm0sIG1vZGVscy5CdWlsZGVyLmdldChidWlsZGVyX2tleSkKKworCitjbGFzcyBCdWls
ZFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF9m
cm9tX2xvZyhzZWxmKToKKyAgICAgICAgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciA9IF9jcmVh
dGVfc29tZV9idWlsZGVyKCkKKworICAgICAgICB0aW1lc3RhbXAgPSBkYXRldGltZS5ub3coKS5y
ZXBsYWNlKG1pY3Jvc2Vjb25kPTApCisgICAgICAgIGxvZyA9IG1vZGVscy5SZXBvcnRMb2codGlt
ZXN0YW1wPXRpbWVzdGFtcCwgaGVhZGVycz0nc29tZSBoZWFkZXJzJywKKyAgICAgICAgICAgIHBh
eWxvYWQ9J3siYnJhbmNoIjogInNvbWUtYnJhbmNoIiwgInBsYXRmb3JtIjogInNvbWUtcGxhdGZv
cm0iLCAiYnVpbGRlci1uYW1lIjogInNvbWUtYnVpbGRlciIsJyArCisgICAgICAgICAgICAgICAg
JyJidWlsZC1udW1iZXIiOiAxMjMsICJ3ZWJraXQtcmV2aXNpb24iOiA0NTYsICJ0aW1lc3RhbXAi
OiAlZH0nICUgaW50KG1rdGltZSh0aW1lc3RhbXAudGltZXR1cGxlKCkpKSkKKworICAgICAgICBz
ZWxmLmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YobW9kZWxzLkJ1aWxkKQorCisgICAgICAgIGJ1
aWxkID0gbW9kZWxzLkJ1aWxkLmdldF9vcl9pbnNlcnRfZnJvbV9sb2cobG9nKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQuYnJh
bmNoLmtleSgpLCBicmFuY2gua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQu
cGxhdGZvcm0ua2V5KCksIHBsYXRmb3JtLmtleSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGJ1aWxkLmJ1aWxkZXIua2V5KCksIGJ1aWxkZXIua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoYnVpbGQuYnVpbGROdW1iZXIsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChi
dWlsZC5yZXZpc2lvbiwgNDU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLmNocm9t
aXVtUmV2aXNpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQudGltZXN0
YW1wLCB0aW1lc3RhbXApCisKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2UoYnVpbGQp
CisKKworY2xhc3MgVGVzdE1vZGVsVGVzdHMoRGF0YVN0b3JlVGVzdHNCYXNlKToKKyAgICBkZWYg
dGVzdF91cGRhdGVfb3JfaW5zZXJ0KHNlbGYpOgorICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJh
bmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1icmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAg
ICAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUt
cGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUaGVyZUlz
Tm9JbnN0YW5jZU9mKG1vZGVscy5UZXN0KQorCisgICAgICAgIHRlc3QgPSBtb2RlbHMuVGVzdC51
cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBicmFuY2gsIHBsYXRmb3JtKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUodGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmJyYW5j
aGVzLCBbYnJhbmNoLmtleSgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnBsYXRm
b3JtcywgW3BsYXRmb3JtLmtleSgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRPbmx5SW5zdGFuY2Uo
dGVzdCkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV9vcl9pbnNlcnRfdG9fdXBkYXRlKHNlbGYpOgor
ICAgICAgICBicmFuY2ggPSBtb2RlbHMuQnJhbmNoLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1i
cmFuY2gnLCAnU29tZSBCcmFuY2gnKQorICAgICAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0Zm9y
bS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCisg
ICAgICAgIHRlc3QgPSBtb2RlbHMuVGVzdC51cGRhdGVfb3JfaW5zZXJ0KCdzb21lLXRlc3QnLCBi
cmFuY2gsIHBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZSh0ZXN0KQor
CisgICAgICAgIG90aGVyX2JyYW5jaCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxl
KCdvdGhlci1icmFuY2gnLCAnT3RoZXIgQnJhbmNoJykKKyAgICAgICAgb3RoZXJfcGxhdGZvcm0g
PSBtb2RlbHMuUGxhdGZvcm0uY3JlYXRlX2lmX3Bvc3NpYmxlKCdvdGhlci1wbGF0Zm9ybScsICdP
dGhlciBQbGF0Zm9ybScpCisgICAgICAgIHRlc3QgPSBtb2RlbHMuVGVzdC51cGRhdGVfb3JfaW5z
ZXJ0KCdzb21lLXRlc3QnLCBvdGhlcl9icmFuY2gsIG90aGVyX3BsYXRmb3JtKQorICAgICAgICBz
ZWxmLmFzc2VydE9ubHlJbnN0YW5jZSh0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5v
cmRlcmVkTGlzdCh0ZXN0LmJyYW5jaGVzLCBbYnJhbmNoLmtleSgpLCBvdGhlcl9icmFuY2gua2V5
KCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsVW5vcmRlcmVkTGlzdCh0ZXN0LnBsYXRmb3Jt
cywgW3BsYXRmb3JtLmtleSgpLCBvdGhlcl9wbGF0Zm9ybS5rZXkoKV0pCisKKworY2xhc3MgVGVz
dFJlc3VsdFRlc3RzKERhdGFTdG9yZVRlc3RzQmFzZSk6CisgICAgZGVmIF9jcmVhdGVfYnVpbGQo
c2VsZik6CisgICAgICAgIGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIgPSBfY3JlYXRlX3NvbWVf
YnVpbGRlcigpCisgICAgICAgIGJ1aWxkX2tleSA9IG1vZGVscy5CdWlsZChrZXlfbmFtZT0nc29t
ZS1idWlsZCcsIGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxk
ZXIsCisgICAgICAgICAgICBidWlsZE51bWJlcj0xLCByZXZpc2lvbj0xMDAsIHRpbWVzdGFtcD1k
YXRldGltZS5ub3coKSkucHV0KCkKKyAgICAgICAgcmV0dXJuIG1vZGVscy5CdWlsZC5nZXQoYnVp
bGRfa2V5KQorCisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF92YWx1ZShzZWxmKToKKyAgICAg
ICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGQoKQorICAgICAgICBzZWxmLmFzc2VydFRoZXJl
SXNOb0luc3RhbmNlT2YobW9kZWxzLlRlc3RSZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IG1vZGVs
cy5UZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbignc29tZS10ZXN0Jywg
YnVpbGQsIDUwKQorICAgICAgICBzZWxmLmFzc2VydE9ubHlJbnN0YW5jZShyZXN1bHQpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm5hbWUsICdzb21lLXRlc3QnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5idWlsZC5rZXkoKSwgYnVpbGQua2V5KCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCA1MC4wKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJlc3VsdC52YWx1ZU1lZGlhbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXN1bHQudmFsdWVTdGRldiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1
bHQudmFsdWVNaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVl
TWF4LCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X29yX2luc2VydF9zdGF0X3ZhbHVlKHNlbGYp
OgorICAgICAgICBidWlsZCA9IHNlbGYuX2NyZWF0ZV9idWlsZCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuVGVzdFJlc3VsdCkKKyAgICAgICAgcmVzdWx0
ID0gbW9kZWxzLlRlc3RSZXN1bHQuZ2V0X29yX2luc2VydF9mcm9tX3BhcnNlZF9qc29uKCdzb21l
LXRlc3QnLCBidWlsZCwKKyAgICAgICAgICAgIHsiYXZnIjogNDAsICJtZWRpYW4iOiAiNDAuMSIs
ICJzdGRldiI6IDMuMjUsICJtaW4iOiAzMC41LCAibWF4IjogNDV9KQorICAgICAgICBzZWxmLmFz
c2VydE9ubHlJbnN0YW5jZShyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0
Lm5hbWUsICdzb21lLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5idWls
ZC5rZXkoKSwgYnVpbGQua2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZh
bHVlLCA0MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZU1lZGlhbiwg
NDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVTdGRldiwgMy4yNSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWVNaW4sIDMwLjUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlTWF4LCA0NSkKKworICAgIGRlZiBfY3JlYXRl
X3Jlc3VsdHMoc2VsZiwgdGVzdF9uYW1lLCB2YWx1ZXMpOgorICAgICAgICBicmFuY2gsIHBsYXRm
b3JtLCBidWlsZGVyID0gX2NyZWF0ZV9zb21lX2J1aWxkZXIoKQorICAgICAgICByZXN1bHRzID0g
W10KKyAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgorICAgICAgICAg
ICAgYnVpbGQgPSBtb2RlbHMuQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0s
IGJ1aWxkZXI9YnVpbGRlciwKKyAgICAgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lv
bj0xMDAgKyBpLCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpCisgICAgICAgICAgICBidWlsZC5w
dXQoKQorICAgICAgICAgICAgcmVzdWx0ID0gbW9kZWxzLlRlc3RSZXN1bHQobmFtZT10ZXN0X25h
bWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT12YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdC5wdXQoKQor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICByZXR1cm4gYnJhbmNo
LCBwbGF0Zm9ybSwgcmVzdWx0cworCisgICAgZGVmIHRlc3RfZ2VuZXJhdGVfcnVucyhzZWxmKToK
KyAgICAgICAgYnJhbmNoLCBwbGF0Zm9ybSwgcmVzdWx0cyA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRz
KCdzb21lLXRlc3QnLCBbNTAuMCwgNTEuMCwgNTIuMCwgNDkuMCwgNDguMF0pCisgICAgICAgIGxh
c3RfaSA9IDAKKyAgICAgICAgZm9yIGksIChidWlsZCwgcmVzdWx0KSBpbiBlbnVtZXJhdGUobW9k
ZWxzLlRlc3RSZXN1bHQuZ2VuZXJhdGVfcnVucyhicmFuY2gsIHBsYXRmb3JtLCAic29tZS10ZXN0
IikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZC5idWlsZE51bWJlciwgaSkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQucmV2aXNpb24sIDEwMCArIGkpCisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5uYW1lLCAnc29tZS10ZXN0JykKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnZhbHVlLCByZXN1bHRzW2ldLnZhbHVl
KQorICAgICAgICAgICAgbGFzdF9pID0gaQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGFzdF9p
ICsgMSwgbGVuKHJlc3VsdHMpKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBz
ZWxmLnRlc3RiZWQuZGVhY3RpdmF0ZSgpCiAKK2NsYXNzIFJlcG9ydExvZ1Rlc3RzKERhdGFTdG9y
ZVRlc3RzQmFzZSk6CiAgICAgZGVmIF9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZChzZWxmLCBwYXls
b2FkKToKICAgICAgICAgcmV0dXJuIG1vZGVscy5SZXBvcnRMb2codGltZXN0YW1wPWRhdGV0aW1l
Lm5vdygpLCBoZWFkZXJzPSdzb21lIGhlYWRlcnMnLCBwYXlsb2FkPXBheWxvYWQpCiAKQEAgLTIw
Niw3ICszNDksMjcgQEAgY2xhc3MgUmVwb3J0TG9nKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3siYnVpbGRlci1uYW1lIjog
IiVzIn0nICUgYnVpbGRlcl9uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5idWls
ZGVyKCkua2V5KCksIGJ1aWxkZXJfa2V5KQogCi0gICAgIyBGSVhNRSB0ZXN0X2JyYW5jaCBhbmQg
dGVzdF9wbGF0Zm9ybQorICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgbG9nID0g
c2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQoJ3sia2V5IjogInZhbHVlIn0nKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGxvZy5icmFuY2goKSwgTm9uZSkKKworICAgICAgICBsb2cgPSBz
ZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJicmFuY2giOiAic29tZS1icmFuY2gifScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLmJyYW5jaCgpLCBOb25lKQorCisgICAgICAg
IGJyYW5jaCA9IG1vZGVscy5CcmFuY2guY3JlYXRlX2lmX3Bvc3NpYmxlKCJzb21lLWJyYW5jaCIs
ICJTb21lIEJyYW5jaCIpCisgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXls
b2FkKCd7ImJyYW5jaCI6ICJzb21lLWJyYW5jaCJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsb2cuYnJhbmNoKCkua2V5KCksIGJyYW5jaC5rZXkoKSkKKworICAgIGRlZiB0ZXN0X3BsYXRm
b3JtKHNlbGYpOgorICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgn
eyJrZXkiOiAidmFsdWUifScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRmb3Jt
KCksIE5vbmUpCisKKyAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2xvZ193aXRoX3BheWxvYWQo
J3sicGxhdGZvcm0iOiAic29tZS1wbGF0Zm9ybSJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsb2cucGxhdGZvcm0oKSwgTm9uZSkKKworICAgICAgICBwbGF0Zm9ybSA9IG1vZGVscy5QbGF0
Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoInNvbWUtcGxhdGZvcm0iLCAiU29tZSBQbGF0Zm9ybSIp
CisgICAgICAgIGxvZyA9IHNlbGYuX2NyZWF0ZV9sb2dfd2l0aF9wYXlsb2FkKCd7InBsYXRmb3Jt
IjogInNvbWUtcGxhdGZvcm0ifScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLnBsYXRm
b3JtKCkua2V5KCksIHBsYXRmb3JtLmtleSgpKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfbnVtYmVy
KHNlbGYpOgogICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfbG9nX3dpdGhfcGF5bG9hZCgneyJi
dWlsZC1udW1iZXIiOiAxMjN9JykKQEAgLTIzMCwyMiArMzkzLDE5IEBAIGNsYXNzIFJlcG9ydExv
Zyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLndlYmtp
dF9yZXZpc2lvbigpLCBOb25lKQogCiAKLWNsYXNzIFBlcnNpc3RlbnRDYWNoZVRlc3RzKHVuaXR0
ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBlcnNpc3RlbnRDYWNoZVRlc3RzKERhdGFTdG9yZVRlc3Rz
QmFzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3RiZWQgPSB0ZXN0
YmVkLlRlc3RiZWQoKQogICAgICAgICBzZWxmLnRlc3RiZWQuYWN0aXZhdGUoKQogICAgICAgICBz
ZWxmLnRlc3RiZWQuaW5pdF9kYXRhc3RvcmVfdjNfc3R1YigpCiAgICAgICAgIHNlbGYudGVzdGJl
ZC5pbml0X21lbWNhY2hlX3N0dWIoKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAg
ICBzZWxmLnRlc3RiZWQuZGVhY3RpdmF0ZSgpCi0KICAgICBkZWYgX2Fzc2VydF9wZXJzaXN0ZW50
X2NhY2hlKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rl
bHMuUGVyc2lzdGVudENhY2hlLmdldF9ieV9rZXlfbmFtZShuYW1lKS52YWx1ZSwgdmFsdWUpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtY2FjaGUuZ2V0KG5hbWUpLCB2YWx1ZSkKIAogICAg
IGRlZiB0ZXN0X3NldChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obW9kZWxz
LlBlcnNpc3RlbnRDYWNoZS5hbGwoKS5mZXRjaCg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0
VGhlcmVJc05vSW5zdGFuY2VPZihtb2RlbHMuUGVyc2lzdGVudENhY2hlKQogCiAgICAgICAgIG1v
ZGVscy5QZXJzaXN0ZW50Q2FjaGUuc2V0X2NhY2hlKCdzb21lLWNhY2hlJywgJ3NvbWUgZGF0YScp
CiAgICAgICAgIHNlbGYuX2Fzc2VydF9wZXJzaXN0ZW50X2NhY2hlKCdzb21lLWNhY2hlJywgJ3Nv
bWUgZGF0YScpCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRf
cHJvY2Vzc19oYW5kbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJKHJldmlzaW9uIDEwODIwOSkKKysr
IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgZnJvbSBtb2RlbHMgaW1wb3J0IEJ1
aWxkCiBmcm9tIG1vZGVscyBpbXBvcnQgUmVwb3J0TG9nCiBmcm9tIG1vZGVscyBpbXBvcnQgVGVz
dAogZnJvbSBtb2RlbHMgaW1wb3J0IFRlc3RSZXN1bHQKLWZyb20gbW9kZWxzIGltcG9ydCBjcmVh
dGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcgogCiAKIGNsYXNzIFJlcG9y
dFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgpAQCAtNTUsMTEgKzU0LDEx
IEBAIGNsYXNzIFJlcG9ydFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWUKIAogICAgICAgICBi
cmFuY2ggPSBsb2cuYnJhbmNoKCkKICAgICAgICAgcGxhdGZvcm0gPSBsb2cucGxhdGZvcm0oKQot
ICAgICAgICBidWlsZCA9IHNlbGYuX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShsb2csIGJyYW5j
aCwgcGxhdGZvcm0pCisgICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0X29yX2luc2VydF9mcm9tX2xv
Zyhsb2cpCiAKICAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIGxvZy5yZXN1bHRzKCku
aXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fYWRkX3Rlc3RfaWZfbmVlZGVk
KHRlc3RfbmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSkKLSAgICAgICAgICAgIHNlbGYuX2FkZF90ZXN0
X3Jlc3VsdF9pZl9uZWVkZWQodGVzdF9uYW1lLCBidWlsZCwgcmVzdWx0KQorICAgICAgICAgICAg
dGVzdCA9IFRlc3QudXBkYXRlX29yX2luc2VydCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0p
CisgICAgICAgICAgICBUZXN0UmVzdWx0LmdldF9vcl9pbnNlcnRfZnJvbV9wYXJzZWRfanNvbih0
ZXN0X25hbWUsIGJ1aWxkLCByZXN1bHQpCiAgICAgICAgICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0
ZSh0ZXN0LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQogCiAgICAgICAgIGxvZyA9IFJlcG9y
dExvZy5nZXQobG9nLmtleSgpKQpAQCAtNzAsNDIgKzY5LDMgQEAgY2xhc3MgUmVwb3J0UHJvY2Vz
c0hhbmRsZXIod2ViYXBwMi5SZXF1ZQogICAgICAgICBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUo
KQogCiAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCi0KLSAgICBkZWYgX2Ny
ZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShzZWxmLCBsb2csIGJyYW5jaCwgcGxhdGZvcm0pOgotICAg
ICAgICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQotICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIu
bmFtZSArICc6JyArIHN0cihpbnQodGltZS5ta3RpbWUobG9nLnRpbWVzdGFtcCgpLnRpbWV0dXBs
ZSgpKSkpCi0KLSAgICAgICAgcmV0dXJuIEJ1aWxkLmdldF9vcl9pbnNlcnQoa2V5X25hbWUsIGJy
YW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxkZXIsIGJ1aWxkTnVt
YmVyPWxvZy5idWlsZF9udW1iZXIoKSwKLSAgICAgICAgICAgIHRpbWVzdGFtcD1sb2cudGltZXN0
YW1wKCksIHJldmlzaW9uPWxvZy53ZWJraXRfcmV2aXNpb24oKSwgY2hyb21pdW1SZXZpc2lvbj1s
b2cuY2hyb21pdW1fcmV2aXNpb24oKSkKLQotICAgIGRlZiBfYWRkX3Rlc3RfaWZfbmVlZGVkKHNl
bGYsIHRlc3RfbmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSk6Ci0KLSAgICAgICAgZGVmIGV4ZWN1dGUo
aWQpOgotICAgICAgICAgICAgdGVzdCA9IFRlc3QuZ2V0X2J5X2tleV9uYW1lKHRlc3RfbmFtZSkK
LSAgICAgICAgICAgIHJldHVyblZhbHVlID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHRlc3Q6
Ci0gICAgICAgICAgICAgICAgdGVzdCA9IFRlc3QoaWQ9aWQsIG5hbWU9dGVzdF9uYW1lLCBrZXlf
bmFtZT10ZXN0X25hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0ZXN0Ci0gICAg
ICAgICAgICBpZiBicmFuY2gua2V5KCkgbm90IGluIHRlc3QuYnJhbmNoZXM6Ci0gICAgICAgICAg
ICAgICAgdGVzdC5icmFuY2hlcy5hcHBlbmQoYnJhbmNoLmtleSgpKQotICAgICAgICAgICAgaWYg
cGxhdGZvcm0ua2V5KCkgbm90IGluIHRlc3QucGxhdGZvcm1zOgotICAgICAgICAgICAgICAgIHRl
c3QucGxhdGZvcm1zLmFwcGVuZChwbGF0Zm9ybS5rZXkoKSkKLSAgICAgICAgICAgIHRlc3QucHV0
KCkKLSAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZQotICAgICAgICByZXR1cm4gY3JlYXRl
X2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIoZXhlY3V0ZSkgb3IgVGVzdC5n
ZXRfYnlfa2V5X25hbWUodGVzdF9uYW1lKQotCi0gICAgZGVmIF9hZGRfdGVzdF9yZXN1bHRfaWZf
bmVlZGVkKHNlbGYsIHRlc3RfbmFtZSwgYnVpbGQsIHJlc3VsdCk6Ci0gICAgICAgIGtleV9uYW1l
ID0gVGVzdFJlc3VsdC5rZXlfbmFtZShidWlsZCwgdGVzdF9uYW1lKQotCi0gICAgICAgIGRlZiBf
ZmxvYXRfb3Jfbm9uZShkaWN0aW9uYXJ5LCBrZXkpOgotICAgICAgICAgICAgdmFsdWUgPSBkaWN0
aW9uYXJ5LmdldChrZXkpCi0gICAgICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmxvYXQodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCk6Ci0gICAgICAgICAgICByZXR1cm4gVGVzdFJl
c3VsdC5nZXRfb3JfaW5zZXJ0KGtleV9uYW1lLCBuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQs
IHZhbHVlPWZsb2F0KHJlc3VsdCkpCi0KLSAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQuZ2V0X29y
X2luc2VydChrZXlfbmFtZSwgbmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9h
dChyZXN1bHRbJ2F2ZyddKSwKLSAgICAgICAgICAgIHZhbHVlTWVkaWFuPV9mbG9hdF9vcl9ub25l
KHJlc3VsdCwgJ21lZGlhbicpLCB2YWx1ZVN0ZGV2PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ3N0
ZGV2JyksCi0gICAgICAgICAgICB2YWx1ZU1pbj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdtaW4n
KSwgdmFsdWVNYXg9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWF4JykpCkluZGV4OiBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9ydW5zX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcnVuc19oYW5kbGVyLnB5CShyZXZpc2lv
biAxMDgyMDkpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9ydW5zX2hhbmRs
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTYxLDQxICs2MSwzOCBAQCBjbGFzcyBSdW5zSGFuZGxl
cih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyCiAgICAgICAgICMgRklYTUU6IEp1c3QgZmV0Y2ggYnVp
bGRzIHNwZWNpZmllZCBieSAiZGF5cyIKICAgICAgICAgIyBkYXlzID0gc2VsZi5yZXF1ZXN0Lmdl
dCgnZGF5cycsIDM2NSkKIAotICAgICAgICBidWlsZHMgPSBCdWlsZC5hbGwoKQotICAgICAgICBi
dWlsZHMuZmlsdGVyKCdicmFuY2ggPScsIG1vZGVsX2Zyb21fbnVtZXJpY19pZChicmFuY2hfaWQs
IEJyYW5jaCkpCi0gICAgICAgIGJ1aWxkcy5maWx0ZXIoJ3BsYXRmb3JtID0nLCBtb2RlbF9mcm9t
X251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKSkKLQorICAgICAgICBicmFuY2ggPSBt
b2RlbF9mcm9tX251bWVyaWNfaWQoYnJhbmNoX2lkLCBCcmFuY2gpCisgICAgICAgIHBsYXRmb3Jt
ID0gbW9kZWxfZnJvbV9udW1lcmljX2lkKHBsYXRmb3JtX2lkLCBQbGF0Zm9ybSkKICAgICAgICAg
dGVzdCA9IG1vZGVsX2Zyb21fbnVtZXJpY19pZCh0ZXN0X2lkLCBUZXN0KQotICAgICAgICB0ZXN0
X25hbWUgPSB0ZXN0Lm5hbWUgaWYgdGVzdCBlbHNlIE5vbmUKKyAgICAgICAgYXNzZXJ0IGJyYW5j
aAorICAgICAgICBhc3NlcnQgcGxhdGZvcm0KKyAgICAgICAgYXNzZXJ0IHRlc3QKKwogICAgICAg
ICB0ZXN0X3J1bnMgPSBbXQogICAgICAgICBhdmVyYWdlcyA9IHt9CiAgICAgICAgIHZhbHVlcyA9
IFtdCiAgICAgICAgIHRpbWVzdGFtcHMgPSBbXQogCi0gICAgICAgIGZvciBidWlsZCBpbiBidWls
ZHM6Ci0gICAgICAgICAgICByZXN1bHRzID0gVGVzdFJlc3VsdC5hbGwoKQotICAgICAgICAgICAg
cmVzdWx0cy5maWx0ZXIoJ25hbWUgPScsIHRlc3RfbmFtZSkKLSAgICAgICAgICAgIHJlc3VsdHMu
ZmlsdGVyKCdidWlsZCA9JywgYnVpbGQpCi0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3Vs
dHM6Ci0gICAgICAgICAgICAgICAgYnVpbGRlcklkID0gYnVpbGQuYnVpbGRlci5rZXkoKS5pZCgp
Ci0gICAgICAgICAgICAgICAgcG9zaXhUaW1lc3RhbXAgPSBta3RpbWUoYnVpbGQudGltZXN0YW1w
LnRpbWV0dXBsZSgpKQotICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MgPSBOb25lCi0gICAgICAg
ICAgICAgICAgc3VwcGxlbWVudGFyeV9yZXZpc2lvbnMgPSBOb25lCi0gICAgICAgICAgICAgICAg
aWYgcmVzdWx0LnZhbHVlU3RkZXYgIT0gTm9uZSBhbmQgcmVzdWx0LnZhbHVlTWluICE9IE5vbmUg
YW5kIHJlc3VsdC52YWx1ZU1heCAhPSBOb25lOgotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0
aWNzID0geydzdGRldic6IHJlc3VsdC52YWx1ZVN0ZGV2LCAnbWluJzogcmVzdWx0LnZhbHVlTWlu
LCAnbWF4JzogcmVzdWx0LnZhbHVlTWF4fQotICAgICAgICAgICAgICAgIGlmIGJ1aWxkLmNocm9t
aXVtUmV2aXNpb24gIT0gTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc3VwcGxlbWVudGFyeV9y
ZXZpc2lvbnMgPSB7J0Nocm9taXVtJzogYnVpbGQuY2hyb21pdW1SZXZpc2lvbn0KLQotICAgICAg
ICAgICAgICAgIHRlc3RfcnVucy5hcHBlbmQoW3Jlc3VsdC5rZXkoKS5pZCgpLAotICAgICAgICAg
ICAgICAgICAgICBbYnVpbGQua2V5KCkuaWQoKSwgYnVpbGQuYnVpbGROdW1iZXIsIGJ1aWxkLnJl
dmlzaW9uLCBzdXBwbGVtZW50YXJ5X3JldmlzaW9uc10sCi0gICAgICAgICAgICAgICAgICAgIHBv
c2l4VGltZXN0YW1wLCByZXN1bHQudmFsdWUsIDAsICAjIHJ1bk51bWJlcgotICAgICAgICAgICAg
ICAgICAgICBbXSwgICMgYW5ub3RhdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlcklk
LCBzdGF0aXN0aWNzXSkKLQotICAgICAgICAgICAgICAgICMgRklYTUU6IENhbGN1bGF0ZSB0aGUg
YXZlcmFnZTsgaW4gcHJhY3RpY2UsIHdlIHdvdWxkbid0IGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1
ZSBmb3IgYSBnaXZlbiByZXZpc2lvbgotICAgICAgICAgICAgICAgIGF2ZXJhZ2VzW2J1aWxkLnJl
dmlzaW9uXSA9IHJlc3VsdC52YWx1ZQotICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQocmVz
dWx0LnZhbHVlKQotICAgICAgICAgICAgICAgIHRpbWVzdGFtcHMuYXBwZW5kKHBvc2l4VGltZXN0
YW1wKQorICAgICAgICBmb3IgYnVpbGQsIHJlc3VsdCBpbiBUZXN0UmVzdWx0LmdlbmVyYXRlX3J1
bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1lKToKKyAgICAgICAgICAgIGJ1aWxkZXJJZCA9
IGJ1aWxkLmJ1aWxkZXIua2V5KCkuaWQoKQorICAgICAgICAgICAgcG9zaXhUaW1lc3RhbXAgPSBt
a3RpbWUoYnVpbGQudGltZXN0YW1wLnRpbWV0dXBsZSgpKQorICAgICAgICAgICAgc3RhdGlzdGlj
cyA9IE5vbmUKKyAgICAgICAgICAgIHN1cHBsZW1lbnRhcnlfcmV2aXNpb25zID0gTm9uZQorICAg
ICAgICAgICAgaWYgcmVzdWx0LnZhbHVlU3RkZXYgIT0gTm9uZSBhbmQgcmVzdWx0LnZhbHVlTWlu
ICE9IE5vbmUgYW5kIHJlc3VsdC52YWx1ZU1heCAhPSBOb25lOgorICAgICAgICAgICAgICAgIHN0
YXRpc3RpY3MgPSB7J3N0ZGV2JzogcmVzdWx0LnZhbHVlU3RkZXYsICdtaW4nOiByZXN1bHQudmFs
dWVNaW4sICdtYXgnOiByZXN1bHQudmFsdWVNYXh9CisgICAgICAgICAgICBpZiBidWlsZC5jaHJv
bWl1bVJldmlzaW9uICE9IE5vbmU6CisgICAgICAgICAgICAgICAgc3VwcGxlbWVudGFyeV9yZXZp
c2lvbnMgPSB7J0Nocm9taXVtJzogYnVpbGQuY2hyb21pdW1SZXZpc2lvbn0KKworICAgICAgICAg
ICAgdGVzdF9ydW5zLmFwcGVuZChbcmVzdWx0LmtleSgpLmlkKCksCisgICAgICAgICAgICAgICAg
W2J1aWxkLmtleSgpLmlkKCksIGJ1aWxkLmJ1aWxkTnVtYmVyLCBidWlsZC5yZXZpc2lvbiwgc3Vw
cGxlbWVudGFyeV9yZXZpc2lvbnNdLAorICAgICAgICAgICAgICAgIHBvc2l4VGltZXN0YW1wLCBy
ZXN1bHQudmFsdWUsIDAsICAjIHJ1bk51bWJlcgorICAgICAgICAgICAgICAgIFtdLCAgIyBhbm5v
dGF0aW9ucworICAgICAgICAgICAgICAgIGJ1aWxkZXJJZCwgc3RhdGlzdGljc10pCisKKyAgICAg
ICAgICAgICMgRklYTUU6IENhbGN1bGF0ZSB0aGUgYXZlcmFnZTsgaW4gcHJhY3RpY2UsIHdlIHdv
dWxkbid0IGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgYSBnaXZlbiByZXZpc2lvbgorICAg
ICAgICAgICAgYXZlcmFnZXNbYnVpbGQucmV2aXNpb25dID0gcmVzdWx0LnZhbHVlCisgICAgICAg
ICAgICB2YWx1ZXMuYXBwZW5kKHJlc3VsdC52YWx1ZSkKKyAgICAgICAgICAgIHRpbWVzdGFtcHMu
YXBwZW5kKHBvc2l4VGltZXN0YW1wKQogCiAgICAgICAgIHJlc3VsdCA9IGpzb24uZHVtcHMoewog
ICAgICAgICAgICAgJ3Rlc3RfcnVucyc6IHRlc3RfcnVucywK
</data>
<flag name="review"
          id="130001"
          type_id="1"
          status="+"
          setter="morrita"
    />
          </attachment>
      

    </bug>

</bugzilla>