<?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>113717</bug_id>
          
          <creation_ts>2013-04-01 12:47:18 -0700</creation_ts>
          <short_desc>Dashboard refactor: Move dashboard specific history related features to History.</short_desc>
          <delta_ts>2013-04-02 10:57:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julie Parent">jparent</reporter>
          <assigned_to name="Julie Parent">jparent</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>867289</commentid>
    <comment_count>0</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-01 12:47:18 -0700</bug_when>
    <thetext>Dashboard refactor: Move dashboard specific history related features to History.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867297</commentid>
    <comment_count>1</comment_count>
      <attachid>196009</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-01 12:50:49 -0700</bug_when>
    <thetext>Created attachment 196009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867461</commentid>
    <comment_count>2</comment_count>
      <attachid>196009</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-04-01 18:13:23 -0700</bug_when>
    <thetext>Comment on attachment 196009
Patch

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

&gt; Tools/TestResultServer/static-dashboards/aggregate_results.js:49
&gt; +        this.dashboardSpecificState[key] = value == &apos;true&apos;;

Ack. This is kind of gross. How about passing in the history object as the first argument to this function?

&gt; Tools/TestResultServer/static-dashboards/aggregate_results.js:68
&gt; +var g_history = new history.History(aggregateResultsConfig);
&gt; +g_history.parseCrossDashboardParameters();

Do we want to eventually not have a g_history global at all? i.e. just pass it to any functions that need it? If so, you could add the FIXMEs now.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:141
&gt; +    if (this.crossDashboardState.useTestData)

ditto

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:242
&gt; +// Sets the page state to regenerate the page.

I realize you&apos;re just copying this comment, but this is no longer accurate.

&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:253
&gt; +            for (var currentKey in this.dashboardSpecificState) {
&gt; +              if (isInvalidKeyForCrossBuilderView(currentKey)) {
&gt; +                delete this.dashboardSpecificState[currentKey];
&gt; +              }
&gt; +            }

I realize you&apos;re just copying this comment, but this is no longer accurate.

&gt; Tools/TestResultServer/static-dashboards/history.js:109
&gt; +history.History = function(dashboardSpecificConfiguration)

I think you can just call this argument &quot;configuration&quot;.

&gt; Tools/TestResultServer/static-dashboards/history.js:118
&gt; +        this._DB_SPECIFIC_INVALIDATING_PARAMETERS = dashboardSpecificConfiguration.dbSpecificInvalidatingParameters;

DB? db?

Also, this is not a constant, so should be camel-case.

&gt; Tools/TestResultServer/static-dashboards/history.js:119
&gt; +        this.generatePage = dashboardSpecificConfiguration.generatePageCallback;

This can be private?

&gt; Tools/TestResultServer/static-dashboards/history.js:125
&gt; +// Map of parameter to other parameter it invalidates.

This comment doesn&apos;t really add value. May as well delete while you&apos;re moving the code.

&gt; Tools/TestResultServer/static-dashboards/treemap.js:90
&gt; +    generatePageCallback: generatePage,

How about just calling this generatePage? You don&apos;t explicitly make the other ones have &quot;callback&quot; in the name.

&gt; Tools/TestResultServer/static-dashboards/treemap.js:93
&gt; +    dbSpecificInvalidatingParameters: DB_SPECIFIC_INVALIDATING_PARAMETERS

How about just calling this invalidatingHashParameters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867490</commentid>
    <comment_count>3</comment_count>
      <attachid>196059</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-01 19:33:47 -0700</bug_when>
    <thetext>Created attachment 196059
Most review feedback complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867491</commentid>
    <comment_count>4</comment_count>
      <attachid>196009</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-01 19:34:33 -0700</bug_when>
    <thetext>Comment on attachment 196009
Patch

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

I still need to address the &quot;this&quot; object issues, but wanted to reply to the other comments first.

&gt;&gt; Tools/TestResultServer/static-dashboards/aggregate_results.js:68
&gt;&gt; +g_history.parseCrossDashboardParameters();
&gt; 
&gt; Do we want to eventually not have a g_history global at all? i.e. just pass it to any functions that need it? If so, you could add the FIXMEs now.

Yeah.  Added FIXMEs.

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:242
&gt;&gt; +// Sets the page state to regenerate the page.
&gt; 
&gt; I realize you&apos;re just copying this comment, but this is no longer accurate.

removed

&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:253
&gt;&gt; +            }
&gt; 
&gt; I realize you&apos;re just copying this comment, but this is no longer accurate.

I&apos;m not sure what line this is in reference to?  There isn&apos;t a comment here.

&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:109
&gt;&gt; +history.History = function(dashboardSpecificConfiguration)
&gt; 
&gt; I think you can just call this argument &quot;configuration&quot;.

Done.

&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:118
&gt;&gt; +        this._DB_SPECIFIC_INVALIDATING_PARAMETERS = dashboardSpecificConfiguration.dbSpecificInvalidatingParameters;
&gt; 
&gt; DB? db?
&gt; 
&gt; Also, this is not a constant, so should be camel-case.

It is a constant.

The name was just copied from before, but fixed to spell out dashboard.

&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:125
&gt;&gt; +// Map of parameter to other parameter it invalidates.
&gt; 
&gt; This comment doesn&apos;t really add value. May as well delete while you&apos;re moving the code.

Done.

&gt;&gt; Tools/TestResultServer/static-dashboards/treemap.js:90
&gt;&gt; +    generatePageCallback: generatePage,
&gt; 
&gt; How about just calling this generatePage? You don&apos;t explicitly make the other ones have &quot;callback&quot; in the name.

Done.

&gt;&gt; Tools/TestResultServer/static-dashboards/treemap.js:93
&gt;&gt; +    dbSpecificInvalidatingParameters: DB_SPECIFIC_INVALIDATING_PARAMETERS
&gt; 
&gt; How about just calling this invalidatingHashParameters

Because there are cross dashboard ones too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867502</commentid>
    <comment_count>5</comment_count>
      <attachid>196009</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-04-01 20:21:39 -0700</bug_when>
    <thetext>Comment on attachment 196009
Patch

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

&gt;&gt;&gt; Tools/TestResultServer/static-dashboards/flakiness_dashboard.js:253
&gt;&gt;&gt; +            }
&gt;&gt; 
&gt;&gt; I realize you&apos;re just copying this comment, but this is no longer accurate.
&gt; 
&gt; I&apos;m not sure what line this is in reference to?  There isn&apos;t a comment here.

Not sure what happened here.

&gt;&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:118
&gt;&gt;&gt; +        this._DB_SPECIFIC_INVALIDATING_PARAMETERS = dashboardSpecificConfiguration.dbSpecificInvalidatingParameters;
&gt;&gt; 
&gt;&gt; DB? db?
&gt;&gt; 
&gt;&gt; Also, this is not a constant, so should be camel-case.
&gt; 
&gt; It is a constant.
&gt; 
&gt; The name was just copied from before, but fixed to spell out dashboard.

It&apos;s not a constant...you&apos;re setting it. By that sense, wouldn&apos;t all of these be constants?

&gt;&gt;&gt; Tools/TestResultServer/static-dashboards/treemap.js:93
&gt;&gt;&gt; +    dbSpecificInvalidatingParameters: DB_SPECIFIC_INVALIDATING_PARAMETERS
&gt;&gt; 
&gt;&gt; How about just calling this invalidatingHashParameters
&gt; 
&gt; Because there are cross dashboard ones too?

I guess...you can&apos;t set the cross dashboard ones though...that&apos;s all private to History.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867933</commentid>
    <comment_count>6</comment_count>
      <attachid>196009</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-02 09:29:11 -0700</bug_when>
    <thetext>Comment on attachment 196009
Patch

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

&gt;&gt; Tools/TestResultServer/static-dashboards/aggregate_results.js:49
&gt;&gt; +        this.dashboardSpecificState[key] = value == &apos;true&apos;;
&gt; 
&gt; Ack. This is kind of gross. How about passing in the history object as the first argument to this function?

You weren&apos;t supposed to notice that :)  Changed to pass history obj around, here and in all other similar cases.

&gt;&gt;&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:118
&gt;&gt;&gt;&gt; +        this._DB_SPECIFIC_INVALIDATING_PARAMETERS = dashboardSpecificConfiguration.dbSpecificInvalidatingParameters;
&gt;&gt;&gt; 
&gt;&gt;&gt; DB? db?
&gt;&gt;&gt; 
&gt;&gt;&gt; Also, this is not a constant, so should be camel-case.
&gt;&gt; 
&gt;&gt; It is a constant.
&gt;&gt; 
&gt;&gt; The name was just copied from before, but fixed to spell out dashboard.
&gt; 
&gt; It&apos;s not a constant...you&apos;re setting it. By that sense, wouldn&apos;t all of these be constants?

I don&apos;t know what I was thinking. It was constant before, but clearly isn&apos;t now.  Fixed.

&gt;&gt; Tools/TestResultServer/static-dashboards/history.js:119
&gt;&gt; +        this.generatePage = dashboardSpecificConfiguration.generatePageCallback;
&gt; 
&gt; This can be private?

Indeed it can.  Good catch.

&gt;&gt;&gt;&gt; Tools/TestResultServer/static-dashboards/treemap.js:93
&gt;&gt;&gt;&gt; +    dbSpecificInvalidatingParameters: DB_SPECIFIC_INVALIDATING_PARAMETERS
&gt;&gt;&gt; 
&gt;&gt;&gt; How about just calling this invalidatingHashParameters
&gt;&gt; 
&gt;&gt; Because there are cross dashboard ones too?
&gt; 
&gt; I guess...you can&apos;t set the cross dashboard ones though...that&apos;s all private to History.

Ok. Sure, changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867934</commentid>
    <comment_count>7</comment_count>
      <attachid>196161</attachid>
    <who name="Julie Parent">jparent</who>
    <bug_when>2013-04-02 09:29:34 -0700</bug_when>
    <thetext>Created attachment 196161
Finished review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868031</commentid>
    <comment_count>8</comment_count>
      <attachid>196161</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-02 10:57:39 -0700</bug_when>
    <thetext>Comment on attachment 196161
Finished review feedback

Clearing flags on attachment: 196161

Committed r147457: &lt;http://trac.webkit.org/changeset/147457&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868032</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-02 10:57:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196009</attachid>
            <date>2013-04-01 12:50:49 -0700</date>
            <delta_ts>2013-04-02 09:29:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113717-20130401125042.patch</filename>
            <type>text/plain</type>
            <size>36189</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MzQ0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGEzZTRiNjQ5ZWJjNDEwNGQzYjBkZWRjNDI0YzEzNDYw
