<?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>170165</bug_id>
          
          <creation_ts>2017-03-27 21:03:32 -0700</creation_ts>
          <short_desc>Modernize AnalysisTaskPage</short_desc>
          <delta_ts>2017-04-06 00:27:58 -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>Perf Dashboard</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291789</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-27 21:03:32 -0700</bug_when>
    <thetext>Modernize AnalysisTaskPage and related components.
This is needed to make perf try bots not breaking the perf dashboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291804</commentid>
    <comment_count>1</comment_count>
      <attachid>305563</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-27 22:47:24 -0700</bug_when>
    <thetext>Created attachment 305563
Rewrite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292119</commentid>
    <comment_count>2</comment_count>
      <attachid>305563</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-03-28 15:04:38 -0700</bug_when>
    <thetext>Comment on attachment 305563
Rewrite

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292154</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-28 16:00:39 -0700</bug_when>
    <thetext>Committed r214502: &lt;http://trac.webkit.org/changeset/214502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1294821</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-04-06 00:27:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/31472633&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305563</attachid>
            <date>2017-03-27 22:47:24 -0700</date>
            <delta_ts>2017-03-28 15:04:12 -0700</delta_ts>
            <desc>Rewrite</desc>
            <filename>bug-170165-20170327224724.patch</filename>
            <type>text/plain</type>
            <size>128479</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0NDA5CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA3NmVjMmRjY2U4MmYwZGZkM2E0NTgyZWIxNGYxNDEwODgyNTNjMjk1Li5mMGFkZTJiMzJk
