<?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>167151</bug_id>
          
          <creation_ts>2017-01-17 19:43:58 -0800</creation_ts>
          <short_desc>Make calls to render() functions async</short_desc>
          <delta_ts>2017-01-18 13:23:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Perf Dashboard</component>
          <version>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></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>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1267651</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-17 19:43:58 -0800</bug_when>
    <thetext>Right now, perf dashboard synchronously calls render() functions in various places.
This turns out to be problematic when the top-level component keeps updating descendent components.

For example, during a single load of the summary page on our internal dashboard,
we called render() function 9444 times!

Make these calls async so that we don&apos;t end up doing O(n^2) work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267663</commentid>
    <comment_count>1</comment_count>
      <attachid>299114</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-17 20:28:13 -0800</bug_when>
    <thetext>Created attachment 299114
Improves efficiency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267851</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-01-18 13:23:49 -0800</bug_when>
    <thetext>Committed r210880: &lt;http://trac.webkit.org/changeset/210880&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299114</attachid>
            <date>2017-01-17 20:28:13 -0800</date>
            <delta_ts>2017-01-18 12:26:26 -0800</delta_ts>
            <desc>Improves efficiency</desc>
            <filename>bug-167151-20170117202640.patch</filename>
            <type>text/plain</type>
            <size>69004</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwODQxKQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0NCBAQAorMjAxNy0wMS0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBNYWtlIGNhbGxzIHRvIHJlbmRlcigpIGZ1bmN0aW9ucyBhc3luYworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MTUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBjYWxscyB0byBy
