<?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>141443</bug_id>
          
          <creation_ts>2015-02-10 13:41:16 -0800</creation_ts>
          <short_desc>Perf dashboard should automatically detect regressions</short_desc>
          <delta_ts>2016-02-16 13:53:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Perf Dashboard</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141438</dependson>
    
    <dependson>141523</dependson>
    
    <dependson>143252</dependson>
    
    <dependson>143290</dependson>
    
    <dependson>143359</dependson>
    
    <dependson>143362</dependson>
    
    <dependson>143466</dependson>
    
    <dependson>143552</dependson>
    
    <dependson>143580</dependson>
    
    <dependson>143617</dependson>
    
    <dependson>143977</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>mjs</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068134</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-10 13:41:16 -0800</bug_when>
    <thetext>We should be able to detect new regressions automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068135</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-02-10 13:41:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/19435339&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088118</commentid>
    <comment_count>2</comment_count>
      <attachid>251520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-23 18:07:39 -0700</bug_when>
    <thetext>Created attachment 251520
Completes the feature</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088125</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-23 18:17:44 -0700</bug_when>
    <thetext>Committed r183232: &lt;http://trac.webkit.org/changeset/183232&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251520</attachid>
            <date>2015-04-23 18:07:39 -0700</date>
            <delta_ts>2015-04-23 18:13:58 -0700</delta_ts>
            <desc>Completes the feature</desc>
            <filename>bug-141443-20150423180634.patch</filename>
            <type>text/plain</type>
            <size>41088</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMjMwKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk3IEBACisyMDE1LTA0LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFBlcmYgZGFzaGJvYXJkIHNob3VsZCBhdXRvbWF0aWNhbGx5IGRldGVjdCByZWdy
ZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSBub2RlLmpzIHNjcmlwdCBkZXRlY3QtY2hhbmdlcy5qcyB0byBkZXRlY3QgcG90ZW50
aWFsIHJlZ3Jlc3Npb25zIGFuZCBwcm9ncmVzc2lvbnMKKyAgICAgICAgb24gdGhlIGdyYXBocyB0
cmFja2VkIG9uIHYyIGRhc2hib2FyZHMuCisKKyAgICAgICAgKiBpbml0LWRhdGFiYXNlLnNxbDog
QWRkZWQgYW5hbHlzaXNfc3RyYXRlZ2llcyB0YWJsZSBhbmQgdGFza19zZWdtZW50YXRpb24gYW5k
IHRhc2tfdGVzdF9yYW5nZQorICAgICAgICBjb2x1bW5zIHRvIGFuYWx5c2lzX3Rhc2tzIHRvIGtl
ZXAgdGhlIHNlZ21lbnRhdGlvbiBhbmQgdGVzdCByYW5nZSBzZWxlY3Rpb24gc3RyYXRlZ2llcyB1
c2VkCisgICAgICAgIHRvIGNyZWF0ZSBhbiBhbmFseXNpcyB0YXNrLgorCisgICAgICAgICogcHVi
bGljL2FwaS9hbmFseXNpcy10YXNrcy5waHA6CisgICAgICAgIChmb3JtYXRfdGFzayk6IEluY2x1
ZGUgdGFza19zZWdtZW50YXRpb24gYW5kIGFuYWx5c2lzX3Rhc2tzIGluIHRoZSByZXN1bHRzLgor
CisgICAgICAgICogcHVibGljL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwOgorICAgICAgICAocmVt
b3RlX3VzZXJfbmFtZSk6IFJldHVybnMgbnVsbCB3aGVuIHRoZSBwcml2aWxlZ2VkIEFQSSBpcyBh
dXRoZW50aWNhdGVkIGFzIGEgc2xhdmUgaW5zdGVhZAorICAgICAgICBvZiBhIENTUkYgcHJldmVu
dGlvbiB0b2tlbi4KKyAgICAgICAgKHNob3VsZF9hdXRoZW50aWNhdGVfYXNfc2xhdmUpOiBBZGRl
ZC4KKyAgICAgICAgKGVuc3VyZV9wcml2aWxlZ2VkX2FwaV9kYXRhX2FuZF90b2tlbl9vcl9zbGF2
ZSk6IEFkZGVkLiBBdXRoZW50aWNhdGUgYXMgYSBzbGF2ZSBpZiBzbGF2ZU5hbWUKKyAgICAgICAg
YW5kIHNsYXZlUGFzc3dvcmQgYXJlIHNwZWNpZmllZC4gU2luY2UgZGV0ZWN0LWNoYW5nZXMuanMg
YW5kIG90aGVyIHNsYXZlcyBhcmUgbm90IHN1c2NlcHRpYmxlCisgICAgICAgIHRvIGEgQ1NSRiBh
dHRhY2ssIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYSBDU1JGIHRva2VuLgorCisgICAgICAgICog
cHVibGljL3ByaXZpbGVnZWQtYXBpL2NyZWF0ZS1hbmFseXNpcy10YXNrLnBocDoKKyAgICAgICAg
KG1haW4pOiBVc2UgZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2RhdGFfYW5kX3Rva2VuX29yX3NsYXZl
IHRvIGxldCBkZXRlY3QtY2hhbmdlcy5qcyBjcmVhdGUgbmV3CisgICAgICAgIGFuYWx5c2lzIHRh
c2suIEFsc28gYWRkIG9yIGZpbmQgc2VnbWVudGF0aW9uIGFuZCB0ZXN0IHJhbmdlIHNlbGVjdGlv
biBzdHJhdGVnaWVzIGlmIHNwZWNpZmllZC4KKworICAgICAgICAqIHB1YmxpYy9wcml2aWxlZ2Vk
LWFwaS9jcmVhdGUtdGVzdC1ncm91cC5waHA6CisgICAgICAgIChtYWluKTogVXNlIGVuc3VyZV9w
cml2aWxlZ2VkX2FwaV9kYXRhX2FuZF90b2tlbl9vcl9zbGF2ZS4KKworICAgICAgICAqIHB1Ymxp
Yy9wcml2aWxlZ2VkLWFwaS9nZW5lcmF0ZS1jc3JmLXRva2VuLnBocDoKKworICAgICAgICAqIHB1
YmxpYy92Mi9hcHAuanM6CisgICAgICAgIChBcHAuUGFuZS5fY29tcHV0ZU1vdmluZ0F2ZXJhZ2VB
bmRPdXRsaWVycyk6IF9leGVjdXRlU3RyYXRlZ3kgaGFzIGJlZW4gbW92ZWQgdG8gU3RhdGlzdGlj
cy4KKworICAgICAgICAqIHB1YmxpYy92Mi9kYXRhLmpzOiBFeHBvcnQgTWVhc3VyZW1lbnQsIFJ1
bnNEYXRhLCBUaW1lU2VyaWVzLiBVc2VkIGluIGRldGVjdC1jaGFuZ2VzLmpzLgorICAgICAgICAo
QXJyYXkucHJvdG90eXBlLmZpbmQpOiBBZGRlZCBhIHBvbHlmaWxsIHRvIGJlIHVzZWQgaW4gbm9k
ZS5qcy4KKyAgICAgICAgKFJ1bnNEYXRhLmZldGNoUnVucyk6CisgICAgICAgIChSdW5zRGF0YS5w
YXRoRm9yRmV0Y2hpbmdSdW5zKTogRXh0cmFjdGVkIGZyb20gZmV0Y2hSdW5zLiBVc2VkIGluIGRl
dGVjdC1jaGFuZ2VzLmpzLgorICAgICAgICAoUnVuc0RhdGEuY3JlYXRlUnVuc0RhdGFJblJlc3Bv
bnNlKTogRXh0cmFjdGVkIGZyb20gQXBwLk1hbmlmZXN0Ll9mb3JtYXRGZXRjaGVkRGF0YSB0byB1
c2UgaXQKKyAgICAgICAgaW4gZGV0ZWN0LWNoYW5nZXMuanMuCisgICAgICAgIChSdW5zRGF0YS51
bml0RnJvbU1ldHJpY05hbWUpOiBEaXR0by4KKyAgICAgICAgKFJ1bnNEYXRhLmlzU21hbGxlckJl
dHRlcik6IERpdHRvLgorICAgICAgICAoUnVuc0RhdGEucHJvdG90eXBlLl90aW1lU2VyaWVzQnlU
aW1lSW50ZXJuYWwpOiBBZGRlZCBzZWNvbmRhcnlUaW1lIHRvIHNvcnQgcG9pbnRzIHdoZW4gY29t
bWl0CisgICAgICAgIHRpbWVzIGFyZSBpZGVudGljYWwuCisgICAgICAgIChUaW1lU2VyaWVzKTog
V2hlbiBjb21taXQgdGltZXMgYXJlIGlkZW50aWNhbCwgb3JkZXIgcG9pbnRzIGJhc2VkIG9uIGJ1
aWxkIHRpbWUuIFRoaXMgaXMgbmVlZGVkCisgICAgICAgIGZvciB3aGVuIHdlIHRyaWdnZXIgdHdv
IGJ1aWxkcyBhdCB0d28gZGlmZmVyZW50IE9TIHZlcnNpb25zIHdpdGggdGhlIHNhbWUgV2ViS2l0
IHJldmlzaW9uIHNpbmNlCisgICAgICAgIE9TIHZlcnNpb25zIGRvbid0IGNoYW5nZSB0aGUgY29t
bWl0IHRpbWVzLgorICAgICAgICAoVGltZVNlcmllcy5wcm90b3R5cGUuZmluZFBvaW50QnlJbmRl
eCk6IEFkZGVkLgorICAgICAgICAoVGltZVNlcmllcy5wcm90b3R5cGUucmF3VmFsdWVzKTogQWRk
ZWQuCisKKyAgICAgICAgKiBwdWJsaWMvdjIvanMvc3RhdGlzdGljcy5qczoKKyAgICAgICAgKFN0
YXRpc3RpY3MuVGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ2llcy5bMF0pOiBVc2UgdGhlIDk5JSB0
d28tc2lkZWQgcHJvYmFiaWxpdHkgYXMgY2xhaW1lZCBpbiB0aGUKKyAgICAgICAgZGVzY3JpcHRp
b24gb2YgdGhpcyBzdHJhdGVneSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHByb2JhYmlsaXR5LiBB
bHNvIGZpeGVkIGEgYnVnIHRoYXQgZGVidWdnaW5nCisgICAgICAgIGNvZGUgd2FzIHJlZmVycmlu
ZyB0byBub24tZXhpc3RlbnQgdmFyaWFibGVzLgorICAgICAgICAoU3RhdGlzdGljcy5leGVjdXRl
U3RyYXRlZ3kpOiBNb3ZlZCBmcm9tIEFwcC5QYW5lIChhcHAuanMpLgorCisgICAgICAgICogcHVi
bGljL3YyL21hbmlmZXN0LmpzOgorICAgICAgICAoQXBwLk1hbmlmZXN0Ll9mb3JtYXRGZXRjaGVk
RGF0YSk6IFZhcmlvdXMgY29kZSBoYXMgYmVlbiBleHRyYWN0ZWQgaW50byBSdW5zRGF0YSBpbiBk
YXRhLmpzIHRvIGJlCisgICAgICAgIHVzZWQgaW4gZGV0ZWN0LWNoYW5nZXMuanMuCisKKyAgICAg
ICAgKiB0b29scy9kZXRlY3QtY2hhbmdlcy5qczogQWRkZWQuIFRoZSBzY3JpcHQgZmV0Y2hlcyB0
aGUgbWFuaWZlc3QgSlNPTiwgYW5hbHl6ZXMgZWFjaCBncmFwaCBpbgorICAgICAgICB0aGUgdjIg
ZGFzaGJvYXJkcywgYW5kIGNyZWF0ZXMgYW4gYW5hbHlzaXMgdGFzayBmb3IgdGhlIGxhdGVzdCBy
ZWdyZXNzaW9uIG9yIHByb2dyZXNzaW9uIGRldGVjdGVkLgorICAgICAgICBJdCBhbHNvIHNjaGVk
dWxlcyBhbiBBL0IgdGVzdGluZyBpZiBwb3NzaWJsZSBhbmQgbm90aWZpZXMgYW5vdGhlciBzZXJ2
ZXI7IGUuZy4gdG8gc2VuZCBhbiBlbWFpbC4gCisgICAgICAgIChtYWluKTogTG9hZHMgdGhlIHNl
dHRpbmdzIEpTT04gc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudC4KKyAgICAgICAgKGZldGNoTWFu
aWZlc3RBbmRBbmFseXplRGF0YSk6IFRoZSBtYWluIGxvb3AgdGhhdCBwZXJpb2RpY2FsbHkgd2Fr
ZXMgdXAgdG8gZG8gdGhlIGFuYWx5c2lzLgorICAgICAgICAobWFwSW5PcmRlcik6IEV4ZWN1dGVz
IGNhbGxiYWNrIHNlcXVlbnRpYWxseSAoaS5lLiBibG9ja2luZykgb24gZWFjaCBpdGVtIGluIHRo
ZSBhcnJheS4KKyAgICAgICAgKGNvbmZpZ3VyYXRpb25zRm9yVGVzdGluZyk6IEZpbmRzIGV2ZXJ5
IChwbGF0Zm9ybSwgbWV0cmljKSBwYWlyIHRvIGFuYWx5emUgaW4gdGhlIHYyIGRhc2hiYW9yZHMs
CisgICAgICAgIGFuZCBjb21wdXRlcyB2YXJpb3VzIHZhbHVlcyBmb3Igd2hlbiBzdGF0aXN0aWNh
bGx5IHNpZ25pZmljYW50IGNoYW5nZXMgYXJlIGRldGVjdGVkIGxhdGVyLgorICAgICAgICAoYW5h
bHl6ZUNvbmZpZ3VyYXRpb24pOiBGaW5kcyBwb3RlbnRpYWwgcmVncmVzc2lvbnMgYW5kIHByb2dy
ZXNzaW9uIGluIHRoZSBsYXN0IFggZGF5cyB3aGVyZSBYCisgICAgICAgIGlzIHRoZSBzcGVjaWZp
ZWQgbWF4aW11bSBudW1iZXIgb2YgZGF5cyB1c2luZyB0aGUgc3BlY2lmaWVkIHN0cmF0ZWdpZXMu
IFNvcnQgdGhlIHJlc3VsdGFudCByYW5nZXMKKyAgICAgICAgaW4gY2hyb25vbG9naWNhbCBvcmRl
ciBhbmQgY3JlYXRlIGEgbmV3IGFuYWx5c2lzIHRhc2sgZm9yIHRoZSB2ZXJ5IGxhc3QgY2hhbmdl
IHdlIGRldGVjdGVkLiBXZSdsbAorICAgICAgICBldmVudHVhbGx5IGNyZWF0ZSBhbiBhbmFseXNp
cyB0YXNrIGZvciBhbGwgZGV0ZWN0ZWQgY2hhbmdlcyBzaW5jZSB3ZSdyZSByZXBlYXRpbmcgdGhl
IGFuYWx5c2lzIGluCisgICAgICAgIGZldGNoTWFuaWZlc3RBbmRBbmFseXplRGF0YSBhZnRlciBz
b21lIHRpbWUuCisgICAgICAgIChjb21wdXRlUmFuZ2VzRm9yVGVzdGluZyk6IEZldGNoIG1lYXN1
cmVkIHZhbHVlcyBhbmQgY29tcHV0ZSByYW5nZXMgdG8gdGVzdCB1c2luZyB0aGUgc3BlY2lmaWVk
CisgICAgICAgIHNlZ21lbnRhdGlvbiBhbmQgdGVzdCByYW5nZSBzZWxlY3Rpb24gc3RyYXRlZ2ll
cy4gT25jZSByYW5nZXMgYXJlIGZvdW5kLCBmaW5kIG92ZXJsYXBwaW5nIGFuYWx5c2lzCisgICAg
ICAgIHRhc2tzIGFzIHRoZXkgbmVlZCB0byBiZSBmaWx0ZXJlZCBvdXQgaW4gYW5hbHl6ZUNvbmZp
Z3VyYXRpb24gdG8gYXZvaWQgY3JlYXRpbmcgbXVsdGlwbGUgYW5hbHlzaXMKKyAgICAgICAgdGFz
a3MgZm9yIHRoZSBzYW1lIHJhbmdlIChlLmcuIGh1bWFucyBtYXkgY3JlYXRlIG9uZSBiZWZvcmUg
dGhlIHNjcmlwdCBnZXRzIHRvIGRvIGl0KS4KKyAgICAgICAgKGNyZWF0ZUFuYWx5c2lzVGFza0Fu
ZE5vdGlmeSk6IENyZWF0ZSBhIG5ldyBhbmFseXNpcyB0YXNrIGZvciB0aGUgc3BlY2lmaWVkIHJh
bmdlLCB0cmlnZ2VyIGFuIEEvQgorICAgICAgICB0ZXN0aW5nIGlmIGF2YWlsYWJsZSwgYW5kIG5v
dGlmeSBhbm90aGVyIHNlcnZlciB3aXRoIGEgSFRNTCBtZXNzYWdlIGFzIHNwZWNpZmllZC4KKyAg
ICAgICAgKGZpbmRTdHJhdGVneUJ5TGFiZWwpOgorICAgICAgICAoY2hhbmdlVHlwZUZvclJhbmdl
KTogQSBjaGFuZ2UgaXMgYSByZWdyZXNzaW9uIGlmIHZhbHVlcyBhcmUgZ2V0dGluZyBsYXJnZXIg
aW4gYSBzbWFsbGVyLWlzLWJldHRlcgorICAgICAgICB0ZXN0IG9yIHZhbHVlcyBhcmUgZ2V0dGlu
ZyBzbWFsbGVyIGluIGEgbGFyZ2VyLWlzLWJldHRlciB0ZXN0IGFuZCB2aWNlIHZlcnNhLgorICAg
ICAgICAoc3VtbWFyaXplUmFuZ2UpOiBDcmVhdGUgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdGhh
dCBzdW1tYXJpemVzIHRoZSBjaGFuZ2UgZGV0ZWN0ZWQuIGUuZy4KKyAgICAgICAgIlBvdGVudGlh
bCAzLjIlIHJlZ3Jlc3Npb24gZGV0ZWN0ZWQgYmV0d2VlbiAyMDE1LTA0LTIwIDEyOjAwIGFuZCAx
NzowMCIuCisgICAgICAgIChmb3JtYXRUaW1lUmFuZ2UpOgorICAgICAgICAoZ2V0SlNPTik6Cisg
ICAgICAgIChwb3N0SlNPTik6CisgICAgICAgIChwb3N0Tm90aWZpY2F0aW9uKTogUmVjdXJzaXZl
bHkgcmVwbGFjZXMgJHRpdGxlIGFuZCAkbWFzc2FnZSBpbiB0aGUgc3BlY2lmaWVkIEpTT04gdGVt
cGxhdGUuCisgICAgICAgIChpbnN0YW50aWF0ZU5vdGlmaWNhdGlvblRlbXBsYXRlKToKKyAgICAg
ICAgKGZldGNoSlNPTik6CisKIDIwMTUtMDQtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUGVyZiBkYXNoYm9hcmQgc2hvdWxkIGhhdmUgVUkgdG8gc2V0IHN0
YXR1cyBvbiBhbmFseXNpcyB0YXNrcwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2lu
aXQtZGF0YWJhc2Uuc3FsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9p
bml0LWRhdGFiYXNlLnNxbAkocmV2aXNpb24gMTgzMjMwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTEgKzE3NCwx
NyBAQCBDUkVBVEUgVEFCTEUgcmVwb3J0cyAoCiAgICAgcmVwb3J0X2ZhaWx1cmUgdmFyY2hhcig2
NCksCiAgICAgcmVwb3J0X2ZhaWx1cmVfZGV0YWlscyB0ZXh0KTsKIAorQ1JFQVRFIFRBQkxFIGFu
YWx5c2lzX3N0cmF0ZWdpZXMgKAorICAgIHN0cmF0ZWd5X2lkIHNlcmlhbCBQUklNQVJZIEtFWSwK
KyAgICBzdHJhdGVneV9uYW1lIHZhcmNoYXIoNjQpIE5PVCBOVUxMKTsKKwogQ1JFQVRFIFRZUEUg
YW5hbHlzaXNfdGFza19yZXN1bHRfdHlwZSBhcyBFTlVNICgncHJvZ3Jlc3Npb24nLCAncmVncmVz
c2lvbicsICd1bmNoYW5nZWQnLCAnaW5jb25jbHVzaXZlJyk7CiBDUkVBVEUgVEFCTEUgYW5hbHlz
aXNfdGFza3MgKAogICAgIHRhc2tfaWQgc2VyaWFsIFBSSU1BUlkgS0VZLAogICAgIHRhc2tfbmFt
ZSB2YXJjaGFyKDI1NikgTk9UIE5VTEwsCiAgICAgdGFza19hdXRob3IgdmFyY2hhcigyNTYpLAor
ICAgIHRhc2tfc2VnbWVudGF0aW9uIGludGVnZXIgUkVGRVJFTkNFUyBhbmFseXNpc19zdHJhdGVn
aWVzLAorICAgIHRhc2tfdGVzdF9yYW5nZSBpbnRlZ2VyIFJFRkVSRU5DRVMgYW5hbHlzaXNfc3Ry
YXRlZ2llcywKICAgICB0YXNrX2NyZWF0ZWRfYXQgdGltZXN0YW1wIE5PVCBOVUxMIERFRkFVTFQg
KENVUlJFTlRfVElNRVNUQU1QIEFUIFRJTUUgWk9ORSAnVVRDJyksCiAgICAgdGFza19wbGF0Zm9y
bSBpbnRlZ2VyIFJFRkVSRU5DRVMgcGxhdGZvcm1zIE5PVCBOVUxMLAogICAgIHRhc2tfbWV0cmlj
IGludGVnZXIgUkVGRVJFTkNFUyB0ZXN0X21ldHJpY3MgTk9UIE5VTEwsCkluZGV4OiBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9hbmFseXNpcy10YXNrcy5waHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvYW5hbHlzaXMtdGFza3Mu
cGhwCShyZXZpc2lvbiAxODMyMzApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L2FwaS9hbmFseXNpcy10YXNrcy5waHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAg
ZnVuY3Rpb24gZm9ybWF0X3Rhc2soJHRhc2tfcm93KSB7CiAgICAgICAgICdpZCcgPT4gJHRhc2tf
cm93Wyd0YXNrX2lkJ10sCiAgICAgICAgICduYW1lJyA9PiAkdGFza19yb3dbJ3Rhc2tfbmFtZSdd
LAogICAgICAgICAnYXV0aG9yJyA9PiAkdGFza19yb3dbJ3Rhc2tfYXV0aG9yJ10sCisgICAgICAg
ICdzZWdtZW50YXRpb25TdHJhdGVneScgPT4gJHRhc2tfcm93Wyd0YXNrX3NlZ21lbnRhdGlvbidd
LAorICAgICAgICAndGVzdFJhbmdlU3RyYWdlZ3knID0+ICR0YXNrX3Jvd1sndGFza190ZXN0X3Jh
bmdlJ10sCiAgICAgICAgICdjcmVhdGVkQXQnID0+IHN0cnRvdGltZSgkdGFza19yb3dbJ3Rhc2tf
Y3JlYXRlZF9hdCddKSAqIDEwMDAsCiAgICAgICAgICdwbGF0Zm9ybScgPT4gJHRhc2tfcm93Wyd0
YXNrX3BsYXRmb3JtJ10sCiAgICAgICAgICdtZXRyaWMnID0+ICR0YXNrX3Jvd1sndGFza19tZXRy
aWMnXSwKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29u
LWhlYWRlci5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9pbmNsdWRlL2pzb24taGVhZGVyLnBocAkocmV2aXNpb24gMTgzMjMwKQorKysgV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocAkod29ya2luZyBj
b3B5KQpAQCAtOTYsOCArOTYsMjEgQEAgZnVuY3Rpb24gZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2Rh
dGFfYW5kXwogICAgIHJldHVybiAkZGF0YTsKIH0KIAotZnVuY3Rpb24gcmVtb3RlX3VzZXJfbmFt
ZSgpIHsKLSAgICByZXR1cm4gYXJyYXlfZ2V0KCRfU0VSVkVSLCAnUkVNT1RFX1VTRVInKTsKK2Z1
bmN0aW9uIHJlbW90ZV91c2VyX25hbWUoJGRhdGEpIHsKKyAgICByZXR1cm4gc2hvdWxkX2F1dGhl
bnRpY2F0ZV9hc19zbGF2ZSgkZGF0YSkgPyBOVUxMIDogYXJyYXlfZ2V0KCRfU0VSVkVSLCAnUkVN
T1RFX1VTRVInKTsKK30KKworZnVuY3Rpb24gc2hvdWxkX2F1dGhlbnRpY2F0ZV9hc19zbGF2ZSgk
ZGF0YSkgeworICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCdzbGF2ZU5hbWUnLCAkZGF0YSkg
JiYgYXJyYXlfa2V5X2V4aXN0cygnc2xhdmVQYXNzd29yZCcsICRkYXRhKTsKK30KKworZnVuY3Rp
b24gZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2RhdGFfYW5kX3Rva2VuX29yX3NsYXZlKCRkYikgewor
ICAgICRkYXRhID0gZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2RhdGEoKTsKKyAgICBpZiAoc2hvdWxk
X2F1dGhlbnRpY2F0ZV9hc19zbGF2ZSgkZGF0YSkpCisgICAgICAgIHZlcmlmeV9zbGF2ZSgkZGIs
ICRkYXRhKTsKKyAgICBlbHNlIGlmICghdmVyaWZ5X3Rva2VuKGFycmF5X2dldCgkZGF0YSwgJ3Rv
a2VuJykpKQorICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWRUb2tlbicpOworICAgIHJl
dHVybiAkZGF0YTsKIH0KIAogZnVuY3Rpb24gY29tcHV0ZV90b2tlbigpIHsKSW5kZXg6IFdlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvcHJpdmlsZWdlZC1hcGkvY3JlYXRlLWFuYWx5c2lz
LXRhc2sucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
cHJpdmlsZWdlZC1hcGkvY3JlYXRlLWFuYWx5c2lzLXRhc2sucGhwCShyZXZpc2lvbiAxODMyMzAp
CisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3ByaXZpbGVnZWQtYXBpL2NyZWF0
ZS1hbmFseXNpcy10YXNrLnBocAkod29ya2luZyBjb3B5KQpAQCAtMywyNiArMyw0OCBAQAogcmVx
dWlyZV9vbmNlKCcuLi9pbmNsdWRlL2pzb24taGVhZGVyLnBocCcpOwogCiBmdW5jdGlvbiBtYWlu
KCkgewotICAgICRkYXRhID0gZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2RhdGFfYW5kX3Rva2VuKCk7
CisgICAgJGRiID0gY29ubmVjdCgpOworICAgICRkYXRhID0gZW5zdXJlX3ByaXZpbGVnZWRfYXBp
X2RhdGFfYW5kX3Rva2VuX29yX3NsYXZlKCRkYik7CiAKLSAgICAkYXV0aG9yID0gcmVtb3RlX3Vz
ZXJfbmFtZSgpOworICAgICRhdXRob3IgPSByZW1vdGVfdXNlcl9uYW1lKCRkYXRhKTsKICAgICAk
bmFtZSA9IGFycmF5X2dldCgkZGF0YSwgJ25hbWUnKTsKICAgICAkc3RhcnRfcnVuX2lkID0gYXJy
YXlfZ2V0KCRkYXRhLCAnc3RhcnRSdW4nKTsKICAgICAkZW5kX3J1bl9pZCA9IGFycmF5X2dldCgk
ZGF0YSwgJ2VuZFJ1bicpOwogCisgICAgJHNlZ21lbnRhdGlvbl9uYW1lID0gYXJyYXlfZ2V0KCRk
YXRhLCAnc2VnbWVudGF0aW9uU3RyYXRlZ3knKTsKKyAgICAkdGVzdF9yYW5nZV9uYW1lID0gYXJy
YXlfZ2V0KCRkYXRhLCAndGVzdFJhbmdlU3RyYXRlZ3knKTsKKwogICAgIGlmICghJG5hbWUpCiAg
ICAgICAgIGV4aXRfd2l0aF9lcnJvcignTWlzc2luZ05hbWUnLCBhcnJheSgnbmFtZScgPT4gJG5h
bWUpKTsKICAgICAkcmFuZ2UgPSBhcnJheSgnc3RhcnRSdW5JZCcgPT4gJHN0YXJ0X3J1bl9pZCwg
J2VuZFJ1bklkJyA9PiAkZW5kX3J1bl9pZCk7CiAgICAgaWYgKCEkc3RhcnRfcnVuX2lkIHx8ICEk
ZW5kX3J1bl9pZCkKICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNzaW5nUmFuZ2UnLCAkcmFu
Z2UpOwogCi0gICAgJGRiID0gY29ubmVjdCgpOwogICAgICRzdGFydF9ydW4gPSBlbnN1cmVfcm93
X2J5X2lkKCRkYiwgJ3Rlc3RfcnVucycsICdydW4nLCAkc3RhcnRfcnVuX2lkLCAnSW52YWxpZFN0
YXJ0UnVuJywgJHJhbmdlKTsKICAgICAkZW5kX3J1biA9IGVuc3VyZV9yb3dfYnlfaWQoJGRiLCAn
dGVzdF9ydW5zJywgJ3J1bicsICRlbmRfcnVuX2lkLCAnSW52YWxpZEVuZFJ1bicsICRyYW5nZSk7
CiAKICAgICAkY29uZmlnID0gZW5zdXJlX2NvbmZpZ19mcm9tX3J1bnMoJGRiLCAkc3RhcnRfcnVu
LCAkZW5kX3J1bik7CiAKICAgICAkZGItPmJlZ2luX3RyYW5zYWN0aW9uKCk7CisKKyAgICAkc2Vn
bWVudGF0aW9uX2lkID0gTlVMTDsKKyAgICBpZiAoJHNlZ21lbnRhdGlvbl9uYW1lKSB7CisgICAg
ICAgICRzZWdtZW50YXRpb25faWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdhbmFseXNp
c19zdHJhdGVnaWVzJywgJ3N0cmF0ZWd5JywgYXJyYXkoJ25hbWUnID0+ICRzZWdtZW50YXRpb25f
bmFtZSkpOworICAgICAgICBpZiAoISRzZWdtZW50YXRpb25faWQpIHsKKyAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcign
Q2Fubm90RmluZE9ySW5zZXJ0U2VnbWVudGF0aW9uU3RyYXRlZ3knLCBhcnJheSgnc2VnbWVudGF0
aW9uU3RyYXRlZ3knID0+ICRzZWdtZW50YXRpb25fbmFtZSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgJHRlc3RfcmFuZ2VfaWQgPSBOVUxMOworICAgIGlmICgkdGVzdF9yYW5nZV9uYW1lKSB7
CisgICAgICAgICR0ZXN0X3JhbmdlX2lkID0gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygnYW5h
bHlzaXNfc3RyYXRlZ2llcycsICdzdHJhdGVneScsIGFycmF5KCduYW1lJyA9PiAkdGVzdF9yYW5n
ZV9uYW1lKSk7CisgICAgICAgIGlmICghJHRlc3RfcmFuZ2VfaWQpIHsKKyAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcign
Q2Fubm90RmluZE9ySW5zZXJ0VGVzdFJhbmdlU3RyYXRlZ3knLCBhcnJheSgndGVzdFJhbmdlU3Ry
YXRlZ3knID0+ICR0ZXN0X3JhbmdlX25hbWUpKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgICRk
dXBsaWNhdGUgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ2FuYWx5c2lzX3Rhc2tzJywgJ3Rhc2sn
LCBhcnJheSgnc3RhcnRfcnVuJyA9PiAkc3RhcnRfcnVuX2lkLCAnZW5kX3J1bicgPT4gJGVuZF9y
dW5faWQpKTsKICAgICBpZiAoJGR1cGxpY2F0ZSkgewogICAgICAgICAkZGItPnJvbGxiYWNrX3Ry
YW5zYWN0aW9uKCk7CkBAIC0zNSw3ICs1Nyw5IEBAIGZ1bmN0aW9uIG1haW4oKSB7CiAgICAgICAg
ICdwbGF0Zm9ybScgPT4gJGNvbmZpZ1snY29uZmlnX3BsYXRmb3JtJ10sCiAgICAgICAgICdtZXRy
aWMnID0+ICRjb25maWdbJ2NvbmZpZ19tZXRyaWMnXSwKICAgICAgICAgJ3N0YXJ0X3J1bicgPT4g
JHN0YXJ0X3J1bl9pZCwKLSAgICAgICAgJ2VuZF9ydW4nID0+ICRlbmRfcnVuX2lkKSk7CisgICAg
ICAgICdlbmRfcnVuJyA9PiAkZW5kX3J1bl9pZCwKKyAgICAgICAgJ3NlZ21lbnRhdGlvbicgPT4g
JHNlZ21lbnRhdGlvbl9pZCwKKyAgICAgICAgJ3Rlc3RfcmFuZ2UnID0+ICR0ZXN0X3JhbmdlX2lk
KSk7CiAgICAgJGRiLT5jb21taXRfdHJhbnNhY3Rpb24oKTsKIAogICAgIGV4aXRfd2l0aF9zdWNj
ZXNzKGFycmF5KCd0YXNrSWQnID0+ICR0YXNrX2lkKSk7CkluZGV4OiBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3ByaXZpbGVnZWQtYXBpL2NyZWF0ZS10ZXN0LWdyb3VwLnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3ByaXZpbGVnZWQtYXBp
L2NyZWF0ZS10ZXN0LWdyb3VwLnBocAkocmV2aXNpb24gMTgzMjMwKQorKysgV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9wcml2aWxlZ2VkLWFwaS9jcmVhdGUtdGVzdC1ncm91cC5waHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMsOSArMyw5IEBACiByZXF1aXJlX29uY2UoJy4uL2luY2x1ZGUv
anNvbi1oZWFkZXIucGhwJyk7CiAKIGZ1bmN0aW9uIG1haW4oKSB7Ci0gICAgJGRhdGEgPSBlbnN1
cmVfcHJpdmlsZWdlZF9hcGlfZGF0YV9hbmRfdG9rZW4oKTsKLQotICAgICRhdXRob3IgPSByZW1v
dGVfdXNlcl9uYW1lKCk7CisgICAgJGRiID0gY29ubmVjdCgpOworICAgICRkYXRhID0gZW5zdXJl
X3ByaXZpbGVnZWRfYXBpX2RhdGFfYW5kX3Rva2VuX29yX3NsYXZlKCRkYik7CisgICAgJGF1dGhv
ciA9IHJlbW90ZV91c2VyX25hbWUoJGRhdGEpOwogCiAgICAgJHRhc2tfaWQgPSBhcnJheV9nZXQo
JGRhdGEsICd0YXNrJyk7CiAgICAgJG5hbWUgPSBhcnJheV9nZXQoJGRhdGEsICduYW1lJyk7CkBA
IC0xOSw3ICsxOSw2IEBAIGZ1bmN0aW9uIG1haW4oKSB7CiAgICAgaWYgKCRyZXBldGl0aW9uX2Nv
dW50IDwgMSkKICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkUmVwZXRpdGlvbkNvdW50
JywgYXJyYXkoJ3JlcGV0aXRpb25Db3VudCcgPT4gJHJlcGV0aXRpb25fY291bnQpKTsKIAotICAg
ICRkYiA9IGNvbm5lY3QoKTsKICAgICAkdGFzayA9ICRkYi0+c2VsZWN0X2ZpcnN0X3JvdygnYW5h
bHlzaXNfdGFza3MnLCAndGFzaycsIGFycmF5KCdpZCcgPT4gJHRhc2tfaWQpKTsKICAgICBpZiAo
ISR0YXNrKQogICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWRUYXNrJywgYXJyYXkoJ3Rh
c2snID0+ICR0YXNrX2lkKSk7CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3ByaXZpbGVnZWQtYXBpL2dlbmVyYXRlLWNzcmYtdG9rZW4ucGhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvcHJpdmlsZWdlZC1hcGkvZ2VuZXJhdGUtY3Ny
Zi10b2tlbi5waHAJKHJldmlzaW9uIDE4MzIzMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvcHJpdmlsZWdlZC1hcGkvZ2VuZXJhdGUtY3NyZi10b2tlbi5waHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAKIHJlcXVpcmVfb25jZSgnLi4vaW5jbHVkZS9qc29uLWhl
YWRlci5waHAnKTsKIAotZW5zdXJlX3ByaXZpbGVnZWRfYXBpX2RhdGEoKTsKKyRkYXRhID0gZW5z
dXJlX3ByaXZpbGVnZWRfYXBpX2RhdGEoKTsKIAogJGV4cGlyaXRhaW9uID0gdGltZSgpICsgMzYw
MDsgLy8gVmFsaWQgZm9yIG9uZSBob3VyLgogJF9DT09LSUVbJ0NTUkZTYWx0J10gPSByYW5kKCk7
CkBAIC0xMSw2ICsxMSw2IEBAICRfQ09PS0lFWydDU1JGRXhwaXJhdGlvbiddID0gJGV4cGlyaXRh
aW8KIHNldGNvb2tpZSgnQ1NSRlNhbHQnLCAkX0NPT0tJRVsnQ1NSRlNhbHQnXSk7CiBzZXRjb29r
aWUoJ0NTUkZFeHBpcmF0aW9uJywgJGV4cGlyaXRhaW9uKTsKIAotZXhpdF93aXRoX3N1Y2Nlc3Mo
YXJyYXkoJ3VzZXInID0+IHJlbW90ZV91c2VyX25hbWUoKSwgJ3Rva2VuJyA9PiBjb21wdXRlX3Rv
a2VuKCksICdleHBpcmF0aW9uJyA9PiAkZXhwaXJpdGFpb24gKiAxMDAwKSk7CitleGl0X3dpdGhf
c3VjY2VzcyhhcnJheSgndXNlcicgPT4gcmVtb3RlX3VzZXJfbmFtZSgkZGF0YSksICd0b2tlbicg
PT4gY29tcHV0ZV90b2tlbigpLCAnZXhwaXJhdGlvbicgPT4gJGV4cGlyaXRhaW9uICogMTAwMCkp
OwogCiA/PgpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9hcHAuanMJ
KHJldmlzaW9uIDE4MzIzMCkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIv
YXBwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMTkgKzU4MywyMSBAQCBBcHAuUGFuZSA9IEVt
YmVyLk9iamVjdC5leHRlbmQoewogICAgIF9jb21wdXRlTW92aW5nQXZlcmFnZUFuZE91dGxpZXJz
OiBmdW5jdGlvbiAoY2hhcnREYXRhLCBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3ksIGVudmVsb3BpbmdT
dHJhdGVneSwgdGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIGFub21hbHlEZXRlY3Rpb25TdHJh
dGVnaWVzKQogICAgIHsKICAgICAgICAgdmFyIGN1cnJlbnRUaW1lU2VyaWVzRGF0YSA9IGNoYXJ0
RGF0YS5jdXJyZW50LnNlcmllcygpOworCisgICAgICAgIHZhciByYXdWYWx1ZXMgPSBjaGFydERh
dGEuY3VycmVudC5yYXdWYWx1ZXMoKTsKICAgICAgICAgdmFyIG1vdmluZ0F2ZXJhZ2VJc1NldEJ5
VXNlciA9IG1vdmluZ0F2ZXJhZ2VTdHJhdGVneSAmJiBtb3ZpbmdBdmVyYWdlU3RyYXRlZ3kuZXhl
Y3V0ZTsKLSAgICAgICAgdmFyIG1vdmluZ0F2ZXJhZ2VWYWx1ZXMgPSB0aGlzLl9leGVjdXRlU3Ry
YXRlZ3koCi0gICAgICAgICAgICBtb3ZpbmdBdmVyYWdlSXNTZXRCeVVzZXIgPyBtb3ZpbmdBdmVy
YWdlU3RyYXRlZ3kgOiBTdGF0aXN0aWNzLk1vdmluZ0F2ZXJhZ2VTdHJhdGVnaWVzWzBdLCBjdXJy
ZW50VGltZVNlcmllc0RhdGEpOworICAgICAgICB2YXIgbW92aW5nQXZlcmFnZVZhbHVlcyA9IFN0
YXRpc3RpY3MuZXhlY3V0ZVN0cmF0ZWd5KAorICAgICAgICAgICAgbW92aW5nQXZlcmFnZUlzU2V0
QnlVc2VyID8gbW92aW5nQXZlcmFnZVN0cmF0ZWd5IDogU3RhdGlzdGljcy5Nb3ZpbmdBdmVyYWdl
U3RyYXRlZ2llc1swXSwgcmF3VmFsdWVzKTsKICAgICAgICAgaWYgKCFtb3ZpbmdBdmVyYWdlVmFs
dWVzKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgdmFyIHRlc3RSYW5nZUNh
bmRpZGF0ZXMgPSBbXTsKICAgICAgICAgaWYgKG1vdmluZ0F2ZXJhZ2VTdHJhdGVneSAmJiBtb3Zp
bmdBdmVyYWdlU3RyYXRlZ3kuaXNTZWdtZW50YXRpb24gJiYgdGVzdFJhbmdlU2VsZWN0aW9uU3Ry
YXRlZ3kgJiYgdGVzdFJhbmdlU2VsZWN0aW9uU3RyYXRlZ3kuZXhlY3V0ZSkKLSAgICAgICAgICAg
IHRlc3RSYW5nZUNhbmRpZGF0ZXMgPSB0aGlzLl9leGVjdXRlU3RyYXRlZ3kodGVzdFJhbmdlU2Vs
ZWN0aW9uU3RyYXRlZ3ksIGN1cnJlbnRUaW1lU2VyaWVzRGF0YSwgW21vdmluZ0F2ZXJhZ2VWYWx1
ZXNdKTsKKyAgICAgICAgICAgIHRlc3RSYW5nZUNhbmRpZGF0ZXMgPSBTdGF0aXN0aWNzLmV4ZWN1
dGVTdHJhdGVneSh0ZXN0UmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgcmF3VmFsdWVzLCBbbW92aW5n
QXZlcmFnZVZhbHVlc10pOwogCiAgICAgICAgIHZhciBlbnZlbG9wZUlzU2V0QnlVc2VyID0gZW52
ZWxvcGluZ1N0cmF0ZWd5ICYmIGVudmVsb3BpbmdTdHJhdGVneS5leGVjdXRlOwotICAgICAgICB2
YXIgZW52ZWxvcGVEZWx0YSA9IHRoaXMuX2V4ZWN1dGVTdHJhdGVneShlbnZlbG9wZUlzU2V0QnlV
c2VyID8gZW52ZWxvcGluZ1N0cmF0ZWd5IDogU3RhdGlzdGljcy5FbnZlbG9waW5nU3RyYXRlZ2ll
c1swXSwKLSAgICAgICAgICAgIGN1cnJlbnRUaW1lU2VyaWVzRGF0YSwgW21vdmluZ0F2ZXJhZ2VW
YWx1ZXNdKTsKKyAgICAgICAgdmFyIGVudmVsb3BlRGVsdGEgPSBTdGF0aXN0aWNzLmV4ZWN1dGVT
dHJhdGVneShlbnZlbG9wZUlzU2V0QnlVc2VyID8gZW52ZWxvcGluZ1N0cmF0ZWd5IDogU3RhdGlz
dGljcy5FbnZlbG9waW5nU3RyYXRlZ2llc1swXSwKKyAgICAgICAgICAgIHJhd1ZhbHVlcywgW21v
dmluZ0F2ZXJhZ2VWYWx1ZXNdKTsKIAogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJl
bnRUaW1lU2VyaWVzRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdmFyIGN1cnJlbnRW
YWx1ZSA9IGN1cnJlbnRUaW1lU2VyaWVzRGF0YVtpXS52YWx1ZTsKQEAgLTYxMCw3ICs2MTIsNyBA
QCBBcHAuUGFuZSA9IEVtYmVyLk9iamVjdC5leHRlbmQoewogICAgICAgICBpZiAoYW5vbWFseURl
dGVjdGlvblN0cmF0ZWdpZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICB2YXIgaXNBbm9tYWx5QXJy
YXkgPSBuZXcgQXJyYXkoY3VycmVudFRpbWVTZXJpZXNEYXRhLmxlbmd0aCk7CiAgICAgICAgICAg
ICBmb3IgKHZhciBzdHJhdGVneSBvZiBhbm9tYWx5RGV0ZWN0aW9uU3RyYXRlZ2llcykgewotICAg
ICAgICAgICAgICAgIHZhciBhbm9tYWx5TGVuZ3RocyA9IHRoaXMuX2V4ZWN1dGVTdHJhdGVneShz
dHJhdGVneSwgY3VycmVudFRpbWVTZXJpZXNEYXRhLCBbbW92aW5nQXZlcmFnZVZhbHVlcywgZW52
ZWxvcGVEZWx0YV0pOworICAgICAgICAgICAgICAgIHZhciBhbm9tYWx5TGVuZ3RocyA9IFN0YXRp
c3RpY3MuZXhlY3V0ZVN0cmF0ZWd5KHN0cmF0ZWd5LCByYXdWYWx1ZXMsIFttb3ZpbmdBdmVyYWdl
VmFsdWVzLCBlbnZlbG9wZURlbHRhXSk7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjdXJyZW50VGltZVNlcmllc0RhdGEubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAg
ICAgIGlzQW5vbWFseUFycmF5W2ldID0gaXNBbm9tYWx5QXJyYXlbaV0gfHwgYW5vbWFseUxlbmd0
aHNbaV07CiAgICAgICAgICAgICB9CkBAIC02NDIsMTUgKzY0NCw2IEBAIEFwcC5QYW5lID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7CiAgICAgICAgICAgICB0ZXN0UmFuZ2VDYW5kaWRhdGVzOiB0ZXN0
UmFuZ2VDYW5kaWRhdGVzLAogICAgICAgICB9OwogICAgIH0sCi0gICAgX2V4ZWN1dGVTdHJhdGVn
eTogZnVuY3Rpb24gKHN0cmF0ZWd5LCBjdXJyZW50VGltZVNlcmllc0RhdGEsIGFkZGl0aW9uYWxB
cmd1bWVudHMpCi0gICAgewotICAgICAgICB2YXIgcGFyYW1ldGVycyA9IChzdHJhdGVneS5wYXJh
bWV0ZXJMaXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7Ci0gICAgICAgICAgICB2YXIg
cGFyc2VkID0gcGFyc2VGbG9hdChwYXJhbS52YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gTWF0
aC5taW4ocGFyYW0ubWF4IHx8IEluZmluaXR5LCBNYXRoLm1heChwYXJhbS5taW4gfHwgLUluZmlu
aXR5LCBpc05hTihwYXJzZWQpID8gMCA6IHBhcnNlZCkpOwotICAgICAgICB9KTsKLSAgICAgICAg
cGFyYW1ldGVycy5wdXNoKGN1cnJlbnRUaW1lU2VyaWVzRGF0YS5tYXAoZnVuY3Rpb24gKHBvaW50
KSB7IHJldHVybiBwb2ludC52YWx1ZSB9KSk7Ci0gICAgICAgIHJldHVybiBzdHJhdGVneS5leGVj
dXRlLmFwcGx5KHdpbmRvdywgcGFyYW1ldGVycy5jb25jYXQoYWRkaXRpb25hbEFyZ3VtZW50cykp
OwotICAgIH0sCiAgICAgX3VwZGF0ZVN0cmF0ZWd5Q29uZmlnSWZOZWVkZWQ6IGZ1bmN0aW9uIChz
dHJhdGVneSwgY29uZmlnTmFtZSkKICAgICB7CiAgICAgICAgIHZhciBjb25maWcgPSBudWxsOwpJ
bmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9kYXRhLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvZGF0YS5qcwkocmV2aXNp
b24gMTgzMjMwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9kYXRhLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsMTUgQEAKIC8vIFdlIGRvbid0IHVzZSBEUy5Nb2Rl
bCBmb3IgdGhlc2Ugb2JqZWN0IHR5cGVzIGJlY2F1c2Ugd2UgY2FuJ3QgYWZmb3JkIHRvIHByb2Nl
c3MgbWlsbGlvbnMgb2YgdGhlbS4KIAoraWYgKCFBcnJheS5wcm90b3R5cGUuZmluZCkgeworICAg
IEFycmF5LnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgICAgICAgIGZv
ciAodmFyIGl0ZW0gb2YgdGhpcykgeworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgfQorfQorCiB2YXIgUHJpdmlsZWdlZEFQSSA9IHsKICAgICBfdG9rZW46
IG51bGwsCiAgICAgX2V4cGlyYXRpb246IG51bGwsCkBAIC0zMzMsNiArMzQzLDcgQEAgUnVuc0Rh
dGEucHJvdG90eXBlLl90aW1lU2VyaWVzQnlUaW1lSW50ZQogICAgICAgICBzZXJpZXMucHVzaCh7
CiAgICAgICAgICAgICBtZWFzdXJlbWVudDogbWVhc3VyZW1lbnQsCiAgICAgICAgICAgICB0aW1l
OiB1c2VDb21taXRUeXBlID8gbWVhc3VyZW1lbnQubGF0ZXN0Q29tbWl0VGltZSgpIDogbWVhc3Vy
ZW1lbnQuYnVpbGRUaW1lKCksCisgICAgICAgICAgICBzZWNvbmRhcnlUaW1lOiBtZWFzdXJlbWVu
dC5idWlsZFRpbWUoKSwKICAgICAgICAgICAgIHZhbHVlOiBtZWFzdXJlbWVudC5tZWFuKCksCiAg
ICAgICAgICAgICBpbnRlcnZhbDogbWVhc3VyZW1lbnQuY29uZmlkZW5jZUludGVydmFsKCksCiAg
ICAgICAgICAgICBtYXJrZWRPdXRsaWVyOiBtZWFzdXJlbWVudC5tYXJrZWRPdXRsaWVyKCksCkBA
IC0zNDUsMjggKzM1NiwxNCBAQCBSdW5zRGF0YS5wcm90b3R5cGUuX3RpbWVTZXJpZXNCeVRpbWVJ
bnRlCiAvLyB3ZSBkb24ndCBoYXZlIHRvIGZldGNoIHRoZSBlbnRpcmUgdGltZSBzZXJpZXMgdG8g
anVzdCBzaG93IHRoZSBsYXN0IDMgZGF5cy4KIFJ1bnNEYXRhLmZldGNoUnVucyA9IGZ1bmN0aW9u
IChwbGF0Zm9ybUlkLCBtZXRyaWNJZCwgdGVzdEdyb3VwSWQsIHVzZUNhY2hlKQogewotICAgIHZh
ciB1cmwgPSB1c2VDYWNoZSA/ICcuLi9kYXRhLycgOiAnLi4vYXBpL3J1bnMvJzsKLQotICAgIHVy
bCArPSBwbGF0Zm9ybUlkICsgJy0nICsgbWV0cmljSWQgKyAnLmpzb24nOwotICAgIGlmICh0ZXN0
R3JvdXBJZCkKLSAgICAgICAgdXJsICs9ICc/dGVzdEdyb3VwPScgKyB0ZXN0R3JvdXBJZDsKLQor
ICAgIHZhciB1cmwgPSB0aGlzLnBhdGhGb3JGZXRjaGluZ1J1bnMocGxhdGZvcm1JZCwgbWV0cmlj
SWQsIHRlc3RHcm91cElkLCB1c2VDYWNoZSk7CiAgICAgcmV0dXJuIG5ldyBFbWJlci5SU1ZQLlBy
b21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAkLmdldEpTT04odXJs
LCBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMg
IT0gJ09LJykgewogICAgICAgICAgICAgICAgIHJlamVjdChyZXNwb25zZS5zdGF0dXMpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGV0ZSBy
ZXNwb25zZS5zdGF0dXM7Ci0KLSAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuY29uZmln
dXJhdGlvbnM7Ci0gICAgICAgICAgICBmb3IgKHZhciBjb25maWcgaW4gZGF0YSkKLSAgICAgICAg
ICAgICAgICBkYXRhW2NvbmZpZ10gPSBuZXcgUnVuc0RhdGEoZGF0YVtjb25maWddKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxhc3RNb2RpZmllZCkKLSAgICAgICAg
ICAgICAgICByZXNwb25zZS5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShyZXNwb25zZS5sYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIHJl
c29sdmUoUnVuc0RhdGEuY3JlYXRlUnVuc0RhdGFJblJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICAg
ICAgIH0pLmZhaWwoZnVuY3Rpb24gKHhociwgc3RhdHVzLCBlcnJvcikgewogICAgICAgICAgICAg
aWYgKHhoci5zdGF0dXMgPT0gNDA0ICYmIHVzZUNhY2hlKQogICAgICAgICAgICAgICAgIHJlc29s
dmUobnVsbCk7CkBAIC0zNzYsOSArMzczLDU4IEBAIFJ1bnNEYXRhLmZldGNoUnVucyA9IGZ1bmN0
aW9uIChwbGF0Zm9ybUkKICAgICB9KTsKIH0KIAorUnVuc0RhdGEucGF0aEZvckZldGNoaW5nUnVu
cyA9IGZ1bmN0aW9uIChwbGF0Zm9ybUlkLCBtZXRyaWNJZCwgdGVzdEdyb3VwSWQsIHVzZUNhY2hl
KQoreworICAgIHZhciBwYXRoID0gdXNlQ2FjaGUgPyAnL2RhdGEvJyA6ICcvYXBpL3J1bnMvJzsK
KworICAgIHBhdGggKz0gcGxhdGZvcm1JZCArICctJyArIG1ldHJpY0lkICsgJy5qc29uJzsKKyAg
ICBpZiAodGVzdEdyb3VwSWQpCisgICAgICAgIHBhdGggKz0gJz90ZXN0R3JvdXA9JyArIHRlc3RH
cm91cElkOworCisgICAgcmV0dXJuIHBhdGg7Cit9CisKK1J1bnNEYXRhLmNyZWF0ZVJ1bnNEYXRh
SW5SZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkKK3sKKyAgICBkZWxldGUgcmVzcG9uc2Uu
c3RhdHVzOworCisgICAgdmFyIGRhdGEgPSByZXNwb25zZS5jb25maWd1cmF0aW9uczsKKyAgICBm
b3IgKHZhciBjb25maWcgaW4gZGF0YSkKKyAgICAgICAgZGF0YVtjb25maWddID0gbmV3IFJ1bnNE
YXRhKGRhdGFbY29uZmlnXSk7CisKKyAgICBpZiAocmVzcG9uc2UubGFzdE1vZGlmaWVkKQorICAg
ICAgICByZXNwb25zZS5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZShyZXNwb25zZS5sYXN0TW9kaWZp
ZWQpOworCisgICAgcmV0dXJuIHJlc3BvbnNlOworfQorCisvLyBGSVhNRTogSXQgd2FzIGEgbWlz
dGFrZSB0byBwdXQgdGhpcyBpbiB0aGUgY2xpZW50IHNpZGUuIFdlIHNob3VsZCBwdXQgdGhpcyBi
YWNrIGluIHRoZSBKU09OLgorUnVuc0RhdGEudW5pdEZyb21NZXRyaWNOYW1lID0gZnVuY3Rpb24g
KG1ldHJpY05hbWUpCit7CisgICAgdmFyIHN1ZmZpeCA9IG1ldHJpY05hbWUubWF0Y2goJyhbQS16
XVthLXpdK3xGcmFtZVJhdGUpJCcpWzBdOworICAgIHZhciB1bml0ID0geworICAgICAgICAnRnJh
bWVSYXRlJzogJ2ZwcycsCisgICAgICAgICdSdW5zJzogJy9zJywKKyAgICAgICAgJ1RpbWUnOiAn
bXMnLAorICAgICAgICAnTWFsbG9jJzogJ2J5dGVzJywKKyAgICAgICAgJ0hlYXAnOiAnYnl0ZXMn
LAorICAgICAgICAnQWxsb2NhdGlvbnMnOiAnYnl0ZXMnCisgICAgfVtzdWZmaXhdOworICAgIHJl
dHVybiB1bml0OworfQorCitSdW5zRGF0YS5pc1NtYWxsZXJCZXR0ZXIgPSBmdW5jdGlvbiAodW5p
dCkKK3sKKyAgICByZXR1cm4gdW5pdCAhPSAnZnBzJyAmJiB1bml0ICE9ICcvcyc7Cit9CisKIGZ1
bmN0aW9uIFRpbWVTZXJpZXMoc2VyaWVzKQogewotICAgIHRoaXMuX3NlcmllcyA9IHNlcmllcy5z
b3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnRpbWUgLSBiLnRpbWU7IH0pOworICAgIHRo
aXMuX3NlcmllcyA9IHNlcmllcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHZhciBk
aWZmID0gYS50aW1lIC0gYi50aW1lOworICAgICAgICByZXR1cm4gZGlmZiA/IGRpZmYgOiBhLnNl
Y29uZGFyeVRpbWUgLSBiLnNlY29uZGFyeVRpbWU7CisgICAgfSk7CisKICAgICB2YXIgc2VsZiA9
IHRoaXM7CiAgICAgdmFyIG1pbiA9IHVuZGVmaW5lZDsKICAgICB2YXIgbWF4ID0gdW5kZWZpbmVk
OwpAQCAtMzk0LDYgKzQ0MCwxMyBAQCBmdW5jdGlvbiBUaW1lU2VyaWVzKHNlcmllcykKICAgICB0
aGlzLl9tYXggPSBtYXg7CiB9CiAKK1RpbWVTZXJpZXMucHJvdG90eXBlLmZpbmRQb2ludEJ5SW5k
ZXggPSBmdW5jdGlvbiAoaW5kZXgpCit7CisgICAgaWYgKCF0aGlzLl9zZXJpZXMgfHwgaW5kZXgg
PCAwIHx8IGluZGV4ID49IHRoaXMuX3Nlcmllcy5sZW5ndGgpCisgICAgICAgIHJldHVybiBudWxs
OworICAgIHJldHVybiB0aGlzLl9zZXJpZXNbaW5kZXhdOworfQorCiBUaW1lU2VyaWVzLnByb3Rv
dHlwZS5maW5kUG9pbnRCeUJ1aWxkID0gZnVuY3Rpb24gKGJ1aWxkSWQpCiB7CiAgICAgcmV0dXJu
IHRoaXMuX3Nlcmllcy5maW5kKGZ1bmN0aW9uIChwb2ludCkgeyByZXR1cm4gcG9pbnQubWVhc3Vy
ZW1lbnQuYnVpbGRJZCgpID09IGJ1aWxkSWQ7IH0pCkBAIC00NjIsNiArNTE1LDExIEBAIFRpbWVT
ZXJpZXMucHJvdG90eXBlLm1pbk1heEZvclRpbWVSYW5nZSAKIAogVGltZVNlcmllcy5wcm90b3R5
cGUuc2VyaWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2VyaWVzOyB9CiAKK1RpbWVT
ZXJpZXMucHJvdG90eXBlLnJhd1ZhbHVlcyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuIHRo
aXMuX3Nlcmllcy5tYXAoZnVuY3Rpb24gKHBvaW50KSB7IHJldHVybiBwb2ludC52YWx1ZSB9KTsK
K30KKwogVGltZVNlcmllcy5wcm90b3R5cGUubGFzdFBvaW50ID0gZnVuY3Rpb24gKCkKIHsKICAg
ICBpZiAoIXRoaXMuX3NlcmllcyB8fCAhdGhpcy5fc2VyaWVzLmxlbmd0aCkKQEAgLTQ4MiwzICs1
NDAsMTAgQEAgVGltZVNlcmllcy5wcm90b3R5cGUubmV4dFBvaW50ID0gZnVuY3RpbwogICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICByZXR1cm4gdGhpcy5fc2VyaWVzW3BvaW50LnNlcmllc0luZGV4
ICsgMV07CiB9CisKK2lmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKSB7CisgICAgU3Rh
dGlzdGljcyA9IHJlcXVpcmUoJy4vanMvc3RhdGlzdGljcy5qcycpOworICAgIG1vZHVsZS5leHBv
cnRzLk1lYXN1cmVtZW50ID0gTWVhc3VyZW1lbnQ7CisgICAgbW9kdWxlLmV4cG9ydHMuUnVuc0Rh
dGEgPSBSdW5zRGF0YTsKKyAgICBtb2R1bGUuZXhwb3J0cy5UaW1lU2VyaWVzID0gVGltZVNlcmll
czsKK30KSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjIvbWFuaWZlc3Qu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9tYW5p
ZmVzdC5qcwkocmV2aXNpb24gMTgzMjMwKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92Mi9tYW5pZmVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzE3LDE3ICszMTcsOCBAQCBB
cHAuTWFuaWZlc3QgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7CiAgICAgfSwKICAgICBfZm9y
bWF0RmV0Y2hlZERhdGE6IGZ1bmN0aW9uIChtZXRyaWNOYW1lLCBjb25maWd1cmF0aW9ucykKICAg
ICB7Ci0gICAgICAgIHZhciBzdWZmaXggPSBtZXRyaWNOYW1lLm1hdGNoKCcoW0Etel1bYS16XSt8
RnJhbWVSYXRlKSQnKVswXTsKLSAgICAgICAgdmFyIHVuaXQgPSB7Ci0gICAgICAgICAgICAnRnJh
bWVSYXRlJzogJ2ZwcycsCi0gICAgICAgICAgICAnUnVucyc6ICcvcycsCi0gICAgICAgICAgICAn
VGltZSc6ICdtcycsCi0gICAgICAgICAgICAnTWFsbG9jJzogJ2J5dGVzJywKLSAgICAgICAgICAg
ICdIZWFwJzogJ2J5dGVzJywKLSAgICAgICAgICAgICdBbGxvY2F0aW9ucyc6ICdieXRlcycKLSAg
ICAgICAgfVtzdWZmaXhdOwotCi0gICAgICAgIHZhciBzbWFsbGVySXNCZXR0ZXIgPSB1bml0ICE9
ICdmcHMnICYmIHVuaXQgIT0gJy9zJzsgLy8gQXNzdW1lIHNtYWxsZXIgaXMgYmV0dGVyIGZvciB1
bml0LWxlc3MgbWV0cmljcy4KKyAgICAgICAgdmFyIHVuaXQgPSBSdW5zRGF0YS51bml0RnJvbU1l
dHJpY05hbWUobWV0cmljTmFtZSk7CisgICAgICAgIHZhciBzbWFsbGVySXNCZXR0ZXIgPSBSdW5z
RGF0YS5pc1NtYWxsZXJCZXR0ZXIodW5pdCk7CiAKICAgICAgICAgdmFyIHVzZVNJID0gdW5pdCA9
PSAnYnl0ZXMnOwogICAgICAgICB2YXIgdW5pdFN1ZmZpeCA9IHVuaXQgPyAnICcgKyB1bml0IDog
Jyc7CkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YyL2pzL3N0YXRpc3Rp
Y3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92Mi9q
cy9zdGF0aXN0aWNzLmpzCShyZXZpc2lvbiAxODMyMzApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YyL2pzL3N0YXRpc3RpY3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3
ICs0ODcsNyBAQCB2YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBsZWZ0RWRnZSA9IGkgLSAyLCByaWdodEVkZ2UgPSBpICsgMjsg
bGVmdEVkZ2UgPj0gMCAmJiByaWdodEVkZ2UgPD0gdmFsdWVzLmxlbmd0aDsgbGVmdEVkZ2UtLSwg
cmlnaHRFZGdlKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ZWRWYWx1
ZXNbbGVmdEVkZ2VdICE9IHByZXZpb3VzTWVhbiB8fCBzZWdtZW50ZWRWYWx1ZXNbcmlnaHRFZGdl
IC0gMV0gIT0gY3VycmVudE1lYW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU3RhdGlzdGljcy5jb21wdXRl
V2VsY2hzVCh2YWx1ZXMsIGxlZnRFZGdlLCBpIC0gbGVmdEVkZ2UsIHZhbHVlcywgaSwgcmlnaHRF
ZGdlIC0gaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU3RhdGlzdGlj
cy5jb21wdXRlV2VsY2hzVCh2YWx1ZXMsIGxlZnRFZGdlLCBpIC0gbGVmdEVkZ2UsIHZhbHVlcywg
aSwgcmlnaHRFZGdlIC0gaSwgMC45OCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0LnNpZ25pZmljYW50bHlEaWZmZXJlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RlZFJhbmdlcy5wdXNoKFtsZWZ0RWRnZSwgcmlnaHRFZGdlIC0gMV0pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKQEAgLTQ5NSw3ICs0OTUsNyBAQCB2
YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91
bmQgJiYgU3RhdGlzdGljcy5kZWJ1Z2dpbmdUZXN0aW5nUmFuZ2VOb21pbmF0aW9uKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBmaW5kIGEgdGVzdGluZyBy
YW5nZSBhdCcsIGksICdjaGFuZ2luZyBmcm9tJywgcHJldmlvdXNWYWx1ZSwgJ3RvJywgY3VycmVu
dFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8g
ZmluZCBhIHRlc3RpbmcgcmFuZ2UgYXQnLCBpLCAnY2hhbmdpbmcgZnJvbScsIHByZXZpb3VzTWVh
biwgJ3RvJywgY3VycmVudE1lYW4pOwogICAgICAgICAgICAgICAgICAgICBwcmV2aW91c01lYW4g
PSBjdXJyZW50TWVhbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGVjdGVkUmFuZ2VzOwpAQCAtNTY1LDYgKzU2NSwxNiBAQCB2YXIgU3RhdGlzdGljcyA9IG5l
dyAoZnVuY3Rpb24gKCkgewogICAgICAgICB9LAogICAgIF0KIAorICAgIHRoaXMuZXhlY3V0ZVN0
cmF0ZWd5ID0gZnVuY3Rpb24gKHN0cmF0ZWd5LCByYXdWYWx1ZXMsIGFkZGl0aW9uYWxBcmd1bWVu
dHMpCisgICAgeworICAgICAgICB2YXIgcGFyYW1ldGVycyA9IChzdHJhdGVneS5wYXJhbWV0ZXJM
aXN0IHx8IFtdKS5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICB2YXIgcGFyc2Vk
ID0gcGFyc2VGbG9hdChwYXJhbS52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4o
cGFyYW0ubWF4IHx8IEluZmluaXR5LCBNYXRoLm1heChwYXJhbS5taW4gfHwgLUluZmluaXR5LCBp
c05hTihwYXJzZWQpID8gMCA6IHBhcnNlZCkpOworICAgICAgICB9KTsKKyAgICAgICAgcGFyYW1l
dGVycy5wdXNoKHJhd1ZhbHVlcyk7CisgICAgICAgIHJldHVybiBzdHJhdGVneS5leGVjdXRlLmFw
cGx5KHN0cmF0ZWd5LCBwYXJhbWV0ZXJzLmNvbmNhdChhZGRpdGlvbmFsQXJndW1lbnRzKSk7Cisg
ICAgfTsKKwogfSkoKTsKIAogaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIHsKSW5k
ZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9kZXRlY3QtY2hhbmdlcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvZGV0ZWN0LWNoYW5nZXMu
anMJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvZGV0ZWN0
LWNoYW5nZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzQgQEAKKyMhL3Vzci9sb2Nh
bC9iaW4vbm9kZQorCit2YXIgZnMgPSByZXF1aXJlKCdmcycpOwordmFyIGh0dHAgPSByZXF1aXJl
KCdodHRwJyk7Cit2YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpOwordmFyIGRhdGEgPSByZXF1
aXJlKCcuLi9wdWJsaWMvdjIvZGF0YS5qcycpOwordmFyIFJ1bnNEYXRhID0gZGF0YS5SdW5zRGF0
YTsKK3ZhciBTdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vcHVibGljL3YyL2pzL3N0YXRpc3RpY3Mu
anMnKTsKKwordmFyIHNldHRpbmdzOworZnVuY3Rpb24gbWFpbihhcmd2KQoreworICAgIGlmIChh
cmd2Lmxlbmd0aCA8IDMpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIHNwZWNpZnkg
dGhlIHNldHRpbmdzIEpTT04gcGF0aCcpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg
ICBzZXR0aW5ncyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGFyZ3ZbMl0sICd1dGY4Jykp
OworCisgICAgZmV0Y2hNYW5pZmVzdEFuZEFuYWx5emVEYXRhKCk7Cit9CisKK2Z1bmN0aW9uIGZl
dGNoTWFuaWZlc3RBbmRBbmFseXplRGF0YSgpCit7CisgICAgZ2V0SlNPTihzZXR0aW5ncy5wZXJm
c2VydmVyLCAnL2RhdGEvbWFuaWZlc3QuanNvbicpLnRoZW4oZnVuY3Rpb24gKG1hbmlmZXN0KSB7
CisgICAgICAgIHJldHVybiBtYXBJbk9yZGVyKGNvbmZpZ3VyYXRpb25zRm9yVGVzdGluZyhtYW5p
ZmVzdCksIGFuYWx5emVDb25maWd1cmF0aW9uKTsKKyAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVh
c29uKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvYnRhaW4gdGhlIG1hbmlm
ZXN0IGZpbGUnKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc29sZS5s
b2coJycpOworICAgICAgICBjb25zb2xlLmxvZygnU2xlZWluZyBmb3InLCBzZXR0aW5ncy5zZWNv
bmRzVG9TbGVlcCwgJ3NlY29uZHMnKTsKKyAgICAgICAgc2V0VGltZW91dChmZXRjaE1hbmlmZXN0
QW5kQW5hbHl6ZURhdGEsIHNldHRpbmdzLnNlY29uZHNUb1NsZWVwICogMTAwMCk7CisgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIG1hcEluT3JkZXIoYXJyYXksIGNhbGxiYWNrLCBzdGFydEluZGV4KQor
eworICAgIGlmIChzdGFydEluZGV4ID09PSB1bmRlZmluZWQpCisgICAgICAgIHN0YXJ0SW5kZXgg
PSAwOworICAgIGlmIChzdGFydEluZGV4ID49IGFycmF5Lmxlbmd0aCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdmFyIG5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXBJbk9yZGVyKGFycmF5
LCBjYWxsYmFjaywgc3RhcnRJbmRleCArIDEpOyB9OworICAgIHZhciByZXR1cm5WYWx1ZSA9IGNh
bGxiYWNrKGFycmF5W3N0YXJ0SW5kZXhdKTsKKyAgICBpZiAodHlwZW9mKHJldHVyblZhbHVlKSA9
PT0gJ29iamVjdCcgJiYgcmV0dXJuVmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKQorICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWUudGhlbihuZXh0KS5jYXRjaChuZXh0KTsKKyAgICByZXR1cm4gbmV4
dCgpOworfQorCitmdW5jdGlvbiBjb25maWd1cmF0aW9uc0ZvclRlc3RpbmcobWFuaWZlc3QpCit7
CisgICAgdmFyIGNvbmZpZ3VyYXRpb25zID0gW107CisgICAgZm9yICh2YXIgbmFtZSBpbiBtYW5p
ZmVzdC5kYXNoYm9hcmRzKSB7CisgICAgICAgIHZhciBkYXNoYm9hcmQgPSBtYW5pZmVzdC5kYXNo
Ym9hcmRzW25hbWVdOworICAgICAgICBmb3IgKHZhciByb3cgb2YgZGFzaGJvYXJkKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBjZWxsIG9mIHJvdykgeworICAgICAgICAgICAgICAgIGlmIChjZWxs
IGluc3RhbmNlb2YgQXJyYXkpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLnB1
c2goe3BsYXRmb3JtSWQ6IHBhcnNlSW50KGNlbGxbMF0pLCBtZXRyaWNJZDogcGFyc2VJbnQoY2Vs
bFsxXSl9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBwbGF0
Zm9ybXMgPSBtYW5pZmVzdC5hbGw7CisgICAgZm9yICh2YXIgY29uZmlnIG9mIGNvbmZpZ3VyYXRp
b25zKSB7CisgICAgICAgIHZhciBtZXRyaWMgPSBtYW5pZmVzdC5tZXRyaWNzW2NvbmZpZy5tZXRy
aWNJZF07CisKKyAgICAgICAgdmFyIHRlc3RQYXRoID0gW107CisgICAgICAgIHZhciBpZCA9IG1l
dHJpYy50ZXN0OworICAgICAgICB3aGlsZSAoaWQpIHsKKyAgICAgICAgICAgIHZhciB0ZXN0ID0g
bWFuaWZlc3QudGVzdHNbaWRdOworICAgICAgICAgICAgdGVzdFBhdGgucHVzaCh0ZXN0Lm5hbWUp
OworICAgICAgICAgICAgaWQgPSB0ZXN0LnBhcmVudElkOworICAgICAgICB9CisKKyAgICAgICAg
Y29uZmlnLnVuaXQgPSBSdW5zRGF0YS51bml0RnJvbU1ldHJpY05hbWUobWV0cmljLm5hbWUpOwor
ICAgICAgICBjb25maWcuc21hbGxlcklzQmV0dGVyID0gUnVuc0RhdGEuaXNTbWFsbGVyQmV0dGVy
KGNvbmZpZy51bml0KTsKKyAgICAgICAgY29uZmlnLnBsYXRmb3JtTmFtZSA9IHBsYXRmb3Jtc1tj
b25maWcucGxhdGZvcm1JZF0ubmFtZTsKKyAgICAgICAgY29uZmlnLnRlc3ROYW1lID0gdGVzdFBh
dGgucmV2ZXJzZSgpLmpvaW4oJyA+ICcpOworICAgICAgICBjb25maWcuZnVsbFRlc3ROYW1lID0g
Y29uZmlnLnRlc3ROYW1lICsgJzonICsgbWV0cmljLm5hbWU7CisgICAgICAgIGNvbmZpZy5yZXBv
c2l0b3JpZXMgPSBtYW5pZmVzdC5yZXBvc2l0b3JpZXM7CisgICAgICAgIGlmIChtZXRyaWMuYWdn
cmVnYXRvcikKKyAgICAgICAgICAgIGNvbmZpZy5mdWxsVGVzdE5hbWUgKz0gJzonICsgbWV0cmlj
LmFnZ3JlZ2F0b3I7CisgICAgfQorCisgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zOworfQorCitm
dW5jdGlvbiBhbmFseXplQ29uZmlndXJhdGlvbihjb25maWcpCit7CisgICAgdmFyIG1pblRpbWUg
PSBEYXRlLm5vdygpIC0gc2V0dGluZ3MubWF4RGF5cyAqIDI0ICogMzYwMCAqIDEwMDA7CisKKyAg
ICBjb25zb2xlLmxvZygnJyk7CisgICAgY29uc29sZS5sb2coJz09IEFuYWx5emluZyB0aGUgbGFz
dCcsIHNldHRpbmdzLm1heERheXMsICdkYXlzOicsIGNvbmZpZy5mdWxsVGVzdE5hbWUsICdvbics
IGNvbmZpZy5wbGF0Zm9ybU5hbWUsICc9PScpOworCisgICAgcmV0dXJuIGNvbXB1dGVSYW5nZXNG
b3JUZXN0aW5nKHNldHRpbmdzLnBlcmZzZXJ2ZXIsIHNldHRpbmdzLnN0cmF0ZWdpZXMsIGNvbmZp
Zy5wbGF0Zm9ybUlkLCBjb25maWcubWV0cmljSWQpLnRoZW4oZnVuY3Rpb24gKHJhbmdlcykgewor
ICAgICAgICB2YXIgZmlsdGVyZWRSYW5nZXMgPSByYW5nZXMuZmlsdGVyKGZ1bmN0aW9uIChyYW5n
ZSkgeyByZXR1cm4gcmFuZ2UuZW5kVGltZSA+PSBtaW5UaW1lICYmICFyYW5nZS5vdmVybGFwcGlu
Z0FuYWx5c2lzVGFza3MubGVuZ3RoOyB9KQorICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEs
IGIpIHsgcmV0dXJuIGEuZW5kVGltZSAtIGIuZW5kVGltZSB9KTsKKworICAgICAgICB2YXIgc3Vt
bWFyeTsKKyAgICAgICAgdmFyIHJhbmdlOworICAgICAgICBmb3IgKHJhbmdlIG9mIGZpbHRlcmVk
UmFuZ2VzKSB7CisgICAgICAgICAgICB2YXIgc3VtbWFyeSA9IHN1bW1hcml6ZVJhbmdlKGNvbmZp
ZywgcmFuZ2UpOworICAgICAgICAgICAgY29uc29sZS5sb2coJ0RldGVjdGVkOicsIHN1bW1hcnkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyYW5nZSkgeworICAgICAgICAgICAgY29uc29s
ZS5sb2coJ05vdGhpbmcgdG8gYW5hbHl6ZScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFuYWx5c2lzVGFza0FuZE5vdGlmeShjb25maWcs
IHJhbmdlLCBzdW1tYXJ5KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gY29tcHV0ZVJhbmdlc0Zv
clRlc3Rpbmcoc2VydmVyLCBzdHJhdGVnaWVzLCBwbGF0Zm9ybUlkLCBtZXRyaWNJZCkKK3sKKyAg
ICAvLyBGSVhNRTogU3RvcmUgdGhlIHNlZ21lbnRhdGlvbiBzdHJhdGVneSBvbiB0aGUgc2VydmVy
IHNpZGUuCisgICAgLy8gRklYTUU6IENvbmZpZ3VyZSBlYWNoIHN0cmF0ZWd5LgorICAgIHZhciBz
ZWdtZW50YXRpb25TdHJhdGVneSA9IGZpbmRTdHJhdGVneUJ5TGFiZWwoU3RhdGlzdGljcy5Nb3Zp
bmdBdmVyYWdlU3RyYXRlZ2llcywgc3RyYXRlZ2llcy5zZWdtZW50YXRpb24ubGFiZWwpOworICAg
IGlmICghc2VnbWVudGF0aW9uU3RyYXRlZ3kpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcignRmFp
bGVkIHRvIGZpbmQgdGhlIHNlZ21lbnRhdGlvbiBzdHJhdGVneTogJyArIHN0cmF0ZWdpZXMuc2Vn
bWVudGF0aW9uLmxhYmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciB0ZXN0
UmFuZ2VTdHJhdGVneSA9IGZpbmRTdHJhdGVneUJ5TGFiZWwoU3RhdGlzdGljcy5UZXN0UmFuZ2VT
ZWxlY3Rpb25TdHJhdGVnaWVzLCBzdHJhdGVnaWVzLnRlc3RSYW5nZS5sYWJlbCk7CisgICAgaWYg
KCF0ZXN0UmFuZ2VTdHJhdGVneSkgeworICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8g
ZmluZCB0aGUgdGVzdCByYW5nZSBzZWxlY3Rpb24gc3RyYXRlZ3k6ICcgKyBzdHJhdGVnaWVzLnRl
c3RSYW5nZS5sYWJlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgY3VycmVu
dFByb21pc2UgPSBnZXRKU09OKHNlcnZlciwgUnVuc0RhdGEucGF0aEZvckZldGNoaW5nUnVucyhw
bGF0Zm9ybUlkLCBtZXRyaWNJZCkpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAg
IGlmIChyZXNwb25zZS5zdGF0dXMgIT0gJ09LJykKKyAgICAgICAgICAgIHRocm93IHJlc3BvbnNl
OworICAgICAgICByZXR1cm4gUnVuc0RhdGEuY3JlYXRlUnVuc0RhdGFJblJlc3BvbnNlKHJlc3Bv
bnNlKS5jb25maWd1cmF0aW9ucy5jdXJyZW50OworICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsK
KyAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHRoZSBtZWFzdXJlbWVudHM6
JywgcmVhc29uKTsKKyAgICB9KTsKKworICAgIHZhciBhbmFseXNpc1Rhc2tzUHJvbWlzZSA9IGdl
dEpTT04oc2VydmVyLCAnL2FwaS9hbmFseXNpcy10YXNrcz9wbGF0Zm9ybT0nICsgcGxhdGZvcm1J
ZCArICcmbWV0cmljPScgKyBtZXRyaWNJZCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAg
ICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAnT0snKQorICAgICAgICAgICAgdGhyb3cgcmVz
cG9uc2U7CisgICAgICAgIHJldHVybiByZXNwb25zZS5hbmFseXNpc1Rhc2tzLmZpbHRlcihmdW5j
dGlvbiAodGFzaykgeyByZXR1cm4gdGFzay5zdGFydFJ1biAmJiB0YXNrLmVuZFJ1bjsgfSk7Cisg
ICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQg
dG8gZmV0Y2ggdGhlIGFuYWx5c2lzIHRhc2tzOicsIHJlYXNvbik7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gUHJvbWlzZS5hbGwoW2N1cnJlbnRQcm9taXNlLCBhbmFseXNpc1Rhc2tzUHJvbWlzZV0p
LnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHsKKyAgICAgICAgdmFyIGN1cnJlbnRUaW1lU2VyaWVz
ID0gcmVzdWx0c1swXS50aW1lU2VyaWVzQnlDb21taXRUaW1lKCk7CisgICAgICAgIHZhciBhbmFs
eXNpc1Rhc2tzID0gcmVzdWx0c1sxXTsKKyAgICAgICAgdmFyIHJhd1ZhbHVlcyA9IGN1cnJlbnRU
aW1lU2VyaWVzLnJhd1ZhbHVlcygpOworICAgICAgICB2YXIgc2VnbWVudGVkVmFsdWVzID0gU3Rh
dGlzdGljcy5leGVjdXRlU3RyYXRlZ3koc2VnbWVudGF0aW9uU3RyYXRlZ3ksIHJhd1ZhbHVlcyk7
CisKKyAgICAgICAgdmFyIHJhbmdlcyA9IFN0YXRpc3RpY3MuZXhlY3V0ZVN0cmF0ZWd5KHRlc3RS
YW5nZVN0cmF0ZWd5LCByYXdWYWx1ZXMsIFtzZWdtZW50ZWRWYWx1ZXNdKS5tYXAoZnVuY3Rpb24g
KHJhbmdlKSB7CisgICAgICAgICAgICB2YXIgc3RhcnRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVz
LmZpbmRQb2ludEJ5SW5kZXgocmFuZ2VbMF0pOworICAgICAgICAgICAgdmFyIGVuZFBvaW50ID0g
Y3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlJbmRleChyYW5nZVsxXSk7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHJhbmdlWzBdLAorICAgICAg
ICAgICAgICAgIGVuZEluZGV4OiByYW5nZVsxXSwKKyAgICAgICAgICAgICAgICBvdmVybGFwcGlu
Z0FuYWx5c2lzVGFza3M6IFtdLAorICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnRQb2lu
dC50aW1lLAorICAgICAgICAgICAgICAgIGVuZFRpbWU6IGVuZFBvaW50LnRpbWUsCisgICAgICAg
ICAgICAgICAgcmVsYXRpdmVDaGFuZ2VJblNlZ21lbnRlZFZhbHVlczogKHNlZ21lbnRlZFZhbHVl
c1tyYW5nZVsxXV0gLSBzZWdtZW50ZWRWYWx1ZXNbcmFuZ2VbMF1dKSAvIHNlZ21lbnRlZFZhbHVl
c1tyYW5nZVswXV0sCisgICAgICAgICAgICAgICAgc3RhcnRNZWFzdXJlbWVudDogc3RhcnRQb2lu
dC5tZWFzdXJlbWVudCwKKyAgICAgICAgICAgICAgICBlbmRNZWFzdXJlbWVudDogZW5kUG9pbnQu
bWVhc3VyZW1lbnQsCisgICAgICAgICAgICB9OworICAgICAgICB9KTsKKworICAgICAgICBmb3Ig
KHZhciB0YXNrIG9mIGFuYWx5c2lzVGFza3MpIHsKKyAgICAgICAgICAgIHZhciB0YXNrU3RhcnRQ
b2ludCA9IGN1cnJlbnRUaW1lU2VyaWVzLmZpbmRQb2ludEJ5TWVhc3VyZW1lbnRJZCh0YXNrLnN0
YXJ0UnVuKTsKKyAgICAgICAgICAgIHZhciB0YXNrRW5kUG9pbnQgPSBjdXJyZW50VGltZVNlcmll
cy5maW5kUG9pbnRCeU1lYXN1cmVtZW50SWQodGFzay5lbmRSdW4pOworICAgICAgICAgICAgZm9y
ICh2YXIgcmFuZ2Ugb2YgcmFuZ2VzKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpc2pvaW50ID0g
cmFuZ2UuZW5kSW5kZXggPCB0YXNrU3RhcnRQb2ludC5zZXJpZXNJbmRleAorICAgICAgICAgICAg
ICAgICAgICB8fCB0YXNrRW5kUG9pbnQuc2VyaWVzSW5kZXggPCByYW5nZS5zdGFydEluZGV4Owor
ICAgICAgICAgICAgICAgIGlmICghZGlzam9pbnQpCisgICAgICAgICAgICAgICAgICAgIHJhbmdl
Lm92ZXJsYXBwaW5nQW5hbHlzaXNUYXNrcy5wdXNoKHRhc2spOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJhbmdlczsKKyAgICB9KTsKK30KKworZnVuY3Rpb24g
Y3JlYXRlQW5hbHlzaXNUYXNrQW5kTm90aWZ5KGNvbmZpZywgcmFuZ2UsIHN1bW1hcnkpCit7Cisg
ICAgdmFyIHNlZ21lbnRhdGlvblN0cmF0ZWd5ID0gc2V0dGluZ3Muc3RyYXRlZ2llcy5zZWdtZW50
YXRpb24ubGFiZWw7CisgICAgdmFyIHRlc3RSYW5nZVN0cmF0ZWd5ID0gc2V0dGluZ3Muc3RyYXRl
Z2llcy50ZXN0UmFuZ2UubGFiZWw7CisKKyAgICB2YXIgYW5hbHlzaXNUYXNrRGF0YSA9IHsKKyAg
ICAgICAgbmFtZTogc3VtbWFyeSwKKyAgICAgICAgc3RhcnRSdW46IHJhbmdlLnN0YXJ0TWVhc3Vy
ZW1lbnQuaWQoKSwKKyAgICAgICAgZW5kUnVuOiByYW5nZS5lbmRNZWFzdXJlbWVudC5pZCgpLAor
ICAgICAgICBzZWdtZW50YXRpb25TdHJhdGVneTogc2VnbWVudGF0aW9uU3RyYXRlZ3ksCisgICAg
ICAgIHRlc3RSYW5nZVN0cmF0ZWd5OiB0ZXN0UmFuZ2VTdHJhdGVneSwKKworICAgICAgICBzbGF2
ZU5hbWU6IHNldHRpbmdzLnNsYXZlLm5hbWUsCisgICAgICAgIHNsYXZlUGFzc3dvcmQ6IHNldHRp
bmdzLnNsYXZlLnBhc3N3b3JkLAorICAgIH07CisKKyAgICByZXR1cm4gcG9zdEpTT04oc2V0dGlu
Z3MucGVyZnNlcnZlciwgJy9wcml2aWxlZ2VkLWFwaS9jcmVhdGUtYW5hbHlzaXMtdGFzaycsIGFu
YWx5c2lzVGFza0RhdGEpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgIGlmIChy
ZXNwb25zZVsnc3RhdHVzJ10gIT0gJ09LJykKKyAgICAgICAgICAgIHRocm93IHJlc3BvbnNlOwor
CisgICAgICAgIHZhciBhbmFseXNpc1Rhc2tJZCA9IHJlc3BvbnNlWyd0YXNrSWQnXTsKKworICAg
ICAgICB2YXIgdGl0bGUgPSAnWycgKyBjb25maWcudGVzdE5hbWUgKyAnXVsnICsgY29uZmlnLnBs
YXRmb3JtTmFtZSArICddICcgKyBzdW1tYXJ5OworICAgICAgICB2YXIgYW5hbHlzaXNUYXNrVVJM
ID0gc2V0dGluZ3MucGVyZnNlcnZlci5zY2hlbWUgKyAnOi8vJyArIHNldHRpbmdzLnBlcmZzZXJ2
ZXIuaG9zdCArICcvdjIvIy9hbmFseXNpcy90YXNrLycgKyBhbmFseXNpc1Rhc2tJZDsKKyAgICAg
ICAgdmFyIGNoYW5nZVR5cGUgPSBjaGFuZ2VUeXBlRm9yUmFuZ2UoY29uZmlnLCByYW5nZSk7Cisg
ICAgICAgIC8vIEZJWE1FOiBUZW1wbGF0aXplIHRoaXMuCisgICAgICAgIHZhciBtZXNzYWdlID0g
JzxiPicgKyBzZXR0aW5ncy5ub3RpZmljYXRpb24uc2VydmljZU5hbWUgKyAnPC9iPiBkZXRlY3Rl
ZCBhIHBvdGVudGlhbCAnICsgY2hhbmdlVHlwZSArICc6PGJyPjxicj4nCisgICAgICAgICAgICAr
ICc8dGFibGUgYm9yZGVyPTE+PGNhcHRpb24+JyArIHN1bW1hcnkgKyAnPC9jYXB0aW9uPjx0Ym9k
eT4nCisgICAgICAgICAgICArICc8dHI+PHRoPlRlc3Q8L3RoPjx0ZD4nICsgY29uZmlnLmZ1bGxU
ZXN0TmFtZSArICc8L3RkPjwvdHI+JworICAgICAgICAgICAgKyAnPHRyPjx0aD5QbGF0Zm9ybTwv
dGg+PHRkPicgKyBjb25maWcucGxhdGZvcm1OYW1lICsgJzwvdGQ+PC90cj4nCisgICAgICAgICAg
ICArICc8dHI+PHRoPkFsZ29yaXRobTwvdGg+PHRkPicgKyBzZWdtZW50YXRpb25TdHJhdGVneSAr
ICc8YnI+JyArIHRlc3RSYW5nZVN0cmF0ZWd5ICsgJzwvdGQ+PC90cj4nCisgICAgICAgICAgICAr
ICc8L3RhYmxlPjxicj4nCisgICAgICAgICAgICArICc8YSBocmVmPSInICsgYW5hbHlzaXNUYXNr
VVJMICsgJyI+T3BlbiB0aGUgYW5hbHlzaXMgdGFzazwvYT4nOworCisgICAgICAgIHJldHVybiBn
ZXRKU09OKHNldHRpbmdzLnBlcmZzZXJ2ZXIsICcvYXBpL3RyaWdnZXJhYmxlcz90YXNrPScgKyBh
bmFseXNpc1Rhc2tJZCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKKyAgICAgICAgICAgIHZh
ciBzdGF0dXMgPSByZXNwb25zZVsnc3RhdHVzJ107CisgICAgICAgICAgICB2YXIgdHJpZ2dlcmFi
bGVzID0gcmVzcG9uc2VbJ3RyaWdnZXJhYmxlcyddIHx8IFtdOworICAgICAgICAgICAgaWYgKHN0
YXR1cyA9PSAnVHJpZ2dlcmFibGVOb3RGb3VuZEZvclRhc2snIHx8IHRyaWdnZXJhYmxlcy5sZW5n
dGggIT0gMSkgeworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJyAoQS9CIHRlc3Rpbmcgd2Fz
IG5vdCBhdmFpbGFibGUpJzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9ICdPSycpCisgICAgICAgICAgICAgICAgdGhyb3cg
cmVzcG9uc2U7CisKKyAgICAgICAgICAgIHZhciB0cmlnZ2VyYWJsZSA9IHJlc3BvbnNlWyd0cmln
Z2VyYWJsZXMnXVswXTsKKyAgICAgICAgICAgIHZhciByb290U2V0cyA9IHt9OworICAgICAgICAg
ICAgZm9yICh2YXIgcmVwb3NpdG9yeUlkIG9mIHRyaWdnZXJhYmxlWydhY2NlcHRlZFJlcG9zaXRv
cmllcyddKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmV2aXNpb24gPSByYW5nZS5zdGFy
dE1lYXN1cmVtZW50LnJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5SWQpOworICAgICAg
ICAgICAgICAgIHZhciBlbmRSZXZpc2lvbiA9IHJhbmdlLmVuZE1lYXN1cmVtZW50LnJldmlzaW9u
Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5SWQpOworICAgICAgICAgICAgICAgIGlmIChzdGFydFJl
dmlzaW9uID09IG51bGwgfHwgZW5kUmV2aXNpb24gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcm9vdFNldHNbY29uZmlnLnJlcG9zaXRvcmll
c1tyZXBvc2l0b3J5SWRdLm5hbWVdID0gW3N0YXJ0UmV2aXNpb24sIGVuZFJldmlzaW9uXTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHRlc3REYXRhID0geworICAgICAgICAgICAg
ICAgIHRhc2s6IGFuYWx5c2lzVGFza0lkLAorICAgICAgICAgICAgICAgIG5hbWU6ICdDb25maXJt
aW5nIHRoZSAnICsgY2hhbmdlVHlwZSwKKyAgICAgICAgICAgICAgICByb290U2V0czogcm9vdFNl
dHMsCisgICAgICAgICAgICAgICAgcmVwZXRpdGlvbkNvdW50OiBNYXRoLm1heCgyLCBNYXRoLm1p
big4LCBNYXRoLmZsb29yKChyYW5nZS5lbmRJbmRleCAtIHJhbmdlLnN0YXJ0SW5kZXgpIC8gNCkp
KSwKKworICAgICAgICAgICAgICAgIHNsYXZlTmFtZTogc2V0dGluZ3Muc2xhdmUubmFtZSwKKyAg
ICAgICAgICAgICAgICBzbGF2ZVBhc3N3b3JkOiBzZXR0aW5ncy5zbGF2ZS5wYXNzd29yZCwKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHJldHVybiBwb3N0SlNPTihzZXR0aW5ncy5wZXJm
c2VydmVyLCAnL3ByaXZpbGVnZWQtYXBpL2NyZWF0ZS10ZXN0LWdyb3VwJywgdGVzdERhdGEpLnRo
ZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlWydz
dGF0dXMnXSAhPSAnT0snKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTsKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlICs9ICcgKHRyaWdnZXJlZCBhbiBBL0IgdGVzdGluZyknOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHsKKyAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVhc29uKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0g
JyAoZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBBL0IgdGVzdGluZyknOworICAgICAgICB9KS50aGVu
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3N0Tm90aWZpY2F0aW9uKHNldHRp
bmdzLm5vdGlmaWNhdGlvbi5zZXJ2ZXIsIHNldHRpbmdzLm5vdGlmaWNhdGlvbi50ZW1wbGF0ZSwg
dGl0bGUsIG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCcgIFNlbnQgYSBub3RpZmljYXRpb24nKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9u
IChyZWFzb24pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCcgIEZhaWxlZCB0byBz
ZW5kIGEgbm90aWZpY2F0aW9uJywgcmVhc29uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIGNvbnNvbGUuZXJy
b3IoJyAgRmFpbGVkIHRvIGNyZWF0ZSBhbiBhbmFseXNpcyB0YXNrJywgcmVhc29uKTsKKyAgICB9
KTsKK30KKworZnVuY3Rpb24gZmluZFN0cmF0ZWd5QnlMYWJlbChsaXN0LCBsYWJlbCkKK3sKKyAg
ICBmb3IgKHZhciBzdHJhdGVneSBvZiBsaXN0KSB7CisgICAgICAgIGlmIChzdHJhdGVneS5sYWJl
bCA9PSBsYWJlbCkKKyAgICAgICAgICAgIHJldHVybiBzdHJhdGVneTsKKyAgICB9CisgICAgcmV0
dXJuIG51bGw7Cit9CisKK2Z1bmN0aW9uIGNoYW5nZVR5cGVGb3JSYW5nZShjb25maWcsIHJhbmdl
KQoreworICAgIHZhciBlbmRWYWx1ZUlzTGFyZ2VyID0gcmFuZ2UucmVsYXRpdmVDaGFuZ2VJblNl
Z21lbnRlZFZhbHVlcyA+IDA7CisgICAgcmV0dXJuIGVuZFZhbHVlSXNMYXJnZXIgPT0gY29uZmln
LnNtYWxsZXJJc0JldHRlciA/ICdyZWdyZXNzaW9uJyA6ICdwcm9ncmVzc2lvbic7Cit9CisKK2Z1
bmN0aW9uIHN1bW1hcml6ZVJhbmdlKGNvbmZpZywgcmFuZ2UpCit7CisgICAgcmV0dXJuICdQb3Rl
bnRpYWwgJyArIE1hdGguYWJzKHJhbmdlLnJlbGF0aXZlQ2hhbmdlSW5TZWdtZW50ZWRWYWx1ZXMg
KiAxMDApLnRvUHJlY2lzaW9uKDIpICsgJyUgJworICAgICAgICArIGNoYW5nZVR5cGVGb3JSYW5n
ZShjb25maWcsIHJhbmdlKSArICcgYmV0d2VlbiAnICsgZm9ybWF0VGltZVJhbmdlKHJhbmdlLnN0
YXJ0VGltZSwgcmFuZ2UuZW5kVGltZSk7Cit9CisKK2Z1bmN0aW9uIGZvcm1hdFRpbWVSYW5nZShz
dGFydCwgZW5kKQoreworICAgIHZhciBmb3JtYXR0ZXIgPSBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1
cm4gZGF0ZS50b0lTT1N0cmluZygpLnJlcGxhY2UoJ1QnLCAnICcpLnJlcGxhY2UoLzpcZHsyfVwu
XGQrWiQvLCAnJyk7IH0KKyAgICB2YXIgZm9ybWF0dGVkU3RhcnQgPSBmb3JtYXR0ZXIoc3RhcnQp
OworICAgIHZhciBmb3JtYXR0ZWRFbmQgPSBmb3JtYXR0ZXIoZW5kKTsKKyAgICBpZiAoc3RhcnQu
dG9EYXRlU3RyaW5nKCkgPT0gZW5kLnRvRGF0ZVN0cmluZygpKQorICAgICAgICByZXR1cm4gZm9y
bWF0dGVkU3RhcnQgKyAnIGFuZCAnICsgZm9ybWF0dGVkRW5kLnN1YnN0cmluZyhmb3JtYXR0ZWRF
bmQuaW5kZXhPZignICcpICsgMSk7CisgICAgaWYgKHN0YXJ0LmdldEZ1bGxZZWFyKCkgPT0gZW5k
LmdldEZ1bGxZZWFyKCkpCisgICAgICAgIHJldHVybiBmb3JtYXR0ZWRTdGFydCArICcgYW5kICcg
KyBmb3JtYXR0ZWRFbmQuc3Vic3RyaW5nKDUpOworICAgIHJldHVybiBmb3JtYXR0ZWRTdGFydCAr
ICcgYW5kICcgKyBmb3JtYXR0ZWRFbmQ7Cit9CisKK2Z1bmN0aW9uIGdldEpTT04oc2VydmVyLCBw
YXRoLCBkYXRhKQoreworICAgIHJldHVybiBmZXRjaEpTT04oc2VydmVyLnNjaGVtZSwgeworICAg
ICAgICAnaG9zdG5hbWUnOiBzZXJ2ZXIuaG9zdCwKKyAgICAgICAgJ3BvcnQnOiBzZXJ2ZXIucG9y
dCwKKyAgICAgICAgJ2F1dGgnOiBzZXJ2ZXIuYXV0aCwKKyAgICAgICAgJ3BhdGgnOiBwYXRoLAor
ICAgICAgICAnbWV0aG9kJzogJ0dFVCcsCisgICAgfSwgJ2FwcGxpY2F0aW9uL2pzb24nKTsKK30K
KworZnVuY3Rpb24gcG9zdEpTT04oc2VydmVyLCBwYXRoLCBkYXRhKQoreworICAgIHJldHVybiBm
ZXRjaEpTT04oc2VydmVyLnNjaGVtZSwgeworICAgICAgICAnaG9zdG5hbWUnOiBzZXJ2ZXIuaG9z
dCwKKyAgICAgICAgJ3BvcnQnOiBzZXJ2ZXIucG9ydCwKKyAgICAgICAgJ2F1dGgnOiBzZXJ2ZXIu
YXV0aCwKKyAgICAgICAgJ3BhdGgnOiBwYXRoLAorICAgICAgICAnbWV0aG9kJzogJ1BPU1QnLAor
ICAgIH0sICdhcHBsaWNhdGlvbi9qc29uJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOworfQorCitm
dW5jdGlvbiBwb3N0Tm90aWZpY2F0aW9uKHNlcnZlciwgdGVtcGxhdGUsIHRpdGxlLCBtZXNzYWdl
KQoreworICAgIHZhciBub3RpZmljYXRpb24gPSBpbnN0YW50aWF0ZU5vdGlmaWNhdGlvblRlbXBs
YXRlKHRlbXBsYXRlLCB0aXRsZSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIGZldGNoSlNPTihzZXJ2
ZXIuc2NoZW1lLCB7CisgICAgICAgICdob3N0bmFtZSc6IHNlcnZlci5ob3N0LAorICAgICAgICAn
cG9ydCc6IHNlcnZlci5wb3J0LAorICAgICAgICAnYXV0aCc6IHNlcnZlci5hdXRoLAorICAgICAg
ICAncGF0aCc6IHNlcnZlci5wYXRoLAorICAgICAgICAnbWV0aG9kJzogc2VydmVyLm1ldGhvZCwK
KyAgICB9LCAnYXBwbGljYXRpb24vanNvbicsIEpTT04uc3RyaW5naWZ5KG5vdGlmaWNhdGlvbikp
OworfQorCitmdW5jdGlvbiBpbnN0YW50aWF0ZU5vdGlmaWNhdGlvblRlbXBsYXRlKHRlbXBsYXRl
LCB0aXRsZSwgbWVzc2FnZSkKK3sKKyAgICB2YXIgaW5zdGFuY2UgPSB7fTsKKyAgICBmb3IgKHZh
ciBuYW1lIGluIHRlbXBsYXRlKSB7CisgICAgICAgIHZhciB2YWx1ZSA9IHRlbXBsYXRlW25hbWVd
OworICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycpCisgICAgICAgICAgICBp
bnN0YW5jZVtuYW1lXSA9IHZhbHVlLnJlcGxhY2UoL1wkdGl0bGUvZywgdGl0bGUpLnJlcGxhY2Uo
L1wkbWVzc2FnZS9nLCBtZXNzYWdlKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZW9mKHRlbXBsYXRl
W25hbWVdKSA9PT0gJ29iamVjdCcpCisgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IGluc3Rh
bnRpYXRlTm90aWZpY2F0aW9uVGVtcGxhdGUodmFsdWUsIHRpdGxlLCBtZXNzYWdlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSB2YWx1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGluc3RhbmNlOworfQorCitmdW5jdGlvbiBmZXRjaEpTT04oc2NoZW1lTmFtZSwgb3B0
aW9ucywgY29udGVudFR5cGUsIGNvbnRlbnQpIHsKKyAgICB2YXIgcmVxdWVzdGVyID0gc2NoZW1l
TmFtZSA9PSAnaHR0cHMnID8gaHR0cHMgOiBodHRwOworICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHZhciByZXF1ZXN0ID0gcmVxdWVz
dGVyLnJlcXVlc3Qob3B0aW9ucywgZnVuY3Rpb24gKHJlc3BvbnNlKSB7CisgICAgICAgICAgICB2
YXIgcmVzcG9uc2VUZXh0ID0gJyc7CisgICAgICAgICAgICByZXNwb25zZS5zZXRFbmNvZGluZygn
dXRmOCcpOworICAgICAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmsp
IHsgcmVzcG9uc2VUZXh0ICs9IGNodW5rOyB9KTsKKyAgICAgICAgICAgIHJlc3BvbnNlLm9uKCdl
bmQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAg
ICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtlcnJvcjog
ZXJyb3IsIHJlc3BvbnNlVGV4dDogcmVzcG9uc2VUZXh0fSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc29sdmUoanNvbik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycm9yKSB7IHJlamVj
dChlcnJvcik7IH0pOworICAgICAgICBpZiAoY29udGVudFR5cGUpCisgICAgICAgICAgICByZXF1
ZXN0LnNldEhlYWRlcignQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpOworICAgICAgICBpZiAo
Y29udGVudCkKKyAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoY29udGVudCk7CisgICAgICAgIHJl
cXVlc3QuZW5kKCk7CisgICAgfSk7Cit9CisKK21haW4ocHJvY2Vzcy5hcmd2KTsK
</data>
<flag name="review"
          id="276305"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>