ZTA2NjIyMS4uMjk1MjE2NWIyYzBlODIwOTdmZmQxMDlhNzA2Yzg0OWIyODkxNDRhYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEzLTA0LTAxICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBEYXNoYm9hcmQgcmVmYWN0b3I6IE1vdmUgZGFzaGJvYXJkIHNwZWNpZmljIGhpc3Rv
cnkgcmVsYXRlZCBmZWF0dXJlcyB0byBIaXN0b3J5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBFYWNoIGRhc2hib2FyZCBub3cgY3JlYXRl
cyBpdHMgb3duIEhpc3Rvcnkgb2JqZWN0LCB3aXRoIGEgY3VzdG9tCisgICAgICAgIGNvbmZpZ3Vy
YXRpb24uIFRoaXMgY2hhbmdlcyBmcm9tIGp1c3Qgb3ZlcnJpZGluZyBnbG9iYWwgZnVuY3Rpb25z
CisgICAgICAgIHRvIHBhc3NpbmcgaW4gY2FsbGJhY2tzIGZvciBnZW5lcmF0ZVBhZ2UsIGhhbmRs
ZVZhbGlkSGFzaFBhcmFtZXRlciwKKyAgICAgICAgYW5kIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hh
bmdlLiBTYW1lIHdpdGggcGFzc2luZyBpbiBkZWZhdWx0U3RhdGVWYWx1ZXMKKyAgICAgICAgYW5k
IERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTVMsIHJhdGhlciB0aGFuIG92ZXJyaWRpbmcg
dGhlIGdsb2JhbAorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIAorICAgICAgICBBbGwgZnVu
Y3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdyAobW9zdGx5KSBwcml2YXRl
CisgICAgICAgIGZ1bmN0aW9uIG9uIEhpc3RvcnkuIAorICAgICAgICAKKyAgICAgICAgTG9hZGVy
IG5vIGxvbmdlciBuZWVkcyBhIGxvYWRpbmdDb21wbGV0ZSBjYWxsYmFjaywgc2luY2UgaXQgY2Fu
IGp1c3QKKyAgICAgICAgaW5pdGlhbGl6ZSB0aGUgaGlzdG9yeSBvYmplY3QgaXRzZWxmLgorCisg
ICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVz
dWx0cy5qczoKKyAgICAgICAgKGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcik6CisgICAgICAgICog
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qczoKKyAg
ICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAgICAgICAoLnN3aXRjaC5yZXR1
cm4pOgorICAgICAgICAoaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UpOgorICAgICAgICAqIFRl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0
dGVzdHMuanM6CisgICAgICAgIChyZXNldEdsb2JhbHMpOgorICAgICAgICAqIFRlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2Fk
ZXJfdW5pdHRlc3RzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAg
ICAgICAoaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMpOgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qczoKKyAgICAgICAgKGdlbmVyYXRl
UGFnZSk6CisgICAgICAgICguc3dpdGNoLnJldHVybik6CisgICAgICAgIChoYW5kbGVRdWVyeVBh
cmFtZXRlckNoYW5nZSk6CisKIDIwMTMtMDQtMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDcz
MTkuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5qcwppbmRleCAwZmQyZGZlOTM4MTdhYzJhYzQyNzhl
NjQyNDIyM2Q5NzQzNDU2NzY3Li4yZDIwZTFiZjYxOTFjMTdkMTc2NDM5NWE4MWYzMWIwZjZlMDMy
ZTc1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuanMKQEAgLTM0LDkgKzM0LDYgQEAKIC8vICAg
ICAtY29weSB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbgogLy8gICAgIC1hZGQgdGhl
IGJ1aWxkZXIgbmFtZSB0byB0aGUgbGlzdCBvZiBidWlsZGVycyBpbiBkYXNoYm9hcmRfYmFzZS5q
cy4KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20g
ZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1
bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7CiAgICAgdmFyIGh0bWwgPSB1aS5odG1sLnRlc3RUeXBl
U3dpdGNoZXIodHJ1ZSkgKyAnPGJyPic7CkBAIC00OSw3ICs0Niw3IEBAIGZ1bmN0aW9uIGhhbmRs
ZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogewogICAgIHN3aXRjaChrZXkpIHsKICAg
ICBjYXNlICdyYXdWYWx1ZXMnOgotICAgICAgICBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOworICAgICAgICB0aGlzLmRhc2hib2FyZFNwZWNp
ZmljU3RhdGVba2V5XSA9IHZhbHVlID09ICd0cnVlJzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBkZWZhdWx0OgpAQCAtNTcsMTAgKzU0LDE5IEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFz
aFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIH0KIH0KIAotZ19kZWZhdWx0RGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZVZhbHVlcyA9IHsKK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZh
bHVlcyA9IHsKICAgICByYXdWYWx1ZXM6IGZhbHNlCiB9OwogCisKK3ZhciBhZ2dyZWdhdGVSZXN1
bHRzQ29uZmlnID0geworICAgIGRlZmF1bHRTdGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2FyZFNw
ZWNpZmljU3RhdGVWYWx1ZXMsCisgICAgZ2VuZXJhdGVQYWdlQ2FsbGJhY2s6IGdlbmVyYXRlUGFn
ZSwKKyAgICBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRl
ciwKK307Cit2YXIgZ19oaXN0b3J5ID0gbmV3IGhpc3RvcnkuSGlzdG9yeShhZ2dyZWdhdGVSZXN1
bHRzQ29uZmlnKTsKK2dfaGlzdG9yeS5wYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOwor
CiBmdW5jdGlvbiBodG1sRm9yQnVpbGRlcihidWlsZGVyKQogewogICAgIHZhciByZXN1bHRzID0g
Z19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdOwpAQCAtMjY3LDYgKzI3Myw2IEBAIGZ1bmN0aW9u
IGV4dGVuZGVkRW5jb2RlKGFyclZhbHMsIG1heFZhbCkKIH0KIAogd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcg
bG9hZGVyLkxvYWRlcihpbnRpYWxpemVIaXN0b3J5KTsKKyAgICB2YXIgcmVzb3VyY2VMb2FkZXIg
PSBuZXcgbG9hZGVyLkxvYWRlcigpOwogICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKIH0sIGZh
bHNlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCmluZGV4IDhiMWJjYmZlZDllYTE3ZWQxNjQ0NGRiODg0
ZmMwMjZhZmNiYWRlZTQuLjFlZjFkNmU1NWQ0NzA4YjkzMTEzYWQzYjNkY2RhYTFmOGY3NzQyZGQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFz
aGJvYXJkX2Jhc2UuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9kYXNoYm9hcmRfYmFzZS5qcwpAQCAtMjksMzYgKzI5LDcgQEAKIC8vIEBmaWxlb3ZlcnZp
ZXcgQmFzZSBKUyBmaWxlIGZvciBwYWdlcyB0aGF0IHdhbnQgdG8gcGFyc2UgdGhlIHJlc3VsdHMg
SlNPTgogLy8gZnJvbSB0aGUgdGVzdGluZyBib3RzLiBUaGlzIGRlYWxzIHdpdGggZ2VuZXJpYyB1
dGlsaXR5IGZ1bmN0aW9ucywgdmlzaWJsZQogLy8gaGlzdG9yeSwgcG9wdXBzIGFuZCBhcHBlbmRp
bmcgdGhlIHNjcmlwdCBlbGVtZW50cyBmb3IgdGhlIEpTT04gZmlsZXMuCi0vLwotLy8gVGhlIGNh
bGxpbmcgcGFnZSBpcyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyAiYWJzdHJh
Y3QiCi0vLyBmdW5jdGlvbnMvb2JqZWN0czoKLQotLy8gR2VuZXJhdGVzIHRoZSBjb250ZW50cyBv
ZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aXRoCi0vLyBh
IGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYWdlIGFzc3VtaW5nIGFsbCByZXNvdXJjZXMg
aGF2ZSBsb2FkZWQuCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKSB7fQotCi0vLyBUYWtlcyBhIGtl
eSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3Rh
dGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKLS8vIGEgdmFsaWQgaGFzaCBwYXJhbWV0ZXIgYW5k
IHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4KLS8vCi0vLyBAcmV0dXJu
IHtib29sZWFufSBXaGV0aGVyIHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBpbnRvIHRoZSBnX2hpc3Rv
cnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS4KLWZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFt
ZXRlcihrZXksIHZhbHVlKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KIAotLy8gRGVmYXVsdCBo
YXNoIHBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhp
cyB0byBjcmVhdGUKLS8vIGRlZmF1bHQgc3RhdGVzLgotdmFyIGdfZGVmYXVsdERhc2hib2FyZFNw
ZWNpZmljU3RhdGVWYWx1ZXMgPSB7fTsKLQotCi0vLyBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUg
dGhpcyB0byBtb2RpZnkgcGFnZSBzdGF0ZSBkdWUgdG8KLS8vIGNoYW5naW5nIHF1ZXJ5IHBhcmFt
ZXRlcnMuCi0vLyBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE5ldyBvciBtb2RpZmllZCBxdWVyeSBw
YXJhbXMgYXMga2V5OiB2YWx1ZS4KLS8vIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgY2hhbmdp
bmcgdGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGNhdXNlIGdlbmVyYXRlUGFnZSB0byBiZSBjYWxsZWQu
Ci1mdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMpCi17Ci0gICAgcmV0
dXJuIHRydWU7Ci19CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQ09OU1RBTlRTCkBAIC04
NCwxMSArNTUsNiBAQCB2YXIgTEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF8gPSB7CiAgICAg
J08nOiAnTUlTU0lORycKIH07CiAKLS8vIE1hcCBvZiBwYXJhbWV0ZXIgdG8gb3RoZXIgcGFyYW1l
dGVyIGl0IGludmFsaWRhdGVzLgotdmFyIENST1NTX0RCX0lOVkFMSURBVElOR19QQVJBTUVURVJT
ID0gewotICAgICd0ZXN0VHlwZSc6ICdncm91cCcKLX07Ci12YXIgREJfU1BFQ0lGSUNfSU5WQUxJ
REFUSU5HX1BBUkFNRVRFUlM7CiAKIC8vIEtleXMgaW4gdGhlIEpTT04gZmlsZXMuCiB2YXIgV09O
VEZJWF9DT1VOVFNfS0VZID0gJ3dvbnRmaXhDb3VudHMnOwpAQCAtMTY3LDI1ICsxMzMsNiBAQCBm
dW5jdGlvbiAkKGlkKQogICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiB9
CiAKLWZ1bmN0aW9uIHBhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCkKLXsKLSAgICBn
X2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSA9IHt9OwotICAgIHZhciBwYXJhbWV0ZXJz
ID0gaGlzdG9yeS5xdWVyeUhhc2hBc01hcCgpOwotICAgIGZvciAocGFyYW1ldGVyTmFtZSBpbiBn
X2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQotICAgICAgICBnX2hpc3Rvcnku
cGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVycywgcGFyYW1ldGVyTmFtZSk7Ci19Ci0KLWZ1bmN0aW9u
IGRlZmF1bHRWYWx1ZShrZXkpCi17Ci0gICAgaWYgKGtleSBpbiBnX2RlZmF1bHREYXNoYm9hcmRT
cGVjaWZpY1N0YXRlVmFsdWVzKQotICAgICAgICByZXR1cm4gZ19kZWZhdWx0RGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZVZhbHVlc1trZXldOwotICAgIHJldHVybiBoaXN0b3J5LkRFRkFVTFRfQ1JPU1Nf
REFTSEJPQVJEX1NUQVRFX1ZBTFVFU1trZXldOwotfQotCi0vLyBUT0RPKGpwYXJlbnQpOiBFYWNo
IGRiIHNob3VsZCBjcmVhdGUgdGhlaXIgb3duIGhpc3Rvcnkgb2JqLCBub3QgZ2xvYmFsLgotdmFy
IGdfaGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoKTsKLWdfaGlzdG9yeS5wYXJzZUNyb3Nz
RGFzaGJvYXJkUGFyYW1ldGVycygpOwotCiBmdW5jdGlvbiBjdXJyZW50QnVpbGRlckdyb3VwQ2F0
ZWdvcnkoKQogewogICAgIHN3aXRjaCAoZ19oaXN0b3J5LmNyb3NzRGFzaGJvYXJkU3RhdGUudGVz
dFR5cGUpIHsKQEAgLTIzNiwxOCArMTgzLDYgQEAgZnVuY3Rpb24gaXNGbGFraW5lc3NEYXNoYm9h
cmQoKQogICAgIHJldHVybiBzdHJpbmcuZW5kc1dpdGgod2luZG93LmxvY2F0aW9uLnBhdGhuYW1l
LCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJyk7CiB9CiAKLWZ1bmN0aW9uIGhhbmRsZUxvY2F0
aW9uQ2hhbmdlKCkKLXsKLSAgICBpZiAoZ19oaXN0b3J5LnBhcnNlUGFyYW1ldGVycygpKQotICAg
ICAgICBnZW5lcmF0ZVBhZ2UoKTsKLX0KLQotLy8gVE9ETyhqcGFyZW50KTogTW92ZSB0aGlzIHRv
IHVwY29taW5nIEhpc3Rvcnkgb2JqZWN0LgotZnVuY3Rpb24gaW50aWFsaXplSGlzdG9yeSgpIHsK
LSAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gaGFuZGxlTG9jYXRpb25DaGFuZ2U7Ci0gICAgaGFu
ZGxlTG9jYXRpb25DaGFuZ2UoKTsKLX0KLQogLy8gQ3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGgg
c29tZSBvZiBpdHMgYXJndWVtZW50cwogLy8gcHJlLWZpbGxlZC4KIC8vIFRha2VuIGZyb20gZ29v
Zy5wYXJ0aWFsIGluIHRoZSBDbG9zdXJlIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuanMKaW5kZXggNmE5NDg1NTVjYWNhZDI0MzRkZDA4ZmM0OTlkMmVlNGVlYWVkODE5Ni4uMWEy
ZTA4MzQxNjg2MzE4NDI5ODg2MmJiMGU3OTIxYWEwZGQ0Mzg0MCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpz
CisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNz
X2Rhc2hib2FyZC5qcwpAQCAtMTM2LDEyICsxMzYsOSBAQCB2YXIgVklSVFVBTF9TVUlURVMgPSB7
CiAKIHZhciByZXNvdXJjZUxvYWRlcjsKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNZXRo
b2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7Ci0gICAgaWYgKGdf
aGlzdG9yeS5jcm9zc0Rhc2hib2FyZFN0YXRlLnVzZVRlc3REYXRhKQorICAgIGlmICh0aGlzLmNy
b3NzRGFzaGJvYXJkU3RhdGUudXNlVGVzdERhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImxvYWRpbmctdWkiPkxPQURJTkcuLi48
L2Rpdj4nOwpAQCAtMTQ5LDEyICsxNDYsMTIgQEAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKIAog
ICAgIC8vIHRlc3RzIGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQgbWF0Y2ggdGhlIENTViBsaXN0
LgogICAgIC8vIHJlc3VsdCBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0aGF0IGV2ZXIgaGF2ZSB0aGUg
Z2l2ZW4gcmVzdWx0Ci0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRl
c3RzIHx8IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnJlc3VsdCkKKyAgICBpZiAo
dGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRlc3RzIHx8IHRoaXMuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZS5yZXN1bHQpCiAgICAgICAgIGdlbmVyYXRlUGFnZUZvckluZGl2aWR1YWxUZXN0cyhp
bmRpdmlkdWFsVGVzdHMoKSk7Ci0gICAgZWxzZSBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuZXhwZWN0YXRpb25zVXBkYXRlKQorICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJk
U3BlY2lmaWNTdGF0ZS5leHBlY3RhdGlvbnNVcGRhdGUpCiAgICAgICAgIGdlbmVyYXRlUGFnZUZv
ckV4cGVjdGF0aW9uc1VwZGF0ZSgpOwogICAgIGVsc2UKLSAgICAgICAgZ2VuZXJhdGVQYWdlRm9y
QnVpbGRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJl
bnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpKTsKKyAgICAgICAgZ2VuZXJhdGVQYWdl
Rm9yQnVpbGRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50
QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKSk7CiAKICAgICBmb3IgKHZhciBidWlsZGVy
IGluIGN1cnJlbnRCdWlsZGVycygpKQogICAgICAgICBwcm9jZXNzVGVzdFJlc3VsdHNGb3JCdWls
ZGVyQXN5bmMoYnVpbGRlcik7CkBAIC0xNjYsNyArMTYzLDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFs
aWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiB7CiAgICAgc3dpdGNoKGtleSkgewogICAgIGNh
c2UgJ3Rlc3RzJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3Rvcnku
ZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxp
ZGF0ZVBhcmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCiAg
ICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLmlz
VmFsaWROYW1lKHZhbHVlKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTc0LDcgKzE3MSw3IEBAIGZ1
bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogCiAgICAgY2FzZSAn
cmVzdWx0JzoKICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpOwotICAgICAgICBo
aXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LCBrZXksIHZhbHVlLAorICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKHRoaXMuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBpbiBMQVlPVVRfVEVTVF9FWFBFQ1RB
VElPTlNfTUFQXykgewogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTEFZT1VUX1RF
U1RfRVhQRUNUQVRJT05TX01BUF9bcmVzdWx0XSkKQEAgLTE4NSw3ICsxODIsNyBAQCBmdW5jdGlv
biBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBjYXNlICdidWlsZGVyJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFt
ZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAg
ICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUs
IGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgaW4gY3VycmVudEJ1aWxkZXJzKCk7CiAgICAgICAgICAgICB9KTsKQEAgLTE5
MywxMCArMTkwLDEwIEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZh
bHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgJ3NvcnRDb2x1bW4nOgotICAg
ICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKHRo
aXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgcG9zc2libGUgaGVhZGVycyBzaW5j
ZSB0aGUgYWN0dWFsIHVzZWQgc2V0IG9mIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAvLyBkZXBl
bmRzIG9uIHRoZSB2YWx1ZXMgaW4gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHdo
aWNoIGFyZSBjdXJyZW50bHkgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAgIC8vIGRlcGVuZHMg
b24gdGhlIHZhbHVlcyBpbiB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHdoaWNoIGFyZSBj
dXJyZW50bHkgYmVpbmcgc2V0LgogICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0gdGFibGVI
ZWFkZXJzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVy
cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gc29ydENv
bHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJzW2ldKSkKQEAgLTIwNyw3ICsyMDQsNyBAQCBmdW5j
dGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBjYXNlICdzb3J0T3JkZXInOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRl
UGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAor
ICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA9PSBGT1JXQVJEIHx8IHZhbHVlID09IEJBQ0tXQVJEOwogICAgICAg
ICAgICAgfSk7CkBAIC0yMTYsNyArMjEzLDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFy
YW1ldGVyKGtleSwgdmFsdWUpCiAgICAgY2FzZSAncmVzdWx0c0hlaWdodCc6CiAgICAgY2FzZSAn
dXBkYXRlSW5kZXgnOgogICAgIGNhc2UgJ3JldmlzaW9uJzoKLSAgICAgICAgaGlzdG9yeS52YWxp
ZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCBOdW1i
ZXIodmFsdWUpLAorICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKHRoaXMuZGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZSwga2V5LCBOdW1iZXIodmFsdWUpLAogICAgICAgICAgICAgZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hdGNoKC9eXGQrJC8pOwogICAg
ICAgICAgICAgfSk7CkBAIC0yMzQsNyArMjMxLDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNo
UGFyYW1ldGVyKGtleSwgdmFsdWUpCiAgICAgY2FzZSAnc2hvd1VuZXhwZWN0ZWRQYXNzZXMnOgog
ICAgIGNhc2UgJ3Nob3dXb250Rml4U2tpcCc6CiAgICAgY2FzZSAnZXhwZWN0YXRpb25zVXBkYXRl
JzoKLSAgICAgICAgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGVba2V5XSA9IHZhbHVl
ID09ICd0cnVlJzsKKyAgICAgICAgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2tleV0gPSB2
YWx1ZSA9PSAndHJ1ZSc7CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZGVmYXVsdDoKQEAg
LTI0Miw3ICsyMzksMjggQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwg
dmFsdWUpCiAgICAgfQogfQogCi1nX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVz
ID0geworLy8gU2V0cyB0aGUgcGFnZSBzdGF0ZSB0byByZWdlbmVyYXRlIHRoZSBwYWdlLgorLy8g
QHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1ldGVycyBh
cyBrZXk6IHZhbHVlLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1z
KQoreworICAgIGZvciAoa2V5IGluIHBhcmFtcykgeworICAgICAgICBpZiAoa2V5ID09ICd0ZXN0
cycpIHsKKyAgICAgICAgICAgIC8vIEVudGVyaW5nIGNyb3NzLWJ1aWxkZXIgdmlldywgb25seSBr
ZWVwIHZhbGlkIGtleXMgZm9yIHRoYXQgdmlldy4KKyAgICAgICAgICAgIGZvciAodmFyIGN1cnJl
bnRLZXkgaW4gdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKSB7CisgICAgICAgICAgICAgIGlm
IChpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGN1cnJlbnRLZXkpKSB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVtjdXJyZW50S2V5XTsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzSW52
YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoa2V5KSkgeworICAgICAgICAgICAgZGVsZXRlIHRo
aXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50ZXN0czsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlz
LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVl
cyA9IHsKICAgICBzb3J0T3JkZXI6IEJBQ0tXQVJELAogICAgIHNvcnRDb2x1bW46ICdmbGFraW5l
c3MnLAogICAgIHNob3dFeHBlY3RhdGlvbnM6IGZhbHNlLApAQCAtMjY1LDEyICsyODMsMjMgQEAg
Z19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKICAgICBidWlsZGVyOiBu
dWxsCiB9OwogCi1EQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKK3ZhciBE
Ql9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKICAgICAndGVzdHMnIDogJ2J1
aWxkZXInLAogICAgICd0ZXN0VHlwZSc6ICdidWlsZGVyJywKICAgICAnZ3JvdXAnOiAnYnVpbGRl
cicKIH07CiAKKwordmFyIGZsYWtpbmVzc0NvbmZpZyA9IHsKKyAgICBkZWZhdWx0U3RhdGVWYWx1
ZXM6IGRlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzLAorICAgIGdlbmVyYXRlUGFn
ZUNhbGxiYWNrOiBnZW5lcmF0ZVBhZ2UsCisgICAgaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyOiBo
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIsCisgICAgaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2U6
IGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlLAorICAgIGRiU3BlY2lmaWNJbnZhbGlkYXRpbmdQ
YXJhbWV0ZXJzOiBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUworfTsKK3ZhciBn
X2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZpZyk7CitnX2hpc3Rv
cnkucGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKKwogLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLyBHTE9CQUxTCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTI0OTIsMjcgKzI1MjEs
NiBAQCBmdW5jdGlvbiBpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKICAgICBy
ZXR1cm4gIShrZXkgaW4gVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAmJiAhKGtl
eSBpbiBoaXN0b3J5LkRFRkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFUyk7CiB9CiAK
LS8vIFNldHMgdGhlIHBhZ2Ugc3RhdGUgdG8gcmVnZW5lcmF0ZSB0aGUgcGFnZS4KLS8vIEBwYXJh
bSB7T2JqZWN0fSBwYXJhbXMgTmV3IG9yIG1vZGlmaWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXMga2V5
OiB2YWx1ZS4KLWZ1bmN0aW9uIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKLXsK
LSAgICBmb3IgKGtleSBpbiBwYXJhbXMpIHsKLSAgICAgICAgaWYgKGtleSA9PSAndGVzdHMnKSB7
Ci0gICAgICAgICAgICAvLyBFbnRlcmluZyBjcm9zcy1idWlsZGVyIHZpZXcsIG9ubHkga2VlcCB2
YWxpZCBrZXlzIGZvciB0aGF0IHZpZXcuCi0gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50S2V5
IGluIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKSB7Ci0gICAgICAgICAgICAgIGlm
IChpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGN1cnJlbnRLZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgZGVsZXRlIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2N1cnJlbnRL
ZXldOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpKSB7Ci0gICAgICAgICAgICBkZWxl
dGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHM7Ci0gICAgICAgICAgICBk
ZWxldGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0OwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGZ1bmN0aW9uIGhpZGVMZWdlbmQoKQog
ewogICAgIHZhciBsZWdlbmQgPSAkKCdsZWdlbmQnKTsKQEAgLTI2MDYsNiArMjYxNCw2IEBAIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiB9LCBmYWxz
ZSk7CiAKIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7Ci0gICAg
cmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVIaXN0b3J5KTsKKyAg
ICByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7CiAgICAgcmVzb3VyY2VMb2Fk
ZXIubG9hZCgpOwogfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2Fy
ZF91bml0dGVzdHMuanMKaW5kZXggYzJjYTY2OGY3MGRkM2M2OWZhZGE1MWFhYzUxYjNkYTI1M2Ni
MzkyOS4uNmUyYzU5NzQwNmY4ZjhlNTRhYjZkYzJmMTM3Yjc4MThkMzFiZjI0ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkX3VuaXR0ZXN0cy5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCkBAIC0zNSw3ICszNSw3
IEBAIGZ1bmN0aW9uIHJlc2V0R2xvYmFscygpCiAgICAgZ19yZXN1bHRzQnlCdWlsZGVyID0ge307
CiAgICAgZ19hbGxFeHBlY3RhdGlvbnMgPSBudWxsOwogICAgIGdfYWxsVGVzdHNUcmllID0gbnVs
bDsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAg
IHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZp
Zyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFsIGlzbid0
IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGdfdGVzdFRvUmVz
dWx0c01hcCA9IHt9OwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHRlc3QoJ292ZXJyaWRlSnVzdEJ1aWxk
VHlwZScsIDEyLCBmdW5jdGlvbigpIHsKIH0pOwogCiB0ZXN0KCdwbGF0Zm9ybUFuZEJ1aWxkVHlw
ZScsIDc4LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3Rv
cnkuSGlzdG9yeSgpOworICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0
b3J5KGZsYWtpbmVzc0NvbmZpZyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IENoYW5nZSB0byB1
c2UgdGhlIGZsYWtpbmVzc19kYidzIGhpc3Rvcnkgb2JqZWN0CiAgICAgLy8gb25jZSBpdCBleGlz
dHMsIHJhdGhlciB0aGFuIHRyYWNraW5nIGdsb2JhbC4KICAgICBnX2hpc3RvcnkgPSBoaXN0b3J5
SW5zdGFuY2U7CkBAIC0zMTIsNyArMzEyLDcgQEAgdGVzdCgnZ2V0RXhwZWN0YXRpb25zJywgMTYs
IGZ1bmN0aW9uKCkgewogfSk7CiAKIHRlc3QoJ3N1YnN0cmluZ0xpc3QnLCAyLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAg
IHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZp
Zyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFsIGlzbid0
IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGhpc3RvcnlJbnN0
YW5jZS5jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2d0ZXN0JzsKQEAgLTMyNSw3ICsz
MjUsNyBAQCB0ZXN0KCdzdWJzdHJpbmdMaXN0JywgMiwgZnVuY3Rpb24oKSB7CiB9KTsKIAogdGVz
dCgnaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMnLCA0LCBmdW5jdGlv
bigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOwor
ICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGRlZmF1bHREYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzLCBnZW5lcmF0ZVBhZ2UsIGhhbmRsZVZhbGlkSGFzaFBh
cmFtZXRlcik7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFs
IGlzbid0IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGxvYWRC
dWlsZGVyc0xpc3QoJ0BUb1QgLSBjaHJvbWl1bS5vcmcnLCAnbGF5b3V0LXRlc3RzJyk7CkBAIC0z
NjEsNyArMzYxLDcgQEAgdGVzdCgnaGVhZGVyRm9yVGVzdFRhYmxlSHRtbCcsIDEsIGZ1bmN0aW9u
KCkgewogfSk7CiAKIHRlc3QoJ2h0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5j
dGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgp
OworICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVz
c0NvbmZpZyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFs
IGlzbid0IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIHZhciBj
b250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKQEAgLTcwMSw3ICs3MDEs
NyBAQCB0ZXN0KCdjaGFuZ2VUZXN0VHlwZUludmFsaWRhdGVzR3JvdXAnLCAxLCBmdW5jdGlvbigp
IHsKIH0pOwogCiB0ZXN0KCdzaG91bGRIaWRlVGVzdCcsIDEwLCBmdW5jdGlvbigpIHsKLSAgICB2
YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAgIHZhciBoaXN0
b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZpZyk7CiAgICAg
aGlzdG9yeUluc3RhbmNlLnBhcnNlUGFyYW1ldGVycygpOwogICAgIC8vIEZJWE1FKGpwYXJlbnQp
OiBDaGFuZ2UgdG8gdXNlIHRoZSBmbGFraW5lc3NfZGFzaGJvYXJkJ3MgaGlzdG9yeSBvYmplY3QK
ICAgICAvLyBvbmNlIGl0IGV4aXN0cywgcmF0aGVyIHRoYW4gdHJhY2tpbmcgZ2xvYmFsLgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5
LmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5Lmpz
CmluZGV4IDQ5YzcxMDg4NTI2ZTM5MjE4ZGM1MDZjMjEzNzZiODUzZTRmNWNlZjguLmM0NWUwMmVi
YTVhZTQyY2IyMjg0YjU5OWZjYTZlNGIxYmRhZWNhZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qcworKysgYi9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3RvcnkuanMKQEAgLTEwNiwxNSArMTA2
LDMzIEBAIGhpc3RvcnkuX2ZpbGxNaXNzaW5nVmFsdWVzID0gZnVuY3Rpb24odG8sIGZyb20pCiAg
ICAgfQogfQogCi1oaXN0b3J5Lkhpc3RvcnkgPSBmdW5jdGlvbigpCitoaXN0b3J5Lkhpc3Rvcnkg
PSBmdW5jdGlvbihkYXNoYm9hcmRTcGVjaWZpY0NvbmZpZ3VyYXRpb24pCiB7Ci0gIHRoaXMuY3Jv
c3NEYXNoYm9hcmRTdGF0ZSA9IHt9OwotICB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUgPSB7
fTsKKyAgICB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGUgPSB7fTsKKyAgICB0aGlzLmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGUgPSB7fTsKKworICAgIGlmIChkYXNoYm9hcmRTcGVjaWZpY0NvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgdGhpcy5fZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1
ZXMgPSBkYXNoYm9hcmRTcGVjaWZpY0NvbmZpZ3VyYXRpb24uZGVmYXVsdFN0YXRlVmFsdWVzOwor
ICAgICAgICB0aGlzLl9oYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIgPSBkYXNoYm9hcmRTcGVjaWZp
Y0NvbmZpZ3VyYXRpb24uaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyOworICAgICAgICB0aGlzLl9o
YW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZSA9IGRhc2hib2FyZFNwZWNpZmljQ29uZmlndXJhdGlv
bi5oYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZSB8fCBmdW5jdGlvbihwYXJhbXMpIHsgcmV0dXJu
IHRydWU7IH07CisgICAgICAgIHRoaXMuX0RCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVU
RVJTID0gZGFzaGJvYXJkU3BlY2lmaWNDb25maWd1cmF0aW9uLmRiU3BlY2lmaWNJbnZhbGlkYXRp
bmdQYXJhbWV0ZXJzOworICAgICAgICB0aGlzLmdlbmVyYXRlUGFnZSA9IGRhc2hib2FyZFNwZWNp
ZmljQ29uZmlndXJhdGlvbi5nZW5lcmF0ZVBhZ2VDYWxsYmFjazsKKyAgICB9CiB9CiAKIHZhciBS
RUxPQURfUkVRVUlSSU5HX1BBUkFNRVRFUlMgPSBbJ3Nob3dBbGxSdW5zJywgJ2dyb3VwJywgJ3Rl
c3RUeXBlJ107CiAKKy8vIE1hcCBvZiBwYXJhbWV0ZXIgdG8gb3RoZXIgcGFyYW1ldGVyIGl0IGlu
dmFsaWRhdGVzLgordmFyIENST1NTX0RCX0lOVkFMSURBVElOR19QQVJBTUVURVJTID0geworICAg
ICd0ZXN0VHlwZSc6ICdncm91cCcKK307CisKIGhpc3RvcnkuSGlzdG9yeS5wcm90b3R5cGUgPSB7
CisgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd2luZG93Lm9uaGFz
aGNoYW5nZSA9IHRoaXMuX2hhbmRsZUxvY2F0aW9uQ2hhbmdlLmJpbmQodGhpcyk7CisgICAgICAg
IHRoaXMuX2hhbmRsZUxvY2F0aW9uQ2hhbmdlKCk7CisgICAgfSwKICAgICBpc0xheW91dFRlc3RS
ZXN1bHRzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5jcm9zc0Rhc2hi
b2FyZFN0YXRlLnRlc3RUeXBlID09ICdsYXlvdXQtdGVzdHMnOwpAQCAtMTMyLDYgKzE1MCwxMyBA
QCBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogCiAgICAgICAgIGhpc3RvcnkuX2ZpbGxN
aXNzaW5nVmFsdWVzKHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSwgaGlzdG9yeS5ERUZBVUxUX0NS
T1NTX0RBU0hCT0FSRF9TVEFURV9WQUxVRVMpOwogICAgIH0sCisgICAgX3BhcnNlRGFzaGJvYXJk
U3BlY2lmaWNQYXJhbWV0ZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUgPSB7fTsKKyAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBoaXN0b3J5
LnF1ZXJ5SGFzaEFzTWFwKCk7CisgICAgICAgIGZvciAocGFyYW1ldGVyTmFtZSBpbiB0aGlzLl9k
ZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcykKKyAgICAgICAgICAgIHRoaXMucGFy
c2VQYXJhbWV0ZXIocGFyYW1ldGVycywgcGFyYW1ldGVyTmFtZSk7CisgICAgfSwKICAgICAvLyBU
T0RPKGpwYXJlbnQpOiBNYWtlIHByaXZhdGUgb25jZSBjYWxsZXJzIG1vdmUgaGVyZS4KICAgICBw
YXJzZVBhcmFtZXRlcnM6IGZ1bmN0aW9uKCkKICAgICB7CkBAIC0xNTAsMTAgKzE3NSwxMCBAQCBo
aXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSAgICAgICAgcGFyc2VEYXNoYm9hcmRTcGVjaWZpY1BhcmFtZXRlcnMoKTsKKyAgICAgICAgdGhp
cy5fcGFyc2VEYXNoYm9hcmRTcGVjaWZpY1BhcmFtZXRlcnMoKTsKICAgICAgICAgdmFyIGRhc2hi
b2FyZFNwZWNpZmljRGlmZlN0YXRlID0gaGlzdG9yeS5fZGlmZlN0YXRlcyhvbGREYXNoYm9hcmRT
cGVjaWZpY1N0YXRlLCB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUpOwogCi0gICAgICAgIGhp
c3RvcnkuX2ZpbGxNaXNzaW5nVmFsdWVzKHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwgZ19k
ZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyk7CisgICAgICAgIGhpc3RvcnkuX2Zp
bGxNaXNzaW5nVmFsdWVzKHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwgdGhpcy5fZGVmYXVs
dERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMpOwogCiAgICAgICAgIC8vIEZJWE1FOiBkYXNo
Ym9hcmRfYmFzZSBzaG91bGRuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBzcGVjaWZpYyBkYXNoYm9h
cmQgc3BlY2lmaWMga2V5cy4KICAgICAgICAgaWYgKGRhc2hib2FyZFNwZWNpZmljRGlmZlN0YXRl
LmJ1aWxkZXIpCkBAIC0xNjMsNyArMTg4LDcgQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9
IHsKIAogICAgICAgICB2YXIgc2hvdWxkR2VuZXJhdGVQYWdlID0gdHJ1ZTsKICAgICAgICAgaWYg
KE9iamVjdC5rZXlzKGRhc2hib2FyZFNwZWNpZmljRGlmZlN0YXRlKS5sZW5ndGgpCi0gICAgICAg
ICAgICBzaG91bGRHZW5lcmF0ZVBhZ2UgPSBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShkYXNo
Ym9hcmRTcGVjaWZpY0RpZmZTdGF0ZSk7CisgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZVBhZ2Ug
PSB0aGlzLl9oYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShkYXNoYm9hcmRTcGVjaWZpY0RpZmZT
dGF0ZSk7CiAgICAgICAgIHJldHVybiBzaG91bGRHZW5lcmF0ZVBhZ2U7CiAgICAgfSwKICAgICAv
LyBUT0RPKGpwYXJlbnQpOiBNYWtlIHByaXZhdGUgb25jZSBjYWxsZXJzIG1vdmUgaGVyZS4KQEAg
LTIwNSw3ICsyMzAsNyBAQCBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBo
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpOwogICAgICAgICB9CiAg
ICAgfSwKICAgICBxdWVyeVBhcmFtZXRlclZhbHVlOiBmdW5jdGlvbihwYXJhbWV0ZXIpCkBAIC0y
NDMsOCArMjY4LDggQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9y
ICh2YXIga2V5IGluIHF1ZXJ5UGFyYW1zQXNTdGF0ZSkgewogICAgICAgICAgICAgaWYgKGtleSBp
biBDUk9TU19EQl9JTlZBTElEQVRJTkdfUEFSQU1FVEVSUykKICAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5jcm9zc0Rhc2hib2FyZFN0YXRlW0NST1NTX0RCX0lOVkFMSURBVElOR19QQVJBTUVU
RVJTW2tleV1dOwotICAgICAgICAgICAgaWYgKERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJB
TUVURVJTICYmIGtleSBpbiBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUykKLSAg
ICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW0RCX1NQRUNJ
RklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTW2tleV1dOworICAgICAgICAgICAgaWYgKHRoaXMu
X0RCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTICYmIGtleSBpbiB0aGlzLl9EQl9T
UEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUykKKyAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW3RoaXMuX0RCX1NQRUNJRklDX0lOVkFMSURBVElO
R19QQVJBTUVURVJTW2tleV1dOwogICAgICAgICB9CiAgICAgfSwKICAgICBfam9pblBhcmFtZXRl
cnM6IGZ1bmN0aW9uKHN0YXRlT2JqZWN0KQpAQCAtMjUyLDcgKzI3Nyw3IEBAIGhpc3RvcnkuSGlz
dG9yeS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzdGF0ZSA9IFtdOwogICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gc3RhdGVPYmplY3QpIHsKICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0YXRl
T2JqZWN0W2tleV07Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT0gZGVmYXVsdFZhbHVlKGtleSkp
CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gdGhpcy5fZGVmYXVsdFZhbHVlKGtleSkpCiAgICAg
ICAgICAgICAgICAgc3RhdGUucHVzaChrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFs
dWUpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RhdGUuam9pbignJicpOwpAQCAtMjY4
LDcgKzI5MywxOSBAQCBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gdGhpcy5jcm9zc0Rhc2hib2FyZFN0YXRlKQogICAgICAgICAgICAgY29tYmlu
ZWRTdGF0ZVtrZXldID0gdGhpcy5jcm9zc0Rhc2hib2FyZFN0YXRlW2tleV07CiAgICAgICAgIHJl
dHVybiBjb21iaW5lZFN0YXRlOyAgICAKKyAgICB9LAorICAgIF9kZWZhdWx0VmFsdWU6IGZ1bmN0
aW9uKGtleSkKKyAgICB7CisgICAgICAgIGlmIChrZXkgaW4gdGhpcy5fZGVmYXVsdERhc2hib2Fy
ZFNwZWNpZmljU3RhdGVWYWx1ZXMpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdERh
c2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXNba2V5XTsKKyAgICAgICAgcmV0dXJuIGhpc3Rvcnku
REVGQVVMVF9DUk9TU19EQVNIQk9BUkRfU1RBVEVfVkFMVUVTW2tleV07CisgICAgfSwKKyAgICBf
aGFuZGxlTG9jYXRpb25DaGFuZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LnBhcnNlUGFyYW1ldGVycygpKQorICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVBhZ2UoKTsKICAg
ICB9CisKIH0KIAogfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlci5qcyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzCmluZGV4IGE1
MjZlZWI1MjhjNzZlYTg1NTVlMGNkZTdlODFmMjY4ODJmOWFjOGEuLjhkODQ2ODIzMDVkOTk5ZTA2
MTM3YjM5MzBhMTIzMzQ4YjMxMDQ4ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzCkBAIC01Nyw3ICs1Nyw3IEBAIGxvYWRlci5y
ZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBzdWNjZXNzLCBlcnJvciwgb3B0X2lzQmluYXJ5RGF0YSkK
ICAgICB4aHIuc2VuZCgpOwogfQogCi1sb2FkZXIuTG9hZGVyID0gZnVuY3Rpb24ob3B0X29uTG9h
ZGluZ0NvbXBsZXRlKQorbG9hZGVyLkxvYWRlciA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLl9s
b2FkaW5nU3RlcHMgPSBbCiAgICAgICAgIHRoaXMuX2xvYWRCdWlsZGVyc0xpc3QsCkBAIC02OCw3
ICs2OCw2IEBAIGxvYWRlci5Mb2FkZXIgPSBmdW5jdGlvbihvcHRfb25Mb2FkaW5nQ29tcGxldGUp
CiAgICAgdGhpcy5fYnVpbGRlcnNUaGF0RmFpbGVkVG9Mb2FkID0gW107CiAgICAgdGhpcy5fc3Rh
bGVCdWlsZGVycyA9IFtdOwogICAgIHRoaXMuX2Vycm9ycyA9IG5ldyB1aS5FcnJvcnMoKTsKLSAg
ICB0aGlzLl9vbkxvYWRpbmdDb21wbGV0ZSA9IG9wdF9vbkxvYWRpbmdDb21wbGV0ZSB8fCBmdW5j
dGlvbigpIHt9OwogICAgIC8vIFRPRE8oanBhcmVudCk6IFBhc3MgaW4gdGhlIGFwcHJvcHJpYXRl
IGhpc3Rvcnkgb2JqIHBlciBkYi4KICAgICB0aGlzLl9oaXN0b3J5ID0gZ19oaXN0b3J5OwogfQpA
QCAtMTA3LDcgKzEwNiw3IEBAIGxvYWRlci5Mb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgbG9hZGluZ1N0ZXAgPSB0aGlzLl9sb2FkaW5nU3RlcHMuc2hpZnQoKTsKICAgICAgICAgaWYg
KCFsb2FkaW5nU3RlcCkgewogICAgICAgICAgICAgdGhpcy5fYWRkRXJyb3JzKCk7Ci0gICAgICAg
ICAgICB0aGlzLl9vbkxvYWRpbmdDb21wbGV0ZSgpOworICAgICAgICAgICAgdGhpcy5faGlzdG9y
eS5pbml0aWFsaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
bG9hZGluZ1N0ZXAuYXBwbHkodGhpcyk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlcl91bml0dGVzdHMuanMgYi9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlcl91bml0dGVzdHMuanMKaW5kZXggMjNl
YWIzMTg3OTcwNTM0YmU0YTAyNGVkNWU3NWM3ZjQ0NTJkNDgwYy4uODNkMjBlMTlmZjBmNGJhM2E5
NDBmMDI3NDc1NjcwYTEyM2FjNDJjZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5pdHRlc3RzLmpzCisrKyBiL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyX3VuaXR0ZXN0cy5qcwpAQCAtMzEs
MTEgKzMxLDEwIEBAIG1vZHVsZSgnbG9hZGVyJyk7CiB0ZXN0KCdsb2FkaW5nIHN0ZXBzJywgMSwg
ZnVuY3Rpb24oKSB7CiAgICAgcmVzZXRHbG9iYWxzKCk7CiAgICAgdmFyIGxvYWRlZFN0ZXBzID0g
W107Ci0gICAgdmFyIGxvYWRpbmdDb21wbGV0ZUNhbGxiYWNrID0gaGFuZGxlTG9jYXRpb25DaGFu
Z2U7Ci0gICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBnX2hpc3Rv
cnkuX2hhbmRsZUxvY2F0aW9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIGRlZXBFcXVh
bChsb2FkZWRTdGVwcywgWydzdGVwIDEnLCAnc3RlcCAyJ10pOwogICAgIH0KLSAgICB2YXIgcmVz
b3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihoYW5kbGVMb2NhdGlvbkNoYW5nZSk7Cisg
ICAgdmFyIHJlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKICAgICBmdW5jdGlv
biBsb2FkaW5nU3RlcDEoKSB7CiAgICAgICAgIGxvYWRlZFN0ZXBzLnB1c2goJ3N0ZXAgMScpOwog
ICAgICAgICByZXNvdXJjZUxvYWRlci5sb2FkKCk7CkBAIC00OCw5ICs0Nyw3IEBAIHRlc3QoJ2xv
YWRpbmcgc3RlcHMnLCAxLCBmdW5jdGlvbigpIHsKICAgICB0cnkgewogICAgICAgICByZXNvdXJj
ZUxvYWRlci5fbG9hZGluZ1N0ZXBzID0gW2xvYWRpbmdTdGVwMSwgbG9hZGluZ1N0ZXAyXTsKICAg
ICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGhh
bmRsZUxvY2F0aW9uQ2hhbmdlID0gbG9hZGluZ0NvbXBsZXRlQ2FsbGJhY2s7Ci0gICAgfQorICAg
IH0gCiB9KTsKIAogLy8gVG90YWwgbnVtYmVyIG9mIGFzc2VydGlvbnMgaXMgMSBmb3IgdGhlIGRl
ZXBFcXVhbCBvZiB0aGUgYnVpbGRlciBsaXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5qcyBiL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanMKaW5k
ZXggZGQ0OThiZDVlZmRlYmU5NjA1MWZkODZlYjU1M2EyYzVmNDgzZmJiNS4uOTVjMjY4MTA5MTNl
MzYwNmY5Y2VhYjdmN2I3YTgwOGRmODdhNGQ2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGluZV9leHBsb3Jlci5qcworKysgYi9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmpz
CkBAIC0zMiwyMSArMzIsMjkgQEAgdmFyIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXAgPSB7fTsK
IHZhciBnX2N1cnJlbnRCdWlsZEluZGV4ID0gLTE7CiB2YXIgZ19jdXJyZW50QnVpbGRlclRlc3RS
ZXN1bHRzOwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIE1ldGhvZHMgYW5kIG9iamVjdHMg
ZnJvbSBkYXNoYm9hcmRfYmFzZS5qcyB0byBvdmVycmlkZS4KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwordmFyIGRlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzID0geworICAgIGJ1aWxk
ZXI6IG51bGwsCisgICAgYnVpbGRUaW1lc3RhbXA6IC0xLAorICAgIGlnbm9yZUZsYWt5VGVzdHM6
IHRydWUKK307CisKK3ZhciBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsK
KyAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCisgICAgJ2dyb3VwJzogJ2J1aWxkZXInCit9Owor
CiBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQogewogICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3Rh
bXAgPSB7fTsKLSAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltnX2hpc3Rvcnku
ZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5k
ZWZhdWx0QnVpbGRlcigpXTsKKyAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlclt0
aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3Vw
KCkuZGVmYXVsdEJ1aWxkZXIoKV07CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHNb
RklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGg7IGkrKykgewogICAgICAgICB2YXIgYnVpbGREYXRl
ID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBTX0tFWV1baV0gKiAxMDAwKTsKICAgICAgICAg
Z19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtidWlsZERhdGUuZ2V0VGltZSgpXSA9IGk7CiAgICAg
fQogCi0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0
YW1wICE9IC0xICYmIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0
YW1wIGluIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXApIHsKLSAgICAgICAgdmFyIG5ld0J1aWxk
SW5kZXggPSBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVj
aWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wXTsKKyAgICBpZiAodGhpcy5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLmJ1aWxkVGltZXN0YW1wICE9IC0xICYmIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5idWlsZFRpbWVzdGFtcCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7CisgICAgICAg
IHZhciBuZXdCdWlsZEluZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFt0aGlzLmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXBdOwogCiAgICAgICAgIGlmIChuZXdCdWls
ZEluZGV4ID09IGdfY3VycmVudEJ1aWxkSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaGFw
cGVucyB3aGVuIHNlbGVjdEJ1aWxkIGlzIGNhbGxlZCwgd2hpY2ggdXBkYXRlcyB0aGUgVUkKQEAg
LTYxLDQ3ICs2OSw0NSBAQCBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQogICAgIGluaXRDdXJyZW50
QnVpbGRlclRlc3RSZXN1bHRzKCk7CiAKICAgICAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5pbm5l
ckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIoIGZhbHNlLAotICAgICAgICB1aS5odG1s
LmNoZWNrYm94KCdpZ25vcmVGbGFreVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGdfaGlz
dG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmlnbm9yZUZsYWt5VGVzdHMsICdnX2N1cnJlbnRC
dWlsZEluZGV4ID0gLTEnKQorICAgICAgICB1aS5odG1sLmNoZWNrYm94KCdpZ25vcmVGbGFreVRl
c3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5p
Z25vcmVGbGFreVRlc3RzLCAnZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xJykKICAgICApOwogCiAg
ICAgdXBkYXRlVGltZWxpbmVGb3JCdWlsZGVyKCk7CiB9CiAKLWZ1bmN0aW9uIGluaXRDdXJyZW50
QnVpbGRlclRlc3RSZXN1bHRzKCkKLXsKLSAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsK
LSAgICBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMgPSBfZGVjb21wcmVzc1Jlc3VsdHMoZ19y
ZXN1bHRzQnlCdWlsZGVyW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkZXIg
fHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldKTsKLSAgICBjb25zb2xl
LmxvZyggJ1RpbWUgdG8gZ2V0IHRlc3QgcmVzdWx0cyBieSBidWlsZDogJyArIChEYXRlLm5vdygp
IC0gc3RhcnRUaW1lKSk7Ci19Ci0KIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihr
ZXksIHZhbHVlKQogewogICAgIHN3aXRjaChrZXkpIHsKICAgICBjYXNlICdidWlsZGVyJzoKLSAg
ICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcih0
aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5j
dGlvbigpIHsgcmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOyB9KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSAnYnVpbGRUaW1lc3RhbXAnOgotICAgICAgICBnX2hpc3Rv
cnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZFRpbWVzdGFtcCA9IHBhcnNlSW50KHZhbHVl
LCAxMCk7CisgICAgICAgIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZFRpbWVzdGFt
cCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2Ug
J2lnbm9yZUZsYWt5VGVzdHMnOgotICAgICAgICBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZS5pZ25vcmVGbGFreVRlc3RzID0gdmFsdWUgPT0gJ3RydWUnOworICAgICAgICB0aGlzLmRh
c2hib2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIH0KIAotZ19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsK
LSAgICBidWlsZGVyOiBudWxsLAotICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKLSAgICBpZ25vcmVG
bGFreVRlc3RzOiB0cnVlCit2YXIgdGltZWxpbmVDb25maWcgPSB7CisgICAgZGVmYXVsdFN0YXRl
VmFsdWVzOiBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywKKyAgICBnZW5lcmF0
ZVBhZ2VDYWxsYmFjazogZ2VuZXJhdGVQYWdlLAorICAgIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRl
cjogaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyLAorICAgIGRiU3BlY2lmaWNJbnZhbGlkYXRpbmdQ
YXJhbWV0ZXJzOiBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUwogfTsKK3ZhciBn
X2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KHRpbWVsaW5lQ29uZmlnKTsKK2dfaGlzdG9y
eS5wYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOwogCi1EQl9TUEVDSUZJQ19JTlZBTElE
QVRJTkdfUEFSQU1FVEVSUyA9IHsKLSAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCi0gICAgJ2dy
b3VwJzogJ2J1aWxkZXInCi19OworZnVuY3Rpb24gaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3Vs
dHMoKQoreworICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOworICAgIGdfY3VycmVudEJ1
aWxkZXJUZXN0UmVzdWx0cyA9IF9kZWNvbXByZXNzUmVzdWx0cyhnX3Jlc3VsdHNCeUJ1aWxkZXJb
Z19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRl
ckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV0pOworICAgIGNvbnNvbGUubG9nKCAnVGltZSB0byBn
ZXQgdGVzdCByZXN1bHRzIGJ5IGJ1aWxkOiAnICsgKERhdGUubm93KCkgLSBzdGFydFRpbWUpKTsK
K30KIAogZnVuY3Rpb24gc2hvdWxkU2hvd1dlYktpdFJldmlzaW9uc09ubHkoKQogewpAQCAtNDg4
LDYgKzQ5NCw2IEBAIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlv
bihlKSB7CiB9KTsKIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVI
aXN0b3J5KTsKKyAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcigpOwog
ICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKIH0sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qcyBiL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qcwppbmRleCBhMjYxZGZk
MGFkNDU0OTE3ZmQ3NzEzZjg5NmJkMjBjZjlhNTMzMzgyLi44MjI1Y2FlZDRmOTE4ODcyMWRkOTAy
ZmIzNjRlMmZmZjUyMzA1NDE0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmpzCkBAIC0yNiw2ICsyNiw3NSBAQAogLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCit2YXIgZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3Rh
dGVWYWx1ZXMgPSB7CisgICAgYnVpbGRlcjogbnVsbCwKKyAgICB0cmVlbWFwZm9jdXM6ICcnLAor
fTsKKwordmFyIERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTID0geworICAgICd0
ZXN0VHlwZSc6ICdidWlsZGVyJywKKyAgICAnZ3JvdXAnOiAnYnVpbGRlcicKK307CisKK2Z1bmN0
aW9uIGdlbmVyYXRlUGFnZSgpCit7CisgICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRN
TCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlcigpOworCisgICAgZ19pc0dlbmVyYXRpbmdQYWdl
ID0gdHJ1ZTsKKworICAgIHZhciByYXdUcmVlID0gZ19yZXN1bHRzQnlCdWlsZGVyW3RoaXMuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZh
dWx0QnVpbGRlcigpXTsKKyAgICBnX3dlYlRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0
KCdMYXlvdXRUZXN0cycsIHJhd1RyZWUpOworICAgIGFwcGVuZFRyZWVtYXAoJCgnbWFwJyksIGdf
d2ViVHJlZSk7CisKKyAgICBpZiAodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRyZWVtYXBm
b2N1cykKKyAgICAgICAgZm9jdXNQYXRoKGdfd2ViVHJlZSwgdGhpcy5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLnRyZWVtYXBmb2N1cykKKworICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9IGZhbHNlOwor
fQorCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2goa2V5KSB7CisgICAgY2FzZSAnYnVpbGRlcic6CisgICAgICAgIGhpc3RvcnkudmFs
aWRhdGVQYXJhbWV0ZXIodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAor
ICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZSBpbiBjdXJyZW50QnVpbGRlcnMo
KTsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSAndHJlZW1hcGZvY3VzJzoK
KyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlcmUncyBwcm9iYWJseSBhIHNpbXBsZXIgcmVnZXhwIGhlcmUuIEp1
c3QgdHJ5aW5nIHRvIG1hdGNoIGFzY2lpICsgZm9yd2FyZC1zbGFzaC4KKyAgICAgICAgICAgICAg
ICAvLyBlLmcuIExheW91dFRlc3RzL2Zvby9iYXIuaHRtbAorICAgICAgICAgICAgICAgIHJldHVy
biAodmFsdWUubWF0Y2goL14oXHcrXC9cdyopKiQvKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMpCit7
CisgICAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7CisgICAgICAgIGlmIChwYXJhbSAhPSAn
dHJlZW1hcGZvY3VzJykgeworICAgICAgICAgICAgJCgnbWFwJykuaW5uZXJIVE1MID0gJ0xvYWRp
bmcuLi4nOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2YXIgdHJlZW1hcENvbmZpZyA9IHsKKyAgICBkZWZhdWx0U3Rh
dGVWYWx1ZXM6IGRlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzLAorICAgIGdlbmVy
YXRlUGFnZUNhbGxiYWNrOiBnZW5lcmF0ZVBhZ2UsCisgICAgaGFuZGxlVmFsaWRIYXNoUGFyYW1l
dGVyOiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIsCisgICAgaGFuZGxlUXVlcnlQYXJhbWV0ZXJD
aGFuZ2U6IGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlLAorICAgIGRiU3BlY2lmaWNJbnZhbGlk
YXRpbmdQYXJhbWV0ZXJzOiBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUworfTsK
K3ZhciBnX2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KHRyZWVtYXBDb25maWcpOworZ19o
aXN0b3J5LnBhcnNlQ3Jvc3NEYXNoYm9hcmRQYXJhbWV0ZXJzKCk7CisKIHZhciBURVNUX1VSTF9C
QVNFX1BBVEggPSAiaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5r
LyI7CiAKIGZ1bmN0aW9uIGh1bWFuUmVhZGFibGVUaW1lKG1pbGxpc2Vjb25kcykKQEAgLTEzNiwy
MiArMjA1LDYgQEAgZnVuY3Rpb24gc2hvd0F2ZXJhZ2VzKCkKIHZhciBnX2lzR2VuZXJhdGluZ1Bh
Z2UgPSBmYWxzZTsKIHZhciBnX3dlYlRyZWU7CiAKLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCi17
Ci0gICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IHVpLmh0bWwudGVzdFR5cGVT
d2l0Y2hlcigpOwotCi0gICAgZ19pc0dlbmVyYXRpbmdQYWdlID0gdHJ1ZTsKLQotICAgIHZhciBy
YXdUcmVlID0gZ19yZXN1bHRzQnlCdWlsZGVyW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldOwot
ICAgIGdfd2ViVHJlZSA9IGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQoJ0xheW91dFRlc3RzJywg
cmF3VHJlZSk7Ci0gICAgYXBwZW5kVHJlZW1hcCgkKCdtYXAnKSwgZ193ZWJUcmVlKTsKLQotICAg
IGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50cmVlbWFwZm9jdXMpCi0gICAg
ICAgIGZvY3VzUGF0aChnX3dlYlRyZWUsIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LnRyZWVtYXBmb2N1cykKLQotICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9IGZhbHNlOwotfQotCiBm
dW5jdGlvbiBmb2N1c1BhdGgodHJlZSwgcGF0aCkKIHsKICAgICB2YXIgcGFydHMgPSBkZWNvZGVV
UklDb21wb25lbnQocGF0aCkuc3BsaXQoJy8nKTsKQEAgLTE3OCw0OSArMjMxLDYgQEAgZnVuY3Rp
b24gZm9jdXNQYXRoKHRyZWUsIHBhdGgpCiAKIH0KIAotZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNo
UGFyYW1ldGVyKGtleSwgdmFsdWUpCi17Ci0gICAgc3dpdGNoKGtleSkgewotICAgIGNhc2UgJ2J1
aWxkZXInOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgICAgZnVuY3Rpb24oKSB7
IHJldHVybiB2YWx1ZSBpbiBjdXJyZW50QnVpbGRlcnMoKTsgfSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY2FzZSAndHJlZW1hcGZvY3VzJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0
ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwK
LSAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVy
ZSdzIHByb2JhYmx5IGEgc2ltcGxlciByZWdleHAgaGVyZS4gSnVzdCB0cnlpbmcgdG8gbWF0Y2gg
YXNjaWkgKyBmb3J3YXJkLXNsYXNoLgotICAgICAgICAgICAgICAgIC8vIGUuZy4gTGF5b3V0VGVz
dHMvZm9vL2Jhci5odG1sCi0gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihc
dytcL1x3KikqJC8pKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWdfZGVmYXVs
dERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7Ci0gICAgYnVpbGRlcjogbnVsbCwKLSAg
ICB0cmVlbWFwZm9jdXM6ICcnLAotfTsKLQotREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFN
RVRFUlMgPSB7Ci0gICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAotICAgICdncm91cCc6ICdidWls
ZGVyJwotfTsKLQotZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKQot
ewotICAgIGZvciAodmFyIHBhcmFtIGluIHBhcmFtcykgewotICAgICAgICBpZiAocGFyYW0gIT0g
J3RyZWVtYXBmb2N1cycpIHsKLSAgICAgICAgICAgICQoJ21hcCcpLmlubmVySFRNTCA9ICdMb2Fk
aW5nLi4uJzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogZnVuY3Rpb24gZXh0cmFjdE5hbWUobm9kZSkKIHsKICAgICBy
ZXR1cm4gbm9kZS5uYW1lLnNwbGl0KCcgJylbMF07CkBAIC0yNzAsNiArMjgwLDYgQEAgZnVuY3Rp
b24gaGFuZGxlRm9jdXModHJlZSkKIH0KIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQn
LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRl
cihpbnRpYWxpemVIaXN0b3J5KTsKKyAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVy
LkxvYWRlcigpOwogICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKIH0sIGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196059</attachid>
            <date>2013-04-01 19:33:47 -0700</date>
            <delta_ts>2013-04-02 09:29:32 -0700</delta_ts>
            <desc>Most review feedback complete.</desc>
            <filename>bug-113717-20130401193339.patch</filename>
            <type>text/plain</type>
            <size>36296</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MzQ0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGEzZTRiNjQ5ZWJjNDEwNGQzYjBkZWRjNDI0YzEzNDYw