ZW5kZXIoKSBhc3luYyBieSBjb2FsZXNjaW5nIGNhbGxzIGluc2lkZSBlbnF1ZXVlVG9SZW5kZXIo
KSwgd2hpY2ggaGFzIGJlZW4gcmVuYW1lZCBmcm9tCisgICAgICAgIHVwZGF0ZVJlbmRlcmluZygp
LiBXZSBub3cgcXVldWUgdXAgYWxsIHRoZSBjb21wb25lbnRzIGFuZCB3YWl0IHVudGlsIHRoZSBu
ZXh0IGFuaW1hdGlvbiBmcmFtZSB0byBpbnZva2UKKyAgICAgICAgcmVuZGVyKCkgb24gYWxsIHRo
b3NlIGNvbXBvbmVudHMuCisKKyAgICAgICAgVGhpcyByZWR1Y2VzIHJlbmRlcigpIGNhbGxzIGlu
IHRoZSBzdW1tYXJ5IHBhZ2Ugb2Ygb3VyIGludGVybmFsIGRhc2hib2FyZCBieSAxNXggZnJvbSB+
OTQwMCB0byB+NjAwIGJ5CisgICAgICAgIGVsaW1pbmF0aW5nIHBhdGhvbG9naWNhbCBPKG5eMikg
YmVoYXZpb3IgYmV0d2VlbiByZW5kZXIoKSBjYWxscy4KKworICAgICAgICBDb25zb2xpZGF0ZWQg
VGltZVNlcmllc0NoYXJ0J3MgZW5xdWV1ZVJlbmRlciBpbnRvIHRoaXMgbmV3bHkgYWRkZWQgZmVh
dHVyZSBvZiBDb21wb25lbnRCYXNlIGFsb25nIHdpdGgKKyAgICAgICAgdGhlIHN1cHBvcnQgdG8g
Y2FsbCByZW5kZXIoKSBvbiBhIHJlc2l6ZSBldmVudC4gTmV3IGltcGxlbWVudGF0aW9uIG1ha2Vz
IHVzZSBvZiBjb25uZWN0ZWRDYWxsYmFjayBhbmQKKyAgICAgICAgZGlzY29ubmVjdGVkQ2FsbGJh
Y2sgdG8gYXZvaWQgdGhlIHdvcmsgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBpbiBhIGRvY3Vt
ZW50IHRyZWUuCisKKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGNvbmNlcm5zIHdpdGgg
cmVuYW1pbmcgdXBkYXRlUmVuZGVyaW5nIHRvIGVucXVldWVUb1JlbmRlciBhbmQgZml4aW5nIGEg
ZmV3IG1pbm9yIGJ1Z3MKKyAgICAgICAgdGhhdCBJIGVuY291bnRlcmVkIHdoaWxlIHdvcmtpbmcg
b24gdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJyb3dzZXItdGVzdHMvY29tcG9uZW50LWJhc2Ut
dGVzdHMuanM6IEFkZGVkIHRlc3RzIGZvciBDb21wb25lbnRCYXNlLmVucXVldWVUb1JlbmRlcigp
LgorICAgICAgICAqIGJyb3dzZXItdGVzdHMvaW5kZXguaHRtbDoKKyAgICAgICAgKEJyb3dzZXJD
b250ZXh0LnByb3RvdHlwZS5pbXBvcnRTY3JpcHRzKTogUmVuYW1lZCBmcm9tIGltcG9ydFNjcmlw
dDsgTm93IHN1cHBvcnRzIGxvYWRpbmcgbXVsdGlwbGUgc2NyaXB0cy4KKyAgICAgICAgKEJyb3dz
ZXJDb250ZXh0LnByb3RvdHlwZS5pbXBvcnRTY3JpcHQpOiBBZGRlZC4KKyAgICAgICAgKEJyb3dz
ZXJDb250ZXh0KTogUmVtb3ZlZCB0aGUgdW51c2VkIGNyZWF0ZVdpdGhTY3JpcHRzLgorCisgICAg
ICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvYW5hbHlzaXMtcmVzdWx0cy12aWV3ZXIuanM6Cisg
ICAgICAgIChBbmFseXNpc1Jlc3VsdHNWaWV3ZXIucHJvdG90eXBlLl9leHBhbmRCZXR3ZWVuKToK
KyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9iYXItZ3JhcGgtZ3JvdXAuanM6CisgICAg
ICAgIChCYXJHcmFwaEdyb3VwLnByb3RvdHlwZS51cGRhdGVHcm91cFJlbmRlcmluZyk6CisKKyAg
ICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzOgorICAgICAgICAoQ29tcG9uZW50
QmFzZSk6IFdoZW4gdGhlIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGN1c3RvbSBlbGVtZW50cyBh
bmQgCisgICAgICAgIChDb21wb25lbnRCYXNlLnByb3RvdHlwZS5lbnF1ZXVlVG9SZW5kZXIpOiBS
ZW5hbWVkIGZyb20gdXBkYXRlUmVuZGVyaW5nLiBRdWV1ZXMgdXAgdGhlIGNvbXBvbmVudCB0byBj
YWxsCisgICAgICAgIHJlbmRlcigpIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgaW52b2tpbmcgaXQu
CisgICAgICAgIChDb21wb25lbnRCYXNlLnJlbmRlcmluZ1RpbWVyRGlkRmlyZSk6IENhbGwgcmVu
ZGVyKCkuIFNpbmNlIHJlbmRlcigpIGZ1bmN0aW9uIG9mdGVuIGNhbGxzIGVucXVldWVUb1JlbmRl
cgorICAgICAgICBvbiBjaGlsZCBjb21wb25lbnRzLCBnbyBhaGVhZCBhbmQgaW52b2tlIHJlbmRl
cigpIG9uIGFueSBjb21wb25lbnRzIGVucXVldWVkIGR1cmluZyByZW5kZXIoKSBjYWxscy4KKyAg
ICAgICAgKENvbXBvbmVudEJhc2UuX2Nvbm5lY3RlZENvbXBvbmVudFRvUmVuZGVyT25SZXNpemUp
OiBBZGRlZC4KKyAgICAgICAgKENvbXBvbmVudEJhc2UuX2Rpc2Nvbm5lY3RlZENvbXBvbmVudFRv
UmVuZGVyT25SZXNpemUpOiBBZGRlZC4KKyAgICAgICAgKENvbXBvbmVudEJhc2UuZGVmaW5lRWxl
bWVudC5lbGVtZW50Q2xhc3MucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrKTogQWRkZWQuIFRo
aXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvCisgICAgICAgIGF2b2lkIHRoZSB3b3JrIHdoZW4gdGhl
IGNvbXBvbmVudCBpcyBub3QgaW4gdGhlIGRvY3VtZW50OyBlLmcuIGJlY2F1c2UgdGhlIGVudGly
ZSBwYWdlIGNvbXBvbmVudCBoYXMgYmVlbgorICAgICAgICBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1
bWVudC4gVGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBpbiBUaW1lU2VyaWVzQ2hhcnQgd2FzIG5vdCBk
b2luZyB0aGlzLgorICAgICAgICAoQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50LmVsZW1lbnRD
bGFzcy5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKENv
bXBvbmVudEJhc2UpOiBSZXBsYWNlZCB1bnVzZWQgc3RhdGljIHZhcmlhYmxlcyB3aXRoIF9jb21w
b25lbnRzVG9SZW5kZXIgYW5kIF9jb21wb25lbnRzVG9SZW5kZXJPblJlc2l6ZS4KKworICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL2NoYXJ0LXBhbmUtYmFzZS5qczoKKyAgICAgICAgKENo
YXJ0UGFuZUJhc2UucHJvdG90eXBlLmZldGNoQW5hbHlzaXNUYXNrcyk6CisgICAgICAgIChDaGFy
dFBhbmVCYXNlLnByb3RvdHlwZS5kaWRVcGRhdGVBbm5vdGF0aW9ucyk6IEFkZGVkLiBBZGRyZXNz
ZXMgdGhlIGJ1ZyB0aGF0IHRoZSBhbm5vdGF0aW9uIGJhcnMgaW4gdGhlCisgICAgICAgIGNoYXJ0
cyBzaG93biBhbiBhbiBhbmFseXNpcyB0YXNrIGRvZXNuJ3QgdXBkYXRlIGl0cyBjb2xvciB3aGVu
IHRoZSBzdGF0ZSBpcyB1cGRhdGVkIGluIHRoZSBVSS4gCisgICAgICAgIChDaGFydFBhbmVCYXNl
LnByb3RvdHlwZS5fbWFpblNlbGVjdGlvbkRpZFpvb20pOgorICAgICAgICAoQ2hhcnRQYW5lQmFz
ZS5wcm90b3R5cGUuX3VwZGF0ZVN0YXR1cyk6CisgICAgICAgIChDaGFydFBhbmVCYXNlLnByb3Rv
dHlwZS5fcmVxdWVzdE9wZW5pbmdDb21taXRWaWV3ZXIpOgorICAgICAgICAoQ2hhcnRQYW5lQmFz
ZS5wcm90b3R5cGUuX2tleXVwKToKKyAgICAgICAgKENoYXJ0UGFuZUJhc2UucHJvdG90eXBlLnJl
bmRlcik6CisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvY29tbWl0LWxvZy12aWV3ZXIu
anM6CisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3Jv
dXAtZm9ybS5qczoKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0pOgorICAgICAg
ICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2N1c3RvbWl6ZSk6CisgICAg
ICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvZWRpdGFibGUtdGV4dC5qczoKKyAgICAgICAgKEVk
aXRhYmxlVGV4dC5wcm90b3R5cGUuX2RpZFVwZGF0ZSk6CisgICAgICAgICogcHVibGljL3YzL2Nv
bXBvbmVudHMvaW50ZXJhY3RpdmUtdGltZS1zZXJpZXMtY2hhcnQuanM6CisgICAgICAgICogcHVi
bGljL3YzL2NvbXBvbmVudHMvcGFuZS1zZWxlY3Rvci5qczoKKyAgICAgICAgKFBhbmVTZWxlY3Rv
ci5wcm90b3R5cGUuX3NlbGVjdGVkSXRlbSk6CisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVu
dHMvdGltZS1zZXJpZXMtY2hhcnQuanM6CisgICAgICAgIChUaW1lU2VyaWVzQ2hhcnQpOiBSZW1v
dmVkIHRoZSBsb2dpYyB0byB1cGRhdGUgdXBvbiByZXNpemUuIFNlZSBfY29ubmVjdGVkQ29tcG9u
ZW50VG9SZW5kZXJPblJlc2l6ZSBhYm92ZS4KKyAgICAgICAgKFRpbWVTZXJpZXNDaGFydC5wcm90
b3R5cGUuZ2V0IGVucXVldWVUb1JlbmRlck9uUmVzaXplKTogQWRkZWQuIFJldHVybnMgdHJ1ZS4K
KyAgICAgICAgKFRpbWVTZXJpZXNDaGFydC5wcm90b3R5cGUuZW5xdWV1ZVRvUmVuZGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFRpbWVTZXJpZXNDaGFydC5fcmVuZGVyRW5xdWV1ZWRDaGFydHMpOiBE
ZWxldGVkLgorICAgICAgICAoVGltZVNlcmllc0NoYXJ0KTogQ2FsbCBDb21wb25lbnRCYXNlLmRl
ZmluZUVsZW1lbnQgdG8gbWFrZSB0aGlzIGEgcHJvcGVyIGNvbXBvbmVudCBzbyB0aGF0IHRoZSBs
b2dpYyBpbgorICAgICAgICBjb25uZWN0ZWRDYWxsYmFjayB0byB1cGRhdGUgdXBvbiByZXNpemUg
ZXZlbnQgd291bGQgd29yay4KKyAgICAgICAgKiBwdWJsaWMvdjMvaW5zdHJ1bWVudGF0aW9uLmpz
OgorICAgICAgICAoSW5zdHJ1bWVudGF0aW9uLmR1bXBTdGF0aXN0aWNzKTogU29ydCByZXN1bHRz
IGJ5IHRoZSBrZXkgbmFtZXMuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy90aW1lLXNlcmll
cy5qczoKKyAgICAgICAgKFRpbWVTZXJpZXMucHJvdG90eXBlLnZhbHVlcyk6IEFkZGVkLiBUaGlz
IG1ldGhvZCB3YXMgbmV2ZXIgcG9ydGVkIHRvIHYzIGluIHIxOTg0NjIsIGFuZCBicm9rZSB0aGUg
ZmVhdHVyZQorICAgICAgICB0byBzaG93IG1vdmluZyBhdmVyYWdlcywgZXRjLi4uIG9uIHRoZSBj
aGFydHMgcGFnZS4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtY2F0ZWdvcnkt
cGFnZS5qczoKKyAgICAgICAgKEFuYWx5c2lzQ2F0ZWdvcnlQYWdlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEFuYWx5c2lzQ2F0ZWdvcnlQYWdlLnByb3RvdHlwZS51cGRhdGVGcm9tU2VyaWFs
aXplZFN0YXRlKToKKyAgICAgICAgKEFuYWx5c2lzQ2F0ZWdvcnlQYWdlLnByb3RvdHlwZS5maWx0
ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoQW5hbHlzaXNDYXRlZ29yeVBhZ2UucHJvdG90eXBlLnJl
bmRlcik6CisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qczoK
KyAgICAgICAgKEFuYWx5c2lzVGFza0NoYXJ0UGFuZS5wcm90b3R5cGUuX3VwZGF0ZVN0YXR1cyk6
CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS51cGRhdGVGcm9tU2VyaWFsaXpl
ZFN0YXRlKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLl9kaWRGZXRjaFRh
c2spOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX2RpZEZldGNoUmVsYXRl
ZEFuYWx5c2lzVGFza3MpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUuX2Rp
ZEZldGNoTWVhc3VyZW1lbnQpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5cGUu
X2RpZEZldGNoVGVzdEdyb3Vwcyk6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlw
ZS5fc2hvd0FsbFRlc3RHcm91cHMpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5
cGUuX2RpZEZldGNoQW5hbHlzaXNSZXN1bHRzKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2Uu
cHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChBbmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5f
cmVuZGVyVGVzdEdyb3VwTGlzdC4pOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90b3R5
cGUuX3JlbmRlclRlc3RHcm91cExpc3QpOgorICAgICAgICAoQW5hbHlzaXNUYXNrUGFnZS5wcm90
b3R5cGUuX2NyZWF0ZVRlc3RHcm91cExpc3RJdGVtKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1Bh
Z2UucHJvdG90eXBlLl9zaG93VGVzdEdyb3VwKToKKyAgICAgICAgKEFuYWx5c2lzVGFza1BhZ2Uu
cHJvdG90eXBlLl9kaWRTdGFydEVkaXRpbmdUYXNrTmFtZSk6CisgICAgICAgIChBbmFseXNpc1Rh
c2tQYWdlLnByb3RvdHlwZS5fdXBkYXRlVGFza05hbWUpOgorICAgICAgICAoQW5hbHlzaXNUYXNr
UGFnZS5wcm90b3R5cGUuX3VwZGF0ZVRlc3RHcm91cE5hbWUpOgorICAgICAgICAoQW5hbHlzaXNU
YXNrUGFnZS5wcm90b3R5cGUuX2hpZGVDdXJyZW50VGVzdEdyb3VwKToKKyAgICAgICAgKEFuYWx5
c2lzVGFza1BhZ2UucHJvdG90eXBlLl91cGRhdGVDaGFuZ2VUeXBlKTogRml4ZWQgdGhlIGJ1ZyB0
aGF0IHdlIHdlcmUgbmV2ZXIgdXBkYXRpbmcgYW5ub3RhdGlvbiBiYXJzCisgICAgICAgIGluIHRo
ZSBtYWluIGNoYXJ0IGJ5IGNhbGxpbmcgZGlkVXBkYXRlQW5ub3RhdGlvbnMuCisgICAgICAgIChB
bmFseXNpc1Rhc2tQYWdlLnByb3RvdHlwZS5fYXNzb2NpYXRlQnVnKToKKyAgICAgICAgKEFuYWx5
c2lzVGFza1BhZ2UucHJvdG90eXBlLl9kaXNzb2NpYXRlQnVnKToKKyAgICAgICAgKEFuYWx5c2lz
VGFza1BhZ2UucHJvdG90eXBlLl9hc3NvY2lhdGVDb21taXQpOgorICAgICAgICAoQW5hbHlzaXNU
YXNrUGFnZS5wcm90b3R5cGUuX2Rpc3NvY2lhdGVDb21taXQpOgorICAgICAgICAoQW5hbHlzaXNU
YXNrUGFnZS5wcm90b3R5cGUuX2NoYXJ0U2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKEFu
YWx5c2lzVGFza1BhZ2UucHJvdG90eXBlLl9zZWxlY3RlZFJvd0luQW5hbHlzaXNSZXN1bHRzVmll
d2VyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvYnVpbGQtcmVxdWVzdC1xdWV1ZS1wYWdl
LmpzOgorICAgICAgICAoQnVpbGRSZXF1ZXN0UXVldWVQYWdlLnByb3RvdHlwZS5vcGVuLik6Cisg
ICAgICAgIChCdWlsZFJlcXVlc3RRdWV1ZVBhZ2UucHJvdG90eXBlLm9wZW4pOgorICAgICAgICAq
IHB1YmxpYy92My9wYWdlcy9jaGFydC1wYW5lLmpzOgorICAgICAgICAoQ2hhcnRQYW5lLnByb3Rv
dHlwZS5zZXRPcGVuUmVwb3NpdG9yeSk6CisgICAgICAgIChDaGFydFBhbmUucHJvdG90eXBlLl9y
ZW5kZXJUcmVuZExpbmVQb3BvdmVyKTogRml4ZWQgYSByYWNlIGNvbmRpdGlvbi4gSW5zZXJ0IGEg
c2VsZWN0IGVsZW1lbnQgYXMgbmVlZGVkCisgICAgICAgIGJlZm9yZSB0cnlpbmcgdG8gYXNzaWdu
IHRoZSBjdXJyZW50IHZhbHVlIG9uIGl0LgorICAgICAgICAoQ2hhcnRQYW5lLnByb3RvdHlwZS5f
dHJlbmRMaW5lVHlwZURpZENoYW5nZSk6CisgICAgICAgIChDaGFydFBhbmUucHJvdG90eXBlLl91
cGRhdGVUcmVuZExpbmUpOgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtcGFnZS5q
czoKKyAgICAgICAgKENoYXJ0c1BhZ2UucHJvdG90eXBlLnVwZGF0ZUZyb21TZXJpYWxpemVkU3Rh
dGUpOgorICAgICAgICAoQ2hhcnRzUGFnZS5wcm90b3R5cGUuX3VwZGF0ZURvbWFpbnNGcm9tU2Vy
aWFsaXplZFN0YXRlKToKKyAgICAgICAgKENoYXJ0c1BhZ2UucHJvdG90eXBlLnNldE51bWJlck9m
RGF5c0Zyb21Ub29sYmFyKToKKyAgICAgICAgKENoYXJ0c1BhZ2UucHJvdG90eXBlLl9kaWRNdXRh
dGVQYW5lTGlzdCk6CisgICAgICAgIChDaGFydHNQYWdlLnByb3RvdHlwZS5yZW5kZXIpOgorICAg
ICAgICAqIHB1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qczoKKyAgICAgICAgKENoYXJ0
c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2Ny
ZWF0ZS1hbmFseXNpcy10YXNrLXBhZ2UuanM6CisgICAgICAgIChDcmVhdGVBbmFseXNpc1Rhc2tQ
YWdlLnByb3RvdHlwZS51cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKToKKyAgICAgICAgKiBwdWJs
aWMvdjMvcGFnZXMvZGFzaGJvYXJkLXBhZ2UuanM6CisgICAgICAgIChEYXNoYm9hcmRQYWdlLnBy
b3RvdHlwZS51cGRhdGVGcm9tU2VyaWFsaXplZFN0YXRlKToKKyAgICAgICAgKERhc2hib2FyZFBh
Z2UucHJvdG90eXBlLl9mZXRjaGVkRGF0YSk6CisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2hl
YWRpbmcuanM6CisgICAgICAgIChIZWFkaW5nLnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAq
IHB1YmxpYy92My9wYWdlcy9wYWdlLXdpdGgtaGVhZGluZy5qczoKKyAgICAgICAgKFBhZ2VXaXRo
SGVhZGluZy5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvcGFn
ZS5qczoKKyAgICAgICAgKFBhZ2UucHJvdG90eXBlLm9wZW4pOgorICAgICAgICAqIHB1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanM6CisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUu
b3Blbik6CisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUudGhpcy5fcmVuZGVyUXVldWUu
cHVzaCk6CisgICAgICAgIChTdW1tYXJ5UGFnZSk6CisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90
b3R5cGUuX3JlbmRlckNlbGwpOgorCiAyMDE3LTAxLTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCB0aGUgYnVpbGQgZml4IGZvciBicm93c2VycyB0aGF0
IGRvbid0IHlldCBzdXBwb3J0IGN1c3RvbSBlbGVtZW50cyBTUEkuCkluZGV4OiBXZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9jb21wb25lbnQtYmFzZS10ZXN0cy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9jb21wb25l
bnQtYmFzZS10ZXN0cy5qcwkocmV2aXNpb24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL2Jyb3dzZXItdGVzdHMvY29tcG9uZW50LWJhc2UtdGVzdHMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTQsNyArNCw3IEBAIGRlc2NyaWJlKCdDb21wb25lbnRCYXNlJywgZnVuY3Rpb24oKSB7
CiAgICAgZnVuY3Rpb24gY3JlYXRlVGVzdFRvQ2hlY2tFeGlzdGVuY2VPZlNoYWRvd1RyZWUoY2Fs
bGJhY2ssIG9wdGlvbnMgPSB7aHRtbFRlbXBsYXRlOiBmYWxzZSwgY3NzVGVtcGxhdGU6IHRydWV9
KQogICAgIHsKICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1wb3J0U2NyaXB0KCcuLi9wdWJsaWMvdjMvY29tcG9u
ZW50cy9iYXNlLmpzJywgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7
CisgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlwdCgnY29tcG9uZW50cy9iYXNlLmpz
JywgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7CiAgICAgICAgICAg
ICBjbGFzcyBTb21lQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7IH0KICAgICAgICAg
ICAgIGlmIChvcHRpb25zLmh0bWxUZW1wbGF0ZSkKICAgICAgICAgICAgICAgICBTb21lQ29tcG9u
ZW50Lmh0bWxUZW1wbGF0ZSA9ICgpID0+IHsgcmV0dXJuICc8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEw
cHg7Ij48L2Rpdj4nOyB9OwpAQCAtMjAsMTMgKzIwLDEzIEBAIGRlc2NyaWJlKCdDb21wb25lbnRC
YXNlJywgZnVuY3Rpb24oKSB7CiAKICAgICBkZXNjcmliZSgnY29uc3RydWN0b3InLCAoKSA9PiB7
CiAgICAgICAgIGl0KCdpcyBhIGZ1bmN0aW9uJywgKCkgPT4gewotICAgICAgICAgICAgcmV0dXJu
IG5ldyBCcm93c2luZ0NvbnRleHQoKS5pbXBvcnRTY3JpcHQoJy4uL3B1YmxpYy92My9jb21wb25l
bnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4oKENvbXBvbmVudEJhc2UpID0+IHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgQnJvd3NpbmdDb250ZXh0KCkuaW1wb3J0U2NyaXB0KCdj
b21wb25lbnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4oKENvbXBvbmVudEJhc2Up
ID0+IHsKICAgICAgICAgICAgICAgICBleHBlY3QoQ29tcG9uZW50QmFzZSkudG9CZUEoJ2Z1bmN0
aW9uJyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaXQoJ2NhbiBi
ZSBpbnN0YW50aWF0ZWQnLCAoKSA9PiB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJyb3dzaW5n
Q29udGV4dCgpLmltcG9ydFNjcmlwdCgnLi4vcHVibGljL3YzL2NvbXBvbmVudHMvYmFzZS5qcycs
ICdDb21wb25lbnRCYXNlJykudGhlbigoQ29tcG9uZW50QmFzZSkgPT4geworICAgICAgICAgICAg
cmV0dXJuIG5ldyBCcm93c2luZ0NvbnRleHQoKS5pbXBvcnRTY3JpcHQoJ2NvbXBvbmVudHMvYmFz
ZS5qcycsICdDb21wb25lbnRCYXNlJykudGhlbigoQ29tcG9uZW50QmFzZSkgPT4gewogICAgICAg
ICAgICAgICAgIGxldCBjYWxsQ291bnQgPSAwOwogICAgICAgICAgICAgICAgIGNsYXNzIFNvbWVD
b21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICAgICAgY29u
c3RydWN0b3IoKSB7CkBAIC01MSw3ICs1MSw3IEBAIGRlc2NyaWJlKCdDb21wb25lbnRCYXNlJywg
ZnVuY3Rpb24oKSB7CiAgICAgZGVzY3JpYmUoJ2VsZW1lbnQoKScsICgpID0+IHsKICAgICAgICAg
aXQoJ211c3QgcmV0dXJuIGFuIGVsZW1lbnQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBj
b250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQuaW1wb3J0U2NyaXB0KCcuLi9wdWJsaWMvdjMvY29tcG9uZW50cy9iYXNlLmpzJywgJ0NvbXBv
bmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7CisgICAgICAgICAgICByZXR1cm4g
Y29udGV4dC5pbXBvcnRTY3JpcHQoJ2NvbXBvbmVudHMvYmFzZS5qcycsICdDb21wb25lbnRCYXNl
JykudGhlbigoQ29tcG9uZW50QmFzZSkgPT4gewogICAgICAgICAgICAgICAgIGNsYXNzIFNvbWVD
b21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsgfQogICAgICAgICAgICAgICAgIGxldCBp
bnN0YW5jZSA9IG5ldyBTb21lQ29tcG9uZW50KCdzb21lLWNvbXBvbmVudCcpOwogICAgICAgICAg
ICAgICAgIGV4cGVjdChpbnN0YW5jZS5lbGVtZW50KCkpLnRvQmVBKGNvbnRleHQuZ2xvYmFsLkhU
TUxFbGVtZW50KTsKQEAgLTU5LDcgKzU5LDcgQEAgZGVzY3JpYmUoJ0NvbXBvbmVudEJhc2UnLCBm
dW5jdGlvbigpIHsKICAgICAgICAgfSk7CiAKICAgICAgICAgaXQoJ211c3QgcmV0dXJuIGFuIGVs
ZW1lbnQgd2hvc2UgY29tcG9uZW50KCkgbWF0Y2hlcyB0aGUgY29tcG9uZW50JywgKCkgPT4gewot
ICAgICAgICAgICAgcmV0dXJuIG5ldyBCcm93c2luZ0NvbnRleHQoKS5pbXBvcnRTY3JpcHQoJy4u
L3B1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4oKENv
bXBvbmVudEJhc2UpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQnJvd3NpbmdDb250ZXh0
KCkuaW1wb3J0U2NyaXB0KCdjb21wb25lbnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRo
ZW4oKENvbXBvbmVudEJhc2UpID0+IHsKICAgICAgICAgICAgICAgICBjbGFzcyBTb21lQ29tcG9u
ZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7IH0KICAgICAgICAgICAgICAgICBsZXQgaW5zdGFu
Y2UgPSBuZXcgU29tZUNvbXBvbmVudCgnc29tZS1jb21wb25lbnQnKTsKICAgICAgICAgICAgICAg
ICBleHBlY3QoaW5zdGFuY2UuZWxlbWVudCgpLmNvbXBvbmVudCgpKS50b0JlKGluc3RhbmNlKTsK
QEAgLTg5LDYgKzg5LDE4NyBAQCBkZXNjcmliZSgnQ29tcG9uZW50QmFzZScsIGZ1bmN0aW9uKCkg
ewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAgIGRlc2NyaWJlKCdlbnF1ZXVlVG9SZW5kZXIo
KScsICgpID0+IHsKKyAgICAgICAgaXQoJ211c3Qgbm90IGltbWVkaWF0ZWx5IGNhbGwgcmVuZGVy
KCknLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1wb3J0U2NyaXB0cyhbJ2luc3Ry
dW1lbnRhdGlvbi5qcycsICdjb21wb25lbnRzL2Jhc2UuanMnXSwgJ0NvbXBvbmVudEJhc2UnKS50
aGVuKChDb21wb25lbnRCYXNlKSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWwu
cmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKCkgPT4ge30KKworICAgICAgICAgICAgICAgIGxldCBy
ZW5kZXJDYWxsQ291bnQgPSAwOworICAgICAgICAgICAgICAgIGNvbnN0IFNvbWVDb21wb25lbnQg
PSBjbGFzcyBleHRlbmRzIENvbXBvbmVudEJhc2UgeworICAgICAgICAgICAgICAgICAgICByZW5k
ZXIoKSB7IHJlbmRlckNhbGxDb3VudCsrOyB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIENvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnc29tZS1jb21wb25lbnQnLCBTb21l
Q29tcG9uZW50KTsKKworICAgICAgICAgICAgICAgIChuZXcgU29tZUNvbXBvbmVudCkuZW5xdWV1
ZVRvUmVuZGVyKCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxDb3VudCkudG9C
ZSgwKTsKKworICAgICAgICAgICAgICAgIChuZXcgU29tZUNvbXBvbmVudCkuZW5xdWV1ZVRvUmVu
ZGVyKCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxDb3VudCkudG9CZSgwKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnbXVzdCByZXF1ZXN0
IGFuIGFuaW1hdGlvbiBmcmFtZSBleGFjdGx5IG9uY2UnLCAoKSA9PiB7CisgICAgICAgICAgICBj
b25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJu
IGNvbnRleHQuaW1wb3J0U2NyaXB0cyhbJ2luc3RydW1lbnRhdGlvbi5qcycsICdjb21wb25lbnRz
L2Jhc2UuanMnXSwgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7Cisg
ICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50ID0gMDsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0Lmdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKSA9PiB7
IHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50Kys7IH0KKworICAgICAgICAgICAgICAgIGNvbnN0
IFNvbWVDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIENvbXBvbmVudEJhc2UgeyB9CisgICAgICAg
ICAgICAgICAgQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdzb21lLWNvbXBvbmVudCcsIFNv
bWVDb21wb25lbnQpOworCisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RBbmltYXRpb25G
cmFtZUNvdW50KS50b0JlKDApOworICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IG5ldyBT
b21lQ29tcG9uZW50OworICAgICAgICAgICAgICAgIGluc3RhbmNlLmVucXVldWVUb1JlbmRlcigp
OworICAgICAgICAgICAgICAgIGV4cGVjdChyZXF1ZXN0QW5pbWF0aW9uRnJhbWVDb3VudCkudG9C
ZSgxKTsKKworICAgICAgICAgICAgICAgIGluc3RhbmNlLmVucXVldWVUb1JlbmRlcigpOworICAg
ICAgICAgICAgICAgIGV4cGVjdChyZXF1ZXN0QW5pbWF0aW9uRnJhbWVDb3VudCkudG9CZSgxKTsK
KworICAgICAgICAgICAgICAgIChuZXcgU29tZUNvbXBvbmVudCkuZW5xdWV1ZVRvUmVuZGVyKCk7
CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50KS50b0Jl
KDEpOworCisgICAgICAgICAgICAgICAgY29uc3QgQW5vdGhlckNvbXBvbmVudCA9IGNsYXNzIGV4
dGVuZHMgQ29tcG9uZW50QmFzZSB7IH0KKyAgICAgICAgICAgICAgICBDb21wb25lbnRCYXNlLmRl
ZmluZUVsZW1lbnQoJ2Fub3RoZXItY29tcG9uZW50JywgQW5vdGhlckNvbXBvbmVudCk7CisgICAg
ICAgICAgICAgICAgKG5ldyBBbm90aGVyQ29tcG9uZW50KS5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QocmVxdWVzdEFuaW1hdGlvbkZyYW1lQ291bnQpLnRvQmUoMSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ211c3QgaW52b2tl
IHJlbmRlcigpIHdoZW4gdGhlIGNhbGxiYWNrIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZSBpcyBj
YWxsZWQnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1wb3J0U2NyaXB0cyhbJ2lu
c3RydW1lbnRhdGlvbi5qcycsICdjb21wb25lbnRzL2Jhc2UuanMnXSwgJ0NvbXBvbmVudEJhc2Un
KS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNr
ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9u
RnJhbWUgPSAobmV3Q2FsbGJhY2spID0+IHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNh
bGxiYWNrKS50b0JlKG51bGwpOworICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3Q2FsbGJh
Y2spLnRvTm90QmUobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gbmV3Q2Fs
bGJhY2s7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGV0IHJlbmRlckNh
bGxzID0gW107CisgICAgICAgICAgICAgICAgY29uc3QgU29tZUNvbXBvbmVudCA9IGNsYXNzIGV4
dGVuZHMgQ29tcG9uZW50QmFzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckNhbGxzLnB1c2godGhpcyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ29tcG9uZW50
QmFzZS5kZWZpbmVFbGVtZW50KCdzb21lLWNvbXBvbmVudCcsIFNvbWVDb21wb25lbnQpOworCisg
ICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxzLmxlbmd0aCkudG9CZSgwKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTb21lQ29tcG9uZW50OworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgICAgIGluc3Rh
bmNlLmVucXVldWVUb1JlbmRlcigpOworCisgICAgICAgICAgICAgICAgY29uc3QgYW5vdGhlcklu
c3RhbmNlID0gbmV3IFNvbWVDb21wb25lbnQ7CisgICAgICAgICAgICAgICAgYW5vdGhlckluc3Rh
bmNlLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgICAgIGV4cGVjdChyZW5kZXJDYWxs
cy5sZW5ndGgpLnRvQmUoMCk7CisKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworCisgICAg
ICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxzLmxlbmd0aCkudG9CZSgyKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3QocmVuZGVyQ2FsbHNbMF0pLnRvQmUoaW5zdGFuY2UpOworICAgICAgICAg
ICAgICAgIGV4cGVjdChyZW5kZXJDYWxsc1sxXSkudG9CZShhbm90aGVySW5zdGFuY2UpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdtdXN0IGltbWVkaWF0ZWx5
IGludm9rZSByZW5kZXIoKSBvbiBhIGNvbXBvbmVudCBlbnF1ZXVlZCBpbnNpZGUgYW5vdGhlciBy
ZW5kZXIoKSBjYWxsJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBC
cm93c2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlw
dHMoWydpbnN0cnVtZW50YXRpb24uanMnLCAnY29tcG9uZW50cy9iYXNlLmpzJ10sICdDb21wb25l
bnRCYXNlJykudGhlbigoQ29tcG9uZW50QmFzZSkgPT4geworICAgICAgICAgICAgICAgIGxldCBj
YWxsYmFjayA9IG51bGw7CisgICAgICAgICAgICAgICAgY29udGV4dC5nbG9iYWwucmVxdWVzdEFu
aW1hdGlvbkZyYW1lID0gKG5ld0NhbGxiYWNrKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGV4
cGVjdChjYWxsYmFjaykudG9CZShudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5l
d0NhbGxiYWNrKS50b05vdEJlKG51bGwpOworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9
IG5ld0NhbGxiYWNrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxldCBy
ZW5kZXJDYWxscyA9IFtdOworICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZVRvRW5xdWV1ZSA9
IG51bGw7CisgICAgICAgICAgICAgICAgY29uc3QgU29tZUNvbXBvbmVudCA9IGNsYXNzIGV4dGVu
ZHMgQ29tcG9uZW50QmFzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlckNhbGxzLnB1c2godGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5zdGFuY2VUb0VucXVldWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdGFuY2VUb0VucXVldWUuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0YW5jZVRvRW5xdWV1ZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ29tcG9uZW50QmFzZS5kZWZp
bmVFbGVtZW50KCdzb21lLWNvbXBvbmVudCcsIFNvbWVDb21wb25lbnQpOworCisgICAgICAgICAg
ICAgICAgZXhwZWN0KHJlbmRlckNhbGxzLmxlbmd0aCkudG9CZSgwKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTb21lQ29tcG9uZW50OworICAgICAgICAgICAgICAgIGNv
bnN0IGFub3RoZXJJbnN0YW5jZSA9IG5ldyBTb21lQ29tcG9uZW50OworICAgICAgICAgICAgICAg
IGluc3RhbmNlLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgICAgIGluc3RhbmNlVG9F
bnF1ZXVlID0gYW5vdGhlckluc3RhbmNlOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgIGV4cGVjdChy
ZW5kZXJDYWxscy5sZW5ndGgpLnRvQmUoMik7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRl
ckNhbGxzWzBdKS50b0JlKGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVuZGVy
Q2FsbHNbMV0pLnRvQmUoYW5vdGhlckluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICByZW5kZXJD
YWxscyA9IFtdOworCisgICAgICAgICAgICAgICAgaW5zdGFuY2UuZW5xdWV1ZVRvUmVuZGVyKCk7
CisgICAgICAgICAgICAgICAgYW5vdGhlckluc3RhbmNlLmVucXVldWVUb1JlbmRlcigpOworICAg
ICAgICAgICAgICAgIGluc3RhbmNlVG9FbnF1ZXVlID0gaW5zdGFuY2U7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVuZGVyQ2FsbHMubGVuZ3Ro
KS50b0JlKDMpOworICAgICAgICAgICAgICAgIGV4cGVjdChyZW5kZXJDYWxsc1swXSkudG9CZShp
bnN0YW5jZSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxzWzFdKS50b0JlKGFu
b3RoZXJJbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNhbGxzWzJdKS50
b0JlKGluc3RhbmNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBp
dCgnbXVzdCByZXF1ZXN0IGEgbmV3IGFuaW1hdGlvbiBmcmFtZSBvbmNlIGl0IGV4aXRlZCB0aGUg
Y2FsbGJhY2sgZnJvbSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLCAoKSA9PiB7CisgICAgICAgICAg
ICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQuaW1wb3J0U2NyaXB0cyhbJ2luc3RydW1lbnRhdGlvbi5qcycsICdjb21wb25l
bnRzL2Jhc2UuanMnXSwgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7
CisgICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50ID0gMDsKKyAg
ICAgICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChuZXdDYWxsYmFjaykgPT4geworICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvQmUobnVsbCk7CisgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdChuZXdDYWxsYmFjaykudG9Ob3RCZShudWxsKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sgPSBuZXdDYWxsYmFjazsKKyAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBsZXQgcmVuZGVyQ2FsbHMgPSBbXTsKKyAgICAgICAgICAgICAgICBjb25zdCBTb21l
Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyKCkgeyByZW5kZXJDYWxscy5wdXNoKHRoaXMpOyB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIENvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnc29tZS1j
b21wb25lbnQnLCBTb21lQ29tcG9uZW50KTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFNvbWVDb21wb25lbnQ7CisgICAgICAgICAgICAgICAgY29uc3QgYW5vdGhlcklu
c3RhbmNlID0gbmV3IFNvbWVDb21wb25lbnQ7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVl
c3RBbmltYXRpb25GcmFtZUNvdW50KS50b0JlKDApOworCisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RBbmlt
YXRpb25GcmFtZUNvdW50KS50b0JlKDEpOworICAgICAgICAgICAgICAgIGFub3RoZXJJbnN0YW5j
ZS5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVxdWVzdEFuaW1h
dGlvbkZyYW1lQ291bnQpLnRvQmUoMSk7CisKKyAgICAgICAgICAgICAgICBleHBlY3QocmVuZGVy
Q2FsbHMubGVuZ3RoKS50b0JlKDApOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgIGV4cGVjdChyZW5k
ZXJDYWxscy5sZW5ndGgpLnRvQmUoMik7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlbmRlckNh
bGxzWzBdKS50b0JlKGluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVuZGVyQ2Fs
bHNbMV0pLnRvQmUoYW5vdGhlckluc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ291bnQpLnRvQmUoMSk7CisKKyAgICAgICAgICAgICAgICBhbm90
aGVySW5zdGFuY2UuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJl
cXVlc3RBbmltYXRpb25GcmFtZUNvdW50KS50b0JlKDIpOworICAgICAgICAgICAgICAgIGluc3Rh
bmNlLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgICAgIGV4cGVjdChyZXF1ZXN0QW5p
bWF0aW9uRnJhbWVDb3VudCkudG9CZSgyKTsKKworICAgICAgICAgICAgICAgIGV4cGVjdChyZW5k
ZXJDYWxscy5sZW5ndGgpLnRvQmUoMik7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IG51bGw7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJl
bmRlckNhbGxzLmxlbmd0aCkudG9CZSg0KTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVuZGVy
Q2FsbHNbMF0pLnRvQmUoaW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGV4cGVjdChyZW5kZXJD
YWxsc1sxXSkudG9CZShhbm90aGVySW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGV4cGVjdChy
ZW5kZXJDYWxsc1syXSkudG9CZShhbm90aGVySW5zdGFuY2UpOworICAgICAgICAgICAgICAgIGV4
cGVjdChyZW5kZXJDYWxsc1szXSkudG9CZShpbnN0YW5jZSk7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50KS50b0JlKDIpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworCisgICAgfSk7CisKICAgICBkZXNjcmliZSgncmVuZGVyKCknLCAoKSA9
PiB7CiAgICAgICAgIGl0KCdtdXN0IGNyZWF0ZSBzaGFkb3cgdHJlZScsICgpID0+IHsKICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVUZXN0VG9DaGVja0V4aXN0ZW5jZU9mU2hhZG93VHJlZSgoaW5z
dGFuY2UsIGhhc1NoYWRvd1RyZWUpID0+IHsKQEAgLTEyMyw3ICszMDQsNyBAQCBkZXNjcmliZSgn
Q29tcG9uZW50QmFzZScsIGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGl0KCdtdXN0IGRlZmluZSBh
IGN1c3RvbSBlbGVtZW50IHdpdGggYSBjbGFzcyBvZiBhbiBhcHByb3ByaWF0ZSBuYW1lJywgKCkg
PT4gewogICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsK
LSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlwdCgnLi4vcHVibGljL3YzL2Nv
bXBvbmVudHMvYmFzZS5qcycsICdDb21wb25lbnRCYXNlJykudGhlbigoQ29tcG9uZW50QmFzZSkg
PT4geworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1wb3J0U2NyaXB0KCdjb21wb25lbnRz
L2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4oKENvbXBvbmVudEJhc2UpID0+IHsKICAg
ICAgICAgICAgICAgICBjbGFzcyBTb21lQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7
IH0KICAgICAgICAgICAgICAgICBDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ3NvbWUtY29t
cG9uZW50JywgU29tZUNvbXBvbmVudCk7CiAKQEAgLTEzNSw3ICszMTYsNyBAQCBkZXNjcmliZSgn
Q29tcG9uZW50QmFzZScsIGZ1bmN0aW9uKCkgewogCiAgICAgICAgIGl0KCdtdXN0IGRlZmluZSBh
IGN1c3RvbSBlbGVtZW50IHRoYXQgY2FuIGJlIGluc3RhbnRpYXRlZCB2aWEgZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCcsICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJv
d3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbXBvcnRTY3JpcHQo
Jy4uL3B1YmxpYy92My9jb21wb25lbnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4o
KENvbXBvbmVudEJhc2UpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNj
cmlwdCgnY29tcG9uZW50cy9iYXNlLmpzJywgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25l
bnRCYXNlKSA9PiB7CiAgICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgICAg
ICAgICAgICAgIGNsYXNzIFNvbWVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAg
ICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7CkBAIC0xNTgsNyArMzM5LDcgQEAgZGVz
Y3JpYmUoJ0NvbXBvbmVudEJhc2UnLCBmdW5jdGlvbigpIHsKIAogICAgICAgICBpdCgnbXVzdCBk
ZWZpbmUgYSBjdXN0b20gZWxlbWVudCB0aGF0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdmlhIG5ldycs
ICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0
KCk7Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbXBvcnRTY3JpcHQoJy4uL3B1YmxpYy92
My9jb21wb25lbnRzL2Jhc2UuanMnLCAnQ29tcG9uZW50QmFzZScpLnRoZW4oKENvbXBvbmVudEJh
c2UpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlwdCgnY29tcG9u
ZW50cy9iYXNlLmpzJywgJ0NvbXBvbmVudEJhc2UnKS50aGVuKChDb21wb25lbnRCYXNlKSA9PiB7
CiAgICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlcyA9IFtdOwogICAgICAgICAgICAgICAgIGNs
YXNzIFNvbWVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3RydWN0b3IoKSB7CkBAIC0xNzksNiArMzYwLDUyIEBAIGRlc2NyaWJlKCdDb21w
b25lbnRCYXNlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAK
KyAgICAgICAgaXQoJ211c3QgZW5xdWV1ZSBhIGNvbm5lY3RlZCBjb21wb25lbnQgdG8gcmVuZGVy
IHVwb24gYSByZXNpemUgZXZlbnQgaWYgZW5xdWV1ZVRvUmVuZGVyT25SZXNpemUgaXMgdHJ1ZScs
ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbXBvcnRTY3JpcHRzKFsnaW5zdHJ1bWVu
dGF0aW9uLmpzJywgJ2NvbXBvbmVudHMvYmFzZS5qcyddLCAnQ29tcG9uZW50QmFzZScpLnRoZW4o
KENvbXBvbmVudEJhc2UpID0+IHsKKyAgICAgICAgICAgICAgICBjbGFzcyBTb21lQ29tcG9uZW50
IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXQg
ZW5xdWV1ZVRvUmVuZGVyT25SZXNpemUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIENvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnc29tZS1j
b21wb25lbnQnLCBTb21lQ29tcG9uZW50KTsKKworICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0
QW5pbWF0aW9uRnJhbWVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0g
bnVsbDsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWUgPSAobmV3Q2FsbGJhY2spID0+IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBu
ZXdDYWxsYmFjazsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQ291
bnQrKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleHBlY3QocmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ291bnQpLnRvQmUoMCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW5z
dGFuY2UgPSBuZXcgU29tZUNvbXBvbmVudDsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lmdsb2Jh
bC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpOworICAgICAgICAgICAgICAgIGNv
bnRleHQuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnN0YW5jZS5lbGVtZW50KCkpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNp
emUnKSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RBbmltYXRpb25GcmFtZUNvdW50
KS50b0JlKDEpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdt
dXN0IG5vdCBlbnF1ZXVlIGEgZGlzY29ubmVjdGVkIGNvbXBvbmVudCB0byByZW5kZXIgdXBvbiBh
IHJlc2l6ZSBldmVudCBpZiBlbnF1ZXVlVG9SZW5kZXJPblJlc2l6ZSBpcyB0cnVlJywgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlwdHMoWydpbnN0cnVtZW50YXRpb24u
anMnLCAnY29tcG9uZW50cy9iYXNlLmpzJ10sICdDb21wb25lbnRCYXNlJykudGhlbigoQ29tcG9u
ZW50QmFzZSkgPT4geworICAgICAgICAgICAgICAgIGNsYXNzIFNvbWVDb21wb25lbnQgZXh0ZW5k
cyBDb21wb25lbnRCYXNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldCBlbnF1ZXVl
VG9SZW5kZXJPblJlc2l6ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdzb21lLWNvbXBvbmVu
dCcsIFNvbWVDb21wb25lbnQpOworCisgICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RBbmltYXRp
b25GcmFtZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSBudWxsOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChu
ZXdDYWxsYmFjaykgPT4geworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG5ld0NhbGxi
YWNrOworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVDb3VudCsrOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3
IFNvbWVDb21wb25lbnQ7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RBbmltYXRpb25G
cmFtZUNvdW50KS50b0JlKDApOworICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsLmRpc3Bh
dGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJl
cXVlc3RBbmltYXRpb25GcmFtZUNvdW50KS50b0JlKDApOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworCiAgICAgfSk7CiAKIH0pOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L2Jyb3dzZXItdGVzdHMvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbmRleC5odG1sCShyZXZpc2lvbiAyMTA4NDEpCisrKyBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbmRleC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxNyArMzYsMjAgQEAgY2xhc3MgQnJvd3NpbmdDb250ZXh0IHsKICAgICAg
ICAgdGhpcy5kb2N1bWVudCA9IHRoaXMuX2lmcmFtZS5jb250ZW50RG9jdW1lbnQ7CiAgICAgfQog
Ci0gICAgaW1wb3J0U2NyaXB0KHBhdGgsIC4uLnN5bWJvbExpc3QpCisgICAgaW1wb3J0U2NyaXB0
cyhwYXRoTGlzdCwgLi4uc3ltYm9sTGlzdCkKICAgICB7CiAgICAgICAgIGNvbnN0IGRvYyA9IHRo
aXMuX2lmcmFtZS5jb250ZW50RG9jdW1lbnQ7CiAgICAgICAgIGNvbnN0IGdsb2JhbCA9IHRoaXMu
X2lmcmFtZS5jb250ZW50V2luZG93OwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29s
dmUsIHJlamVjdCkgPT4gewotICAgICAgICAgICAgbGV0IHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVt
ZW50KCdzY3JpcHQnKTsKLSAgICAgICAgICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3In
LCByZWplY3QpOwotICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHBhdGg7Ci0gICAgICAgICAgICBk
b2MuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOwotICAgICAgICB9KS50aGVuKCgpID0+IHsKKwor
ICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGF0aExpc3QubWFwKChwYXRoKSA9PiB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAg
ICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisgICAg
ICAgICAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZXNvbHZlKTsKKyAg
ICAgICAgICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWplY3QpOwor
ICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSAnLi4vcHVibGljL3YzLycgKyBwYXRoOworICAg
ICAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSkpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0g
ZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgICAgICAgc2NyaXB0LnRleHRDb250
ZW50ID0gYHdpbmRvdy5pbXBvcnRlZFN5bWJvbHMgPSBbJHtzeW1ib2xMaXN0LmpvaW4oJywgJyl9
XTtgOwogICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKQEAgLTU5LDM1
ICs2MiwxNSBAQCBjbGFzcyBCcm93c2luZ0NvbnRleHQgewogICAgICAgICB9KTsKICAgICB9CiAK
LSAgICBzdGF0aWMgY2xlYW51cCgpCisgICAgaW1wb3J0U2NyaXB0KHBhdGgsIC4uLnN5bWJvbHMp
CiAgICAgewotICAgICAgICBCcm93c2luZ0NvbnRleHQuX2lmcmFtZXMuZm9yRWFjaCgoaWZyYW1l
KSA9PiB7IGlmcmFtZS5yZW1vdmUoKTsgfSk7Ci0gICAgICAgIEJyb3dzaW5nQ29udGV4dC5faWZy
YW1lcyA9IFtdOworICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRTY3JpcHRzKFtwYXRoXSwgLi4u
c3ltYm9scyk7CiAgICAgfQogCi0gICAgc3RhdGljIGNyZWF0ZVdpdGhTY3JpcHRzKHNjcmlwdExp
c3QpCisgICAgc3RhdGljIGNsZWFudXAoKQogICAgIHsKLSAgICAgICAgbGV0IGlmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZSk7Ci0gICAgICAgIGNvbnN0IGRvYyA9IGlmcmFtZS5jb250ZW50RG9j
dW1lbnQ7Ci0KLSAgICAgICAgbGV0IHN5bWJvbExpc3QgPSBbXTsKLSAgICAgICAgcmV0dXJuIFBy
b21pc2UuYWxsKHNjcmlwdExpc3QubWFwKChlbnRyeSkgPT4gewotICAgICAgICAgICAgbGV0IFtw
YXRoLCAuLi5zeW1ib2xzXSA9IGVudHJ5OwotICAgICAgICAgICAgc3ltYm9sTGlzdCA9IHN5bWJv
bExpc3QuY29uY2F0KHN5bWJvbHMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChy
ZXNvbHZlLCByZWplY3QpID0+IHsKLSAgICAgICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jLmNy
ZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAgICAgICAgICAgICAgIHNjcmlwdC5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgcmVzb2x2ZSk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFkZEV2ZW50
TGlzdGVuZXIoJ2Vycm9yJywgcmVqZWN0KTsKLSAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0g
cGF0aDsKLSAgICAgICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0pKS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0
IHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKLSAgICAgICAgICAgIHNjcmlw
dC50ZXh0Q29udGVudCA9IGB2YXIgc3ltYm9scyA9IHsgJHtzeW1ib2xMaXN0LmpvaW4oJywgJyl9
IH07YDsKLSAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gaWZyYW1lLmNvbnRlbnRXaW5kb3c7Ci0gICAgICAgIH0pOworICAgICAgICBC
cm93c2luZ0NvbnRleHQuX2lmcmFtZXMuZm9yRWFjaCgoaWZyYW1lKSA9PiB7IGlmcmFtZS5yZW1v
dmUoKTsgfSk7CisgICAgICAgIEJyb3dzaW5nQ29udGV4dC5faWZyYW1lcyA9IFtdOwogICAgIH0K
IH0KIEJyb3dzaW5nQ29udGV4dC5faWZyYW1lcyA9IFtdOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9pbnN0cnVtZW50YXRpb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbnN0cnVtZW50YXRpb24uanMJKHJldmlz
aW9uIDIxMDg0MSkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5zdHJ1
bWVudGF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTMgQEAgY2xhc3MgSW5z
dHJ1bWVudGF0aW9uIHsKICAgICAgICAgaWYgKCF0aGlzLl9zdGF0aXN0aWNzKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB2YXIgbWF4S2V5TGVuZ3RoID0gMDsKLSAgICAgICAgZm9yICh2
YXIga2V5IGluIHRoaXMuX3N0YXRpc3RpY3MpCisgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlz
Ll9zdGF0aXN0aWNzKQogICAgICAgICAgICAgbWF4S2V5TGVuZ3RoID0gTWF0aC5tYXgoa2V5Lmxl
bmd0aCwgbWF4S2V5TGVuZ3RoKTsKIAotICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fc3Rh
dGlzdGljcykgewotICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zdGF0aXN0aWNzW2tleV07
Ci0gICAgICAgICAgICB2YXIga2V5U3VmZml4ID0gJyAnLnJlcGVhdChtYXhLZXlMZW5ndGggLSBr
ZXkubGVuZ3RoKTsKLSAgICAgICAgICAgIHZhciBsb2cgPSBgJHtrZXl9JHtrZXlTdWZmaXh9OiBg
OworICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5fc3RhdGlzdGljcyku
c29ydCgpKSB7CisgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc3RhdGlzdGljc1trZXld
OworICAgICAgICAgICAgY29uc3Qga2V5U3VmZml4ID0gJyAnLnJlcGVhdChtYXhLZXlMZW5ndGgg
LSBrZXkubGVuZ3RoKTsKKyAgICAgICAgICAgIGxldCBsb2cgPSBgJHtrZXl9JHtrZXlTdWZmaXh9
OiBgOwogICAgICAgICAgICAgbG9nICs9IGAgbWVhbiA9ICR7aXRlbS5tZWFuLnRvRml4ZWQoMil9
ICR7aXRlbS51bml0fWA7CiAgICAgICAgICAgICBpZiAoaXRlbS51bml0ID09ICdtcycpCiAgICAg
ICAgICAgICAgICAgbG9nICs9IGAgdG90YWwgPSAke2l0ZW0udmFsdWUudG9GaXhlZCgyKX0gJHtp
dGVtLnVuaXR9YDsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9hbmFseXNpcy1yZXN1bHRzLXZpZXdlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvYW5hbHlzaXMtcmVzdWx0cy12
aWV3ZXIuanMJKHJldmlzaW9uIDIxMDg0MSkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9hbmFseXNpcy1yZXN1bHRzLXZpZXdlci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIGNsYXNzIEFuYWx5c2lzUmVzdWx0c1ZpZXdlciBleHRl
bmRzIFJlc3UKICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4QmVmb3JlU3RhcnQgKyAxOyBpIDwg
aW5kZXhBZnRlckVuZDsgaSArPSBpbmNyZW1lbnQpCiAgICAgICAgICAgICB0aGlzLl9leHBhbmRl
ZFBvaW50cy5hZGQoc2VyaWVzLmZpbmRQb2ludEJ5SW5kZXgoaSkpOwogICAgICAgICB0aGlzLl9z
aG91bGRSZW5kZXJUYWJsZSA9IHRydWU7Ci0gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7
CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgfQogCiAgICAgc3RhdGljIGh0
bWxUZW1wbGF0ZSgpCkluZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2Nv
bXBvbmVudHMvYmFyLWdyYXBoLWdyb3VwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9iYXItZ3JhcGgtZ3JvdXAuanMJKHJldmlz
aW9uIDIxMDg0MSkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9u
ZW50cy9iYXItZ3JhcGgtZ3JvdXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
Y2xhc3MgQmFyR3JhcGhHcm91cCB7CiAgICAgICAgICAgICB2YXIgc3RhcnQgPSBtaW4gLSAocmFu
Z2UgLSBkaWZmKSAvIDI7CiAKICAgICAgICAgICAgIGVudHJ5LmJhci51cGRhdGUoKHZhbHVlIC0g
c3RhcnQpIC8gcmFuZ2UsIGZvcm1hdHRlZFZhbHVlKTsKLSAgICAgICAgICAgIGVudHJ5LmJhci51
cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIGVudHJ5LmJhci5lbnF1ZXVlVG9SZW5kZXIo
KTsKICAgICAgICAgfQogCiAgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1l
KCdCYXJHcmFwaEdyb3VwJywgJ3VwZGF0ZUdyb3VwUmVuZGVyaW5nJyk7CkluZGV4OiBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvYmFzZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvYmFzZS5q
cwkocmV2aXNpb24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL2Jhc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDkgQEAgY2xh
c3MgQ29tcG9uZW50QmFzZSB7CiAKICAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CiAg
ICAgICAgIHRoaXMuX3NoYWRvdyA9IG51bGw7CisKKyAgICAgICAgaWYgKCF3aW5kb3cuY3VzdG9t
RWxlbWVudHMgJiYgbmV3LnRhcmdldC5lbnF1ZXVlVG9SZW5kZXJPblJlc2l6ZSkKKyAgICAgICAg
ICAgIENvbXBvbmVudEJhc2UuX2Nvbm5lY3RlZENvbXBvbmVudFRvUmVuZGVyT25SZXNpemUodGhp
cyk7CiAgICAgfQogCiAgICAgZWxlbWVudCgpIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7IH0KQEAg
LTI2LDEzICsyOSw1NCBAQCBjbGFzcyBDb21wb25lbnRCYXNlIHsKIAogICAgIHJlbmRlcigpIHsg
dGhpcy5fZW5zdXJlU2hhZG93VHJlZSgpOyB9CiAKLSAgICB1cGRhdGVSZW5kZXJpbmcoKQorICAg
IGVucXVldWVUb1JlbmRlcigpCiAgICAgewogICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRN
ZWFzdXJpbmdUaW1lKCdDb21wb25lbnRCYXNlJywgJ3VwZGF0ZVJlbmRlcmluZycpOwotICAgICAg
ICB0aGlzLnJlbmRlcigpOworCisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fY29tcG9uZW50
c1RvUmVuZGVyKSB7CisgICAgICAgICAgICBDb21wb25lbnRCYXNlLl9jb21wb25lbnRzVG9SZW5k
ZXIgPSBuZXcgU2V0OworICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IENv
bXBvbmVudEJhc2UucmVuZGVyaW5nVGltZXJEaWRGaXJlKCkpOworICAgICAgICB9CisgICAgICAg
IENvbXBvbmVudEJhc2UuX2NvbXBvbmVudHNUb1JlbmRlci5hZGQodGhpcyk7CisKICAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0NvbXBvbmVudEJhc2UnLCAndXBkYXRl
UmVuZGVyaW5nJyk7CiAgICAgfQogCisgICAgc3RhdGljIHJlbmRlcmluZ1RpbWVyRGlkRmlyZSgp
CisgICAgeworICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdDb21w
b25lbnRCYXNlJywgJ3JlbmRlcmluZ1RpbWVyRGlkRmlyZScpOworCisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXQgPSBbLi4uQ29tcG9uZW50QmFzZS5fY29tcG9uZW50
c1RvUmVuZGVyXTsKKyAgICAgICAgICAgIENvbXBvbmVudEJhc2UuX2NvbXBvbmVudHNUb1JlbmRl
ci5jbGVhcigpOworICAgICAgICAgICAgZm9yIChsZXQgY29tcG9uZW50IG9mIGN1cnJlbnRTZXQp
IHsKKyAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdD
b21wb25lbnRCYXNlJywgJ3JlbmRlcmluZ1RpbWVyRGlkRmlyZS5yZW5kZXInKTsKKyAgICAgICAg
ICAgICAgICBjb21wb25lbnQucmVuZGVyKCk7CisgICAgICAgICAgICAgICAgSW5zdHJ1bWVudGF0
aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0NvbXBvbmVudEJhc2UnLCAncmVuZGVyaW5nVGltZXJEaWRG
aXJlLnJlbmRlcicpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChDb21wb25lbnRC
YXNlLl9jb21wb25lbnRzVG9SZW5kZXIuc2l6ZSk7CisgICAgICAgIENvbXBvbmVudEJhc2UuX2Nv
bXBvbmVudHNUb1JlbmRlciA9IG51bGw7CisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1l
YXN1cmluZ1RpbWUoJ0NvbXBvbmVudEJhc2UnLCAncmVuZGVyaW5nVGltZXJEaWRGaXJlJyk7Cisg
ICAgfQorCisgICAgc3RhdGljIF9jb25uZWN0ZWRDb21wb25lbnRUb1JlbmRlck9uUmVzaXplKGNv
bXBvbmVudCkKKyAgICB7CisgICAgICAgIGlmICghQ29tcG9uZW50QmFzZS5fY29tcG9uZW50c1Rv
UmVuZGVyT25SZXNpemUpIHsKKyAgICAgICAgICAgIENvbXBvbmVudEJhc2UuX2NvbXBvbmVudHNU
b1JlbmRlck9uUmVzaXplID0gbmV3IFNldDsKKyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgY29tcG9u
ZW50IG9mIENvbXBvbmVudEJhc2UuX2NvbXBvbmVudHNUb1JlbmRlck9uUmVzaXplKQorICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnQuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICBDb21wb25lbnRCYXNlLl9jb21wb25lbnRzVG9SZW5kZXJP
blJlc2l6ZS5hZGQoY29tcG9uZW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgX2Rpc2Nvbm5lY3Rl
ZENvbXBvbmVudFRvUmVuZGVyT25SZXNpemUoY29tcG9uZW50KQorICAgIHsKKyAgICAgICAgQ29t
cG9uZW50QmFzZS5fY29tcG9uZW50c1RvUmVuZGVyT25SZXNpemUuZGVsZXRlKGNvbXBvbmVudCk7
CisgICAgfQorCiAgICAgcmVuZGVyUmVwbGFjZShlbGVtZW50LCBjb250ZW50KSB7IENvbXBvbmVu
dEJhc2UucmVuZGVyUmVwbGFjZShlbGVtZW50LCBjb250ZW50KTsgfQogCiAgICAgc3RhdGljIHJl
bmRlclJlcGxhY2UoZWxlbWVudCwgY29udGVudCkKQEAgLTk0LDYgKzEzOCw4IEBAIGNsYXNzIENv
bXBvbmVudEJhc2UgewogICAgICAgICBDb21wb25lbnRCYXNlLl9jb21wb25lbnRCeU5hbWUuc2V0
KG5hbWUsIGVsZW1lbnRJbnRlcmZhY2UpOwogICAgICAgICBDb21wb25lbnRCYXNlLl9jb21wb25l
bnRCeUNsYXNzLnNldChlbGVtZW50SW50ZXJmYWNlLCBuYW1lKTsKIAorICAgICAgICBjb25zdCBl
bnF1ZXVlVG9SZW5kZXJPblJlc2l6ZSA9IGVsZW1lbnRJbnRlcmZhY2UuZW5xdWV1ZVRvUmVuZGVy
T25SZXNpemU7CisKICAgICAgICAgaWYgKCF3aW5kb3cuY3VzdG9tRWxlbWVudHMpCiAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTExMSw2ICsxNTcsMTggQEAgY2xhc3MgQ29tcG9uZW50QmFzZSB7
CiAgICAgICAgICAgICAgICAgbmV3IGVsZW1lbnRJbnRlcmZhY2UoKTsKICAgICAgICAgICAgICAg
ICBjdXJyZW50bHlDb25zdHJ1Y3RlZC5kZWxldGUoZWxlbWVudEludGVyZmFjZSk7CiAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoZW5xdWV1ZVRvUmVuZGVyT25SZXNpemUpCisgICAgICAgICAg
ICAgICAgICAgIENvbXBvbmVudEJhc2UuX2Nvbm5lY3RlZENvbXBvbmVudFRvUmVuZGVyT25SZXNp
emUodGhpcy5jb21wb25lbnQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpc2Nv
bm5lY3RlZENhbGxiYWNrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5x
dWV1ZVRvUmVuZGVyT25SZXNpemUpCisgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudEJhc2Uu
X2Rpc2Nvbm5lY3RlZENvbXBvbmVudFRvUmVuZGVyT25SZXNpemUodGhpcy5jb21wb25lbnQoKSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBuYW1lRGVzY3JpcHRv
ciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudENsYXNzLCAnbmFtZScp
OwpAQCAtMTkzLDcgKzI1MSw1IEBAIGNsYXNzIENvbXBvbmVudEJhc2UgewogQ29tcG9uZW50QmFz
ZS5fY29tcG9uZW50QnlOYW1lID0gbmV3IE1hcDsKIENvbXBvbmVudEJhc2UuX2NvbXBvbmVudEJ5
Q2xhc3MgPSBuZXcgTWFwOwogQ29tcG9uZW50QmFzZS5fY3VycmVudGx5Q29uc3RydWN0ZWRCeUlu
dGVyZmFjZSA9IG5ldyBNYXA7Ci0KLUNvbXBvbmVudEJhc2UuY3NzID0gU3ltYm9sKCk7Ci1Db21w
b25lbnRCYXNlLmh0bWwgPSBTeW1ib2woKTsKLUNvbXBvbmVudEJhc2UubWFwID0ge307CitDb21w
b25lbnRCYXNlLl9jb21wb25lbnRzVG9SZW5kZXIgPSBudWxsOworQ29tcG9uZW50QmFzZS5fY29t
cG9uZW50c1RvUmVuZGVyT25SZXNpemUgPSBudWxsOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2NoYXJ0LXBhbmUtYmFzZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY2hhcnQt
cGFuZS1iYXNlLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvY2hhcnQtcGFuZS1iYXNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC05NiwxMCArOTYsMTcgQEAgY2xhc3MgQ2hhcnRQYW5lQmFzZSBleHRlbmRzIENvbXBvbmVu
dEJhcwogICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hCeVBsYXRmb3JtQW5kTWV0cmljKHRoaXMu
X3BsYXRmb3JtSWQsIHRoaXMuX21ldHJpY0lkLCBub0NhY2hlKS50aGVuKGZ1bmN0aW9uICh0YXNr
cykgewogICAgICAgICAgICAgc2VsZi5fdGFza3NGb3JBbm5vdGF0aW9ucyA9IHRhc2tzOwogICAg
ICAgICAgICAgc2VsZi5fcmVuZGVyZWRBbm5vdGF0aW9ucyA9IGZhbHNlOwotICAgICAgICAgICAg
c2VsZi51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHNlbGYuZW5xdWV1ZVRvUmVuZGVy
KCk7CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBh
IG1lY2hhbmlzbSB0byBnZXQgbm90aWZpZWQgd2hlbmV2ZXIgdGhlIHNldCBvZiBhbm5vdGF0aW9u
cyBjaGFuZ2UuCisgICAgZGlkVXBkYXRlQW5ub3RhdGlvbnMoKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVuZGVyZWRBbm5vdGF0aW9ucyA9IGZhbHNlOworICAgICAgICB0aGlzLmVucXVldWVUb1Jl
bmRlcigpOworICAgIH0KKwogICAgIHBsYXRmb3JtSWQoKSB7IHJldHVybiB0aGlzLl9wbGF0Zm9y
bUlkOyB9CiAgICAgbWV0cmljSWQoKSB7IHJldHVybiB0aGlzLl9tZXRyaWNJZDsgfQogCkBAIC0x
MzIsNyArMTM5LDcgQEAgY2xhc3MgQ2hhcnRQYW5lQmFzZSBleHRlbmRzIENvbXBvbmVudEJhcwog
ICAgIHsKICAgICAgICAgdGhpcy5fb3ZlcnZpZXdDaGFydC5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
LCB0aGlzKTsKICAgICAgICAgdGhpcy5fbWFpbkNoYXJ0LnNldFNlbGVjdGlvbihudWxsKTsKLSAg
ICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKICAgICB9CiAKICAgICBfaW5kaWNhdG9yRGlkQ2hhbmdlKGluZGljYXRvcklELCBpc0xv
Y2tlZCkKQEAgLTE0OCw3ICsxNTUsNyBAQCBjbGFzcyBDaGFydFBhbmVCYXNlIGV4dGVuZHMgQ29t
cG9uZW50QmFzCiAgICAgX3VwZGF0ZVN0YXR1cygpCiAgICAgewogICAgICAgICB2YXIgcmFuZ2Ug
PSB0aGlzLl9tYWluQ2hhcnRTdGF0dXMudXBkYXRlUmV2aXNpb25MaXN0KCk7Ci0gICAgICAgIGNv
bnN0IHVwZGF0ZVJlbmRlcmluZyA9ICgpID0+IHsgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsgfTsK
KyAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4geyB0aGlzLmVucXVldWVUb1Jl
bmRlcigpOyB9OwogICAgICAgICB0aGlzLl9jb21taXRMb2dWaWV3ZXIudmlldyhyYW5nZS5yZXBv
c2l0b3J5LCByYW5nZS5mcm9tLCByYW5nZS50bykudGhlbih1cGRhdGVSZW5kZXJpbmcpOwogICAg
ICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKICAgICB9CkBAIC0xNjUsNyArMTcyLDcgQEAgY2xhc3Mg
Q2hhcnRQYW5lQmFzZSBleHRlbmRzIENvbXBvbmVudEJhcwogICAgIF9yZXF1ZXN0T3BlbmluZ0Nv
bW1pdFZpZXdlcihyZXBvc2l0b3J5LCBmcm9tLCB0bykKICAgICB7CiAgICAgICAgIHRoaXMuX21h
aW5DaGFydFN0YXR1cy5zZXRDdXJyZW50UmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKLSAgICAgICAg
Y29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4geyB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOyB9
OworICAgICAgICBjb25zdCB1cGRhdGVSZW5kZXJpbmcgPSAoKSA9PiB7IHRoaXMuZW5xdWV1ZVRv
UmVuZGVyKCk7IH07CiAgICAgICAgIHRoaXMuX2NvbW1pdExvZ1ZpZXdlci52aWV3KHJlcG9zaXRv
cnksIGZyb20sIHRvKS50aGVuKHVwZGF0ZVJlbmRlcmluZyk7CiAgICAgICAgIHVwZGF0ZVJlbmRl
cmluZygpOwogICAgIH0KQEAgLTE5MSw3ICsxOTgsNyBAQCBjbGFzcyBDaGFydFBhbmVCYXNlIGV4
dGVuZHMgQ29tcG9uZW50QmFzCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOwogCiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOwpAQCAtMjE3LDEyICsyMjQsMTIgQEAgY2xhc3MgQ2hhcnRQYW5lQmFz
ZSBleHRlbmRzIENvbXBvbmVudEJhcwogICAgICAgICB0aGlzLl9yZW5kZXJBbm5vdGF0aW9ucygp
OwogCiAgICAgICAgIGlmICh0aGlzLl9tYWluQ2hhcnRTdGF0dXMpCi0gICAgICAgICAgICB0aGlz
Ll9tYWluQ2hhcnRTdGF0dXMudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLl9t
YWluQ2hhcnRTdGF0dXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAKICAgICAgICAgdmFyIGJvZHkgPSB0
aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtcGFuZS1ib2R5Jyk7CiAgICAgICAg
IGlmICh0aGlzLl9jb21taXRMb2dWaWV3ZXIgJiYgdGhpcy5fY29tbWl0TG9nVmlld2VyLmN1cnJl
bnRSZXBvc2l0b3J5KCkpIHsKICAgICAgICAgICAgIGJvZHkuY2xhc3NMaXN0LmFkZCgnaGFzLXNl
Y29uZC1zaWRlYmFyJyk7Ci0gICAgICAgICAgICB0aGlzLl9jb21taXRMb2dWaWV3ZXIudXBkYXRl
UmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLl9jb21taXRMb2dWaWV3ZXIuZW5xdWV1ZVRv
UmVuZGVyKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYm9keS5jbGFzc0xpc3QucmVt
b3ZlKCdoYXMtc2Vjb25kLXNpZGViYXInKTsKIApJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL2NvbW1pdC1sb2ctdmlld2VyLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21taXQt
bG9nLXZpZXdlci5qcwkocmV2aXNpb24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL2NvbW1pdC1sb2ctdmlld2VyLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIENvbW1pdExvZ1ZpZXdlciBleHRlbmRzIENvbXBv
bmVudEIKIAogICAgICAgICBpZiAoIXRvKSB7CiAgICAgICAgICAgICB0aGlzLl9mZXRjaGluZ1By
b21pc2UgPSBudWxsOwotICAgICAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAg
ICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKG51bGwpOwogICAgICAgICB9CiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQ29t
bWl0TG9nVmlld2VyIGV4dGVuZHMgQ29tcG9uZW50QgogCiAgICAgICAgIHZhciBzZWxmID0gdGhp
czsKICAgICAgICAgdmFyIHNwaW5uZXJUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgc2VsZi51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHNlbGYuZW5x
dWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0sIDMwMCk7CiAKICAgICAgICAgdGhpcy5fZmV0Y2hp
bmdQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGNvbW1pdHMpIHsKSW5kZXg6IFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1m
b3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
Y29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCShyZXZpc2lvbiAyMTA4
NDEpCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3Vz
dG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qcwkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDcg
QEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIAogICAgICAgICB0aGlz
Ll9yZW5kZXJlZFJlcG9zaXRvcnlsaXN0ID0gbnVsbDsKICAgICAgICAgdGhpcy5fY3VzdG9taXpl
ZCA9IGZhbHNlOwogICAgICAgICB0aGlzLl9uYW1lQ29udHJvbCA9IHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJy5uYW1lJyk7Ci0gICAgICAgIHRoaXMuX25hbWVDb250cm9sLm9uaW5wdXQg
PSAoKSA9PiB7IHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7IH0KKyAgICAgICAgdGhpcy5fbmFtZUNv
bnRyb2wub25pbnB1dCA9ICgpID0+IHsgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsgfQogICAgICAg
ICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdhJykub25jbGljayA9IHRoaXMuX2N1c3Rv
bWl6ZS5iaW5kKHRoaXMpOwogICAgIH0KIApAQCAtMjgsNyArMjgsNyBAQCBjbGFzcyBDdXN0b21p
emFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgCiAgICAgewogICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwogICAgICAgICB0aGlzLl9jdXN0b21pemVkID0gdHJ1ZTsKLSAgICAgICAgdGhp
cy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAg
ICB9CiAKICAgICBfY29tcHV0ZVJvb3RTZXRNYXAoKQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2VkaXRhYmxlLXRleHQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2VkaXRhYmxl
LXRleHQuanMJKHJldmlzaW9uIDIxMDg0MSkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9lZGl0YWJsZS10ZXh0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIGNsYXNzIEVkaXRhYmxlVGV4dCBleHRlbmRzIENvbXBvbmVudEJhc2UKICAg
ICB7CiAgICAgICAgIHRoaXMuX2luRWRpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgdGhpcy5f
dXBkYXRpbmdQcm9taXNlID0gbnVsbDsKLSAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsK
KyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBzdGF0aWMgaHRt
bFRlbXBsYXRlKCkKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvaW50ZXJhY3RpdmUt
dGltZS1zZXJpZXMtY2hhcnQuanMJKHJldmlzaW9uIDIxMDg0MSkKKysrIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1j
aGFydC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDgxLDMgKzQ4MSw1IEBAIGNsYXNzIEludGVyYWN0
aXZlVGltZVNlcmllc0NoYXJ0IGV4dGVuZHMKICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1l
YXN1cmluZ1RpbWUoJ0ludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0JywgJ3JlbmRlckNoYXJ0Q29u
dGVudCcpOwogICAgIH0KIH0KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdpbnRlcmFj
dGl2ZS10aW1lLXNlcmllcy1jaGFydCcsIEludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0KTsKSW5k
ZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9wYW5lLXNl
bGVjdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9wYW5lLXNlbGVjdG9yLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGFuZS1zZWxlY3Rvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIFBhbmVTZWxlY3RvciBl
eHRlbmRzIENvbXBvbmVudEJhc2UKICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTWV0
cmljICYmIGRhdGEudGVzdCgpLm9ubHlDb250YWluc1NpbmdsZU1ldHJpYygpKQogICAgICAgICAg
ICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoLnNwbGljZSh0aGlzLl9jdXJyZW50UGF0aC5sZW5ndGgg
LSAyLCAxKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAg
ICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAogICAgIHNldENhbGxiYWNrKGNh
bGxiYWNrKQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL3RpbWUtc2VyaWVzLWNoYXJ0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy90aW1lLXNlcmllcy1jaGFydC5qcwkocmV2aXNp
b24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL3RpbWUtc2VyaWVzLWNoYXJ0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAog
Y2xhc3MgVGltZVNlcmllc0NoYXJ0IGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgY29uc3Ry
dWN0b3Ioc291cmNlTGlzdCwgb3B0aW9ucykKICAgICB7Ci0gICAgICAgIHN1cGVyKCd0aW1lLXNl
cmllcy1jaGFydCcpOworICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLmVsZW1lbnQoKS5z
dHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgdGhpcy5lbGVtZW50KCkuc3R5bGUucG9z
aXRpb24gPSAncmVsYXRpdmUnOwogICAgICAgICB0aGlzLl9jYW52YXMgPSBudWxsOwpAQCAtMjIs
MTIgKzIyLDYgQEAgY2xhc3MgVGltZVNlcmllc0NoYXJ0IGV4dGVuZHMgQ29tcG9uZW50QgogICAg
ICAgICB0aGlzLl9jb250ZXh0U2NhbGVYID0gMTsKICAgICAgICAgdGhpcy5fY29udGV4dFNjYWxl
WSA9IDE7CiAgICAgICAgIHRoaXMuX3JlbSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKCFUaW1lU2Vy
aWVzQ2hhcnQuX2NoYXJ0TGlzdCkgewotICAgICAgICAgICAgVGltZVNlcmllc0NoYXJ0Ll9jaGFy
dExpc3QgPSBbXTsKLSAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUn
LCBUaW1lU2VyaWVzQ2hhcnQuX3VwZGF0ZUFsbENoYXJ0cy5iaW5kKFRpbWVTZXJpZXNDaGFydCkp
OwotICAgICAgICB9Ci0gICAgICAgIFRpbWVTZXJpZXNDaGFydC5fY2hhcnRMaXN0LnB1c2godGhp
cyk7CiAgICAgfQogCiAgICAgX2Vuc3VyZUNhbnZhcygpCkBAIC00Niw2ICs0MCw3IEBAIGNsYXNz
IFRpbWVTZXJpZXNDaGFydCBleHRlbmRzIENvbXBvbmVudEIKICAgICB9CiAKICAgICBzdGF0aWMg
Y3NzVGVtcGxhdGUoKSB7IHJldHVybiAnJzsgfQorICAgIHN0YXRpYyBnZXQgZW5xdWV1ZVRvUmVu
ZGVyT25SZXNpemUoKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBfY3JlYXRlQ2FudmFzKCkKICAg
ICB7CkBAIC01NywyMiArNTIsNiBAQCBjbGFzcyBUaW1lU2VyaWVzQ2hhcnQgZXh0ZW5kcyBDb21w
b25lbnRCCiAgICAgICAgIFRpbWVTZXJpZXNDaGFydC5fY2hhcnRMaXN0Lm1hcChmdW5jdGlvbiAo
Y2hhcnQpIHsgY2hhcnQucmVuZGVyKCk7IH0pOwogICAgIH0KIAotICAgIGVucXVldWVUb1JlbmRl
cigpCi0gICAgewotICAgICAgICBpZiAoIVRpbWVTZXJpZXNDaGFydC5fY2hhcnRRdWV1ZSkgewot
ICAgICAgICAgICAgVGltZVNlcmllc0NoYXJ0Ll9jaGFydFF1ZXVlID0gbmV3IFNldDsKLSAgICAg
ICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoVGltZVNlcmllc0NoYXJ0Ll9yZW5k
ZXJFbnF1ZXVlZENoYXJ0cy5iaW5kKFRpbWVTZXJpZXNDaGFydCkpOwotICAgICAgICB9Ci0gICAg
ICAgIFRpbWVTZXJpZXNDaGFydC5fY2hhcnRRdWV1ZS5hZGQodGhpcyk7Ci0gICAgfQotCi0gICAg
c3RhdGljIF9yZW5kZXJFbnF1ZXVlZENoYXJ0cygpCi0gICAgewotICAgICAgICBmb3IgKHZhciBj
aGFydCBvZiBUaW1lU2VyaWVzQ2hhcnQuX2NoYXJ0UXVldWUpCi0gICAgICAgICAgICBjaGFydC51
cGRhdGVSZW5kZXJpbmcoKTsKLSAgICAgICAgVGltZVNlcmllc0NoYXJ0Ll9jaGFydFF1ZXVlID0g
bnVsbDsKLSAgICB9Ci0KICAgICBzZXREb21haW4oc3RhcnRUaW1lLCBlbmRUaW1lKQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQoc3RhcnRUaW1lIDwgZW5kVGltZSwgJ3N0YXJ0VGltZSBt
dXN0IGJlIGJlZm9yZSBlbmRUaW1lJyk7CkBAIC04MDQsMyArNzgzLDUgQEAgY2xhc3MgVGltZVNl
cmllc0NoYXJ0IGV4dGVuZHMgQ29tcG9uZW50QgogICAgICAgICByZXR1cm4gZ3JpZFZhbHVlczsK
ICAgICB9CiB9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgndGltZS1zZXJpZXMtY2hh
cnQnLCBUaW1lU2VyaWVzQ2hhcnQpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvdGltZS1zZXJpZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvdGltZS1zZXJpZXMuanMJKHJldmlzaW9uIDIx
MDg0MSkKKysrIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3RpbWUt
c2VyaWVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsNyBAQCB2YXIgVGltZVNlcmllcyA9
IGNsYXNzIHsKICAgICAgICAgdGhpcy5fZGF0YSA9IFtdOwogICAgIH0KIAorICAgIHZhbHVlcygp
IHsgcmV0dXJuIHRoaXMuX2RhdGEubWFwKChwb2ludCkgPT4gcG9pbnQudmFsdWUpOyB9CiAgICAg
bGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5fZGF0YS5sZW5ndGg7IH0KIAogICAgIGFwcGVuZChpdGVt
KQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNp
cy1jYXRlZ29yeS1wYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtY2F0ZWdvcnktcGFnZS5qcwkocmV2aXNpb24gMjEw
ODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9hbmFseXNp
cy1jYXRlZ29yeS1wYWdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTAgQEAgY2xh
c3MgQW5hbHlzaXNDYXRlZ29yeVBhZ2UgZXh0ZW5kcyBQYWdlVwogICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7CiAgICAgICAgIEFuYWx5c2lzVGFzay5mZXRjaEFsbCgpLnRoZW4oZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgc2VsZi5fZmV0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICBzZWxmLnVw
ZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgc2VsZi5lbnF1ZXVlVG9SZW5kZXIoKTsKICAg
ICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICBzZWxmLl9lcnJvck1lc3Nh
Z2UgPSAnRmFpbGVkIHRvIGZldGNoIHRoZSBsaXN0IG9mIGFuYWx5c2lzIHRhc2tzOiAnICsgZXJy
b3I7Ci0gICAgICAgICAgICBzZWxmLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgc2Vs
Zi5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHN1cGVyLm9wZW4oc3Rh
dGUpOwogICAgIH0KQEAgLTU5LDEyICs1OSwxMiBAQCBjbGFzcyBBbmFseXNpc0NhdGVnb3J5UGFn
ZSBleHRlbmRzIFBhZ2VXCiAgICAgICAgICAgICB0aGlzLl9jYXRlZ29yeVRvb2xiYXIuc2V0Rmls
dGVyKHN0YXRlLmZpbHRlcik7CiAKICAgICAgICAgaWYgKCFpc09wZW4pCi0gICAgICAgICAgICB0
aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKICAgICB9CiAKICAgICBmaWx0ZXJEaWRDaGFuZ2Uoc2hvdWxkVXBkYXRlU3RhdGUpCiAgICAg
ewotICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLmVucXVldWVU
b1JlbmRlcigpOwogICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGUpCiAgICAgICAgICAgICB0
aGlzLnNjaGVkdWxlVXJsU3RhdGVVcGRhdGUoKTsKICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIGNs
YXNzIEFuYWx5c2lzQ2F0ZWdvcnlQYWdlIGV4dGVuZHMgUGFnZVcKICAgICAgICAgSW5zdHJ1bWVu
dGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnQW5hbHlzaXNDYXRlZ29yeVBhZ2UnLCAncmVuZGVy
Jyk7CiAKICAgICAgICAgc3VwZXIucmVuZGVyKCk7Ci0gICAgICAgIHRoaXMuX2NhdGVnb3J5VG9v
bGJhci51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5fY2F0ZWdvcnlUb29sYmFyLmVu
cXVldWVUb1JlbmRlcigpOwogCiAgICAgICAgIGlmICh0aGlzLl9lcnJvck1lc3NhZ2UpIHsKICAg
ICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9mZXRjaGVkKTsKSW5kZXg6IFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5hbHlzaXMtdGFzay1wYWdlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYW5h
bHlzaXMtdGFzay1wYWdlLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2FuYWx5c2lzLXRhc2stcGFnZS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTksNyArMTksNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tDaGFydFBhbmUgZXh0ZW5k
cyBDaGFyCiAgICAgX3VwZGF0ZVN0YXR1cygpCiAgICAgewogICAgICAgICBzdXBlci5fdXBkYXRl
U3RhdHVzKCk7Ci0gICAgICAgIHRoaXMuX3BhZ2UudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAg
IHRoaXMuX3BhZ2UuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgfQogCiAgICAgc2VsZWN0ZWRQb2lu
dHMoKQpAQCAtMTAxLDcgKzEwMSw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQ
YWdlV2l0aEgKICAgICAgICAgICAgIHZhciB0YXNrSWQgPSBwYXJzZUludChzdGF0ZS5yZW1haW5p
bmdSb3V0ZSk7CiAgICAgICAgICAgICBBbmFseXNpc1Rhc2suZmV0Y2hCeUlkKHRhc2tJZCkudGhl
bih0aGlzLl9kaWRGZXRjaFRhc2suYmluZCh0aGlzKSwgZnVuY3Rpb24gKGVycm9yKSB7CiAgICAg
ICAgICAgICAgICAgc2VsZi5fZXJyb3JNZXNzYWdlID0gYEZhaWxlZCB0byBmZXRjaCB0aGUgYW5h
bHlzaXMgdGFzayAke3N0YXRlLnJlbWFpbmluZ1JvdXRlfTogJHtlcnJvcn1gOwotICAgICAgICAg
ICAgICAgIHNlbGYudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICAgICAgc2VsZi5lbnF1
ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgdGhpcy5fZmV0Y2hS
ZWxhdGVkSW5mb0ZvclRhc2tJZCh0YXNrSWQpOwogICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmJ1
aWxkUmVxdWVzdCkgewpAQCAtMTEwLDcgKzExMCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEgKICAgICAgICAgICAgICAgICBzZWxmLl9mZXRjaFJlbGF0ZWRJbmZv
Rm9yVGFza0lkKHRhc2suaWQoKSk7CiAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsK
ICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvck1lc3NhZ2UgPSBgRmFpbGVkIHRvIGZldGNoIHRo
ZSBhbmFseXNpcyB0YXNrIGZvciB0aGUgYnVpbGQgcmVxdWVzdCAke2J1aWxkUmVxdWVzdElkfTog
JHtlcnJvcn1gOwotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlUmVuZGVyaW5nKCk7CisgICAg
ICAgICAgICAgICAgc2VsZi5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEgKICAgICAgICAgdGhpcy5fY2hhcnRQYW5lLnNldE92ZXJ2aWV3RG9t
YWluKGRvbWFpblswXSwgZG9tYWluWzFdKTsKICAgICAgICAgdGhpcy5fY2hhcnRQYW5lLnNldE1h
aW5Eb21haW4oZG9tYWluWzBdLCBkb21haW5bMV0pOwogCi0gICAgICAgIHRoaXMudXBkYXRlUmVu
ZGVyaW5nKCk7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAKICAgICAgICAgcmV0
dXJuIHRhc2s7CiAgICAgfQpAQCAtMTU0LDcgKzE1NCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1Bh
Z2UgZXh0ZW5kcyBQYWdlV2l0aEgKICAgICBfZGlkRmV0Y2hSZWxhdGVkQW5hbHlzaXNUYXNrcyhy
ZWxhdGVkVGFza3MpCiAgICAgewogICAgICAgICB0aGlzLl9yZWxhdGVkVGFza3MgPSByZWxhdGVk
VGFza3M7Ci0gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgIHRoaXMuZW5x
dWV1ZVRvUmVuZGVyKCk7CiAgICAgfQogCiAgICAgX2RpZEZldGNoTWVhc3VyZW1lbnQoKQpAQCAt
MTcxLDcgKzE3MSw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEgK
IAogICAgICAgICB0aGlzLl9zdGFydFBvaW50ID0gc3RhcnRQb2ludDsKICAgICAgICAgdGhpcy5f
ZW5kUG9pbnQgPSBlbmRQb2ludDsKLSAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBfZGlkRmV0Y2hUZXN0
R3JvdXBzKHRlc3RHcm91cHMpCkBAIC0xNzksMTQgKzE3OSwxNCBAQCBjbGFzcyBBbmFseXNpc1Rh
c2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgICAgIHRoaXMuX3Rlc3RHcm91cHMgPSB0ZXN0
R3JvdXBzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuICthLmNyZWF0ZWRBdCgpIC0gYi5j
cmVhdGVkQXQoKTsgfSk7CiAgICAgICAgIHRoaXMuX2RpZFVwZGF0ZVRlc3RHcm91cEhpZGRlblN0
YXRlKCk7CiAgICAgICAgIHRoaXMuX2Fzc2lnblRlc3RSZXN1bHRzSWZQb3NzaWJsZSgpOwotICAg
ICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOwogICAgIH0KIAogICAgIF9zaG93QWxsVGVzdEdyb3VwcygpCiAgICAgewogICAgICAgICB0
aGlzLl9zaG93SGlkZGVuVGVzdEdyb3VwcyA9IHRydWU7CiAgICAgICAgIHRoaXMuX2RpZFVwZGF0
ZVRlc3RHcm91cEhpZGRlblN0YXRlKCk7Ci0gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7
CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgfQogCiAgICAgX2RpZFVwZGF0
ZVRlc3RHcm91cEhpZGRlblN0YXRlKCkKQEAgLTIwNiw3ICsyMDYsNyBAQCBjbGFzcyBBbmFseXNp
c1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgewogICAgICAgICB0aGlzLl9hbmFseXNp
c1Jlc3VsdHMgPSByZXN1bHRzOwogICAgICAgICBpZiAodGhpcy5fYXNzaWduVGVzdFJlc3VsdHNJ
ZlBvc3NpYmxlKCkpCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBfYXNzaWduVGVzdFJl
c3VsdHNJZlBvc3NpYmxlKCkKQEAgLTIzMyw3ICsyMzMsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQ
YWdlIGV4dGVuZHMgUGFnZVdpdGhICiAKICAgICAgICAgdGhpcy5jb250ZW50KCkucXVlcnlTZWxl
Y3RvcignLmVycm9yLW1lc3NhZ2UnKS50ZXh0Q29udGVudCA9IHRoaXMuX2Vycm9yTWVzc2FnZSB8
fCAnJzsKIAotICAgICAgICB0aGlzLl9jaGFydFBhbmUudXBkYXRlUmVuZGVyaW5nKCk7CisgICAg
ICAgIHRoaXMuX2NoYXJ0UGFuZS5lbnF1ZXVlVG9SZW5kZXIoKTsKIAogICAgICAgICB2YXIgZWxl
bWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKICAgICAgICAgdmFyIGxpbmsgPSBD
b21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CkBAIC0yNjQsMTggKzI2NCwxOCBAQCBjbGFzcyBBbmFs
eXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgcmVwb3NpdG9yeUxpc3QgPSBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dp
dGhVUkwoUmVwb3NpdG9yeS5hbGwoKSk7CiAKLSAgICAgICAgdGhpcy5fYnVnTGlzdC51cGRhdGVS
ZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5fYnVnTGlzdC5lbnF1ZXVlVG9SZW5kZXIoKTsKIAog
ICAgICAgICB0aGlzLl9jYXVzZUxpc3Quc2V0S2luZExpc3QocmVwb3NpdG9yeUxpc3QpOwotICAg
ICAgICB0aGlzLl9jYXVzZUxpc3QudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgIHRoaXMuX2Nh
dXNlTGlzdC5lbnF1ZXVlVG9SZW5kZXIoKTsKIAogICAgICAgICB0aGlzLl9maXhMaXN0LnNldEtp
bmRMaXN0KHJlcG9zaXRvcnlMaXN0KTsKLSAgICAgICAgdGhpcy5fZml4TGlzdC51cGRhdGVSZW5k
ZXJpbmcoKTsKKyAgICAgICAgdGhpcy5fZml4TGlzdC5lbnF1ZXVlVG9SZW5kZXIoKTsKIAogICAg
ICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuYW5hbHlzaXMtdGFzay1zdGF0dXMn
KS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fdGFzayA/IG51bGwgOiAnbm9uZSc7CiAgICAgICAgIHRo
aXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5vdmVydmlldy1jaGFydCcpLnN0eWxlLmRpc3Bs
YXkgPSB0aGlzLl90YXNrID8gbnVsbCA6ICdub25lJzsKICAgICAgICAgdGhpcy5jb250ZW50KCku
cXVlcnlTZWxlY3RvcignLnRlc3QtZ3JvdXAtdmlldycpLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl90
YXNrICYmIHRoaXMuX3Rlc3RHcm91cHMgJiYgdGhpcy5fdGVzdEdyb3Vwcy5sZW5ndGggPyBudWxs
IDogJ25vbmUnOwotICAgICAgICB0aGlzLl90YXNrTmFtZUxhYmVsLnVwZGF0ZVJlbmRlcmluZygp
OworICAgICAgICB0aGlzLl90YXNrTmFtZUxhYmVsLmVucXVldWVUb1JlbmRlcigpOwogCiAgICAg
ICAgIGlmICh0aGlzLl9yZWxhdGVkVGFza3MgJiYgdGhpcy5fdGFzaykgewogICAgICAgICAgICAg
dmFyIHJvdXRlciA9IHRoaXMucm91dGVyKCk7CkBAIC0yOTYsNyArMjk2LDcgQEAgY2xhc3MgQW5h
bHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSAogICAgICAgICB2YXIgYSA9IHNlbGVjdGVk
UmFuZ2VbJ0EnXTsKICAgICAgICAgdmFyIGIgPSBzZWxlY3RlZFJhbmdlWydCJ107CiAgICAgICAg
IHRoaXMuX25ld1Rlc3RHcm91cEZvcm1Gb3JWaWV3ZXIuc2V0Um9vdFNldE1hcChhICYmIGIgPyB7
J0EnOiBhLnJvb3RTZXQoKSwgJ0InOiBiLnJvb3RTZXQoKX0gOiBudWxsKTsKLSAgICAgICAgdGhp
cy5fbmV3VGVzdEdyb3VwRm9ybUZvclZpZXdlci51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAg
dGhpcy5fbmV3VGVzdEdyb3VwRm9ybUZvclZpZXdlci5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAg
ICAgdGhpcy5fbmV3VGVzdEdyb3VwRm9ybUZvclZpZXdlci5lbGVtZW50KCkuc3R5bGUuZGlzcGxh
eSA9IHRoaXMuX3RyaWdnZXJhYmxlID8gbnVsbCA6ICdub25lJzsKIAogICAgICAgICB0aGlzLl9y
ZW5kZXJUZXN0R3JvdXBMaXN0KCk7CkBAIC0zMDgsMTMgKzMwOCwxMyBAQCBjbGFzcyBBbmFseXNp
c1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgICAgIHZhciBwb2ludHMgPSB0aGlzLl9j
aGFydFBhbmUuc2VsZWN0ZWRQb2ludHMoKTsKICAgICAgICAgdGhpcy5fbmV3VGVzdEdyb3VwRm9y
bUZvckNoYXJ0LnNldFJvb3RTZXRNYXAocG9pbnRzICYmIHBvaW50cy5sZW5ndGggPj0gMiA/CiAg
ICAgICAgICAgICAgICAgeydBJzogcG9pbnRzWzBdLnJvb3RTZXQoKSwgJ0InOiBwb2ludHNbcG9p
bnRzLmxlbmd0aCAtIDFdLnJvb3RTZXQoKX0gOiBudWxsKTsKLSAgICAgICAgdGhpcy5fbmV3VGVz
dEdyb3VwRm9ybUZvckNoYXJ0LnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLl9uZXdU
ZXN0R3JvdXBGb3JtRm9yQ2hhcnQuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIHRoaXMuX25l
d1Rlc3RHcm91cEZvcm1Gb3JDaGFydC5lbGVtZW50KCkuc3R5bGUuZGlzcGxheSA9IHRoaXMuX3Ry
aWdnZXJhYmxlID8gbnVsbCA6ICdub25lJzsKIAogICAgICAgICB0aGlzLl9hbmFseXNpc1Jlc3Vs
dHNWaWV3ZXIuc2V0Q3VycmVudFRlc3RHcm91cCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKLSAg
ICAgICAgdGhpcy5fYW5hbHlzaXNSZXN1bHRzVmlld2VyLnVwZGF0ZVJlbmRlcmluZygpOworICAg
ICAgICB0aGlzLl9hbmFseXNpc1Jlc3VsdHNWaWV3ZXIuZW5xdWV1ZVRvUmVuZGVyKCk7CiAKLSAg
ICAgICAgdGhpcy5fdGVzdEdyb3VwUmVzdWx0c1RhYmxlLnVwZGF0ZVJlbmRlcmluZygpOworICAg
ICAgICB0aGlzLl90ZXN0R3JvdXBSZXN1bHRzVGFibGUuZW5xdWV1ZVRvUmVuZGVyKCk7CiAKICAg
ICAgICAgSW5zdHJ1bWVudGF0aW9uLmVuZE1lYXN1cmluZ1RpbWUoJ0FuYWx5c2lzVGFza1BhZ2Un
LCAncmVuZGVyJyk7CiAgICAgfQpAQCAtMzU2LDcgKzM1Niw3IEBAIGNsYXNzIEFuYWx5c2lzVGFz
a1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEgKICAgICAgICAgICAgIGZvciAodmFyIHRlc3RHcm91cCBv
ZiB0aGlzLl9maWx0ZXJlZFRlc3RHcm91cHMpIHsKICAgICAgICAgICAgICAgICB2YXIgbGFiZWwg
PSB0aGlzLl90ZXN0R3JvdXBMYWJlbE1hcC5nZXQodGVzdEdyb3VwKTsKICAgICAgICAgICAgICAg
ICBsYWJlbC5zZXRUZXh0KHRlc3RHcm91cC5sYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBsYWJl
bC51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgICAgICBsYWJlbC5lbnF1ZXVlVG9SZW5k
ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM2NCw3ICszNjQsNyBA
QCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgX2NyZWF0ZVRl
c3RHcm91cExpc3RJdGVtKGdyb3VwKQogICAgIHsKICAgICAgICAgdmFyIHRleHQgPSBuZXcgRWRp
dGFibGVUZXh0KGdyb3VwLmxhYmVsKCkpOwotICAgICAgICB0ZXh0LnNldFN0YXJ0ZWRFZGl0aW5n
Q2FsbGJhY2soKCkgPT4geyByZXR1cm4gdGV4dC51cGRhdGVSZW5kZXJpbmcoKTsgfSk7CisgICAg
ICAgIHRleHQuc2V0U3RhcnRlZEVkaXRpbmdDYWxsYmFjaygoKSA9PiB7IHJldHVybiB0ZXh0LmVu
cXVldWVUb1JlbmRlcigpOyB9KTsKICAgICAgICAgdGV4dC5zZXRVcGRhdGVDYWxsYmFjayh0aGlz
Ll91cGRhdGVUZXN0R3JvdXBOYW1lLmJpbmQodGhpcywgZ3JvdXApKTsKIAogICAgICAgICB0aGlz
Ll90ZXN0R3JvdXBMYWJlbE1hcC5zZXQoZ3JvdXAsIHRleHQpOwpAQCAtNDA4LDMwICs0MDgsMzAg
QEAgY2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSAogCiAgICAgICAgICAg
ICB0aGlzLl9yZW5kZXJlZEN1cnJlbnRUZXN0R3JvdXAgPSB0aGlzLl9jdXJyZW50VGVzdEdyb3Vw
OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3JldHJ5Rm9ybS51cGRhdGVSZW5kZXJpbmcoKTsK
KyAgICAgICAgdGhpcy5fcmV0cnlGb3JtLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAogICAg
IF9zaG93VGVzdEdyb3VwKHRlc3RHcm91cCkKICAgICB7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRU
ZXN0R3JvdXAgPSB0ZXN0R3JvdXA7ICAgICAgICAKICAgICAgICAgdGhpcy5fdGVzdEdyb3VwUmVz
dWx0c1RhYmxlLnNldFRlc3RHcm91cCh0aGlzLl9jdXJyZW50VGVzdEdyb3VwKTsKLSAgICAgICAg
dGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsK
ICAgICB9CiAKICAgICBfZGlkU3RhcnRFZGl0aW5nVGFza05hbWUoKQogICAgIHsKLSAgICAgICAg
dGhpcy5fdGFza05hbWVMYWJlbC51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5fdGFz
a05hbWVMYWJlbC5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBfdXBkYXRlVGFza05h
bWUoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdGFzayk7Ci0gICAgICAg
IHRoaXMuX3Rhc2tOYW1lTGFiZWwudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgIHRoaXMuX3Rh
c2tOYW1lTGFiZWwuZW5xdWV1ZVRvUmVuZGVyKCk7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX3Rh
c2sudXBkYXRlTmFtZSh0aGlzLl90YXNrTmFtZUxhYmVsLmVkaXRlZFRleHQoKSkudGhlbigoKSA9
PiB7Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgfSwgKGVycm9yKSA9PiB7Ci0gICAgICAgICAg
ICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gdXBkYXRlIHRoZSBuYW1lOiAnICsg
ZXJyb3IpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00MzksMTIgKzQzOSwxMiBAQCBjbGFzcyBB
bmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAgICAgX3VwZGF0ZVRlc3RHcm91cE5h
bWUodGVzdEdyb3VwKQogICAgIHsKICAgICAgICAgdmFyIGxhYmVsID0gdGhpcy5fdGVzdEdyb3Vw
TGFiZWxNYXAuZ2V0KHRlc3RHcm91cCk7Ci0gICAgICAgIGxhYmVsLnVwZGF0ZVJlbmRlcmluZygp
OworICAgICAgICBsYWJlbC5lbnF1ZXVlVG9SZW5kZXIoKTsKIAogICAgICAgICByZXR1cm4gdGVz
dEdyb3VwLnVwZGF0ZU5hbWUobGFiZWwuZWRpdGVkVGV4dCgpKS50aGVuKCgpID0+IHsKLSAgICAg
ICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLmVucXVldWVU
b1JlbmRlcigpOwogICAgICAgICB9LCAoZXJyb3IpID0+IHsKLSAgICAgICAgICAgIHRoaXMudXBk
YXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAg
ICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBoaWRlIHRoZSB0ZXN0IG5hbWU6ICcgKyBlcnJvcik7
CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ1NCwxMCArNDU0LDEwIEBAIGNsYXNzIEFuYWx5c2lz
VGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEgKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5f
Y3VycmVudFRlc3RHcm91cCk7CiAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGVzdEdyb3Vw
LnVwZGF0ZUhpZGRlbkZsYWcoIXRoaXMuX2N1cnJlbnRUZXN0R3JvdXAuaXNIaWRkZW4oKSkudGhl
bigoKSA9PiB7CiAgICAgICAgICAgICB0aGlzLl9kaWRVcGRhdGVUZXN0R3JvdXBIaWRkZW5TdGF0
ZSgpOwotICAgICAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHRo
aXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgewogICAg
ICAgICAgICAgdGhpcy5fbWF5SGF2ZU11dGF0ZWRUZXN0R3JvdXBIaWRkZW5TdGF0ZSgpOwotICAg
ICAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1
ZVRvUmVuZGVyKCk7CiAgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIHVwZGF0ZSB0aGUgZ3Jv
dXA6ICcgKyBlcnJvcik7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ3MSw3ICs0NzEsMTAgQEAg
Y2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSAogICAgICAgICBpZiAobmV3
Q2hhbmdlVHlwZSA9PSAndW5jb25maXJtZWQnKQogICAgICAgICAgICAgbmV3Q2hhbmdlVHlwZSA9
IG51bGw7CiAKLSAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4geyB0aGlzLnVw
ZGF0ZVJlbmRlcmluZygpOyB9OworICAgICAgICBjb25zdCB1cGRhdGVSZW5kZXJpbmcgPSAoKSA9
PiB7CisgICAgICAgICAgICB0aGlzLl9jaGFydFBhbmUuZGlkVXBkYXRlQW5ub3RhdGlvbnMoKTsK
KyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIH07CiAgICAgICAg
IHJldHVybiB0aGlzLl90YXNrLnVwZGF0ZUNoYW5nZVR5cGUobmV3Q2hhbmdlVHlwZSkudGhlbih1
cGRhdGVSZW5kZXJpbmcsIChlcnJvcikgPT4gewogICAgICAgICAgICAgdXBkYXRlUmVuZGVyaW5n
KCk7CiAgICAgICAgICAgICBhbGVydCgnRmFpbGVkIHRvIHVwZGF0ZSB0aGUgc3RhdHVzOiAnICsg
ZXJyb3IpOwpAQCAtNDgzLDcgKzQ4Niw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5k
cyBQYWdlV2l0aEgKICAgICAgICAgY29uc29sZS5hc3NlcnQodHJhY2tlciBpbnN0YW5jZW9mIEJ1
Z1RyYWNrZXIpOwogICAgICAgICBidWdOdW1iZXIgPSBwYXJzZUludChidWdOdW1iZXIpOwogCi0g
ICAgICAgIGNvbnN0IHVwZGF0ZVJlbmRlcmluZyA9ICgpID0+IHsgdGhpcy51cGRhdGVSZW5kZXJp
bmcoKTsgfTsKKyAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4geyB0aGlzLmVu
cXVldWVUb1JlbmRlcigpOyB9OwogICAgICAgICByZXR1cm4gdGhpcy5fdGFzay5hc3NvY2lhdGVC
dWcodHJhY2tlciwgYnVnTnVtYmVyKS50aGVuKHVwZGF0ZVJlbmRlcmluZywgKGVycm9yKSA9PiB7
CiAgICAgICAgICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKICAgICAgICAgICAgIGFsZXJ0KCdGYWls
ZWQgdG8gYXNzb2NpYXRlIHRoZSBidWc6ICcgKyBlcnJvcik7CkBAIC00OTIsNyArNDk1LDcgQEAg
Y2xhc3MgQW5hbHlzaXNUYXNrUGFnZSBleHRlbmRzIFBhZ2VXaXRoSAogCiAgICAgX2Rpc3NvY2lh
dGVCdWcoYnVnKQogICAgIHsKLSAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5nID0gKCkgPT4g
eyB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOyB9OworICAgICAgICBjb25zdCB1cGRhdGVSZW5kZXJp
bmcgPSAoKSA9PiB7IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7IH07CiAgICAgICAgIHJldHVybiB0
aGlzLl90YXNrLmRpc3NvY2lhdGVCdWcoYnVnKS50aGVuKHVwZGF0ZVJlbmRlcmluZywgKGVycm9y
KSA9PiB7CiAgICAgICAgICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKICAgICAgICAgICAgIGFsZXJ0
KCdGYWlsZWQgdG8gZGlzc29jaWF0ZSB0aGUgYnVnOiAnICsgZXJyb3IpOwpAQCAtNTAxLDcgKzUw
NCw3IEBAIGNsYXNzIEFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEgKIAogICAgIF9h
c3NvY2lhdGVDb21taXQoa2luZCwgcmVwb3NpdG9yeSwgcmV2aXNpb24pCiAgICAgewotICAgICAg
ICBjb25zdCB1cGRhdGVSZW5kZXJpbmcgPSAoKSA9PiB7IHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7
IH07CisgICAgICAgIGNvbnN0IHVwZGF0ZVJlbmRlcmluZyA9ICgpID0+IHsgdGhpcy5lbnF1ZXVl
VG9SZW5kZXIoKTsgfTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2suYXNzb2NpYXRlQ29tbWl0
KGtpbmQsIHJlcG9zaXRvcnksIHJldmlzaW9uKS50aGVuKHVwZGF0ZVJlbmRlcmluZywgKGVycm9y
KSA9PiB7CiAgICAgICAgICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKICAgICAgICAgICAgIGlmIChl
cnJvciA9PSAnQW1iaWd1b3VzUmV2aXNpb24nKQpAQCAtNTE1LDcgKzUxOCw3IEBAIGNsYXNzIEFu
YWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEgKIAogICAgIF9kaXNzb2NpYXRlQ29tbWl0
KGNvbW1pdCkKICAgICB7Ci0gICAgICAgIGNvbnN0IHVwZGF0ZVJlbmRlcmluZyA9ICgpID0+IHsg
dGhpcy51cGRhdGVSZW5kZXJpbmcoKTsgfTsKKyAgICAgICAgY29uc3QgdXBkYXRlUmVuZGVyaW5n
ID0gKCkgPT4geyB0aGlzLmVucXVldWVUb1JlbmRlcigpOyB9OwogICAgICAgICByZXR1cm4gdGhp
cy5fdGFzay5kaXNzb2NpYXRlQ29tbWl0KGNvbW1pdCkudGhlbih1cGRhdGVSZW5kZXJpbmcsIChl
cnJvcikgPT4gewogICAgICAgICAgICAgdXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgICAgICAgICBh
bGVydCgnRmFpbGVkIHRvIGRpc3NvY2lhdGUgdGhlIGNvbW1pdDogJyArIGVycm9yKTsKQEAgLTUz
OSw3ICs1NDIsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFnZVdpdGhICiAg
ICAgX2NoYXJ0U2VsZWN0aW9uRGlkQ2hhbmdlKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NlbGVj
dGlvbldhc01vZGlmaWVkQnlVc2VyID0gdHJ1ZTsKLSAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJp
bmcoKTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBfY3Jl
YXRlTmV3VGVzdEdyb3VwRnJvbUNoYXJ0KG5hbWUsIHJlcGV0aXRpb25Db3VudCwgcm9vdFNldE1h
cCkKQEAgLTU0OSw3ICs1NTIsNyBAQCBjbGFzcyBBbmFseXNpc1Rhc2tQYWdlIGV4dGVuZHMgUGFn
ZVdpdGhICiAKICAgICBfc2VsZWN0ZWRSb3dJbkFuYWx5c2lzUmVzdWx0c1ZpZXdlcigpCiAgICAg
ewotICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLmVucXVldWVU
b1JlbmRlcigpOwogICAgIH0KIAogICAgIF9jcmVhdGVOZXdUZXN0R3JvdXBGcm9tVmlld2VyKG5h
bWUsIHJlcGV0aXRpb25Db3VudCwgcm9vdFNldE1hcCkKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYnVpbGQtcmVxdWVzdC1xdWV1ZS1wYWdlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvYnVpbGQt
cmVxdWVzdC1xdWV1ZS1wYWdlLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2J1aWxkLXJlcXVlc3QtcXVldWUtcGFnZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMTgsMTYgKzE4LDE2IEBAIGNsYXNzIEJ1aWxkUmVxdWVzdFF1ZXVl
UGFnZSBleHRlbmRzIFBhZ2UKIAogICAgICAgICAgICAgICAgIEJ1aWxkUmVxdWVzdC5mZXRjaEZv
clRyaWdnZXJhYmxlKGVudHJ5Lm5hbWUpLnRoZW4oZnVuY3Rpb24gKHJlcXVlc3RzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRyaWdnZXJhYmxlLmJ1aWxkUmVxdWVzdHMgPSByZXF1ZXN0czsKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgICAgIHJldHVybiB0cmlnZ2VyYWJsZTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgc2VsZi51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHNlbGYuZW5xdWV1ZVRv
UmVuZGVyKCk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIEFuYWx5c2lzVGFzay5mZXRjaEFsbCgp
LnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc2VsZi51cGRhdGVSZW5kZXJpbmcoKTsK
KyAgICAgICAgICAgIHNlbGYuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0pOwogCiAgICAg
ICAgIHN1cGVyLm9wZW4oc3RhdGUpOwpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9wYWdlcy9jaGFydC1wYW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnQtcGFuZS5qcwkocmV2aXNpb24gMjEwODQx
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydC1wYW5l
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBmdW5jdGlvbiBjcmVhdGVUcmVuZExp
bmVFeGVjdXRhYmxlRnJvbUF2CiAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkKICAgICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7CiAKLSAgICAgICAgdmFyIGF2ZXJhZ2VW
YWx1ZXMgPSBjYWxsYmFjay5jYWxsKG51bGwsIHZhbHVlcywgcGFyYW1ldGVyc1swXSwgcGFyYW1l
dGVyc1sxXSk7CisgICAgICAgIHZhciBhdmVyYWdlVmFsdWVzID0gY2FsbGJhY2suY2FsbChudWxs
LCB2YWx1ZXMsIC4uLnBhcmFtZXRlcnMpOwogICAgICAgICBpZiAoIWF2ZXJhZ2VWYWx1ZXMpCiAg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpOwogCkBAIC0xODYsOCArMTg2
LDggQEAgY2xhc3MgQ2hhcnRQYW5lIGV4dGVuZHMgQ2hhcnRQYW5lQmFzZSB7CiAgICAgewogICAg
ICAgICBpZiAocmVwb3NpdG9yeSAhPSB0aGlzLl9jb21taXRMb2dWaWV3ZXIuY3VycmVudFJlcG9z
aXRvcnkoKSkgewogICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5fbWFpbkNoYXJ0U3RhdHVz
LnNldEN1cnJlbnRSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOwotICAgICAgICAgICAgdGhpcy5fY29t
bWl0TG9nVmlld2VyLnZpZXcocmVwb3NpdG9yeSwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pLnRoZW4o
KCkgPT4geyB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOyB9KTsKLSAgICAgICAgICAgIHRoaXMudXBk
YXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLl9jb21taXRMb2dWaWV3ZXIudmlldyhy
ZXBvc2l0b3J5LCByYW5nZS5mcm9tLCByYW5nZS50bykudGhlbigoKSA9PiB7IHRoaXMuZW5xdWV1
ZVRvUmVuZGVyKCk7IH0pOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNDAyLDE1ICs0MDIsMTUgQEAgY2xhc3MgQ2hhcnRQYW5lIGV4
dGVuZHMgQ2hhcnRQYW5lQmFzZSB7CiAgICAgICAgIHZhciBsaW5rID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVMaW5rOwogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAKLSAgICAgICAgaWYgKHRoaXMu
X3RyZW5kTGluZVR5cGUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNl
KHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy50cmVuZC1saW5lLXR5cGVzJyksIFsKKyAg
ICAgICAgY29uc3QgdHJlbmRMaW5lVHlwZXNDb250YWluZXIgPSB0aGlzLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCcudHJlbmQtbGluZS10eXBlcycpOworICAgICAgICBpZiAoIXRyZW5kTGluZVR5
cGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpKSB7CisgICAgICAgICAgICB0aGlz
LnJlbmRlclJlcGxhY2UodHJlbmRMaW5lVHlwZXNDb250YWluZXIsIFsKICAgICAgICAgICAgICAg
ICBlbGVtZW50KCdzZWxlY3QnLCB7b25jaGFuZ2U6IHRoaXMuX3RyZW5kTGluZVR5cGVEaWRDaGFu
Z2UuYmluZCh0aGlzKX0sCi0gICAgICAgICAgICAgICAgICAgIENoYXJ0VHJlbmRMaW5lVHlwZXMu
bWFwKGZ1bmN0aW9uICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudCgnb3B0aW9uJywgdHlwZSA9PSBzZWxmLl90cmVuZExpbmVUeXBlID8ge3ZhbHVlOiB0eXBl
LmlkLCBzZWxlY3RlZDogdHJ1ZX0gOiB7dmFsdWU6IHR5cGUuaWR9LCB0eXBlLmxhYmVsKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSkpCisgICAgICAgICAgICAgICAgICAgIENoYXJ0VHJlbmRMaW5l
VHlwZXMubWFwKCh0eXBlKSA9PiB7IHJldHVybiBlbGVtZW50KCdvcHRpb24nLCB7dmFsdWU6IHR5
cGUuaWR9LCB0eXBlLmxhYmVsKTsgfSkpCiAgICAgICAgICAgICBdKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcudHJlbmQtbGluZS10
eXBlcyBzZWxlY3QnKS52YWx1ZSA9IHRoaXMuX3RyZW5kTGluZVR5cGUuaWQ7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3RyZW5kTGluZVR5cGUpCisgICAgICAgICAgICB0cmVuZExpbmVU
eXBlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKS52YWx1ZSA9IHRoaXMuX3RyZW5k
TGluZVR5cGUuaWQ7CiAKICAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkVHJlbmRMaW5lT3B0aW9u
cykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ0OCw3ICs0NDgsNyBAQCBjbGFzcyBDaGFydFBh
bmUgZXh0ZW5kcyBDaGFydFBhbmVCYXNlIHsKIAogICAgICAgICB0aGlzLl91cGRhdGVUcmVuZExp
bmUoKTsKICAgICAgICAgdGhpcy5fY2hhcnRzUGFnZS5ncmFwaE9wdGlvbnNEaWRDaGFuZ2UoKTsK
LSAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9S
ZW5kZXIoKTsKICAgICB9CiAKICAgICBfZGVmYXVsdFBhcmFtZXRlcnNGb3JUcmVuZExpbmUodHlw
ZSkKQEAgLTQ5Myw3ICs0OTMsNyBAQCBjbGFzcyBDaGFydFBhbmUgZXh0ZW5kcyBDaGFydFBhbmVC
YXNlIHsKIAogICAgICAgICBpZiAoIWN1cnJlbnRUcmVuZExpbmVUeXBlLmV4ZWN1dGUpIHsKICAg
ICAgICAgICAgIHRoaXMuX21haW5DaGFydC5jbGVhclRyZW5kTGluZXMoKTsKLSAgICAgICAgICAg
IHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHRyZW5k
bGluZXMgdG8gYmUgcmVhZHkuIE90aGVyd2lzZSB3ZSBtaWdodCBzZWUgRk9DIHdoZW4gdGhlIGRv
bWFpbiBpcyBleHBhbmRlZC4KICAgICAgICAgICAgIFByb21pc2UuYWxsKHNvdXJjZUxpc3QubWFw
KGZ1bmN0aW9uIChzb3VyY2UsIHNvdXJjZUluZGV4KSB7CkBAIC01MDIsNyArNTAyLDcgQEAgY2xh
c3MgQ2hhcnRQYW5lIGV4dGVuZHMgQ2hhcnRQYW5lQmFzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9tYWluQ2hhcnQuc2V0VHJlbmRMaW5lKHNvdXJjZUluZGV4LCB0cmVuZGxpbmVT
ZXJpZXMpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAg
ICAgICAgICAgc2VsZi5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9jaGFydHMtcGFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2NoYXJ0cy1wYWdlLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy1wYWdlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGNsYXNzIENoYXJ0c1BhZ2UgZXh0ZW5kcyBQYWdl
V2l0aEhlYWRpbmcKICAgICAgICAgaWYgKG5ld1BhbmVMaXN0KSB7CiAgICAgICAgICAgICB0aGlz
Ll9wYW5lTGlzdCA9IG5ld1BhbmVMaXN0OwogICAgICAgICAgICAgdGhpcy5fcGFuZUxpc3RDaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7CisgICAgICAg
ICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5f
dXBkYXRlRG9tYWluc0Zyb21TZXJpYWxpemVkU3RhdGUoc3RhdGUpOwpAQCAtMTA5LDcgKzEwOSw3
IEBAIGNsYXNzIENoYXJ0c1BhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcKICAgICAgICAgICAg
IHNpbmNlID0gem9vbVswXSAtICh6b29tWzFdIC0gem9vbVswXSkgLyAyOwogCiAgICAgICAgIHRo
aXMudG9vbGJhcigpLnNldFN0YXJ0VGltZShzaW5jZSk7Ci0gICAgICAgIHRoaXMudG9vbGJhcigp
LnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5lbnF1ZXVlVG9SZW5k
ZXIoKTsKIAogICAgICAgICB0aGlzLl9tYWluRG9tYWluID0gem9vbSB8fCBudWxsOwogCkBAIC0x
NTEsNyArMTUxLDcgQEAgY2xhc3MgQ2hhcnRzUGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZwog
ICAgIHNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRl
U3RhdGUpCiAgICAgewogICAgICAgICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMobnVt
YmVyT2ZEYXlzLCB0cnVlKTsKLSAgICAgICAgdGhpcy50b29sYmFyKCkudXBkYXRlUmVuZGVyaW5n
KCk7CisgICAgICAgIHRoaXMudG9vbGJhcigpLmVucXVldWVUb1JlbmRlcigpOwogICAgICAgICB0
aGlzLl91cGRhdGVPdmVydmlld0RvbWFpbigpOwogICAgICAgICB0aGlzLl91cGRhdGVNYWluRG9t
YWluKCk7CiAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTdGF0ZSkKQEAgLTI5OCw3ICsyOTgsNyBA
QCBjbGFzcyBDaGFydHNQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nCiAgICAgICAgICAgICB0
aGlzLl91cGRhdGVPdmVydmlld0RvbWFpbigpOwogICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFp
bkRvbWFpbigpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyaW5nKCk7Cisg
ICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxT
dGF0ZVVwZGF0ZSgpOwogICAgIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBAIGNsYXNzIENoYXJ0c1Bh
Z2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcKICAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFj
ZSh0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcucGFuZS1saXN0JyksIHRoaXMuX3BhbmVM
aXN0KTsKIAogICAgICAgICBmb3IgKHZhciBwYW5lIG9mIHRoaXMuX3BhbmVMaXN0KQotICAgICAg
ICAgICAgcGFuZS51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHBhbmUuZW5xdWV1ZVRv
UmVuZGVyKCk7CiAKICAgICAgICAgdGhpcy5fcGFuZUxpc3RDaGFuZ2VkID0gZmFsc2U7CiAgICAg
fQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMt
dG9vbGJhci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCShyZXZpc2lvbiAyMTA4NDEpCisrKyBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBE
b21haW5Db250cm8KICAgICByZW5kZXIoKQogICAgIHsKICAgICAgICAgc3VwZXIucmVuZGVyKCk7
Ci0gICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAg
dGhpcy5fcGFuZVNlbGVjdG9yLmVucXVldWVUb1JlbmRlcigpOwogICAgICAgICB0aGlzLl9sYWJl
bFNwYW4udGV4dENvbnRlbnQgPSB0aGlzLl9udW1iZXJPZkRheXM7CiAgICAgICAgIHRoaXMuX3Nl
dElucHV0RWxlbWVudFZhbHVlKHRoaXMuX251bWJlck9mRGF5cyk7CiAgICAgfQpJbmRleDogV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFz
ay1wYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvY3JlYXRlLWFuYWx5c2lzLXRhc2stcGFnZS5qcwkocmV2aXNpb24gMjEwODQxKQor
KysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jcmVhdGUtYW5hbHlz
aXMtdGFzay1wYWdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw3ICsxNiw3IEBAIGNsYXNzIENy
ZWF0ZUFuYWx5c2lzVGFza1BhZ2UgZXh0ZW5kcyBQYWcKIAogICAgICAgICB0aGlzLl9lcnJvck1l
c3NhZ2UgPSBzdGF0ZS5lcnJvcjsKICAgICAgICAgaWYgKCFpc09wZW4pCi0gICAgICAgICAgICB0
aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKICAgICB9CiAKICAgICByZW5kZXIoKQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9kYXNoYm9hcmQtcGFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2Rhc2hib2FyZC1wYWdlLmpzCShyZXZp
c2lvbiAyMTA4NDEpCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2Vz
L2Rhc2hib2FyZC1wYWdlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNz
IERhc2hib2FyZFBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWQKIAogICAgICAgICB0aGlzLl9uZWVk
c1RhYmxlQ29uc3RydWN0aW9uID0gdHJ1ZTsKICAgICAgICAgaWYgKCFpc09wZW4pCi0gICAgICAg
ICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9S
ZW5kZXIoKTsKICAgICB9CiAKICAgICBvcGVuKHN0YXRlKQpAQCAtMTE0LDcgKzExNCw3IEBAIGNs
YXNzIERhc2hib2FyZFBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWQKIAogICAgICAgICBpZiAodGhp
cy5fbmVlZHNTdGF0dXNVcGRhdGUpIHsKICAgICAgICAgICAgIGZvciAodmFyIHN0YXR1c1ZpZXcg
b2YgdGhpcy5fc3RhdHVzVmlld3MpCi0gICAgICAgICAgICAgICAgc3RhdHVzVmlldy51cGRhdGVS
ZW5kZXJpbmcoKTsKKyAgICAgICAgICAgICAgICBzdGF0dXNWaWV3LmVucXVldWVUb1JlbmRlcigp
OwogICAgICAgICAgICAgdGhpcy5fbmVlZHNTdGF0dXNVcGRhdGUgPSBmYWxzZTsKICAgICAgICAg
fQogICAgIH0KQEAgLTE1NSw3ICsxNTUsNyBAQCBjbGFzcyBEYXNoYm9hcmRQYWdlIGV4dGVuZHMg
UGFnZVdpdGhIZWFkCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fbmVlZHNT
dGF0dXNVcGRhdGUgPSB0cnVlOwotICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy51cGRh
dGVSZW5kZXJpbmcoKTsgfSwgMTApOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5l
bnF1ZXVlVG9SZW5kZXIoKTsgfSwgMTApOwogICAgIH0KIAogICAgIHN0YXRpYyBodG1sVGVtcGxh
dGUoKQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9oZWFk
aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvaGVhZGluZy5qcwkocmV2aXNpb24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9oZWFkaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIGNsYXNzIEhlYWRpbmcgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICh0aGlzLl90b29sYmFyKQotICAgICAgICAgICAgdGhpcy5fdG9vbGJh
ci51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXIuZW5xdWV1ZVRv
UmVuZGVyKCk7CiAKICAgICAgICAgdmFyIGN1cnJlbnRQYWdlID0gdGhpcy5fcm91dGVyLmN1cnJl
bnRQYWdlKCk7CiAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJlZEN1cnJlbnRQYWdlID09IGN1cnJl
bnRQYWdlKQpJbmRleDogV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9w
YWdlLXdpdGgtaGVhZGluZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1oZWFkaW5nLmpzCShyZXZpc2lvbiAyMTA4NDEp
CisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utd2l0aC1o
ZWFkaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFBhZ2VXaXRo
SGVhZGluZyBleHRlbmRzIFBhZ2UgewogICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRC
ZWZvcmUodGhpcy5oZWFkaW5nKCkuZWxlbWVudCgpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQp
OwogCiAgICAgICAgIHN1cGVyLnJlbmRlcigpOwotICAgICAgICB0aGlzLmhlYWRpbmcoKS51cGRh
dGVSZW5kZXJpbmcoKTsKKyAgICAgICAgdGhpcy5oZWFkaW5nKCkuZW5xdWV1ZVRvUmVuZGVyKCk7
CiAgICAgfQogCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCkluZGV4OiBXZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2UuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLmpzCShyZXZpc2lvbiAyMTA4
NDEpCisrKyBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2UuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAgY2xhc3MgUGFnZSBleHRlbmRzIENvbXBv
bmVudEJhc2UgewogICAgICAgICBpZiAodGhpcy5fcm91dGVyKQogICAgICAgICAgICAgdGhpcy5f
cm91dGVyLnBhZ2VEaWRPcGVuKHRoaXMpOwogICAgICAgICB0aGlzLnVwZGF0ZUZyb21TZXJpYWxp
emVkU3RhdGUoc3RhdGUsIHRydWUpOwotICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlcmluZygpOwor
ICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwogICAgIH0KIAogICAgIHJlbmRlcigpCklu
ZGV4OiBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFn
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3Bh
Z2VzL3N1bW1hcnktcGFnZS5qcwkocmV2aXNpb24gMjEwODQxKQorKysgV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgU3VtbWFyeVBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRp
bgogICAgICAgICB2YXIgY3VycmVudCA9IERhdGUubm93KCk7CiAgICAgICAgIHZhciB0aW1lUmFu
Z2UgPSBbY3VycmVudCAtIDI0ICogMzYwMCAqIDEwMDAsIGN1cnJlbnRdOwogICAgICAgICBmb3Ig
KHZhciBncm91cCBvZiB0aGlzLl9jb25maWdHcm91cHMpCi0gICAgICAgICAgICBncm91cC5mZXRj
aEFuZENvbXB1dGVTdW1tYXJ5KHRpbWVSYW5nZSkudGhlbigoKSA9PiB7IHRoaXMudXBkYXRlUmVu
ZGVyaW5nKCk7IH0pOworICAgICAgICAgICAgZ3JvdXAuZmV0Y2hBbmRDb21wdXRlU3VtbWFyeSh0
aW1lUmFuZ2UpLnRoZW4oKCkgPT4geyB0aGlzLmVucXVldWVUb1JlbmRlcigpOyB9KTsKICAgICB9
CiAKICAgICByZW5kZXIoKQpAQCAtMTA2LDcgKzEwNiw3IEBAIGNsYXNzIFN1bW1hcnlQYWdlIGV4
dGVuZHMgUGFnZVdpdGhIZWFkaW4KICAgICAgICAgdmFyIHJhdGlvR3JhcGggPSBuZXcgUmF0aW9C
YXJHcmFwaCgpOwogCiAgICAgICAgIGlmIChjb25maWd1cmF0aW9uTGlzdC5sZW5ndGggPT0gMCkg
ewotICAgICAgICAgICAgdGhpcy5fcmVuZGVyUXVldWUucHVzaCgoKSA9PiB7IHJhdGlvR3JhcGgu
dXBkYXRlUmVuZGVyaW5nKCk7IH0pOworICAgICAgICAgICAgdGhpcy5fcmVuZGVyUXVldWUucHVz
aCgoKSA9PiB7IHJhdGlvR3JhcGguZW5xdWV1ZVRvUmVuZGVyKCk7IH0pOwogICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQoJ3RkJywgcmF0aW9HcmFwaCk7CiAgICAgICAgIH0KIApAQCAtMTIxLDcg
KzEyMSw3IEBAIGNsYXNzIFN1bW1hcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW4KIAogICAg
IF9yZW5kZXJDZWxsKGNlbGwsIHNwaW5uZXIsIGFuY2hvciwgcmF0aW9HcmFwaCwgY29uZmlndXJh
dGlvbkdyb3VwKQogICAgIHsKLSAgICAgICAgc3Bpbm5lci51cGRhdGVSZW5kZXJpbmcoKTsKKyAg
ICAgICAgc3Bpbm5lci5lbnF1ZXVlVG9SZW5kZXIoKTsKIAogICAgICAgICBpZiAoY29uZmlndXJh
dGlvbkdyb3VwLmlzRmV0Y2hpbmcoKSkKICAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgn
ZmV0Y2hpbmcnKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFzcyBTdW1tYXJ5UGFnZSBleHRlbmRz
IFBhZ2VXaXRoSGVhZGluCiAgICAgICAgIHZhciB3YXJuaW5nVGV4dCA9IHRoaXMuX3dhcm5pbmdU
ZXh0Rm9yR3JvdXAoY29uZmlndXJhdGlvbkdyb3VwKTsKICAgICAgICAgYW5jaG9yLnRpdGxlID0g
d2FybmluZ1RleHQgfHwgJ09wZW4gY2hhcnRzJzsKICAgICAgICAgcmF0aW9HcmFwaC51cGRhdGUo
Y29uZmlndXJhdGlvbkdyb3VwLnJhdGlvKCksIGNvbmZpZ3VyYXRpb25Hcm91cC5sYWJlbCgpLCAh
IXdhcm5pbmdUZXh0KTsKLSAgICAgICAgcmF0aW9HcmFwaC51cGRhdGVSZW5kZXJpbmcoKTsKKyAg
ICAgICAgcmF0aW9HcmFwaC5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKICAgICBfd2Fybmlu
Z1RleHRGb3JHcm91cChjb25maWd1cmF0aW9uR3JvdXApCg==
</data>
<flag name="review"
          id="321115"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>