Padel Art partnerships
This Is ES Sport.
The game Dubai can’t stop playing. Put your brand where every serve, smash and rally puts eyes on it. Nine indoor courts. Maximum visibility. Zero distractions.
Players 10,000+ Across the club community
Court occupancy 90% Full courts, full attention
Nationalities 50+ A room full of decision-makers
Brandable surfaces 586 Glass, nets, banners, screens
Padel Art· Dubai · Al Quoz· Partnerships by ES Sport· Enquire Now
The environment
Full Courts.Full Attention.
Padel gives you the rarest thing in media: attention that’s volunteered. Players put their phones down. They look up. And they stay locked in: on the ball, on the court, on the glass, from first serve to last point. Your brand could live in that space. Every court of it.
Padel Art, Al Quoz
Four ways in · Through ES Sport Take A Surface, A Season Or The Whole Club. Rights, activation and hospitality built around the brand. Confirmed on enquiry.
← →
01 Professionals & executives The people who book courts on a weekday and bring clients on a weekend.
02 50+ nationalities A community drawn from across Dubai’s international business base.
03 Active lifestyle consumers Players who invest in kit, wellness and the time to play several times a week.
04 Families & social players Junior camps, ladies leagues and the social game that fills the club floor.
Indoor courts 9 Eight premium, one VIP.
Growth in padel courts 6× Worldwide since 2016.
Events and tournaments 50+ Hosted every year.
The canvas
Every Surface Is Available.
Court glass: 18 panels per court, nine courts, 162 glass panels across the club. Behind every rally, every photo, every reel filmed at the club. The surface that leaves the building.
Net covers at the centre of every court, centre of every frame. Court banners in pitch-side placements on every court. Screens on the club floor, away from the courts: café, lounge and VIP, reception and the Padel Outlet.
Padel Art, club floor
Court glass
Net covers
Court banners
Screens
ONE COURT · PLAN VIEW
18 PER COURT
CLUB FLOOR · AWAY FROM THE COURTS
CAFÉ
LOUNGE & VIP
RECEPTION
PADEL OUTLET
× 9 courts · 162 glass panels across the club
162
Glass panels
Behind every rally, every photo, every reel filmed at the club. The surface that leaves the building.
✓ VIP court and lounge. An exclusive court and private lounge for hosting, finals and client days.✓ Café and co-working. A curated café and work environment where players stay long after the game.✓ Padel Outlet. On-site retail carrying premium gear from top global brands.✓ Conference room. Meeting space on site. Corporate days that run sport and business together.
Already done here
A Bank Already Put Its Name On It.
A leading regional bank took title sponsorship of an international tournament at Padel Art. Their name on the whole event. Andrés Iniesta on court. Full house. The template is proven. The next one is yours for the taking.
A top-three event globally on the international pro tour. Andrés Iniesta and Tito Allemandi on court. The title slot is now open.
Tournament night, Padel Art
Partnership What can a brand own at Padel Art?
Events: a tournament, a league or a season of finals nights. Venue: the glass, nets, banners and screens across all nine courts. Digital: reels, takeovers and tournament coverage. Activations: sampling, launches, booths and challenges on the club floor.
Reach How many people does the club reach?
10,000 plus players across the community, 50 plus nationalities and 90% court occupancy, with over 100,000 people reached every month on the club’s digital channels.
Precedent Has a brand done this before?
Yes. A leading regional bank took title sponsorship of an international tournament at Padel Art, with Andrés Iniesta and Tito Allemandi on court. That title slot is now open.
Visit Can we see the club first?
Yes. Forty-five minutes at the club will do more than any deck. Book a walkthrough with ES Sport and we will bring the full audience and inventory numbers with us.
Booking How do we start?
Tell us the brand, the objective and the budget range you are working with. ES Sport comes back with the rights and activation options that fit.
KGZ1bmN0aW9uKCl7CnZhciBwbGFuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGFuIik7aWYoIXBsYW4pcmV0dXJuOwp2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibEdsYXNzIiksbm49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxOZXQiKSxiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsQmFubmVyIik7CmZ1bmN0aW9uIGQocCx4LHksdyxoLGNscyl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtyLnNldEF0dHJpYnV0ZSgieCIseCk7ci5zZXRBdHRyaWJ1dGUoInkiLHkpO3Iuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdyk7ci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaCk7ci5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic3VyZmFjZSAiK2Nscyk7ci5zZXRBdHRyaWJ1dGUoImZpbGwiLCIjRkY0NzEzIik7cC5hcHBlbmRDaGlsZChyKTt9CnZhciBzOwpmb3Iocz0wO3M8NTtzKyspe2QoZyw5MysxMTYqcywzMiwxMTAsNywiZyIpO2QoZyw5MysxMTYqcywzNDEsMTEwLDcsImciKTt9CmZvcihzPTA7czw0O3MrKyl7ZChnLDgyLDQzKzc1KnMsNyw2OSwiZyIpO2QoZyw2NzEsNDMrNzUqcyw3LDY5LCJnIik7fQpmb3Iocz0wO3M8MzI7cysrKXtkKG5uLDM3Miw0MSs5LjM3NSpzLDE2LDcsIm4iKTt9CltbMTAwLDE0XSxbMTk2LDE0XSxbMjkyLDE0XSxbMzg4LDE0XSxbNDg0LDE0XSxbNTgwLDE0XSxbMTAwLDM1Nl0sWzE5NiwzNTZdLFsyOTIsMzU2XSxbMzg4LDM1Nl0sWzQ4NCwzNTZdLFs1ODAsMzU2XV0uZm9yRWFjaChmdW5jdGlvbihlKXtkKGIsZVswXSxlWzFdLDgwLDE0LCJiIik7fSk7CmQoYiw0NCwxNzAsMjYsNDQsImIiKTtkKGIsNjkyLDE3MCwyNiw0NCwiYiIpOwp2YXIgbWluaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWluaSIpO2ZvcihzPTA7czw5O3MrKyl7bWluaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIikpO30KdmFyIG09bWluaS5xdWVyeVNlbGVjdG9yQWxsKCJpIiksc2hvdHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3Nob3QgLnBoIik7CnZhciBoPXsKIGdsYXNzOntwbGFuOiIxOCBQRVIgQ09VUlQiLGNvdXJ0OnRydWUsbjoiMTYyIix0OiJHbGFzcyBwYW5lbHMiLG1pbmk6Ilx1MDBkNyA5IGNvdXJ0cyBcdTAwYjcgMTYyIGdsYXNzIHBhbmVscyBhY3Jvc3MgdGhlIGNsdWIiLGQ6IkJlaGluZCBldmVyeSByYWxseSwgZXZlcnkgcGhvdG8sIGV2ZXJ5IHJlZWwgZmlsbWVkIGF0IHRoZSBjbHViLiBUaGUgc3VyZmFjZSB0aGF0IGxlYXZlcyB0aGUgYnVpbGRpbmcuIn0sCiBuZXQ6e3BsYW46IjMyIFBFUiBORVQiLGNvdXJ0OnRydWUsbjoiMjg4Iix0OiJOZXQgbG9nbyBwb3NpdGlvbnMiLG1pbmk6Ilx1MDBkNyA5IG5ldHMgXHUwMGI3IDI4OCBsb2dvIHBvc2l0aW9ucyBhY3Jvc3MgdGhlIGNsdWIiLGQ6IlRoZSBvbmUgdGhpbmcgYm90aCB0ZWFtcyBsb29rIGF0IGZvciB0aGUgZW50aXJlIG1hdGNoLCBhbmQgdGhlIGJhY2tkcm9wIHRvIGV2ZXJ5IG1hdGNoIHBob3RvLiJ9LAogYmFubmVyOntwbGFuOiJVUCBUTyAxNCBQRVIgQ09VUlQiLGNvdXJ0OnRydWUsbjoiMTI2Iix0OiJDb3VydCBiYW5uZXJzIixtaW5pOiJcdTAwZDcgOSBjb3VydHMgXHUwMGI3IHVwIHRvIDEyNiBiYW5uZXJzIGFjcm9zcyB0aGUgY2x1YiIsZDoiUGVyaW1ldGVyIHNwYWNlIGF0IHNwZWN0YXRvciBoZWlnaHQsIGZvciB0aGUgbWVzc2FnZSB0aGF0IG5lZWRzIHJlYWRpbmcgcmF0aGVyIHRoYW4gZ2xhbmNpbmcuIn0sCiBzY3JlZW46e3BsYW46IiIsY291cnQ6ZmFsc2UsbjoiMTAiLHQ6IlNjcmVlbnMgYWNyb3NzIHRoZSBjbHViIixtaW5pOiJBY3Jvc3MgdGhlIGNhZlx1MDBlOSwgbG91bmdlLCByZWNlcHRpb24gYW5kIG91dGxldCIsZDoiVGhlIG9ubHkgaW52ZW50b3J5IHlvdSBjYW4gY2hhbmdlIGRhaWx5LiBSb3RhdGUgY3JlYXRpdmUsIGRheXBhcnQgdGhlIG1lc3NhZ2UsIHJ1biBhIGNhbXBhaWduIGxpdmUuIn0KfTsKdmFyIHJlZHVjZT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSkiKS5tYXRjaGVzOwp2YXIgYnRucz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubGF5ZXIiKTsKZnVuY3Rpb24gcGljayhrKXsKIGJ0bnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIix0LmRhdGFzZXQubGF5ZXI9PT1rPyJ0cnVlIjoiZmFsc2UiKTt9KTsKIHZhciBhbGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3BsYW4gLnN1cmZhY2UiKTthbGwuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoImxpdCIpO30pOwogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3BsYW4gLnpyIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoImxpdCIpO30pOwogaWYoaz09PSJzY3JlZW4iKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjcGxhbiAuenIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZCgibGl0Iik7fSk7fQogZWxzZXt2YXIgbGl0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNwbGFuIC4iKyh7Z2xhc3M6ImciLG5ldDoibiIsYmFubmVyOiJiIn0pW2tdKTtsaXQuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKHJlZHVjZSl7ZS5jbGFzc0xpc3QuYWRkKCJsaXQiKTt9ZWxzZXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5jbGFzc0xpc3QuYWRkKCJsaXQiKTt9LDEyKmkpO319KTt9CiB2YXIgc3A9aFtrXTtwbGFuLmNsYXNzTGlzdC50b2dnbGUoImRpbSIsIXNwLmNvdXJ0KTsKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGFuQ291bnQiKS50ZXh0Q29udGVudD1zcC5wbGFuOwogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNuIikudGV4dENvbnRlbnQ9c3AubjsKIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdCIpLnRleHRDb250ZW50PXNwLnQ7CiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2QiKS50ZXh0Q29udGVudD1zcC5kOwogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1pbmlDYXAiKS50ZXh0Q29udGVudD1zcC5taW5pOwogc2hvdHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNsYXNzTGlzdC50b2dnbGUoIm9uIix0LmRhdGFzZXQucGg9PT1rKTt9KTsKIG0uZm9yRWFjaChmdW5jdGlvbihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoIm9uIik7fSk7CiBpZihzcC5jb3VydCl7bS5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYocmVkdWNlKXtlLmNsYXNzTGlzdC5hZGQoIm9uIik7fWVsc2V7c2V0VGltZW91dChmdW5jdGlvbigpe2UuY2xhc3NMaXN0LmFkZCgib24iKTt9LDU1KmkpO319KTt9Cn0KYnRucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cGljayhlLmRhdGFzZXQubGF5ZXIpO30pO30pOwpwaWNrKCJnbGFzcyIpOwp9KSgpOw==
×
Enquire
Partner WithPadel Art.
We’ll get back to you.
IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzLXBhZ2UiKTtlJiZlLmNsYXNzTGlzdC5hZGQoImpzIiksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQ9bnVsbDt0cnl7dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZXNUaGVtZSIpfWNhdGNoKFMpe30ibGlnaHQiPT09dHx8ImRhcmsiPT09dD9lLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsdCk6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJmUuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIiwibGlnaHQiKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhlbWVCdG4iKSxhPXdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzO2Z1bmN0aW9uIG8odCl7ZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLHQpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZXNUaGVtZSIsdCl9Y2F0Y2goUyl7fX1uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciB0PSJsaWdodCI9PT1lLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpPyJkYXJrIjoibGlnaHQiO2lmKG4uY2xhc3NMaXN0LmFkZCgic3BpbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmNsYXNzTGlzdC5yZW1vdmUoInNwaW4iKX0sNTIwKSwhYSYmZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbil7dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWkubGVmdCtpLndpZHRoLzIscj1pLnRvcCtpLmhlaWdodC8yLHM9TWF0aC5oeXBvdChNYXRoLm1heChjLHdpbmRvdy5pbm5lcldpZHRoLWMpLE1hdGgubWF4KHIsd2luZG93LmlubmVySGVpZ2h0LXIpKTtkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGZ1bmN0aW9uKCl7byh0KX0pLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtlLmFuaW1hdGUoe2NsaXBQYXRoOlsiY2lyY2xlKDBweCBhdCAiK2MrInB4ICIrcisicHgpIiwiY2lyY2xlKCIrcysicHggYXQgIitjKyJweCAiK3IrInB4KSJdfSx7ZHVyYXRpb246NjIwLGVhc2luZzoiY3ViaWMtYmV6aWVyKC40LDAsLjIsMSkiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLW5ldyhyb290KSJ9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7fSl9ZWxzZSFmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQoInRoZW1pbmciKSxvKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsYXNzTGlzdC5yZW1vdmUoInRoZW1pbmciKX0sNTYwKX0odCl9KTt2YXIgaT1mdW5jdGlvbigpe307IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlcm9UaXRsZSIpLHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlcm8tcGlsbGFycyIpO2lmKGUmJnQmJiFhJiZlLmFuaW1hdGUpe3ZhciBuPTI0MCxvPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10sYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIG8oZSxhKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtvLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt0LmNsYXNzTmFtZT0iYyIsdC50ZXh0Q29udGVudD1lLG8uYXBwZW5kQ2hpbGQodCksbi5wdXNoKHQpfSksYS5hcHBlbmRDaGlsZChvKSx0LnB1c2gobyl9fSl9cmV0dXJuIGUuaW5uZXJIVE1MPSIiLGEuZm9yRWFjaChmdW5jdGlvbih0KXtpZigzPT09dC5ub2RlVHlwZSlvKHQudGV4dENvbnRlbnQsZSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtuLmNsYXNzTmFtZT10LmNsYXNzTmFtZSxlLmFwcGVuZENoaWxkKG4pLG8odC50ZXh0Q29udGVudCxuKX19KSx7d29yZHM6dCxjaGFyczpufX0oZSksYz10LnF1ZXJ5U2VsZWN0b3JBbGwoImEiKTt0LmNsYXNzTGlzdC5hZGQoImxpZnQiKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIwIn0pLGk9ZnVuY3Rpb24oKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVhZHk/ZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihyKS5jYXRjaChyKTpyKCl9fWZ1bmN0aW9uIHIoKXt2YXIgYT1mdW5jdGlvbigpe3ZhciB0PWUucXVlcnlTZWxlY3RvcigiZW0iKTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10LnF1ZXJ5U2VsZWN0b3JBbGwoIi53Iik7aWYobi5sZW5ndGg8MilyZXR1cm4gbnVsbDtmb3IodmFyIGE9blswXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLG89blsxXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLGk9bnVsbCxjPW8ubGVuZ3RoLTE7Yz49MDtjLS0paWYoInQiPT09b1tjXS50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpKXtpPW9bY107YnJlYWt9cmV0dXJuIGFbMF0mJmFbMV0mJmk/W2FbMF0sYVsxXSxpXTpudWxsfSgpO2lmKCFhfHxjLmxlbmd0aDwzKXJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIifSksdm9pZCB0LmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmNoYXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGk9W107QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUsdCl7dmFyIG49YVt0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aS5wdXNoKHtlbDplLGR4Om4ubGVmdC1vLmxlZnQsZHk6bi50b3Atby50b3B9KX0pO3ZhciByPTExODAscz0wO2kuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBvPTFlMyszODAqdDtzPU1hdGgubWF4KHMsbys1MCtyKTt2YXIgaT1nZXRDb21wdXRlZFN0eWxlKGFbdF0pLmNvbG9yO2FbdF0uYW5pbWF0ZShbe3RyYW5zZm9ybToic2NhbGUoMSkiLGNvbG9yOml9LHt0cmFuc2Zvcm06InNjYWxlKDEuMykiLGNvbG9yOiIjRUJCNDQ2IixvZmZzZXQ6LjMzLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4yNSwuNDYsLjQ1LC45NCkifSx7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6aSxlYXNpbmc6ImN1YmljLWJlemllciguMzQsMS41NiwuNjQsMSkifV0se2R1cmF0aW9uOjQ1MCxkZWxheTpvLGZpbGw6Im5vbmUifSk7dmFyIGM9InRyYW5zbGF0ZSgiK2UuZHgrInB4LCIrZS5keSsicHgpIHNjYWxlKDEuNCwxLjQpIjtlLmVsLmFuaW1hdGUoW3t0cmFuc2Zvcm06YyxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06YyxvcGFjaXR5OjEsb2Zmc2V0OjEzMC9yfSx7dHJhbnNmb3JtOmMsb3BhY2l0eToxLG9mZnNldDpuL3IsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvcixlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3IsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246cixkZWxheTpvKzUwLGZpbGw6ImJvdGgifSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUpe2UuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGUuc3R5bGUub3BhY2l0eT0iIixlLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHQuY2xhc3NMaXN0LnJlbW92ZSgibGlmdCIpfSxzKzQwKX19KCk7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzTG9hZGVyIikscj1kb2N1bWVudC5ib2R5LHM9ITA7dHJ5e3M9ITB9Y2F0Y2goUyl7fWZ1bmN0aW9uIGwoKXtjLmNsYXNzTGlzdC5hZGQoImlzLW91dCIpLHIuY2xhc3NMaXN0LnJlbW92ZSgiZXNsLWxvY2siKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5oaWRkZW49ITB9LDcwMCk7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oImVzU2VlbkxvYWRlciIsIjEiKX1jYXRjaChTKXt9c2V0VGltZW91dChpLDMwMCl9cz8oYy5oaWRkZW49ITAsci5jbGFzc0xpc3QucmVtb3ZlKCJlc2wtbG9jayIpLHNldFRpbWVvdXQoaSwyNjApKTooc2V0VGltZW91dChsLDIwNTApLGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGwpKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2FyLWJ0biIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmRhdGFzZXQudGFyZ2V0KTtpZih0KXt2YXIgbj10LmZpcnN0RWxlbWVudENoaWxkLGE9bj9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKzQ6LjgqdC5jbGllbnRXaWR0aDt0LnNjcm9sbEJ5KHtsZWZ0OmEqK2UuZGF0YXNldC5kaXIsYmVoYXZpb3I6InNtb290aCJ9KX19KX0pLGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmZjaGlwIiksYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubmNhcmRbZGF0YS1zcG9ydF0iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYXRFbXB0eSIpO2lmKHQubGVuZ3RoJiZhLmxlbmd0aCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG89ZS5kYXRhc2V0LmZpbHRlcixpPTA7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSJhbGwiPT09b3x8ZS5kYXRhc2V0LnNwb3J0PT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLWhpZGRlbiIsIXQpLHQmJihpKz0xLGUuY2xhc3NMaXN0LmFkZCgidiIpKX0pLG4mJihuLmhpZGRlbj1pPjApLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yb3csLmNhdGFsb2d1ZS13cmFwIikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgYz1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZCIpO2lmKGMubGVuZ3RoKXt2YXIgdj1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZDpub3QoLmlzLWhpZGRlbikiKS5sZW5ndGg7ci5jbGFzc0xpc3QudG9nZ2xlKCJpcy1lbXB0eSIsdj09PTApfX0pLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGFzZXQuZmlsdGVyPT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLW9uIix0KSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsdD8idHJ1ZSI6ImZhbHNlIil9KX0pfSl9fSgpO3ZhciBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZmlNb2RhbCIpLHU9ZC5xdWVyeVNlbGVjdG9yKCIucmZpLWRsZyIpLGY9bnVsbCxtPW51bGwsaD0wO2Z1bmN0aW9uIHAoKXtpZighKGgrKz4wKSl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2U+MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWUrInB4IiksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn19ZnVuY3Rpb24geSgpeyhoPU1hdGgubWF4KDAsaC0xKSk+MHx8KGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9IiIsZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9IiIpfWZ1bmN0aW9uIHYoKXtkLmhpZGRlbnx8KGQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGQuY2xhc3NMaXN0LmFkZCgiaXMtY2xvc2luZyIpLGNsZWFyVGltZW91dChtKSxtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhpZGRlbj0hMCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSx5KCksZiYmZi5mb2N1cyYmZi5mb2N1cygpLGY9bnVsbH0sYT8wOjI0MCkpfWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW9wZW4tcmZpXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdlBhbmVsIik7aWYobyYmIW8uaGlkZGVuKXtvLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxvLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKTt2YXIgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2QnVyZ2VyIik7aSYmKGkuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxpLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSIpKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5oaWRkZW49ITAsby5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKX1uPWUsY2xlYXJUaW1lb3V0KG0pLGY9bnx8bnVsbCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSxkLmhpZGRlbj0hMSxwKCksZC5vZmZzZXRXaWR0aCxkLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYtZmlyc3QiKTtpZihlKXRyeXtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9Y2F0Y2goUyl7ZS5mb2N1cygpfX0sYT8wOjI2MCl9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLXJmaV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7digpfSl9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXsiRXNjYXBlIiE9PWUua2V5fHxkLmhpZGRlbnx8digpfSksZC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtpZigiVGFiIj09PWUua2V5KXtmb3IodmFyIHQ9dS5xdWVyeVNlbGVjdG9yQWxsKCJhW2hyZWZdLCBidXR0b246bm90KFtkaXNhYmxlZF0pLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKW51bGwhPT10W2FdLm9mZnNldFBhcmVudCYmbi5wdXNoKHRbYV0pO2lmKG4ubGVuZ3RoKXt2YXIgbz1uWzBdLGk9bltuLmxlbmd0aC0xXTtlLnNoaWZ0S2V5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09bz8oZS5wcmV2ZW50RGVmYXVsdCgpLGkuZm9jdXMoKSk6ZS5zaGlmdEtleXx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWl8fChlLnByZXZlbnREZWZhdWx0KCksby5mb2N1cygpKX19fSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZm9ybS5mb3JtIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWUudGFyZ2V0O2lmKHQuY2hlY2tWYWxpZGl0eSgpKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5zZW50Iil8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZW50IiksYT10LmRhdGFzZXQuZW5kcG9pbnQsbz1mdW5jdGlvbigpe3ZhciBzPW47biYmcy5jbGFzc0xpc3QuYWRkKCJvbiIpO3QucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcy5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07YT9mZXRjaChhLHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKHQpfSkudGhlbihvKS5jYXRjaChvKTpvKCl9ZWxzZSB0LnJlcG9ydFZhbGlkaXR5KCl9KX0pO3ZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZCdXJnZXIiKSxFPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZQYW5lbCIpLGI9bnVsbDtmdW5jdGlvbiBMKCl7RS5oaWRkZW58fChFLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxFLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKSxnLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUiKSxjbGVhclRpbWVvdXQoYiksYj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RS5oaWRkZW49ITAsRS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKSl9Zy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtFLmhpZGRlbj8oY2xlYXJUaW1lb3V0KGIpLEUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLEUuaGlkZGVuPSExLHAoKSxFLm9mZnNldFdpZHRoLEUuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgbWVudSIpKTpMKCl9KSxFLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLW1lbnVdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe0woKX0pfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7IkVzY2FwZSIhPT1lLmtleXx8RS5oaWRkZW58fChMKCksZy5mb2N1cygpKX0pO3ZhciB3PXdpbmRvdy5tYXRjaE1lZGlhKCIobWluLXdpZHRoOiAxMDAxcHgpIikseD1mdW5jdGlvbihlKXtlLm1hdGNoZXMmJkwoKX07dy5hZGRFdmVudExpc3RlbmVyP3cuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix4KTp3LmFkZExpc3RlbmVyJiZ3LmFkZExpc3RlbmVyKHgpO3ZhciBBPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXYiKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbigpe0EuY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX0pO3ZhciBxPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pc0ludGVyc2VjdGluZyYmKGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoInYiKSxxLnVub2JzZXJ2ZShlLnRhcmdldCkpfSl9LHt0aHJlc2hvbGQ6LjA4fSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnIsIC5zZWN0aW9uLWhlYWRlciIpLmZvckVhY2goZnVuY3Rpb24oZSl7cS5vYnNlcnZlKGUpfSl9KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMsdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXN4VGl0bGUiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc3hQaWxsYXJzIik7aWYodCYmbiYmIWUmJnQuYW5pbWF0ZSl7dmFyIGE9MjQwLG89ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIGEoZSxuKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLmNsYXNzTmFtZT0iYyIsbi50ZXh0Q29udGVudD1lLGEuYXBwZW5kQ2hpbGQobiksdC5wdXNoKG4pfSksbi5hcHBlbmRDaGlsZChhKX19KX1yZXR1cm4gZS5pbm5lckhUTUw9IiIsbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKDM9PT10Lm5vZGVUeXBlKWEodC50ZXh0Q29udGVudCxlKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO24uY2xhc3NOYW1lPXQuY2xhc3NOYW1lLGUuYXBwZW5kQ2hpbGQobiksYSh0LnRleHRDb250ZW50LG4pfX0pLHR9KHQpLGk9bi5xdWVyeVNlbGVjdG9yKCJhIik7bi5jbGFzc0xpc3QuYWRkKCJsaWZ0IiksaSYmKGkuc3R5bGUub3BhY2l0eT0iMCIpO3ZhciBlc3hUYWc9bi5xdWVyeVNlbGVjdG9yKCJsaTpudGgtY2hpbGQoMikiKTtlc3hUYWcmJmVzeFRhZy5jbGFzc0xpc3QuYWRkKCJ0YWctd2FpdCIpO3ZhciBjPSEwO3RyeXtjPSEwfWNhdGNoKHMpe31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLnJlYWR5P2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4ocikuY2F0Y2gocik6cigpfSxjPzI2MDoyMzUwKX1mdW5jdGlvbiByKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoImVtIik7aWYoIWUpcmV0dXJuIG51bGw7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yQWxsKCIudyIpO2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbz1wYXJzZUludChuLmdldEF0dHJpYnV0ZSgiZGF0YS1zcmMtaW5kZXgiKXx8IjAiLDEwKXx8MCxpPWFbMF0ucXVlcnlTZWxlY3RvckFsbCgiLmMiKTtyZXR1cm4gaVtvXXx8aVswXXx8bnVsbH0oKTtpZighZXx8IWkpcmV0dXJuIGkmJihpLnN0eWxlLm9wYWNpdHk9IiIpLGVzeFRhZyYmZXN4VGFnLmNsYXNzTGlzdC5yZW1vdmUoInRhZy13YWl0Iiksdm9pZCBuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1NYXRoLm1pbigxLjQsTWF0aC5tYXgoLjIsYy5oZWlnaHQvci5oZWlnaHQqMS4xNSkpLGw9Yy5sZWZ0LXIubGVmdCxkPWMuYm90dG9tLXIuYm90dG9tLHU9MTE4MCxmPTFlMyxtPWdldENvbXB1dGVkU3R5bGUoZSkuY29sb3I7ZS5hbmltYXRlKFt7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6bX0se3RyYW5zZm9ybToic2NhbGUoMS4zKSIsY29sb3I6IiNFQkI0NDYiLG9mZnNldDouMzMsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjI1LC40NiwuNDUsLjk0KSJ9LHt0cmFuc2Zvcm06InNjYWxlKDEpIixjb2xvcjptLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4zNCwxLjU2LC42NCwxKSJ9XSx7ZHVyYXRpb246NDUwLGRlbGF5OmYsZmlsbDoibm9uZSJ9KTt2YXIgaD0idHJhbnNsYXRlKCIrbCsicHgsIitkKyJweCkgc2NhbGUoIitzKyIsIitzKyIpIjtpLmFuaW1hdGUoW3t0cmFuc2Zvcm06aCxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06aCxvcGFjaXR5OjEsb2Zmc2V0OjEzMC91fSx7dHJhbnNmb3JtOmgsb3BhY2l0eToxLG9mZnNldDphL3UsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvdSxlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3UsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246dSxkZWxheToxMDUwLGZpbGw6ImJvdGgifSksc2V0VGltZW91dChmdW5jdGlvbigpe2kuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGkuc3R5bGUub3BhY2l0eT0iIixpLnN0eWxlLnRyYW5zZm9ybT0iIixuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKSxlc3hUYWcmJihlc3hUYWcuY2xhc3NMaXN0LnJlbW92ZSgidGFnLXdhaXQiKSxlc3hUYWcuY2xhc3NMaXN0LmFkZCgidGFnLWluIikpfSwyMjcwKX19KCksZnVuY3Rpb24oKXtpZigoIXdpbmRvdy5tYXRjaE1lZGlhfHwhd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcykmJiJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtbyIpO3ZhciBlPVsiLnN0YWNrID4gLml0ZW0iLCIuYWNjLWl0ZW0iLCIuZmFxLWl0ZW0iLCIuYm91dCIsIi52c3RvcnkiLCIudGtib3giLCIuYWItZnJhbWUiLCIuY21wIHRib2R5IHRkIiwiLmNtcCB0aGVhZCB0aCIsIi50YXBlLWNlbGwiLCIudnMtcm93IiwiLnZlbnVlLXNwZWNzID4gKiIsIi56cC10aWVyIiwiLnRrZ3JpZCB0ZCIsIi5zdGF0cyA+IC5zdGF0IiwiLnN0YXRzID4gLnN0IiwiLnZpdGFscyA+IC52aXRhbCIsIi5oZXJvLW1ldGEgPiAuaG0iLCIudGllcnMgPiAudGllciIsIi52Z3JpZCA+IC52YmxvY2siLCIua2MtY2FyZCIsIi5hYi1zcGVjIiwiLmluYy1saXN0ID4gbGkiLCIuYXJ0cyA+IC5hcnQiLCIuZm9yayA+IC5yb3V0ZSIsIi5jYXRhbG9ndWUgLm5jYXJkIiwiLm9jYXJkIiwiLnBjYXJkIiwiLmJjYXJkIiwiLnBjYXJkcCIsIi5maXZldy1ncmlkID4gKiIsIi5sb2dvcyA+IC5sb2dvIiwiLmVzbS1iYW5kIiwiLm1hcC1jaGlwIiwiLnRhcGUtZ3JpZCA+IC50YXBlLWNlbGwiLCIuZ2NhcmQiXSx0PWUuam9pbigiLCIpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW1vXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKHQpfHxlLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1tbyIpfSk7dmFyIG49W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LGE9bnVsbCxvPTA7dHJ5e3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKX1jYXRjaChpKXtyZXR1cm59dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmhhc0F0dHJpYnV0ZSgiZGF0YS1tbyIpKXt2YXIgdD1lLnBhcmVudE5vZGU7bz10PT09YT9vKzE6MCxhPXQsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbW8iLCIiKSxlLnN0eWxlLnNldFByb3BlcnR5KCItLW1vLWQiLE1hdGgubWluKDUwKm8sMzAwKSsibXMiKSxuLnB1c2goZSl9fSl9KSxuLmxlbmd0aCl7dmFyIGE9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0IiksYS51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7cm9vdE1hcmdpbjoiMHB4IDBweCAtNiUgMHB4Iix0aHJlc2hvbGQ6LjA1fSk7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Eub2JzZXJ2ZShlKX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmZS5jbGFzc0xpc3QuYWRkKCJtby1saXQiKX19KX0sNGUzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmNsYXNzTGlzdC5jb250YWlucygibW8tbGl0Iikpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC50b3A8aW5uZXJIZWlnaHQmJnQuYm90dG9tPjAmJnQuaGVpZ2h0JiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw2MCl9KX19fSgpLGZ1bmN0aW9uKCl7WyJ4cUZvcm0iLCJyZmkiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3QmJnQuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixmdW5jdGlvbihlKXt0LmNoZWNrVmFsaWRpdHkoKSYmKCh0LmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpfHwiIikudHJpbSgpfHwod2luZG93LmxvY2F0aW9uLmhyZWY9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1lLnF1ZXJ5U2VsZWN0b3IoIltuYW1lPWV2ZW50LW5hbWVdIik7cmV0dXJuIG4mJnQucHVzaCgiRW5xdWlyeTogIituLnZhbHVlKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSxzZWxlY3QsdGV4dGFyZWEiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWUucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPSInK24uaWQrJyJdJyksbz1hP2EudGV4dENvbnRlbnQudHJpbSgpOm4ubmFtZXx8bi5pZDtuLnZhbHVlJiZ0LnB1c2gobysiOiAiK24udmFsdWUpfSksIm1haWx0bzppbmZvQGVzLXNwb3J0LmFlP3N1YmplY3Q9IitlbmNvZGVVUklDb21wb25lbnQoKG4/bi52YWx1ZToiV2Vic2l0ZSBlbnF1aXJ5IikrIiAtIGVucXVpcnkiKSsiJmJvZHk9IitlbmNvZGVVUklDb21wb25lbnQodC5qb2luKCJcbiIpKX0odCkpKX0sITApfSk7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxTW9kYWwiKTtpZihlJiYhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImRhdGEteHEtbmF0aXZlIikpe3ZhciB0LG49d2luZG93Lm1hdGNoTWVkaWEmJm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyxhPW51bGw7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGkpe2kucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbihvKXtjbGVhclRpbWVvdXQodCksYT1vLGUuaGlkZGVuPSExLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5vZmZzZXRXaWR0aCxlLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKCJpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSkiKTt0JiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG4/MDoyNjApfShvKX0pfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtY2xvc2UteHFdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpKX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKHQpeyJFc2NhcGUiIT09dC5rZXl8fGUuaGlkZGVufHxpKCl9KTt2YXIgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFGb3JtIik7byYmby5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxvLmNoZWNrVmFsaWRpdHkoKSl7dmFyIHQ9by5nZXRBdHRyaWJ1dGUoImRhdGEtZW5kcG9pbnQiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cVNlbnQiKSxhPWZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QuYWRkKCJvbiIpO28ucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07dD9mZXRjaCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKG8pfSkudGhlbihhKS5jYXRjaChhKTphKCl9ZWxzZSBvLnJlcG9ydFZhbGlkaXR5KCl9KX1mdW5jdGlvbiBpKCl7ZS5oaWRkZW58fChlLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxjbGVhclRpbWVvdXQodCksdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5oaWRkZW49ITAsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iIixhJiZhLmZvY3VzJiZhLmZvY3VzKCksYT1udWxsfSxuPzA6MzYwKSl9fSgpfSgpOwo7KGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdiIpO2lmKCFuKXJldHVybjt2YXIgZj1mdW5jdGlvbigpe24uY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX07ZigpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGYpO30pKCk7Ci8qIGV2ZW50LWV4dHJhcy5qczogYmVoYXZpb3VycyBmb3IgYXJjaGV0eXBlIEMgZXZlbnQgcGFnZXMsIGFwcGVuZGVkIGFmdGVyIG1haW4tanMuZGVjb2RlZC5qcwogICAxLiAuYWNjLWl0ZW0gYWNjb3JkaW9uIChGQVEpICAgICAgICAgIDIuIC5lcy1kZCBleHBhbmRhYmxlIHBhbmVscwogICAzLiBoZXJvIHN0YXQgY291bnQtdXAgKHJlZHVjZWQtbW90aW9uIHNhZmUpICAgNC4gcGFja2FnZSBjYXJkIC0+IGVucXVpcnkgbW9kYWwgcHJlLWZpbGwKICAgUnVsZXM6IG5vIHJlZ2V4IGxpdGVyYWxzLCBubyAtLSBkZWNyZW1lbnQgKExpdGVTcGVlZCBtaW5pZmllci1ob3N0aWxlIHRva2VucykuICovCihmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjsKdmFyIHJlZHVjZT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKLyogMSArIDI6IG9uZSBhY2NvcmRpb24gbWVjaGFuaWMgKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFjYy1pdGVtIikuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt2YXIgcT1pdGVtLnF1ZXJ5U2VsZWN0b3IoIi5hY2MtcSIpO2lmKCFxKXJldHVybjtxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciBvcGVuPWl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgib3BlbiIpO3Euc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixvcGVuPyJ0cnVlIjoiZmFsc2UiKTt9KTt9KTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVzLWRkIikuZm9yRWFjaChmdW5jdGlvbihkZCl7dmFyIGhlYWQ9ZGQucXVlcnlTZWxlY3RvcigiLmVzLWRkX19oZWFkIik7aWYoIWhlYWQpcmV0dXJuO2hlYWQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG9wZW49ZGQuZ2V0QXR0cmlidXRlKCJkYXRhLW9wZW4iKT09PSJ0cnVlIjtkZC5zZXRBdHRyaWJ1dGUoImRhdGEtb3BlbiIsb3Blbj8iZmFsc2UiOiJ0cnVlIik7aGVhZC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG9wZW4/ImZhbHNlIjoidHJ1ZSIpO30pO30pOwovKiAzOiBzdGF0IGNvdW50LXVwICovCnZhciBudW1zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGF0cyAuc3RhdCAubiIpOwppZihudW1zLmxlbmd0aCl7CiAgdmFyIHJ1bj1mdW5jdGlvbihlbCl7dmFyIHNyYz1lbC50ZXh0Q29udGVudC50cmltKCk7dmFyIGk9MCxwcmU9IiIsZGlnaXRzPSIiLHN1Zj0iIjt3aGlsZShpPHNyYy5sZW5ndGgmJihzcmMuY2hhckF0KGkpPCIwInx8c3JjLmNoYXJBdChpKT4iOSIpKXtwcmUrPXNyYy5jaGFyQXQoaSk7aSs9MTt9d2hpbGUoaTxzcmMubGVuZ3RoJiYoKHNyYy5jaGFyQXQoaSk+PSIwIiYmc3JjLmNoYXJBdChpKTw9IjkiKXx8c3JjLmNoYXJBdChpKT09PSIsIikpe2lmKHNyYy5jaGFyQXQoaSkhPT0iLCIpZGlnaXRzKz1zcmMuY2hhckF0KGkpO2krPTE7fXN1Zj1zcmMuc2xpY2UoaSk7aWYoIWRpZ2l0cyl7cmV0dXJuO312YXIgdGFyZ2V0PXBhcnNlSW50KGRpZ2l0cywxMCkscGFkPWRpZ2l0cy5sZW5ndGgsdXNlQ29tbWE9c3JjLmluZGV4T2YoIiwiKT4tMTt2YXIgZm10PWZ1bmN0aW9uKG4pe3ZhciBzPVN0cmluZyhuKTt3aGlsZShzLmxlbmd0aDxwYWQmJmRpZ2l0cy5jaGFyQXQoMCk9PT0iMCIpcz0iMCIrcztpZih1c2VDb21tYSl7dmFyIG91dD0iIixjPTAsaj1zLmxlbmd0aC0xO3doaWxlKGo+PTApe291dD1zLmNoYXJBdChqKStvdXQ7Yys9MTtpZihjJTM9PT0wJiZqPjApb3V0PSIsIitvdXQ7ai09MTt9cz1vdXQ7fXJldHVybiBwcmUrcytzdWY7fTtpZihyZWR1Y2V8fHRhcmdldD45OTk5KXtlbC50ZXh0Q29udGVudD1zcmM7cmV0dXJuO312YXIgdDA9bnVsbCxkdXI9MTQwMDt2YXIgc3RlcD1mdW5jdGlvbih0cyl7aWYodDA9PT1udWxsKXQwPXRzO3ZhciBwPU1hdGgubWluKDEsKHRzLXQwKS9kdXIpO3ZhciBlPTEtTWF0aC5wb3coMS1wLDMpO2VsLnRleHRDb250ZW50PWZtdChNYXRoLnJvdW5kKHRhcmdldCplKSk7aWYocDwxKXJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtlbHNlIGVsLnRleHRDb250ZW50PXNyYzt9O3JlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTt9OwogIGlmKCJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cmJiFyZWR1Y2Upe3ZhciBpbz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcyl7ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVuKXtpZihlbi5pc0ludGVyc2VjdGluZyl7cnVuKGVuLnRhcmdldCk7aW8udW5vYnNlcnZlKGVuLnRhcmdldCk7fX0pO30se3RocmVzaG9sZDouNH0pO251bXMuZm9yRWFjaChmdW5jdGlvbihuKXtpby5vYnNlcnZlKG4pO30pO30KfQovKiA0OiBwYWNrYWdlIGNhcmRzIGFuZCBDVEFzIGNhcnJ5aW5nIGRhdGEtY2F0IHByZS1maWxsIHRoZSBlbnF1aXJ5IGZvcm0gKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi1yZmldW2RhdGEtY2F0XSIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXtidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGNhdD1idG4uZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpfHwiIjt2YXIgc2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmLWNhdCIpO2lmKHNlbCl7Zm9yKHZhciBrPTA7azxzZWwub3B0aW9ucy5sZW5ndGg7ays9MSl7aWYoc2VsLm9wdGlvbnNba10udGV4dD09PWNhdCl7c2VsLnNlbGVjdGVkSW5kZXg9azticmVhazt9fX12YXIgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmZpIGlucHV0W25hbWU9ZWViX2NhdGVnb3J5XSIpO2lmKGgpaC52YWx1ZT1jYXQ7fSx0cnVlKTt9KTsKfSkoKTsK