ZTA2NjIyMS4uMjk1MjE2NWIyYzBlODIwOTdmZmQxMDlhNzA2Yzg0OWIyODkxNDRhYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEzLTA0LTAxICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBEYXNoYm9hcmQgcmVmYWN0b3I6IE1vdmUgZGFzaGJvYXJkIHNwZWNpZmljIGhpc3Rv
cnkgcmVsYXRlZCBmZWF0dXJlcyB0byBIaXN0b3J5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBFYWNoIGRhc2hib2FyZCBub3cgY3JlYXRl
cyBpdHMgb3duIEhpc3Rvcnkgb2JqZWN0LCB3aXRoIGEgY3VzdG9tCisgICAgICAgIGNvbmZpZ3Vy
YXRpb24uIFRoaXMgY2hhbmdlcyBmcm9tIGp1c3Qgb3ZlcnJpZGluZyBnbG9iYWwgZnVuY3Rpb25z
CisgICAgICAgIHRvIHBhc3NpbmcgaW4gY2FsbGJhY2tzIGZvciBnZW5lcmF0ZVBhZ2UsIGhhbmRs
ZVZhbGlkSGFzaFBhcmFtZXRlciwKKyAgICAgICAgYW5kIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hh
bmdlLiBTYW1lIHdpdGggcGFzc2luZyBpbiBkZWZhdWx0U3RhdGVWYWx1ZXMKKyAgICAgICAgYW5k
IERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTVMsIHJhdGhlciB0aGFuIG92ZXJyaWRpbmcg
dGhlIGdsb2JhbAorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIAorICAgICAgICBBbGwgZnVu
Y3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdyAobW9zdGx5KSBwcml2YXRl
CisgICAgICAgIGZ1bmN0aW9uIG9uIEhpc3RvcnkuIAorICAgICAgICAKKyAgICAgICAgTG9hZGVy
IG5vIGxvbmdlciBuZWVkcyBhIGxvYWRpbmdDb21wbGV0ZSBjYWxsYmFjaywgc2luY2UgaXQgY2Fu
IGp1c3QKKyAgICAgICAgaW5pdGlhbGl6ZSB0aGUgaGlzdG9yeSBvYmplY3QgaXRzZWxmLgorCisg
ICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVz
dWx0cy5qczoKKyAgICAgICAgKGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcik6CisgICAgICAgICog
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qczoKKyAg
ICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAgICAgICAoLnN3aXRjaC5yZXR1
cm4pOgorICAgICAgICAoaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UpOgorICAgICAgICAqIFRl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0
dGVzdHMuanM6CisgICAgICAgIChyZXNldEdsb2JhbHMpOgorICAgICAgICAqIFRlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2Fk
ZXJfdW5pdHRlc3RzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAg
ICAgICAoaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMpOgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qczoKKyAgICAgICAgKGdlbmVyYXRl
UGFnZSk6CisgICAgICAgICguc3dpdGNoLnJldHVybik6CisgICAgICAgIChoYW5kbGVRdWVyeVBh
cmFtZXRlckNoYW5nZSk6CisKIDIwMTMtMDQtMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDcz
MTkuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5qcwppbmRleCAwZmQyZGZlOTM4MTdhYzJhYzQyNzhl
NjQyNDIyM2Q5NzQzNDU2NzY3Li4zMTc2YmM3OTQ2NGM5MzkzMjJkOWIwYTAwOGE0ODQwYWU5NmNk
OTBmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuanMKQEAgLTM0LDkgKzM0LDYgQEAKIC8vICAg
ICAtY29weSB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbgogLy8gICAgIC1hZGQgdGhl
IGJ1aWxkZXIgbmFtZSB0byB0aGUgbGlzdCBvZiBidWlsZGVycyBpbiBkYXNoYm9hcmRfYmFzZS5q
cy4KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20g
ZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIGZ1
bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7CiAgICAgdmFyIGh0bWwgPSB1aS5odG1sLnRlc3RUeXBl
U3dpdGNoZXIodHJ1ZSkgKyAnPGJyPic7CkBAIC00OSw3ICs0Niw3IEBAIGZ1bmN0aW9uIGhhbmRs
ZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogewogICAgIHN3aXRjaChrZXkpIHsKICAg
ICBjYXNlICdyYXdWYWx1ZXMnOgotICAgICAgICBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOworICAgICAgICB0aGlzLmRhc2hib2FyZFNwZWNp
ZmljU3RhdGVba2V5XSA9IHZhbHVlID09ICd0cnVlJzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBkZWZhdWx0OgpAQCAtNTcsMTAgKzU0LDIxIEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFz
aFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIH0KIH0KIAotZ19kZWZhdWx0RGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZVZhbHVlcyA9IHsKK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZh
bHVlcyA9IHsKICAgICByYXdWYWx1ZXM6IGZhbHNlCiB9OwogCisKK3ZhciBhZ2dyZWdhdGVSZXN1
bHRzQ29uZmlnID0geworICAgIGRlZmF1bHRTdGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2FyZFNw
ZWNpZmljU3RhdGVWYWx1ZXMsCisgICAgZ2VuZXJhdGVQYWdlQ2FsbGJhY2s6IGdlbmVyYXRlUGFn
ZSwKKyAgICBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRl
ciwKK307CisKKy8vIEZJWE1FKGpwYXJlbnQpOiBFdmVudHVhbGx5IHJlbW92ZSBhbGwgdXNhZ2Ug
b2YgZ2xvYmFsIGhpc3Rvcnkgb2JqZWN0LgordmFyIGdfaGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhp
c3RvcnkoYWdncmVnYXRlUmVzdWx0c0NvbmZpZyk7CitnX2hpc3RvcnkucGFyc2VDcm9zc0Rhc2hi
b2FyZFBhcmFtZXRlcnMoKTsKKwogZnVuY3Rpb24gaHRtbEZvckJ1aWxkZXIoYnVpbGRlcikKIHsK
ICAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXTsKQEAgLTI2Nyw2
ICsyNzUsNiBAQCBmdW5jdGlvbiBleHRlbmRlZEVuY29kZShhcnJWYWxzLCBtYXhWYWwpCiB9CiAK
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJl
c291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoaW50aWFsaXplSGlzdG9yeSk7CisgICAg
dmFyIHJlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKICAgICByZXNvdXJjZUxv
YWRlci5sb2FkKCk7CiB9LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwppbmRleCA4YjFiY2Jm
ZWQ5ZWExN2VkMTY0NDRkYjg4NGZjMDI2YWZjYmFkZWU0Li4xZWYxZDZlNTVkNDcwOGI5MzExM2Fk
M2IzZGNkYWExZjhmNzc0MmRkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKQEAgLTI5LDM2ICsyOSw3
IEBACiAvLyBAZmlsZW92ZXJ2aWV3IEJhc2UgSlMgZmlsZSBmb3IgcGFnZXMgdGhhdCB3YW50IHRv
IHBhcnNlIHRoZSByZXN1bHRzIEpTT04KIC8vIGZyb20gdGhlIHRlc3RpbmcgYm90cy4gVGhpcyBk
ZWFscyB3aXRoIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMsIHZpc2libGUKIC8vIGhpc3Rvcnks
IHBvcHVwcyBhbmQgYXBwZW5kaW5nIHRoZSBzY3JpcHQgZWxlbWVudHMgZm9yIHRoZSBKU09OIGZp
bGVzLgotLy8KLS8vIFRoZSBjYWxsaW5nIHBhZ2UgaXMgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IHRo
ZSBmb2xsb3dpbmcgImFic3RyYWN0IgotLy8gZnVuY3Rpb25zL29iamVjdHM6Ci0KLS8vIEdlbmVy
YXRlcyB0aGUgY29udGVudHMgb2YgdGhlIGRhc2hib2FyZC4gVGhlIHBhZ2Ugc2hvdWxkIG92ZXJy
aWRlIHRoaXMgd2l0aAotLy8gYSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgcGFnZSBhc3N1
bWluZyBhbGwgcmVzb3VyY2VzIGhhdmUgbG9hZGVkLgotZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkg
e30KLQotLy8gVGFrZXMgYSBrZXkgYW5kIGEgdmFsdWUgYW5kIHNldHMgdGhlIGdfaGlzdG9yeS5k
YXNoYm9hcmRTcGVjaWZpY1N0YXRlW2tleV0gPSB2YWx1ZSBpZmYga2V5IGlzCi0vLyBhIHZhbGlk
IGhhc2ggcGFyYW1ldGVyIGFuZCB0aGUgdmFsdWUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBr
ZXkuCi0vLwotLy8gQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2V5IHdoYXQgaW5zZXJ0
ZWQgaW50byB0aGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuCi1mdW5jdGlvbiBo
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19CiAKLS8vIERlZmF1bHQgaGFzaCBwYXJhbWV0ZXJzIGZvciB0aGUgcGFnZS4gVGhlIHBhZ2Ug
c2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gY3JlYXRlCi0vLyBkZWZhdWx0IHN0YXRlcy4KLXZhciBn
X2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzID0ge307Ci0KLQotLy8gVGhlIHBh
Z2Ugc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gbW9kaWZ5IHBhZ2Ugc3RhdGUgZHVlIHRvCi0vLyBj
aGFuZ2luZyBxdWVyeSBwYXJhbWV0ZXJzLgotLy8gQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBOZXcg
b3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1zIGFzIGtleTogdmFsdWUuCi0vLyBAcmV0dXJuIHtib29s
ZWFufSBXaGV0aGVyIGNoYW5naW5nIHRoaXMgcGFyYW1ldGVyIHNob3VsZCBjYXVzZSBnZW5lcmF0
ZVBhZ2UgdG8gYmUgY2FsbGVkLgotZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2Uo
cGFyYW1zKQotewotICAgIHJldHVybiB0cnVlOwotfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
IC8vIENPTlNUQU5UUwpAQCAtODQsMTEgKzU1LDYgQEAgdmFyIExBWU9VVF9URVNUX0VYUEVDVEFU
SU9OU19NQVBfID0gewogICAgICdPJzogJ01JU1NJTkcnCiB9OwogCi0vLyBNYXAgb2YgcGFyYW1l
dGVyIHRvIG90aGVyIHBhcmFtZXRlciBpdCBpbnZhbGlkYXRlcy4KLXZhciBDUk9TU19EQl9JTlZB
TElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKLSAgICAndGVzdFR5cGUnOiAnZ3JvdXAnCi19OwotdmFy
IERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTOwogCiAvLyBLZXlzIGluIHRoZSBK
U09OIGZpbGVzLgogdmFyIFdPTlRGSVhfQ09VTlRTX0tFWSA9ICd3b250Zml4Q291bnRzJzsKQEAg
LTE2NywyNSArMTMzLDYgQEAgZnVuY3Rpb24gJChpZCkKICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOwogfQogCi1mdW5jdGlvbiBwYXJzZURhc2hib2FyZFNwZWNpZmljUGFy
YW1ldGVycygpCi17Ci0gICAgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUgPSB7fTsK
LSAgICB2YXIgcGFyYW1ldGVycyA9IGhpc3RvcnkucXVlcnlIYXNoQXNNYXAoKTsKLSAgICBmb3Ig
KHBhcmFtZXRlck5hbWUgaW4gZ19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcykK
LSAgICAgICAgZ19oaXN0b3J5LnBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlck5h
bWUpOwotfQotCi1mdW5jdGlvbiBkZWZhdWx0VmFsdWUoa2V5KQotewotICAgIGlmIChrZXkgaW4g
Z19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcykKLSAgICAgICAgcmV0dXJuIGdf
ZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXNba2V5XTsKLSAgICByZXR1cm4gaGlz
dG9yeS5ERUZBVUxUX0NST1NTX0RBU0hCT0FSRF9TVEFURV9WQUxVRVNba2V5XTsKLX0KLQotLy8g
VE9ETyhqcGFyZW50KTogRWFjaCBkYiBzaG91bGQgY3JlYXRlIHRoZWlyIG93biBoaXN0b3J5IG9i
aiwgbm90IGdsb2JhbC4KLXZhciBnX2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7Ci1n
X2hpc3RvcnkucGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKLQogZnVuY3Rpb24gY3Vy
cmVudEJ1aWxkZXJHcm91cENhdGVnb3J5KCkKIHsKICAgICBzd2l0Y2ggKGdfaGlzdG9yeS5jcm9z
c0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlKSB7CkBAIC0yMzYsMTggKzE4Myw2IEBAIGZ1bmN0aW9u
IGlzRmxha2luZXNzRGFzaGJvYXJkKCkKICAgICByZXR1cm4gc3RyaW5nLmVuZHNXaXRoKHdpbmRv
dy5sb2NhdGlvbi5wYXRobmFtZSwgJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcpOwogfQogCi1m
dW5jdGlvbiBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpCi17Ci0gICAgaWYgKGdfaGlzdG9yeS5wYXJz
ZVBhcmFtZXRlcnMoKSkKLSAgICAgICAgZ2VuZXJhdGVQYWdlKCk7Ci19Ci0KLS8vIFRPRE8oanBh
cmVudCk6IE1vdmUgdGhpcyB0byB1cGNvbWluZyBIaXN0b3J5IG9iamVjdC4KLWZ1bmN0aW9uIGlu
dGlhbGl6ZUhpc3RvcnkoKSB7Ci0gICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IGhhbmRsZUxvY2F0
aW9uQ2hhbmdlOwotICAgIGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCk7Ci19Ci0KIC8vIENyZWF0ZSBh
IG5ldyBmdW5jdGlvbiB3aXRoIHNvbWUgb2YgaXRzIGFyZ3VlbWVudHMKIC8vIHByZS1maWxsZWQu
CiAvLyBUYWtlbiBmcm9tIGdvb2cucGFydGlhbCBpbiB0aGUgQ2xvc3VyZSBsaWJyYXJ5LgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCmluZGV4IDZhOTQ4NTU1Y2FjYWQyNDM0ZGQwOGZjNDk5
ZDJlZTRlZWFlZDgxOTYuLjNjNGIzNzRkODcxYzQ3YzQ5ZjAxYmM4YTliMjg4OWI1ZDI3YjM1ZTQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxh
a2luZXNzX2Rhc2hib2FyZC5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanMKQEAgLTEzNiwxMiArMTM2LDkgQEAgdmFy
IFZJUlRVQUxfU1VJVEVTID0gewogCiB2YXIgcmVzb3VyY2VMb2FkZXI7CiAKLS8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9tIGRhc2hib2FyZF9iYXNlLmpz
IHRvIG92ZXJyaWRlLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBmdW5jdGlvbiBnZW5lcmF0ZVBh
Z2UoKQogewotICAgIGlmIChnX2hpc3RvcnkuY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0
YSkKKyAgICBpZiAodGhpcy5jcm9zc0Rhc2hib2FyZFN0YXRlLnVzZVRlc3REYXRhKQogICAgICAg
ICByZXR1cm47CiAKICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJsb2Fk
aW5nLXVpIj5MT0FESU5HLi4uPC9kaXY+JzsKQEAgLTE0OSwxMiArMTQ2LDEyIEBAIGZ1bmN0aW9u
IGdlbmVyYXRlUGFnZSgpCiAKICAgICAvLyB0ZXN0cyBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0aGF0
IG1hdGNoIHRoZSBDU1YgbGlzdC4KICAgICAvLyByZXN1bHQgZXhwYW5kcyB0byBhbGwgdGVzdHMg
dGhhdCBldmVyIGhhdmUgdGhlIGdpdmVuIHJlc3VsdAotICAgIGlmIChnX2hpc3RvcnkuZGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZS50ZXN0cyB8fCBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5yZXN1bHQpCisgICAgaWYgKHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50ZXN0cyB8fCB0
aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0KQogICAgICAgICBnZW5lcmF0ZVBhZ2VG
b3JJbmRpdmlkdWFsVGVzdHMoaW5kaXZpZHVhbFRlc3RzKCkpOwotICAgIGVsc2UgaWYgKGdfaGlz
dG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmV4cGVjdGF0aW9uc1VwZGF0ZSkKKyAgICBlbHNl
IGlmICh0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuZXhwZWN0YXRpb25zVXBkYXRlKQogICAg
ICAgICBnZW5lcmF0ZVBhZ2VGb3JFeHBlY3RhdGlvbnNVcGRhdGUoKTsKICAgICBlbHNlCi0gICAg
ICAgIGdlbmVyYXRlUGFnZUZvckJ1aWxkZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3Rh
dGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKSk7Cisg
ICAgICAgIGdlbmVyYXRlUGFnZUZvckJ1aWxkZXIodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCkpOwogCiAg
ICAgZm9yICh2YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRlcnMoKSkKICAgICAgICAgcHJvY2Vz
c1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFzeW5jKGJ1aWxkZXIpOwpAQCAtMTY2LDcgKzE2Myw3IEBA
IGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogewogICAgIHN3
aXRjaChrZXkpIHsKICAgICBjYXNlICd0ZXN0cyc6Ci0gICAgICAgIGhpc3RvcnkudmFsaWRhdGVQ
YXJhbWV0ZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCisg
ICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLCBrZXksIHZhbHVlLAogICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZy5pc1ZhbGlkTmFtZSh2YWx1ZSk7CiAgICAgICAgICAgICB9KTsKQEAg
LTE3NCw3ICsxNzEsNyBAQCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2
YWx1ZSkKIAogICAgIGNhc2UgJ3Jlc3VsdCc6CiAgICAgICAgIHZhbHVlID0gdmFsdWUudG9VcHBl
ckNhc2UoKTsKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0
ZVBhcmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCiAgICAg
ICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICBmb3IgKHZhciByZXN1bHQgaW4g
TEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF8pIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlID09IExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfW3Jlc3VsdF0pCkBAIC0xODUs
NyArMTgyLDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSAnYnVpbGRlcic6Ci0gICAgICAgIGhp
c3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUs
IGtleSwgdmFsdWUsCisgICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIodGhpcy5kYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAogICAgICAgICAgICAgZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOwogICAg
ICAgICAgICAgfSk7CkBAIC0xOTMsMTAgKzE5MCwxMCBAQCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhh
c2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNl
ICdzb3J0Q29sdW1uJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3Rv
cnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52
YWxpZGF0ZVBhcmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUs
CiAgICAgICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAvLyBHZXQgYWxsIHBv
c3NpYmxlIGhlYWRlcnMgc2luY2UgdGhlIGFjdHVhbCB1c2VkIHNldCBvZiBoZWFkZXJzCi0gICAg
ICAgICAgICAgICAgLy8gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIGluIGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLCB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHNldC4KKyAgICAgICAg
ICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgaW4gdGhpcy5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLCB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHNldC4KICAgICAgICAgICAgICAgICB2
YXIgaGVhZGVycyA9IHRhYmxlSGVhZGVycyh0cnVlKTsKICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlID09IHNvcnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIoaGVhZGVyc1tpXSkpCkBAIC0y
MDcsNyArMjA0LDcgQEAgZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFs
dWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSAnc29ydE9yZGVyJzoKLSAgICAg
ICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcih0aGlz
LmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gRk9SV0FSRCB8fCB2YWx1ZSA9
PSBCQUNLV0FSRDsKICAgICAgICAgICAgIH0pOwpAQCAtMjE2LDcgKzIxMyw3IEBAIGZ1bmN0aW9u
IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIGNhc2UgJ3Jlc3VsdHNI
ZWlnaHQnOgogICAgIGNhc2UgJ3VwZGF0ZUluZGV4JzoKICAgICBjYXNlICdyZXZpc2lvbic6Ci0g
ICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUsIGtleSwgTnVtYmVyKHZhbHVlKSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBh
cmFtZXRlcih0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgTnVtYmVyKHZhbHVlKSwK
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5t
YXRjaCgvXlxkKyQvKTsKICAgICAgICAgICAgIH0pOwpAQCAtMjM0LDcgKzIzMSw3IEBAIGZ1bmN0
aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIGNhc2UgJ3Nob3dV
bmV4cGVjdGVkUGFzc2VzJzoKICAgICBjYXNlICdzaG93V29udEZpeFNraXAnOgogICAgIGNhc2Ug
J2V4cGVjdGF0aW9uc1VwZGF0ZSc6Ci0gICAgICAgIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIHRoaXMuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGRlZmF1bHQ6CkBAIC0yNDIsNyArMjM5LDI3IEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlk
SGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIH0KIH0KIAotZ19kZWZhdWx0RGFzaGJvYXJk
U3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKKy8vIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgTmV3IG9y
IG1vZGlmaWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXMga2V5OiB2YWx1ZS4KK2Z1bmN0aW9uIGhhbmRs
ZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKK3sKKyAgICBmb3IgKGtleSBpbiBwYXJhbXMp
IHsKKyAgICAgICAgaWYgKGtleSA9PSAndGVzdHMnKSB7CisgICAgICAgICAgICAvLyBFbnRlcmlu
ZyBjcm9zcy1idWlsZGVyIHZpZXcsIG9ubHkga2VlcCB2YWxpZCBrZXlzIGZvciB0aGF0IHZpZXcu
CisgICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50S2V5IGluIHRoaXMuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZSkgeworICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVy
VmlldyhjdXJyZW50S2V5KSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGVbY3VycmVudEtleV07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtl
eSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVz
dHM7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2YXIgZGVmYXVs
dERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7CiAgICAgc29ydE9yZGVyOiBCQUNLV0FS
RCwKICAgICBzb3J0Q29sdW1uOiAnZmxha2luZXNzJywKICAgICBzaG93RXhwZWN0YXRpb25zOiBm
YWxzZSwKQEAgLTI2NSwxMiArMjgyLDI1IEBAIGdfZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3Rh
dGVWYWx1ZXMgPSB7CiAgICAgYnVpbGRlcjogbnVsbAogfTsKIAotREJfU1BFQ0lGSUNfSU5WQUxJ
REFUSU5HX1BBUkFNRVRFUlMgPSB7Cit2YXIgREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFN
RVRFUlMgPSB7CiAgICAgJ3Rlc3RzJyA6ICdidWlsZGVyJywKICAgICAndGVzdFR5cGUnOiAnYnVp
bGRlcicsCiAgICAgJ2dyb3VwJzogJ2J1aWxkZXInCiB9OwogCisKK3ZhciBmbGFraW5lc3NDb25m
aWcgPSB7CisgICAgZGVmYXVsdFN0YXRlVmFsdWVzOiBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZVZhbHVlcywKKyAgICBnZW5lcmF0ZVBhZ2VDYWxsYmFjazogZ2VuZXJhdGVQYWdlLAorICAg
IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcjogaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyLAorICAg
IGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlOiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZSwK
KyAgICBkYlNwZWNpZmljSW52YWxpZGF0aW5nUGFyYW1ldGVyczogREJfU1BFQ0lGSUNfSU5WQUxJ
REFUSU5HX1BBUkFNRVRFUlMKK307CisKKy8vIEZJWE1FKGpwYXJlbnQpOiBFdmVudHVhbGx5IHJl
bW92ZSBhbGwgdXNhZ2Ugb2YgZ2xvYmFsIGhpc3Rvcnkgb2JqZWN0LgordmFyIGdfaGlzdG9yeSA9
IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmlnKTsKK2dfaGlzdG9yeS5wYXJzZUNy
b3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOworCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEdM
T0JBTFMKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjQ5MiwyNyArMjUyMiw2IEBAIGZ1bmN0
aW9uIGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXcoa2V5KQogICAgIHJldHVybiAhKGtl
eSBpbiBWQUxJRF9LRVlTX0ZPUl9DUk9TU19CVUlMREVSX1ZJRVcpICYmICEoa2V5IGluIGhpc3Rv
cnkuREVGQVVMVF9DUk9TU19EQVNIQk9BUkRfU1RBVEVfVkFMVUVTKTsKIH0KIAotLy8gU2V0cyB0
aGUgcGFnZSBzdGF0ZSB0byByZWdlbmVyYXRlIHRoZSBwYWdlLgotLy8gQHBhcmFtIHtPYmplY3R9
IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1ldGVycyBhcyBrZXk6IHZhbHVlLgot
ZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKQotewotICAgIGZvciAo
a2V5IGluIHBhcmFtcykgewotICAgICAgICBpZiAoa2V5ID09ICd0ZXN0cycpIHsKLSAgICAgICAg
ICAgIC8vIEVudGVyaW5nIGNyb3NzLWJ1aWxkZXIgdmlldywgb25seSBrZWVwIHZhbGlkIGtleXMg
Zm9yIHRoYXQgdmlldy4KLSAgICAgICAgICAgIGZvciAodmFyIGN1cnJlbnRLZXkgaW4gZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUpIHsKLSAgICAgICAgICAgICAgaWYgKGlzSW52YWxp
ZEtleUZvckNyb3NzQnVpbGRlclZpZXcoY3VycmVudEtleSkpIHsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGVbY3VycmVudEtleV07Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0ludmFsaWRL
ZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBnX2hpc3Rv
cnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50ZXN0czsKLSAgICAgICAgICAgIGRlbGV0ZSBnX2hp
c3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5yZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZnVuY3Rpb24gaGlkZUxlZ2VuZCgpCiB7CiAgICAgdmFy
IGxlZ2VuZCA9ICQoJ2xlZ2VuZCcpOwpAQCAtMjYwNiw2ICsyNjE1LDYgQEAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKIH0sIGZhbHNlKTsKIAogd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKLSAgICByZXNvdXJjZUxv
YWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKGludGlhbGl6ZUhpc3RvcnkpOworICAgIHJlc291cmNl
TG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKICAgICByZXNvdXJjZUxvYWRlci5sb2FkKCk7
CiB9LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0
cy5qcwppbmRleCBjMmNhNjY4ZjcwZGQzYzY5ZmFkYTUxYWFjNTFiM2RhMjUzY2IzOTI5Li42ZTJj
NTk3NDA2ZjhmOGU1NGFiNmRjMmYxMzdiNzgxOGQzMWJmMjRmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5p
dHRlc3RzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
Zmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMKQEAgLTM1LDcgKzM1LDcgQEAgZnVuY3Rp
b24gcmVzZXRHbG9iYWxzKCkKICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXIgPSB7fTsKICAgICBnX2Fs
bEV4cGVjdGF0aW9ucyA9IG51bGw7CiAgICAgZ19hbGxUZXN0c1RyaWUgPSBudWxsOwotICAgIHZh
ciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7CisgICAgdmFyIGhpc3Rv
cnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmlnKTsKICAgICAv
LyBGSVhNRShqcGFyZW50KTogUmVtb3ZlIHRoaXMgb25jZSBnbG9iYWwgaXNuJ3QgdXNlZC4KICAg
ICBnX2hpc3RvcnkgPSBoaXN0b3J5SW5zdGFuY2U7CiAgICAgZ190ZXN0VG9SZXN1bHRzTWFwID0g
e307CkBAIC0xNDUsNyArMTQ1LDcgQEAgdGVzdCgnb3ZlcnJpZGVKdXN0QnVpbGRUeXBlJywgMTIs
IGZ1bmN0aW9uKCkgewogfSk7CiAKIHRlc3QoJ3BsYXRmb3JtQW5kQnVpbGRUeXBlJywgNzgsIGZ1
bmN0aW9uKCkgewotICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5
KCk7CisgICAgdmFyIGhpc3RvcnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2lu
ZXNzQ29uZmlnKTsKICAgICAvLyBGSVhNRShqcGFyZW50KTogQ2hhbmdlIHRvIHVzZSB0aGUgZmxh
a2luZXNzX2RiJ3MgaGlzdG9yeSBvYmplY3QKICAgICAvLyBvbmNlIGl0IGV4aXN0cywgcmF0aGVy
IHRoYW4gdHJhY2tpbmcgZ2xvYmFsLgogICAgIGdfaGlzdG9yeSA9IGhpc3RvcnlJbnN0YW5jZTsK
QEAgLTMxMiw3ICszMTIsNyBAQCB0ZXN0KCdnZXRFeHBlY3RhdGlvbnMnLCAxNiwgZnVuY3Rpb24o
KSB7CiB9KTsKIAogdGVzdCgnc3Vic3RyaW5nTGlzdCcsIDIsIGZ1bmN0aW9uKCkgewotICAgIHZh
ciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7CisgICAgdmFyIGhpc3Rv
cnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmlnKTsKICAgICAv
LyBGSVhNRShqcGFyZW50KTogUmVtb3ZlIHRoaXMgb25jZSBnbG9iYWwgaXNuJ3QgdXNlZC4KICAg
ICBnX2hpc3RvcnkgPSBoaXN0b3J5SW5zdGFuY2U7CiAgICAgaGlzdG9yeUluc3RhbmNlLmNyb3Nz
RGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgPSAnZ3Rlc3QnOwpAQCAtMzI1LDcgKzMyNSw3IEBAIHRl
c3QoJ3N1YnN0cmluZ0xpc3QnLCAyLCBmdW5jdGlvbigpIHsKIH0pOwogCiB0ZXN0KCdodG1sRm9y
VGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcycsIDQsIGZ1bmN0aW9uKCkgewotICAg
IHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7CisgICAgdmFyIGhp
c3RvcnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZGVmYXVsdERhc2hib2FyZFNwZWNp
ZmljU3RhdGVWYWx1ZXMsIGdlbmVyYXRlUGFnZSwgaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKTsK
ICAgICAvLyBGSVhNRShqcGFyZW50KTogUmVtb3ZlIHRoaXMgb25jZSBnbG9iYWwgaXNuJ3QgdXNl
ZC4KICAgICBnX2hpc3RvcnkgPSBoaXN0b3J5SW5zdGFuY2U7CiAgICAgbG9hZEJ1aWxkZXJzTGlz
dCgnQFRvVCAtIGNocm9taXVtLm9yZycsICdsYXlvdXQtdGVzdHMnKTsKQEAgLTM2MSw3ICszNjEs
NyBAQCB0ZXN0KCdoZWFkZXJGb3JUZXN0VGFibGVIdG1sJywgMSwgZnVuY3Rpb24oKSB7CiB9KTsK
IAogdGVzdCgnaHRtbEZvclRlc3RUeXBlU3dpdGNoZXJHcm91cCcsIDYsIGZ1bmN0aW9uKCkgewot
ICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7CisgICAgdmFy
IGhpc3RvcnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmlnKTsK
ICAgICAvLyBGSVhNRShqcGFyZW50KTogUmVtb3ZlIHRoaXMgb25jZSBnbG9iYWwgaXNuJ3QgdXNl
ZC4KICAgICBnX2hpc3RvcnkgPSBoaXN0b3J5SW5zdGFuY2U7CiAgICAgdmFyIGNvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwpAQCAtNzAxLDcgKzcwMSw3IEBAIHRlc3Qo
J2NoYW5nZVRlc3RUeXBlSW52YWxpZGF0ZXNHcm91cCcsIDEsIGZ1bmN0aW9uKCkgewogfSk7CiAK
IHRlc3QoJ3Nob3VsZEhpZGVUZXN0JywgMTAsIGZ1bmN0aW9uKCkgewotICAgIHZhciBoaXN0b3J5
SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KCk7CisgICAgdmFyIGhpc3RvcnlJbnN0YW5j
ZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmlnKTsKICAgICBoaXN0b3J5SW5z
dGFuY2UucGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IENoYW5nZSB0
byB1c2UgdGhlIGZsYWtpbmVzc19kYXNoYm9hcmQncyBoaXN0b3J5IG9iamVjdAogICAgIC8vIG9u
Y2UgaXQgZXhpc3RzLCByYXRoZXIgdGhhbiB0cmFja2luZyBnbG9iYWwuCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3RvcnkuanMgYi9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3RvcnkuanMKaW5kZXggNDlj
NzEwODg1MjZlMzkyMThkYzUwNmMyMTM3NmI4NTNlNGY1Y2VmOC4uNGQ3MGYzYWJiNGU4YmIzYmQ4
ZWY0NDRiMDM5Zjc3Y2RiODdjMzFiZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5LmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qcwpAQCAtMTA2LDE1ICsxMDYsMzIgQEAgaGlz
dG9yeS5fZmlsbE1pc3NpbmdWYWx1ZXMgPSBmdW5jdGlvbih0bywgZnJvbSkKICAgICB9CiB9CiAK
LWhpc3RvcnkuSGlzdG9yeSA9IGZ1bmN0aW9uKCkKK2hpc3RvcnkuSGlzdG9yeSA9IGZ1bmN0aW9u
KGNvbmZpZ3VyYXRpb24pCiB7Ci0gIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSA9IHt9OwotICB0
aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUgPSB7fTsKKyAgICB0aGlzLmNyb3NzRGFzaGJvYXJk
U3RhdGUgPSB7fTsKKyAgICB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUgPSB7fTsKKworICAg
IGlmIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIHRoaXMuX2RlZmF1bHREYXNoYm9hcmRTcGVj
aWZpY1N0YXRlVmFsdWVzID0gY29uZmlndXJhdGlvbi5kZWZhdWx0U3RhdGVWYWx1ZXM7CisgICAg
ICAgIHRoaXMuX2hhbmRsZVZhbGlkSGFzaFBhcmFtZXRlciA9IGNvbmZpZ3VyYXRpb24uaGFuZGxl
VmFsaWRIYXNoUGFyYW1ldGVyOworICAgICAgICB0aGlzLl9oYW5kbGVRdWVyeVBhcmFtZXRlckNo
YW5nZSA9IGNvbmZpZ3VyYXRpb24uaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UgfHwgZnVuY3Rp
b24ocGFyYW1zKSB7IHJldHVybiB0cnVlOyB9OworICAgICAgICB0aGlzLl9EQVNIQk9BUkRfU1BF
Q0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSBjb25maWd1cmF0aW9uLmRhc2hib2FyZFNw
ZWNpZmljSW52YWxpZGF0aW5nUGFyYW1ldGVyczsKKyAgICAgICAgdGhpcy5nZW5lcmF0ZVBhZ2Ug
PSBjb25maWd1cmF0aW9uLmdlbmVyYXRlUGFnZTsKKyAgICB9CiB9CiAKIHZhciBSRUxPQURfUkVR
VUlSSU5HX1BBUkFNRVRFUlMgPSBbJ3Nob3dBbGxSdW5zJywgJ2dyb3VwJywgJ3Rlc3RUeXBlJ107
CiAKK3ZhciBDUk9TU19EQl9JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsKKyAgICAndGVzdFR5
cGUnOiAnZ3JvdXAnCit9OworCiBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0geworICAgIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHdpbmRvdy5vbmhhc2hjaGFuZ2Ug
PSB0aGlzLl9oYW5kbGVMb2NhdGlvbkNoYW5nZS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9o
YW5kbGVMb2NhdGlvbkNoYW5nZSgpOworICAgIH0sCiAgICAgaXNMYXlvdXRUZXN0UmVzdWx0czog
ZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0
ZS50ZXN0VHlwZSA9PSAnbGF5b3V0LXRlc3RzJzsKQEAgLTEzMiw2ICsxNDksMTMgQEAgaGlzdG9y
eS5IaXN0b3J5LnByb3RvdHlwZSA9IHsKIAogICAgICAgICBoaXN0b3J5Ll9maWxsTWlzc2luZ1Zh
bHVlcyh0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGUsIGhpc3RvcnkuREVGQVVMVF9DUk9TU19EQVNI
Qk9BUkRfU1RBVEVfVkFMVUVTKTsKICAgICB9LAorICAgIF9wYXJzZURhc2hib2FyZFNwZWNpZmlj
UGFyYW1ldGVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5kYXNoYm9hcmRTcGVj
aWZpY1N0YXRlID0ge307CisgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gaGlzdG9yeS5xdWVyeUhh
c2hBc01hcCgpOworICAgICAgICBmb3IgKHBhcmFtZXRlck5hbWUgaW4gdGhpcy5fZGVmYXVsdERh
c2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMpCisgICAgICAgICAgICB0aGlzLnBhcnNlUGFyYW1l
dGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlck5hbWUpOworICAgIH0sCiAgICAgLy8gVE9ETyhqcGFy
ZW50KTogTWFrZSBwcml2YXRlIG9uY2UgY2FsbGVycyBtb3ZlIGhlcmUuCiAgICAgcGFyc2VQYXJh
bWV0ZXJzOiBmdW5jdGlvbigpCiAgICAgewpAQCAtMTUwLDEwICsxNzQsMTAgQEAgaGlzdG9yeS5I
aXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IHBhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCk7CisgICAgICAgIHRoaXMuX3BhcnNl
RGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCk7CiAgICAgICAgIHZhciBkYXNoYm9hcmRTcGVj
aWZpY0RpZmZTdGF0ZSA9IGhpc3RvcnkuX2RpZmZTdGF0ZXMob2xkRGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZSwgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKTsKIAotICAgICAgICBoaXN0b3J5Ll9m
aWxsTWlzc2luZ1ZhbHVlcyh0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGdfZGVmYXVsdERh
c2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMpOworICAgICAgICBoaXN0b3J5Ll9maWxsTWlzc2lu
Z1ZhbHVlcyh0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHRoaXMuX2RlZmF1bHREYXNoYm9h
cmRTcGVjaWZpY1N0YXRlVmFsdWVzKTsKIAogICAgICAgICAvLyBGSVhNRTogZGFzaGJvYXJkX2Jh
c2Ugc2hvdWxkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgc3BlY2lmaWMgZGFzaGJvYXJkIHNwZWNp
ZmljIGtleXMuCiAgICAgICAgIGlmIChkYXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZS5idWlsZGVy
KQpAQCAtMTYzLDcgKzE4Nyw3IEBAIGhpc3RvcnkuSGlzdG9yeS5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgdmFyIHNob3VsZEdlbmVyYXRlUGFnZSA9IHRydWU7CiAgICAgICAgIGlmIChPYmplY3Qu
a2V5cyhkYXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZSkubGVuZ3RoKQotICAgICAgICAgICAgc2hv
dWxkR2VuZXJhdGVQYWdlID0gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UoZGFzaGJvYXJkU3Bl
Y2lmaWNEaWZmU3RhdGUpOworICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVQYWdlID0gdGhpcy5f
aGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UoZGFzaGJvYXJkU3BlY2lmaWNEaWZmU3RhdGUpOwog
ICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGVQYWdlOwogICAgIH0sCiAgICAgLy8gVE9ETyhq
cGFyZW50KTogTWFrZSBwcml2YXRlIG9uY2UgY2FsbGVycyBtb3ZlIGhlcmUuCkBAIC0yMDUsNyAr
MjI5LDcgQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlVmFs
aWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hh
bmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0sCiAg
ICAgcXVlcnlQYXJhbWV0ZXJWYWx1ZTogZnVuY3Rpb24ocGFyYW1ldGVyKQpAQCAtMjQzLDggKzI2
Nyw4IEBAIGhpc3RvcnkuSGlzdG9yeS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAodmFyIGtl
eSBpbiBxdWVyeVBhcmFtc0FzU3RhdGUpIHsKICAgICAgICAgICAgIGlmIChrZXkgaW4gQ1JPU1Nf
REJfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMpCiAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMu
Y3Jvc3NEYXNoYm9hcmRTdGF0ZVtDUk9TU19EQl9JTlZBTElEQVRJTkdfUEFSQU1FVEVSU1trZXld
XTsKLSAgICAgICAgICAgIGlmIChEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyAm
JiBrZXkgaW4gREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMpCi0gICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVtEQl9TUEVDSUZJQ19JTlZB
TElEQVRJTkdfUEFSQU1FVEVSU1trZXldXTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9EQVNIQk9B
UkRfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgJiYga2V5IGluIHRoaXMuX0RBU0hC
T0FSRF9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUykKKyAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW3RoaXMuX0RBU0hCT0FSRF9TUEVDSUZJ
Q19JTlZBTElEQVRJTkdfUEFSQU1FVEVSU1trZXldXTsKICAgICAgICAgfQogICAgIH0sCiAgICAg
X2pvaW5QYXJhbWV0ZXJzOiBmdW5jdGlvbihzdGF0ZU9iamVjdCkKQEAgLTI1Miw3ICsyNzYsNyBA
QCBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc3RhdGUgPSBbXTsK
ICAgICAgICAgZm9yICh2YXIga2V5IGluIHN0YXRlT2JqZWN0KSB7CiAgICAgICAgICAgICB2YXIg
dmFsdWUgPSBzdGF0ZU9iamVjdFtrZXldOwotICAgICAgICAgICAgaWYgKHZhbHVlICE9IGRlZmF1
bHRWYWx1ZShrZXkpKQorICAgICAgICAgICAgaWYgKHZhbHVlICE9IHRoaXMuX2RlZmF1bHRWYWx1
ZShrZXkpKQogICAgICAgICAgICAgICAgIHN0YXRlLnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN0YXRlLmpvaW4o
JyYnKTsKQEAgLTI2OCw3ICsyOTIsMTkgQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSkKICAgICAg
ICAgICAgIGNvbWJpbmVkU3RhdGVba2V5XSA9IHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZVtrZXld
OwogICAgICAgICByZXR1cm4gY29tYmluZWRTdGF0ZTsgICAgCisgICAgfSwKKyAgICBfZGVmYXVs
dFZhbHVlOiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICBpZiAoa2V5IGluIHRoaXMuX2Rl
ZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzW2tleV07CisgICAgICAgIHJl
dHVybiBoaXN0b3J5LkRFRkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFU1trZXldOwor
ICAgIH0sCisgICAgX2hhbmRsZUxvY2F0aW9uQ2hhbmdlOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5wYXJzZVBhcmFtZXRlcnMoKSkKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJh
dGVQYWdlKCk7CiAgICAgfQorCiB9CiAKIH0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9s
b2FkZXIuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRl
ci5qcwppbmRleCBhNTI2ZWViNTI4Yzc2ZWE4NTU1ZTBjZGU3ZTgxZjI2ODgyZjlhYzhhLi44ZDg0
NjgyMzA1ZDk5OWUwNjEzN2IzOTMwYTEyMzM0OGIzMTA0ODg0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlci5qcworKysgYi9Ub29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlci5qcwpAQCAtNTcsNyArNTcs
NyBAQCBsb2FkZXIucmVxdWVzdCA9IGZ1bmN0aW9uKHVybCwgc3VjY2VzcywgZXJyb3IsIG9wdF9p
c0JpbmFyeURhdGEpCiAgICAgeGhyLnNlbmQoKTsKIH0KIAotbG9hZGVyLkxvYWRlciA9IGZ1bmN0
aW9uKG9wdF9vbkxvYWRpbmdDb21wbGV0ZSkKK2xvYWRlci5Mb2FkZXIgPSBmdW5jdGlvbigpCiB7
CiAgICAgdGhpcy5fbG9hZGluZ1N0ZXBzID0gWwogICAgICAgICB0aGlzLl9sb2FkQnVpbGRlcnNM
aXN0LApAQCAtNjgsNyArNjgsNiBAQCBsb2FkZXIuTG9hZGVyID0gZnVuY3Rpb24ob3B0X29uTG9h
ZGluZ0NvbXBsZXRlKQogICAgIHRoaXMuX2J1aWxkZXJzVGhhdEZhaWxlZFRvTG9hZCA9IFtdOwog
ICAgIHRoaXMuX3N0YWxlQnVpbGRlcnMgPSBbXTsKICAgICB0aGlzLl9lcnJvcnMgPSBuZXcgdWku
RXJyb3JzKCk7Ci0gICAgdGhpcy5fb25Mb2FkaW5nQ29tcGxldGUgPSBvcHRfb25Mb2FkaW5nQ29t
cGxldGUgfHwgZnVuY3Rpb24oKSB7fTsKICAgICAvLyBUT0RPKGpwYXJlbnQpOiBQYXNzIGluIHRo
ZSBhcHByb3ByaWF0ZSBoaXN0b3J5IG9iaiBwZXIgZGIuCiAgICAgdGhpcy5faGlzdG9yeSA9IGdf
aGlzdG9yeTsKIH0KQEAgLTEwNyw3ICsxMDYsNyBAQCBsb2FkZXIuTG9hZGVyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdmFyIGxvYWRpbmdTdGVwID0gdGhpcy5fbG9hZGluZ1N0ZXBzLnNoaWZ0KCk7
CiAgICAgICAgIGlmICghbG9hZGluZ1N0ZXApIHsKICAgICAgICAgICAgIHRoaXMuX2FkZEVycm9y
cygpOwotICAgICAgICAgICAgdGhpcy5fb25Mb2FkaW5nQ29tcGxldGUoKTsKKyAgICAgICAgICAg
IHRoaXMuX2hpc3RvcnkuaW5pdGlhbGl6ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGxvYWRpbmdTdGVwLmFwcGx5KHRoaXMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5pdHRlc3RzLmpzIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5pdHRlc3Rz
LmpzCmluZGV4IDIzZWFiMzE4Nzk3MDUzNGJlNGEwMjRlZDVlNzVjN2Y0NDUyZDQ4MGMuLjgzZDIw
ZTE5ZmYwZjRiYTNhOTQwZjAyNzQ3NTY3MGExMjNhYzQyY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyX3VuaXR0ZXN0cy5qcworKysg
Yi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlcl91bml0dGVz
dHMuanMKQEAgLTMxLDExICszMSwxMCBAQCBtb2R1bGUoJ2xvYWRlcicpOwogdGVzdCgnbG9hZGlu
ZyBzdGVwcycsIDEsIGZ1bmN0aW9uKCkgewogICAgIHJlc2V0R2xvYmFscygpOwogICAgIHZhciBs
b2FkZWRTdGVwcyA9IFtdOwotICAgIHZhciBsb2FkaW5nQ29tcGxldGVDYWxsYmFjayA9IGhhbmRs
ZUxvY2F0aW9uQ2hhbmdlOwotICAgIGhhbmRsZUxvY2F0aW9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7
CisgICAgZ19oaXN0b3J5Ll9oYW5kbGVMb2NhdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICBkZWVwRXF1YWwobG9hZGVkU3RlcHMsIFsnc3RlcCAxJywgJ3N0ZXAgMiddKTsKICAgICB9
Ci0gICAgdmFyIHJlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoaGFuZGxlTG9jYXRp
b25DaGFuZ2UpOworICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7
CiAgICAgZnVuY3Rpb24gbG9hZGluZ1N0ZXAxKCkgewogICAgICAgICBsb2FkZWRTdGVwcy5wdXNo
KCdzdGVwIDEnKTsKICAgICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwpAQCAtNDgsOSArNDcs
NyBAQCB0ZXN0KCdsb2FkaW5nIHN0ZXBzJywgMSwgZnVuY3Rpb24oKSB7CiAgICAgdHJ5IHsKICAg
ICAgICAgcmVzb3VyY2VMb2FkZXIuX2xvYWRpbmdTdGVwcyA9IFtsb2FkaW5nU3RlcDEsIGxvYWRp
bmdTdGVwMl07CiAgICAgICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKLSAgICB9IGZpbmFsbHkg
ewotICAgICAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSA9IGxvYWRpbmdDb21wbGV0ZUNhbGxiYWNr
OwotICAgIH0KKyAgICB9IAogfSk7CiAKIC8vIFRvdGFsIG51bWJlciBvZiBhc3NlcnRpb25zIGlz
IDEgZm9yIHRoZSBkZWVwRXF1YWwgb2YgdGhlIGJ1aWxkZXIgbGlzdHMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIu
anMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4
cGxvcmVyLmpzCmluZGV4IGRkNDk4YmQ1ZWZkZWJlOTYwNTFmZDg2ZWI1NTNhMmM1ZjQ4M2ZiYjUu
LmRjZDVhMWE5NmYxMWRiYjdiMDEyNWQzZDE3YzM0ZDM4MDBkNTI2ZDggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIu
anMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGlu
ZV9leHBsb3Jlci5qcwpAQCAtMzIsMjEgKzMyLDI5IEBAIHZhciBnX2J1aWxkSW5kaWNlc0J5VGlt
ZXN0YW1wID0ge307CiB2YXIgZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xOwogdmFyIGdfY3VycmVu
dEJ1aWxkZXJUZXN0UmVzdWx0czsKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNZXRob2Rz
IGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3ZlcnJpZGUuCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9
IHsKKyAgICBidWlsZGVyOiBudWxsLAorICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKKyAgICBpZ25v
cmVGbGFreVRlc3RzOiB0cnVlCit9OworCit2YXIgREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BB
UkFNRVRFUlMgPSB7CisgICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAorICAgICdncm91cCc6ICdi
dWlsZGVyJworfTsKKwogZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKIHsKICAgICBnX2J1aWxkSW5k
aWNlc0J5VGltZXN0YW1wID0ge307Ci0gICAgdmFyIHJlc3VsdHMgPSBnX3Jlc3VsdHNCeUJ1aWxk
ZXJbZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVp
bGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07CisgICAgdmFyIHJlc3VsdHMgPSBnX3Jlc3Vs
dHNCeUJ1aWxkZXJbdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkZXIgfHwgY3VycmVu
dEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldOwogCiAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoOyBpKyspIHsKICAgICAgICAg
dmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2ldICogMTAw
MCk7CiAgICAgICAgIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbYnVpbGREYXRlLmdldFRpbWUo
KV0gPSBpOwogICAgIH0KIAotICAgIGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAmJiBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5idWlsZFRpbWVzdGFtcCBpbiBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wKSB7Ci0gICAgICAg
IHZhciBuZXdCdWlsZEluZGV4ID0gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtnX2hpc3Rvcnku
ZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZFRpbWVzdGFtcF07CisgICAgaWYgKHRoaXMuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZFRpbWVzdGFtcCAhPSAtMSAmJiB0aGlzLmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXAgaW4gZ19idWlsZEluZGljZXNCeVRpbWVzdGFt
cCkgeworICAgICAgICB2YXIgbmV3QnVpbGRJbmRleCA9IGdfYnVpbGRJbmRpY2VzQnlUaW1lc3Rh
bXBbdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wXTsKIAogICAgICAg
ICBpZiAobmV3QnVpbGRJbmRleCA9PSBnX2N1cnJlbnRCdWlsZEluZGV4KSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzZWxlY3RCdWlsZCBpcyBjYWxsZWQsIHdoaWNoIHVwZGF0
ZXMgdGhlIFVJCkBAIC02MSw0NyArNjksNDcgQEAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKICAg
ICBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpOwogCiAgICAgJCgndGVzdC10eXBlLXN3
aXRjaGVyJykuaW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVyKCBmYWxzZSwKLSAg
ICAgICAgdWkuaHRtbC5jaGVja2JveCgnaWdub3JlRmxha3lUZXN0cycsICdJZ25vcmUgZmxha3kg
dGVzdHMnLCBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5pZ25vcmVGbGFreVRlc3Rz
LCAnZ19jdXJyZW50QnVpbGRJbmRleCA9IC0xJykKKyAgICAgICAgdWkuaHRtbC5jaGVja2JveCgn
aWdub3JlRmxha3lUZXN0cycsICdJZ25vcmUgZmxha3kgdGVzdHMnLCB0aGlzLmRhc2hib2FyZFNw
ZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cywgJ2dfY3VycmVudEJ1aWxkSW5kZXggPSAtMScp
CiAgICAgKTsKIAogICAgIHVwZGF0ZVRpbWVsaW5lRm9yQnVpbGRlcigpOwogfQogCi1mdW5jdGlv
biBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpCi17Ci0gICAgdmFyIHN0YXJ0VGltZSA9
IERhdGUubm93KCk7Ci0gICAgZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzID0gX2RlY29tcHJl
c3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVpbGRlcltnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpXSk7
Ci0gICAgY29uc29sZS5sb2coICdUaW1lIHRvIGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6ICcg
KyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpOwotfQotCiBmdW5jdGlvbiBoYW5kbGVWYWxpZEhh
c2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKIHsKICAgICBzd2l0Y2goa2V5KSB7CiAgICAgY2FzZSAn
YnVpbGRlcic6Ci0gICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoZ19oaXN0b3J5LmRh
c2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgIGhpc3RvcnkudmFsaWRh
dGVQYXJhbWV0ZXIodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAogICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZSBpbiBjdXJyZW50QnVpbGRlcnMoKTsg
fSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgJ2J1aWxkVGltZXN0YW1wJzoKLSAg
ICAgICAgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXAgPSBw
YXJzZUludCh2YWx1ZSwgMTApOworICAgICAgICB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
YnVpbGRUaW1lc3RhbXAgPSBwYXJzZUludCh2YWx1ZSwgMTApOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBjYXNlICdpZ25vcmVGbGFreVRlc3RzJzoKLSAgICAgICAgZ19oaXN0b3J5LmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsKKyAg
ICAgICAgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmlnbm9yZUZsYWt5VGVzdHMgPSB2YWx1
ZSA9PSAndHJ1ZSc7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLWdfZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3Rh
dGVWYWx1ZXMgPSB7Ci0gICAgYnVpbGRlcjogbnVsbCwKLSAgICBidWlsZFRpbWVzdGFtcDogLTEs
Ci0gICAgaWdub3JlRmxha3lUZXN0czogdHJ1ZQordmFyIHRpbWVsaW5lQ29uZmlnID0geworICAg
IGRlZmF1bHRTdGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMs
CisgICAgZ2VuZXJhdGVQYWdlQ2FsbGJhY2s6IGdlbmVyYXRlUGFnZSwKKyAgICBoYW5kbGVWYWxp
ZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlciwKKyAgICBkYlNwZWNpZmlj
SW52YWxpZGF0aW5nUGFyYW1ldGVyczogREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRF
UlMKIH07CiAKLURCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTID0gewotICAgICd0
ZXN0VHlwZSc6ICdidWlsZGVyJywKLSAgICAnZ3JvdXAnOiAnYnVpbGRlcicKLX07CisvLyBGSVhN
RShqcGFyZW50KTogRXZlbnR1YWxseSByZW1vdmUgYWxsIHVzYWdlIG9mIGdsb2JhbCBoaXN0b3J5
IG9iamVjdC4KK3ZhciBnX2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KHRpbWVsaW5lQ29u
ZmlnKTsKK2dfaGlzdG9yeS5wYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOworCitmdW5j
dGlvbiBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpCit7CisgICAgdmFyIHN0YXJ0VGlt
ZSA9IERhdGUubm93KCk7CisgICAgZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzID0gX2RlY29t
cHJlc3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVpbGRlcltnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigp
XSk7CisgICAgY29uc29sZS5sb2coICdUaW1lIHRvIGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6
ICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpOworfQogCiBmdW5jdGlvbiBzaG91bGRTaG93
V2ViS2l0UmV2aXNpb25zT25seSgpCiB7CkBAIC00ODgsNiArNDk2LDYgQEAgZG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKIH0pOwogCiB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewotICAgIHZhciByZXNvdXJjZUxvYWRl
ciA9IG5ldyBsb2FkZXIuTG9hZGVyKGludGlhbGl6ZUhpc3RvcnkpOworICAgIHZhciByZXNvdXJj
ZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7CiAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgp
OwogfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy90cmVlbWFwLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy90cmVlbWFwLmpzCmluZGV4IGEyNjFkZmQwYWQ0NTQ5MTdmZDc3MTNmODk2YmQyMGNm
OWE1MzMzODIuLmI4YzhiNmZiMDE0OTc4ZWMwMmU2YTMzODYxZDAwNjRhN2M0MzBhYjMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5q
cworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAu
anMKQEAgLTI2LDYgKzI2LDc3IEBACiAvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIC8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
K3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKKyAgICBidWlsZGVy
OiBudWxsLAorICAgIHRyZWVtYXBmb2N1czogJycsCit9OworCit2YXIgREJfU1BFQ0lGSUNfSU5W
QUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7CisgICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAorICAg
ICdncm91cCc6ICdidWlsZGVyJworfTsKKworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKK3sKKyAg
ICAkKCdoZWFkZXItY29udGFpbmVyJykuaW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRj
aGVyKCk7CisKKyAgICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSB0cnVlOworCisgICAgdmFyIHJhd1Ry
ZWUgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxk
ZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldOworICAgIGdfd2Vi
VHJlZSA9IGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQoJ0xheW91dFRlc3RzJywgcmF3VHJlZSk7
CisgICAgYXBwZW5kVHJlZW1hcCgkKCdtYXAnKSwgZ193ZWJUcmVlKTsKKworICAgIGlmICh0aGlz
LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudHJlZW1hcGZvY3VzKQorICAgICAgICBmb2N1c1BhdGgo
Z193ZWJUcmVlLCB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudHJlZW1hcGZvY3VzKQorCisg
ICAgZ19pc0dlbmVyYXRpbmdQYWdlID0gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZVZhbGlk
SGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQoreworICAgIHN3aXRjaChrZXkpIHsKKyAgICBjYXNl
ICdidWlsZGVyJzoKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcih0aGlzLmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsg
cmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOyB9KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlICd0cmVlbWFwZm9jdXMnOgorICAgICAgICBoaXN0b3J5LnZhbGlkYXRl
UGFyYW1ldGVyKHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIHBy
b2JhYmx5IGEgc2ltcGxlciByZWdleHAgaGVyZS4gSnVzdCB0cnlpbmcgdG8gbWF0Y2ggYXNjaWkg
KyBmb3J3YXJkLXNsYXNoLgorICAgICAgICAgICAgICAgIC8vIGUuZy4gTGF5b3V0VGVzdHMvZm9v
L2Jhci5odG1sCisgICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihcdytcL1x3
KikqJC8pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGhhbmRs
ZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKK3sKKyAgICBmb3IgKHZhciBwYXJhbSBpbiBw
YXJhbXMpIHsKKyAgICAgICAgaWYgKHBhcmFtICE9ICd0cmVlbWFwZm9jdXMnKSB7CisgICAgICAg
ICAgICAkKCdtYXAnKS5pbm5lckhUTUwgPSAnTG9hZGluZy4uLic7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZhciB0
cmVlbWFwQ29uZmlnID0geworICAgIGRlZmF1bHRTdGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2Fy
ZFNwZWNpZmljU3RhdGVWYWx1ZXMsCisgICAgZ2VuZXJhdGVQYWdlOiBnZW5lcmF0ZVBhZ2UsCisg
ICAgaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyOiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIsCisg
ICAgaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2U6IGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdl
LAorICAgIGRhc2hib2FyZFNwZWNpZmljSW52YWxpZGF0aW5nUGFyYW1ldGVyczogREJfU1BFQ0lG
SUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMKK307CisKKy8vIEZJWE1FKGpwYXJlbnQpOiBFdmVu
dHVhbGx5IHJlbW92ZSBhbGwgdXNhZ2Ugb2YgZ2xvYmFsIGhpc3Rvcnkgb2JqZWN0LgordmFyIGdf
aGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkodHJlZW1hcENvbmZpZyk7CitnX2hpc3Rvcnku
cGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKKwogdmFyIFRFU1RfVVJMX0JBU0VfUEFU
SCA9ICJodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvIjsKIAog
ZnVuY3Rpb24gaHVtYW5SZWFkYWJsZVRpbWUobWlsbGlzZWNvbmRzKQpAQCAtMTM2LDIyICsyMDcs
NiBAQCBmdW5jdGlvbiBzaG93QXZlcmFnZXMoKQogdmFyIGdfaXNHZW5lcmF0aW5nUGFnZSA9IGZh
bHNlOwogdmFyIGdfd2ViVHJlZTsKIAotZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKCkKLXsKLSAgICAk
KCdoZWFkZXItY29udGFpbmVyJykuaW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVy
KCk7Ci0KLSAgICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSB0cnVlOwotCi0gICAgdmFyIHJhd1RyZWUg
PSBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVp
bGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07Ci0gICAgZ193
ZWJUcmVlID0gY29udmVydFRvV2ViVHJlZW1hcEZvcm1hdCgnTGF5b3V0VGVzdHMnLCByYXdUcmVl
KTsKLSAgICBhcHBlbmRUcmVlbWFwKCQoJ21hcCcpLCBnX3dlYlRyZWUpOwotCi0gICAgaWYgKGdf
aGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRyZWVtYXBmb2N1cykKLSAgICAgICAgZm9j
dXNQYXRoKGdfd2ViVHJlZSwgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudHJlZW1h
cGZvY3VzKQotCi0gICAgZ19pc0dlbmVyYXRpbmdQYWdlID0gZmFsc2U7Ci19Ci0KIGZ1bmN0aW9u
IGZvY3VzUGF0aCh0cmVlLCBwYXRoKQogewogICAgIHZhciBwYXJ0cyA9IGRlY29kZVVSSUNvbXBv
bmVudChwYXRoKS5zcGxpdCgnLycpOwpAQCAtMTc4LDQ5ICsyMzMsNiBAQCBmdW5jdGlvbiBmb2N1
c1BhdGgodHJlZSwgcGF0aCkKIAogfQogCi1mdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0
ZXIoa2V5LCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2goa2V5KSB7Ci0gICAgY2FzZSAnYnVpbGRlcic6
Ci0gICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNw
ZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCi0gICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJu
IHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOyB9KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjYXNlICd0cmVlbWFwZm9jdXMnOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1l
dGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAotICAgICAg
ICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlJ3MgcHJv
YmFibHkgYSBzaW1wbGVyIHJlZ2V4cCBoZXJlLiBKdXN0IHRyeWluZyB0byBtYXRjaCBhc2NpaSAr
IGZvcndhcmQtc2xhc2guCi0gICAgICAgICAgICAgICAgLy8gZS5nLiBMYXlvdXRUZXN0cy9mb28v
YmFyLmh0bWwKLSAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlLm1hdGNoKC9eKFx3K1wvXHcq
KSokLykpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotZ19kZWZhdWx0RGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKLSAgICBidWlsZGVyOiBudWxsLAotICAgIHRyZWVt
YXBmb2N1czogJycsCi19OwotCi1EQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9
IHsKLSAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCi0gICAgJ2dyb3VwJzogJ2J1aWxkZXInCi19
OwotCi1mdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMpCi17Ci0gICAg
Zm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7Ci0gICAgICAgIGlmIChwYXJhbSAhPSAndHJlZW1h
cGZvY3VzJykgewotICAgICAgICAgICAgJCgnbWFwJykuaW5uZXJIVE1MID0gJ0xvYWRpbmcuLi4n
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBmdW5jdGlvbiBleHRyYWN0TmFtZShub2RlKQogewogICAgIHJldHVybiBu
b2RlLm5hbWUuc3BsaXQoJyAnKVswXTsKQEAgLTI3MCw2ICsyODIsNiBAQCBmdW5jdGlvbiBoYW5k
bGVGb2N1cyh0cmVlKQogfQogCiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0
aW9uKCkgewotICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKGludGlh
bGl6ZUhpc3RvcnkpOworICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVy
KCk7CiAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwogfSwgZmFsc2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196161</attachid>
            <date>2013-04-02 09:29:34 -0700</date>
            <delta_ts>2013-04-02 10:57:39 -0700</delta_ts>
            <desc>Finished review feedback</desc>
            <filename>bug-113717-20130402092926.patch</filename>
            <type>text/plain</type>
            <size>37155</size>
            <attacher name="Julie Parent">jparent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NDQwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGJkMDU0YWM1MjllMjdhZmY4OTExODA5MTU2ZGZkZjY5