MWEzOTM3NDM1MDRkNGM1MzNmZGY4YjUyM2Q4M2I1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMzcgQEAKKzIwMTctMDMtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXplIEFuYWx5c2lzVGFza1BhZ2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDE2NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vZGVybml6ZWQgQW5h
bHlzaXNUYXNrUGFnZSBhbmQgcmVsYXRlZCBjb21wb25lbnRzLiBUaGUgbWFpbiByZWZhY3Rvcmlu
ZyBoYXBwZW5lZCBpbiBBbmFseXNpc1Rhc2tQYWdlCisgICAgICAgIGZyb20gd2hpY2ggQW5hbHlz
aXNUYXNrUmVzdWx0c1BhbmUgYW5kIEFuYWx5c2lzVGFza1Rlc3RHcm91cFBhbmUgaGF2ZSBiZWVu
IGV4dHJhY3RlZC4KKworICAgICAgICBEZWNvdXBsZWQgQnVpbGRSZXF1ZXN0IGZyb20gaXRzIHJl
c3VsdHMuIEFuYWx5c2lzUmVzdWx0c1ZpZXdlciBhbmQgVGVzdEdyb3VwUmVzdWx0c1RhYmxlIG5v
dyBzdG9yZXMKKyAgICAgICAgYSByZWZlcmVuY2UgdG8gQW5hbHlzaXNSZXN1bHRzVmlldyBhbmQg
TWV0cmljIHRvIGZpbmQgdGhlIHJlc3VsdHMgZm9yIGVhY2ggYnVpbGQgcmVxdWVzdC4KKyAgICAg
ICAgVGhpcyByZWZhY3RvcmluZyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gdmlldyByZXN1bHRz
IG9mIGFuIGFyYml0cmFyeSBtZXRyaWMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBBbHNvIHJl
ZmFjdG9yZWQgUmVzdWx0c1RhYmxlIGFuZCBpdHMgc3ViY2xhc3NlcyBleHRlbnNpdmVseS4gSW5z
dGVhZCBvZiBtYWtpbmcgaXRzIHJlbmRlcigpIHRvIGludm9rZQorICAgICAgICBzdWJjbGFzcycg
bWV0aG9kcyBzdWNoIGFzIGJ1aWxkUm93R3JvdXBzLCBoZWFkaW5nLCBhbmQgYWRkaXRpb25hbEhl
YWRpbmcsIHJlbHkgb24gZWFjaCBzdWJjbGFzcyBjYWxsCisgICAgICAgIHRvIGludm9rZSByZW5k
ZXJUYWJsZSgpLCByZW5hbWVkIGZyb20gcmVuZGVyKCksIHdpdGggY2FsbGJhY2tzIHRvIGFkZCBl
eHRyYSBoZWFkZXJzIGFuZCBjb2x1bW5zLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhl
cyBhIG51bWJlciBvZiB1c2FiaWxpdHkgaXNzdWVzIGZvdW5kIGJ5IHRoZSB1c2VyIHN1Y2ggYXMg
Y2hhbmdpbmcgdGhlIHRlc3QgbmFtZQorICAgICAgICByZXNldHMgdGhlIGN1c3RvbWl6ZWQgcmV2
aXNpb25zIGJ5IHRoZSB2aXJ0dWUgb2YgdGhlIG1vZGVybiBjb2RlIGJlaW5nIG5hdHVyYWxseSBt
b3JlIGNvcnJlY3QuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9hbmFseXNpcy1y
ZXN1bHRzLXZpZXdlci5qczoKKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1ZpZXdlcik6CisgICAg
ICAgIChBbmFseXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLnNldFRlc3RHcm91cENhbGxiYWNr
KTogRGVsZXRlZC4gUmVwbGFjZWQgYnkgInRlc3RHcm91cENsaWNrIiBhY3Rpb24uCisgICAgICAg
IChBbmFseXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLnNldFJhbmdlU2VsZWN0b3JMYWJlbHMp
OiBNb3ZlZCBoZXJlIGZyb20gUmVzdWx0c1RhYmxlIHNpbmNlIGl0J3MKKyAgICAgICAgbmV2ZXIg
dXNlZCBpbiBSZXN1bHRzVGFibGUgb3IgVGVzdEdyb3VwUmVzdWx0c1RhYmxlLgorICAgICAgICAo
QW5hbHlzaXNSZXN1bHRzVmlld2VyLnByb3RvdHlwZS5zZWxlY3RlZFJhbmdlKTogRGl0dG8uCisg
ICAgICAgIChBbmFseXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLnNldFBvaW50cyk6IE5vdyB0
YWtlcyBtZXRyaWMgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LgorICAgICAgICAoQW5hbHlzaXNSZXN1
bHRzVmlld2VyLnByb3RvdHlwZS5zZXRUZXN0R3JvdXBzKTogTm93IHRha2VzIHRoZSBjdXJyZW50
IHRlc3QgZ3JvdXAuCisgICAgICAgIChBbmFseXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLmRp
ZFVwZGF0ZVJlc3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2Vy
LnByb3RvdHlwZS5zZXRBbmFseXNpc1Jlc3VsdHNWaWV3KTogQWRkZWQuCisgICAgICAgIChBbmFs
eXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLnJlbmRlcik6IEludm9rZSBfcmVuZGVyVGVzdEdy
b3VwcyBsYXppbHkuIEFsc28gc2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8gZmluZCB0
aGUgc2VsZWN0ZWQgbGlzdCBpdGVtLiBTaW5jZSB3ZSBhbHdheXMgdXNlIGEgc2hhZG93IERPTSBu
b3csIHdlIGNhbiBzaW1wbHkgbG9vayBmb3IgYW4gZWxlbWVudAorICAgICAgICB3aXRoICIuc2Vs
ZXRlZCIgaW5zdGVhZCBvZiBjcmFmdGluZyBhIHVuaXF1ZSBjbGFzcyBuYW1lLgorICAgICAgICAo
QW5hbHlzaXNSZXN1bHRzVmlld2VyLnByb3RvdHlwZS5yZW5kZXJUZXN0R3JvdXBzKTogUmVuYW1l
ZCBmcm9tIGJ1aWxkUm93R3JvdXBzLiBTcGVjaWZ5IGNhbGxiYWNrcyB0bworICAgICAgICBpbnNl
cnQgaGVhZGVycyBmb3IgQS9CIHJhZGlvIGJ1dHRvbnMsIHdoaWNoIGhhcyBiZWVuIG1vdmVkIGZy
b20gUmVzdWx0c1RhYmxlLnByb3RvdHlwZS5yZW5kZXIsIGFuZCB0aGUKKyAgICAgICAgc3RhY2tl
ZCBibG9ja3Mgb2YgdGVzdGluZyByZXN1bHRzLgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmll
d2VyLnByb3RvdHlwZS5fY2xhc3NGb3JUZXN0R3JvdXApOiBEZWxldGVkLgorICAgICAgICAoQW5h
bHlzaXNSZXN1bHRzVmlld2VyLnByb3RvdHlwZS5fb3BlblN0YWNraW5nQmxvY2spOiBEZWxldGVk
LgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2VyLnByb3RvdHlwZS5fZXhwYW5kQmV0d2Vl
bik6IENyZWF0ZSBhIG5ldyBzZXQgZm9yIGV4cGFuZGVkUG9pbnRzIHRvIG1ha2UKKyAgICAgICAg
X3JlbmRlclRlc3RHcm91cHNMYXppbHkuZXZhbHVhdGUgZG8gdGhlIHdvcmsuCisgICAgICAgIChB
bmFseXNpc1Jlc3VsdHNWaWV3ZXIuX2xheW91dEJsb2Nrcyk6IE1vdmVkIGZyb20gVGVzdEdyb3Vw
U3RhY2tpbmdHcmlkLmxheW91dC4KKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5fc29y
dEJsb2Nrc0J5Um93KTogTW92ZWQgZnJvbSBBbmFseXNpc1Jlc3VsdHNWaWV3ZXIuVGVzdEdyb3Vw
U3RhY2tpbmdHcmlkLgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2VyLl9pbnNlcnRBZnRl
ckJsb2NrV2l0aFNhbWVSYW5nZSk6IERpdHRvLgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmll
d2VyLl9pbnNlcnRCbG9ja0luRmlyc3RBdmFpbGFibGVDb2x1bW4pOiBEaXR0by4KKyAgICAgICAg
KEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5fY3JlYXRlQ2VsbHNGb3JSb3cpOiBEaXR0by4KKworICAg
ICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2VyLlRlc3RHcm91cFN0YWNraW5nQmxvY2spOgorICAg
ICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2VyLlRlc3RHcm91cFN0YWNraW5nQmxvY2sucHJvdG90
eXBlLmFkZFJvd0luZGV4KToKKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5UZXN0R3Jv
dXBTdGFja2luZ0Jsb2NrLnByb3RvdHlwZS5jcmVhdGVTdGFja2luZ0NlbGwpOiBObyBsb25nZXIg
Y3JlYXRlcyBhIHVuaXF1ZQorICAgICAgICBjbGFzcyBuYW1lIGhlcmUuIFNlZSB0aGUgaW5saW5l
IGNvbW1lbnQgZm9yIEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5wcm90b3R5cGUucmVuZGVyLgorICAg
ICAgICAoQW5hbHlzaXNSZXN1bHRzVmlld2VyLlRlc3RHcm91cFN0YWNraW5nQmxvY2sucHJvdG90
eXBlLmlzVGhpbik6IERlbGV0ZWQuIFdlIHVzZWQgdG8gY29sbGFwc2UgImZhaWxlZCIKKyAgICAg
ICAgdGVzdCBncm91cHMgYXMgYSB0aGluIHZlcnRpY2FsIGxpbmUsIGFuZCB3ZSB3YW50ZWQgdG8g
c2hvdyB0aGVtIG5leHQgdG8gZWFjaCBvdGhlciBpbiBfbGF5b3V0QmxvY2sgYnV0CisgICAgICAg
IHdlIGRvbid0IGRvIHRoYXQgYW55bW9yZS4KKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1ZpZXdl
ci5UZXN0R3JvdXBTdGFja2luZ0Jsb2NrLnByb3RvdHlwZS5fdmFsdWVzRm9yQ29tbWl0U2V0KTog
QWRkZWQuIFVzZXMKKyAgICAgICAgdGhpcy5fYW5hbHlzaXNSZXN1bHRzVmlldyB0byBleHRyYWN0
IHRoZSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBtZXRyaWNzLgorICAgICAgICAoQW5hbHlzaXNS
ZXN1bHRzVmlld2VyLlRlc3RHcm91cFN0YWNraW5nQmxvY2sucHJvdG90eXBlLl9jb21wdXRlVGVz
dEdyb3VwU3RhdHVzKToKKworICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2FuYWx5c2lz
LXRhc2stYnVnLWxpc3QuanM6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrQnVnTGlzdCk6
IEFkZGVkLiBFeHRyYWN0ZWQgZnJvbSBBbmFseXNpc1Rhc2tDaGFydFBhbmUuCisgICAgICAgIChB
bmFseXNpc1Rhc2tCdWdMaXN0LnByb3RvdHlwZS5zZXRUYXNrKTogQWRkZWQuCisgICAgICAgIChB
bmFseXNpc1Rhc2tCdWdMaXN0LnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKTogQWRk
ZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tCdWdMaXN0LnByb3RvdHlwZS5yZW5kZXIpOiBBZGRl
ZC4KKyAgICAgICAgKEFuYWx5c2lzVGFza0J1Z0xpc3QucHJvdG90eXBlLl9hc3NvY2lhdGVCdWcp
OiBBZGRlZC4KKyAgICAgICAgKEFuYWx5c2lzVGFza0J1Z0xpc3QucHJvdG90eXBlLl9kaXNzb2Np
YXRlQnVnKTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tCdWdMaXN0Lmh0bWxUZW1wbGF0
ZSk6IEFkZGVkLgorCisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvY2hhcnQtcGFuZS1i
YXNlLmpzOgorICAgICAgICAoQ2hhcnRQYW5lQmFzZS5odG1sVGVtcGxhdGUpOiBBZGRlZCBhIGhv
b2sgdG8gaW5zZXJ0IG1vcmUgY29udGVudCBhdCB0aGUgZW5kIGluIEFuYWx5c2lzVGFza0NoYXJ0
UGFuZS4KKyAgICAgICAgKENoYXJ0UGFuZUJhc2UucGFuZUZvb3RlclRlbXBsYXRlKTogQWRkZWQu
CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91
cC1mb3JtLmpzOgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSk6CisgICAgICAg
IChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5zZXRDb21taXRTZXRNYXApOgor
ICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuc3RhcnRUZXN0aW5n
KTogUmVuYW1lZCBmcm9tIF9zdWJtaXR0ZWQuIE5vdyBkaXNwYXRjaGVzIGFuIGFjdGlvbgorICAg
ICAgICBieSB0aGUgbmFtZSBvZiAic3RhcnRUZXN0aW5nIiBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhp
cy5fc3RhcnRDYWxsYmFjay4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJv
dG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOiBBZGRlZC4gTW92ZWQgdGhlIGxvZ2ljIHRv
IGF0dGFjaCBldmVudAorICAgICAgICBoYW5kbGVycyBoZXJlIHRvIGF2b2lkIGVhZ2VybHkgY3Jl
YXRpbmcgdGhlIHNoYWRvdyB0cmVlIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb21wdXRlQ29tbWl0U2V0TWFwKTogVXNl
IHRoZSBuZXdseSBhZGRlZCB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcAorICAgICAgICB0byBmaW5k
IHRoZSByZWxldmFudCBpbnB1dCBlbGVtZW50IGluc3RlYWQgb2YgcnVubmluZyBhIHF1ZXJ5U2Vs
ZWN0b3IuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5yZW5k
ZXIpOiBMYXppbHkgaW52b2tlIF9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlLiBUaGlzIGF2b2lk
cworICAgICAgICBvdmVycmlkaW5nIHRoZSBjdXN0b21pemVkIHJldmlzaW9ucyB3aGVuIHRoZSB1
c2VyIGZpbmFsbHkgdHlwZXMgaW4gdGhlIHRlc3QgZ3JvdXAgbmFtZS4KKyAgICAgICAgKEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxl
KTogRXh0cmFjdGVkIGZyb20gcmVuZGVyLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKTogTWFkZSB0aGlz
IGEgbm9uLXN0YXRpYyBtZXRob2QKKyAgICAgICAgc2luY2UgaXQgbmVlZHMgdG8gdXBkYXRlIHRo
aXMuX3JldmlzaW9uRWRpdG9yTWFwIG5vdy4gTWVyZ2VkIF9jb25zdHJ1Y3RSZXZpc2lvblJhZGlv
QnV0dG9ucy4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9j
cmVhdGVSYWRpb0J1dHRvbik6IERlbGV0ZWQuIFNlZSBhYm92ZS4KKyAgICAgICAgKEN1c3RvbWl6
YWJsZVRlc3RHcm91cEZvcm0uY3NzVGVtcGxhdGUpOgorICAgICAgICAoQ3VzdG9taXphYmxlVGVz
dEdyb3VwRm9ybS5mb3JtQ29udGVudCk6IFVzZSBJRHMgaW5zdGVhZCBvZiBjbGFzc2VzIHRvIG1h
a2UgdGhpcy5jb250ZW50KElEKSB3b3JrLgorCisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVu
dHMvbXV0YWJsZS1saXN0LXZpZXcuanM6CisgICAgICAgIChNdXRhYmxlTGlzdFZpZXcucHJvdG90
eXBlLnNldExpc3QpOgorICAgICAgICAoTXV0YWJsZUxpc3RWaWV3LnByb3RvdHlwZS5zZXRLaW5k
TGlzdCk6CisgICAgICAgIChNdXRhYmxlTGlzdFZpZXcucHJvdG90eXBlLnNldEFkZENhbGxiYWNr
KTogRGVsZXRlZC4gUmVwbGFjZWQgYnkgImFkZEl0ZW0iIGFjdGlvbi4KKyAgICAgICAgKE11dGFi
bGVMaXN0Vmlldy5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKE11dGFibGVMaXN0SXRlbS5w
cm90b3R5cGUuY29udGVudCk6CisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9yZXN1
bHRzLXRhYmxlLmpzOgorICAgICAgICAoUmVzdWx0c1RhYmxlKTogUmVtb3ZlZCB0aGlzLl9yYW5n
ZVNlbGVjdG9yTGFiZWxzLCB0aGlzLl9yYW5nZVNlbGVjdG9yQ2FsbGJhY2ssIGFuZCB0aGlzLl9z
ZWxlY3RlZFJhbmdlCisgICAgICAgIGFzIHRoZXkgYXJlIG9ubHkgdXNlZCBieSBBbmFseXNpc1Jl
c3VsdHNWaWV3ZXIuIEFsc28gcmVwbGFjZWQgdGhpcy5fdmFsdWVGb3JtYXR0ZXIgYnkKKyAgICAg
ICAgdGhpcy5fYW5hbHlzaXNSZXN1bHRzVmlldyB3aGljaCBrbm93cyBhIG1ldHJpYy4KKyAgICAg
ICAgKFJlc3VsdHNUYWJsZS5wcm90b3R5cGUuc2V0VmFsdWVGb3JtYXR0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoUmVzdWx0c1RhYmxlLnByb3RvdHlwZS5zZXRSYW5nZVNlbGVjdG9yTGFiZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFJlc3VsdHNUYWJsZS5wcm90b3R5cGUuc2V0UmFuZ2VTZWxlY3Rv
ckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFJlc3VsdHNUYWJsZS5wcm90b3R5cGUuc2Vs
ZWN0ZWRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChSZXN1bHRzVGFibGUucHJvdG90eXBlLl9y
YW5nZVNlbGVjdG9yQ2xpY2tlZCk6IERlbGV0ZWQuCisgICAgICAgIChSZXN1bHRzVGFibGUucHJv
dG90eXBlLnNldEFuYWx5c2lzUmVzdWx0c1ZpZXcpOiBBZGRlZC4KKyAgICAgICAgKFJlc3VsdHNU
YWJsZS5wcm90b3R5cGUucmVuZGVyVGFibGUpOiBBZGRlZC4gUmVtb3ZlZCB0aGUgbG9naWMgdG8g
YWRkIF9yYW5nZVNlbGVjdG9yTGFiZWxzIHNpbmNlIGl0IGhhcworICAgICAgICBiZWVuIG1vdmVk
IHRvIEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5wcm90b3R5cGUucmVuZGVyIGluc2lkZSBidWlsZENv
bHVtbnMsIHdoaWNoIGFsc28gaW5zZXJ0cyBhZGRpdGlvbmFsCisgICAgICAgIGNvbHVtbnMgd2hp
Y2ggdXNlZCB0byBiZSBzdG9yZWQgb24gZWFjaCBSZXN1bHRzVGFibGVSb3cuIFVzZSB0aGUgc2Ft
ZSB0ZWNobmlxdWUgdG8gaW5zZXJ0IGFkZGl0aW9uYWwKKyAgICAgICAgaGVhZGVycy4gQWxzbyB0
YWtlIHRoZSBuYW1lICh0aGVhZCB0ciB0aCkgb2Ygcm93IGhlYWRlciAodGJvZHkgdHIgdGQpIGFz
IGFuIGFyZ3VtZW50IGFuZCBhdXRvbWF0aWNhbGx5CisgICAgICAgIGNyZWF0ZSBhIHRhYmxlIGNl
bGwgb2YgYW4gYXBwcm9wcmlhdGUgY29sc3Bhbi4KKyAgICAgICAgKFJlc3VsdHNUYWJsZS5wcm90
b3R5cGUuX2NyZWF0ZVJldmlzaW9uTGlzdENlbGxzKToKKyAgICAgICAgKFJlc3VsdHNUYWJsZS5w
cm90b3R5cGUuaGVhZGluZyk6IERlbGV0ZWQuIFN1cGVyc2VkZWQgYnkgYnVpbGRIZWFkZXJzIGNh
bGxiYWNrLgorICAgICAgICAoUmVzdWx0c1RhYmxlLnByb3RvdHlwZS5hZGRpdGlvbmFsSGVhZGlu
Zyk6IERpdHRvLgorICAgICAgICAoUmVzdWx0c1RhYmxlLnByb3RvdHlwZS5idWlsZFJvd0dyb3Vw
cyk6IERlbGV0ZWQuIEl0IGlzIG5vdyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZWFjaCBzdWJjbGFz
cyB0byBjYWxsCisgICAgICAgIFJlc3VsdHNUYWJsZSdzIHJlbmRlclRhYmxlKCkgaW4gdGhlIHN1
YmNsYXNzJyByZW5kZXIoKSBmdW5jdGlvbi4KKyAgICAgICAgKFJlc3VsdHNUYWJsZS5wcm90b3R5
cGUuX2NvbXB1dGVSZXBvc2l0b3J5TGlzdCk6IE5vIGxvbmdlciB0YWtlcyBleHRyYVJlcG9zaXRv
cmllcyBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgSW5zdGVhZCwgdGhpcyBmdW5jdGlvbiBub3cg
cmV0dXJucyBhIHBhaXIgb2YgdGhlIHJlcG9zaXRvcnkgbGlzdCBhbmQgdGhlIGxpc3Qgb2YgY29u
c3RhbnQgY29tbWl0cy4KKyAgICAgICAgKFJlc3VsdHNUYWJsZS5odG1sVGVtcGxhdGUpOgorICAg
ICAgICAoUmVzdWx0c1RhYmxlLmNzc1RlbXBsYXRlKToKKworICAgICAgICAqIHB1YmxpYy92My9j
b21wb25lbnRzL3Rlc3QtZ3JvdXAtZm9ybS5qczoKKyAgICAgICAgKFRlc3RHcm91cEZvcm0pOiBB
dm9pZCBlYWdlcmx5IGNyZWF0aW5nIHRoZSBzaGFkb3cgdHJlZS4gQWxzbyByZW1vdmVkIHRoZSBy
ZW1vdmVkIHRoZSBkZWFkIGNvZGUuCisgICAgICAgIChUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5z
ZXRSZXBldGl0aW9uQ291bnQpOiBTaW1wbHkgb3ZlcnJpZGUgdGhlIHZhbHVlIG9mIHRoZSBzZWxl
Y3QgZWxlbWVudC4KKyAgICAgICAgKFRlc3RHcm91cEZvcm0ucHJvdG90eXBlLmRpZENvbnN0cnVj
dFNoYWRvd1RyZWUpOiBBZGRlZC4gQXR0YWNoIGV2ZW50IGhhbmRsZXJzIGhlcmUgdG8gYXZvaWQg
ZWFnZXJseQorICAgICAgICBjcmVhdGluZyB0aGUgc2hhZG93IHRyZWUgaW4gdGhlIGNvbnN0cnVj
dG9yLgorICAgICAgICAoVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuc3RhcnRUZXN0aW5nKTogUmVu
YW1lZCBmcm9tIF9zdWJtaXR0ZWQuIERpc3BhdGNoICJzdGFydFRlc3RpbmciIGFjdGlvbiBpbnN0
ZWFkCisgICAgICAgIG9mIGludm9raW5nIF9zdGFydENhbGxiYWNrIHdoaWNoIGhhcyBiZWVuIHJl
bW92ZWQuCisgICAgICAgIChUZXN0R3JvdXBGb3JtLmh0bWxUZW1wbGF0ZSk6CisgICAgICAgIChU
ZXN0R3JvdXBGb3JtLmZvcm1Db250ZW50KToKKworICAgICAgICAqIHB1YmxpYy92My9jb21wb25l
bnRzL3Rlc3QtZ3JvdXAtcmVzdWx0cy10YWJsZS5qczoKKyAgICAgICAgKFRlc3RHcm91cFJlc3Vs
dHNUYWJsZSk6CisgICAgICAgIChUZXN0R3JvdXBSZXN1bHRzVGFibGUucHJvdG90eXBlLmRpZFVw
ZGF0ZVJlc3VsdHMpOiBEZWxldGVkLiBObyBsb25nZXIgbmVlZWQgcGVyIHNldEFuYWx5c2lzUmVz
dWx0c1ZpZXcKKyAgICAgICAgaW4gUmVzdWx0c1RhYmxlLgorICAgICAgICAoVGVzdEdyb3VwUmVz
dWx0c1RhYmxlLnByb3RvdHlwZS5zZXRUZXN0R3JvdXApOgorICAgICAgICAoVGVzdEdyb3VwUmVz
dWx0c1RhYmxlLnByb3RvdHlwZS5oZWFkaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RHcm91
cFJlc3VsdHNUYWJsZS5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKFRlc3RHcm91cFJlc3Vs
dHNUYWJsZS5wcm90b3R5cGUuX3JlbmRlclRlc3RHcm91cCk6IEV4dHJhY3RlZCBmcm9tIHJlbmRl
ci4KKyAgICAgICAgKFRlc3RHcm91cFJlc3VsdHNUYWJsZS5wcm90b3R5cGUuX2J1aWxkUm93R3Jv
dXBzKTogUmVuYW1lZCBmcm9tIGJ1aWxkUm93R3JvdXBzLgorICAgICAgICAoVGVzdEdyb3VwUmVz
dWx0c1RhYmxlLnByb3RvdHlwZS5fYnVpbGRSb3dHcm91cEZvckNvbW1pdFNldCk6IEV4dHJhY3Rl
ZCBmcm9tIGJ1aWxkUm93R3JvdXBzLgorICAgICAgICAoVGVzdEdyb3VwUmVzdWx0c1RhYmxlLnBy
b3RvdHlwZS5fYnVpbGRDb21wYXJpc29uUm93KTogRXh0cmFjdGVkIGZyb20gYnVpbGRSb3dHcm91
cHMuYnVpbGRSb3dHcm91cHMKKworICAgICAgICAqIHB1YmxpYy92My9pbmRleC5odG1sOiBJbmNs
dWRlIGFuYWx5c2lzLXRhc2stYnVnLWxpc3QuanMuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9k
ZWxzL2FuYWx5c2lzLXJlc3VsdHMuanM6CisgICAgICAgIChBbmFseXNpc1Jlc3VsdHMpOiBJbnZl
cnRlZCB0aGUgbWFwIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBjcmVhdGUgYSB2aWV3IGJhc2VkIG9u
IG1ldHJpYy4KKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0cy5wcm90b3R5cGUuZmluZCk6IERpdHRv
LgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzLnByb3RvdHlwZS5hZGQpOiBEaXR0by4KKyAgICAg
ICAgKEFuYWx5c2lzUmVzdWx0cy5wcm90b3R5cGUudmlld0Zvck1ldHJpYyk6IEFkZGVkLgorICAg
ICAgICAoQW5hbHlzaXNSZXN1bHRzLmZldGNoKToKKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1Zp
ZXcpOiBBZGRlZC4KKyAgICAgICAgKEFuYWx5c2lzUmVzdWx0c1ZpZXcucHJvdG90eXBlLm1ldHJp
Yyk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNSZXN1bHRzVmlldy5wcm90b3R5cGUucmVzdWx0
Rm9yQnVpbGRJZCk6IEFkZGVkLgorCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9idWlsZC1y
ZXF1ZXN0LmpzOgorICAgICAgICAoQnVpbGRSZXF1ZXN0LnJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChCdWlsZFJlcXVlc3Quc2V0UmVzdWx0KTogRGVsZXRlZC4KKworICAgICAgICAqIHB1Ymxp
Yy92My9tb2RlbHMvdGVzdC1ncm91cC5qczoKKyAgICAgICAgKFRlc3RHcm91cCk6IFJlbW92ZWQg
dGhpcy5fYWxsQ29tbWl0U2V0cyBzaW5jZSBpdCB3YXMgbmV2ZXIgdXNlZC4KKyAgICAgICAgKFRl
c3RHcm91cC5wcm90b3R5cGUuZGlkU2V0UmVzdWx0KTogRGVsZXRlZCBzaW5jZSBpdCB3YXMgbmV2
ZXIgdXNlZC4KKyAgICAgICAgKFRlc3RHcm91cC5wcm90b3R5cGUuY29tcGFyZVRlc3RSZXN1bHRz
KTogTm93IHRha2VzIGFuIGFycmF5IG9mIG1lYXN1cmVtZW50IHNldCB2YWx1ZXMuCisgICAgICAg
IChUZXN0R3JvdXAucHJvdG90eXBlLl92YWx1ZXNGb3JDb21taXRTZXQpOiBEZWxldGVkLgorCisg
ICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qczoKKyAgICAgICAg
KEFuYWx5c2lzVGFza0NoYXJ0UGFuZSk6IFRoaXMgY2xhc3Mgbm93IGluY2x1ZGVzIHRoZSBmb3Jt
IHRvIGN1dG9taXplIHRoZSByZXZpc2lvbnMuCisgICAgICAgIChBbmFseXNpc1Rhc2tDaGFydFBh
bmUucHJvdG90eXBlLnNldFNob3dGb3JtKTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tD
aGFydFBhbmUucHJvdG90eXBlLl9tYWluU2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKEFu
YWx5c2lzVGFza0NoYXJ0UGFuZS5wcm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6IEFk
ZGVkLiBEaXNwYXRjaGVzICJuZXdUZXN0R3JvdXAiIGFjdGlvbiB3aGVuCisgICAgICAgIHRoZSB1
c2VyIHByZXNzZXMgdGhlIGJ1dHRvbiB0byBzdGFydCBhIG5ldyBBL0IgdGVzdGluZyBmcm9tIHRo
ZSBjaGFydC4KKyAgICAgICAgKEFuYWx5c2lzVGFza0NoYXJ0UGFuZS5wcm90b3R5cGUucmVuZGVy
KTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tDaGFydFBhbmUucHJvdG90eXBlLnBhbmVG
b290ZXJUZW1wbGF0ZSk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrQ2hhcnRQYW5lLmNz
c1RlbXBsYXRlKToKKworICAgICAgICAoQW5hbHlzaXNUYXNrUmVzdWx0c1BhbmUpOiBBZGRlZC4g
RW5jYXBzdWxhdGVzIEFuYWx5c2lzUmVzdWx0c1ZpZXdlciBhbmQgQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybS4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lLnByb3RvdHlwZS5zZXRQ
b2ludHMpOiBBZGRlZC4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lLnByb3RvdHlw
ZS5zZXRUZXN0R3JvdXBzKTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tSZXN1bHRzUGFu
ZS5wcm90b3R5cGUuc2V0QW5hbHlzaXNSZXN1bHRzVmlldyk6IEFkZGVkLgorICAgICAgICAoQW5h
bHlzaXNUYXNrUmVzdWx0c1BhbmUucHJvdG90eXBlLnNldFNob3dGb3JtKTogQWRkZWQuCisgICAg
ICAgIChBbmFseXNpc1Rhc2tSZXN1bHRzUGFuZS5wcm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93
VHJlZSk6IEFkZGVkLiBEaXNwYXRjaGVzICJuZXdUZXN0R3JvdXAiIGFjdGlvbgorICAgICAgICB3
aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIGJ1dHRvbiB0byBzdGFydCBhIG5ldyBBL0IgdGVzdGlu
ZyBmcm9tIHRoZSBjaGFydC4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lLnByb3Rv
dHlwZS5yZW5kZXIpOiBBZGRlZC4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lLmh0
bWxUZW1wbGF0ZSk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrUmVzdWx0c1BhbmUuY3Nz
VGVtcGxhdGUpOiBBZGRlZC4KKworICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZSk6
IEFkZGVkLiBFbmNhcHN1bGF0ZXMgVGVzdEdyb3VwUmVzdWx0c1RhYmxlIGFuZCBDdXN0b21pemFi
bGVUZXN0R3JvdXBGb3JtLgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90
b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuc2V0VGVzdEdyb3Vwcyk6IEFkZGVkLgorICAgICAg
ICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5cGUuc2V0QW5hbHlzaXNSZXN1bHRz
Vmlldyk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90b3R5
cGUucmVuZGVyKTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnBy
b3RvdHlwZS5fcmVuZGVyVGVzdEdyb3Vwcyk6IEFkZGVkLiBVcGRhdGVzIHRoZSBsaXN0IG9mIHRl
c3QgZ3JvdXBzLiBIaWRlCisgICAgICAgIHRoZSBoaWRkZW4gZ3JvdXBzIHVubGVzcyBzaG93SGlk
ZGVuR3JvdXBzIGlzIHNldC4gVXBkYXRlcyB0aGlzLl90ZXN0R3JvdXBNYXAgc28gdGhhdCB0aGUg
dmlzaWJpbGl0eSBvZgorICAgICAgICBncm91cHMgYW5kIHRoZWlyIG5hbWVzIGNhbiBiZSB1cGRh
dGVkIHdpdGhvdXQgaGF2aW5nIHRvIHJlLXJlbmRlciB0aGUgZW50aXJlIGxpc3QuCisgICAgICAg
IChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLnByb3RvdHlwZS5fcmVuZGVyVGVzdEdyb3VwVmlz
aWJpbGl0eSk6IEFkZGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5wcm90
b3R5cGUuX3JlbmRlclRlc3RHcm91cE5hbWVzKTogQWRkZWQuCisgICAgICAgIChBbmFseXNpc1Rh
c2tUZXN0R3JvdXBQYW5lLnByb3RvdHlwZS5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCk6IEFkZGVk
LiBVcGRhdGUgVGVzdEdyb3VwUmVzdWx0c1RhYmxlIHdpdGgKKyAgICAgICAgdGhlIHNlbGVjdGVk
IHRlc3QgZ3JvdXAuIEFsc28gaGlnaGxpZ2h0IHRoZSBsaXN0IHZpZXcsIGFuZCB1cGRhdGUgdGhl
IGhpZGUtdW5oaWRlIHRvZ2dsZSBidXR0b24ncyBsYWJlbAorICAgICAgICBhcyBuZWVkZWQuCisg
ICAgICAgIChBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lLmh0bWxUZW1wbGF0ZSk6IEFkZGVkLgor
ICAgICAgICAoQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZS5jc3NUZW1wbGF0ZSk6IEFkZGVkLgor
CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlKTogRGVsZXRlZCBhIG1hc3NpdmUgbnVtYmVyIG9m
IGluc3RhbmNlIHZhcmlhYmxlcy4gVGhleSBhcmUgbm93IG1hbmdlZCBieSBuZXdseSBhZGRlZAor
ICAgICAgICBBbmFseXNpc1Rhc2tDaGFydFBhbmUsIEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lLCBh
bmQgQW5hbHlzaXNUYXNrVGVzdEdyb3VwUGFuZQorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5w
cm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6IEFkZGVkLiBBdHRhY2ggdmFyaW91cyBl
dmVudCBoYW5kbGVycyBoZXJlIHRvIGF2b2lkCisgICAgICAgIGVhZ2VybHkgY3JlYXRpbmcgdGhl
IHNoYWRvdyB0cmVlIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKEFuYWx5c2lzVGFza1Bh
Z2UucHJvdG90eXBlLl9mZXRjaFJlbGF0ZWRJbmZvRm9yVGFza0lkKToKKyAgICAgICAgKEFuYWx5
c2lzVGFza1BhZ2UucHJvdG90eXBlLl9kaWRGZXRjaFRhc2spOiBObyBsb25nZXIgc2V0cyB0aGUg
dmFsdWUgZm9ybWF0dGVyIHRvIHRoZSByZXN1bHRzIHZpZXdlcgorICAgICAgICBhbmQgdGhlIHJl
c3VsdHMgdGFibGUgYXMgdGhleSBub3cgcmVjaWV2ZSBBbmFseXNpc1Jlc3VsdHNWaWV3IGxhdGVy
IGluIF9hc3NpZ25UZXN0UmVzdWx0c0lmUG9zc2libGUuCisgICAgICAgIChBbmFseXNpc1Rhc2tQ
YWdlLnByb3RvdHlwZS5fZGlkRmV0Y2hNZWFzdXJlbWVudCk6IFNldCB0aGUgbWV0cmljIHRvIHRo
ZSByZXN1bHRzIHZpZXdlci4KKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLl9k
aWRVcGRhdGVUZXN0R3JvdXBIaWRkZW5TdGF0ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdl
LnByb3RvdHlwZS5fYXNzaWduVGVzdFJlc3VsdHNJZlBvc3NpYmxlKTogQ3JlYXRlIEFuYWx5c2lz
UmVzdWx0c1ZpZXcgZnJvbSB0aGUgbmV3bHkKKyAgICAgICAgcmV0cmlldmVkIEFuYWx5c2lzUmVz
dWx0cyBhbmQgcGFzcyBpdCB0byBBbmFseXNpc1Rhc2tSZXN1bHRzUGFuZSBhbmQgQW5hbHlzaXNU
YXNrVGVzdEdyb3VwUGFuZS4KKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLnJl
bmRlcik6IERyYW1hdGljYWxseSBzaW1wbGlmaWVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFn
ZS5wcm90b3R5cGUuX3JlbmRlclRhc2tOYW1lQW5kU3RhdHVzKTogRXh0cmFjdGVkIGZyb20gcmVu
ZGVyLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JlbmRlclJlbGF0ZWRU
YXNrcyk6IERpdHRvLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JlbmRl
ckNhdXNlQW5kRml4ZXMpOiBEaXR0by4KKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90
eXBlLl9zaG93VGVzdEdyb3VwKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBl
Ll91cGRhdGVUYXNrTmFtZSk6IE5vdyB0YWtlcyB0aGUgbmV3IG5hbWUgYXMgYW4gYXJndW1lbnQu
CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fdXBkYXRlVGVzdEdyb3VwTmFt
ZSk6IE5vdyB0YWtlcyB0aGUgbmV3IG5hbWUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAg
ICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLl9oaWRlQ3VycmVudFRlc3RHcm91cCk6IE5v
dyB0YWtlcyB0aGUgdGVzdCBncm91cCB0byBoaWRlLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFn
ZS5wcm90b3R5cGUuX2Fzc29jaWF0ZUNvbW1pdCk6IE1vdmVkIHRvIEFuYWx5c2lzVGFza0J1Z0xp
c3QuCisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fZGlzc29jaWF0ZUNvbW1p
dCk6IERpdHRvLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX3JldHJ5Q3Vy
cmVudFRlc3RHcm91cCk6IE5vdyB0YWtlcyB0aGUgdGVzdCBncm91cCBhcyB0aGUgZmlyc3QgYXJn
dW1lbnQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fY2hhcnRTZWxlY3Rp
b25EaWRDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5
cGUuX2NyZWF0ZU5ld1Rlc3RHcm91cEZyb21DaGFydCk6IERlbGV0ZWQuCisgICAgICAgIChBbmFs
eXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fc2VsZWN0ZWRSb3dJbkFuYWx5c2lzUmVzdWx0c1ZpZXdl
cik6IERlbGV0ZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fY3JlYXRl
TmV3VGVzdEdyb3VwRnJvbVZpZXdlcik6IERlbGV0ZWQuCisgICAgICAgIChBbmFseXNpc1Rhc2tQ
YWdlLmh0bWxUZW1wbGF0ZSk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLmNzc1RlbXBsYXRl
KToKKworICAgICAgICAqIHVuaXQtdGVzdHMvdGVzdC1ncm91cHMtdGVzdHMuanM6IFVwZGF0ZWQg
YSB0ZXN0IGNhc2Ugd2hpY2ggd2FzIGV4cGVjdGluZyBCdWlsZFJlcWV1c3QncyByZXN1bHQsIHdo
aWNoCisgICAgICAgIGhhcyBiZWVuIHJlbW92ZWQsIHRvIGV4aXN0LgorCiAyMDE3LTAzLTIzICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNoYXJlIG1vcmUgY29k
ZSBiZXR3ZWVuIE1hbmlmZXN0R2VuZXJhdG9yIGFuZCAvYXBpL3RyaWdnZXJhYmxlcwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2FuYWx5
c2lzLXJlc3VsdHMtdmlld2VyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL2FuYWx5c2lzLXJlc3VsdHMtdmlld2VyLmpzCmluZGV4IDE1MDRlOTg3ZTJh
OTZjNGJhZDIwMTM2MDk3YjM1ZDFmOGE3OWY3NWUuLmYyMTAxNjI3ZTIzNmM4NTUwYzFlZWY2NTli
MzYyZTFmYmVjMjU4NTkgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy9hbmFseXNpcy1yZXN1bHRzLXZpZXdlci5qcworKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvYW5hbHlzaXMtcmVzdWx0cy12
aWV3ZXIuanMKQEAgLTUsMTI5ICs1LDEyNSBAQCBjbGFzcyBBbmFseXNpc1Jlc3VsdHNWaWV3ZXIg
ZXh0ZW5kcyBSZXN1bHRzVGFibGUgewogICAgICAgICBzdXBlcignYW5hbHlzaXMtcmVzdWx0cy12
aWV3ZXInKTsKICAgICAgICAgdGhpcy5fc3RhcnRQb2ludCA9IG51bGw7CiAgICAgICAgIHRoaXMu
X2VuZFBvaW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbWV0cmljID0gbnVsbDsKICAgICAgICAg
dGhpcy5fdGVzdEdyb3VwcyA9IG51bGw7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAg
PSBudWxsOwotICAgICAgICB0aGlzLl9yZW5kZXJlZEN1cnJlbnRUZXN0R3JvdXAgPSBudWxsOwot
ICAgICAgICB0aGlzLl9zaG91bGRSZW5kZXJUYWJsZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2Fk
ZGl0aW9uYWxIZWFkaW5nID0gbnVsbDsKLSAgICAgICAgdGhpcy5fdGVzdEdyb3VwQ2FsbGJhY2sg
PSBudWxsOworICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yTGFiZWxzID0gW107CisgICAgICAg
IHRoaXMuX3NlbGVjdGVkUmFuZ2UgPSB7fTsKICAgICAgICAgdGhpcy5fZXhwYW5kZWRQb2ludHMg
PSBuZXcgU2V0OwotICAgIH0KLQotICAgIHNldFRlc3RHcm91cENhbGxiYWNrKGNhbGxiYWNrKSB7
IHRoaXMuX3Rlc3RHcm91cENhbGxiYWNrID0gY2FsbGJhY2s7IH0KKyAgICAgICAgdGhpcy5fZ3Jv
dXBUb0NlbGxNYXAgPSBuZXcgTWFwOwogCi0gICAgc2V0Q3VycmVudFRlc3RHcm91cCh0ZXN0R3Jv
dXApCi0gICAgewotICAgICAgICB0aGlzLl9jdXJyZW50VGVzdEdyb3VwID0gdGVzdEdyb3VwOwor
ICAgICAgICB0aGlzLl9yZW5kZXJUZXN0R3JvdXBzTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRl
ZEZ1bmN0aW9uKHRoaXMucmVuZGVyVGVzdEdyb3Vwcy5iaW5kKHRoaXMpKTsKICAgICB9CiAKLSAg
ICBzZXRQb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpCisgICAgc2V0UmFuZ2VTZWxlY3Rvckxh
YmVscyhsYWJlbHMpIHsgdGhpcy5fcmFuZ2VTZWxlY3RvckxhYmVscyA9IGxhYmVsczsgfQorICAg
IHNlbGVjdGVkUmFuZ2UoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZFJhbmdlOyB9CisKKyAgICBz
ZXRQb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQsIG1ldHJpYykKICAgICB7CisgICAgICAgIHRo
aXMuX21ldHJpYyA9IG1ldHJpYzsKICAgICAgICAgdGhpcy5fc3RhcnRQb2ludCA9IHN0YXJ0UG9p
bnQ7CiAgICAgICAgIHRoaXMuX2VuZFBvaW50ID0gZW5kUG9pbnQ7Ci0gICAgICAgIHRoaXMuX3No
b3VsZFJlbmRlclRhYmxlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5fZXhwYW5kZWRQb2ludHMuY2xl
YXIoKTsKKyAgICAgICAgdGhpcy5fZXhwYW5kZWRQb2ludHMgPSBuZXcgU2V0OwogICAgICAgICB0
aGlzLl9leHBhbmRlZFBvaW50cy5hZGQoc3RhcnRQb2ludCk7CiAgICAgICAgIHRoaXMuX2V4cGFu
ZGVkUG9pbnRzLmFkZChlbmRQb2ludCk7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7
CiAgICAgfQogCi0gICAgc2V0VGVzdEdyb3Vwcyh0ZXN0R3JvdXBzKQorICAgIHNldFRlc3RHcm91
cHModGVzdEdyb3VwcywgY3VycmVudFRlc3RHcm91cCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Rl
c3RHcm91cHMgPSB0ZXN0R3JvdXBzOwotICAgICAgICB0aGlzLl9zaG91bGRSZW5kZXJUYWJsZSA9
IHRydWU7CisgICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAgPSBjdXJyZW50VGVzdEdyb3Vw
OworICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAotICAgIGRpZFVwZGF0
ZVJlc3VsdHMoKQorICAgIHNldEFuYWx5c2lzUmVzdWx0c1ZpZXcoYW5hbHlzaXNSZXN1bHRzVmll
dykKICAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3VsZFJlbmRlclRhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoYW5hbHlzaXNSZXN1bHRzVmlldyBpbnN0YW5jZW9mIEFuYWx5c2lz
UmVzdWx0c1ZpZXcpOworICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ID0gYW5hbHlz
aXNSZXN1bHRzVmlldzsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAK
ICAgICByZW5kZXIoKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl92YWx1ZUZvcm1hdHRlciB8
fCAhdGhpcy5fc3RhcnRQb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLQorICAgICAgICBzdXBl
ci5yZW5kZXIoKTsKICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgn
QW5hbHlzaXNSZXN1bHRzVmlld2VyJywgJ3JlbmRlcicpOwogCi0gICAgICAgIGlmICh0aGlzLl9z
aG91bGRSZW5kZXJUYWJsZSkgewotICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVuZGVyVGFibGUg
PSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkQ3VycmVudFRlc3RHcm91cCA9IG51
bGw7Ci0KLSAgICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ0Fu
YWx5c2lzUmVzdWx0c1ZpZXdlcicsICdyZW5kZXJUYWJsZScpOwotICAgICAgICAgICAgc3VwZXIu
cmVuZGVyKCk7Ci0gICAgICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgn
QW5hbHlzaXNSZXN1bHRzVmlld2VyJywgJ3JlbmRlclRhYmxlJyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fcmVuZGVyVGVzdEdyb3Vwc0xhemlseS5ldmFsdWF0ZSh0aGlzLl90ZXN0R3JvdXBz
LAorICAgICAgICAgICAgdGhpcy5fc3RhcnRQb2ludCwgdGhpcy5fZW5kUG9pbnQsIHRoaXMuX21l
dHJpYywgdGhpcy5fYW5hbHlzaXNSZXN1bHRzVmlldywgdGhpcy5fZXhwYW5kZWRQb2ludHMpOwog
Ci0gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGVzdEdyb3VwICE9IHRoaXMuX3JlbmRlcmVkQ3Vy
cmVudFRlc3RHcm91cCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkQ3VycmVudFRl
c3RHcm91cCkgewotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLl9jbGFzc0Zv
clRlc3RHcm91cCh0aGlzLl9yZW5kZXJlZEN1cnJlbnRUZXN0R3JvdXApOwotICAgICAgICAgICAg
ICAgIHZhciBlbGVtZW50ID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLicgKyBjbGFz
c05hbWUpOwotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KQotICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFRlc3RHcm91cCkgewotICAgICAgICAgICAgICAg
IHZhciBjbGFzc05hbWUgPSB0aGlzLl9jbGFzc0ZvclRlc3RHcm91cCh0aGlzLl9jdXJyZW50VGVz
dEdyb3VwKTsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJy4nICsgY2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVu
dCkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fcmVuZGVyZWRDdXJyZW50VGVzdEdy
b3VwID0gdGhpcy5fY3VycmVudFRlc3RHcm91cDsKLSAgICAgICAgfQorICAgICAgICBjb25zdCBz
ZWxlY3RlZENlbGwgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCd0ZC5zZWxlY3RlZCcp
OworICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsKQorICAgICAgICAgICAgc2VsZWN0ZWRDZWxsLmNs
YXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7CisgICAgICAgIGlmICh0aGlzLl9ncm91cFRvQ2Vs
bE1hcCAmJiB0aGlzLl9jdXJyZW50VGVzdEdyb3VwKQorICAgICAgICAgICAgdGhpcy5fZ3JvdXBU
b0NlbGxNYXAuZ2V0KHRoaXMuX2N1cnJlbnRUZXN0R3JvdXApLmNsYXNzTGlzdC5hZGQoJ3NlbGVj
dGVkJyk7CiAKICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0FuYWx5
c2lzUmVzdWx0c1ZpZXdlcicsICdyZW5kZXInKTsKICAgICB9CiAKLSAgICBoZWFkaW5nKCkgeyBy
ZXR1cm4gW0NvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudCgndGgnLCAnUG9pbnQnKV07IH0KLSAg
ICBhZGRpdGlvbmFsSGVhZGluZygpIHsgcmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxIZWFkaW5nOyB9
Ci0KLSAgICBidWlsZFJvd0dyb3VwcygpCisgICAgcmVuZGVyVGVzdEdyb3Vwcyh0ZXN0R3JvdXBz
LCBzdGFydFBvaW50LCBlbmRQb2ludCwgbWV0cmljLCBhbmFseXNpc1Jlc3VsdHMsIGV4cGFuZGVk
UG9pbnRzKQogICAgIHsKLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGlt
ZSgnQW5hbHlzaXNSZXN1bHRzVmlld2VyJywgJ2J1aWxkUm93R3JvdXBzJyk7CisgICAgICAgIGlm
ICghdGVzdEdyb3VwcyB8fCAhc3RhcnRQb2ludCB8fCAhZW5kUG9pbnQgfHwgIW1ldHJpYyB8fCAh
YW5hbHlzaXNSZXN1bHRzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHZh
ciB0ZXN0R3JvdXBzID0gdGhpcy5fdGVzdEdyb3VwcyB8fCBbXTsKLSAgICAgICAgdmFyIGNvbW1p
dFNldHNJblRlc3RHcm91cHMgPSB0aGlzLl9jb2xsZWN0Q29tbWl0U2V0c0luVGVzdEdyb3Vwcyh0
ZXN0R3JvdXBzKTsKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgn
QW5hbHlzaXNSZXN1bHRzVmlld2VyJywgJ3JlbmRlclRlc3RHcm91cHMnKTsKIAotICAgICAgICB2
YXIgcm93VG9NYXRjaGluZ0NvbW1pdFNldHMgPSBuZXcgTWFwOwotICAgICAgICB2YXIgcm93TGlz
dCA9IHRoaXMuX2J1aWxkUm93c0ZvclBvaW50c0FuZFRlc3RHcm91cHMoY29tbWl0U2V0c0luVGVz
dEdyb3Vwcywgcm93VG9NYXRjaGluZ0NvbW1pdFNldHMpOworICAgICAgICBjb25zdCBjb21taXRT
ZXRzSW5UZXN0R3JvdXBzID0gdGhpcy5fY29sbGVjdENvbW1pdFNldHNJblRlc3RHcm91cHModGVz
dEdyb3Vwcyk7CisgICAgICAgIGNvbnN0IHJvd1RvTWF0Y2hpbmdDb21taXRTZXRzID0gbmV3IE1h
cDsKKyAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX2J1aWxkUm93c0ZvclBvaW50c0FuZFRlc3RH
cm91cHMoY29tbWl0U2V0c0luVGVzdEdyb3Vwcywgcm93VG9NYXRjaGluZ0NvbW1pdFNldHMpOwog
Ci0gICAgICAgIHZhciB0ZXN0R3JvdXBMYXlvdXRNYXAgPSBuZXcgTWFwOwotICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7Ci0gICAgICAgIHJvd0xpc3QuZm9yRWFjaChmdW5jdGlvbiAocm93LCByb3dJ
bmRleCkgewotICAgICAgICAgICAgdmFyIG1hdGNoaW5nQ29tbWl0U2V0cyA9IHJvd1RvTWF0Y2hp
bmdDb21taXRTZXRzLmdldChyb3cpOworICAgICAgICBjb25zdCB0ZXN0R3JvdXBMYXlvdXRNYXAg
PSBuZXcgTWFwOworICAgICAgICByb3dzLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHsKKyAg
ICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ29tbWl0U2V0cyA9IHJvd1RvTWF0Y2hpbmdDb21taXRT
ZXRzLmdldChyb3cpOwogICAgICAgICAgICAgaWYgKCFtYXRjaGluZ0NvbW1pdFNldHMpIHsKICAg
ICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChyb3cgaW5zdGFuY2VvZiBBbmFseXNpc1Jlc3Vs
dHNWaWV3ZXIuRXhwYW5kYWJsZVJvdyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBmb3IgKHZhciBlbnRyeSBvZiBtYXRjaGluZ0NvbW1pdFNl
dHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgdGVzdEdyb3VwID0gZW50cnkudGVzdEdyb3VwKCk7
CisgICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiBtYXRjaGluZ0NvbW1pdFNldHMpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCB0ZXN0R3JvdXAgPSBlbnRyeS50ZXN0R3JvdXAoKTsKIAotICAg
ICAgICAgICAgICAgIHZhciBibG9jayA9IHRlc3RHcm91cExheW91dE1hcC5nZXQodGVzdEdyb3Vw
KTsKKyAgICAgICAgICAgICAgICBsZXQgYmxvY2sgPSB0ZXN0R3JvdXBMYXlvdXRNYXAuZ2V0KHRl
c3RHcm91cCk7CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykgewotICAgICAgICAgICAgICAg
ICAgICBibG9jayA9IG5ldyBBbmFseXNpc1Jlc3VsdHNWaWV3ZXIuVGVzdEdyb3VwU3RhY2tpbmdC
bG9jaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RHcm91cCwgc2VsZi5fY2xhc3NGb3JU
ZXN0R3JvdXAodGVzdEdyb3VwKSwgc2VsZi5fb3BlblN0YWNraW5nQmxvY2suYmluZChzZWxmLCB0
ZXN0R3JvdXApKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBuZXcgQW5hbHlzaXNSZXN1
bHRzVmlld2VyLlRlc3RHcm91cFN0YWNraW5nQmxvY2sodGVzdEdyb3VwLCB0aGlzLl9hbmFseXNp
c1Jlc3VsdHNWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBUb0NlbGxN
YXAsICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Rlc3RHcm91cENsaWNrJywgdGVzdEdyb3Vw
KSk7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RHcm91cExheW91dE1hcC5zZXQodGVzdEdyb3Vw
LCBibG9jayk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJsb2NrLmFkZFJv
d0luZGV4KGVudHJ5LCByb3dJbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0g
ICAgICAgIHZhciBncmlkID0gbmV3IEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5UZXN0R3JvdXBTdGFj
a2luZ0dyaWQocm93TGlzdC5sZW5ndGgpOwotICAgICAgICBmb3IgKHZhciB0ZXN0R3JvdXAgb2Yg
dGVzdEdyb3VwcykgewotICAgICAgICAgICAgdmFyIGJsb2NrID0gdGVzdEdyb3VwTGF5b3V0TWFw
LmdldCh0ZXN0R3JvdXApOwotICAgICAgICAgICAgaWYgKGJsb2NrKQotICAgICAgICAgICAgICAg
IGdyaWQuaW5zZXJ0QmxvY2tUb0NvbHVtbihibG9jayk7CisgICAgICAgIGNvbnN0IFthZGRpdGlv
bmFsQ29sdW1uc0J5Um93LCBjb2x1bW5Db3VudF0gPSBBbmFseXNpc1Jlc3VsdHNWaWV3ZXIuX2xh
eW91dEJsb2Nrcyhyb3dzLmxlbmd0aCwgdGVzdEdyb3Vwcy5tYXAoKGdyb3VwKSA9PiB0ZXN0R3Jv
dXBMYXlvdXRNYXAuZ2V0KGdyb3VwKSkpOworCisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21w
b25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIGNvbnN0IGJ1aWxkSGVhZGVycyA9ICho
ZWFkZXJzKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAgIHRoaXMu
X3JhbmdlU2VsZWN0b3JMYWJlbHMubWFwKChsYWJlbCkgPT4gZWxlbWVudCgndGgnLCBsYWJlbCkp
LAorICAgICAgICAgICAgICAgIGhlYWRlcnMsCisgICAgICAgICAgICAgICAgY29sdW1uQ291bnQg
PyBlbGVtZW50KCd0ZCcsIHtjb2xzcGFuOiBjb2x1bW5Db3VudCArIDEsIGNsYXNzOiAnc3RhY2tp
bmctYmxvY2snfSkgOiBbXSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgfTsKKyAgICAgICAgY29u
c3QgYnVpbGRDb2x1bW5zID0gKGNvbHVtbnMsIHJvdywgcm93SW5kZXgpID0+IHsKKyAgICAgICAg
ICAgIHJldHVybiBbCisgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3RvckxhYmVscy5t
YXAoKGxhYmVsKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcm93LmNvbW1pdFNldCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RkJywgJycpOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdGhpcy5fc2VsZWN0ZWRSYW5nZVtsYWJl
bF0gPT0gcm93LmNvbW1pdFNldCgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBvbmNoYW5n
ZSA9ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2Vb
bGFiZWxdID0gcm93LmNvbW1pdFNldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
aXNwYXRjaEFjdGlvbigncmFuZ2VTZWxlY3RvckNsaWNrJywgbGFiZWwsIHJvdyk7CisgICAgICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50KCd0ZCcs
IGVsZW1lbnQoJ2lucHV0Jywge3R5cGU6ICdyYWRpbycsIG5hbWU6IGxhYmVsLCBjaGVja2VkLCBv
bmNoYW5nZX0pKTsKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAgICBjb2x1bW5z
LAorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb2x1bW5zQnlSb3dbcm93SW5kZXhdLAorICAg
ICAgICAgICAgXTsKICAgICAgICAgfQorICAgICAgICB0aGlzLnJlbmRlclRhYmxlKG1ldHJpYy5t
YWtlRm9ybWF0dGVyKDQpLCBbe3Jvd3N9XSwgJ1BvaW50JywgYnVpbGRIZWFkZXJzLCBidWlsZENv
bHVtbnMpOwogCi0gICAgICAgIGdyaWQubGF5b3V0KCk7Ci0gICAgICAgIGZvciAodmFyIHJvd0lu
ZGV4ID0gMDsgcm93SW5kZXggPCByb3dMaXN0Lmxlbmd0aDsgcm93SW5kZXgrKykKLSAgICAgICAg
ICAgIHJvd0xpc3Rbcm93SW5kZXhdLnNldEFkZGl0aW9uYWxDb2x1bW5zKGdyaWQuY3JlYXRlQ2Vs
bHNGb3JSb3cocm93SW5kZXgpKTsKLQotICAgICAgICB0aGlzLl9hZGRpdGlvbmFsSGVhZGluZyA9
IGdyaWQuX2NvbHVtbnMgPyBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQoJ3RkJywge2NvbHNw
YW46IGdyaWQuX2NvbHVtbnMubGVuZ3RoICsgMSwgY2xhc3M6ICdzdGFja2luZy1ibG9jayd9KSA6
IFtdOworICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNS
ZXN1bHRzVmlld2VyJywgJ3JlbmRlclRlc3RHcm91cHMnKTsKIAotICAgICAgICBJbnN0cnVtZW50
YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNSZXN1bHRzVmlld2VyJywgJ2J1aWxkUm93
R3JvdXBzJyk7Ci0KLSAgICAgICAgcmV0dXJuIFt7cm93czogcm93TGlzdH1dOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBfY29sbGVjdENvbW1pdFNldHNJblRlc3RHcm91cHMo
dGVzdEdyb3VwcykKQEAgLTIzNSwxNyArMjMxLDYgQEAgY2xhc3MgQW5hbHlzaXNSZXN1bHRzVmll
d2VyIGV4dGVuZHMgUmVzdWx0c1RhYmxlIHsKICAgICAgICAgcmV0dXJuIHJvd0xpc3Q7CiAgICAg
fQogCi0gICAgX2NsYXNzRm9yVGVzdEdyb3VwKHRlc3RHcm91cCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAnc3RhY2tlZC10ZXN0LWdyb3VwLScgKyB0ZXN0R3JvdXAuaWQoKTsKLSAgICB9Ci0KLSAg
ICBfb3BlblN0YWNraW5nQmxvY2sodGVzdEdyb3VwKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X3Rlc3RHcm91cENhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fdGVzdEdyb3VwQ2FsbGJhY2so
dGVzdEdyb3VwKTsKLSAgICB9Ci0gICAgCiAgICAgX2V4cGFuZEJldHdlZW4ocG9pbnRCZWZvcmVF
eHBhbnNpb24sIHBvaW50QWZ0ZXJFeHBhbnNpb24pCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydChwb2ludEJlZm9yZUV4cGFuc2lvbi5zZXJpZXMgPT0gcG9pbnRBZnRlckV4cGFuc2lvbi5z
ZXJpZXMpOwpAQCAtMjU3LDEyICsyNDIsOTkgQEAgY2xhc3MgQW5hbHlzaXNSZXN1bHRzVmlld2Vy
IGV4dGVuZHMgUmVzdWx0c1RhYmxlIHsKICAgICAgICAgdmFyIGluY3JlbWVudCA9IE1hdGguY2Vp
bCgoaW5kZXhBZnRlckVuZCAtIGluZGV4QmVmb3JlU3RhcnQpIC8gNSk7CiAgICAgICAgIGlmIChp
bmNyZW1lbnQgPCAzKQogICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKKworICAgICAgICBjb25z
dCBleHBhbmRlZFBvaW50cyA9IG5ldyBTZXQoWy4uLnRoaXMuX2V4cGFuZGVkUG9pbnRzXSk7CiAg
ICAgICAgIGZvciAodmFyIGkgPSBpbmRleEJlZm9yZVN0YXJ0ICsgMTsgaSA8IGluZGV4QWZ0ZXJF
bmQ7IGkgKz0gaW5jcmVtZW50KQotICAgICAgICAgICAgdGhpcy5fZXhwYW5kZWRQb2ludHMuYWRk
KHNlcmllcy5maW5kUG9pbnRCeUluZGV4KGkpKTsKLSAgICAgICAgdGhpcy5fc2hvdWxkUmVuZGVy
VGFibGUgPSB0cnVlOworICAgICAgICAgICAgZXhwYW5kZWRQb2ludHMuYWRkKHNlcmllcy5maW5k
UG9pbnRCeUluZGV4KGkpKTsKKyAgICAgICAgdGhpcy5fZXhwYW5kZWRQb2ludHMgPSBleHBhbmRl
ZFBvaW50czsKKwogICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAorICAg
IHN0YXRpYyBfbGF5b3V0QmxvY2tzKHJvd0NvdW50LCBibG9ja3MpCisgICAgeworICAgICAgICBj
b25zdCBzb3J0ZWRCbG9ja3MgPSB0aGlzLl9zb3J0QmxvY2tzQnlSb3coYmxvY2tzKTsKKworICAg
ICAgICBjb25zdCBjb2x1bW5zID0gW107CisgICAgICAgIGZvciAoY29uc3QgYmxvY2sgb2Ygc29y
dGVkQmxvY2tzKQorICAgICAgICAgICAgdGhpcy5faW5zZXJ0QmxvY2tJbkZpcnN0QXZhaWxhYmxl
Q29sdW1uKGNvbHVtbnMsIGJsb2NrKTsKKworICAgICAgICBjb25zdCByb3dzID0gbmV3IEFycmF5
KHJvd0NvdW50KTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKQor
ICAgICAgICAgICAgcm93c1tpXSA9IHRoaXMuX2NyZWF0ZUNlbGxzRm9yUm93KGNvbHVtbnMsIGkp
OworCisgICAgICAgIHJldHVybiBbcm93cywgY29sdW1ucy5sZW5ndGhdOworICAgIH0KKworICAg
IHN0YXRpYyBfc29ydEJsb2Nrc0J5Um93KGJsb2NrcykKKyAgICB7CisgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgYmxvY2tzW2ldLmlu
ZGV4ID0gaTsKKworICAgICAgICByZXR1cm4gYmxvY2tzLnNsaWNlKDApLnNvcnQoKGJsb2NrMSwg
YmxvY2syKSA9PiB7CisgICAgICAgICAgICBjb25zdCBzdGFydFJvd0RpZmYgPSBibG9jazEuc3Rh
cnRSb3dJbmRleCgpIC0gYmxvY2syLnN0YXJ0Um93SW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChz
dGFydFJvd0RpZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Um93RGlmZjsKKworICAg
ICAgICAgICAgLy8gT3JkZXIgYmFja3dhcmRzIGZvciBlbmQgcm93cyBpbiBvcmRlciB0byBwbGFj
ZSB0ZXN0IGdyb3VwcyB3aXRoIGEgbGFyZ2VyIHJhbmdlIGF0IHRoZSBiZWdpbm5pbmcuCisgICAg
ICAgICAgICBjb25zdCBlbmRSb3dEaWZmID0gYmxvY2syLmVuZFJvd0luZGV4KCkgLSBibG9jazEu
ZW5kUm93SW5kZXgoKTsKKyAgICAgICAgICAgIGlmIChlbmRSb3dEaWZmKQorICAgICAgICAgICAg
ICAgIHJldHVybiBlbmRSb3dEaWZmOworCisgICAgICAgICAgICByZXR1cm4gYmxvY2sxLmluZGV4
IC0gYmxvY2syLmluZGV4OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGF0aWMgX2luc2Vy
dEJsb2NrSW5GaXJzdEF2YWlsYWJsZUNvbHVtbihjb2x1bW5zLCBuZXdCbG9jaykKKyAgICB7Cisg
ICAgICAgIGZvciAoY29uc3QgZXhpc3RpbmdDb2x1bW4gb2YgY29sdW1ucykgeworICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZ0NvbHVtbi5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9jayA9IGV4aXN0aW5nQ29sdW1uW2ldOworICAg
ICAgICAgICAgICAgIGlmICgoIWkgfHwgZXhpc3RpbmdDb2x1bW5baSAtIDFdLmVuZFJvd0luZGV4
KCkgPCBuZXdCbG9jay5zdGFydFJvd0luZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG5l
d0Jsb2NrLmVuZFJvd0luZGV4KCkgPCBjdXJyZW50QmxvY2suc3RhcnRSb3dJbmRleCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ29sdW1uLnNwbGljZShpLCAwLCBuZXdCbG9jayk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBsYXN0QmxvY2sgPSBleGlzdGluZ0NvbHVtbltleGlz
dGluZ0NvbHVtbi5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxhc3RC
bG9jayk7CisgICAgICAgICAgICBpZiAobGFzdEJsb2NrLmVuZFJvd0luZGV4KCkgPCBuZXdCbG9j
ay5zdGFydFJvd0luZGV4KCkpIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ0NvbHVtbi5wdXNo
KG5ld0Jsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgY29sdW1ucy5wdXNoKFtuZXdCbG9ja10pOworICAgIH0KKworICAgIHN0
YXRpYyBfY3JlYXRlQ2VsbHNGb3JSb3coY29sdW1ucywgcm93SW5kZXgpCisgICAgeworICAgICAg
ICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBj
b25zdCBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworCisgICAgICAgIGNvbnN0IGNy
YXRlRW1wdHlDZWxsID0gKHJvd3NwYW4pID0+IGVsZW1lbnQoJ3RkJywge3Jvd3NwYW46IHJvd3Nw
YW4sIGNsYXNzOiAnc3RhY2tpbmctYmxvY2snfSwgJycpOworCisgICAgICAgIGNvbnN0IGNlbGxz
ID0gW2VsZW1lbnQoJ3RkJywge2NsYXNzOiAnc3RhY2tpbmctYmxvY2snfSwgJycpXTsKKyAgICAg
ICAgZm9yIChjb25zdCBibG9ja3NJbkNvbHVtbiBvZiBjb2x1bW5zKSB7CisgICAgICAgICAgICBp
ZiAoIXJvd0luZGV4ICYmIGJsb2Nrc0luQ29sdW1uWzBdLnN0YXJ0Um93SW5kZXgoKSkgeworICAg
ICAgICAgICAgICAgIGNlbGxzLnB1c2goY3JhdGVFbXB0eUNlbGwoYmxvY2tzSW5Db2x1bW5bMF0u
c3RhcnRSb3dJbmRleCgpKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2Nrc0luQ29sdW1uLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NJbkNvbHVtbltp
XTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2suc3RhcnRSb3dJbmRleCgpID09IHJvd0luZGV4
KSB7CisgICAgICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goYmxvY2suY3JlYXRlU3RhY2tpbmdD
ZWxsKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBpICsgMSA8IGJsb2Nrc0luQ29sdW1uLmxl
bmd0aCA/IGJsb2Nrc0luQ29sdW1uW2kgKyAxXS5zdGFydFJvd0luZGV4KCkgOiB0aGlzLl9yb3dD
b3VudDsKKyAgICAgICAgICAgICAgICBjb25zdCByZW1haW5pbmdSb3dzID0gcm93Q291bnQgLSBi
bG9jay5lbmRSb3dJbmRleCgpIC0gMTsKKyAgICAgICAgICAgICAgICBpZiAocm93SW5kZXggPT0g
YmxvY2suZW5kUm93SW5kZXgoKSArIDEgJiYgcm93SW5kZXggPCByb3dDb3VudCkKKyAgICAgICAg
ICAgICAgICAgICAgY2VsbHMucHVzaChjcmF0ZUVtcHR5Q2VsbChyZW1haW5pbmdSb3dzKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2VsbHM7CisgICAgfQor
CiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYDxzZWN0
aW9uIGNsYXNzPSJhbmFseXNpcy12aWV3Ij4ke1Jlc3VsdHNUYWJsZS5odG1sVGVtcGxhdGUoKX08
L3NlY3Rpb24+YDsKQEAgLTM3MSwxNDggKzQ0Myw1OSBAQCBBbmFseXNpc1Jlc3VsdHNWaWV3ZXIu
Q29tbWl0U2V0SW5UZXN0R3JvdXAgPSBjbGFzcyB7CiB9CiAKIEFuYWx5c2lzUmVzdWx0c1ZpZXdl
ci5UZXN0R3JvdXBTdGFja2luZ0Jsb2NrID0gY2xhc3MgewotICAgIGNvbnN0cnVjdG9yKHRlc3RH
cm91cCwgY2xhc3NOYW1lLCBjYWxsYmFjaykKKyAgICBjb25zdHJ1Y3Rvcih0ZXN0R3JvdXAsIGFu
YWx5c2lzUmVzdWx0c1ZpZXcsIGdyb3VwVG9DZWxsTWFwLCBjYWxsYmFjaykKICAgICB7CiAgICAg
ICAgIHRoaXMuX3Rlc3RHcm91cCA9IHRlc3RHcm91cDsKKyAgICAgICAgdGhpcy5fYW5hbHlzaXNS
ZXN1bHRzVmlldyA9IGFuYWx5c2lzUmVzdWx0c1ZpZXc7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNl
dEluZGV4Um93SW5kZXhNYXAgPSBbXTsKLSAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NO
YW1lOwotICAgICAgICB0aGlzLl9sYWJlbCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX3RpdGxlID0g
bnVsbDsKLSAgICAgICAgdGhpcy5fc3RhdHVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZ3JvdXBU
b0NlbGxNYXAgPSBncm91cFRvQ2VsbE1hcDsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxs
YmFjazsKICAgICB9CiAKICAgICBhZGRSb3dJbmRleChjb21taXRTZXRJblRlc3RHcm91cCwgcm93
SW5kZXgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRTZXRJblRlc3RHcm91
cCBpbnN0YW5jZW9mIEFuYWx5c2lzUmVzdWx0c1ZpZXdlci5Db21taXRTZXRJblRlc3RHcm91cCk7
Ci0gICAgICAgIHRoaXMuX2NvbW1pdFNldEluZGV4Um93SW5kZXhNYXAucHVzaCh7Y29tbWl0U2V0
OiBjb21taXRTZXRJblRlc3RHcm91cC5jb21taXRTZXQoKSwgcm93SW5kZXg6IHJvd0luZGV4fSk7
CisgICAgICAgIHRoaXMuX2NvbW1pdFNldEluZGV4Um93SW5kZXhNYXAucHVzaCh7Y29tbWl0U2V0
OiBjb21taXRTZXRJblRlc3RHcm91cC5jb21taXRTZXQoKSwgcm93SW5kZXh9KTsKICAgICB9CiAK
ICAgICB0ZXN0R3JvdXAoKSB7IHJldHVybiB0aGlzLl90ZXN0R3JvdXA7IH0KIAogICAgIGNyZWF0
ZVN0YWNraW5nQ2VsbCgpCiAgICAgewotICAgICAgICB0aGlzLl9jb21wdXRlVGVzdEdyb3VwU3Rh
dHVzKCk7CisgICAgICAgIGNvbnN0IHtsYWJlbCwgdGl0bGUsIHN0YXR1c30gPSB0aGlzLl9jb21w
dXRlVGVzdEdyb3VwU3RhdHVzKCk7CiAKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudEJhc2UuY3Jl
YXRlRWxlbWVudCgndGQnLCB7CisgICAgICAgIGNvbnN0IGNlbGwgPSBDb21wb25lbnRCYXNlLmNy
ZWF0ZUVsZW1lbnQoJ3RkJywgewogICAgICAgICAgICAgcm93c3BhbjogdGhpcy5lbmRSb3dJbmRl
eCgpIC0gdGhpcy5zdGFydFJvd0luZGV4KCkgKyAxLAotICAgICAgICAgICAgdGl0bGU6IHRoaXMu
X3RpdGxlLAotICAgICAgICAgICAgY2xhc3M6ICdzdGFja2luZy1ibG9jayAnICsgdGhpcy5fY2xh
c3NOYW1lICsgJyAnICsgdGhpcy5fc3RhdHVzLAorICAgICAgICAgICAgdGl0bGUsCisgICAgICAg
ICAgICBjbGFzczogJ3N0YWNraW5nLWJsb2NrICcgKyBzdGF0dXMsCiAgICAgICAgICAgICBvbmNs
aWNrOiB0aGlzLl9jYWxsYmFjaywKLSAgICAgICAgfSwgQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5r
KHRoaXMuX2xhYmVsLCB0aGlzLl90aXRsZSwgdGhpcy5fY2FsbGJhY2spKTsKKyAgICAgICAgfSwg
Q29tcG9uZW50QmFzZS5jcmVhdGVMaW5rKGxhYmVsLCB0aXRsZSwgdGhpcy5fY2FsbGJhY2spKTsK
KworICAgICAgICB0aGlzLl9ncm91cFRvQ2VsbE1hcC5zZXQodGhpcy5fdGVzdEdyb3VwLCBjZWxs
KTsKKworICAgICAgICByZXR1cm4gY2VsbDsKICAgICB9CiAKICAgICBpc0NvbXBsZXRlKCkgeyBy
ZXR1cm4gdGhpcy5fY29tbWl0U2V0SW5kZXhSb3dJbmRleE1hcC5sZW5ndGggPj0gMjsgfQogCiAg
ICAgc3RhcnRSb3dJbmRleCgpIHsgcmV0dXJuIHRoaXMuX2NvbW1pdFNldEluZGV4Um93SW5kZXhN
YXBbMF0ucm93SW5kZXg7IH0KICAgICBlbmRSb3dJbmRleCgpIHsgcmV0dXJuIHRoaXMuX2NvbW1p
dFNldEluZGV4Um93SW5kZXhNYXBbdGhpcy5fY29tbWl0U2V0SW5kZXhSb3dJbmRleE1hcC5sZW5n
dGggLSAxXS5yb3dJbmRleDsgfQotICAgIGlzVGhpbigpCisKKyAgICBfdmFsdWVzRm9yQ29tbWl0
U2V0KHRlc3RHcm91cCwgY29tbWl0U2V0KQogICAgIHsKLSAgICAgICAgdGhpcy5fY29tcHV0ZVRl
c3RHcm91cFN0YXR1cygpOwotICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzID09ICdmYWlsZWQn
OworICAgICAgICByZXR1cm4gdGVzdEdyb3VwLnJlcXVlc3RzRm9yQ29tbWl0U2V0KGNvbW1pdFNl
dCkubWFwKChyZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzaXNS
ZXN1bHRzVmlldy5yZXN1bHRGb3JCdWlsZElkKHJlcXVlc3QuYnVpbGRJZCgpKTsKKyAgICAgICAg
fSkuZmlsdGVyKChyZXN1bHQpID0+ICEhcmVzdWx0KS5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnZh
bHVlKTsKICAgICB9CiAKICAgICBfY29tcHV0ZVRlc3RHcm91cFN0YXR1cygpCiAgICAgewotICAg
ICAgICBpZiAodGhpcy5fc3RhdHVzIHx8ICF0aGlzLmlzQ29tcGxldGUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQorICAgICAgICBpZiAoIXRoaXMuaXNDb21wbGV0ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHtsYWJlbDogbnVsbCwgdGl0bGU6IG51bGwsIHN0YXR1czogbnVsbH07CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2NvbW1pdFNldEluZGV4Um93SW5kZXhNYXAubGVuZ3RoIDw9
IDIpOyAvLyBGSVhNRTogU3VwcG9ydCBoYXZpbmcgbW9yZSByb290IHNldHMuCi0KLSAgICAgICAg
dmFyIHJlc3VsdCA9IHRoaXMuX3Rlc3RHcm91cC5jb21wYXJlVGVzdFJlc3VsdHMoCi0gICAgICAg
ICAgICB0aGlzLl9jb21taXRTZXRJbmRleFJvd0luZGV4TWFwWzBdLmNvbW1pdFNldCwgdGhpcy5f
Y29tbWl0U2V0SW5kZXhSb3dJbmRleE1hcFsxXS5jb21taXRTZXQpOwotCi0gICAgICAgIHRoaXMu
X2xhYmVsID0gcmVzdWx0LmxhYmVsOwotICAgICAgICB0aGlzLl90aXRsZSA9IHJlc3VsdC5mdWxs
TGFiZWw7Ci0gICAgICAgIHRoaXMuX3N0YXR1cyA9IHJlc3VsdC5zdGF0dXM7Ci0gICAgfQotfQot
Ci1BbmFseXNpc1Jlc3VsdHNWaWV3ZXIuVGVzdEdyb3VwU3RhY2tpbmdHcmlkID0gY2xhc3Mgewot
ICAgIGNvbnN0cnVjdG9yKHJvd0NvdW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fYmxvY2tzID0g
W107Ci0gICAgICAgIHRoaXMuX2NvbHVtbnMgPSBudWxsOwotICAgICAgICB0aGlzLl9yb3dDb3Vu
dCA9IHJvd0NvdW50OwotICAgIH0KLQotICAgIGluc2VydEJsb2NrVG9Db2x1bW4obmV3QmxvY2sp
Ci0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChuZXdCbG9jayBpbnN0YW5jZW9mIEFuYWx5
c2lzUmVzdWx0c1ZpZXdlci5UZXN0R3JvdXBTdGFja2luZ0Jsb2NrKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IHRoaXMuX2Jsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAg
ICAgdmFyIGN1cnJlbnRCbG9jayA9IHRoaXMuX2Jsb2Nrc1tpXTsKLSAgICAgICAgICAgIGlmIChj
dXJyZW50QmxvY2suc3RhcnRSb3dJbmRleCgpID09IG5ld0Jsb2NrLnN0YXJ0Um93SW5kZXgoKQot
ICAgICAgICAgICAgICAgICYmIGN1cnJlbnRCbG9jay5lbmRSb3dJbmRleCgpID09IG5ld0Jsb2Nr
LmVuZFJvd0luZGV4KCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9ibG9ja3Muc3BsaWNlKGkg
KyAxLCAwLCBuZXdCbG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2Jsb2Nrcy5wdXNoKG5ld0Jsb2NrKTsKLSAgICB9
Ci0KLSAgICBsYXlvdXQoKQotICAgIHsKLSAgICAgICAgdGhpcy5fY29sdW1ucyA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBibG9jayBvZiB0aGlzLl9ibG9ja3MpCi0gICAgICAgICAgICB0aGlzLl9s
YXlvdXRCbG9jayhibG9jayk7Ci0gICAgfQotCi0gICAgX2xheW91dEJsb2NrKG5ld0Jsb2NrKQot
ICAgIHsKLSAgICAgICAgZm9yICh2YXIgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IHRo
aXMuX2NvbHVtbnMubGVuZ3RoOyBjb2x1bW5JbmRleCsrKSB7Ci0gICAgICAgICAgICB2YXIgZXhp
c3RpbmdDb2x1bW4gPSB0aGlzLl9jb2x1bW5zW2NvbHVtbkluZGV4XTsKLSAgICAgICAgICAgIGlm
IChuZXdCbG9jay5pc1RoaW4oKSAhPSBleGlzdGluZ0NvbHVtblswXS5pc1RoaW4oKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBl
eGlzdGluZ0NvbHVtbi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBjdXJyZW50
QmxvY2sgPSBleGlzdGluZ0NvbHVtbltpXTsKLSAgICAgICAgICAgICAgICBpZiAoKCFpIHx8IGV4
aXN0aW5nQ29sdW1uW2kgLSAxXS5lbmRSb3dJbmRleCgpIDwgbmV3QmxvY2suc3RhcnRSb3dJbmRl
eCgpKQotICAgICAgICAgICAgICAgICAgICAmJiBuZXdCbG9jay5lbmRSb3dJbmRleCgpIDwgY3Vy
cmVudEJsb2NrLnN0YXJ0Um93SW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBleGlzdGlu
Z0NvbHVtbi5zcGxpY2UoaSwgMCwgbmV3QmxvY2spOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIg
bGFzdEJsb2NrID0gZXhpc3RpbmdDb2x1bW5bZXhpc3RpbmdDb2x1bW4ubGVuZ3RoIC0gMV07Ci0g
ICAgICAgICAgICBpZiAobGFzdEJsb2NrLmVuZFJvd0luZGV4KCkgPCBuZXdCbG9jay5zdGFydFJv
d0luZGV4KCkpIHsKLSAgICAgICAgICAgICAgICBleGlzdGluZ0NvbHVtbi5wdXNoKG5ld0Jsb2Nr
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKFtuZXdCbG9ja10pOworICAgICAgICBjb25zdCBzdGFy
dFZhbHVlcyA9IHRoaXMuX3ZhbHVlc0ZvckNvbW1pdFNldCh0aGlzLl90ZXN0R3JvdXAsIHRoaXMu
X2NvbW1pdFNldEluZGV4Um93SW5kZXhNYXBbMF0uY29tbWl0U2V0KTsKKyAgICAgICAgY29uc3Qg
ZW5kVmFsdWVzID0gdGhpcy5fdmFsdWVzRm9yQ29tbWl0U2V0KHRoaXMuX3Rlc3RHcm91cCwgdGhp
cy5fY29tbWl0U2V0SW5kZXhSb3dJbmRleE1hcFsxXS5jb21taXRTZXQpOworICAgICAgICBjb25z
dCByZXN1bHQgPSB0aGlzLl90ZXN0R3JvdXAuY29tcGFyZVRlc3RSZXN1bHRzKHN0YXJ0VmFsdWVz
LCBlbmRWYWx1ZXMpOworICAgICAgICByZXR1cm4ge2xhYmVsOiByZXN1bHQubGFiZWwsIHRpdGxl
OiByZXN1bHQuZnVsbExhYmVsLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXN9OwogICAgIH0KLQotICAg
IGNyZWF0ZUNlbGxzRm9yUm93KHJvd0luZGV4KQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQg
PSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAgICAgIHZhciBsaW5rID0gQ29tcG9u
ZW50QmFzZS5jcmVhdGVMaW5rOwotCi0gICAgICAgIHZhciBjZWxscyA9IFtlbGVtZW50KCd0ZCcs
IHtjbGFzczogJ3N0YWNraW5nLWJsb2NrJ30sICcnKV07Ci0gICAgICAgIGZvciAodmFyIGNvbHVt
bkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCB0aGlzLl9jb2x1bW5zLmxlbmd0aDsgY29sdW1uSW5k
ZXgrKykgewotICAgICAgICAgICAgdmFyIGJsb2Nrc0luQ29sdW1uID0gdGhpcy5fY29sdW1uc1tj
b2x1bW5JbmRleF07Ci0gICAgICAgICAgICBpZiAoIXJvd0luZGV4ICYmIGJsb2Nrc0luQ29sdW1u
WzBdLnN0YXJ0Um93SW5kZXgoKSkgewotICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5f
Y3JlYXRlRW1wdHlTdGFja2luZ0NlbGwoYmxvY2tzSW5Db2x1bW5bMF0uc3RhcnRSb3dJbmRleCgp
KSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc0luQ29sdW1uLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGJsb2NrID0gYmxvY2tzSW5Db2x1bW5baV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLnN0YXJ0Um93SW5kZXgoKSA9PSByb3dJbmRleCkgewotICAgICAgICAgICAg
ICAgICAgICBjZWxscy5wdXNoKGJsb2NrLmNyZWF0ZVN0YWNraW5nQ2VsbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZh
ciByb3dDb3VudCA9IGkgKyAxIDwgYmxvY2tzSW5Db2x1bW4ubGVuZ3RoID8gYmxvY2tzSW5Db2x1
bW5baSArIDFdLnN0YXJ0Um93SW5kZXgoKSA6IHRoaXMuX3Jvd0NvdW50OwotICAgICAgICAgICAg
ICAgIHZhciByZW1haW5pbmdSb3dzID0gcm93Q291bnQgLSBibG9jay5lbmRSb3dJbmRleCgpIC0g
MTsKLSAgICAgICAgICAgICAgICBpZiAocm93SW5kZXggPT0gYmxvY2suZW5kUm93SW5kZXgoKSAr
IDEgJiYgcm93SW5kZXggPCByb3dDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVz
aCh0aGlzLl9jcmVhdGVFbXB0eVN0YWNraW5nQ2VsbChyZW1haW5pbmdSb3dzKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY2VsbHM7Ci0gICAgfQotCi0gICAg
X2NyZWF0ZUVtcHR5U3RhY2tpbmdDZWxsKHJvd3NwYW4sIGNvbnRlbnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50KCd0ZCcsIHtyb3dzcGFuOiByb3dz
cGFuLCBjbGFzczogJ3N0YWNraW5nLWJsb2NrJ30sICcnKTsKLSAgICB9Ci0KIH0KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9hbmFseXNp
cy10YXNrLWJ1Zy1saXN0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9j
b21wb25lbnRzL2FuYWx5c2lzLXRhc2stYnVnLWxpc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJmMDQzY2Q3
MTVkYTQyMTcwZDEzZWIyZDlkNGIwMWJhMWQyMzY4NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9hbmFseXNpcy10YXNrLWJ1
Zy1saXN0LmpzCkBAIC0wLDAgKzEsNTUgQEAKKworY2xhc3MgQW5hbHlzaXNUYXNrQnVnTGlzdCBl
eHRlbmRzIENvbXBvbmVudEJhc2UgeworCisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoJ2FuYWx5c2lzLXRhc2stYnVnLWxpc3QnKTsKKyAgICAgICAgdGhpcy5fdGFzayA9
IG51bGw7CisgICAgfQorCisgICAgc2V0VGFzayh0YXNrKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQodGFzayA9PSBudWxsIHx8IHRhc2sgaW5zdGFuY2VvZiBBbmFseXNpc1Rhc2spOwor
ICAgICAgICB0aGlzLl90YXNrID0gdGFzazsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICB9CisKKyAgICBkaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCkKKyAgICB7CisgICAgICAg
IHRoaXMucGFydCgnYnVnLWxpc3QnKS5zZXRLaW5kTGlzdChCdWdUcmFja2VyLmFsbCgpKTsKKyAg
ICAgICAgdGhpcy5wYXJ0KCdidWctbGlzdCcpLmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHRy
YWNrZXIsIGJ1Z051bWJlcikgPT4gdGhpcy5fYXNzb2NpYXRlQnVnKHRyYWNrZXIsIGJ1Z051bWJl
cikpOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBjb25zdCBidWdMaXN0
ID0gdGhpcy5fdGFzayA/IHRoaXMuX3Rhc2suYnVncygpLm1hcCgoYnVnKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IE11dGFibGVMaXN0SXRlbShidWcuYnVnVHJhY2tlcigpLCBidWcubGFi
ZWwoKSwgYnVnLnRpdGxlKCksIGJ1Zy51cmwoKSwKKyAgICAgICAgICAgICAgICAnRGlzc29jaWF0
ZSB0aGlzIGJ1ZycsICgpID0+IHRoaXMuX2Rpc3NvY2lhdGVCdWcoYnVnKSk7CisgICAgICAgIH0p
IDogW107CisgICAgICAgIHRoaXMucGFydCgnYnVnLWxpc3QnKS5zZXRMaXN0KGJ1Z0xpc3QpOwor
ICAgIH0KKworICAgIF9hc3NvY2lhdGVCdWcodHJhY2tlciwgYnVnTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQodHJhY2tlciBpbnN0YW5jZW9mIEJ1Z1RyYWNrZXIpOworICAg
ICAgICBidWdOdW1iZXIgPSBwYXJzZUludChidWdOdW1iZXIpOworCisgICAgICAgIHJldHVybiB0
aGlzLl90YXNrLmFzc29jaWF0ZUJ1Zyh0cmFja2VyLCBidWdOdW1iZXIpLnRoZW4oKCkgPT4gdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKSwgKGVycm9yKSA9PiB7CisgICAgICAgICAgICB0aGlzLmVucXVl
dWVUb1JlbmRlcigpOworICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBhc3NvY2lhdGUgdGhl
IGJ1ZzogJyArIGVycm9yKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgX2Rpc3NvY2lhdGVC
dWcoYnVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2suZGlzc29jaWF0ZUJ1Zyhi
dWcpLnRoZW4oKCkgPT4gdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKSwgKGVycm9yKSA9PiB7CisgICAg
ICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgYWxlcnQoJ0ZhaWxl
ZCB0byBkaXNzb2NpYXRlIHRoZSBidWc6ICcgKyBlcnJvcik7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKSB7IHJldHVybiBgPG11dGFibGUtbGlzdC12aWV3
IGlkPSJidWctbGlzdCI+PC9tdXRhYmxlLWxpc3Qtdmlldz5gOyB9CisKK30KKworQ29tcG9uZW50
QmFzZS5kZWZpbmVFbGVtZW50KCdhbmFseXNpcy10YXNrLWJ1Zy1saXN0JywgQW5hbHlzaXNUYXNr
QnVnTGlzdCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvY2hhcnQtcGFuZS1iYXNlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9jb21wb25lbnRzL2NoYXJ0LXBhbmUtYmFzZS5qcwppbmRleCBhZDM3OTY4NmIx
ODQwZWRjYzAyNGZhZWMzNDJkMWNjOGE5MmZjMWU5Li45NTY2MmM0YmFkZWYxYzBmOWZhMmRlNjJi
YzQ5YWQ4ZjFmNzBiMDE2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2NvbXBvbmVudHMvY2hhcnQtcGFuZS1iYXNlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jaGFydC1wYW5lLWJhc2UuanMKQEAgLTMx
NCwxMCArMzE0LDEyIEBAIGNsYXNzIENoYXJ0UGFuZUJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNl
IHsKICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAg
ICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICAke3RoaXMucGFuZUZvb3RlclRlbXBs
YXRlKCl9CiAgICAgICAgIGA7CiAgICAgfQogCiAgICAgc3RhdGljIHBhbmVIZWFkZXJUZW1wbGF0
ZSgpIHsgcmV0dXJuICcnOyB9CisgICAgc3RhdGljIHBhbmVGb290ZXJUZW1wbGF0ZSgpIHsgcmV0
dXJuICcnOyB9CiAKICAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQogICAgIHsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFi
bGUtdGVzdC1ncm91cC1mb3JtLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKaW5kZXggMWRmMTU1
MTg1ODQ2N2ZhNDJjN2U1OTNhYTIwNDU3Mzc3NzBlZmU3NS4uNDY5MzgwMTljYjM1YTI4MDk0ZTdm
MjA4ZTIzMmRmNGQyMDU2OWYyYiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKKysr
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6
YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKQEAgLTUsNDggKzUsNTUgQEAgY2xhc3MgQ3VzdG9taXph
YmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgIHsKICAgICAgICAg
c3VwZXIoJ2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0nKTsKICAgICAgICAgdGhpcy5fY29t
bWl0U2V0TWFwID0gbnVsbDsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRSZXBvc2l0b3J5bGlzdCA9
IG51bGw7Ci0gICAgICAgIHRoaXMuX2N1c3RvbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5f
bmFtZUNvbnRyb2wgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcubmFtZScpOwotICAg
ICAgICB0aGlzLl9uYW1lQ29udHJvbC5vbmlucHV0ID0gKCkgPT4geyB0aGlzLmVucXVldWVUb1Jl
bmRlcigpOyB9Ci0gICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5vbmNs
aWNrID0gdGhpcy5fY3VzdG9taXplLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX25hbWUgPSBu
dWxsOworICAgICAgICB0aGlzLl9pc0N1c3RvbWl6ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
cmV2aXNpb25FZGl0b3JNYXAgPSB7fTsKKworICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZp
c2lvblRhYmxlTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRl
ckN1c3RvbVJldmlzaW9uVGFibGUuYmluZCh0aGlzKSk7CiAgICAgfQogCiAgICAgc2V0Q29tbWl0
U2V0TWFwKG1hcCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldE1hcCA9IG1hcDsKLSAg
ICAgICAgdGhpcy5fY3VzdG9taXplZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0N1c3RvbWl6
ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKLSAg
ICBfc3VibWl0dGVkKCkKKyAgICBzdGFydFRlc3RpbmcoKQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX3N0YXJ0Q2FsbGJhY2spCi0gICAgICAgICAgICB0aGlzLl9zdGFydENhbGxiYWNrKHRoaXMu
X25hbWVDb250cm9sLnZhbHVlLCB0aGlzLl9yZXBldGl0aW9uQ291bnQsIHRoaXMuX2NvbXB1dGVD
b21taXRTZXRNYXAoKSk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3N0YXJ0VGVzdGlu
ZycsIHRoaXMuX3JlcGV0aXRpb25Db3VudCwgdGhpcy5fbmFtZSwgdGhpcy5fY29tcHV0ZUNvbW1p
dFNldE1hcCgpKTsKICAgICB9CiAKLSAgICBfY3VzdG9taXplKGV2ZW50KQorICAgIGRpZENvbnN0
cnVjdFNoYWRvd1RyZWUoKQogICAgIHsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LSAgICAgICAgdGhpcy5fY3VzdG9taXplZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuZW5xdWV1ZVRv
UmVuZGVyKCk7CisgICAgICAgIHN1cGVyLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUoKTsKKworICAg
ICAgICBjb25zdCBuYW1lQ29udHJvbCA9IHRoaXMuY29udGVudCgnbmFtZScpOworICAgICAgICBu
YW1lQ29udHJvbC5vbmlucHV0ID0gKCkgPT4geworICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5h
bWVDb250cm9sLnZhbHVlOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuY29udGVudCgnY3VzdG9taXplLWxpbmsnKS5vbmNsaWNr
ID0gdGhpcy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4geworICAgICAgICAgICAgdGhpcy5faXND
dXN0b21pemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7Cisg
ICAgICAgIH0pOwogICAgIH0KIAogICAgIF9jb21wdXRlQ29tbWl0U2V0TWFwKCkKICAgICB7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2NvbW1pdFNldE1hcCk7Ci0gICAgICAgIGlmICgh
dGhpcy5fY3VzdG9taXplZCkKKyAgICAgICAgaWYgKCF0aGlzLl9pc0N1c3RvbWl6ZWQpCiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY29tbWl0U2V0TWFwOwogCi0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX3JlbmRlcmVkUmVwb3NpdG9yeWxpc3QpOwotICAgICAgICB2YXIgbWFwID0ge307
Ci0gICAgICAgIGZvciAodmFyIGxhYmVsIGluIHRoaXMuX2NvbW1pdFNldE1hcCkgewotICAgICAg
ICAgICAgdmFyIGN1c3RvbUNvbW1pdFNldCA9IG5ldyBDdXN0b21Db21taXRTZXQ7Ci0gICAgICAg
ICAgICBmb3IgKHZhciByZXBvc2l0b3J5IG9mIHRoaXMuX3JlbmRlcmVkUmVwb3NpdG9yeWxpc3Qp
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybS5fY2xhc3NGb3JMYWJlbEFuZFJlcG9zaXRvcnkobGFiZWwsIHJlcG9zaXRvcnkpOwotICAg
ICAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3Io
Jy4nICsgY2xhc3NOYW1lKS52YWx1ZTsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChy
ZXZpc2lvbik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldmlzaW9uKQotICAgICAgICAgICAgICAg
ICAgICBjdXN0b21Db21taXRTZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnks
IHJldmlzaW9uKTsKKyAgICAgICAgY29uc3QgbWFwID0ge307CisgICAgICAgIGZvciAoY29uc3Qg
bGFiZWwgaW4gdGhpcy5fY29tbWl0U2V0TWFwKSB7CisgICAgICAgICAgICBjb25zdCBvcmlnaW5h
bENvbW1pdFNldCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgICAgIGNvbnN0IGN1c3Rv
bUNvbW1pdFNldCA9IG5ldyBDdXN0b21Db21taXRTZXQ7CisgICAgICAgICAgICBmb3IgKGxldCBy
ZXBvc2l0b3J5IG9mIHRoaXMuX2NvbW1pdFNldE1hcFtsYWJlbF0ucmVwb3NpdG9yaWVzKCkpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9IHRoaXMuX3JldmlzaW9uRWRp
dG9yTWFwW2xhYmVsXS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgY29uc29sZS5h
c3NlcnQocmV2aXNpb25FZGl0b3IpOworICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNldC5z
ZXRSZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFwW2xhYmVsXSA9IGN1c3RvbUNvbW1pdFNl
dDsKICAgICAgICAgfQpAQCAtNTYsNTggKzYzLDYxIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RH
cm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICByZW5kZXIoKQogICAgIHsKICAg
ICAgICAgc3VwZXIucmVuZGVyKCk7Ci0gICAgICAgIHZhciBtYXAgPSB0aGlzLl9jb21taXRTZXRN
YXA7CiAKLSAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignYnV0dG9uJykuZGlz
YWJsZWQgPSAhKG1hcCAmJiB0aGlzLl9uYW1lQ29udHJvbC52YWx1ZSk7Ci0gICAgICAgIHRoaXMu
Y29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b21pemUtbGluaycpLnN0eWxlLmRpc3BsYXkg
PSAhbWFwID8gJ25vbmUnIDogbnVsbDsKKyAgICAgICAgdGhpcy5jb250ZW50KCdzdGFydC1idXR0
b24nKS5kaXNhYmxlZCA9ICEodGhpcy5fY29tbWl0U2V0TWFwICYmIHRoaXMuX25hbWUpOworICAg
ICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1saW5rLWNvbnRhaW5lcicpLnN0eWxlLmRpc3Bs
YXkgPSAhdGhpcy5fY29tbWl0U2V0TWFwID8gJ25vbmUnIDogbnVsbDsKIAotICAgICAgICBpZiAo
IXRoaXMuX2N1c3RvbWl6ZWQpIHsKLSAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlz
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLXRhYmxlLWNvbnRhaW5lcicpLCBbXSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9u
VGFibGVMYXppbHkuZXZhbHVhdGUodGhpcy5fY29tbWl0U2V0TWFwLCB0aGlzLl9pc0N1c3RvbWl6
ZWQpOworICAgIH0KKworICAgIF9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlKGNvbW1pdFNldE1h
cCwgaXNDdXN0b21pemVkKQorICAgIHsKKyAgICAgICAgaWYgKCFjb21taXRTZXRNYXAgfHwgIWlz
Q3VzdG9taXplZCkgeworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgnY3VzdG9tLXRhYmxlJyksIFtdKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg
ICB9Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KG1hcCk7CiAKLSAgICAgICAgdmFyIHJlcG9zaXRv
cnlTZXQgPSBuZXcgU2V0OwotICAgICAgICB2YXIgY29tbWl0U2V0TGFiZWxzID0gW107Ci0gICAg
ICAgIGZvciAodmFyIGxhYmVsIGluIG1hcCkgewotICAgICAgICAgICAgZm9yICh2YXIgcmVwb3Np
dG9yeSBvZiBtYXBbbGFiZWxdLnJlcG9zaXRvcmllcygpKQorICAgICAgICBjb25zdCByZXBvc2l0
b3J5U2V0ID0gbmV3IFNldDsKKyAgICAgICAgY29uc3QgY29tbWl0U2V0TGFiZWxzID0gW107Cisg
ICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307CisgICAgICAgIGZvciAoY29uc3Qg
bGFiZWwgaW4gY29tbWl0U2V0TWFwKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRv
cnkgb2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3JpZXMoKSkKICAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5U2V0LmFkZChyZXBvc2l0b3J5KTsKICAgICAgICAgICAgIGNvbW1pdFNldExh
YmVscy5wdXNoKGxhYmVsKTsKKyAgICAgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwW2xh
YmVsXSA9IG5ldyBNYXA7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9yZW5kZXJlZFJlcG9z
aXRvcnlsaXN0ID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKEFy
cmF5LmZyb20ocmVwb3NpdG9yeVNldC52YWx1ZXMoKSkpOwotCi0gICAgICAgIHZhciBlbGVtZW50
ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OwotICAgICAgICB0aGlzLnJlbmRlclJlcGxh
Y2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmN1c3RvbS10YWJsZS1jb250YWluZXIn
KSwKLSAgICAgICAgICAgIGVsZW1lbnQoJ3RhYmxlJywge2NsYXNzOiAnY3VzdG9tLXRhYmxlJ30s
IFsKLSAgICAgICAgICAgICAgICBlbGVtZW50KCd0aGVhZCcsCi0gICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQoJ3RyJywKLSAgICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsICdS
ZXBvc2l0b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoZnVuY3Rpb24gKGxhYmVsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNv
bW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFiZWwpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSldKSksCi0gICAgICAgICAgICAgICAgZWxlbWVudCgndGJvZHknLAotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9yZW5kZXJlZFJlcG9zaXRvcnlsaXN0Lm1hcChmdW5jdGlvbiAocmVwb3Np
dG9yeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxzID0gW2VsZW1lbnQoJ3Ro
JywgcmVwb3NpdG9yeS5sYWJlbCgpKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBsYWJlbCBpbiBtYXApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVzaChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyht
YXAsIHJlcG9zaXRvcnksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudCgndHInLCBjZWxscyk7Ci0gICAgICAgICAgICAgICAgICAgIH0pKV0pKTsKKyAgICAg
ICAgY29uc3QgcmVwb3NpdG9yeUxpc3QgPSBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5n
T25lc1dpdGhVUkwoQXJyYXkuZnJvbShyZXBvc2l0b3J5U2V0LnZhbHVlcygpKSk7CisgICAgICAg
IGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIHRo
aXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoJ2N1c3RvbS10YWJsZScpLCBbCisgICAgICAg
ICAgICBlbGVtZW50KCd0aGVhZCcsCisgICAgICAgICAgICAgICAgZWxlbWVudCgndHInLAorICAg
ICAgICAgICAgICAgICAgICBbZWxlbWVudCgndGQnLCAnUmVwb3NpdG9yeScpLCBjb21taXRTZXRM
YWJlbHMubWFwKChsYWJlbCkgPT4gZWxlbWVudCgndGQnLCB7Y29sc3BhbjogY29tbWl0U2V0TGFi
ZWxzLmxlbmd0aCArIDF9LCBsYWJlbCkpXSkpLAorICAgICAgICAgICAgZWxlbWVudCgndGJvZHkn
LAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlMaXN0Lm1hcCgocmVwb3NpdG9yeSkgPT4gewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50KCd0aCcsIHJlcG9zaXRv
cnkubGFiZWwoKSldOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIGNv
bW1pdFNldE1hcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5fY29u
c3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBsYWJl
bCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBjZWxscyk7Cisg
ICAgICAgICAgICAgICAgfSkpXSk7CisKKyAgICAgICAgcmV0dXJuIHJlcG9zaXRvcnlMaXN0Owog
ICAgIH0KIAotICAgIHN0YXRpYyBfY2xhc3NGb3JMYWJlbEFuZFJlcG9zaXRvcnkobGFiZWwsIHJl
cG9zaXRvcnkpIHsgcmV0dXJuIGxhYmVsICsgJy0nICsgcmVwb3NpdG9yeS5pZCgpOyB9Ci0KLSAg
ICBzdGF0aWMgX2NvbnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVw
b3NpdG9yeSwgcm93TGFiZWwpCisgICAgX2NvbnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKGNv
bW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgcm93TGFiZWwpCiAgICAgewotICAgICAgICB2YXIgY2xh
c3NOYW1lID0gdGhpcy5fY2xhc3NGb3JMYWJlbEFuZFJlcG9zaXRvcnkocm93TGFiZWwsIHJlcG9z
aXRvcnkpOwotICAgICAgICB2YXIgZ3JvdXBOYW1lID0gY2xhc3NOYW1lICsgJy1ncm91cCc7Ci0g
ICAgICAgIHZhciBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OwotICAgICAg
ICB2YXIgcmV2aXNpb25FZGl0b3IgPSBlbGVtZW50KCdpbnB1dCcsIHtjbGFzczogY2xhc3NOYW1l
fSk7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7
CisgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQnKTsKKworICAg
ICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcFtyb3dMYWJlbF0uc2V0KHJlcG9zaXRvcnksIHJl
dmlzaW9uRWRpdG9yKTsKIAogICAgICAgICBjb25zdCBub2RlcyA9IFtdOwogICAgICAgICBmb3Ig
KGxldCBsYWJlbFRvQ2hvb3NlIGluIGNvbW1pdFNldE1hcCkgewogICAgICAgICAgICAgY29uc3Qg
Y29tbWl0ID0gY29tbWl0U2V0TWFwW2xhYmVsVG9DaG9vc2VdLmNvbW1pdEZvclJlcG9zaXRvcnko
cmVwb3NpdG9yeSk7CiAgICAgICAgICAgICBjb25zdCBjaGVja2VkID0gbGFiZWxUb0Nob29zZSA9
PSByb3dMYWJlbDsKLSAgICAgICAgICAgIGNvbnN0IHJhZGlvQnV0dG9uID0gdGhpcy5fY3JlYXRl
UmFkaW9CdXR0b24oZ3JvdXBOYW1lLCByZXZpc2lvbkVkaXRvciwgY29tbWl0LCBjaGVja2VkKTsK
KyAgICAgICAgICAgIGNvbnN0IHJhZGlvQnV0dG9uID0gZWxlbWVudCgnaW5wdXQnLCB7dHlwZTog
J3JhZGlvJywgbmFtZTogYCR7cm93TGFiZWx9LSR7cmVwb3NpdG9yeS5pZCgpfS1yYWRpb2AsIGNo
ZWNrZWQsCisgICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgcmV2aXNpb25FZGl0b3Iu
dmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOyB9fSk7CisKICAgICAgICAg
ICAgIGlmIChjaGVja2VkKQogICAgICAgICAgICAgICAgIHJldmlzaW9uRWRpdG9yLnZhbHVlID0g
Y29tbWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsKICAgICAgICAgICAgIG5vZGVzLnB1c2go
ZWxlbWVudCgndGQnLCBlbGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxUb0Nob29z
ZV0pKSk7CkBAIC0xMTcsMzYgKzEyNywyMSBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBG
b3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHJldHVybiBub2RlczsKICAgICB9
CiAKLSAgICBzdGF0aWMgX2NyZWF0ZVJhZGlvQnV0dG9uKGdyb3VwTmFtZSwgcmV2aXNpb25FZGl0
b3IsIGNvbW1pdCwgY2hlY2tlZCkKLSAgICB7Ci0gICAgICAgIHZhciBidXR0b24gPSBDb21wb25l
bnRCYXNlLmNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgewotICAgICAgICAgICAgdHlwZTogJ3JhZGlv
JywKLSAgICAgICAgICAgIG5hbWU6IGdyb3VwTmFtZSArICctcmFkaW8nLAotICAgICAgICAgICAg
b25jaGFuZ2U6IGZ1bmN0aW9uICgpIHsgcmV2aXNpb25FZGl0b3IudmFsdWUgPSBjb21taXQgPyBj
b21taXQucmV2aXNpb24oKSA6ICcnOyB9LAotICAgICAgICB9KTsKLSAgICAgICAgaWYgKGNoZWNr
ZWQpIC8vIEZJWE1FOiBjcmVhdGVFbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIHNldCBib29sZWFu
IGF0dHJpYnV0ZSBwcm9wZXJseS4KLSAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIGJ1dHRvbjsKLSAgICB9Ci0KICAgICBzdGF0aWMgY3NzVGVtcGxhdGUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGAKLSAgICAgICAgICAgIC5jdXN0b21pemUtbGluayB7
CisgICAgICAgICAgICAjY3VzdG9taXplLWxpbmstY29udGFpbmVyLAorICAgICAgICAgICAgI2N1
c3RvbWl6ZS1saW5rIHsKICAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLmN1c3RvbWl6ZS1saW5rIGEgewotICAgICAgICAgICAgICAgIGNv
bG9yOiBpbmhlcml0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuY3VzdG9tLXRhYmxl
IHsKKyAgICAgICAgICAgICNjdXN0b20tdGFibGU6bm90KDplbXB0eSkgewogICAgICAgICAgICAg
ICAgIG1hcmdpbjogMXJlbSAwOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAuY3VzdG9t
LXRhYmxlLAotICAgICAgICAgICAgLmN1c3RvbS10YWJsZSB0ZCwKLSAgICAgICAgICAgIC5jdXN0
b20tdGFibGUgdGggeworICAgICAgICAgICAgI2N1c3RvbS10YWJsZSwKKyAgICAgICAgICAgICNj
dXN0b20tdGFibGUgdGQsCisgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRoIHsKICAgICAgICAg
ICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICAgICAgICAgICBib3JkZXItY29s
bGFwc2U6IGNvbGxhcHNlOwogICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAj
ZGRkOwpAQCAtMTU1LDggKzE1MCw4IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0g
ZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOXJl
bTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmN1c3RvbS10YWJsZSB0aGVhZCB0ZCwK
LSAgICAgICAgICAgIC5jdXN0b20tdGFibGUgdGggeworICAgICAgICAgICAgI2N1c3RvbS10YWJs
ZSB0aGVhZCB0ZCwKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggewogICAgICAgICAgICAg
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGA7CkBA
IC0xNjUsMTAgKzE2MCwxMCBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVu
ZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgc3RhdGljIGZvcm1Db250ZW50KCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBgCi0gICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im5hbWUiIHR5cGU9InRleHQi
IHBsYWNlaG9sZGVyPSJUZXN0IGdyb3VwIG5hbWUiPgorICAgICAgICAgICAgPGlucHV0IGlkPSJu
YW1lIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iVGVzdCBncm91cCBuYW1lIj4KICAgICAgICAg
ICAgICR7c3VwZXIuZm9ybUNvbnRlbnQoKX0KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXN0
b21pemUtbGluayI+KDxhIGhyZWY9IiI+Q3VzdG9taXplPC9hPik8L3NwYW4+Ci0gICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJjdXN0b20tdGFibGUtY29udGFpbmVyIj48L2Rpdj4KKyAgICAgICAgICAg
IDxzcGFuIGlkPSJjdXN0b21pemUtbGluay1jb250YWluZXIiPig8YSBpZD0iY3VzdG9taXplLWxp
bmsiIGhyZWY9IiMiPkN1c3RvbWl6ZTwvYT4pPC9zcGFuPgorICAgICAgICAgICAgPHRhYmxlIGlk
PSJjdXN0b20tdGFibGUiPjwvdGFibGU+CiAgICAgICAgIGA7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL211dGFibGUt
bGlzdC12aWV3LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL211dGFibGUtbGlzdC12aWV3LmpzCmluZGV4IDU3MmQwYjEzZDdiODEwM2YwZmJlM2JhOTM4
Y2QwNWQ4MzRjY2FkYjIuLjlkNmNlYWJkZTU5NThlM2MzODc1YmZiMDlmNGQ1NTk4M2FiYzkxZjEg
MTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy9tdXRhYmxlLWxpc3Qtdmlldy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2NvbXBvbmVudHMvbXV0YWJsZS1saXN0LXZpZXcuanMKQEAgLTEsNSArMSw0IEBACiAK
LQogY2xhc3MgTXV0YWJsZUxpc3RWaWV3IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAKICAgICBj
b25zdHJ1Y3RvcigpCkBAIC03LDE0ICs2LDIxIEBAIGNsYXNzIE11dGFibGVMaXN0VmlldyBleHRl
bmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBzdXBlcignbXV0YWJsZS1saXN0LXZpZXcnKTsK
ICAgICAgICAgdGhpcy5fbGlzdCA9IFtdOwogICAgICAgICB0aGlzLl9raW5kTGlzdCA9IFtdOwot
ICAgICAgICB0aGlzLl9hZGRDYWxsYmFjayA9IG51bGw7CiAgICAgICAgIHRoaXMuX2tpbmRNYXAg
PSBuZXcgTWFwOwogICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdmb3JtJyku
b25zdWJtaXQgPSB0aGlzLl9zdWJtaXR0ZWQuYmluZCh0aGlzKTsKICAgICB9CiAKLSAgICBzZXRM
aXN0KGxpc3QpIHsgdGhpcy5fbGlzdCA9IGxpc3Q7IH0KLSAgICBzZXRLaW5kTGlzdChsaXN0KSB7
IHRoaXMuX2tpbmRMaXN0ID0gbGlzdDsgfQotICAgIHNldEFkZENhbGxiYWNrKGNhbGxiYWNrKSB7
IHRoaXMuX2FkZENhbGxiYWNrID0gY2FsbGJhY2s7IH0KKyAgICBzZXRMaXN0KGxpc3QpCisgICAg
eworICAgICAgICB0aGlzLl9saXN0ID0gbGlzdDsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKKyAgICB9CisKKyAgICBzZXRLaW5kTGlzdChsaXN0KQorICAgIHsKKyAgICAgICAgdGhp
cy5fa2luZExpc3QgPSBsaXN0OworICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAg
IH0KIAogICAgIHJlbmRlcigpCiAgICAgewpAQCAtMzcsOCArNDMsOSBAQCBjbGFzcyBNdXRhYmxl
TGlzdFZpZXcgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICBfc3VibWl0dGVkKGV2ZW50KQog
ICAgIHsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgaWYgKHRoaXMu
X2FkZENhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fYWRkQ2FsbGJhY2sodGhpcy5fa2luZE1h
cC5nZXQodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmtpbmQnKS52YWx1ZSksIHRoaXMu
Y29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy52YWx1ZScpLnZhbHVlKTsKKyAgICAgICAgY29uc3Qg
a2luZCA9IHRoaXMuX2tpbmRNYXAuZ2V0KHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5r
aW5kJykudmFsdWUpOworICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5jb250ZW50KCkucXVlcnlT
ZWxlY3RvcignLnZhbHVlJykudmFsdWU7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ2Fk
ZEl0ZW0nLCBraW5kLCBpdGVtKTsKICAgICB9CiAKICAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQpA
QCAtOTEsMTMgKzk4LDE1IEBAIGNsYXNzIE11dGFibGVMaXN0SXRlbSB7CiAKICAgICBjb250ZW50
KCkKICAgICB7Ci0gICAgICAgIHZhciBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOwor
ICAgICAgICBjb25zdCBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworICAgICAgICBj
b25zdCBjbG9zZUJ1dHRvbiA9IG5ldyBDbG9zZUJ1dHRvbjsKKyAgICAgICAgY2xvc2VCdXR0b24u
bGlzdGVuVG9BY3Rpb24oJ2FjdGl2YXRlJywgdGhpcy5fcmVtb3ZhbExpbmspOwogICAgICAgICBy
ZXR1cm4gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50KCdsaScsIFsKICAgICAgICAgICAgIHRo
aXMuX2tpbmQubGFiZWwoKSwKICAgICAgICAgICAgICcgJywKICAgICAgICAgICAgIGxpbmsodGhp
cy5fdmFsdWUsIHRoaXMuX3ZhbHVlVGl0bGUsIHRoaXMuX3ZhbHVlTGluayksCiAgICAgICAgICAg
ICAnICcsCi0gICAgICAgICAgICBsaW5rKG5ldyBDbG9zZUJ1dHRvbiwgdGhpcy5fcmVtb3ZhbFRp
dGxlLCB0aGlzLl9yZW1vdmFsTGluayldKTsKKyAgICAgICAgICAgIGxpbmsoY2xvc2VCdXR0b24s
IHRoaXMuX3JlbW92YWxUaXRsZSwgdGhpcy5fcmVtb3ZhbExpbmspXSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMv
cmVzdWx0cy10YWJsZS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9yZXN1bHRzLXRhYmxlLmpzCmluZGV4IGY2ZGVjZmUzZGQ3ODkxM2ZhNjVmMWUwMzFl
OGZlZTEzZjk3MWUxNWYuLjFkMDc5YTNjNDNkMWQ0NGVlYjI0ZDM4M2I3M2VlMjUxYjE2NGVlOTIg
MTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy9yZXN1bHRzLXRhYmxlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9yZXN1bHRzLXRhYmxlLmpzCkBAIC0zLDYwICszLDMyIEBAIGNsYXNzIFJl
c3VsdHNUYWJsZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgIHsKICAgICAgICAgc3VwZXIo
bmFtZSk7CiAgICAgICAgIHRoaXMuX3JlcG9zaXRvcnlMaXN0ID0gW107Ci0gICAgICAgIHRoaXMu
X3ZhbHVlRm9ybWF0dGVyID0gbnVsbDsKLSAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3RvckxhYmVs
cyA9IG51bGw7Ci0gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3JDYWxsYmFjayA9IG51bGw7Ci0g
ICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2UgPSB7fTsKKyAgICAgICAgdGhpcy5fYW5hbHlzaXNS
ZXN1bHRzVmlldyA9IG51bGw7CiAgICAgfQogCi0gICAgc2V0VmFsdWVGb3JtYXR0ZXIodmFsdWVG
b3JtYXR0ZXIpIHsgdGhpcy5fdmFsdWVGb3JtYXR0ZXIgPSB2YWx1ZUZvcm1hdHRlcjsgfQotICAg
IHNldFJhbmdlU2VsZWN0b3JMYWJlbHMobGFiZWxzKSB7IHRoaXMuX3JhbmdlU2VsZWN0b3JMYWJl
bHMgPSBsYWJlbHM7IH0KLSAgICBzZXRSYW5nZVNlbGVjdG9yQ2FsbGJhY2soY2FsbGJhY2spIHsg
dGhpcy5fcmFuZ2VTZWxlY3RvckNhbGxiYWNrID0gY2FsbGJhY2s7IH0KLSAgICBzZWxlY3RlZFJh
bmdlKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSYW5nZTsgfQotCi0gICAgX3JhbmdlU2VsZWN0
b3JDbGlja2VkKGxhYmVsLCByb3cpCisgICAgc2V0QW5hbHlzaXNSZXN1bHRzVmlldyhhbmFseXNp
c1Jlc3VsdHNWaWV3KQogICAgIHsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZVtsYWJlbF0g
PSByb3c7Ci0gICAgICAgIGlmICh0aGlzLl9yYW5nZVNlbGVjdG9yQ2FsbGJhY2spCi0gICAgICAg
ICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yQ2FsbGJhY2soKTsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoYW5hbHlzaXNSZXN1bHRzVmlldyBpbnN0YW5jZW9mIEFuYWx5c2lzUmVzdWx0c1ZpZXcpOwor
ICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ID0gYW5hbHlzaXNSZXN1bHRzVmlldzsK
KyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKLSAgICByZW5kZXIoKQor
ICAgIHJlbmRlclRhYmxlKHZhbHVlRm9ybWF0dGVyLCByb3dHcm91cHMsIGhlYWRpbmdMYWJlbCwg
YnVpbGRIZWFkZXJzID0gKGhlYWRlcnMpID0+IGhlYWRlcnMsIGJ1aWxkQ29sdW1ucyA9IChjb2x1
bW5zLCByb3csIHJvd0luZGV4KSA9PiBjb2x1bW5zKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll92YWx1ZUZvcm1hdHRlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnN0cnVt
ZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdSZXN1bHRzVGFibGUnLCAncmVuZGVyJyk7Ci0K
LSAgICAgICAgdmFyIHJvd0dyb3VwcyA9IHRoaXMuYnVpbGRSb3dHcm91cHMoKTsKLQotICAgICAg
ICB2YXIgZXh0cmFSZXBvc2l0b3JpZXMgPSBbXTsKLSAgICAgICAgdmFyIHJlcG9zaXRvcnlMaXN0
ID0gdGhpcy5fY29tcHV0ZVJlcG9zaXRvcnlMaXN0KHJvd0dyb3VwcywgZXh0cmFSZXBvc2l0b3Jp
ZXMpOwotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2UgPSB7fTsKLQotICAgICAgICB2YXIg
YmFyR3JhcGhHcm91cCA9IG5ldyBCYXJHcmFwaEdyb3VwKHRoaXMuX3ZhbHVlRm9ybWF0dGVyKTsK
LSAgICAgICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAg
ICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgdmFyIGhhc0dyb3VwSGVhZGluZyA9IGZhbHNl
OwotICAgICAgICB2YXIgdGFibGVCb2RpZXMgPSByb3dHcm91cHMubWFwKGZ1bmN0aW9uIChncm91
cCkgewotICAgICAgICAgICAgdmFyIGdyb3VwSGVhZGluZyA9IGdyb3VwLmhlYWRpbmc7Ci0gICAg
ICAgICAgICB2YXIgcmV2aXNpb25TdXByZXNzaW9uQ291bnQgPSB7fTsKLSAgICAgICAgICAgIGhh
c0dyb3VwSGVhZGluZyA9ICEhZ3JvdXBIZWFkaW5nOwotCi0gICAgICAgICAgICByZXR1cm4gZWxl
bWVudCgndGJvZHknLCBncm91cC5yb3dzLm1hcChmdW5jdGlvbiAocm93LCByb3dJbmRleCkgewot
ICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IFtdOwotCi0gICAgICAgICAgICAgICAgaWYgKHNl
bGYuX3JhbmdlU2VsZWN0b3JMYWJlbHMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
bGFiZWwgb2Ygc2VsZi5fcmFuZ2VTZWxlY3RvckxhYmVscykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGNvbnRlbnQgPSAnJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cu
Y29tbWl0U2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZWxl
bWVudCgnaW5wdXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ3Jh
ZGlvJywgbmFtZTogbGFiZWwsIG9uY2hhbmdlOiBzZWxmLl9yYW5nZVNlbGVjdG9yQ2xpY2tlZC5i
aW5kKHNlbGYsIGxhYmVsLCByb3cpfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgY29udGVudCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBJbnN0cnVt
ZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdSZXN1bHRzVGFibGUnLCAncmVuZGVyVGFibGUn
KTsKKworICAgICAgICBjb25zdCBbcmVwb3NpdG9yeUxpc3QsIGNvbnN0YW50Q29tbWl0c10gPSB0
aGlzLl9jb21wdXRlUmVwb3NpdG9yeUxpc3Qocm93R3JvdXBzKTsKKworICAgICAgICBjb25zdCBi
YXJHcmFwaEdyb3VwID0gbmV3IEJhckdyYXBoR3JvdXAodmFsdWVGb3JtYXR0ZXIpOworICAgICAg
ICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBs
ZXQgaGFzR3JvdXBIZWFkaW5nID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHRhYmxlQm9kaWVzID0g
cm93R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGdyb3VwSGVhZGlu
ZyA9IGdyb3VwLmhlYWRpbmc7CisgICAgICAgICAgICBjb25zdCByZXZpc2lvblN1cHJlc3Npb25D
b3VudCA9IHt9OworICAgICAgICAgICAgaGFzR3JvdXBIZWFkaW5nID0gaGFzR3JvdXBIZWFkaW5n
IHx8IGdyb3VwSGVhZGluZzsKKworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3Rib2R5Jywg
Z3JvdXAucm93cy5tYXAoKHJvdywgcm93SW5kZXgpID0+IHsKKyAgICAgICAgICAgICAgICBjb25z
dCBjZWxscyA9IFtdOwogCiAgICAgICAgICAgICAgICAgaWYgKGdyb3VwSGVhZGluZyAhPT0gdW5k
ZWZpbmVkICYmICFyb3dJbmRleCkKICAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVzaChlbGVt
ZW50KCd0aCcsIHtyb3dzcGFuOiBncm91cC5yb3dzLmxlbmd0aH0sIGdyb3VwSGVhZGluZykpOwpA
QCAtNjYsMzkgKzM4LDM4IEBAIGNsYXNzIFJlc3VsdHNUYWJsZSBleHRlbmRzIENvbXBvbmVudEJh
c2UgewogICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywge2NsYXNz
OiAnd2hvbGUtcm93LWxhYmVsJywgY29sc3BhbjogcmVwb3NpdG9yeUxpc3QubGVuZ3RoICsgMX0s
IHJvdy5sYWJlbEZvcldob2xlUm93KCkpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIHJvdy5yZXN1bHRDb250ZW50
KGJhckdyYXBoR3JvdXApKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goc2VsZi5f
Y3JlYXRlUmV2aXNpb25MaXN0Q2VsbHMocmVwb3NpdG9yeUxpc3QsIHJldmlzaW9uU3VwcmVzc2lv
bkNvdW50LCBncm91cCwgcm93LmNvbW1pdFNldCgpLCByb3dJbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICBjZWxscy5wdXNoKHRoaXMuX2NyZWF0ZVJldmlzaW9uTGlzdENlbGxzKHJlcG9zaXRv
cnlMaXN0LCByZXZpc2lvblN1cHJlc3Npb25Db3VudCwgZ3JvdXAsIHJvdy5jb21taXRTZXQoKSwg
cm93SW5kZXgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbWVudCgndHInLCBbY2VsbHMsIHJvdy5hZGRpdGlvbmFsQ29sdW1ucygpXSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgYnVpbGRDb2x1bW5zKGNlbGxzLCByb3csIHJv
d0luZGV4KSk7CiAgICAgICAgICAgICB9KSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMu
cmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCd0YWJsZScpLCBbCiAg
ICAgICAgICAgICBlbGVtZW50KCd0aGVhZCcsIFsKLSAgICAgICAgICAgICAgICB0aGlzLl9yYW5n
ZVNlbGVjdG9yTGFiZWxzID8gdGhpcy5fcmFuZ2VTZWxlY3RvckxhYmVscy5tYXAoZnVuY3Rpb24g
KGxhYmVsKSB7IHJldHVybiBlbGVtZW50KCd0aCcsIGxhYmVsKSB9KSA6IFtdLAotICAgICAgICAg
ICAgICAgIHRoaXMuaGVhZGluZygpLAotICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RoJywgJ1Jl
c3VsdCcpLAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlMaXN0Lm1hcChmdW5jdGlvbiAocmVw
b3NpdG9yeSkgeyByZXR1cm4gZWxlbWVudCgndGgnLCByZXBvc2l0b3J5LmxhYmVsKCkpOyB9KSwK
LSAgICAgICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxIZWFkaW5nKCksCisgICAgICAgICAgICAg
ICAgYnVpbGRIZWFkZXJzKFsKKyAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50QmFzZS5jcmVh
dGVFbGVtZW50KCd0aCcsIHtjb2xzcGFuOiBoYXNHcm91cEhlYWRpbmcgPyAyIDogMX0sIGhlYWRp
bmdMYWJlbCksCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RoJywgJ1Jlc3VsdCcpLAor
ICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5TGlzdC5tYXAoKHJlcG9zaXRvcnkpID0+IGVs
ZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKSksCisgICAgICAgICAgICAgICAgXSksCiAg
ICAgICAgICAgICBdKSwKICAgICAgICAgICAgIHRhYmxlQm9kaWVzLAogICAgICAgICBdKTsKIAot
ICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rvcign
LnJlc3VsdHMtdGFibGUtZXh0cmEtcmVwb3NpdG9yaWVzJyksCi0gICAgICAgICAgICBleHRyYVJl
cG9zaXRvcmllcy5tYXAoZnVuY3Rpb24gKGNvbW1pdCkgeyByZXR1cm4gZWxlbWVudCgnbGknLCBj
b21taXQudGl0bGUoKSk7IH0pKTsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29u
dGVudCgnY29uc3RhbnQtY29tbWl0cycpLCBjb25zdGFudENvbW1pdHMubWFwKChjb21taXQpID0+
IGVsZW1lbnQoJ2xpJywgY29tbWl0LnRpdGxlKCkpKSk7CiAKICAgICAgICAgYmFyR3JhcGhHcm91
cC51cGRhdGVHcm91cFJlbmRlcmluZygpOwogCi0gICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRN
ZWFzdXJpbmdUaW1lKCdSZXN1bHRzVGFibGUnLCAncmVuZGVyJyk7CisgICAgICAgIEluc3RydW1l
bnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdSZXN1bHRzVGFibGUnLCAncmVuZGVyVGFibGUnKTsK
ICAgICB9CiAKICAgICBfY3JlYXRlUmV2aXNpb25MaXN0Q2VsbHMocmVwb3NpdG9yeUxpc3QsIHJl
dmlzaW9uU3VwcmVzc2lvbkNvdW50LCB0ZXN0R3JvdXAsIGNvbW1pdFNldCwgcm93SW5kZXgpCiAg
ICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsK
LSAgICAgICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7Ci0gICAgICAgIHZh
ciBjZWxscyA9IFtdOwotICAgICAgICBmb3IgKHZhciByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcnlM
aXN0KSB7Ci0gICAgICAgICAgICB2YXIgY29tbWl0ID0gY29tbWl0U2V0ID8gY29tbWl0U2V0LmNv
bW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgOiBudWxsOworICAgICAgICBjb25zdCBlbGVt
ZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBsaW5rID0g
Q29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworICAgICAgICBjb25zdCBjZWxscyA9IFtdOworICAg
ICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgcmVwb3NpdG9yeUxpc3QpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldCA/IGNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpIDogbnVsbDsKIAogICAgICAgICAgICAgaWYgKHJldmlzaW9uU3VwcmVz
c2lvbkNvdW50W3JlcG9zaXRvcnkuaWQoKV0pIHsKICAgICAgICAgICAgICAgICByZXZpc2lvblN1
cHJlc3Npb25Db3VudFtyZXBvc2l0b3J5LmlkKCldLS07CkBAIC0xMTIsOCArODMsOCBAQCBjbGFz
cyBSZXN1bHRzVGFibGUgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgc3VjY2VlZGluZ1Jvd0luZGV4Kys7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB2YXIgcm93U3BhbiA9IHN1Y2NlZWRpbmdSb3dJbmRleCAtIHJv
d0luZGV4OwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7Y2xhc3M6ICdyZXZpc2lvbid9
OworICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IHN1Y2NlZWRpbmdSb3dJbmRleCAtIHJvd0lu
ZGV4OworICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtjbGFzczogJ3JldmlzaW9uJ307
CiAgICAgICAgICAgICBpZiAocm93U3BhbiA+IDEpIHsKICAgICAgICAgICAgICAgICByZXZpc2lv
blN1cHJlc3Npb25Db3VudFtyZXBvc2l0b3J5LmlkKCldID0gcm93U3BhbiAtIDE7CiAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlc1sncm93c3BhbiddID0gcm93U3BhbjsgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMTIxLDkgKzkyLDkgQEAgY2xhc3MgUmVzdWx0c1RhYmxlIGV4dGVuZHMgQ29t
cG9uZW50QmFzZSB7CiAgICAgICAgICAgICBpZiAocm93SW5kZXggKyByb3dTcGFuID49IHRlc3RH
cm91cC5yb3dzLmxlbmd0aCkKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzWydjbGFzcyddICs9
ICcgbGFzdFJldmlzaW9uJzsKIAotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAnTWlzc2luZyc7
CisgICAgICAgICAgICBsZXQgY29udGVudCA9ICdNaXNzaW5nJzsKICAgICAgICAgICAgIGlmIChj
b21taXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsID0gY29tbWl0LnVybCgpOworICAgICAg
ICAgICAgICAgIGNvbnN0IHVybCA9IGNvbW1pdC51cmwoKTsKICAgICAgICAgICAgICAgICBjb250
ZW50ID0gdXJsID8gbGluayhjb21taXQubGFiZWwoKSwgdXJsKSA6IGNvbW1pdC5sYWJlbCgpOwog
ICAgICAgICAgICAgfQogCkBAIC0xMzIsMjIgKzEwMyw5IEBAIGNsYXNzIFJlc3VsdHNUYWJsZSBl
eHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICByZXR1cm4gY2VsbHM7CiAgICAgfQogCi0g
ICAgaGVhZGluZygpIHsgdGhyb3cgJ05vdEltcGxlbWVudGVkJzsgfQotICAgIGFkZGl0aW9uYWxI
ZWFkaW5nKCkgeyByZXR1cm4gW107IH0KLSAgICBidWlsZFJvd0dyb3VwcygpIHsgdGhyb3cgJ05v
dEltcGxlbWVudGVkJzsgfQotCi0gICAgX2NvbXB1dGVSZXBvc2l0b3J5TGlzdChyb3dHcm91cHMs
IGV4dHJhUmVwb3NpdG9yaWVzKQorICAgIF9jb21wdXRlUmVwb3NpdG9yeUxpc3Qocm93R3JvdXBz
KQogICAgIHsKLSAgICAgICAgdmFyIGFsbFJlcG9zaXRvcmllcyA9IFJlcG9zaXRvcnkuYWxsKCku
c29ydChmdW5jdGlvbiAoYSwgYikgewotICAgICAgICAgICAgaWYgKGEuaGFzVXJsRm9yUmV2aXNp
b24oKSA9PSBiLmhhc1VybEZvclJldmlzaW9uKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYS5u
YW1lKCkgPiBiLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg
ICAgICAgICAgaWYgKGEubmFtZSgpIDwgYi5uYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBhLmhhc1VybEZvclJldmlzaW9uKCkgPyAtMSAvKiBhIDwgYiAqLyA6IDE7
IC8vIGEgPiBiCi0gICAgICAgIH0pOworICAgICAgICBjb25zdCBhbGxSZXBvc2l0b3JpZXMgPSBS
ZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwoUmVwb3NpdG9yeS5hbGwo
KSk7CiAgICAgICAgIGNvbnN0IGNvbW1pdFNldHMgPSBbXTsKICAgICAgICAgZm9yIChsZXQgZ3Jv
dXAgb2Ygcm93R3JvdXBzKSB7CiAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgZ3JvdXAucm93
cykgewpAQCAtMTU5LDIwICsxMTcsMjEgQEAgY2xhc3MgUmVzdWx0c1RhYmxlIGV4dGVuZHMgQ29t
cG9uZW50QmFzZSB7CiAgICAgICAgIGlmICghY29tbWl0U2V0cy5sZW5ndGgpCiAgICAgICAgICAg
ICByZXR1cm4gW107CiAKLSAgICAgICAgY29uc3QgcmVwb3NpdG9yeVByZXNlbmNlTWFwID0ge307
CisgICAgICAgIGNvbnN0IGNoYW5nZWRSZXBvc2l0b3J5U2V0ID0gbmV3IFNldDsKKyAgICAgICAg
Y29uc3QgY29uc3RhbnRDb21taXRzID0gbmV3IFNldDsKICAgICAgICAgZm9yIChsZXQgcmVwb3Np
dG9yeSBvZiBhbGxSZXBvc2l0b3JpZXMpIHsKICAgICAgICAgICAgIGNvbnN0IHNvbWVDb21taXQg
PSBjb21taXRTZXRzWzBdLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CiAgICAgICAg
ICAgICBpZiAoQ29tbWl0U2V0LmNvbnRhaW5zTXVsdGlwbGVDb21taXRzRm9yUmVwb3NpdG9yeShj
b21taXRTZXRzLCByZXBvc2l0b3J5KSkKLSAgICAgICAgICAgICAgICByZXBvc2l0b3J5UHJlc2Vu
Y2VNYXBbcmVwb3NpdG9yeS5pZCgpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZFJl
cG9zaXRvcnlTZXQuYWRkKHJlcG9zaXRvcnkpOwogICAgICAgICAgICAgZWxzZSBpZiAoc29tZUNv
bW1pdCkKLSAgICAgICAgICAgICAgICBleHRyYVJlcG9zaXRvcmllcy5wdXNoKHNvbWVDb21taXQp
OworICAgICAgICAgICAgICAgIGNvbnN0YW50Q29tbWl0cy5hZGQoc29tZUNvbW1pdCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGFsbFJlcG9zaXRvcmllcy5maWx0ZXIoZnVuY3Rpb24gKHJl
cG9zaXRvcnkpIHsgcmV0dXJuIHJlcG9zaXRvcnlQcmVzZW5jZU1hcFtyZXBvc2l0b3J5LmlkKCld
OyB9KTsKKyAgICAgICAgcmV0dXJuIFthbGxSZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBvc2l0b3J5
KSA9PiBjaGFuZ2VkUmVwb3NpdG9yeVNldC5oYXMocmVwb3NpdG9yeSkpLCBbLi4uY29uc3RhbnRD
b21taXRzXV07CiAgICAgfQogCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYDx0YWJsZSBjbGFzcz0icmVzdWx0cy10YWJsZSI+PC90YWJsZT48dWwgY2xh
c3M9InJlc3VsdHMtdGFibGUtZXh0cmEtcmVwb3NpdG9yaWVzIj48L3VsPmA7CisgICAgICAgIHJl
dHVybiBgPHRhYmxlIGNsYXNzPSJyZXN1bHRzLXRhYmxlIj48L3RhYmxlPjx1bCBpZD0iY29uc3Rh
bnQtY29tbWl0cyI+PC91bD5gOwogICAgIH0KIAogICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCkBA
IC0yNDgsMjIgKzIwNywyMiBAQCBjbGFzcyBSZXN1bHRzVGFibGUgZXh0ZW5kcyBDb21wb25lbnRC
YXNlIHsKICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEuMnJlbTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgLnJlc3VsdHMtdGFibGUtZXh0cmEtcmVwb3NpdG9yaWVzIHsKKyAgICAgICAg
ICAgICNjb25zdGFudC1jb21taXRzIHsKICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25l
OwogICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgICBwYWRkaW5nOiAw
LjVyZW0gMCAwIDAuNXJlbTsKICAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLnJlc3VsdHMtdGFibGUtZXh0cmEtcmVwb3NpdG9y
aWVzOmVtcHR5IHsKKyAgICAgICAgICAgICNjb25zdGFudC1jb21taXRzOmVtcHR5IHsKICAgICAg
ICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAucmVz
dWx0cy10YWJsZS1leHRyYS1yZXBvc2l0b3JpZXMgbGkgeworICAgICAgICAgICAgI2NvbnN0YW50
LWNvbW1pdHMgbGkgewogICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLnJlc3VsdHMtdGFibGUtZXh0cmEtcmVwb3NpdG9yaWVzIGxp
Om5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIgeworICAgICAgICAgICAgI2NvbnN0YW50LWNvbW1pdHMg
bGk6bm90KDpsYXN0LWNoaWxkKTphZnRlciB7CiAgICAgICAgICAgICAgICAgY29udGVudDogJywg
JzsKICAgICAgICAgICAgIH0KICAgICAgICAgYDsKQEAgLTI3OCw3ICsyMzcsNiBAQCBjbGFzcyBS
ZXN1bHRzVGFibGVSb3cgewogICAgICAgICB0aGlzLl9saW5rID0gbnVsbDsKICAgICAgICAgdGhp
cy5fbGFiZWwgPSAnLSc7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldCA9IGNvbW1pdFNldDsKLSAg
ICAgICAgdGhpcy5fYWRkaXRpb25hbENvbHVtbnMgPSBbXTsKICAgICAgICAgdGhpcy5fbGFiZWxG
b3JXaG9sZVJvdyA9IG51bGw7CiAgICAgfQogCkBAIC0yOTQsOSArMjUyLDYgQEAgY2xhc3MgUmVz
dWx0c1RhYmxlUm93IHsKICAgICBzZXRMYWJlbEZvcldob2xlUm93KGxhYmVsKSB7IHRoaXMuX2xh
YmVsRm9yV2hvbGVSb3cgPSBsYWJlbDsgfQogICAgIGxhYmVsRm9yV2hvbGVSb3coKSB7IHJldHVy
biB0aGlzLl9sYWJlbEZvcldob2xlUm93OyB9CiAKLSAgICBhZGRpdGlvbmFsQ29sdW1ucygpIHsg
cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb2x1bW5zOyB9Ci0gICAgc2V0QWRkaXRpb25hbENvbHVt
bnMoYWRkaXRpb25hbENvbHVtbnMpIHsgdGhpcy5fYWRkaXRpb25hbENvbHVtbnMgPSBhZGRpdGlv
bmFsQ29sdW1uczsgfQotCiAgICAgcmVzdWx0Q29udGVudChiYXJHcmFwaEdyb3VwKQogICAgIHsK
ICAgICAgICAgdmFyIHJlc3VsdENvbnRlbnQgPSB0aGlzLl9yZXN1bHQgPyBiYXJHcmFwaEdyb3Vw
LmFkZEJhcih0aGlzLl9yZXN1bHQudmFsdWUsIHRoaXMuX3Jlc3VsdC5pbnRlcnZhbCkgOiB0aGlz
Ll9sYWJlbDsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
Y29tcG9uZW50cy90ZXN0LWdyb3VwLWZvcm0uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2NvbXBvbmVudHMvdGVzdC1ncm91cC1mb3JtLmpzCmluZGV4IDIwNWY3YzFlOTMy
MDJiNzhjMWVkYTJiZWJmYTIyYmYxOTNiZGJiM2YuLmFjODE4ZjcyZTdkNmZlNWJiM2NhYmNlYjYz
ZGYxOThhYmU2MDIyNzIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy90ZXN0LWdyb3VwLWZvcm0uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3Rlc3QtZ3JvdXAtZm9ybS5qcwpAQCAtNCw1
MiArNCwzOCBAQCBjbGFzcyBUZXN0R3JvdXBGb3JtIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAg
ICAgY29uc3RydWN0b3IobmFtZSkKICAgICB7CiAgICAgICAgIHN1cGVyKG5hbWUgfHwgJ3Rlc3Qt
Z3JvdXAtZm9ybScpOwotICAgICAgICB0aGlzLl9zdGFydENhbGxiYWNrID0gbnVsbDsKLSAgICAg
ICAgdGhpcy5fbGFiZWwgPSB1bmRlZmluZWQ7CiAgICAgICAgIHRoaXMuX3JlcGV0aXRpb25Db3Vu
dCA9IDQ7Ci0KLSAgICAgICAgdGhpcy5fbmFtZUNvbnRyb2wgPSB0aGlzLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCcubmFtZScpOwotICAgICAgICB0aGlzLl9yZXBldGl0aW9uQ291bnRDb250cm9s
ID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnJlcGV0aXRpb24tY291bnQnKTsKLSAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB0aGlzLl9yZXBldGl0aW9uQ291bnRDb250
cm9sLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc2VsZi5fcmVwZXRpdGlv
bkNvdW50ID0gc2VsZi5fcmVwZXRpdGlvbkNvdW50Q29udHJvbC52YWx1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBib3VuZFN1Ym1pdHRlZCA9IHRoaXMuX3N1Ym1pdHRlZC5iaW5kKHRoaXMp
OwotICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdmb3JtJykub25zdWJtaXQg
PSBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
Ci0gICAgICAgICAgICBib3VuZFN1Ym1pdHRlZCgpOwotICAgICAgICB9CiAgICAgfQogCi0gICAg
c2V0U3RhcnRDYWxsYmFjayhjYWxsYmFjaykgeyB0aGlzLl9zdGFydENhbGxiYWNrID0gY2FsbGJh
Y2s7IH0KLSAgICBzZXRMYWJlbChsYWJlbCkgeyB0aGlzLl9sYWJlbCA9IGxhYmVsOyB9Ci0gICAg
c2V0UmVwZXRpdGlvbkNvdW50KGNvdW50KSB7IHRoaXMuX3JlcGV0aXRpb25Db3VudCA9IGNvdW50
OyB9CisgICAgc2V0UmVwZXRpdGlvbkNvdW50KGNvdW50KQorICAgIHsKKyAgICAgICAgdGhpcy5j
b250ZW50KCdyZXBldGl0aW9uLWNvdW50JykudmFsdWUgPSBjb3VudDsKKyAgICB9CiAKLSAgICBy
ZW5kZXIoKQorICAgIGRpZENvbnN0cnVjdFNoYWRvd1RyZWUoKQogICAgIHsKLSAgICAgICAgdmFy
IGJ1dHRvbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpOwotICAgICAg
ICBpZiAodGhpcy5fbGFiZWwpCi0gICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSB0aGlz
Ll9sYWJlbDsKLSAgICAgICAgdGhpcy5fcmVwZXRpdGlvbkNvdW50Q29udHJvbC52YWx1ZSA9IHRo
aXMuX3JlcGV0aXRpb25Db3VudDsKKyAgICAgICAgY29uc3QgcmVwZXRpdGlvbkNvdW50U2VsZWN0
ID0gdGhpcy5jb250ZW50KCdyZXBldGl0aW9uLWNvdW50Jyk7CisgICAgICAgIHJlcGV0aXRpb25D
b3VudFNlbGVjdC5vbmNoYW5nZSA9ICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMuX3JlcGV0aXRp
b25Db3VudCA9IHJlcGV0aXRpb25Db3VudFNlbGVjdC52YWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLmNvbnRlbnQoJ2Zvcm0nKS5vbnN1Ym1pdCA9IHRoaXMuY3JlYXRlRXZlbnRIYW5kbGVy
KCgpID0+IHRoaXMuc3RhcnRUZXN0aW5nKCkpOwogICAgIH0KIAotICAgIF9zdWJtaXR0ZWQoKQor
ICAgIHN0YXJ0VGVzdGluZygpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fc3RhcnRDYWxsYmFj
aykKLSAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q2FsbGJhY2sodGhpcy5fcmVwZXRpdGlvbkNvdW50
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbignc3RhcnRUZXN0aW5nJywgdGhpcy5fcmVw
ZXRpdGlvbkNvdW50KTsKICAgICB9CiAKICAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBgPGZvcm0+PGJ1dHRvbiB0eXBlPSJzdWJtaXQiPlN0YXJ0IEEvQiB0
ZXN0aW5nPC9idXR0b24+JHt0aGlzLmZvcm1Db250ZW50KCl9PC9mb3JtPmA7CisgICAgICAgIHJl
dHVybiBgPGZvcm0gaWQ9ImZvcm0iPjxidXR0b24gaWQ9InN0YXJ0LWJ1dHRvbiIgdHlwZT0ic3Vi
bWl0Ij48c2xvdD5TdGFydCBBL0IgdGVzdGluZzwvc2xvdD48L2J1dHRvbj4ke3RoaXMuZm9ybUNv
bnRlbnQoKX08L2Zvcm0+YDsKICAgICB9CiAKICAgICBzdGF0aWMgZm9ybUNvbnRlbnQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgIHdpdGgKLSAgICAgICAgICAgIDxzZWxl
Y3QgY2xhc3M9InJlcGV0aXRpb24tY291bnQiPgorICAgICAgICAgICAgPHNlbGVjdCBpZD0icmVw
ZXRpdGlvbi1jb3VudCI+CiAgICAgICAgICAgICAgICAgPG9wdGlvbj4xPC9vcHRpb24+CiAgICAg
ICAgICAgICAgICAgPG9wdGlvbj4yPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgPG9wdGlvbj4z
PC9vcHRpb24+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvdGVzdC1ncm91cC1yZXN1bHRzLXRhYmxlLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3Rlc3QtZ3JvdXAtcmVzdWx0cy10YWJsZS5q
cwppbmRleCA3NGE0NmMwZDI0NzIzMTI1YTE2YTc1NTVjZTA0MzZlNmUwODc1MmYxLi45ZDNkMjhi
YjZmMmVlOTFhZGNhNDU5ODZmZDRlZjFlOWIwNDU1NzhhIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvdGVzdC1ncm91cC1yZXN1bHRzLXRh
YmxlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy90ZXN0LWdyb3VwLXJlc3VsdHMtdGFibGUuanMKQEAgLTQsNzMgKzQsNTYgQEAgY2xhc3MgVGVz
dEdyb3VwUmVzdWx0c1RhYmxlIGV4dGVuZHMgUmVzdWx0c1RhYmxlIHsKICAgICB7CiAgICAgICAg
IHN1cGVyKCd0ZXN0LWdyb3VwLXJlc3VsdHMtdGFibGUnKTsKICAgICAgICAgdGhpcy5fdGVzdEdy
b3VwID0gbnVsbDsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRUZXN0R3JvdXAgPSBudWxsOworICAg
ICAgICB0aGlzLl9yZW5kZXJUZXN0R3JvdXBMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVu
Y3Rpb24odGhpcy5fcmVuZGVyVGVzdEdyb3VwLmJpbmQodGhpcykpOwogICAgIH0KIAotICAgIGRp
ZFVwZGF0ZVJlc3VsdHMoKSB7IHRoaXMuX3JlbmRlcmVkVGVzdEdyb3VwID0gbnVsbDsgfQogICAg
IHNldFRlc3RHcm91cCh0ZXN0R3JvdXApCiAgICAgewogICAgICAgICB0aGlzLl90ZXN0R3JvdXAg
PSB0ZXN0R3JvdXA7Ci0gICAgICAgIHRoaXMuX3JlbmRlcmVkVGVzdEdyb3VwID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKLSAgICBoZWFkaW5nKCkKKyAg
ICByZW5kZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudEJhc2UuY3JlYXRlRWxl
bWVudCgndGgnLCB7Y29sc3BhbjogMn0sICdDb25maWd1cmF0aW9uJyk7CisgICAgICAgIHN1cGVy
LnJlbmRlcigpOworICAgICAgICB0aGlzLl9yZW5kZXJUZXN0R3JvdXBMYXppbHkuZXZhbHVhdGUo
dGhpcy5fdGVzdEdyb3VwLCB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3KTsKICAgICB9CiAKLSAg
ICByZW5kZXIoKQorICAgIF9yZW5kZXJUZXN0R3JvdXAodGVzdEdyb3VwLCBhbmFseXNpc1Jlc3Vs
dHMpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWRUZXN0R3JvdXAgPT0gdGhpcy5f
dGVzdEdyb3VwKQorICAgICAgICBpZiAoIWFuYWx5c2lzUmVzdWx0cykKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRUZXN0R3JvdXAgPSB0aGlzLl90ZXN0R3JvdXA7
Ci0gICAgICAgIHN1cGVyLnJlbmRlcigpOworICAgICAgICBjb25zdCByb3dHcm91cHMgPSB0aGlz
Ll9idWlsZFJvd0dyb3VwcygpOworICAgICAgICB0aGlzLnJlbmRlclRhYmxlKAorICAgICAgICAg
ICAgYW5hbHlzaXNSZXN1bHRzLm1ldHJpYygpLm1ha2VGb3JtYXR0ZXIoNCksCisgICAgICAgICAg
ICByb3dHcm91cHMsCisgICAgICAgICAgICAnQ29uZmlndXJhdGlvbicpOwogICAgIH0KIAotICAg
IGJ1aWxkUm93R3JvdXBzKCkKKyAgICBfYnVpbGRSb3dHcm91cHMoKQogICAgIHsKICAgICAgICAg
Y29uc3QgdGVzdEdyb3VwID0gdGhpcy5fdGVzdEdyb3VwOwogICAgICAgICBpZiAoIXRlc3RHcm91
cCkKICAgICAgICAgICAgIHJldHVybiBbXTsKIAogICAgICAgICBjb25zdCBjb21taXRTZXRzID0g
dGhpcy5fdGVzdEdyb3VwLnJlcXVlc3RlZENvbW1pdFNldHMoKTsKLSAgICAgICAgY29uc3QgZ3Jv
dXBzID0gY29tbWl0U2V0cy5tYXAoZnVuY3Rpb24gKGNvbW1pdFNldCkgewotICAgICAgICAgICAg
Y29uc3Qgcm93cyA9IFtuZXcgUmVzdWx0c1RhYmxlUm93KCdNZWFuJywgY29tbWl0U2V0KV07Ci0g
ICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwotCi0gICAgICAgICAgICBmb3IgKHZhciByZXF1
ZXN0IG9mIHRlc3RHcm91cC5yZXF1ZXN0c0ZvckNvbW1pdFNldChjb21taXRTZXQpKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlcXVlc3QucmVzdWx0KCk7Ci0gICAgICAgICAgICAg
ICAgLy8gQ2FsbCByZXN1bHQuY29tbWl0U2V0KCkgZm9yIGVhY2ggcmVzdWx0IHNpbmNlIHRoZSBz
ZXQgb2YgcmV2aXNpb25zIHVzZWQgaW4gdGVzdGluZyBtYXliZSBkaWZmZXJlbnQgZnJvbSByZXF1
ZXN0ZWQgb25lcy4KLSAgICAgICAgICAgICAgICB2YXIgcm93ID0gbmV3IFJlc3VsdHNUYWJsZVJv
dygxICsgK3JlcXVlc3Qub3JkZXIoKSwgcmVzdWx0ID8gcmVzdWx0LmNvbW1pdFNldCgpIDogbnVs
bCk7Ci0gICAgICAgICAgICAgICAgcm93cy5wdXNoKHJvdyk7Ci0gICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICByb3cuc2V0TGluayhyZXN1bHQuYnVpbGQo
KS51cmwoKSwgcmVzdWx0LmJ1aWxkKCkubGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJv
dy5zZXRSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJvdy5z
ZXRMaW5rKHJlcXVlc3Quc3RhdHVzVXJsKCksIHJlcXVlc3Quc3RhdHVzTGFiZWwoKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhZ2dyZWdhdGVkUmVzdWx0ID0gTWVhc3VyZW1l
bnRBZGFwdG9yLmFnZ3JlZ2F0ZUFuYWx5c2lzUmVzdWx0cyhyZXN1bHRzKTsKLSAgICAgICAgICAg
IGlmICghaXNOYU4oYWdncmVnYXRlZFJlc3VsdC52YWx1ZSkpCi0gICAgICAgICAgICAgICAgcm93
c1swXS5zZXRSZXN1bHQoYWdncmVnYXRlZFJlc3VsdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB7
aGVhZGluZzogdGVzdEdyb3VwLmxhYmVsRm9yQ29tbWl0U2V0KGNvbW1pdFNldCksIHJvd3N9Owor
ICAgICAgICBjb25zdCByZXN1bHRzQnlDb21taXRTZXQgPSBuZXcgTWFwOworICAgICAgICBjb25z
dCBncm91cHMgPSBjb21taXRTZXRzLm1hcCgoY29tbWl0U2V0KSA9PiB7CisgICAgICAgICAgICBj
b25zdCBncm91cCA9IHRoaXMuX2J1aWxkUm93R3JvdXBGb3JDb21taXRTZXQodGVzdEdyb3VwLCBj
b21taXRTZXQsIHJlc3VsdHNCeUNvbW1pdFNldCk7CisgICAgICAgICAgICByZXN1bHRzQnlDb21t
aXRTZXQuc2V0KGNvbW1pdFNldCwgZ3JvdXAucmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm4g
Z3JvdXA7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGNvbnN0IGNvbXBhcmlzb25Sb3dzID0gW107
Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWl0U2V0cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1pdFNldHMubGVuZ3RoIC0gMTsgaSsrKSB7
CisgICAgICAgICAgICBjb25zdCBzdGFydENvbW1pdCA9IGNvbW1pdFNldHNbaV07CiAgICAgICAg
ICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBjb21taXRTZXRzLmxlbmd0aDsgaisrKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb25maWcgPSB0ZXN0R3JvdXAubGFiZWxGb3JDb21t
aXRTZXQoY29tbWl0U2V0c1tpXSk7Ci0gICAgICAgICAgICAgICAgY29uc3QgZW5kQ29uZmlnID0g
dGVzdEdyb3VwLmxhYmVsRm9yQ29tbWl0U2V0KGNvbW1pdFNldHNbal0pOwotCi0gICAgICAgICAg
ICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdGVzdEdyb3VwLmNvbXBhcmVUZXN0UmVzdWx0cyhj
b21taXRTZXRzW2ldLCBjb21taXRTZXRzW2pdKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LmNoYW5nZVR5cGUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjb25zdCBlbmRDb21taXQgPSBj
b21taXRTZXRzW2pdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UmVzdWx0cyA9IHJlc3Vs
dHNCeUNvbW1pdFNldC5nZXQoc3RhcnRDb21taXQpIHx8IFtdOworICAgICAgICAgICAgICAgIGNv
bnN0IGVuZFJlc3VsdHMgPSByZXN1bHRzQnlDb21taXRTZXQuZ2V0KGVuZENvbW1pdCkgfHwgW107
CisgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fYnVpbGRDb21wYXJpc29uUm93KHRl
c3RHcm91cCwgc3RhcnRDb21taXQsIHN0YXJ0UmVzdWx0cywgZW5kQ29tbWl0LCBlbmRSZXN1bHRz
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJvdykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcm93ID0gbmV3IFJlc3VsdHNUYWJsZVJvdyhgJHtz
dGFydENvbmZpZ30gdG8gJHtlbmRDb25maWd9YCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgdmFy
IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAg
cm93LnNldExhYmVsRm9yV2hvbGVSb3coZWxlbWVudCgnc3BhbicsIHtjbGFzczogJ3Jlc3VsdHMt
bGFiZWwgJyArIHJlc3VsdC5zdGF0dXN9LCByZXN1bHQuZnVsbExhYmVsKSk7CiAgICAgICAgICAg
ICAgICAgY29tcGFyaXNvblJvd3MucHVzaChyb3cpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC04MCw2ICs2Myw0OCBAQCBjbGFzcyBUZXN0R3JvdXBSZXN1bHRzVGFibGUgZXh0ZW5kcyBS
ZXN1bHRzVGFibGUgewogICAgICAgICByZXR1cm4gZ3JvdXBzOwogICAgIH0KIAorICAgIF9idWls
ZFJvd0dyb3VwRm9yQ29tbWl0U2V0KHRlc3RHcm91cCwgY29tbWl0U2V0KQorICAgIHsKKyAgICAg
ICAgY29uc3Qgcm93cyA9IFtuZXcgUmVzdWx0c1RhYmxlUm93KCdNZWFuJywgY29tbWl0U2V0KV07
CisgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTsKKworICAgICAgICBmb3IgKGNvbnN0IHJlcXVl
c3Qgb2YgdGVzdEdyb3VwLnJlcXVlc3RzRm9yQ29tbWl0U2V0KGNvbW1pdFNldCkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2FuYWx5c2lzUmVzdWx0c1ZpZXcucmVzdWx0Rm9y
QnVpbGRJZChyZXF1ZXN0LmJ1aWxkSWQoKSk7CisgICAgICAgICAgICAvLyBDYWxsIHJlc3VsdC5j
b21taXRTZXQoKSBmb3IgZWFjaCByZXN1bHQgc2luY2UgdGhlIHNldCBvZiByZXZpc2lvbnMgdXNl
ZCBpbiB0ZXN0aW5nIG1heWJlIGRpZmZlcmVudCBmcm9tIHJlcXVlc3RlZCBvbmVzLgorICAgICAg
ICAgICAgY29uc3Qgcm93ID0gbmV3IFJlc3VsdHNUYWJsZVJvdygxICsgK3JlcXVlc3Qub3JkZXIo
KSwgcmVzdWx0ID8gcmVzdWx0LmNvbW1pdFNldCgpIDogbnVsbCk7CisgICAgICAgICAgICByb3dz
LnB1c2gocm93KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBy
b3cuc2V0TGluayhyZXN1bHQuYnVpbGQoKS51cmwoKSwgcmVzdWx0LmJ1aWxkKCkubGFiZWwoKSk7
CisgICAgICAgICAgICAgICAgcm93LnNldFJlc3VsdChyZXN1bHQpOworICAgICAgICAgICAgICAg
IHJlc3VsdHMucHVzaChyZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgcm93LnNldExpbmsocmVxdWVzdC5zdGF0dXNVcmwoKSwgcmVxdWVzdC5zdGF0dXNMYWJlbCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWRSZXN1bHQgPSBNZWFzdXJl
bWVudEFkYXB0b3IuYWdncmVnYXRlQW5hbHlzaXNSZXN1bHRzKHJlc3VsdHMpOworICAgICAgICBp
ZiAoIWlzTmFOKGFnZ3JlZ2F0ZWRSZXN1bHQudmFsdWUpKQorICAgICAgICAgICAgcm93c1swXS5z
ZXRSZXN1bHQoYWdncmVnYXRlZFJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHtoZWFkaW5nOiB0
ZXN0R3JvdXAubGFiZWxGb3JDb21taXRTZXQoY29tbWl0U2V0KSwgcm93cywgcmVzdWx0c307Cisg
ICAgfQorCisgICAgX2J1aWxkQ29tcGFyaXNvblJvdyh0ZXN0R3JvdXAsIHN0YXJ0Q29tbWl0LCBz
dGFydFJlc3VsdHMsIGVuZENvbW1pdCwgZW5kUmVzdWx0cykKKyAgICB7CisgICAgICAgIGNvbnN0
IHN0YXJ0Q29uZmlnID0gdGVzdEdyb3VwLmxhYmVsRm9yQ29tbWl0U2V0KHN0YXJ0Q29tbWl0KTsK
KyAgICAgICAgY29uc3QgZW5kQ29uZmlnID0gdGVzdEdyb3VwLmxhYmVsRm9yQ29tbWl0U2V0KGVu
ZENvbW1pdCk7CisKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdGVzdEdyb3VwLmNvbXBh
cmVUZXN0UmVzdWx0cygKKyAgICAgICAgICAgIHN0YXJ0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4g
cmVzdWx0LnZhbHVlKSwgZW5kUmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnZhbHVlKSk7
CisgICAgICAgIGlmIChyZXN1bHQuY2hhbmdlVHlwZSA9PSBudWxsKQorICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAgICAgY29uc3Qgcm93ID0gbmV3IFJlc3VsdHNUYWJsZVJvdyhgJHtz
dGFydENvbmZpZ30gdG8gJHtlbmRDb25maWd9YCwgbnVsbCk7CisgICAgICAgIGNvbnN0IGVsZW1l
bnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIHJvdy5zZXRMYWJlbEZv
cldob2xlUm93KGVsZW1lbnQoJ3NwYW4nLAorICAgICAgICAgICAge2NsYXNzOiAncmVzdWx0cy1s
YWJlbCAnICsgcmVzdWx0LnN0YXR1c30sIGAke2VuZENvbmZpZ30gaXMgJHtyZXN1bHQuZnVsbExh
YmVsfSB0aGFuICR7c3RhcnRDb25maWd9YCkpOworICAgICAgICByZXR1cm4gcm93OworICAgIH0K
KwogICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gc3VwZXIu
Y3NzVGVtcGxhdGUoKSArIGAKQEAgLTg5LDE3ICsxMTQsMjEgQEAgY2xhc3MgVGVzdEdyb3VwUmVz
dWx0c1RhYmxlIGV4dGVuZHMgUmVzdWx0c1RhYmxlIHsKICAgICAgICAgICAgICAgICBoZWlnaHQ6
IDEwMCU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC5yZXN1bHRzLWxhYmVsIC5mYWls
ZWQgeworICAgICAgICAgICAgdGggeworICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0
b3A7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5mYWlsZWQgewogICAgICAgICAgICAg
ICAgIGNvbG9yOiByZ2IoMTI4LCA1MSwgMTI4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC5yZXN1bHRzLWxhYmVsIC51bmNoYW5nZWQgeworICAgICAgICAgICAgLnVuY2hhbmdlZCB7CiAg
ICAgICAgICAgICAgICAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC5yZXN1bHRzLWxhYmVsLndvcnNlIHsKKyAgICAgICAgICAgIC53b3JzZSB7
CiAgICAgICAgICAgICAgICAgY29sb3I6IHJnYigyNTUsIDEwMiwgMTAyKTsKICAgICAgICAgICAg
ICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC5yZXN1
bHRzLWxhYmVsLmJldHRlciB7CisgICAgICAgICAgICAuYmV0dGVyIHsKICAgICAgICAgICAgICAg
ICBjb2xvcjogcmdiKDEwMiwgMTAyLCAyNTUpOwogICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0
OiBib2xkOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9pbmRleC5odG1sCmluZGV4IGEwNzhhOWIxZDRmMjNmM2EyZWVjYmRmY2MzZDlmNjAyOGI5
YjA1MWQuLjIwYTVkNGY1YzFlMDBmNDI4YzMyMTRhY2MyMDFlOWE4NDU4ZjZlYTcgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTg5LDYgKzg5
LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRp
bWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2No
YXJ0LXJldmlzaW9uLXJhbmdlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImNv
bXBvbmVudHMvY2hhcnQtcGFuZS1iYXNlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBz
cmM9ImNvbXBvbmVudHMvbXV0YWJsZS1saXN0LXZpZXcuanMiPjwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHNyYz0iY29tcG9uZW50cy9hbmFseXNpcy10YXNrLWJ1Zy1saXN0LmpzIj48L3Njcmlw
dD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvcmF0aW8tYmFyLWdyYXBoLmpzIj48
L3NjcmlwdD4KIAogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS5qcyI+PC9zY3JpcHQ+
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9h
bmFseXNpcy1yZXN1bHRzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvYW5hbHlzaXMtcmVzdWx0cy5qcwppbmRleCAyMzRjZTM2MGE3Y2JlYTViYjBlZDA4OTE4
ZWNhYWEzOTdlOWMwZjk2Li5iYjA4NTkwYzg4NjY5YTRmOTQ4MTg2OGEwYTFmOGY1YTYxZDUwODkw
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9h
bmFseXNpcy1yZXN1bHRzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2FuYWx5c2lzLXJlc3VsdHMuanMKQEAgLTIsMjUgKzIsMzIgQEAKIGNsYXNzIEFu
YWx5c2lzUmVzdWx0cyB7CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgdGhpcy5f
YnVpbGRUb01ldHJpY3NNYXAgPSB7fTsKKyAgICAgICAgdGhpcy5fbWV0cmljVG9CdWlsZE1hcCA9
IHt9OwogICAgIH0KIAotICAgIGZpbmQoYnVpbGRJZCwgbWV0cmljKQorICAgIGZpbmQoYnVpbGRJ
ZCwgbWV0cmljSWQpCiAgICAgewotICAgICAgICB2YXIgbWFwID0gdGhpcy5fYnVpbGRUb01ldHJp
Y3NNYXBbYnVpbGRJZF07CisgICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21ldHJpY1RvQnVpbGRN
YXBbbWV0cmljSWRdOwogICAgICAgICBpZiAoIW1hcCkKICAgICAgICAgICAgIHJldHVybiBudWxs
OwotICAgICAgICByZXR1cm4gbWFwW21ldHJpYy5pZCgpXTsKKyAgICAgICAgcmV0dXJuIG1hcFti
dWlsZElkXTsKICAgICB9CiAKICAgICBhZGQobWVhc3VyZW1lbnQpCiAgICAgewogICAgICAgICBj
b25zb2xlLmFzc2VydChtZWFzdXJlbWVudC5jb25maWdUeXBlID09ICdjdXJyZW50Jyk7Ci0gICAg
ICAgIGlmICghdGhpcy5fYnVpbGRUb01ldHJpY3NNYXBbbWVhc3VyZW1lbnQuYnVpbGRJZF0pCi0g
ICAgICAgICAgICB0aGlzLl9idWlsZFRvTWV0cmljc01hcFttZWFzdXJlbWVudC5idWlsZElkXSA9
IHt9OwotICAgICAgICB2YXIgbWFwID0gdGhpcy5fYnVpbGRUb01ldHJpY3NNYXBbbWVhc3VyZW1l
bnQuYnVpbGRJZF07Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFtYXBbbWVhc3VyZW1lbnQubWV0
cmljSWRdKTsKLSAgICAgICAgbWFwW21lYXN1cmVtZW50Lm1ldHJpY0lkXSA9IG1lYXN1cmVtZW50
OworICAgICAgICBjb25zdCBtZXRyaWNJZCA9IG1lYXN1cmVtZW50Lm1ldHJpY0lkOworICAgICAg
ICBpZiAoIShtZXRyaWNJZCBpbiB0aGlzLl9tZXRyaWNUb0J1aWxkTWFwKSkKKyAgICAgICAgICAg
IHRoaXMuX21ldHJpY1RvQnVpbGRNYXBbbWV0cmljSWRdID0ge307CisgICAgICAgIHZhciBtYXAg
PSB0aGlzLl9tZXRyaWNUb0J1aWxkTWFwW21ldHJpY0lkXTsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoIW1hcFttZWFzdXJlbWVudC5idWlsZElkXSk7CisgICAgICAgIG1hcFttZWFzdXJlbWVudC5i
dWlsZElkXSA9IG1lYXN1cmVtZW50OworICAgIH0KKworICAgIHZpZXdGb3JNZXRyaWMobWV0cmlj
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQobWV0cmljIGluc3RhbmNlb2YgTWV0cmlj
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBBbmFseXNpc1Jlc3VsdHNWaWV3KHRoaXMsIG1ldHJpYyk7
CiAgICAgfQogCiAgICAgc3RhdGljIGZldGNoKHRhc2tJZCkKQEAgLTMwLDkgKzM3LDkgQEAgY2xh
c3MgQW5hbHlzaXNSZXN1bHRzIHsKIAogICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0
TWVhc3VyaW5nVGltZSgnQW5hbHlzaXNSZXN1bHRzJywgJ2ZldGNoJyk7CiAKLSAgICAgICAgICAg
IHZhciBhZGFwdG9yID0gbmV3IE1lYXN1cmVtZW50QWRhcHRvcihyZXNwb25zZVsnZm9ybWF0TWFw
J10pOwotICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQW5hbHlzaXNSZXN1bHRzOwotICAg
ICAgICAgICAgZm9yICh2YXIgcmF3TWVhc3VyZW1lbnQgb2YgcmVzcG9uc2VbJ21lYXN1cmVtZW50
cyddKQorICAgICAgICAgICAgY29uc3QgYWRhcHRvciA9IG5ldyBNZWFzdXJlbWVudEFkYXB0b3Io
cmVzcG9uc2VbJ2Zvcm1hdE1hcCddKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcg
QW5hbHlzaXNSZXN1bHRzOworICAgICAgICAgICAgZm9yIChjb25zdCByYXdNZWFzdXJlbWVudCBv
ZiByZXNwb25zZVsnbWVhc3VyZW1lbnRzJ10pCiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQo
YWRhcHRvci5hcHBseVRvQW5hbHlzaXNSZXN1bHRzKHJhd01lYXN1cmVtZW50KSk7CiAKICAgICAg
ICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdBbmFseXNpc1Jlc3VsdHMn
LCAnZmV0Y2gnKTsKQEAgLTQxLDMgKzQ4LDIwIEBAIGNsYXNzIEFuYWx5c2lzUmVzdWx0cyB7CiAg
ICAgICAgIH0pOwogICAgIH0KIH0KKworY2xhc3MgQW5hbHlzaXNSZXN1bHRzVmlldyB7CisgICAg
Y29uc3RydWN0b3IoYW5hbHlzaXNSZXN1bHRzLCBtZXRyaWMpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydChhbmFseXNpc1Jlc3VsdHMgaW5zdGFuY2VvZiBBbmFseXNpc1Jlc3VsdHMpOwor
ICAgICAgICBjb25zb2xlLmFzc2VydChtZXRyaWMgaW5zdGFuY2VvZiBNZXRyaWMpOworICAgICAg
ICB0aGlzLl9yZXN1bHRzID0gYW5hbHlzaXNSZXN1bHRzOworICAgICAgICB0aGlzLl9tZXRyaWMg
PSBtZXRyaWM7CisgICAgfQorCisgICAgbWV0cmljKCkgeyByZXR1cm4gdGhpcy5fbWV0cmljOyB9
CisKKyAgICByZXN1bHRGb3JCdWlsZElkKGJ1aWxkSWQpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fcmVzdWx0cy5maW5kKGJ1aWxkSWQsIHRoaXMuX21ldHJpYy5pZCgpKTsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9i
dWlsZC1yZXF1ZXN0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvYnVpbGQtcmVxdWVzdC5qcwppbmRleCA0NTM1NjAyZjgxNTkyNTBhN2RkMTFiNmJlMDQ2MzM3
MTc2NjNmZGFjLi40ZjMwOTQ1NjdhM2NhZDBmMThiZGZjYWMwYmU3ODk2OTZmYjQ5YjgyIDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWlsZC1y
ZXF1ZXN0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L2J1aWxkLXJlcXVlc3QuanMKQEAgLTEwOCwxMyArMTA4LDYgQEAgY2xhc3MgQnVpbGRSZXF1ZXN0
IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgIH0K
IAotICAgIHJlc3VsdCgpIHsgcmV0dXJuIHRoaXMuX3Jlc3VsdDsgfQotICAgIHNldFJlc3VsdChy
ZXN1bHQpCi0gICAgewotICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgIHRo
aXMuX3Rlc3RHcm91cC5kaWRTZXRSZXN1bHQodGhpcyk7Ci0gICAgfQotCiAgICAgc3RhdGljIGZl
dGNoRm9yVHJpZ2dlcmFibGUodHJpZ2dlcmFibGUpCiAgICAgewogICAgICAgICByZXR1cm4gUmVt
b3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKCcvYXBpL2J1aWxkLXJlcXVlc3RzLycgKyB0cmlnZ2Vy
YWJsZSkudGhlbihmdW5jdGlvbiAoZGF0YSkgewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3Rlc3QtZ3JvdXAuanMKaW5kZXggYzRjOTQ0NjFk
ZmRiNDZkMWMwYzY2YThhYzY1ZDc0ZmFlMGZkZGQ2Mi4uMmNhMjY0OTQzOWIwODM1Yjk0NjI0OGYw
NThiOGQwMWE4OGUyN2E0MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvdGVzdC1ncm91cC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL21vZGVscy90ZXN0LWdyb3VwLmpzCkBAIC0xNCw3ICsxNCw2IEBAIGNsYXNz
IFRlc3RHcm91cCBleHRlbmRzIExhYmVsZWRPYmplY3QgewogICAgICAgICB0aGlzLl9yZXBvc2l0
b3JpZXMgPSBudWxsOwogICAgICAgICB0aGlzLl9yZXF1ZXN0ZWRDb21taXRTZXRzID0gbnVsbDsK
ICAgICAgICAgdGhpcy5fY29tbWl0U2V0VG9MYWJlbCA9IG5ldyBNYXA7Ci0gICAgICAgIHRoaXMu
X2FsbENvbW1pdFNldHMgPSBudWxsOwogICAgICAgICBjb25zb2xlLmFzc2VydCghb2JqZWN0LnBs
YXRmb3JtIHx8IG9iamVjdC5wbGF0Zm9ybSBpbnN0YW5jZW9mIFBsYXRmb3JtKTsKICAgICAgICAg
dGhpcy5fcGxhdGZvcm0gPSBvYmplY3QucGxhdGZvcm07CiAgICAgfQpAQCAtOTUsMTEgKzk0LDYg
QEAgY2xhc3MgVGVzdEdyb3VwIGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHRoaXMu
X3JlcXVlc3RzQXJlSW5PcmRlciA9IHRydWU7CiAgICAgfQogCi0gICAgZGlkU2V0UmVzdWx0KHJl
cXVlc3QpCi0gICAgewotICAgICAgICB0aGlzLl9hbGxDb21taXRTZXRzID0gbnVsbDsKLSAgICB9
Ci0KICAgICBoYXNGaW5pc2hlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRS
ZXF1ZXN0cy5ldmVyeShmdW5jdGlvbiAocmVxdWVzdCkgeyByZXR1cm4gcmVxdWVzdC5oYXNGaW5p
c2hlZCgpOyB9KTsKQEAgLTExNSwxMCArMTA5LDggQEAgY2xhc3MgVGVzdEdyb3VwIGV4dGVuZHMg
TGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHJldHVybiB0aGlzLl9idWlsZFJlcXVlc3RzLnNvbWUo
ZnVuY3Rpb24gKHJlcXVlc3QpIHsgcmV0dXJuIHJlcXVlc3QuaXNQZW5kaW5nKCk7IH0pOwogICAg
IH0KIAotICAgIGNvbXBhcmVUZXN0UmVzdWx0cyhjb21taXRTZXRBLCBjb21taXRTZXRCKQorICAg
IGNvbXBhcmVUZXN0UmVzdWx0cyhiZWZvcmVWYWx1ZXMsIGFmdGVyVmFsdWVzKQogICAgIHsKLSAg
ICAgICAgY29uc3QgYmVmb3JlVmFsdWVzID0gdGhpcy5fdmFsdWVzRm9yQ29tbWl0U2V0KGNvbW1p
dFNldEEpOwotICAgICAgICBjb25zdCBhZnRlclZhbHVlcyA9IHRoaXMuX3ZhbHVlc0ZvckNvbW1p
dFNldChjb21taXRTZXRCKTsKICAgICAgICAgY29uc3QgYmVmb3JlTWVhbiA9IFN0YXRpc3RpY3Mu
c3VtKGJlZm9yZVZhbHVlcykgLyBiZWZvcmVWYWx1ZXMubGVuZ3RoOwogICAgICAgICBjb25zdCBh
ZnRlck1lYW4gPSBTdGF0aXN0aWNzLnN1bShhZnRlclZhbHVlcykgLyBhZnRlclZhbHVlcy5sZW5n
dGg7CiAKQEAgLTE2MCwxNyArMTUyLDYgQEAgY2xhc3MgVGVzdEdyb3VwIGV4dGVuZHMgTGFiZWxl
ZE9iamVjdCB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgX3ZhbHVlc0Zv
ckNvbW1pdFNldChjb21taXRTZXQpCi0gICAgewotICAgICAgICBjb25zdCByZXF1ZXN0cyA9IHRo
aXMucmVxdWVzdHNGb3JDb21taXRTZXQoY29tbWl0U2V0KTsKLSAgICAgICAgY29uc3QgdmFsdWVz
ID0gW107Ci0gICAgICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHsKLSAgICAgICAg
ICAgIGlmIChyZXF1ZXN0LnJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHJl
cXVlc3QucmVzdWx0KCkudmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZXM7
Ci0gICAgfQotCiAgICAgdXBkYXRlTmFtZShuZXdOYW1lKQogICAgIHsKICAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9hbmFseXNpcy10YXNrLXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwppbmRleCAwMGVjNWVjNjEyZWU2
OTk4NmJkY2M0NDFlY2Q3NTE2NGYyYzk0NjQ0Li44MTQ5MWNhODFhNDBlYTNjYjA5ZmUyZGZmYWM5
YmU4ODQ5Mjg4Y2E3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwpAQCAtNCwzNyArNCwz
MzEgQEAgY2xhc3MgQW5hbHlzaXNUYXNrQ2hhcnRQYW5lIGV4dGVuZHMgQ2hhcnRQYW5lQmFzZSB7
CiAgICAgewogICAgICAgICBzdXBlcignYW5hbHlzaXMtdGFzay1jaGFydC1wYW5lJyk7CiAgICAg
ICAgIHRoaXMuX3BhZ2UgPSBudWxsOworICAgICAgICB0aGlzLl9zaG93Rm9ybSA9IGZhbHNlOwog
ICAgIH0KIAogICAgIHNldFBhZ2UocGFnZSkgeyB0aGlzLl9wYWdlID0gcGFnZTsgfQorICAgIHNl
dFNob3dGb3JtKHNob3cpCisgICAgeworICAgICAgICB0aGlzLl9zaG93Rm9ybSA9IHNob3c7Cisg
ICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQogICAgIHJvdXRlcigpIHsgcmV0
dXJuIHRoaXMuX3BhZ2Uucm91dGVyKCk7IH0KIAogICAgIF9tYWluU2VsZWN0aW9uRGlkQ2hhbmdl
KHNlbGVjdGlvbiwgZGlkRW5kRHJhZykKICAgICB7CiAgICAgICAgIHN1cGVyLl9tYWluU2VsZWN0
aW9uRGlkQ2hhbmdlKHNlbGVjdGlvbik7CiAgICAgICAgIGlmIChkaWRFbmREcmFnKQotICAgICAg
ICAgICAgdGhpcy5fcGFnZS5fY2hhcnRTZWxlY3Rpb25EaWRDaGFuZ2UoKTsKKyAgICAgICAgICAg
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgfQogCi0gICAgc2VsZWN0ZWRQb2ludHMoKQor
ICAgIGRpZENvbnN0cnVjdFNoYWRvd1RyZWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X21haW5DaGFydCA/IHRoaXMuX21haW5DaGFydC5zZWxlY3RlZFBvaW50cygnY3VycmVudCcpIDog
bnVsbDsKKyAgICAgICAgdGhpcy5wYXJ0KCdmb3JtJykubGlzdGVuVG9BY3Rpb24oJ3N0YXJ0VGVz
dGluZycsIChyZXBldGl0aW9uQ291bnQsIG5hbWUsIGNvbW1pdFNldE1hcCkgPT4geworICAgICAg
ICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbignbmV3VGVzdEdyb3VwJywgbmFtZSwgcmVwZXRpdGlv
bkNvdW50LCBjb21taXRTZXRNYXApOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZW5kZXIo
KQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIGNvbnN0IHBvaW50cyA9
IHRoaXMuX21haW5DaGFydCA/IHRoaXMuX21haW5DaGFydC5zZWxlY3RlZFBvaW50cygnY3VycmVu
dCcpIDogbnVsbDsKKworICAgICAgICB0aGlzLmNvbnRlbnQoJ2Zvcm0nKS5zdHlsZS5kaXNwbGF5
ID0gdGhpcy5fc2hvd0Zvcm0gPyBudWxsIDogJ25vbmUnOworICAgICAgICBpZiAodGhpcy5fc2hv
d0Zvcm0pIHsKKyAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLnBhcnQoJ2Zvcm0nKTsKKyAg
ICAgICAgICAgIGZvcm0uc2V0Q29tbWl0U2V0TWFwKHBvaW50cyAmJiBwb2ludHMubGVuZ3RoKCkg
Pj0gMiA/IHsnQSc6IHBvaW50cy5maXJzdFBvaW50KCkuY29tbWl0U2V0KCksICdCJzogcG9pbnRz
Lmxhc3RQb2ludCgpLmNvbW1pdFNldCgpfSA6IG51bGwpOworICAgICAgICAgICAgZm9ybS5lbnF1
ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBwYW5lRm9vdGVy
VGVtcGxhdGUoKSB7IHJldHVybiAnPGN1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0gaWQ9ImZv
cm0iPjwvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybT4nOyB9CisKKyAgICBzdGF0aWMgY3Nz
VGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmNzc1RlbXBsYXRlKCkgKyBg
CisgICAgICAgICAgICAjZm9ybSB7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVyZW07Cisg
ICAgICAgICAgICB9CisgICAgICAgIGA7CiAgICAgfQogfQogCiBDb21wb25lbnRCYXNlLmRlZmlu
ZUVsZW1lbnQoJ2FuYWx5c2lzLXRhc2stY2hhcnQtcGFuZScsIEFuYWx5c2lzVGFza0NoYXJ0UGFu
ZSk7CiAKK2NsYXNzIEFuYWx5c2lzVGFza1Jlc3VsdHNQYW5lIGV4dGVuZHMgQ29tcG9uZW50QmFz
ZSB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ2FuYWx5c2lzLXRh
c2stcmVzdWx0cy1wYW5lJyk7CisgICAgICAgIHRoaXMuX3Nob3dGb3JtID0gZmFsc2U7CisgICAg
fQorCisgICAgc2V0UG9pbnRzKHN0YXJ0UG9pbnQsIGVuZFBvaW50LCBtZXRyaWMpCisgICAgewor
ICAgICAgICBjb25zdCByZXN1bHRzVmlld2VyID0gdGhpcy5wYXJ0KCdyZXN1bHRzLXZpZXdlcicp
OworICAgICAgICByZXN1bHRzVmlld2VyLnNldFBvaW50cyhzdGFydFBvaW50LCBlbmRQb2ludCwg
bWV0cmljKTsKKyAgICAgICAgcmVzdWx0c1ZpZXdlci5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9
CisKKyAgICBzZXRUZXN0R3JvdXBzKHRlc3RHcm91cHMsIGN1cnJlbnRHcm91cCkKKyAgICB7Cisg
ICAgICAgIHRoaXMucGFydCgncmVzdWx0cy12aWV3ZXInKS5zZXRUZXN0R3JvdXBzKHRlc3RHcm91
cHMsIGN1cnJlbnRHcm91cCk7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAg
fQorCisgICAgc2V0QW5hbHlzaXNSZXN1bHRzVmlldyhhbmFseXNpc1Jlc3VsdHNWaWV3KQorICAg
IHsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXZpZXdlcicpLnNldEFuYWx5c2lzUmVzdWx0
c1ZpZXcoYW5hbHlzaXNSZXN1bHRzVmlldyk7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVy
KCk7CisgICAgfQorCisgICAgc2V0U2hvd0Zvcm0oc2hvdykKKyAgICB7CisgICAgICAgIHRoaXMu
X3Nob3dGb3JtID0gc2hvdzsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9
CisKKyAgICBkaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCkKKyAgICB7CisgICAgICAgIGNvbnN0IHJl
c3VsdHNWaWV3ZXIgPSB0aGlzLnBhcnQoJ3Jlc3VsdHMtdmlld2VyJyk7CisgICAgICAgIHJlc3Vs
dHNWaWV3ZXIubGlzdGVuVG9BY3Rpb24oJ3Rlc3RHcm91cENsaWNrJywgKHRlc3RHcm91cCkgPT4g
dGhpcy5kaXNwYXRjaEFjdGlvbignc2hvd1Rlc3RHcm91cCcsIHRlc3RHcm91cCkpOworICAgICAg
ICByZXN1bHRzVmlld2VyLnNldFJhbmdlU2VsZWN0b3JMYWJlbHMoWydBJywgJ0InXSk7CisgICAg
ICAgIHJlc3VsdHNWaWV3ZXIubGlzdGVuVG9BY3Rpb24oJ3JhbmdlU2VsZWN0b3JDbGljaycsICgp
ID0+IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCkpOworCisgICAgICAgIHRoaXMucGFydCgnZm9ybScp
Lmxpc3RlblRvQWN0aW9uKCdzdGFydFRlc3RpbmcnLCAocmVwZXRpdGlvbkNvdW50LCBuYW1lLCBj
b21taXRTZXRNYXApID0+IHsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ25ld1Rl
c3RHcm91cCcsIG5hbWUsIHJlcGV0aXRpb25Db3VudCwgY29tbWl0U2V0TWFwKTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7CisgICAgICAgIHRoaXMucGFydCgncmVz
dWx0cy12aWV3ZXInKS5lbnF1ZXVlVG9SZW5kZXIoKTsKKworICAgICAgICB0aGlzLmNvbnRlbnQo
J2Zvcm0nKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fc2hvd0Zvcm0gPyBudWxsIDogJ25vbmUnOwor
ICAgICAgICBpZiAoIXRoaXMuX3Nob3dGb3JtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLnBhcnQoJ3Jlc3VsdHMtdmlld2VyJykuc2Vs
ZWN0ZWRSYW5nZSgpOworICAgICAgICBjb25zdCBmaXJzdENvbW1pdFNldCA9IHNlbGVjdGVkUmFu
Z2VbJ0EnXTsKKyAgICAgICAgY29uc3Qgc2Vjb25kQ29tbWl0U2V0ID0gc2VsZWN0ZWRSYW5nZVsn
QiddOworICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5wYXJ0KCdmb3JtJyk7CisgICAgICAgIGZv
cm0uc2V0Q29tbWl0U2V0TWFwKGZpcnN0Q29tbWl0U2V0ICYmIHNlY29uZENvbW1pdFNldCA/IHsn
QSc6IGZpcnN0Q29tbWl0U2V0LCAnQic6IHNlY29uZENvbW1pdFNldH0gOiBudWxsKTsKKyAgICAg
ICAgZm9ybS5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBs
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGFuYWx5c2lzLXJlc3VsdHMtdmlld2VyIGlk
PSJyZXN1bHRzLXZpZXdlciI+PC9hbmFseXNpcy1yZXN1bHRzLXZpZXdlcj48Y3VzdG9taXphYmxl
LXRlc3QtZ3JvdXAtZm9ybSBpZD0iZm9ybSI+PC9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3Jt
PmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBgCisgICAgICAgICAgICAjZm9ybSB7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVy
ZW07CisgICAgICAgICAgICB9CisgICAgICAgIGA7CisgICAgfQorfQorCitDb21wb25lbnRCYXNl
LmRlZmluZUVsZW1lbnQoJ2FuYWx5c2lzLXRhc2stcmVzdWx0cy1wYW5lJywgQW5hbHlzaXNUYXNr
UmVzdWx0c1BhbmUpOworCitjbGFzcyBBbmFseXNpc1Rhc2tUZXN0R3JvdXBQYW5lIGV4dGVuZHMg
Q29tcG9uZW50QmFzZSB7CisKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBl
cignYW5hbHlzaXMtdGFzay10ZXN0LWdyb3VwLXBhbmUnKTsKKyAgICAgICAgdGhpcy5fcmVuZGVy
VGVzdEdyb3Vwc0xhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5k
ZXJUZXN0R3JvdXBzLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9yZW5kZXJUZXN0R3JvdXBW
aXNpYmlsaXR5TGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRl
clRlc3RHcm91cFZpc2liaWxpdHkuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3JlbmRlclRl
c3RHcm91cE5hbWVzTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3Jl
bmRlclRlc3RHcm91cE5hbWVzLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9yZW5kZXJDdXJy
ZW50VGVzdEdyb3VwTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3Jl
bmRlckN1cnJlbnRUZXN0R3JvdXAuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3Rlc3RHcm91
cE1hcCA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX3Rlc3RHcm91cHMgPSBbXTsKKyAgICAgICAg
dGhpcy5fY3VycmVudFRlc3RHcm91cCA9IG51bGw7CisgICAgICAgIHRoaXMuX3Nob3dIaWRkZW5H
cm91cHMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBkaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuY29udGVudCgnaGlkZS1idXR0b24nKS5vbmNsaWNrID0gKCkgPT4g
dGhpcy5kaXNwYXRjaEFjdGlvbigndG9nZ2xlVGVzdEdyb3VwVmlzaWJpbGl0eScsIHRoaXMuX2N1
cnJlbnRUZXN0R3JvdXApOworICAgICAgICB0aGlzLnBhcnQoJ3JldHJ5LWZvcm0nKS5saXN0ZW5U
b0FjdGlvbignc3RhcnRUZXN0aW5nJywgKHJlcGV0aXRpb25Db3VudCkgPT4geworICAgICAgICAg
ICAgdGhpcy5kaXNwYXRjaEFjdGlvbigncmV0cnlUZXN0R3JvdXAnLCB0aGlzLl9jdXJyZW50VGVz
dEdyb3VwLCByZXBldGl0aW9uQ291bnQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzZXRU
ZXN0R3JvdXBzKHRlc3RHcm91cHMsIGN1cnJlbnRUZXN0R3JvdXAsIHNob3dIaWRkZW5Hcm91cHMp
CisgICAgeworICAgICAgICB0aGlzLl90ZXN0R3JvdXBzID0gdGVzdEdyb3VwczsKKyAgICAgICAg
dGhpcy5fY3VycmVudFRlc3RHcm91cCA9IGN1cnJlbnRUZXN0R3JvdXA7CisgICAgICAgIHRoaXMu
X3Nob3dIaWRkZW5Hcm91cHMgPSBzaG93SGlkZGVuR3JvdXBzOworICAgICAgICB0aGlzLnBhcnQo
J3Jlc3VsdHMtdGFibGUnKS5zZXRUZXN0R3JvdXAoY3VycmVudFRlc3RHcm91cCk7CisgICAgICAg
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAgc2V0QW5hbHlzaXNSZXN1bHRz
VmlldyhhbmFseXNpc1Jlc3VsdHNWaWV3KQorICAgIHsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1
bHRzLXRhYmxlJykuc2V0QW5hbHlzaXNSZXN1bHRzVmlldyhhbmFseXNpc1Jlc3VsdHNWaWV3KTsK
KyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICByZW5kZXIoKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fcmVuZGVyVGVzdEdyb3Vwc0xhemlseS5ldmFsdWF0ZSh0aGlz
Ll9zaG93SGlkZGVuR3JvdXBzLCAuLi50aGlzLl90ZXN0R3JvdXBzKTsKKyAgICAgICAgdGhpcy5f
cmVuZGVyVGVzdEdyb3VwVmlzaWJpbGl0eUxhemlseS5ldmFsdWF0ZSguLi50aGlzLl90ZXN0R3Jv
dXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlzSGlkZGVuKCkgPyAnaGlkZGVuJyA6ICd2aXNpYmxl
JykpOworICAgICAgICB0aGlzLl9yZW5kZXJUZXN0R3JvdXBOYW1lc0xhemlseS5ldmFsdWF0ZSgu
Li50aGlzLl90ZXN0R3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLmxhYmVsKCkpKTsKKyAgICAg
ICAgdGhpcy5fcmVuZGVyQ3VycmVudFRlc3RHcm91cCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsK
KyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXRhYmxlJykuZW5xdWV1ZVRvUmVuZGVyKCk7Cisg
ICAgICAgIHRoaXMucGFydCgncmV0cnktZm9ybScpLmVucXVldWVUb1JlbmRlcigpOworICAgIH0K
KworICAgIF9yZW5kZXJUZXN0R3JvdXBzKHNob3dIaWRkZW5Hcm91cHMsIC4uLnRlc3RHcm91cHMp
CisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVt
ZW50OworICAgICAgICBjb25zdCBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworCisg
ICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcCA9IG5ldyBNYXA7CisgICAgICAgIGNvbnN0IHRlc3RH
cm91cEl0ZW1zID0gdGVzdEdyb3Vwcy5tYXAoKGdyb3VwKSA9PiB7CisgICAgICAgICAgICBjb25z
dCB0ZXh0ID0gbmV3IEVkaXRhYmxlVGV4dChncm91cC5sYWJlbCgpKTsKKyAgICAgICAgICAgIHRl
eHQubGlzdGVuVG9BY3Rpb24oJ3VwZGF0ZScsICgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24oJ3Jl
bmFtZVRlc3RHcm91cCcsIGdyb3VwLCB0ZXh0LmVkaXRlZFRleHQoKSkpOworCisgICAgICAgICAg
ICBjb25zdCBsaXN0SXRlbSA9IGVsZW1lbnQoJ2xpJywgbGluayh0ZXh0LCBncm91cC5sYWJlbCgp
LCAoKSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKCdzaG93VGVzdEdyb3VwJywgZ3JvdXApKSk7CisK
KyAgICAgICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5zZXQoZ3JvdXAsIHt0ZXh0LCBsaXN0SXRl
bX0pOworICAgICAgICAgICAgcmV0dXJuIGxpc3RJdGVtOworICAgICAgICB9KTsKKworICAgICAg
ICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCd0ZXN0LWdyb3VwLWxpc3QnKSwgW3Rl
c3RHcm91cEl0ZW1zLAorICAgICAgICAgICAgc2hvd0hpZGRlbkdyb3VwcyA/IFtdIDogZWxlbWVu
dCgnbGknLCB7Y2xhc3M6ICd0ZXN0LWdyb3VwLWxpc3Qtc2hvdy1hbGwnfSwgbGluaygnU2hvdyBo
aWRkZW4gdGVzdHMnLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlv
bignc2hvd0hpZGRlblRlc3RHcm91cHMnKTsKKyAgICAgICAgICAgIH0pKV0pOworICAgIH0KKwor
ICAgIF9yZW5kZXJUZXN0R3JvdXBWaXNpYmlsaXR5KC4uLmdyb3VwVmlzaWJpbGl0aWVzKQorICAg
IHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cFZpc2liaWxpdGllcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgICAgIHRoaXMuX3Rlc3RHcm91cE1hcC5nZXQodGhpcy5fdGVzdEdyb3Vw
c1tpXSkubGlzdEl0ZW0uY2xhc3NOYW1lID0gZ3JvdXBWaXNpYmlsaXRpZXNbaV07CisgICAgfQor
CisgICAgX3JlbmRlclRlc3RHcm91cE5hbWVzKC4uLmdyb3VwTmFtZXMpCisgICAgeworICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwTmFtZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICB0aGlzLl90ZXN0R3JvdXBNYXAuZ2V0KHRoaXMuX3Rlc3RHcm91cHNbaV0pLnRleHQuc2V0VGV4
dChncm91cE5hbWVzW2ldKTsKKyAgICB9CisKKyAgICBfcmVuZGVyQ3VycmVudFRlc3RHcm91cChj
dXJyZW50R3JvdXApCisgICAgeworICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY29udGVu
dCgndGVzdC1ncm91cC1saXN0JykucXVlcnlTZWxlY3RvcignLnNlbGVjdGVkJyk7CisgICAgICAg
IGlmIChzZWxlY3RlZCkKKyAgICAgICAgICAgIHNlbGVjdGVkLmNsYXNzTGlzdC5yZW1vdmUoJ3Nl
bGVjdGVkJyk7CisgICAgICAgIGlmIChjdXJyZW50R3JvdXApCisgICAgICAgICAgICB0aGlzLl90
ZXN0R3JvdXBNYXAuZ2V0KGN1cnJlbnRHcm91cCkubGlzdEl0ZW0uY2xhc3NMaXN0LmFkZCgnc2Vs
ZWN0ZWQnKTsKKworICAgICAgICBpZiAoY3VycmVudEdyb3VwKQorICAgICAgICAgICAgdGhpcy5w
YXJ0KCdyZXRyeS1mb3JtJykuc2V0UmVwZXRpdGlvbkNvdW50KGN1cnJlbnRHcm91cC5yZXBldGl0
aW9uQ291bnQoKSk7CisgICAgICAgIHRoaXMuY29udGVudCgncmV0cnktZm9ybScpLnN0eWxlLmRp
c3BsYXkgPSBjdXJyZW50R3JvdXAgPyBudWxsIDogJ25vbmUnOworCisgICAgICAgIGNvbnN0IGhp
ZGVCdXR0b24gPSB0aGlzLmNvbnRlbnQoJ2hpZGUtYnV0dG9uJyk7CisgICAgICAgIGhpZGVCdXR0
b24udGV4dENvbnRlbnQgPSBjdXJyZW50R3JvdXAgJiYgY3VycmVudEdyb3VwLmlzSGlkZGVuKCkg
PyAnVW5oaWRlJyA6ICdIaWRlJzsKKyAgICAgICAgaGlkZUJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0g
Y3VycmVudEdyb3VwID8gbnVsbCA6ICdub25lJzsKKworICAgICAgICB0aGlzLmNvbnRlbnQoJ3Bl
bmRpbmctcmVxdWVzdC1jYW5jZWwtd2FybmluZycpLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50R3Jv
dXAgJiYgY3VycmVudEdyb3VwLmhhc1BlbmRpbmcoKSA/IG51bGwgOiAnbm9uZSc7CisgICAgfQor
CisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAg
ICAgICAgICAgPHVsIGlkPSJ0ZXN0LWdyb3VwLWxpc3QiPjwvdWw+CisgICAgICAgICAgICA8ZGl2
IGlkPSJ0ZXN0LWdyb3VwLWRldGFpbHMiPgorICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLXJl
c3VsdHMtdGFibGUgaWQ9InJlc3VsdHMtdGFibGUiPjwvdGVzdC1ncm91cC1yZXN1bHRzLXRhYmxl
PgorICAgICAgICAgICAgICAgIDx0ZXN0LWdyb3VwLWZvcm0gaWQ9InJldHJ5LWZvcm0iPlJldHJ5
PC90ZXN0LWdyb3VwLWZvcm0+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iaGlkZS1idXR0
b24iPkhpZGU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGVuZGluZy1yZXF1
ZXN0LWNhbmNlbC13YXJuaW5nIj4oY2FuY2VscyBwZW5kaW5nIHJlcXVlc3RzKTwvc3Bhbj4KKyAg
ICAgICAgICAgIDwvZGl2PmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICA6aG9zdCB7CisgICAgICAgICAgICAg
ICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAjdGVzdC1ncm91cC1saXN0IHsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAg
ICAgICAgICAgcGFkZGluZzogMC4ycmVtIDA7CisgICAgICAgICAgICAgICAgbGlzdC1zdHlsZTog
bm9uZTsKKyAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAjY2NjOworICAg
ICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgICAgICAgICAgICAgbWluLXdp
ZHRoOiA4cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaSB7CisgICAgICAgICAg
ICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpID4gYSB7CisgICAgICAgICAgICAgICAg
ZGlzcGxheTogYmxvY2s7CisgICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXQ7CisgICAgICAg
ICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAgICAgIG1hcmdpbjog
MDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJyZW07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGxpLnRlc3QtZ3JvdXAtbGlzdC1zaG93LWFsbCB7CisgICAgICAgICAgICAgICAg
Zm9udC1zaXplOiAwLjhyZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMC41cmVtOwor
ICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07CisgICAgICAgICAgICAgICAgdGV4
dC1hbGlnbjogY2VudGVyOworICAgICAgICAgICAgICAgIGNvbG9yOiAjOTk5OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsaS50ZXN0LWdyb3VwLWxpc3Qtc2hvdy1hbGw6bm90KC5zZWxl
Y3RlZCkgYTpob3ZlciB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbGkuc2VsZWN0ZWQgPiBhIHsKKyAgICAgICAgICAg
ICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbGkuaGlkZGVuIHsKKyAgICAgICAgICAgICAgICBjb2xvcjogIzk5OTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGk6bm90KC5zZWxlY3RlZCkgPiBhOmhvdmVy
IHsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAjdGVzdC1ncm91cC1kZXRhaWxzIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5
OiB0YWJsZS1jZWxsOworICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07CisgICAg
ICAgICAgICAgICAgcGFkZGluZzogMDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICNyZXRyeS1mb3JtIHsKKyAgICAgICAgICAgICAgICBk
aXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDAuNXJlbTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgI2hpZGUtYnV0dG9uIHsKKyAgICAgICAgICAgICAgICBtYXJn
aW46IDAuNXJlbTsKKyAgICAgICAgICAgIH1gOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5k
ZWZpbmVFbGVtZW50KCdhbmFseXNpcy10YXNrLXRlc3QtZ3JvdXAtcGFuZScsIEFuYWx5c2lzVGFz
a1Rlc3RHcm91cFBhbmUpOworCiBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdp
dGhIZWFkaW5nIHsKICAgICBjb25zdHJ1Y3RvcigpCiAgICAgewogICAgICAgICBzdXBlcignQW5h
bHlzaXMgVGFzaycpOwogICAgICAgICB0aGlzLl90YXNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
bWV0cmljID0gbnVsbDsKICAgICAgICAgdGhpcy5fdHJpZ2dlcmFibGUgPSBudWxsOwogICAgICAg
ICB0aGlzLl9yZWxhdGVkVGFza3MgPSBudWxsOwogICAgICAgICB0aGlzLl90ZXN0R3JvdXBzID0g
bnVsbDsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRUZXN0R3JvdXBzID0gbnVsbDsKICAgICAgICAg
dGhpcy5fdGVzdEdyb3VwTGFiZWxNYXAgPSBuZXcgTWFwOwotICAgICAgICB0aGlzLl9yZW5kZXJl
ZEN1cnJlbnRUZXN0R3JvdXAgPSB1bmRlZmluZWQ7CiAgICAgICAgIHRoaXMuX2FuYWx5c2lzUmVz
dWx0cyA9IG51bGw7CiAgICAgICAgIHRoaXMuX21lYXN1cmVtZW50U2V0ID0gbnVsbDsKICAgICAg
ICAgdGhpcy5fc3RhcnRQb2ludCA9IG51bGw7CkBAIC00Myw0MiArMzM3LDEwIEBAIGNsYXNzIEFu
YWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB0aGlzLl9j
dXJyZW50VGVzdEdyb3VwID0gbnVsbDsKICAgICAgICAgdGhpcy5fZmlsdGVyZWRUZXN0R3JvdXBz
ID0gbnVsbDsKICAgICAgICAgdGhpcy5fc2hvd0hpZGRlblRlc3RHcm91cHMgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy5fc2VsZWN0aW9uV2FzTW9kaWZpZWRCeVVzZXIgPSBmYWxzZTsKIAotICAgICAg
ICB0aGlzLl9jaGFydFBhbmUgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdhbmFseXNp
cy10YXNrLWNoYXJ0LXBhbmUnKS5jb21wb25lbnQoKTsKLSAgICAgICAgdGhpcy5fY2hhcnRQYW5l
LnNldFBhZ2UodGhpcyk7Ci0gICAgICAgIHRoaXMuX2FuYWx5c2lzUmVzdWx0c1ZpZXdlciA9IHRo
aXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2FuYWx5c2lzLXJlc3VsdHMtdmlld2VyJykuY29t
cG9uZW50KCk7Ci0gICAgICAgIHRoaXMuX2FuYWx5c2lzUmVzdWx0c1ZpZXdlci5zZXRUZXN0R3Jv
dXBDYWxsYmFjayh0aGlzLl9zaG93VGVzdEdyb3VwLmJpbmQodGhpcykpOwotICAgICAgICB0aGlz
Ll9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuc2V0UmFuZ2VTZWxlY3RvckxhYmVscyhbJ0EnLCAnQidd
KTsKLSAgICAgICAgdGhpcy5fYW5hbHlzaXNSZXN1bHRzVmlld2VyLnNldFJhbmdlU2VsZWN0b3JD
YWxsYmFjayh0aGlzLl9zZWxlY3RlZFJvd0luQW5hbHlzaXNSZXN1bHRzVmlld2VyLmJpbmQodGhp
cykpOwotICAgICAgICB0aGlzLl90ZXN0R3JvdXBSZXN1bHRzVGFibGUgPSB0aGlzLmNvbnRlbnQo
KS5xdWVyeVNlbGVjdG9yKCd0ZXN0LWdyb3VwLXJlc3VsdHMtdGFibGUnKS5jb21wb25lbnQoKTsK
LQotICAgICAgICB0aGlzLl90YXNrTmFtZUxhYmVsID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxl
Y3RvcignLmFuYWx5c2lzLXRhc2stbmFtZSBlZGl0YWJsZS10ZXh0JykuY29tcG9uZW50KCk7Ci0g
ICAgICAgIHRoaXMuX3Rhc2tOYW1lTGFiZWwubGlzdGVuVG9BY3Rpb24oJ3VwZGF0ZScsICgpID0+
IHRoaXMuX3VwZGF0ZVRhc2tOYW1lKCkpOwotCi0gICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJy5jaGFuZ2UtdHlwZS1mb3JtJykub25zdWJtaXQgPSB0aGlzLl91cGRhdGVDaGFu
Z2VUeXBlLmJpbmQodGhpcyk7Ci0gICAgICAgIHRoaXMuX3Rhc2tTdGF0dXNDb250cm9sID0gdGhp
cy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmNoYW5nZS10eXBlLWZvcm0gc2VsZWN0Jyk7Ci0K
LSAgICAgICAgdGhpcy5fYnVnTGlzdCA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5h
c3NvY2lhdGVkLWJ1Z3MgbXV0YWJsZS1saXN0LXZpZXcnKS5jb21wb25lbnQoKTsKLSAgICAgICAg
dGhpcy5fYnVnTGlzdC5zZXRLaW5kTGlzdChCdWdUcmFja2VyLmFsbCgpKTsKLSAgICAgICAgdGhp
cy5fYnVnTGlzdC5zZXRBZGRDYWxsYmFjayh0aGlzLl9hc3NvY2lhdGVCdWcuYmluZCh0aGlzKSk7
Ci0KLSAgICAgICAgdGhpcy5fY2F1c2VMaXN0ID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rv
cignLmNhdXNlLWxpc3QgbXV0YWJsZS1saXN0LXZpZXcnKS5jb21wb25lbnQoKTsKLSAgICAgICAg
dGhpcy5fY2F1c2VMaXN0LnNldEFkZENhbGxiYWNrKHRoaXMuX2Fzc29jaWF0ZUNvbW1pdC5iaW5k
KHRoaXMsICdjYXVzZScpKTsKLQotICAgICAgICB0aGlzLl9maXhMaXN0ID0gdGhpcy5jb250ZW50
KCkucXVlcnlTZWxlY3RvcignLmZpeC1saXN0IG11dGFibGUtbGlzdC12aWV3JykuY29tcG9uZW50
KCk7Ci0gICAgICAgIHRoaXMuX2ZpeExpc3Quc2V0QWRkQ2FsbGJhY2sodGhpcy5fYXNzb2NpYXRl
Q29tbWl0LmJpbmQodGhpcywgJ2ZpeCcpKTsKLQotICAgICAgICB0aGlzLl9uZXdUZXN0R3JvdXBG
b3JtRm9yQ2hhcnQgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcub3ZlcnZpZXctY2hh
cnQgY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybScpLmNvbXBvbmVudCgpOwotICAgICAgICB0
aGlzLl9uZXdUZXN0R3JvdXBGb3JtRm9yQ2hhcnQuc2V0U3RhcnRDYWxsYmFjayh0aGlzLl9jcmVh
dGVOZXdUZXN0R3JvdXBGcm9tQ2hhcnQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5fbmV3
VGVzdEdyb3VwRm9ybUZvclZpZXdlciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5h
bmFseXNpcy1yZXN1bHRzLXZpZXcgY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybScpLmNvbXBv
bmVudCgpOwotICAgICAgICB0aGlzLl9uZXdUZXN0R3JvdXBGb3JtRm9yVmlld2VyLnNldFN0YXJ0
Q2FsbGJhY2sodGhpcy5fY3JlYXRlTmV3VGVzdEdyb3VwRnJvbVZpZXdlci5iaW5kKHRoaXMpKTsK
LQotICAgICAgICB0aGlzLl9yZXRyeUZvcm0gPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9y
KCcudGVzdC1ncm91cC1yZXRyeS1mb3JtIHRlc3QtZ3JvdXAtZm9ybScpLmNvbXBvbmVudCgpOwot
ICAgICAgICB0aGlzLl9yZXRyeUZvcm0uc2V0U3RhcnRDYWxsYmFjayh0aGlzLl9yZXRyeUN1cnJl
bnRUZXN0R3JvdXAuYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuX2hpZGVCdXR0b24gPSB0aGlz
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcudGVzdC1ncm91cC1oaWRlLWJ1dHRvbicpOwotICAg
ICAgICB0aGlzLl9oaWRlQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlQ3VycmVudFRlc3RHcm91
cC5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9yZW5kZXJUYXNrTmFtZUFuZFN0YXR1c0xhemls
eSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJUYXNrTmFtZUFuZFN0
YXR1cy5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2F1c2VBbmRGaXhlc0xhemls
eSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDYXVzZUFuZEZpeGVz
LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9yZW5kZXJSZWxhdGVkVGFza3NMYXppbHkgPSBu
ZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fcmVuZGVyUmVsYXRlZFRhc2tzLmJpbmQo
dGhpcykpOwogICAgIH0KIAogICAgIHRpdGxlKCkgeyByZXR1cm4gdGhpcy5fdGFzayA/IHRoaXMu
X3Rhc2subGFiZWwoKSA6ICdBbmFseXNpcyBUYXNrJzsgfQpAQCAtMTA1LDExICszNjcsNDEgQEAg
Y2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBkaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCkKKyAgICB7CisgICAgICAg
IHRoaXMucGFydCgnYW5hbHlzaXMtdGFzay1uYW1lJykubGlzdGVuVG9BY3Rpb24oJ3VwZGF0ZScs
ICgpID0+IHRoaXMuX3VwZGF0ZVRhc2tOYW1lKHRoaXMucGFydCgnYW5hbHlzaXMtdGFzay1uYW1l
JykuZWRpdGVkVGV4dCgpKSk7CisKKyAgICAgICAgdGhpcy5jb250ZW50KCdjaGFuZ2UtdHlwZS1m
b3JtJykub25zdWJtaXQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUV2ZW50SGFuZGxlcigoZXZlbnQp
ID0+IHRoaXMuX3VwZGF0ZUNoYW5nZVR5cGUoZXZlbnQpKTsKKworICAgICAgICB0aGlzLnBhcnQo
J2NoYXJ0LXBhbmUnKS5saXN0ZW5Ub0FjdGlvbignbmV3VGVzdEdyb3VwJywgdGhpcy5fY3JlYXRl
VGVzdEdyb3VwQWZ0ZXJWZXJpZnlpbmdDb21taXRTZXRMaXN0LmJpbmQodGhpcykpOworCisgICAg
ICAgIGNvbnN0IHJlc3VsdHNQYW5lID0gdGhpcy5wYXJ0KCdyZXN1bHRzLXBhbmUnKTsKKyAgICAg
ICAgcmVzdWx0c1BhbmUubGlzdGVuVG9BY3Rpb24oJ3Nob3dUZXN0R3JvdXAnLCAodGVzdEdyb3Vw
KSA9PiB0aGlzLl9zaG93VGVzdEdyb3VwKHRlc3RHcm91cCkpOworICAgICAgICByZXN1bHRzUGFu
ZS5saXN0ZW5Ub0FjdGlvbignbmV3VGVzdEdyb3VwJywgdGhpcy5fY3JlYXRlVGVzdEdyb3VwQWZ0
ZXJWZXJpZnlpbmdDb21taXRTZXRMaXN0LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnN0IGdy
b3VwUGFuZSA9IHRoaXMucGFydCgnZ3JvdXAtcGFuZScpOworICAgICAgICBncm91cFBhbmUubGlz
dGVuVG9BY3Rpb24oJ3Nob3dUZXN0R3JvdXAnLCAodGVzdEdyb3VwKSA9PiB0aGlzLl9zaG93VGVz
dEdyb3VwKHRlc3RHcm91cCkpOworICAgICAgICBncm91cFBhbmUubGlzdGVuVG9BY3Rpb24oJ3No
b3dIaWRkZW5UZXN0R3JvdXBzJywgKCkgPT4gdGhpcy5fc2hvd0FsbFRlc3RHcm91cHMoKSk7Cisg
ICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigncmVuYW1lVGVzdEdyb3VwJywgKHRlc3RH
cm91cCwgbmV3TmFtZSkgPT4gdGhpcy5fdXBkYXRlVGVzdEdyb3VwTmFtZSh0ZXN0R3JvdXAsIG5l
d05hbWUpKTsKKyAgICAgICAgZ3JvdXBQYW5lLmxpc3RlblRvQWN0aW9uKCd0b2dnbGVUZXN0R3Jv
dXBWaXNpYmlsaXR5JywgKHRlc3RHcm91cCkgPT4gdGhpcy5faGlkZUN1cnJlbnRUZXN0R3JvdXAo
dGVzdEdyb3VwKSk7CisgICAgICAgIGdyb3VwUGFuZS5saXN0ZW5Ub0FjdGlvbigncmV0cnlUZXN0
R3JvdXAnLCAodGVzdEdyb3VwLCByZXBldGl0aW9uQ291bnQpID0+IHRoaXMuX3JldHJ5Q3VycmVu
dFRlc3RHcm91cCh0ZXN0R3JvdXAsIHJlcGV0aXRpb25Db3VudCkpOworCisgICAgICAgIHRoaXMu
cGFydCgnY2F1c2UtbGlzdCcpLmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHJlcG9zaXRvcnks
IHJldmlzaW9uKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVDb21taXQoJ2NhdXNl
JywgcmVwb3NpdG9yeSwgcmV2aXNpb24pOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5wYXJ0
KCdmaXgtbGlzdCcpLmxpc3RlblRvQWN0aW9uKCdhZGRJdGVtJywgKHJlcG9zaXRvcnksIHJldmlz
aW9uKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVDb21taXQoJ2ZpeCcsIHJlcG9z
aXRvcnksIHJldmlzaW9uKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgX2ZldGNoUmVsYXRl
ZEluZm9Gb3JUYXNrSWQodGFza0lkKQogICAgIHsKICAgICAgICAgVGVzdEdyb3VwLmZldGNoQnlU
YXNrKHRhc2tJZCkudGhlbih0aGlzLl9kaWRGZXRjaFRlc3RHcm91cHMuYmluZCh0aGlzKSk7CiAg
ICAgICAgIEFuYWx5c2lzUmVzdWx0cy5mZXRjaCh0YXNrSWQpLnRoZW4odGhpcy5fZGlkRmV0Y2hB
bmFseXNpc1Jlc3VsdHMuYmluZCh0aGlzKSk7Ci0gICAgICAgIEFuYWx5c2lzVGFzay5mZXRjaFJl
bGF0ZWRUYXNrcyh0YXNrSWQpLnRoZW4odGhpcy5fZGlkRmV0Y2hSZWxhdGVkQW5hbHlzaXNUYXNr
cy5iaW5kKHRoaXMpKTsKKyAgICAgICAgQW5hbHlzaXNUYXNrLmZldGNoUmVsYXRlZFRhc2tzKHRh
c2tJZCkudGhlbigocmVsYXRlZFRhc2tzKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9yZWxhdGVk
VGFza3MgPSByZWxhdGVkVGFza3M7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigp
OworICAgICAgICB9KTsKICAgICB9CiAKICAgICBfZGlkRmV0Y2hUYXNrKHRhc2spCkBAIC0xMTcs
MzYgKzQwOSwzMCBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFk
aW5nIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3Rhc2spOwogCiAgICAgICAgIHRo
aXMuX3Rhc2sgPSB0YXNrOworCiAgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGFzay5wbGF0Zm9y
bSgpOwogICAgICAgICBjb25zdCBtZXRyaWMgPSB0YXNrLm1ldHJpYygpOwogICAgICAgICBjb25z
dCBsYXN0TW9kaWZpZWQgPSBwbGF0Zm9ybS5sYXN0TW9kaWZpZWQobWV0cmljKTsKLQogICAgICAg
ICB0aGlzLl90cmlnZ2VyYWJsZSA9IFRyaWdnZXJhYmxlLmZpbmRCeVRlc3RDb25maWd1cmF0aW9u
KG1ldHJpYy50ZXN0KCksIHBsYXRmb3JtKTsKKyAgICAgICAgdGhpcy5fbWV0cmljID0gbWV0cmlj
OwogCiAgICAgICAgIHRoaXMuX21lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNl
dChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgdGhp
cy5fbWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRhc2suc3RhcnRUaW1lKCksIHRhc2suZW5k
VGltZSgpLCB0aGlzLl9kaWRGZXRjaE1lYXN1cmVtZW50LmJpbmQodGhpcykpOwogCi0gICAgICAg
IGNvbnN0IGZvcm1hdHRlciA9IG1ldHJpYy5tYWtlRm9ybWF0dGVyKDQpOwotICAgICAgICB0aGlz
Ll9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuc2V0VmFsdWVGb3JtYXR0ZXIoZm9ybWF0dGVyKTsKLSAg
ICAgICAgdGhpcy5fdGVzdEdyb3VwUmVzdWx0c1RhYmxlLnNldFZhbHVlRm9ybWF0dGVyKGZvcm1h
dHRlcik7Ci0KLSAgICAgICAgdGhpcy5fY2hhcnRQYW5lLmNvbmZpZ3VyZShwbGF0Zm9ybS5pZCgp
LCBtZXRyaWMuaWQoKSk7Ci0KKyAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLnBhcnQoJ2NoYXJ0
LXBhbmUnKTsKICAgICAgICAgY29uc3QgZG9tYWluID0gQ2hhcnRzUGFnZS5jcmVhdGVEb21haW5G
b3JBbmFseXNpc1Rhc2sodGFzayk7Ci0gICAgICAgIHRoaXMuX2NoYXJ0UGFuZS5zZXRPdmVydmll
d0RvbWFpbihkb21haW5bMF0sIGRvbWFpblsxXSk7Ci0gICAgICAgIHRoaXMuX2NoYXJ0UGFuZS5z
ZXRNYWluRG9tYWluKGRvbWFpblswXSwgZG9tYWluWzFdKTsKKyAgICAgICAgY2hhcnQuY29uZmln
dXJlKHBsYXRmb3JtLmlkKCksIG1ldHJpYy5pZCgpKTsKKyAgICAgICAgY2hhcnQuc2V0T3ZlcnZp
ZXdEb21haW4oZG9tYWluWzBdLCBkb21haW5bMV0pOworICAgICAgICBjaGFydC5zZXRNYWluRG9t
YWluKGRvbWFpblswXSwgZG9tYWluWzFdKTsKKworICAgICAgICBjb25zdCBidWdMaXN0ID0gdGhp
cy5wYXJ0KCdidWctbGlzdCcpOworICAgICAgICB0aGlzLnBhcnQoJ2J1Zy1saXN0Jykuc2V0VGFz
ayh0aGlzLl90YXNrKTsKIAogICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogCiAgICAg
ICAgIHJldHVybiB0YXNrOwogICAgIH0KIAotICAgIF9kaWRGZXRjaFJlbGF0ZWRBbmFseXNpc1Rh
c2tzKHJlbGF0ZWRUYXNrcykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3JlbGF0ZWRUYXNrcyA9IHJl
bGF0ZWRUYXNrczsKLSAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKLSAgICB9Ci0KICAg
ICBfZGlkRmV0Y2hNZWFzdXJlbWVudCgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl90YXNrKTsKQEAgLTE1NCwxMCArNDQwLDExIEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB2YXIgc2VyaWVzID0gdGhpcy5fbWVh
c3VyZW1lbnRTZXQuZmV0Y2hlZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOwog
ICAgICAgICB2YXIgc3RhcnRQb2ludCA9IHNlcmllcy5maW5kQnlJZCh0aGlzLl90YXNrLnN0YXJ0
TWVhc3VyZW1lbnRJZCgpKTsKICAgICAgICAgdmFyIGVuZFBvaW50ID0gc2VyaWVzLmZpbmRCeUlk
KHRoaXMuX3Rhc2suZW5kTWVhc3VyZW1lbnRJZCgpKTsKKwogICAgICAgICBpZiAoIXN0YXJ0UG9p
bnQgfHwgIWVuZFBvaW50IHx8ICF0aGlzLl9tZWFzdXJlbWVudFNldC5oYXNGZXRjaGVkUmFuZ2Uo
c3RhcnRQb2ludC50aW1lLCBlbmRQb2ludC50aW1lKSkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuc2V0UG9pbnRzKHN0YXJ0UG9pbnQs
IGVuZFBvaW50KTsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXBhbmUnKS5zZXRQb2ludHMo
c3RhcnRQb2ludCwgZW5kUG9pbnQsIHRoaXMuX3Rhc2subWV0cmljKCkpOwogCiAgICAgICAgIHRo
aXMuX3N0YXJ0UG9pbnQgPSBzdGFydFBvaW50OwogICAgICAgICB0aGlzLl9lbmRQb2ludCA9IGVu
ZFBvaW50OwpAQCAtMTgxLDE1ICs0NjgsMTEgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRl
bmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAKICAgICBfZGlkVXBkYXRlVGVzdEdyb3VwSGlkZGVuU3Rh
dGUoKQogICAgIHsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRDdXJyZW50VGVzdEdyb3VwID0gbnVs
bDsKLSAgICAgICAgdGhpcy5fcmVuZGVyZWRUZXN0R3JvdXBzID0gbnVsbDsKICAgICAgICAgaWYg
KCF0aGlzLl9zaG93SGlkZGVuVGVzdEdyb3VwcykKICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVk
VGVzdEdyb3VwcyA9IHRoaXMuX3Rlc3RHcm91cHMuZmlsdGVyKGZ1bmN0aW9uIChncm91cCkgeyBy
ZXR1cm4gIWdyb3VwLmlzSGlkZGVuKCk7IH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0
aGlzLl9maWx0ZXJlZFRlc3RHcm91cHMgPSB0aGlzLl90ZXN0R3JvdXBzOwotICAgICAgICB0aGlz
Ll9jdXJyZW50VGVzdEdyb3VwID0gdGhpcy5fZmlsdGVyZWRUZXN0R3JvdXBzID8gdGhpcy5fZmls
dGVyZWRUZXN0R3JvdXBzW3RoaXMuX2ZpbHRlcmVkVGVzdEdyb3Vwcy5sZW5ndGggLSAxXSA6IG51
bGw7Ci0gICAgICAgIHRoaXMuX2FuYWx5c2lzUmVzdWx0c1ZpZXdlci5zZXRUZXN0R3JvdXBzKHRo
aXMuX2ZpbHRlcmVkVGVzdEdyb3Vwcyk7Ci0gICAgICAgIHRoaXMuX3Rlc3RHcm91cFJlc3VsdHNU
YWJsZS5zZXRUZXN0R3JvdXAodGhpcy5fY3VycmVudFRlc3RHcm91cCk7CisgICAgICAgIHRoaXMu
X3Nob3dUZXN0R3JvdXAodGhpcy5fZmlsdGVyZWRUZXN0R3JvdXBzID8gdGhpcy5fZmlsdGVyZWRU
ZXN0R3JvdXBzW3RoaXMuX2ZpbHRlcmVkVGVzdEdyb3Vwcy5sZW5ndGggLSAxXSA6IG51bGwpOwog
ICAgIH0KIAogICAgIF9kaWRGZXRjaEFuYWx5c2lzUmVzdWx0cyhyZXN1bHRzKQpAQCAtMjAxLDE2
ICs0ODQsMTIgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGlu
ZyB7CiAKICAgICBfYXNzaWduVGVzdFJlc3VsdHNJZlBvc3NpYmxlKCkKICAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fdGFzayB8fCAhdGhpcy5fdGVzdEdyb3VwcyB8fCAhdGhpcy5fYW5hbHlzaXNS
ZXN1bHRzKQorICAgICAgICBpZiAoIXRoaXMuX3Rhc2sgfHwgIXRoaXMuX21ldHJpYyB8fCAhdGhp
cy5fdGVzdEdyb3VwcyB8fCAhdGhpcy5fYW5hbHlzaXNSZXN1bHRzKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIGZvciAodmFyIGdyb3VwIG9mIHRoaXMuX3Rlc3RHcm91cHMp
IHsKLSAgICAgICAgICAgIGZvciAodmFyIHJlcXVlc3Qgb2YgZ3JvdXAuYnVpbGRSZXF1ZXN0cygp
KQotICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0KHRoaXMuX2FuYWx5c2lzUmVzdWx0
cy5maW5kKHJlcXVlc3QuYnVpbGRJZCgpLCB0aGlzLl90YXNrLm1ldHJpYygpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuZGlkVXBkYXRlUmVzdWx0
cygpOwotICAgICAgICB0aGlzLl90ZXN0R3JvdXBSZXN1bHRzVGFibGUuZGlkVXBkYXRlUmVzdWx0
cygpOworICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fYW5hbHlzaXNSZXN1bHRzLnZpZXdGb3JN
ZXRyaWModGhpcy5fbWV0cmljKTsKKyAgICAgICAgdGhpcy5wYXJ0KCdncm91cC1wYW5lJykuc2V0
QW5hbHlzaXNSZXN1bHRzVmlldyh2aWV3KTsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXBh
bmUnKS5zZXRBbmFseXNpc1Jlc3VsdHNWaWV3KHZpZXcpOwogCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTIyMywxOTYgKzUwMiw4NyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4
dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKIAogICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNl
bGVjdG9yKCcuZXJyb3ItbWVzc2FnZScpLnRleHRDb250ZW50ID0gdGhpcy5fZXJyb3JNZXNzYWdl
IHx8ICcnOwogCi0gICAgICAgIHRoaXMuX2NoYXJ0UGFuZS5lbnF1ZXVlVG9SZW5kZXIoKTsKLQot
ICAgICAgICB2YXIgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKLSAgICAg
ICAgdmFyIGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7Ci0gICAgICAgIGlmICh0aGlz
Ll90YXNrKSB7Ci0gICAgICAgICAgICB0aGlzLl90YXNrTmFtZUxhYmVsLnNldFRleHQodGhpcy5f
dGFzay5uYW1lKCkpOwotICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gdGhpcy5fdGFzay5wbGF0
Zm9ybSgpOwotICAgICAgICAgICAgdmFyIG1ldHJpYyA9IHRoaXMuX3Rhc2subWV0cmljKCk7Ci0g
ICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnBs
YXRmb3JtLW1ldHJpYy1uYW1lcyBhJyk7Ci0gICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2Uo
YW5jaG9yLCBtZXRyaWMuZnVsbE5hbWUoKSArICcgb24gJyArIHBsYXRmb3JtLmxhYmVsKCkpOwot
ICAgICAgICAgICAgYW5jaG9yLmhyZWYgPSB0aGlzLnJvdXRlcigpLnVybCgnY2hhcnRzJywgQ2hh
cnRzUGFnZS5jcmVhdGVTdGF0ZUZvckFuYWx5c2lzVGFzayh0aGlzLl90YXNrKSk7Ci0KLSAgICAg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgIHRoaXMuX2J1Z0xpc3Quc2V0TGlz
dCh0aGlzLl90YXNrLmJ1Z3MoKS5tYXAoZnVuY3Rpb24gKGJ1ZykgewotICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgTXV0YWJsZUxpc3RJdGVtKGJ1Zy5idWdUcmFja2VyKCksIGJ1Zy5sYWJlbCgp
LCBidWcudGl0bGUoKSwgYnVnLnVybCgpLAotICAgICAgICAgICAgICAgICAgICAnRGlzc29jaWF0
ZSB0aGlzIGJ1ZycsIHNlbGYuX2Rpc3NvY2lhdGVCdWcuYmluZChzZWxmLCBidWcpKTsKLSAgICAg
ICAgICAgIH0pKTsKLQotICAgICAgICAgICAgdGhpcy5fY2F1c2VMaXN0LnNldExpc3QodGhpcy5f
dGFzay5jYXVzZXMoKS5tYXAodGhpcy5fbWFrZUNvbW1pdExpc3RJdGVtLmJpbmQodGhpcykpKTsK
LSAgICAgICAgICAgIHRoaXMuX2ZpeExpc3Quc2V0TGlzdCh0aGlzLl90YXNrLmZpeGVzKCkubWFw
KHRoaXMuX21ha2VDb21taXRMaXN0SXRlbS5iaW5kKHRoaXMpKSk7Ci0KLSAgICAgICAgICAgIHRo
aXMuX3Rhc2tTdGF0dXNDb250cm9sLnZhbHVlID0gdGhpcy5fdGFzay5jaGFuZ2VUeXBlKCkgfHwg
J3VuY29uZmlybWVkJzsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciByZXBvc2l0b3J5TGlzdDsK
LSAgICAgICAgaWYgKHRoaXMuX3N0YXJ0UG9pbnQpIHsKLSAgICAgICAgICAgIHZhciBjb21taXRT
ZXQgPSB0aGlzLl9zdGFydFBvaW50LmNvbW1pdFNldCgpOwotICAgICAgICAgICAgcmVwb3NpdG9y
eUxpc3QgPSBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwoY29tbWl0
U2V0LnJlcG9zaXRvcmllcygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXBvc2l0
b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTChSZXBv
c2l0b3J5LmFsbCgpKTsKLQotICAgICAgICB0aGlzLl9idWdMaXN0LmVucXVldWVUb1JlbmRlcigp
OwotCi0gICAgICAgIHRoaXMuX2NhdXNlTGlzdC5zZXRLaW5kTGlzdChyZXBvc2l0b3J5TGlzdCk7
Ci0gICAgICAgIHRoaXMuX2NhdXNlTGlzdC5lbnF1ZXVlVG9SZW5kZXIoKTsKLQotICAgICAgICB0
aGlzLl9maXhMaXN0LnNldEtpbmRMaXN0KHJlcG9zaXRvcnlMaXN0KTsKLSAgICAgICAgdGhpcy5f
Zml4TGlzdC5lbnF1ZXVlVG9SZW5kZXIoKTsKLQotICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCcuYW5hbHlzaXMtdGFzay1zdGF0dXMnKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5f
dGFzayA/IG51bGwgOiAnbm9uZSc7Ci0gICAgICAgIHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0
b3IoJy5vdmVydmlldy1jaGFydCcpLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl90YXNrID8gbnVsbCA6
ICdub25lJzsKLSAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnRlc3QtZ3Jv
dXAtdmlldycpLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl90YXNrICYmIHRoaXMuX3Rlc3RHcm91cHMg
JiYgdGhpcy5fdGVzdEdyb3Vwcy5sZW5ndGggPyBudWxsIDogJ25vbmUnOwotICAgICAgICB0aGlz
Ll90YXNrTmFtZUxhYmVsLmVucXVldWVUb1JlbmRlcigpOwotCi0gICAgICAgIGlmICh0aGlzLl9y
ZWxhdGVkVGFza3MgJiYgdGhpcy5fdGFzaykgewotICAgICAgICAgICAgdmFyIHJvdXRlciA9IHRo
aXMucm91dGVyKCk7Ci0gICAgICAgICAgICB2YXIgbGluayA9IENvbXBvbmVudEJhc2UuY3JlYXRl
TGluazsKLSAgICAgICAgICAgIHZhciB0aGlzVGFzayA9IHRoaXMuX3Rhc2s7Ci0gICAgICAgICAg
ICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnJlbGF0
ZWQtdGFza3MtbGlzdCcpLAotICAgICAgICAgICAgICAgIHRoaXMuX3JlbGF0ZWRUYXNrcy5tYXAo
ZnVuY3Rpb24gKG90aGVyVGFzaykgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dChvdGhlclRhc2subWV0cmljKCkgPT0gdGhpc1Rhc2subWV0cmljKCkpOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgc3VmZml4ID0gJyc7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB0YXNrTGFi
ZWwgPSBvdGhlclRhc2subGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyVGFz
ay5wbGF0Zm9ybSgpICE9IHRoaXNUYXNrLnBsYXRmb3JtKCkgJiYgdGFza0xhYmVsLmluZGV4T2Yo
b3RoZXJUYXNrLnBsYXRmb3JtKCkubGFiZWwoKSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VmZml4ID0gYCBvbiAke290aGVyVGFzay5wbGF0Zm9ybSgpLmxhYmVsKCl9YDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgW2xpbmsodGFza0xhYmVsLCByb3V0
ZXIudXJsKGBhbmFseXNpcy90YXNrLyR7b3RoZXJUYXNrLmlkKCl9YCkpLCBzdWZmaXhdKTsKLSAg
ICAgICAgICAgICAgICB9KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgc2VsZWN0ZWRSYW5n
ZSA9IHRoaXMuX2FuYWx5c2lzUmVzdWx0c1ZpZXdlci5zZWxlY3RlZFJhbmdlKCk7Ci0gICAgICAg
IHZhciBhID0gc2VsZWN0ZWRSYW5nZVsnQSddOwotICAgICAgICB2YXIgYiA9IHNlbGVjdGVkUmFu
Z2VbJ0InXTsKLSAgICAgICAgdGhpcy5fbmV3VGVzdEdyb3VwRm9ybUZvclZpZXdlci5zZXRDb21t
aXRTZXRNYXAoYSAmJiBiID8geydBJzogYS5jb21taXRTZXQoKSwgJ0InOiBiLmNvbW1pdFNldCgp
fSA6IG51bGwpOwotICAgICAgICB0aGlzLl9uZXdUZXN0R3JvdXBGb3JtRm9yVmlld2VyLmVucXVl
dWVUb1JlbmRlcigpOwotICAgICAgICB0aGlzLl9uZXdUZXN0R3JvdXBGb3JtRm9yVmlld2VyLmVs
ZW1lbnQoKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fdHJpZ2dlcmFibGUgPyBudWxsIDogJ25vbmUn
OwotCi0gICAgICAgIHRoaXMuX3JlbmRlclRlc3RHcm91cExpc3QoKTsKLSAgICAgICAgdGhpcy5f
cmVuZGVyVGVzdEdyb3VwRGV0YWlscygpOwotCi0gICAgICAgIGlmICghdGhpcy5fcmVuZGVyZWRD
dXJyZW50VGVzdEdyb3VwICYmICF0aGlzLl9zZWxlY3Rpb25XYXNNb2RpZmllZEJ5VXNlciAmJiB0
aGlzLl9zdGFydFBvaW50ICYmIHRoaXMuX2VuZFBvaW50KQotICAgICAgICAgICAgdGhpcy5fY2hh
cnRQYW5lLnNldE1haW5TZWxlY3Rpb24oW3RoaXMuX3N0YXJ0UG9pbnQudGltZSwgdGhpcy5fZW5k
UG9pbnQudGltZV0pOworICAgICAgICB0aGlzLl9yZW5kZXJUYXNrTmFtZUFuZFN0YXR1c0xhemls
eS5ldmFsdWF0ZSh0aGlzLl90YXNrLCB0aGlzLl90YXNrID8gdGhpcy5fdGFzay5uYW1lKCkgOiBu
dWxsLCB0aGlzLl90YXNrID8gdGhpcy5fdGFzay5jaGFuZ2VUeXBlKCkgOiBudWxsKTsKKyAgICAg
ICAgdGhpcy5fcmVuZGVyQ2F1c2VBbmRGaXhlc0xhemlseS5ldmFsdWF0ZSh0aGlzLl9zdGFydFBv
aW50LCB0aGlzLl90YXNrKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyUmVsYXRlZFRhc2tzTGF6aWx5
LmV2YWx1YXRlKHRoaXMuX3Rhc2ssIHRoaXMuX3JlbGF0ZWRUYXNrcyk7CiAKLSAgICAgICAgdmFy
IHBvaW50cyA9IHRoaXMuX2NoYXJ0UGFuZS5zZWxlY3RlZFBvaW50cygpOwotICAgICAgICB0aGlz
Ll9uZXdUZXN0R3JvdXBGb3JtRm9yQ2hhcnQuc2V0Q29tbWl0U2V0TWFwKHBvaW50cyAmJiBwb2lu
dHMubGVuZ3RoKCkgPj0gMiA/Ci0gICAgICAgICAgICAgICAgeydBJzogcG9pbnRzLmZpcnN0UG9p
bnQoKS5jb21taXRTZXQoKSwgJ0InOiBwb2ludHMubGFzdFBvaW50KCkuY29tbWl0U2V0KCl9IDog
bnVsbCk7Ci0gICAgICAgIHRoaXMuX25ld1Rlc3RHcm91cEZvcm1Gb3JDaGFydC5lbnF1ZXVlVG9S
ZW5kZXIoKTsKLSAgICAgICAgdGhpcy5fbmV3VGVzdEdyb3VwRm9ybUZvckNoYXJ0LmVsZW1lbnQo
KS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fdHJpZ2dlcmFibGUgPyBudWxsIDogJ25vbmUnOworICAg
ICAgICB0aGlzLmNvbnRlbnQoJ2NoYXJ0LXBhbmUnKS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fdGFz
ayA/IG51bGwgOiAnbm9uZSc7CisgICAgICAgIHRoaXMucGFydCgnY2hhcnQtcGFuZScpLnNldFNo
b3dGb3JtKCEhdGhpcy5fdHJpZ2dlcmFibGUpOwogCi0gICAgICAgIHRoaXMuX2FuYWx5c2lzUmVz
dWx0c1ZpZXdlci5zZXRDdXJyZW50VGVzdEdyb3VwKHRoaXMuX2N1cnJlbnRUZXN0R3JvdXApOwot
ICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuZW5xdWV1ZVRvUmVuZGVyKCk7Ci0K
LSAgICAgICAgdGhpcy5fdGVzdEdyb3VwUmVzdWx0c1RhYmxlLmVucXVldWVUb1JlbmRlcigpOwor
ICAgICAgICB0aGlzLmNvbnRlbnQoJ3Jlc3VsdHMtcGFuZScpLnN0eWxlLmRpc3BsYXkgPSB0aGlz
Ll90YXNrID8gbnVsbCA6ICdub25lJzsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXBhbmUn
KS5zZXRTaG93Rm9ybSghIXRoaXMuX3RyaWdnZXJhYmxlKTsKIAogICAgICAgICBJbnN0cnVtZW50
YXRpb24uZW5kTWVhc3VyaW5nVGltZSgnQW5hbHlzaXNUYXNrUGFnZScsICdyZW5kZXInKTsKICAg
ICB9CiAKLSAgICBfbWFrZUNvbW1pdExpc3RJdGVtKGNvbW1pdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBuZXcgTXV0YWJsZUxpc3RJdGVtKGNvbW1pdC5yZXBvc2l0b3J5KCksIGNvbW1pdC5sYWJl
bCgpLCBjb21taXQudGl0bGUoKSwgY29tbWl0LnVybCgpLAotICAgICAgICAgICAgJ0Rpc2Fzc29j
aWF0ZSB0aGlzIGNvbW1pdCcsIHRoaXMuX2Rpc3NvY2lhdGVDb21taXQuYmluZCh0aGlzLCBjb21t
aXQpKTsKLSAgICB9Ci0KLSAgICBfcmVuZGVyVGVzdEdyb3VwTGlzdCgpCisgICAgX3JlbmRlclRh
c2tOYW1lQW5kU3RhdHVzKHRhc2ssIHRhc2tOYW1lLCBjaGFuZ2VUeXBlKQogICAgIHsKLSAgICAg
ICAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAgICAgIHZh
ciBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOwotICAgICAgICBpZiAodGhpcy5fdGVz
dEdyb3VwcyAhPSB0aGlzLl9yZW5kZXJlZFRlc3RHcm91cHMpIHsKLSAgICAgICAgICAgIHRoaXMu
X3JlbmRlcmVkVGVzdEdyb3VwcyA9IHRoaXMuX3Rlc3RHcm91cHM7Ci0gICAgICAgICAgICB0aGlz
Ll90ZXN0R3JvdXBMYWJlbE1hcC5jbGVhcigpOwotCi0gICAgICAgICAgICB2YXIgdW5oaWRkZW5U
ZXN0R3JvdXBzID0gdGhpcy5fZmlsdGVyZWRUZXN0R3JvdXBzLmZpbHRlcihmdW5jdGlvbiAoZ3Jv
dXApIHsgcmV0dXJuICFncm91cC5pc0hpZGRlbigpOyB9KTsKLSAgICAgICAgICAgIHZhciBoaWRk
ZW5UZXN0R3JvdXBzID0gdGhpcy5fZmlsdGVyZWRUZXN0R3JvdXBzLmZpbHRlcihmdW5jdGlvbiAo
Z3JvdXApIHsgcmV0dXJuIGdyb3VwLmlzSGlkZGVuKCk7IH0pOwotCi0gICAgICAgICAgICB2YXIg
bGlzdEl0ZW1zID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBncm91cCBvZiBoaWRkZW5UZXN0
R3JvdXBzKQotICAgICAgICAgICAgICAgIGxpc3RJdGVtcy51bnNoaWZ0KHRoaXMuX2NyZWF0ZVRl
c3RHcm91cExpc3RJdGVtKGdyb3VwKSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBncm91cCBvZiB1
bmhpZGRlblRlc3RHcm91cHMpCi0gICAgICAgICAgICAgICAgbGlzdEl0ZW1zLnVuc2hpZnQodGhp
cy5fY3JlYXRlVGVzdEdyb3VwTGlzdEl0ZW0oZ3JvdXApKTsKLQotICAgICAgICAgICAgaWYgKHRo
aXMuX3Rlc3RHcm91cHMubGVuZ3RoICE9IHRoaXMuX2ZpbHRlcmVkVGVzdEdyb3Vwcy5sZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICBsaXN0SXRlbXMucHVzaChlbGVtZW50KCdsaScsIHtjbGFzczog
J3Rlc3QtZ3JvdXAtbGlzdC1zaG93LWFsbCd9LAotICAgICAgICAgICAgICAgICAgICBsaW5rKCdT
aG93IGhpZGRlbiB0ZXN0cycsIHRoaXMuX3Nob3dBbGxUZXN0R3JvdXBzLmJpbmQodGhpcykpKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNv
bnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcudGVzdC1ncm91cC1saXN0JyksIGxpc3RJdGVtcyk7Ci0K
LSAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkQ3VycmVudFRlc3RHcm91cCA9IG51bGw7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fdGVzdEdyb3VwcykgewotICAgICAgICAgICAgZm9y
ICh2YXIgdGVzdEdyb3VwIG9mIHRoaXMuX2ZpbHRlcmVkVGVzdEdyb3VwcykgewotICAgICAgICAg
ICAgICAgIHZhciBsYWJlbCA9IHRoaXMuX3Rlc3RHcm91cExhYmVsTWFwLmdldCh0ZXN0R3JvdXAp
OwotICAgICAgICAgICAgICAgIGxhYmVsLnNldFRleHQodGVzdEdyb3VwLmxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIGxhYmVsLmVucXVldWVUb1JlbmRlcigpOwotICAgICAgICAgICAgfQorICAg
ICAgICB0aGlzLnBhcnQoJ2FuYWx5c2lzLXRhc2stbmFtZScpLnNldFRleHQodGFza05hbWUpOwor
ICAgICAgICBpZiAodGFzaykgeworICAgICAgICAgICAgY29uc3QgbGluayA9IENvbXBvbmVudEJh
c2UuY3JlYXRlTGluazsKKyAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGFzay5wbGF0Zm9y
bSgpOworICAgICAgICAgICAgY29uc3QgbWV0cmljID0gdGFzay5tZXRyaWMoKTsKKyAgICAgICAg
ICAgIGNvbnN0IHN1YnRpdGxlID0gYCR7bWV0cmljLmZ1bGxOYW1lKCl9IG9uICR7cGxhdGZvcm0u
bGFiZWwoKX1gOworICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgn
cGxhdGZvcm0tbWV0cmljLW5hbWVzJyksIAorICAgICAgICAgICAgICAgIGxpbmsoc3VidGl0bGUs
IHRoaXMucm91dGVyKCkudXJsKCdjaGFydHMnLCBDaGFydHNQYWdlLmNyZWF0ZVN0YXRlRm9yQW5h
bHlzaXNUYXNrKHRhc2spKSkpOwogICAgICAgICB9CisgICAgICAgIHRoaXMuY29udGVudCgnY2hh
bmdlLXR5cGUnKS52YWx1ZSA9IGNoYW5nZVR5cGUgfHwgJ3VuY29uZmlybWVkJzsKICAgICB9CiAK
LSAgICBfY3JlYXRlVGVzdEdyb3VwTGlzdEl0ZW0oZ3JvdXApCisgICAgX3JlbmRlclJlbGF0ZWRU
YXNrcyh0YXNrLCByZWxhdGVkVGFza3MpCiAgICAgewotICAgICAgICB2YXIgdGV4dCA9IG5ldyBF
ZGl0YWJsZVRleHQoZ3JvdXAubGFiZWwoKSk7Ci0gICAgICAgIHRleHQubGlzdGVuVG9BY3Rpb24o
J3VwZGF0ZScsICgpID0+IHRoaXMuX3VwZGF0ZVRlc3RHcm91cE5hbWUoZ3JvdXApKTsKLQotICAg
ICAgICB0aGlzLl90ZXN0R3JvdXBMYWJlbE1hcC5zZXQoZ3JvdXAsIHRleHQpOwotICAgICAgICBy
ZXR1cm4gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50KCdsaScsIHtjbGFzczogJ3Rlc3QtZ3Jv
dXAtbGlzdC0nICsgZ3JvdXAuaWQoKX0sCi0gICAgICAgICAgICBDb21wb25lbnRCYXNlLmNyZWF0
ZUxpbmsodGV4dCwgZ3JvdXAubGFiZWwoKSwgdGhpcy5fc2hvd1Rlc3RHcm91cC5iaW5kKHRoaXMs
IGdyb3VwKSkpOworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVF
bGVtZW50OworICAgICAgICBjb25zdCBsaW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOwor
ICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCdyZWxhdGVkLXRhc2tzLWxp
c3QnKSwgKHRhc2sgJiYgcmVsYXRlZFRhc2tzID8gcmVsYXRlZFRhc2tzIDogW10pLm1hcCgob3Ro
ZXJUYXNrKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHN1ZmZpeCA9ICcnOworICAgICAgICAg
ICAgICAgIGNvbnN0IHRhc2tMYWJlbCA9IG90aGVyVGFzay5sYWJlbCgpOworICAgICAgICAgICAg
ICAgIGlmIChvdGhlclRhc2subWV0cmljKCkgIT0gdGFzay5tZXRyaWMoKSAmJiB0YXNrTGFiZWwu
aW5kZXhPZihvdGhlclRhc2subWV0cmljKCkubGFiZWwoKSkgPCAwKQorICAgICAgICAgICAgICAg
ICAgICBzdWZmaXggKz0gYCB3aXRoICIke290aGVyVGFzay5tZXRyaWMoKS5sYWJlbCgpfSJgOwor
ICAgICAgICAgICAgICAgIGlmIChvdGhlclRhc2sucGxhdGZvcm0oKSAhPSB0YXNrLnBsYXRmb3Jt
KCkgJiYgdGFza0xhYmVsLmluZGV4T2Yob3RoZXJUYXNrLnBsYXRmb3JtKCkubGFiZWwoKSkgPCAw
KQorICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYCBvbiAke290aGVyVGFzay5wbGF0Zm9y
bSgpLmxhYmVsKCl9YDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCBbbGlu
ayh0YXNrTGFiZWwsIHRoaXMucm91dGVyKCkudXJsKGBhbmFseXNpcy90YXNrLyR7b3RoZXJUYXNr
LmlkKCl9YCkpLCBzdWZmaXhdKTsKKyAgICAgICAgICAgIH0pKTsKICAgICB9CiAKLSAgICBfcmVu
ZGVyVGVzdEdyb3VwRGV0YWlscygpCisgICAgX3JlbmRlckNhdXNlQW5kRml4ZXMoc3RhcnRQb2lu
dCwgdGFzaykKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9yZW5kZXJlZEN1cnJlbnRUZXN0R3Jv
dXAgIT09IHRoaXMuX2N1cnJlbnRUZXN0R3JvdXApIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9y
ZW5kZXJlZEN1cnJlbnRUZXN0R3JvdXApIHsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9
IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy50ZXN0LWdyb3VwLWxpc3QtJyArIHRoaXMu
X3JlbmRlcmVkQ3VycmVudFRlc3RHcm91cC5pZCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudCkKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxl
Y3RlZCcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUZXN0
R3JvdXApIHsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJy50ZXN0LWdyb3VwLWxpc3QtJyArIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAu
aWQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdGhpcy5fY2hhcnRQYW5lLnNldE1haW5TZWxlY3Rpb24obnVsbCk7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFRlc3RHcm91cCkgewotICAgICAgICAgICAgICAgIGNvbnN0
IGNvbW1pdFNldHNJblRlc3RHcm91cCA9IHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAucmVxdWVzdGVk
Q29tbWl0U2V0cygpOwotICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGNvbW1pdFNl
dHNJblRlc3RHcm91cFswXS5sYXRlc3RDb21taXRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgY29u
c3QgZW5kVGltZSA9IGNvbW1pdFNldHNJblRlc3RHcm91cFtjb21taXRTZXRzSW5UZXN0R3JvdXAu
bGVuZ3RoIC0gMV0ubGF0ZXN0Q29tbWl0VGltZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdGFy
dFRpbWUgIT0gZW5kVGltZSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnRQYW5lLnNl
dE1haW5TZWxlY3Rpb24oW3N0YXJ0VGltZSwgZW5kVGltZV0pOwotICAgICAgICAgICAgfQorICAg
ICAgICBjb25zdCBoYXNEYXRhID0gc3RhcnRQb2ludCAmJiB0YXNrOworICAgICAgICB0aGlzLmNv
bnRlbnQoJ2NhdXNlLWZpeCcpLnN0eWxlLmRpc3BsYXkgPSBoYXNEYXRhID8gbnVsbCA6ICdub25l
JzsKKyAgICAgICAgaWYgKCFoYXNEYXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICB0aGlzLl9yZXRyeUZvcm0uc2V0TGFiZWwoJ1JldHJ5Jyk7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5fY3VycmVudFRlc3RHcm91cCkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZXRyeUZvcm0u
c2V0UmVwZXRpdGlvbkNvdW50KHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAucmVwZXRpdGlvbkNvdW50
KCkpOwotICAgICAgICAgICAgdGhpcy5fcmV0cnlGb3JtLmVsZW1lbnQoKS5zdHlsZS5kaXNwbGF5
ID0gdGhpcy5fY3VycmVudFRlc3RHcm91cCA/IG51bGwgOiAnbm9uZSc7CisgICAgICAgIGNvbnN0
IGNvbW1pdFNldCA9IHN0YXJ0UG9pbnQuY29tbWl0U2V0KCk7CisgICAgICAgIGNvbnN0IHJlcG9z
aXRvcnlMaXN0ID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKGNv
bW1pdFNldC5yZXBvc2l0b3JpZXMoKSk7CiAKLSAgICAgICAgICAgIHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJy50ZXN0LWdyb3VwLWhpZGUtYnV0dG9uJykudGV4dENvbnRlbnQKLSAgICAg
ICAgICAgICAgICA9IHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAgJiYgdGhpcy5fY3VycmVudFRlc3RH
cm91cC5pc0hpZGRlbigpID8gJ1VuaGlkZScgOiAnSGlkZSc7CisgICAgICAgIGNvbnN0IG1ha2VJ
dGVtID0gKGNvbW1pdCkgPT4geworICAgICAgICAgICAgcmV0dXJuIG5ldyBNdXRhYmxlTGlzdEl0
ZW0oY29tbWl0LnJlcG9zaXRvcnkoKSwgY29tbWl0LmxhYmVsKCksIGNvbW1pdC50aXRsZSgpLCBj
b21taXQudXJsKCksCisgICAgICAgICAgICAgICAgJ0Rpc2Fzc29jaWF0ZSB0aGlzIGNvbW1pdCcs
IHRoaXMuX2Rpc3NvY2lhdGVDb21taXQuYmluZCh0aGlzLCBjb21taXQpKTsKKyAgICAgICAgfQog
Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcucGVuZGluZy1yZXF1
ZXN0LWNhbmNlbC13YXJuaW5nJykuc3R5bGUuZGlzcGxheQotICAgICAgICAgICAgICAgID0gdGhp
cy5fY3VycmVudFRlc3RHcm91cCAmJiB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLmhhc1BlbmRpbmco
KSA/IG51bGwgOiAnbm9uZSc7CisgICAgICAgIGNvbnN0IGNhdXNlTGlzdCA9IHRoaXMucGFydCgn
Y2F1c2UtbGlzdCcpOworICAgICAgICBjYXVzZUxpc3Quc2V0S2luZExpc3QocmVwb3NpdG9yeUxp
c3QpOworICAgICAgICBjYXVzZUxpc3Quc2V0TGlzdCh0YXNrLmNhdXNlcygpLm1hcCgoY29tbWl0
KSA9PiBtYWtlSXRlbShjb21taXQpKSk7CiAKLSAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVkQ3Vy
cmVudFRlc3RHcm91cCA9IHRoaXMuX2N1cnJlbnRUZXN0R3JvdXA7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy5fcmV0cnlGb3JtLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICBjb25zdCBmaXhM
aXN0ID0gdGhpcy5wYXJ0KCdmaXgtbGlzdCcpOworICAgICAgICBmaXhMaXN0LnNldEtpbmRMaXN0
KHJlcG9zaXRvcnlMaXN0KTsKKyAgICAgICAgZml4TGlzdC5zZXRMaXN0KHRhc2suZml4ZXMoKS5t
YXAoKGNvbW1pdCkgPT4gbWFrZUl0ZW0oY29tbWl0KSkpOwogICAgIH0KIAogICAgIF9zaG93VGVz
dEdyb3VwKHRlc3RHcm91cCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAg
PSB0ZXN0R3JvdXA7ICAgICAgICAKLSAgICAgICAgdGhpcy5fdGVzdEdyb3VwUmVzdWx0c1RhYmxl
LnNldFRlc3RHcm91cCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKKyAgICAgICAgdGhpcy5fY3Vy
cmVudFRlc3RHcm91cCA9IHRlc3RHcm91cDsKKyAgICAgICAgdGhpcy5wYXJ0KCdyZXN1bHRzLXBh
bmUnKS5zZXRUZXN0R3JvdXBzKHRoaXMuX2ZpbHRlcmVkVGVzdEdyb3VwcywgdGhpcy5fY3VycmVu
dFRlc3RHcm91cCk7CisgICAgICAgIGNvbnN0IGdyb3Vwc0luUmV2ZXJzZUNocm9ub2xvZ3kgPSB0
aGlzLl9maWx0ZXJlZFRlc3RHcm91cHMuc2xpY2UoMCkucmV2ZXJzZSgpOworICAgICAgICBjb25z
dCBzaG93SGlkZGVuR3JvdXBzID0gIXRoaXMuX3Rlc3RHcm91cHMuc29tZSgoZ3JvdXApID0+IGdy
b3VwLmlzSGlkZGVuKCkpIHx8IHRoaXMuX3Nob3dIaWRkZW5UZXN0R3JvdXBzOworICAgICAgICB0
aGlzLnBhcnQoJ2dyb3VwLXBhbmUnKS5zZXRUZXN0R3JvdXBzKGdyb3Vwc0luUmV2ZXJzZUNocm9u
b2xvZ3ksIHRoaXMuX2N1cnJlbnRUZXN0R3JvdXAsIHNob3dIaWRkZW5Hcm91cHMpOwogICAgICAg
ICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAotICAgIF91cGRhdGVUYXNrTmFtZSgp
CisgICAgX3VwZGF0ZVRhc2tOYW1lKG5ld05hbWUpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl90YXNrKTsKLSAgICAgICAgdGhpcy5fdGFza05hbWVMYWJlbC5lbnF1ZXVlVG9S
ZW5kZXIoKTsKIAotICAgICAgICByZXR1cm4gdGhpcy5fdGFzay51cGRhdGVOYW1lKHRoaXMuX3Rh
c2tOYW1lTGFiZWwuZWRpdGVkVGV4dCgpKS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3Rhc2sudXBkYXRlTmFtZShuZXdOYW1lKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgIHRo
aXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0sIChlcnJvcikgPT4gewogICAgICAgICAg
ICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKQEAgLTQyMCwxMiArNTkwLDEwIEBAIGNsYXNzIEFu
YWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB9KTsKICAg
ICB9CiAKLSAgICBfdXBkYXRlVGVzdEdyb3VwTmFtZSh0ZXN0R3JvdXApCisgICAgX3VwZGF0ZVRl
c3RHcm91cE5hbWUodGVzdEdyb3VwLCBuZXdOYW1lKQogICAgIHsKLSAgICAgICAgdmFyIGxhYmVs
ID0gdGhpcy5fdGVzdEdyb3VwTGFiZWxNYXAuZ2V0KHRlc3RHcm91cCk7Ci0gICAgICAgIGxhYmVs
LmVucXVldWVUb1JlbmRlcigpOwotCi0gICAgICAgIHJldHVybiB0ZXN0R3JvdXAudXBkYXRlTmFt
ZShsYWJlbC5lZGl0ZWRUZXh0KCkpLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gdGVzdEdy
b3VwLnVwZGF0ZU5hbWUobmV3TmFtZSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9z
aG93VGVzdEdyb3VwKHRoaXMuX2N1cnJlbnRUZXN0R3JvdXApOwogICAgICAgICAgICAgdGhpcy5l
bnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgfSwgKGVycm9yKSA9PiB7CiAgICAgICAgICAgICB0
aGlzLmVucXVldWVUb1JlbmRlcigpOwpAQCAtNDMzLDEwICs2MDEsOSBAQCBjbGFzcyBBbmFseXNp
c1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgfSk7CiAgICAgfQog
Ci0gICAgX2hpZGVDdXJyZW50VGVzdEdyb3VwKCkKKyAgICBfaGlkZUN1cnJlbnRUZXN0R3JvdXAo
dGVzdEdyb3VwKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fY3VycmVudFRl
c3RHcm91cCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGVzdEdyb3VwLnVwZGF0ZUhp
ZGRlbkZsYWcoIXRoaXMuX2N1cnJlbnRUZXN0R3JvdXAuaXNIaWRkZW4oKSkudGhlbigoKSA9PiB7
CisgICAgICAgIHJldHVybiB0ZXN0R3JvdXAudXBkYXRlSGlkZGVuRmxhZyghdGVzdEdyb3VwLmlz
SGlkZGVuKCkpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgdGhpcy5fZGlkVXBkYXRlVGVzdEdy
b3VwSGlkZGVuU3RhdGUoKTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAg
ICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgewpAQCAtNDUxLDcgKzYxOCw3IEBAIGNsYXNzIEFu
YWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXNrKTsKIAot
ICAgICAgICB2YXIgbmV3Q2hhbmdlVHlwZSA9IHRoaXMuX3Rhc2tTdGF0dXNDb250cm9sLnZhbHVl
OworICAgICAgICBsZXQgbmV3Q2hhbmdlVHlwZSA9IHRoaXMuY29udGVudCgnY2hhbmdlLXR5cGUn
KS52YWx1ZTsKICAgICAgICAgaWYgKG5ld0NoYW5nZVR5cGUgPT0gJ3VuY29uZmlybWVkJykKICAg
ICAgICAgICAgIG5ld0NoYW5nZVR5cGUgPSBudWxsOwogCkBAIC00NjUsMjcgKzYzMiw2IEBAIGNs
YXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICBfYXNzb2NpYXRlQnVnKHRyYWNrZXIsIGJ1Z051bWJlcikKLSAgICB7
Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRyYWNrZXIgaW5zdGFuY2VvZiBCdWdUcmFja2VyKTsK
LSAgICAgICAgYnVnTnVtYmVyID0gcGFyc2VJbnQoYnVnTnVtYmVyKTsKLQotICAgICAgICBjb25z
dCB1cGRhdGVSZW5kZXJpbmcgPSAoKSA9PiB7IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7IH07Ci0g
ICAgICAgIHJldHVybiB0aGlzLl90YXNrLmFzc29jaWF0ZUJ1Zyh0cmFja2VyLCBidWdOdW1iZXIp
LnRoZW4odXBkYXRlUmVuZGVyaW5nLCAoZXJyb3IpID0+IHsKLSAgICAgICAgICAgIHVwZGF0ZVJl
bmRlcmluZygpOwotICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBhc3NvY2lhdGUgdGhlIGJ1
ZzogJyArIGVycm9yKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgX2Rpc3NvY2lhdGVCdWco
YnVnKQotICAgIHsKLSAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4geyB0aGlz
LmVucXVldWVUb1JlbmRlcigpOyB9OwotICAgICAgICByZXR1cm4gdGhpcy5fdGFzay5kaXNzb2Np
YXRlQnVnKGJ1ZykudGhlbih1cGRhdGVSZW5kZXJpbmcsIChlcnJvcikgPT4gewotICAgICAgICAg
ICAgdXBkYXRlUmVuZGVyaW5nKCk7Ci0gICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGRpc3Nv
Y2lhdGUgdGhlIGJ1ZzogJyArIGVycm9yKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCiAgICAgX2Fz
c29jaWF0ZUNvbW1pdChraW5kLCByZXBvc2l0b3J5LCByZXZpc2lvbikKICAgICB7CiAgICAgICAg
IGNvbnN0IHVwZGF0ZVJlbmRlcmluZyA9ICgpID0+IHsgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsg
fTsKQEAgLTUwOSwxMCArNjU1LDggQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBh
Z2VXaXRoSGVhZGluZyB7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIF9yZXRyeUN1cnJlbnRU
ZXN0R3JvdXAocmVwZXRpdGlvbkNvdW50KQorICAgIF9yZXRyeUN1cnJlbnRUZXN0R3JvdXAodGVz
dEdyb3VwLCByZXBldGl0aW9uQ291bnQpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKLSAgICAgICAgY29uc3QgdGVzdEdyb3VwID0gdGhpcy5f
Y3VycmVudFRlc3RHcm91cDsKICAgICAgICAgY29uc3QgbmV3TmFtZSA9IHRoaXMuX2NyZWF0ZVJl
dHJ5TmFtZUZvclRlc3RHcm91cCh0ZXN0R3JvdXAubmFtZSgpKTsKICAgICAgICAgY29uc3QgY29t
bWl0U2V0TGlzdCA9IHRlc3RHcm91cC5yZXF1ZXN0ZWRDb21taXRTZXRzKCk7CiAKQEAgLTUyMywy
NyArNjY3LDYgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGlu
ZyB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0Nv
bW1pdFNldExpc3QobmV3TmFtZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApOwogICAg
IH0KIAotICAgIF9jaGFydFNlbGVjdGlvbkRpZENoYW5nZSgpCi0gICAgewotICAgICAgICB0aGlz
Ll9zZWxlY3Rpb25XYXNNb2RpZmllZEJ5VXNlciA9IHRydWU7Ci0gICAgICAgIHRoaXMuZW5xdWV1
ZVRvUmVuZGVyKCk7Ci0gICAgfQotCi0gICAgX2NyZWF0ZU5ld1Rlc3RHcm91cEZyb21DaGFydChu
YW1lLCByZXBldGl0aW9uQ291bnQsIGNvbW1pdFNldE1hcCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9jcmVhdGVUZXN0R3JvdXBBZnRlclZlcmlmeWluZ0NvbW1pdFNldExpc3QobmFtZSwg
cmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApOwotICAgIH0KLQotICAgIF9zZWxlY3RlZFJv
d0luQW5hbHlzaXNSZXN1bHRzVmlld2VyKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZW5xdWV1ZVRv
UmVuZGVyKCk7Ci0gICAgfQotCi0gICAgX2NyZWF0ZU5ld1Rlc3RHcm91cEZyb21WaWV3ZXIobmFt
ZSwgcmVwZXRpdGlvbkNvdW50LCBjb21taXRTZXRNYXApCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fY3JlYXRlVGVzdEdyb3VwQWZ0ZXJWZXJpZnlpbmdDb21taXRTZXRMaXN0KG5hbWUsIHJl
cGV0aXRpb25Db3VudCwgY29tbWl0U2V0TWFwKTsKLSAgICB9Ci0KICAgICBfY3JlYXRlVGVzdEdy
b3VwQWZ0ZXJWZXJpZnlpbmdDb21taXRTZXRMaXN0KHRlc3RHcm91cE5hbWUsIHJlcGV0aXRpb25D
b3VudCwgY29tbWl0U2V0TWFwKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2hhc0R1cGxpY2F0
ZVRlc3RHcm91cE5hbWUodGVzdEdyb3VwTmFtZSkpIHsKQEAgLTYwOCwxNCArNzMxLDE0IEBAIGNs
YXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgIHsKICAg
ICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFuYWx5c2lzLXRhc2stcGFn
ZSI+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJhbmFseXNpcy10YXNrLW5hbWUiPjxlZGl0
YWJsZS10ZXh0PjwvZWRpdGFibGUtdGV4dD48L2gyPgotICAgICAgICAgICAgICAgIDxoMyBjbGFz
cz0icGxhdGZvcm0tbWV0cmljLW5hbWVzIj48YSBocmVmPSIiPjwvYT48L2gzPgorICAgICAgICAg
ICAgICAgIDxoMiBjbGFzcz0iYW5hbHlzaXMtdGFzay1uYW1lIj48ZWRpdGFibGUtdGV4dCBpZD0i
YW5hbHlzaXMtdGFzay1uYW1lIj48L2VkaXRhYmxlLXRleHQ+PC9oMj4KKyAgICAgICAgICAgICAg
ICA8aDMgaWQ9InBsYXRmb3JtLW1ldHJpYy1uYW1lcyI+PC9oMz4KICAgICAgICAgICAgICAgICA8
cCBjbGFzcz0iZXJyb3ItbWVzc2FnZSI+PC9wPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
ImFuYWx5c2lzLXRhc2stc3RhdHVzIj4KICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24+CiAg
ICAgICAgICAgICAgICAgICAgICAgICA8aDM+U3RhdHVzPC9oMz4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIDxmb3JtIGNsYXNzPSJjaGFuZ2UtdHlwZS1mb3JtIj4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8c2VsZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNo
YW5nZS10eXBlLWZvcm0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9
ImNoYW5nZS10eXBlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2
YWx1ZT0idW5jb25maXJtZWQiPlVuY29uZmlybWVkPC9vcHRpb24+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InJlZ3Jlc3Npb24iPkRlZmluaXRlIHJlZ3Jl
c3Npb248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2
YWx1ZT0icHJvZ3Jlc3Npb24iPkRlZmluaXRlIHByb2dyZXNzaW9uPC9vcHRpb24+CkBAIC02Mjcs
MzYgKzc1MCwyMiBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFk
aW5nIHsKICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgogICAgICAgICAgICAgICAgICAg
ICA8c2VjdGlvbiBjbGFzcz0iYXNzb2NpYXRlZC1idWdzIj4KICAgICAgICAgICAgICAgICAgICAg
ICAgIDxoMz5Bc3NvY2lhdGVkIEJ1Z3M8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgPG11
dGFibGUtbGlzdC12aWV3PjwvbXV0YWJsZS1saXN0LXZpZXc+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8YW5hbHlzaXMtdGFzay1idWctbGlzdCBpZD0iYnVnLWxpc3QiPjwvYW5hbHlzaXMtdGFz
ay1idWctbGlzdD4KICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICAgICAg
ICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY2F1c2UtZml4Ij4KKyAgICAgICAgICAgICAgICAgICAg
PHNlY3Rpb24gaWQ9ImNhdXNlLWZpeCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Q2F1
c2VkIGJ5PC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXVzZS1s
aXN0Ij48bXV0YWJsZS1saXN0LXZpZXc+PC9tdXRhYmxlLWxpc3Qtdmlldz48L3NwYW4+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8bXV0YWJsZS1saXN0LXZpZXcgaWQ9ImNhdXNlLWxpc3QiPjwv
bXV0YWJsZS1saXN0LXZpZXc+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Rml4ZWQgYnk8
L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpeC1saXN0Ij48bXV0
YWJsZS1saXN0LXZpZXc+PC9tdXRhYmxlLWxpc3Qtdmlldz48L3NwYW4+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8bXV0YWJsZS1saXN0LXZpZXcgaWQ9ImZpeC1saXN0Ij48L211dGFibGUtbGlz
dC12aWV3PgogICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgICAgICAgICAg
ICAgIDxzZWN0aW9uIGNsYXNzPSJyZWxhdGVkLXRhc2tzIj4KICAgICAgICAgICAgICAgICAgICAg
ICAgIDxoMz5SZWxhdGVkIFRhc2tzPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBj
bGFzcz0icmVsYXRlZC10YXNrcy1saXN0Ij48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAg
PHVsIGlkPSJyZWxhdGVkLXRhc2tzLWxpc3QiPjwvdWw+CiAgICAgICAgICAgICAgICAgICAgIDwv
c2VjdGlvbj4KICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8c2VjdGlv
biBjbGFzcz0ib3ZlcnZpZXctY2hhcnQiPgotICAgICAgICAgICAgICAgICAgICA8YW5hbHlzaXMt
dGFzay1jaGFydC1wYW5lPjwvYW5hbHlzaXMtdGFzay1jaGFydC1wYW5lPgotICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJuZXctdGVzdC1ncm91cC1mb3JtIj48Y3VzdG9taXphYmxlLXRl
c3QtZ3JvdXAtZm9ybT48L2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0+PC9kaXY+Ci0gICAg
ICAgICAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJh
bmFseXNpcy1yZXN1bHRzLXZpZXciPgotICAgICAgICAgICAgICAgICAgICA8YW5hbHlzaXMtcmVz
dWx0cy12aWV3ZXI+PC9hbmFseXNpcy1yZXN1bHRzLXZpZXdlcj4KLSAgICAgICAgICAgICAgICAg
ICAgPGRpdiBjbGFzcz0ibmV3LXRlc3QtZ3JvdXAtZm9ybSI+PGN1c3RvbWl6YWJsZS10ZXN0LWdy
b3VwLWZvcm0+PC9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtPjwvZGl2PgotICAgICAgICAg
ICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGVzdC1n
cm91cC12aWV3Ij4KLSAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ0ZXN0LWdyb3VwLWxp
c3QiPjwvdWw+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlc3QtZ3JvdXAtZGV0
YWlscyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVzdC1ncm91cC1yZXN1bHRzLXRhYmxl
PjwvdGVzdC1ncm91cC1yZXN1bHRzLXRhYmxlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0idGVzdC1ncm91cC1yZXRyeS1mb3JtIj48dGVzdC1ncm91cC1mb3JtPjwvdGVzdC1n
cm91cC1mb3JtPjwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0i
dGVzdC1ncm91cC1oaWRlLWJ1dHRvbiI+SGlkZTwvYnV0dG9uPgotICAgICAgICAgICAgICAgICAg
ICAgICAgPHNwYW4gY2xhc3M9InBlbmRpbmctcmVxdWVzdC1jYW5jZWwtd2FybmluZyI+KGNhbmNl
bHMgcGVuZGluZyByZXF1ZXN0cyk8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2Pgot
ICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5hbHlzaXMtdGFz
ay1jaGFydC1wYW5lIGlkPSJjaGFydC1wYW5lIj48L2FuYWx5c2lzLXRhc2stY2hhcnQtcGFuZT4K
KyAgICAgICAgICAgICAgICA8YW5hbHlzaXMtdGFzay1yZXN1bHRzLXBhbmUgaWQ9InJlc3VsdHMt
cGFuZSI+PC9hbmFseXNpcy10YXNrLXJlc3VsdHMtcGFuZT4KKyAgICAgICAgICAgICAgICA8YW5h
bHlzaXMtdGFzay10ZXN0LWdyb3VwLXBhbmUgaWQ9Imdyb3VwLXBhbmUiPjwvYW5hbHlzaXMtdGFz
ay10ZXN0LWdyb3VwLXBhbmU+CiAgICAgICAgICAgICA8L2Rpdj4KIGA7CiAgICAgfQpAQCAtNjc1
LDcgKzc4NCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRp
bmcgewogICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC5wbGF0Zm9ybS1tZXRyaWMtbmFtZXMgeworICAgICAgICAgICAgI3BsYXRmb3JtLW1l
dHJpYy1uYW1lcyB7CiAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgICAg
ICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgICAgICAgICAgIGNvbG9yOiAjYzkz
OwpAQCAtNjgzLDEzICs3OTIsMTcgQEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBh
Z2VXaXRoSGVhZGluZyB7CiAgICAgICAgICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLnBsYXRmb3JtLW1ldHJpYy1uYW1lcyBhIHsKKyAgICAgICAgICAg
ICNwbGF0Zm9ybS1tZXRyaWMtbmFtZXMgYSB7CiAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0
aW9uOiBub25lOwogICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAucGxhdGZvcm0tbWV0cmljLW5hbWVzOmVtcHR5IHsKLSAgICAgICAg
ICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAjcGxhdGZvcm0tbWV0cmljLW5hbWVzOmVt
cHR5IHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAuZXJyb3ItbWVzc2FnZTplbXB0eSB7CisgICAgICAgICAgICAgICAgZGlzcGxh
eTogbm9uZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLmVycm9yLW1lc3NhZ2U6bm90
KDplbXB0eSkgewpAQCAtNjk3LDggKzgxMCwyMCBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4
dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAub3ZlcnZpZXctY2hhcnQgewotICAgICAgICAgICAg
ICAgIG1hcmdpbjogMCAxcmVtOworICAgICAgICAgICAgI2NoYXJ0LXBhbmUsCisgICAgICAgICAg
ICAjcmVzdWx0cy1wYW5lIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAg
ICAgICAgICAgICBwYWRkaW5nOiAwIDFyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRv
bTogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICNyZXN1bHRzLXBhbmUgeworICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDFyZW07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICNncm91cC1wYW5lIHsKKyAgICAgICAgICAgICAg
ICBtYXJnaW46IDFyZW07CisgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMnJlbTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgLmFuYWx5c2lzLXRhc2stc3RhdHVzIHsKQEAgLTc0
Myw5MyArODY4LDEyIEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhl
YWRpbmcgewogICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICAgICAg
IH0KIAotCi0gICAgICAgICAgICAuYW5hbHlzaXMtcmVzdWx0cy12aWV3IHsKLSAgICAgICAgICAg
ICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2NjYzsKLSAgICAgICAgICAgICAgICBib3JkZXIt
Ym90dG9tOiBzb2xpZCAxcHggI2NjYzsKLSAgICAgICAgICAgICAgICBtYXJnaW46IDFyZW0gMDsK
LSAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcmVtOwotICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICAudGVzdC1jb25maWd1cmF0aW9uIGgzIHsKICAgICAgICAgICAgICAgICBmb250LXNpemU6
IDFyZW07CiAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICAg
ICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIDFyZW07CiAg
ICAgICAgICAgICAgICAgcGFkZGluZzogMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
LnRlc3QtZ3JvdXAtdmlldyB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheTogdGFibGU7Ci0gICAg
ICAgICAgICAgICAgbWFyZ2luOiAwIDFyZW07Ci0gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRv
bTogMnJlbTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLnRlc3QtZ3JvdXAtZGV0YWls
cyB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKLSAgICAgICAgICAgICAg
ICBtYXJnaW4tYm90dG9tOiAxcmVtOwotICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7Ci0gICAg
ICAgICAgICAgICAgbWFyZ2luOiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAubmV3
LXRlc3QtZ3JvdXAtZm9ybSwKLSAgICAgICAgICAgIC50ZXN0LWdyb3VwLXJldHJ5LWZvcm0gewot
ICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7Ci0gICAgICAgICAgICAgICAgbWFyZ2luOiAwLjVy
ZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC50ZXN0LWdyb3VwLWhpZGUtYnV0dG9u
IHsKLSAgICAgICAgICAgICAgICBtYXJnaW46IDAuNXJlbTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLnRlc3QtZ3JvdXAtbGlzdCB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheTogdGFi
bGUtY2VsbDsKLSAgICAgICAgICAgICAgICBtYXJnaW46IDA7Ci0gICAgICAgICAgICAgICAgcGFk
ZGluZzogMC4ycmVtIDA7Ci0gICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKLSAgICAg
ICAgICAgICAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDFweCAjY2NjOwotICAgICAgICAgICAgICAg
IHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4cmVtOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAudGVzdC1ncm91cC1saXN0OmVtcHR5IHsKLSAg
ICAgICAgICAgICAgICBtYXJnaW46IDA7Ci0gICAgICAgICAgICAgICAgcGFkZGluZzogMDsKLSAg
ICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC50ZXN0LWdyb3VwLWxpc3QgPiBsaSB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheTog
YmxvY2s7Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC50ZXN0LWdyb3VwLWxpc3QgPiBsaSA+IGEgewotICAgICAgICAgICAg
ICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0OwotICAg
ICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICAgICAgICAgICAgICBtYXJn
aW46IDA7Ci0gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAudGVzdC1ncm91cC1saXN0ID4gbGkudGVzdC1ncm91
cC1saXN0LXNob3ctYWxsIHsKLSAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKLSAg
ICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjVyZW07Ci0gICAgICAgICAgICAgICAgcGFkZGlu
Zy1yaWdodDogMXJlbTsKLSAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAg
ICAgICAgICAgICAgY29sb3I6ICM5OTk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC50
ZXN0LWdyb3VwLWxpc3QgPiBsaS50ZXN0LWdyb3VwLWxpc3Qtc2hvdy1hbGw6bm90KC5zZWxlY3Rl
ZCkgYTpob3ZlciB7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLnRlc3QtZ3JvdXAtbGlzdCA+IGxpLnNlbGVjdGVkID4g
YSB7Ci0gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMDQsIDE1MywgNTEsIDAuMSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC50ZXN0LWdyb3VwLWxpc3QgPiBsaTpub3Qo
LnNlbGVjdGVkKSA+IGE6aG92ZXIgewotICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlZWU7
Ci0gICAgICAgICAgICB9Ci1gOworICAgICAgICAgICAgfWA7CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvdGVzdC1ncm91cHMtdGVzdHMu
anMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy90ZXN0LWdyb3Vwcy10ZXN0
cy5qcwppbmRleCA1MWExOTZlYTBhNDk3YzE0NTY2OTFkODQ3YWQ3YjBhMDQ5ZjNhM2JkLi42YzY2
N2RlZWY1NzBjNGFkODhmNjgwNzdlNmQxZDFkZWMyZjQxYTMwIDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy90ZXN0LWdyb3Vwcy10ZXN0cy5qcworKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy90ZXN0LWdyb3Vwcy10ZXN0cy5qcwpA
QCAtMTQyLDcgKzE0Miw2IEBAIGRlc2NyaWJlKCdUZXN0R3JvdXAnLCBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICBhc3NlcnQub2soYnVpbGRSZXF1ZXN0c1swXS5pc1BlbmRpbmcoKSk7CiAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoYnVpbGRSZXF1ZXN0c1swXS5zdGF0dXNMYWJlbCgpLCAnV2Fp
dGluZycpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1aWxkUmVxdWVzdHNbMF0uYnVpbGRJ
ZCgpLCBudWxsKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChidWlsZFJlcXVlc3RzWzBdLnJl
c3VsdCgpLCBudWxsKTsKIAogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1aWxkUmVxdWVzdHNb
MV0uaWQoKSwgMTY5ODYpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1aWxkUmVxdWVzdHNb
MV0ub3JkZXIoKSwgMSk7CkBAIC0xNTEsNyArMTUwLDYgQEAgZGVzY3JpYmUoJ1Rlc3RHcm91cCcs
IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIGFzc2VydC5vayhidWlsZFJlcXVlc3RzWzFdLmlz
UGVuZGluZygpKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChidWlsZFJlcXVlc3RzWzFdLnN0
YXR1c0xhYmVsKCksICdXYWl0aW5nJyk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoYnVpbGRS
ZXF1ZXN0c1sxXS5idWlsZElkKCksIG51bGwpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGJ1
aWxkUmVxdWVzdHNbMV0ucmVzdWx0KCksIG51bGwpOwogICAgICAgICB9KTsKIAogICAgICAgICBp
dCgnc2hvdWxkIGNyZWF0ZSByb290IHNldHMgZm9yIGVhY2ggZ3JvdXAnLCBmdW5jdGlvbiAoKSB7
Cg==
</data>
<flag name="review"
          id="326996"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>