M2ZkMDllNS4uOTljMjM0YTA1MzVmZTA0OTRmYTAzYTk5OGEwNTk1YjY5MDdlNDQzNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEzLTA0LTAxICBKdWxpZSBQYXJlbnQgIDxqcGFyZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBEYXNoYm9hcmQgcmVmYWN0b3I6IE1vdmUgZGFzaGJvYXJkIHNwZWNpZmljIGhpc3Rv
cnkgcmVsYXRlZCBmZWF0dXJlcyB0byBIaXN0b3J5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNzE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBFYWNoIGRhc2hib2FyZCBub3cgY3JlYXRl
cyBpdHMgb3duIEhpc3Rvcnkgb2JqZWN0LCB3aXRoIGEgY3VzdG9tCisgICAgICAgIGNvbmZpZ3Vy
YXRpb24uIFRoaXMgY2hhbmdlcyBmcm9tIGp1c3Qgb3ZlcnJpZGluZyBnbG9iYWwgZnVuY3Rpb25z
CisgICAgICAgIHRvIHBhc3NpbmcgaW4gY2FsbGJhY2tzIGZvciBnZW5lcmF0ZVBhZ2UsIGhhbmRs
ZVZhbGlkSGFzaFBhcmFtZXRlciwKKyAgICAgICAgYW5kIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hh
bmdlLiBTYW1lIHdpdGggcGFzc2luZyBpbiBkZWZhdWx0U3RhdGVWYWx1ZXMKKyAgICAgICAgYW5k
IERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTVMsIHJhdGhlciB0aGFuIG92ZXJyaWRpbmcg
dGhlIGdsb2JhbAorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIAorICAgICAgICBBbGwgZnVu
Y3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdyAobW9zdGx5KSBwcml2YXRl
CisgICAgICAgIGZ1bmN0aW9uIG9uIEhpc3RvcnkuIAorICAgICAgICAKKyAgICAgICAgTG9hZGVy
IG5vIGxvbmdlciBuZWVkcyBhIGxvYWRpbmdDb21wbGV0ZSBjYWxsYmFjaywgc2luY2UgaXQgY2Fu
IGp1c3QKKyAgICAgICAgaW5pdGlhbGl6ZSB0aGUgaGlzdG9yeSBvYmplY3QgaXRzZWxmLgorCisg
ICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVz
dWx0cy5qczoKKyAgICAgICAgKGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcik6CisgICAgICAgICog
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qczoKKyAg
ICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAgICAgICAoLnN3aXRjaC5yZXR1
cm4pOgorICAgICAgICAoaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UpOgorICAgICAgICAqIFRl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF91bml0
dGVzdHMuanM6CisgICAgICAgIChyZXNldEdsb2JhbHMpOgorICAgICAgICAqIFRlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qczoKKyAgICAgICAgKC4pOgorICAgICAg
ICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzOgorICAgICAg
ICAoLik6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2Fk
ZXJfdW5pdHRlc3RzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanM6CisgICAgICAgIChnZW5lcmF0ZVBhZ2UpOgorICAg
ICAgICAoaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMpOgorICAgICAgICAqIFRlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qczoKKyAgICAgICAgKGdlbmVyYXRl
UGFnZSk6CisgICAgICAgICguc3dpdGNoLnJldHVybik6CisgICAgICAgIChoYW5kbGVRdWVyeVBh
cmFtZXRlckNoYW5nZSk6CisKIDIwMTMtMDQtMDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDc0
MDEuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5qcwppbmRleCAwZmQyZGZlOTM4MTdhYzJhYzQyNzhl
NjQyNDIyM2Q5NzQzNDU2NzY3Li41ZmI3ZTkxZDY2NDk0YjJmMmY2MmQ1M2RkNmM5OWNjM2QwY2U1
NTA2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L2FnZ3JlZ2F0ZV9yZXN1bHRzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuanMKQEAgLTM0LDEwICszNCw3IEBACiAvLyAg
ICAgLWNvcHkgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24KIC8vICAgICAtYWRkIHRo
ZSBidWlsZGVyIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYnVpbGRlcnMgaW4gZGFzaGJvYXJkX2Jhc2Uu
anMuCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTWV0aG9kcyBhbmQgb2JqZWN0cyBmcm9t
IGRhc2hib2FyZF9iYXNlLmpzIHRvIG92ZXJyaWRlLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1m
dW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQorZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKGhpc3RvcnlJbnN0
YW5jZSkKIHsKICAgICB2YXIgaHRtbCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlcih0cnVlKSAr
ICc8YnI+JzsKICAgICBmb3IgKHZhciBidWlsZGVyIGluIGN1cnJlbnRCdWlsZGVycygpKQpAQCAt
NDUsMTEgKzQyLDExIEBAIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiAgICAgZG9jdW1lbnQuYm9k
eS5pbm5lckhUTUwgPSBodG1sOwogfQogCi1mdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0
ZXIoa2V5LCB2YWx1ZSkKK2Z1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihoaXN0b3J5
SW5zdGFuY2UsIGtleSwgdmFsdWUpCiB7CiAgICAgc3dpdGNoKGtleSkgewogICAgIGNhc2UgJ3Jh
d1ZhbHVlcyc6Ci0gICAgICAgIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2tleV0g
PSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVj
aWZpY1N0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgZGVmYXVsdDoKQEAgLTU3LDEwICs1NCwyMSBAQCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhh
c2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICB9CiB9CiAKLWdfZGVmYXVsdERhc2hib2FyZFNw
ZWNpZmljU3RhdGVWYWx1ZXMgPSB7Cit2YXIgZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVW
YWx1ZXMgPSB7CiAgICAgcmF3VmFsdWVzOiBmYWxzZQogfTsKIAorCit2YXIgYWdncmVnYXRlUmVz
dWx0c0NvbmZpZyA9IHsKKyAgICBkZWZhdWx0U3RhdGVWYWx1ZXM6IGRlZmF1bHREYXNoYm9hcmRT
cGVjaWZpY1N0YXRlVmFsdWVzLAorICAgIGdlbmVyYXRlUGFnZTogZ2VuZXJhdGVQYWdlLAorICAg
IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcjogaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyLAorfTsK
KworLy8gRklYTUUoanBhcmVudCk6IEV2ZW50dWFsbHkgcmVtb3ZlIGFsbCB1c2FnZSBvZiBnbG9i
YWwgaGlzdG9yeSBvYmplY3QuCit2YXIgZ19oaXN0b3J5ID0gbmV3IGhpc3RvcnkuSGlzdG9yeShh
Z2dyZWdhdGVSZXN1bHRzQ29uZmlnKTsKK2dfaGlzdG9yeS5wYXJzZUNyb3NzRGFzaGJvYXJkUGFy
YW1ldGVycygpOworCiBmdW5jdGlvbiBodG1sRm9yQnVpbGRlcihidWlsZGVyKQogewogICAgIHZh
ciByZXN1bHRzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdOwpAQCAtMjY3LDYgKzI3NSw2
IEBAIGZ1bmN0aW9uIGV4dGVuZGVkRW5jb2RlKGFyclZhbHMsIG1heFZhbCkKIH0KIAogd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzb3VyY2VM
b2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVIaXN0b3J5KTsKKyAgICB2YXIgcmVz
b3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcigpOwogICAgIHJlc291cmNlTG9hZGVyLmxv
YWQoKTsKIH0sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCmluZGV4IDhiMWJjYmZlZDllYTE3
ZWQxNjQ0NGRiODg0ZmMwMjZhZmNiYWRlZTQuLjFlZjFkNmU1NWQ0NzA4YjkzMTEzYWQzYjNkY2Rh
YTFmOGY3NzQyZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwpAQCAtMjksMzYgKzI5LDcgQEAKIC8v
IEBmaWxlb3ZlcnZpZXcgQmFzZSBKUyBmaWxlIGZvciBwYWdlcyB0aGF0IHdhbnQgdG8gcGFyc2Ug
dGhlIHJlc3VsdHMgSlNPTgogLy8gZnJvbSB0aGUgdGVzdGluZyBib3RzLiBUaGlzIGRlYWxzIHdp
dGggZ2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucywgdmlzaWJsZQogLy8gaGlzdG9yeSwgcG9wdXBz
IGFuZCBhcHBlbmRpbmcgdGhlIHNjcmlwdCBlbGVtZW50cyBmb3IgdGhlIEpTT04gZmlsZXMuCi0v
LwotLy8gVGhlIGNhbGxpbmcgcGFnZSBpcyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxv
d2luZyAiYWJzdHJhY3QiCi0vLyBmdW5jdGlvbnMvb2JqZWN0czoKLQotLy8gR2VuZXJhdGVzIHRo
ZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUgdGhp
cyB3aXRoCi0vLyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYWdlIGFzc3VtaW5nIGFs
bCByZXNvdXJjZXMgaGF2ZSBsb2FkZWQuCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKSB7fQotCi0v
LyBUYWtlcyBhIGtleSBhbmQgYSB2YWx1ZSBhbmQgc2V0cyB0aGUgZ19oaXN0b3J5LmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKLS8vIGEgdmFsaWQgaGFzaCBw
YXJhbWV0ZXIgYW5kIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGtleS4KLS8v
Ci0vLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBpbnRv
IHRoZSBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS4KLWZ1bmN0aW9uIGhhbmRsZVZh
bGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KIAot
Ly8gRGVmYXVsdCBoYXNoIHBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlLiBUaGUgcGFnZSBzaG91bGQg
b3ZlcnJpZGUgdGhpcyB0byBjcmVhdGUKLS8vIGRlZmF1bHQgc3RhdGVzLgotdmFyIGdfZGVmYXVs
dERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7fTsKLQotCi0vLyBUaGUgcGFnZSBzaG91
bGQgb3ZlcnJpZGUgdGhpcyB0byBtb2RpZnkgcGFnZSBzdGF0ZSBkdWUgdG8KLS8vIGNoYW5naW5n
IHF1ZXJ5IHBhcmFtZXRlcnMuCi0vLyBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE5ldyBvciBtb2Rp
ZmllZCBxdWVyeSBwYXJhbXMgYXMga2V5OiB2YWx1ZS4KLS8vIEByZXR1cm4ge2Jvb2xlYW59IFdo
ZXRoZXIgY2hhbmdpbmcgdGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGNhdXNlIGdlbmVyYXRlUGFnZSB0
byBiZSBjYWxsZWQuCi1mdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZShwYXJhbXMp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQ09O
U1RBTlRTCkBAIC04NCwxMSArNTUsNiBAQCB2YXIgTEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01B
UF8gPSB7CiAgICAgJ08nOiAnTUlTU0lORycKIH07CiAKLS8vIE1hcCBvZiBwYXJhbWV0ZXIgdG8g
b3RoZXIgcGFyYW1ldGVyIGl0IGludmFsaWRhdGVzLgotdmFyIENST1NTX0RCX0lOVkFMSURBVElO
R19QQVJBTUVURVJTID0gewotICAgICd0ZXN0VHlwZSc6ICdncm91cCcKLX07Ci12YXIgREJfU1BF
Q0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlM7CiAKIC8vIEtleXMgaW4gdGhlIEpTT04gZmls
ZXMuCiB2YXIgV09OVEZJWF9DT1VOVFNfS0VZID0gJ3dvbnRmaXhDb3VudHMnOwpAQCAtMTY3LDI1
ICsxMzMsNiBAQCBmdW5jdGlvbiAkKGlkKQogICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChpZCk7CiB9CiAKLWZ1bmN0aW9uIHBhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJz
KCkKLXsKLSAgICBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSA9IHt9OwotICAgIHZh
ciBwYXJhbWV0ZXJzID0gaGlzdG9yeS5xdWVyeUhhc2hBc01hcCgpOwotICAgIGZvciAocGFyYW1l
dGVyTmFtZSBpbiBnX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQotICAgICAg
ICBnX2hpc3RvcnkucGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVycywgcGFyYW1ldGVyTmFtZSk7Ci19
Ci0KLWZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShrZXkpCi17Ci0gICAgaWYgKGtleSBpbiBnX2RlZmF1
bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQotICAgICAgICByZXR1cm4gZ19kZWZhdWx0
RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlc1trZXldOwotICAgIHJldHVybiBoaXN0b3J5LkRF
RkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFU1trZXldOwotfQotCi0vLyBUT0RPKGpw
YXJlbnQpOiBFYWNoIGRiIHNob3VsZCBjcmVhdGUgdGhlaXIgb3duIGhpc3Rvcnkgb2JqLCBub3Qg
Z2xvYmFsLgotdmFyIGdfaGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoKTsKLWdfaGlzdG9y
eS5wYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOwotCiBmdW5jdGlvbiBjdXJyZW50QnVp
bGRlckdyb3VwQ2F0ZWdvcnkoKQogewogICAgIHN3aXRjaCAoZ19oaXN0b3J5LmNyb3NzRGFzaGJv
YXJkU3RhdGUudGVzdFR5cGUpIHsKQEAgLTIzNiwxOCArMTgzLDYgQEAgZnVuY3Rpb24gaXNGbGFr
aW5lc3NEYXNoYm9hcmQoKQogICAgIHJldHVybiBzdHJpbmcuZW5kc1dpdGgod2luZG93LmxvY2F0
aW9uLnBhdGhuYW1lLCAnZmxha2luZXNzX2Rhc2hib2FyZC5odG1sJyk7CiB9CiAKLWZ1bmN0aW9u
IGhhbmRsZUxvY2F0aW9uQ2hhbmdlKCkKLXsKLSAgICBpZiAoZ19oaXN0b3J5LnBhcnNlUGFyYW1l
dGVycygpKQotICAgICAgICBnZW5lcmF0ZVBhZ2UoKTsKLX0KLQotLy8gVE9ETyhqcGFyZW50KTog
TW92ZSB0aGlzIHRvIHVwY29taW5nIEhpc3Rvcnkgb2JqZWN0LgotZnVuY3Rpb24gaW50aWFsaXpl
SGlzdG9yeSgpIHsKLSAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gaGFuZGxlTG9jYXRpb25DaGFu
Z2U7Ci0gICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKLX0KLQogLy8gQ3JlYXRlIGEgbmV3IGZ1
bmN0aW9uIHdpdGggc29tZSBvZiBpdHMgYXJndWVtZW50cwogLy8gcHJlLWZpbGxlZC4KIC8vIFRh
a2VuIGZyb20gZ29vZy5wYXJ0aWFsIGluIHRoZSBDbG9zdXJlIGxpYnJhcnkuCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNo
Ym9hcmQuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmQuanMKaW5kZXggNmE5NDg1NTVjYWNhZDI0MzRkZDA4ZmM0OTlkMmVlNGVl
YWVkODE5Ni4uNjcyNDRjYjY4MjI4N2EyMzY3MmM2N2I4ODg4NTdiZmVkNGVhZDNkMyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3Nf
ZGFzaGJvYXJkLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwpAQCAtMTM2LDEyICsxMzYsOSBAQCB2YXIgVklSVFVB
TF9TVUlURVMgPSB7CiAKIHZhciByZXNvdXJjZUxvYWRlcjsKIAotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLyBNZXRob2RzIGFuZCBvYmplY3RzIGZyb20gZGFzaGJvYXJkX2Jhc2UuanMgdG8gb3Zl
cnJpZGUuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCitm
dW5jdGlvbiBnZW5lcmF0ZVBhZ2UoaGlzdG9yeUluc3RhbmNlKQogewotICAgIGlmIChnX2hpc3Rv
cnkuY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0YSkKKyAgICBpZiAoaGlzdG9yeUluc3Rh
bmNlLmNyb3NzRGFzaGJvYXJkU3RhdGUudXNlVGVzdERhdGEpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImxvYWRpbmctdWkiPkxPQURJ
TkcuLi48L2Rpdj4nOwpAQCAtMTQ5LDEyICsxNDYsMTIgQEAgZnVuY3Rpb24gZ2VuZXJhdGVQYWdl
KCkKIAogICAgIC8vIHRlc3RzIGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQgbWF0Y2ggdGhlIENT
ViBsaXN0LgogICAgIC8vIHJlc3VsdCBleHBhbmRzIHRvIGFsbCB0ZXN0cyB0aGF0IGV2ZXIgaGF2
ZSB0aGUgZ2l2ZW4gcmVzdWx0Ci0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLnRlc3RzIHx8IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnJlc3VsdCkKKyAg
ICBpZiAoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHMgfHwgaGlz
dG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0KQogICAgICAgICBnZW5l
cmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHMoaW5kaXZpZHVhbFRlc3RzKCkpOwotICAgIGVsc2Ug
aWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmV4cGVjdGF0aW9uc1VwZGF0ZSkK
KyAgICBlbHNlIGlmIChoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5leHBl
Y3RhdGlvbnNVcGRhdGUpCiAgICAgICAgIGdlbmVyYXRlUGFnZUZvckV4cGVjdGF0aW9uc1VwZGF0
ZSgpOwogICAgIGVsc2UKLSAgICAgICAgZ2VuZXJhdGVQYWdlRm9yQnVpbGRlcihnX2hpc3Rvcnku
ZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5k
ZWZhdWx0QnVpbGRlcigpKTsKKyAgICAgICAgZ2VuZXJhdGVQYWdlRm9yQnVpbGRlcihoaXN0b3J5
SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVy
R3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpKTsKIAogICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3Vy
cmVudEJ1aWxkZXJzKCkpCiAgICAgICAgIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3lu
YyhidWlsZGVyKTsKQEAgLTE2MiwxMSArMTU5LDExIEBAIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgp
CiAgICAgcG9zdEhlaWdodENoYW5nZWRNZXNzYWdlKCk7CiB9CiAKLWZ1bmN0aW9uIGhhbmRsZVZh
bGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQorZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFy
YW1ldGVyKGhpc3RvcnlJbnN0YW5jZSwga2V5LCB2YWx1ZSkKIHsKICAgICBzd2l0Y2goa2V5KSB7
CiAgICAgY2FzZSAndGVzdHMnOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdf
aGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICBoaXN0
b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLCBrZXksIHZhbHVlLAogICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZy5pc1ZhbGlkTmFtZSh2YWx1ZSk7CiAgICAgICAgICAgICB9KTsKQEAg
LTE3NCw3ICsxNzEsNyBAQCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2
YWx1ZSkKIAogICAgIGNhc2UgJ3Jlc3VsdCc6CiAgICAgICAgIHZhbHVlID0gdmFsdWUudG9VcHBl
ckNhc2UoKTsKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0
ZVBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2
YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGZvciAodmFy
IHJlc3VsdCBpbiBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQXykgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgPT0gTEFZT1VUX1RFU1RfRVhQRUNUQVRJT05TX01BUF9bcmVzdWx0
XSkKQEAgLTE4NSw3ICsxODIsNyBAQCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIo
a2V5LCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlICdidWlsZGVyJzoK
LSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRl
cihoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKICAg
ICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBj
dXJyZW50QnVpbGRlcnMoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTkzLDEwICsxOTAsMTAgQEAg
ZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgY2FzZSAnc29ydENvbHVtbic6Ci0gICAgICAgIGhpc3RvcnkudmFs
aWRhdGVQYXJhbWV0ZXIoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFs
dWUsCisgICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoaGlzdG9yeUluc3RhbmNlLmRh
c2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCiAgICAgICAgICAgICBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgICAgICAvLyBHZXQgYWxsIHBvc3NpYmxlIGhlYWRlcnMgc2luY2UgdGhl
IGFjdHVhbCB1c2VkIHNldCBvZiBoZWFkZXJzCi0gICAgICAgICAgICAgICAgLy8gZGVwZW5kcyBv
biB0aGUgdmFsdWVzIGluIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCB3aGljaCBh
cmUgY3VycmVudGx5IGJlaW5nIHNldC4KKyAgICAgICAgICAgICAgICAvLyBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZXMgaW4gaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHdoaWNo
IGFyZSBjdXJyZW50bHkgYmVpbmcgc2V0LgogICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0g
dGFibGVIZWFkZXJzKHRydWUpOwogICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aGVhZGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0g
c29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJzW2ldKSkKQEAgLTIwNyw3ICsyMDQsNyBA
QCBmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBjYXNlICdzb3J0T3JkZXInOgotICAgICAgICBoaXN0b3J5LnZh
bGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZh
bHVlLAorICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGhpc3RvcnlJbnN0YW5jZS5k
YXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAogICAgICAgICAgICAgZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IEZPUldBUkQgfHwgdmFsdWUgPT0g
QkFDS1dBUkQ7CiAgICAgICAgICAgICB9KTsKQEAgLTIxNiw3ICsyMTMsNyBAQCBmdW5jdGlvbiBo
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIoa2V5LCB2YWx1ZSkKICAgICBjYXNlICdyZXN1bHRzSGVp
Z2h0JzoKICAgICBjYXNlICd1cGRhdGVJbmRleCc6CiAgICAgY2FzZSAncmV2aXNpb24nOgotICAg
ICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLCBrZXksIE51bWJlcih2YWx1ZSksCisgICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJh
bWV0ZXIoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgTnVtYmVy
KHZhbHVlKSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5tYXRjaCgvXlxkKyQvKTsKICAgICAgICAgICAgIH0pOwpAQCAtMjM0LDcgKzIzMSw3
IEBAIGZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihrZXksIHZhbHVlKQogICAgIGNh
c2UgJ3Nob3dVbmV4cGVjdGVkUGFzc2VzJzoKICAgICBjYXNlICdzaG93V29udEZpeFNraXAnOgog
ICAgIGNhc2UgJ2V4cGVjdGF0aW9uc1VwZGF0ZSc6Ci0gICAgICAgIGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CisgICAgICAgIGhpc3RvcnlJ
bnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZGVmYXVsdDoKQEAgLTI0Miw3ICsyMzksMjcgQEAg
ZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCiAgICAgfQogfQog
Ci1nX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzID0geworLy8gQHBhcmFtIHtP
YmplY3R9IHBhcmFtcyBOZXcgb3IgbW9kaWZpZWQgcXVlcnkgcGFyYW1ldGVycyBhcyBrZXk6IHZh
bHVlLgorZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UoaGlzdG9yeUluc3RhbmNl
LCBwYXJhbXMpCit7CisgICAgZm9yIChrZXkgaW4gcGFyYW1zKSB7CisgICAgICAgIGlmIChrZXkg
PT0gJ3Rlc3RzJykgeworICAgICAgICAgICAgLy8gRW50ZXJpbmcgY3Jvc3MtYnVpbGRlciB2aWV3
LCBvbmx5IGtlZXAgdmFsaWQga2V5cyBmb3IgdGhhdCB2aWV3LgorICAgICAgICAgICAgZm9yICh2
YXIgY3VycmVudEtleSBpbiBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSkg
eworICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhjdXJy
ZW50S2V5KSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBoaXN0b3J5SW5zdGFuY2UuZGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZVtjdXJyZW50S2V5XTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzSW52YWxpZEtleUZvckNyb3NzQnVpbGRlclZpZXco
a2V5KSkgeworICAgICAgICAgICAgZGVsZXRlIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVj
aWZpY1N0YXRlLnRlc3RzOworICAgICAgICAgICAgZGVsZXRlIGhpc3RvcnlJbnN0YW5jZS5kYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlLnJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2YXIgZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7
CiAgICAgc29ydE9yZGVyOiBCQUNLV0FSRCwKICAgICBzb3J0Q29sdW1uOiAnZmxha2luZXNzJywK
ICAgICBzaG93RXhwZWN0YXRpb25zOiBmYWxzZSwKQEAgLTI2NSwxMiArMjgyLDI1IEBAIGdfZGVm
YXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7CiAgICAgYnVpbGRlcjogbnVsbAog
fTsKIAotREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7Cit2YXIgREJfU1BF
Q0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7CiAgICAgJ3Rlc3RzJyA6ICdidWlsZGVy
JywKICAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCiAgICAgJ2dyb3VwJzogJ2J1aWxkZXInCiB9
OwogCisKK3ZhciBmbGFraW5lc3NDb25maWcgPSB7CisgICAgZGVmYXVsdFN0YXRlVmFsdWVzOiBk
ZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywKKyAgICBnZW5lcmF0ZVBhZ2U6IGdl
bmVyYXRlUGFnZSwKKyAgICBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZhbGlkSGFz
aFBhcmFtZXRlciwKKyAgICBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZTogaGFuZGxlUXVlcnlQ
YXJhbWV0ZXJDaGFuZ2UsCisgICAgaW52YWxpZGF0aW5nSGFzaFBhcmFtZXRlcnM6IERCX1NQRUNJ
RklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTCit9OworCisvLyBGSVhNRShqcGFyZW50KTogRXZl
bnR1YWxseSByZW1vdmUgYWxsIHVzYWdlIG9mIGdsb2JhbCBoaXN0b3J5IG9iamVjdC4KK3ZhciBn
X2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZpZyk7CitnX2hpc3Rv
cnkucGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKKwogLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLyBHTE9CQUxTCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTI0OTIsMjcgKzI1MjIs
NiBAQCBmdW5jdGlvbiBpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKICAgICBy
ZXR1cm4gIShrZXkgaW4gVkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAmJiAhKGtl
eSBpbiBoaXN0b3J5LkRFRkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFUyk7CiB9CiAK
LS8vIFNldHMgdGhlIHBhZ2Ugc3RhdGUgdG8gcmVnZW5lcmF0ZSB0aGUgcGFnZS4KLS8vIEBwYXJh
bSB7T2JqZWN0fSBwYXJhbXMgTmV3IG9yIG1vZGlmaWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXMga2V5
OiB2YWx1ZS4KLWZ1bmN0aW9uIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKLXsK
LSAgICBmb3IgKGtleSBpbiBwYXJhbXMpIHsKLSAgICAgICAgaWYgKGtleSA9PSAndGVzdHMnKSB7
Ci0gICAgICAgICAgICAvLyBFbnRlcmluZyBjcm9zcy1idWlsZGVyIHZpZXcsIG9ubHkga2VlcCB2
YWxpZCBrZXlzIGZvciB0aGF0IHZpZXcuCi0gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50S2V5
IGluIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKSB7Ci0gICAgICAgICAgICAgIGlm
IChpc0ludmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGN1cnJlbnRLZXkpKSB7Ci0gICAgICAg
ICAgICAgICAgZGVsZXRlIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2N1cnJlbnRL
ZXldOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXNJbnZhbGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpKSB7Ci0gICAgICAgICAgICBkZWxl
dGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHM7Ci0gICAgICAgICAgICBk
ZWxldGUgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0OwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGZ1bmN0aW9uIGhpZGVMZWdlbmQoKQog
ewogICAgIHZhciBsZWdlbmQgPSAkKCdsZWdlbmQnKTsKQEAgLTI2MDYsNiArMjYxNSw2IEBAIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiB9LCBmYWxz
ZSk7CiAKIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7Ci0gICAg
cmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihpbnRpYWxpemVIaXN0b3J5KTsKKyAg
ICByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7CiAgICAgcmVzb3VyY2VMb2Fk
ZXIubG9hZCgpOwogfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2Fy
ZF91bml0dGVzdHMuanMKaW5kZXggYzJjYTY2OGY3MGRkM2M2OWZhZGE1MWFhYzUxYjNkYTI1M2Ni
MzkyOS4uNmUyYzU5NzQwNmY4ZjhlNTRhYjZkYzJmMTM3Yjc4MThkMzFiZjI0ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFz
aGJvYXJkX3VuaXR0ZXN0cy5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCkBAIC0zNSw3ICszNSw3
IEBAIGZ1bmN0aW9uIHJlc2V0R2xvYmFscygpCiAgICAgZ19yZXN1bHRzQnlCdWlsZGVyID0ge307
CiAgICAgZ19hbGxFeHBlY3RhdGlvbnMgPSBudWxsOwogICAgIGdfYWxsVGVzdHNUcmllID0gbnVs
bDsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAg
IHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZp
Zyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFsIGlzbid0
IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGdfdGVzdFRvUmVz
dWx0c01hcCA9IHt9OwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHRlc3QoJ292ZXJyaWRlSnVzdEJ1aWxk
VHlwZScsIDEyLCBmdW5jdGlvbigpIHsKIH0pOwogCiB0ZXN0KCdwbGF0Zm9ybUFuZEJ1aWxkVHlw
ZScsIDc4LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3Rv
cnkuSGlzdG9yeSgpOworICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0
b3J5KGZsYWtpbmVzc0NvbmZpZyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IENoYW5nZSB0byB1
c2UgdGhlIGZsYWtpbmVzc19kYidzIGhpc3Rvcnkgb2JqZWN0CiAgICAgLy8gb25jZSBpdCBleGlz
dHMsIHJhdGhlciB0aGFuIHRyYWNraW5nIGdsb2JhbC4KICAgICBnX2hpc3RvcnkgPSBoaXN0b3J5
SW5zdGFuY2U7CkBAIC0zMTIsNyArMzEyLDcgQEAgdGVzdCgnZ2V0RXhwZWN0YXRpb25zJywgMTYs
IGZ1bmN0aW9uKCkgewogfSk7CiAKIHRlc3QoJ3N1YnN0cmluZ0xpc3QnLCAyLCBmdW5jdGlvbigp
IHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAg
IHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZp
Zyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFsIGlzbid0
IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGhpc3RvcnlJbnN0
YW5jZS5jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2d0ZXN0JzsKQEAgLTMyNSw3ICsz
MjUsNyBAQCB0ZXN0KCdzdWJzdHJpbmdMaXN0JywgMiwgZnVuY3Rpb24oKSB7CiB9KTsKIAogdGVz
dCgnaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMnLCA0LCBmdW5jdGlv
bigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOwor
ICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGRlZmF1bHREYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzLCBnZW5lcmF0ZVBhZ2UsIGhhbmRsZVZhbGlkSGFzaFBh
cmFtZXRlcik7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFs
IGlzbid0IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIGxvYWRC
dWlsZGVyc0xpc3QoJ0BUb1QgLSBjaHJvbWl1bS5vcmcnLCAnbGF5b3V0LXRlc3RzJyk7CkBAIC0z
NjEsNyArMzYxLDcgQEAgdGVzdCgnaGVhZGVyRm9yVGVzdFRhYmxlSHRtbCcsIDEsIGZ1bmN0aW9u
KCkgewogfSk7CiAKIHRlc3QoJ2h0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2LCBmdW5j
dGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgp
OworICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVz
c0NvbmZpZyk7CiAgICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFs
IGlzbid0IHVzZWQuCiAgICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwogICAgIHZhciBj
b250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKQEAgLTcwMSw3ICs3MDEs
NyBAQCB0ZXN0KCdjaGFuZ2VUZXN0VHlwZUludmFsaWRhdGVzR3JvdXAnLCAxLCBmdW5jdGlvbigp
IHsKIH0pOwogCiB0ZXN0KCdzaG91bGRIaWRlVGVzdCcsIDEwLCBmdW5jdGlvbigpIHsKLSAgICB2
YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeSgpOworICAgIHZhciBoaXN0
b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVzc0NvbmZpZyk7CiAgICAg
aGlzdG9yeUluc3RhbmNlLnBhcnNlUGFyYW1ldGVycygpOwogICAgIC8vIEZJWE1FKGpwYXJlbnQp
OiBDaGFuZ2UgdG8gdXNlIHRoZSBmbGFraW5lc3NfZGFzaGJvYXJkJ3MgaGlzdG9yeSBvYmplY3QK
ICAgICAvLyBvbmNlIGl0IGV4aXN0cywgcmF0aGVyIHRoYW4gdHJhY2tpbmcgZ2xvYmFsLgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5
LmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5Lmpz
CmluZGV4IDQ5YzcxMDg4NTI2ZTM5MjE4ZGM1MDZjMjEzNzZiODUzZTRmNWNlZjguLmY0ODE0YTIw
N2IwMjY2ZmE4MDRjNmQ3MDVjMTU1Yjc5ZTExNzU0NWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeS5qcworKysgYi9Ub29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3RvcnkuanMKQEAgLTEwNiwxNSArMTA2
LDMyIEBAIGhpc3RvcnkuX2ZpbGxNaXNzaW5nVmFsdWVzID0gZnVuY3Rpb24odG8sIGZyb20pCiAg
ICAgfQogfQogCi1oaXN0b3J5Lkhpc3RvcnkgPSBmdW5jdGlvbigpCitoaXN0b3J5Lkhpc3Rvcnkg
PSBmdW5jdGlvbihjb25maWd1cmF0aW9uKQogewotICB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGUg
PSB7fTsKLSAgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlID0ge307CisgICAgdGhpcy5jcm9z
c0Rhc2hib2FyZFN0YXRlID0ge307CisgICAgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlID0g
e307CisKKyAgICBpZiAoY29uZmlndXJhdGlvbikgeworICAgICAgICB0aGlzLl9kZWZhdWx0RGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IGNvbmZpZ3VyYXRpb24uZGVmYXVsdFN0YXRlVmFs
dWVzOworICAgICAgICB0aGlzLl9oYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIgPSBjb25maWd1cmF0
aW9uLmhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcjsKKyAgICAgICAgdGhpcy5faGFuZGxlUXVlcnlQ
YXJhbWV0ZXJDaGFuZ2UgPSBjb25maWd1cmF0aW9uLmhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdl
IHx8IGZ1bmN0aW9uKGhpc3RvcnlJbnN0YW5jZSwgcGFyYW1zKSB7IHJldHVybiB0cnVlOyB9Owor
ICAgICAgICB0aGlzLl9kYXNoYm9hcmRTcGVjaWZpY0ludmFsaWRhdGluZ1BhcmFtZXRlcnMgPSBj
b25maWd1cmF0aW9uLmludmFsaWRhdGluZ0hhc2hQYXJhbWV0ZXJzOworICAgICAgICB0aGlzLl9n
ZW5lcmF0ZVBhZ2UgPSBjb25maWd1cmF0aW9uLmdlbmVyYXRlUGFnZTsKKyAgICB9CiB9CiAKIHZh
ciBSRUxPQURfUkVRVUlSSU5HX1BBUkFNRVRFUlMgPSBbJ3Nob3dBbGxSdW5zJywgJ2dyb3VwJywg
J3Rlc3RUeXBlJ107CiAKK3ZhciBDUk9TU19EQl9JTlZBTElEQVRJTkdfUEFSQU1FVEVSUyA9IHsK
KyAgICAndGVzdFR5cGUnOiAnZ3JvdXAnCit9OworCiBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBl
ID0geworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHdpbmRvdy5v
bmhhc2hjaGFuZ2UgPSB0aGlzLl9oYW5kbGVMb2NhdGlvbkNoYW5nZS5iaW5kKHRoaXMpOworICAg
ICAgICB0aGlzLl9oYW5kbGVMb2NhdGlvbkNoYW5nZSgpOworICAgIH0sCiAgICAgaXNMYXlvdXRU
ZXN0UmVzdWx0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuY3Jvc3NE
YXNoYm9hcmRTdGF0ZS50ZXN0VHlwZSA9PSAnbGF5b3V0LXRlc3RzJzsKQEAgLTEzMiw2ICsxNDks
MTMgQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsKIAogICAgICAgICBoaXN0b3J5Ll9m
aWxsTWlzc2luZ1ZhbHVlcyh0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGUsIGhpc3RvcnkuREVGQVVM
VF9DUk9TU19EQVNIQk9BUkRfU1RBVEVfVkFMVUVTKTsKICAgICB9LAorICAgIF9wYXJzZURhc2hi
b2FyZFNwZWNpZmljUGFyYW1ldGVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5k
YXNoYm9hcmRTcGVjaWZpY1N0YXRlID0ge307CisgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gaGlz
dG9yeS5xdWVyeUhhc2hBc01hcCgpOworICAgICAgICBmb3IgKHBhcmFtZXRlck5hbWUgaW4gdGhp
cy5fZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMpCisgICAgICAgICAgICB0aGlz
LnBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlck5hbWUpOworICAgIH0sCiAgICAg
Ly8gVE9ETyhqcGFyZW50KTogTWFrZSBwcml2YXRlIG9uY2UgY2FsbGVycyBtb3ZlIGhlcmUuCiAg
ICAgcGFyc2VQYXJhbWV0ZXJzOiBmdW5jdGlvbigpCiAgICAgewpAQCAtMTUwLDEwICsxNzQsMTAg
QEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIHBhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCk7CisgICAgICAg
IHRoaXMuX3BhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCk7CiAgICAgICAgIHZhciBk
YXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZSA9IGhpc3RvcnkuX2RpZmZTdGF0ZXMob2xkRGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZSwgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKTsKIAotICAgICAg
ICBoaXN0b3J5Ll9maWxsTWlzc2luZ1ZhbHVlcyh0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUs
IGdfZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMpOworICAgICAgICBoaXN0b3J5
Ll9maWxsTWlzc2luZ1ZhbHVlcyh0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHRoaXMuX2Rl
ZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKTsKIAogICAgICAgICAvLyBGSVhNRTog
ZGFzaGJvYXJkX2Jhc2Ugc2hvdWxkbid0IGtub3cgYW55dGhpbmcgYWJvdXQgc3BlY2lmaWMgZGFz
aGJvYXJkIHNwZWNpZmljIGtleXMuCiAgICAgICAgIGlmIChkYXNoYm9hcmRTcGVjaWZpY0RpZmZT
dGF0ZS5idWlsZGVyKQpAQCAtMTYzLDcgKzE4Nyw3IEBAIGhpc3RvcnkuSGlzdG9yeS5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgdmFyIHNob3VsZEdlbmVyYXRlUGFnZSA9IHRydWU7CiAgICAgICAg
IGlmIChPYmplY3Qua2V5cyhkYXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZSkubGVuZ3RoKQotICAg
ICAgICAgICAgc2hvdWxkR2VuZXJhdGVQYWdlID0gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2Uo
ZGFzaGJvYXJkU3BlY2lmaWNEaWZmU3RhdGUpOworICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVQ
YWdlID0gdGhpcy5faGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UodGhpcywgZGFzaGJvYXJkU3Bl
Y2lmaWNEaWZmU3RhdGUpOwogICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGVQYWdlOwogICAg
IH0sCiAgICAgLy8gVE9ETyhqcGFyZW50KTogTWFrZSBwcml2YXRlIG9uY2UgY2FsbGVycyBtb3Zl
IGhlcmUuCkBAIC0yMDUsNyArMjI5LDcgQEAgaGlzdG9yeS5IaXN0b3J5LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2hhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcih0aGlzLCBrZXksIHZhbHVl
KTsKICAgICAgICAgfQogICAgIH0sCiAgICAgcXVlcnlQYXJhbWV0ZXJWYWx1ZTogZnVuY3Rpb24o
cGFyYW1ldGVyKQpAQCAtMjQzLDggKzI2Nyw4IEBAIGhpc3RvcnkuSGlzdG9yeS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGZvciAodmFyIGtleSBpbiBxdWVyeVBhcmFtc0FzU3RhdGUpIHsKICAgICAg
ICAgICAgIGlmIChrZXkgaW4gQ1JPU1NfREJfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMpCiAgICAg
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZVtDUk9TU19EQl9JTlZB
TElEQVRJTkdfUEFSQU1FVEVSU1trZXldXTsKLSAgICAgICAgICAgIGlmIChEQl9TUEVDSUZJQ19J
TlZBTElEQVRJTkdfUEFSQU1FVEVSUyAmJiBrZXkgaW4gREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5H
X1BBUkFNRVRFUlMpCi0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGFzaGJvYXJkU3BlY2lm
aWNTdGF0ZVtEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSU1trZXldXTsKKyAgICAg
ICAgICAgIGlmICh0aGlzLl9kYXNoYm9hcmRTcGVjaWZpY0ludmFsaWRhdGluZ1BhcmFtZXRlcnMg
JiYga2V5IGluIHRoaXMuX2Rhc2hib2FyZFNwZWNpZmljSW52YWxpZGF0aW5nUGFyYW1ldGVycykK
KyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW3RoaXMu
X2Rhc2hib2FyZFNwZWNpZmljSW52YWxpZGF0aW5nUGFyYW1ldGVyc1trZXldXTsKICAgICAgICAg
fQogICAgIH0sCiAgICAgX2pvaW5QYXJhbWV0ZXJzOiBmdW5jdGlvbihzdGF0ZU9iamVjdCkKQEAg
LTI1Miw3ICsyNzYsNyBAQCBoaXN0b3J5Lkhpc3RvcnkucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgc3RhdGUgPSBbXTsKICAgICAgICAgZm9yICh2YXIga2V5IGluIHN0YXRlT2JqZWN0KSB7CiAg
ICAgICAgICAgICB2YXIgdmFsdWUgPSBzdGF0ZU9iamVjdFtrZXldOwotICAgICAgICAgICAgaWYg
KHZhbHVlICE9IGRlZmF1bHRWYWx1ZShrZXkpKQorICAgICAgICAgICAgaWYgKHZhbHVlICE9IHRo
aXMuX2RlZmF1bHRWYWx1ZShrZXkpKQogICAgICAgICAgICAgICAgIHN0YXRlLnB1c2goa2V5ICsg
Jz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHN0YXRlLmpvaW4oJyYnKTsKQEAgLTI2OCw3ICsyOTIsMTkgQEAgaGlzdG9yeS5IaXN0b3J5
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3Jvc3NEYXNoYm9h
cmRTdGF0ZSkKICAgICAgICAgICAgIGNvbWJpbmVkU3RhdGVba2V5XSA9IHRoaXMuY3Jvc3NEYXNo
Ym9hcmRTdGF0ZVtrZXldOwogICAgICAgICByZXR1cm4gY29tYmluZWRTdGF0ZTsgICAgCisgICAg
fSwKKyAgICBfZGVmYXVsdFZhbHVlOiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICBpZiAo
a2V5IGluIHRoaXMuX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzW2tl
eV07CisgICAgICAgIHJldHVybiBoaXN0b3J5LkRFRkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRF
X1ZBTFVFU1trZXldOworICAgIH0sCisgICAgX2hhbmRsZUxvY2F0aW9uQ2hhbmdlOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAodGhpcy5wYXJzZVBhcmFtZXRlcnMoKSkKKyAgICAgICAg
ICAgIHRoaXMuX2dlbmVyYXRlUGFnZSh0aGlzKTsKICAgICB9CisKIH0KIAogfSkoKTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2xvYWRlci5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvbG9hZGVyLmpzCmluZGV4IGE1MjZlZWI1MjhjNzZlYTg1NTVlMGNkZTdl
ODFmMjY4ODJmOWFjOGEuLjhkODQ2ODIzMDVkOTk5ZTA2MTM3YjM5MzBhMTIzMzQ4YjMxMDQ4ODQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9h
ZGVyLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9h
ZGVyLmpzCkBAIC01Nyw3ICs1Nyw3IEBAIGxvYWRlci5yZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBz
dWNjZXNzLCBlcnJvciwgb3B0X2lzQmluYXJ5RGF0YSkKICAgICB4aHIuc2VuZCgpOwogfQogCi1s
b2FkZXIuTG9hZGVyID0gZnVuY3Rpb24ob3B0X29uTG9hZGluZ0NvbXBsZXRlKQorbG9hZGVyLkxv
YWRlciA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLl9sb2FkaW5nU3RlcHMgPSBbCiAgICAgICAg
IHRoaXMuX2xvYWRCdWlsZGVyc0xpc3QsCkBAIC02OCw3ICs2OCw2IEBAIGxvYWRlci5Mb2FkZXIg
PSBmdW5jdGlvbihvcHRfb25Mb2FkaW5nQ29tcGxldGUpCiAgICAgdGhpcy5fYnVpbGRlcnNUaGF0
RmFpbGVkVG9Mb2FkID0gW107CiAgICAgdGhpcy5fc3RhbGVCdWlsZGVycyA9IFtdOwogICAgIHRo
aXMuX2Vycm9ycyA9IG5ldyB1aS5FcnJvcnMoKTsKLSAgICB0aGlzLl9vbkxvYWRpbmdDb21wbGV0
ZSA9IG9wdF9vbkxvYWRpbmdDb21wbGV0ZSB8fCBmdW5jdGlvbigpIHt9OwogICAgIC8vIFRPRE8o
anBhcmVudCk6IFBhc3MgaW4gdGhlIGFwcHJvcHJpYXRlIGhpc3Rvcnkgb2JqIHBlciBkYi4KICAg
ICB0aGlzLl9oaXN0b3J5ID0gZ19oaXN0b3J5OwogfQpAQCAtMTA3LDcgKzEwNiw3IEBAIGxvYWRl
ci5Mb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbG9hZGluZ1N0ZXAgPSB0aGlzLl9s
b2FkaW5nU3RlcHMuc2hpZnQoKTsKICAgICAgICAgaWYgKCFsb2FkaW5nU3RlcCkgewogICAgICAg
ICAgICAgdGhpcy5fYWRkRXJyb3JzKCk7Ci0gICAgICAgICAgICB0aGlzLl9vbkxvYWRpbmdDb21w
bGV0ZSgpOworICAgICAgICAgICAgdGhpcy5faGlzdG9yeS5pbml0aWFsaXplKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbG9hZGluZ1N0ZXAuYXBwbHkodGhpcyk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2xv
YWRlcl91bml0dGVzdHMuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2xvYWRlcl91bml0dGVzdHMuanMKaW5kZXggMjNlYWIzMTg3OTcwNTM0YmU0YTAyNGVkNWU3
NWM3ZjQ0NTJkNDgwYy4uODNkMjBlMTlmZjBmNGJhM2E5NDBmMDI3NDc1NjcwYTEyM2FjNDJjZCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2Fk
ZXJfdW5pdHRlc3RzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvbG9hZGVyX3VuaXR0ZXN0cy5qcwpAQCAtMzEsMTEgKzMxLDEwIEBAIG1vZHVsZSgnbG9h
ZGVyJyk7CiB0ZXN0KCdsb2FkaW5nIHN0ZXBzJywgMSwgZnVuY3Rpb24oKSB7CiAgICAgcmVzZXRH
bG9iYWxzKCk7CiAgICAgdmFyIGxvYWRlZFN0ZXBzID0gW107Ci0gICAgdmFyIGxvYWRpbmdDb21w
bGV0ZUNhbGxiYWNrID0gaGFuZGxlTG9jYXRpb25DaGFuZ2U7Ci0gICAgaGFuZGxlTG9jYXRpb25D
aGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBnX2hpc3RvcnkuX2hhbmRsZUxvY2F0aW9uQ2hhbmdl
ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIGRlZXBFcXVhbChsb2FkZWRTdGVwcywgWydzdGVwIDEn
LCAnc3RlcCAyJ10pOwogICAgIH0KLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVy
LkxvYWRlcihoYW5kbGVMb2NhdGlvbkNoYW5nZSk7CisgICAgdmFyIHJlc291cmNlTG9hZGVyID0g
bmV3IGxvYWRlci5Mb2FkZXIoKTsKICAgICBmdW5jdGlvbiBsb2FkaW5nU3RlcDEoKSB7CiAgICAg
ICAgIGxvYWRlZFN0ZXBzLnB1c2goJ3N0ZXAgMScpOwogICAgICAgICByZXNvdXJjZUxvYWRlci5s
b2FkKCk7CkBAIC00OCw5ICs0Nyw3IEBAIHRlc3QoJ2xvYWRpbmcgc3RlcHMnLCAxLCBmdW5jdGlv
bigpIHsKICAgICB0cnkgewogICAgICAgICByZXNvdXJjZUxvYWRlci5fbG9hZGluZ1N0ZXBzID0g
W2xvYWRpbmdTdGVwMSwgbG9hZGluZ1N0ZXAyXTsKICAgICAgICAgcmVzb3VyY2VMb2FkZXIubG9h
ZCgpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGhhbmRsZUxvY2F0aW9uQ2hhbmdlID0gbG9h
ZGluZ0NvbXBsZXRlQ2FsbGJhY2s7Ci0gICAgfQorICAgIH0gCiB9KTsKIAogLy8gVG90YWwgbnVt
YmVyIG9mIGFzc2VydGlvbnMgaXMgMSBmb3IgdGhlIGRlZXBFcXVhbCBvZiB0aGUgYnVpbGRlciBs
aXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90aW1lbGluZV9leHBsb3Jlci5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanMKaW5kZXggZGQ0OThiZDVlZmRlYmU5NjA1MWZk
ODZlYjU1M2EyYzVmNDgzZmJiNS4uYjg4NWQ2MzA4NGI0NWFlYjIyOTIzMjlhMjlkMTZmMjcyNGVk
NTFlMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJk
cy90aW1lbGluZV9leHBsb3Jlci5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmpzCkBAIC0zMiwyMSArMzIsMjkgQEAgdmFy
IGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXAgPSB7fTsKIHZhciBnX2N1cnJlbnRCdWlsZEluZGV4
ID0gLTE7CiB2YXIgZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzOwogCi0vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLS8vIE1ldGhvZHMgYW5kIG9iamVjdHMgZnJvbSBkYXNoYm9hcmRfYmFzZS5qcyB0
byBvdmVycmlkZS4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotZnVuY3Rpb24gZ2VuZXJhdGVQYWdl
KCkKK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKKyAgICBidWls
ZGVyOiBudWxsLAorICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKKyAgICBpZ25vcmVGbGFreVRlc3Rz
OiB0cnVlCit9OworCit2YXIgREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7
CisgICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAorICAgICdncm91cCc6ICdidWlsZGVyJworfTsK
KworZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKGhpc3RvcnlJbnN0YW5jZSkKIHsKICAgICBnX2J1aWxk
SW5kaWNlc0J5VGltZXN0YW1wID0ge307Ci0gICAgdmFyIHJlc3VsdHMgPSBnX3Jlc3VsdHNCeUJ1
aWxkZXJbZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50
QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07CisgICAgdmFyIHJlc3VsdHMgPSBnX3Jl
c3VsdHNCeUJ1aWxkZXJbaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVp
bGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07CiAKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGg7IGkr
KykgewogICAgICAgICB2YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RBTVBT
X0tFWV1baV0gKiAxMDAwKTsKICAgICAgICAgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFtidWls
ZERhdGUuZ2V0VGltZSgpXSA9IGk7CiAgICAgfQogCi0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wICE9IC0xICYmIGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wIGluIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3Rh
bXApIHsKLSAgICAgICAgdmFyIG5ld0J1aWxkSW5kZXggPSBnX2J1aWxkSW5kaWNlc0J5VGltZXN0
YW1wW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wXTsKKyAg
ICBpZiAoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3Rh
bXAgIT0gLTEgJiYgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRU
aW1lc3RhbXAgaW4gZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCkgeworICAgICAgICB2YXIgbmV3
QnVpbGRJbmRleCA9IGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbaGlzdG9yeUluc3RhbmNlLmRh
c2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXBdOwogCiAgICAgICAgIGlmIChuZXdC
dWlsZEluZGV4ID09IGdfY3VycmVudEJ1aWxkSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMg
aGFwcGVucyB3aGVuIHNlbGVjdEJ1aWxkIGlzIGNhbGxlZCwgd2hpY2ggdXBkYXRlcyB0aGUgVUkK
QEAgLTYxLDQ3ICs2OSw0NyBAQCBmdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoKQogICAgIGluaXRDdXJy
ZW50QnVpbGRlclRlc3RSZXN1bHRzKCk7CiAKICAgICAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKS5p
bm5lckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIoIGZhbHNlLAotICAgICAgICB1aS5o
dG1sLmNoZWNrYm94KCdpZ25vcmVGbGFreVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGdf
aGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmlnbm9yZUZsYWt5VGVzdHMsICdnX2N1cnJl
bnRCdWlsZEluZGV4ID0gLTEnKQorICAgICAgICB1aS5odG1sLmNoZWNrYm94KCdpZ25vcmVGbGFr
eVRlc3RzJywgJ0lnbm9yZSBmbGFreSB0ZXN0cycsIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRT
cGVjaWZpY1N0YXRlLmlnbm9yZUZsYWt5VGVzdHMsICdnX2N1cnJlbnRCdWlsZEluZGV4ID0gLTEn
KQogICAgICk7CiAKICAgICB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKTsKIH0KIAotZnVuY3Rp
b24gaW5pdEN1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMoKQotewotICAgIHZhciBzdGFydFRpbWUg
PSBEYXRlLm5vdygpOwotICAgIGdfY3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0cyA9IF9kZWNvbXBy
ZXNzUmVzdWx0cyhnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUuYnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV0p
OwotICAgIGNvbnNvbGUubG9nKCAnVGltZSB0byBnZXQgdGVzdCByZXN1bHRzIGJ5IGJ1aWxkOiAn
ICsgKERhdGUubm93KCkgLSBzdGFydFRpbWUpKTsKLX0KLQotZnVuY3Rpb24gaGFuZGxlVmFsaWRI
YXNoUGFyYW1ldGVyKGtleSwgdmFsdWUpCitmdW5jdGlvbiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0
ZXIoaGlzdG9yeUluc3RhbmNlLCBrZXksIHZhbHVlKQogewogICAgIHN3aXRjaChrZXkpIHsKICAg
ICBjYXNlICdidWlsZGVyJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlcihnX2hp
c3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAgICAgaGlzdG9y
eS52YWxpZGF0ZVBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZSwga2V5LCB2YWx1ZSwKICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmFsdWUgaW4g
Y3VycmVudEJ1aWxkZXJzKCk7IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlICdi
dWlsZFRpbWVzdGFtcCc6Ci0gICAgICAgIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LmJ1aWxkVGltZXN0YW1wID0gcGFyc2VJbnQodmFsdWUsIDEwKTsKKyAgICAgICAgaGlzdG9yeUlu
c3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXAgPSBwYXJzZUludCh2
YWx1ZSwgMTApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlICdpZ25vcmVGbGFreVRl
c3RzJzoKLSAgICAgICAgZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxh
a3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsKKyAgICAgICAgaGlzdG9yeUluc3RhbmNlLmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIH0KIAotZ19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKLSAg
ICBidWlsZGVyOiBudWxsLAotICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKLSAgICBpZ25vcmVGbGFr
eVRlc3RzOiB0cnVlCit2YXIgdGltZWxpbmVDb25maWcgPSB7CisgICAgZGVmYXVsdFN0YXRlVmFs
dWVzOiBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywKKyAgICBnZW5lcmF0ZVBh
Z2U6IGdlbmVyYXRlUGFnZSwKKyAgICBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZh
bGlkSGFzaFBhcmFtZXRlciwKKyAgICBpbnZhbGlkYXRpbmdIYXNoUGFyYW1ldGVyczogREJfU1BF
Q0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMKIH07CiAKLURCX1NQRUNJRklDX0lOVkFMSURB
VElOR19QQVJBTUVURVJTID0gewotICAgICd0ZXN0VHlwZSc6ICdidWlsZGVyJywKLSAgICAnZ3Jv
dXAnOiAnYnVpbGRlcicKLX07CisvLyBGSVhNRShqcGFyZW50KTogRXZlbnR1YWxseSByZW1vdmUg
YWxsIHVzYWdlIG9mIGdsb2JhbCBoaXN0b3J5IG9iamVjdC4KK3ZhciBnX2hpc3RvcnkgPSBuZXcg
aGlzdG9yeS5IaXN0b3J5KHRpbWVsaW5lQ29uZmlnKTsKK2dfaGlzdG9yeS5wYXJzZUNyb3NzRGFz
aGJvYXJkUGFyYW1ldGVycygpOworCitmdW5jdGlvbiBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVz
dWx0cygpCit7CisgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CisgICAgZ19jdXJyZW50
QnVpbGRlclRlc3RSZXN1bHRzID0gX2RlY29tcHJlc3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVpbGRl
cltnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWls
ZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpXSk7CisgICAgY29uc29sZS5sb2coICdUaW1lIHRv
IGdldCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6ICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkp
OworfQogCiBmdW5jdGlvbiBzaG91bGRTaG93V2ViS2l0UmV2aXNpb25zT25seSgpCiB7CkBAIC00
ODgsNiArNDk2LDYgQEAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0
aW9uKGUpIHsKIH0pOwogCiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9u
KCkgewotICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKGludGlhbGl6
ZUhpc3RvcnkpOworICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7
CiAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwogfSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmpzIGIvVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmpzCmluZGV4IGEyNjFk
ZmQwYWQ0NTQ5MTdmZDc3MTNmODk2YmQyMGNmOWE1MzMzODIuLmRiOTliOGFiODhkN2ZjNjMxZWI4
NDE4ODUxOGZiZGIzMWIwNWE3NTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuanMKQEAgLTI2LDYgKzI2LDc3IEBACiAvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKIC8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK3ZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZVZhbHVlcyA9IHsKKyAgICBidWlsZGVyOiBudWxsLAorICAgIHRyZWVtYXBmb2N1czogJycs
Cit9OworCit2YXIgREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMgPSB7CisgICAg
J3Rlc3RUeXBlJzogJ2J1aWxkZXInLAorICAgICdncm91cCc6ICdidWlsZGVyJworfTsKKworZnVu
Y3Rpb24gZ2VuZXJhdGVQYWdlKGhpc3RvcnlJbnN0YW5jZSkKK3sKKyAgICAkKCdoZWFkZXItY29u
dGFpbmVyJykuaW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVyKCk7CisKKyAgICBn
X2lzR2VuZXJhdGluZ1BhZ2UgPSB0cnVlOworCisgICAgdmFyIHJhd1RyZWUgPSBnX3Jlc3VsdHNC
eUJ1aWxkZXJbaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8
fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07CisgICAgZ193ZWJUcmVl
ID0gY29udmVydFRvV2ViVHJlZW1hcEZvcm1hdCgnTGF5b3V0VGVzdHMnLCByYXdUcmVlKTsKKyAg
ICBhcHBlbmRUcmVlbWFwKCQoJ21hcCcpLCBnX3dlYlRyZWUpOworCisgICAgaWYgKGhpc3RvcnlJ
bnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRyZWVtYXBmb2N1cykKKyAgICAgICAgZm9j
dXNQYXRoKGdfd2ViVHJlZSwgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
dHJlZW1hcGZvY3VzKQorCisgICAgZ19pc0dlbmVyYXRpbmdQYWdlID0gZmFsc2U7Cit9CisKK2Z1
bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UsIGtleSwgdmFs
dWUpCit7CisgICAgc3dpdGNoKGtleSkgeworICAgIGNhc2UgJ2J1aWxkZXInOgorICAgICAgICBo
aXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLCBrZXksIHZhbHVlLAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1
ZSBpbiBjdXJyZW50QnVpbGRlcnMoKTsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2FzZSAndHJlZW1hcGZvY3VzJzoKKyAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlciho
aXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIHBy
b2JhYmx5IGEgc2ltcGxlciByZWdleHAgaGVyZS4gSnVzdCB0cnlpbmcgdG8gbWF0Y2ggYXNjaWkg
KyBmb3J3YXJkLXNsYXNoLgorICAgICAgICAgICAgICAgIC8vIGUuZy4gTGF5b3V0VGVzdHMvZm9v
L2Jhci5odG1sCisgICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihcdytcL1x3
KikqJC8pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGhhbmRs
ZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKGhpc3RvcnlJbnN0YW5jZSwgcGFyYW1zKQoreworICAgIGZv
ciAodmFyIHBhcmFtIGluIHBhcmFtcykgeworICAgICAgICBpZiAocGFyYW0gIT0gJ3RyZWVtYXBm
b2N1cycpIHsKKyAgICAgICAgICAgICQoJ21hcCcpLmlubmVySFRNTCA9ICdMb2FkaW5nLi4uJzsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordmFyIHRyZWVtYXBDb25maWcgPSB7CisgICAgZGVmYXVsdFN0YXRlVmFsdWVz
OiBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywKKyAgICBnZW5lcmF0ZVBhZ2U6
IGdlbmVyYXRlUGFnZSwKKyAgICBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI6IGhhbmRsZVZhbGlk
SGFzaFBhcmFtZXRlciwKKyAgICBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZTogaGFuZGxlUXVl
cnlQYXJhbWV0ZXJDaGFuZ2UsCisgICAgaW52YWxpZGF0aW5nSGFzaFBhcmFtZXRlcnM6IERCX1NQ
RUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTCit9OworCisvLyBGSVhNRShqcGFyZW50KTog
RXZlbnR1YWxseSByZW1vdmUgYWxsIHVzYWdlIG9mIGdsb2JhbCBoaXN0b3J5IG9iamVjdC4KK3Zh
ciBnX2hpc3RvcnkgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KHRyZWVtYXBDb25maWcpOworZ19oaXN0
b3J5LnBhcnNlQ3Jvc3NEYXNoYm9hcmRQYXJhbWV0ZXJzKCk7CisKIHZhciBURVNUX1VSTF9CQVNF
X1BBVEggPSAiaHR0cDovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rLyI7
CiAKIGZ1bmN0aW9uIGh1bWFuUmVhZGFibGVUaW1lKG1pbGxpc2Vjb25kcykKQEAgLTEzNiwyMiAr
MjA3LDYgQEAgZnVuY3Rpb24gc2hvd0F2ZXJhZ2VzKCkKIHZhciBnX2lzR2VuZXJhdGluZ1BhZ2Ug
PSBmYWxzZTsKIHZhciBnX3dlYlRyZWU7CiAKLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCi17Ci0g
ICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0
Y2hlcigpOwotCi0gICAgZ19pc0dlbmVyYXRpbmdQYWdlID0gdHJ1ZTsKLQotICAgIHZhciByYXdU
cmVlID0gZ19yZXN1bHRzQnlCdWlsZGVyW2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCldOwotICAg
IGdfd2ViVHJlZSA9IGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQoJ0xheW91dFRlc3RzJywgcmF3
VHJlZSk7Ci0gICAgYXBwZW5kVHJlZW1hcCgkKCdtYXAnKSwgZ193ZWJUcmVlKTsKLQotICAgIGlm
IChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50cmVlbWFwZm9jdXMpCi0gICAgICAg
IGZvY3VzUGF0aChnX3dlYlRyZWUsIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRy
ZWVtYXBmb2N1cykKLQotICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9IGZhbHNlOwotfQotCiBmdW5j
dGlvbiBmb2N1c1BhdGgodHJlZSwgcGF0aCkKIHsKICAgICB2YXIgcGFydHMgPSBkZWNvZGVVUklD
b21wb25lbnQocGF0aCkuc3BsaXQoJy8nKTsKQEAgLTE3OCw0OSArMjMzLDYgQEAgZnVuY3Rpb24g
Zm9jdXNQYXRoKHRyZWUsIHBhdGgpCiAKIH0KIAotZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFy
YW1ldGVyKGtleSwgdmFsdWUpCi17Ci0gICAgc3dpdGNoKGtleSkgewotICAgIGNhc2UgJ2J1aWxk
ZXInOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJl
dHVybiB2YWx1ZSBpbiBjdXJyZW50QnVpbGRlcnMoKTsgfSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgY2FzZSAndHJlZW1hcGZvY3VzJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0ZVBh
cmFtZXRlcihnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2YWx1ZSwKLSAg
ICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSdz
IHByb2JhYmx5IGEgc2ltcGxlciByZWdleHAgaGVyZS4gSnVzdCB0cnlpbmcgdG8gbWF0Y2ggYXNj
aWkgKyBmb3J3YXJkLXNsYXNoLgotICAgICAgICAgICAgICAgIC8vIGUuZy4gTGF5b3V0VGVzdHMv
Zm9vL2Jhci5odG1sCi0gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5tYXRjaCgvXihcdytc
L1x3KikqJC8pKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWdfZGVmYXVsdERh
c2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7Ci0gICAgYnVpbGRlcjogbnVsbCwKLSAgICB0
cmVlbWFwZm9jdXM6ICcnLAotfTsKLQotREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRF
UlMgPSB7Ci0gICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAotICAgICdncm91cCc6ICdidWlsZGVy
JwotfTsKLQotZnVuY3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UocGFyYW1zKQotewot
ICAgIGZvciAodmFyIHBhcmFtIGluIHBhcmFtcykgewotICAgICAgICBpZiAocGFyYW0gIT0gJ3Ry
ZWVtYXBmb2N1cycpIHsKLSAgICAgICAgICAgICQoJ21hcCcpLmlubmVySFRNTCA9ICdMb2FkaW5n
Li4uJzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogZnVuY3Rpb24gZXh0cmFjdE5hbWUobm9kZSkKIHsKICAgICByZXR1
cm4gbm9kZS5uYW1lLnNwbGl0KCcgJylbMF07CkBAIC0yNzAsNiArMjgyLDYgQEAgZnVuY3Rpb24g
aGFuZGxlRm9jdXModHJlZSkKIH0KIAogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBm
dW5jdGlvbigpIHsKLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcihp
bnRpYWxpemVIaXN0b3J5KTsKKyAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxv
YWRlcigpOwogICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKIH0sIGZhbHNlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>