Sat 24 Oct 2026 · Etihad Arena, Yas Island · Abu Dhabi Showdown Week
UFC 333 Abu Dhabi tickets and hospitality
Two world titles. One night at Etihad Arena. As an official reseller for UFC Abu Dhabi , ES Sport puts you in the seat and the hotel. Pick your category and we handle the rest.
First bell 00 Days to go · Saturday 24 October 202600 00 00
Titles 02 Featherweight and bantamweight, on one card
UFC events 24 Staged in Abu Dhabi since 2010
Capacity 18,000 Etihad Arena, Yas Island
At a glance
UFC 333 takes place on Saturday 24 October 2026 at Etihad Arena on Yas Island, Abu Dhabi, with two world title fights on one card. ES Sport sells tickets by seating category, with the price shown as you choose your seats, and can add a hotel stay to make it a full fight weekend.
Last updated 19 October 2026
About the event
UFC 333 in Abu Dhabi
UFC 333 lands at Etihad Arena, Yas Island on Saturday 24 October 2026, heading
Abu Dhabi Showdown Week. It is the capital’s 24th UFC event since 2010 and its
11th numbered card. Numbered events are where the UFC stages its biggest
matchups, and this one carries two titles.
24
UFC events in Abu Dhabi
11th
Numbered event in the city
18,000
Etihad Arena capacity
Where you sit
Your view of the Octagon
The official Etihad Arena layout for UFC 333. Reservations are made by category,
not by individual seat or section. Tap anywhere in a category to select it,
set your guests, and send the enquiry straight to our team. Every package includes
your official match ticket and one night’s hotel stay, priced per person on a
double-sharing basis.
+
−
↺
Ctrl + scroll to zoom · drag to pan · section numbers for orientation only
315
115
114
113
112
111
110
101
102
103
104
105
106
301
314
302
313
303
312
304
311
305
310
309
308
307
306
109
107
115
114
113
112
101
102
103
104
116
116
116
116
108
109
108
107
110
106
A
B
C
F
E
G
The card
UFC 333 fight card
Open any bout for the tale of the tape, a head-to-head read on the technical
numbers, and where each fight is actually decided. Card subject to change.
The venue
Etihad Arena
Voted the third-best UFC venue in the world by USA TODAY readers in 2026.
Here is what earns it that.
Etihad Arena // Yas Bay, Yas Island // 18,000 capacity
Most arenas earn their reputation over decades. This one opened with a UFC card
and never looked back.
Read the full story
Close the story
Built from a weave
HOK drew the exterior from sadu, the traditional Bedouin weaving of the Gulf.
The fascia folds and overlaps like fabric on a loom, and after dark it lights
from within, so the building reads as a lantern from across the marina.
Anchor of Yas Bay
It was finished in January 2021 as the centrepiece of Yas Bay, the waterfront
district on the southern tip of Yas Island. At 18,000 seats it is the largest
indoor arena in the Middle East.
It opened with a fight
The first event ever staged here was a UFC card. In January 2021, during the
Fight Island run, Holloway versus Kattar put spectators back inside a UFC arena
for the first time since the pandemic closed the doors.
Then came McGregor
Eight days later, UFC 257 gave the new building Poirier versus McGregor 2 as
its debut pay-per-view. UFC 267 followed that autumn and made Abu Dhabi the first
city outside Las Vegas to host four numbered events.
October belongs to Abu Dhabi
Then 280, 294, 308 and 321, each one carrying a title fight. Six numbered cards
in five years have fixed a date in October that the sport now plans its calendar
around.
Inside the room
A steep single rake puts the Octagon close and low, every seat holds a clear
view, and the ceiling carries a full production rig. Yas Bay Waterfront runs the
promenade outside, with hotels within walking distance.
Capacity 18,000
Opened January 2021
Architect HOK
Location Yas Bay, Yas Island
First ever event UFC on ABC Holloway vs Kattar
Numbered UFC cards 257 · 267 · 280 294 · 308 · 321
Global ranking No.3 UFC venue USA TODAY 2026
Sightlines Unrestricted, every tier
Parking On site, free
Accessibility Step-free, all tiers
Full house. Eighteen thousand seats wrapped tight around the floor, with the numbered cards here playing to sold-out crowds.
Fight configuration. The Octagon sits low and central with the rig overhead. This is the room UFC 333 will be staged in.
Packages
Your UFC experience starts here
ES Sport is an official reseller for UFC Abu Dhabi ticket and hotel packages,
working with Ethara and Abu Dhabi’s Department of Culture and Tourism. Every
package includes your official match ticket, one night’s accommodation on Yas
Island, all taxes and VAT, and the services of the ES Sport team in Abu Dhabi.
Tell us the category and we will come back with availability and pricing.
Categories 6, 7 and 8
Upper tier
Official match ticket, full-card seating
One night’s hotel on Yas Island
All taxes and VAT included
Best value entry into the building
Group bookings available
Enquire about this category →
Categories 3, 4 and 5
Lower bowl
Official match ticket, closer to the Octagon
One night’s hotel on Yas Island
All taxes and VAT included
Extend your stay for Showdown Week
Multi-ticket packages available
Enquire about this category →
VIP
Floor and hospitality
Floor seating closest to the Octagon
Hospitality with food and drinks included
Stay at a premium hotel on Yas Island
Dedicated contact for corporate hosting
Email info@es-sport.ae for group builds
Enquire about this category →
Partner
Working with Abu Dhabi
We’re thrilled to announce ES Sport as one of the official packages partner for sporting events in Abu Dhabi, including UFC Abu Dhabi events. This partnership strengthens our relationship and enhances the fan experience with expertly curated ticket and hotel packages in collaboration with Ethara. Our goal is to make every Abu Dhabi event unforgettable, and we are confident that ES Sport will help us achieve this. Noura Kahil Section Head, Events Bureau Abu Dhabi Tourism (DCT)
Latest articles
Read the latest from ES Sport
Booking questions
Questions
Register interest
Get in touchwith an expert.
Tell us the category, the number of seats and your dates. We will come back
with what is available and what it costs, from the people who handle these
bookings every October.
×
Enquire
Tell us what you need. We will get back to you.
d2luZG93LmVzT3BlbkVucXVpcnk9d2luZG93LmVzT3BlbkVucXVpcnl8fGZ1bmN0aW9uKGludGVyZXN0LG1lc3NhZ2Upe3ZhciBzZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIngtY2F0IiksbXNnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LW1zZyIpO2lmKHNlbCYmaW50ZXJlc3Qpe2Zvcih2YXIgaT0wO2k8c2VsLm9wdGlvbnMubGVuZ3RoO2krKylpZihzZWwub3B0aW9uc1tpXS50ZXh0PT09aW50ZXJlc3Qpe3NlbC5zZWxlY3RlZEluZGV4PWk7YnJlYWt9fXZhciBiPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLW9wZW4teHFdIik7aWYoYiliLmNsaWNrKCl9Owp3aW5kb3cuZXNNYXBGbGFzaD13aW5kb3cuZXNNYXBGbGFzaHx8ZnVuY3Rpb24oZWwsbXNnKXt2YXIgZj1lbC5xdWVyeVNlbGVjdG9yKCIubWFwLWZsYXNoIik7aWYoIWYpe2Y9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc05hbWU9Im1hcC1mbGFzaCI7Zi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpO2VsLmFwcGVuZENoaWxkKGYpfWYudGV4dENvbnRlbnQ9bXNnO2YuY2xhc3NMaXN0LmFkZCgib24iKTtjbGVhclRpbWVvdXQoZi5fdCk7Zi5fdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSwxNDAwKX07CiFmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcy1wYWdlIik7ZSYmZS5jbGFzc0xpc3QuYWRkKCJqcyIpO2NvbnN0IHQ9Imh0dHBzOi8vdWZjLmNvbS9pbWFnZXMvc3R5bGVzL2F0aGxldGVfYmlvX2Z1bGxfYm9keS9zMy8iLG49W3sic2xvdCI6Ik1haW4gZXZlbnQiLCJ3ZWlnaHQiOiJGZWF0aGVyd2VpZ2h0IHRpdGxlIGJvdXQiLCJyb3VuZHMiOiI1IHJvdW5kcyIsInRpdGxlIjp0cnVlLCJyZWQiOnsiZmlyc3QiOiJBbGV4YW5kZXIiLCJsYXN0IjoiVm9sa2Fub3Zza2kiLCJuaWNrIjoiVGhlIEdyZWF0IiwiaW5pdGlhbHMiOiJBViIsImltZyI6dCsiMjAyNi0wMS9WT0xLQU5PVlNLSV9BTEVYQU5ERVJfTF9CRUxUXzAxLTMxLnBuZz9pdG9rPWhmWlI4MXhoIiwiZmxhZyI6IkFVUyIsInJhbmsiOiJDaGFtcGlvbiIsInBmcCI6IiMyIFBGUCIsInJlY29yZCI6IjI4LTQtMCIsImFnZSI6MzgsImhlaWdodCI6IjUnNlwiIiwicmVhY2giOiI3MS41XCIiLCJsZWdSZWFjaCI6IjM2XCIiLCJneW0iOiJGcmVlc3R5bGUgRmlnaHRpbmcgR3ltIiwic3R5bGUiOiJGcmVlc3R5bGUiLCJhdmdUaW1lIjoiMTY6NTAiLCJzbHBtIjo1Ljk5LCJzYXBtIjozLjMxLCJzdHJBY2MiOjU3LCJzdHJEZWYiOjU5LCJ0ZDE1IjoxLjYzLCJ0ZERlZiI6NjksImtkMTUiOjAuMywic3ViMTUiOjAuMiwiZmluaXNoIjp7ImtvIjo0NiwiZGVjIjo0Mywic3ViIjoxMX0sInRhcmdldCI6eyJoZWFkIjo2NSwiYm9keSI6MTAsImxlZyI6MjV9LCJ0cmFpdHMiOlsiT3ZlcmhhbmQgcmlnaHQiLCJMZWcta2ljayB2b2x1bWUiLCJIYWxmLWd1YXJkIGdyb3VuZCBhbmQgcG91bmQiLCJCcm93biBiZWx0IEJKSiIsIk5hdGlvbmFsIHdyZXN0bGluZyBnb2xkIiwiMTEgc3RyYWlnaHQgdGl0bGUgZmlnaHRzIl0sInJlYWQiOiI1Ljk5IHNpZ25pZmljYW50IHN0cmlrZXMgYSBtaW51dGUgYXQgNTclIGFjY3VyYWN5IGFjcm9zcyAzLDE3OCBhdHRlbXB0cywgdGhlIGxhcmdlc3QgYm9keSBvZiB3b3JrIG9uIHRoZSBjYXJkLiBBIHF1YXJ0ZXIgb2YgZXZlcnl0aGluZyBoZSB0aHJvd3MgZ29lcyB0byB0aGUgbGVncywgNDQ3IGxlZyBzdHJpa2VzIG9uIHJlY29yZCwgd2hpY2ggaXMgaG93IGhlIGJ1eXMgdGhlIHJhbmdlIGZvciB0aGUgb3ZlcmhhbmQgcmlnaHQuIEhlIGdyYXBwbGVzIG9uIGhpcyBvd24gdGVybXM6IDc2JSBvZiBoaXMgc3RyaWtlcyBsYW5kIHN0YW5kaW5nLiJ9LCJibHVlIjp7ImZpcnN0IjoiTW92c2FyIiwibGFzdCI6IkV2bG9ldiIsIm5pY2siOiIiLCJpbml0aWFscyI6Ik1FIiwiaW1nIjp0KyIyMDI2LTAzL0VWTE9FVl9NT1ZTQVJfTF8wMy0yMS5wbmc/aXRvaz1YMnFBdUc3VCIsImZsYWciOiJSVVMiLCJyYW5rIjoiIzEiLCJwZnAiOiIiLCJyZWNvcmQiOiIyMC0wLTAiLCJhZ2UiOjMyLCJoZWlnaHQiOiI1JzdcIiIsInJlYWNoIjoiNzIuNVwiIiwibGVnUmVhY2giOiIzNlwiIiwiZ3ltIjoiQW1lcmljYW4gVG9wIFRlYW0iLCJzdHlsZSI6IkZyZWVzdHlsZSIsImF2Z1RpbWUiOiIxNjowMCIsInNscG0iOjMuOTEsInNhcG0iOjIuOCwic3RyQWNjIjo0OCwic3RyRGVmIjo2MSwidGQxNSI6NC43OCwidGREZWYiOjYxLCJrZDE1IjowLCJzdWIxNSI6MC4xOSwiZmluaXNoIjp7ImtvIjoxNSwiZGVjIjo2NSwic3ViIjoyMH0sInRhcmdldCI6eyJoZWFkIjo3NywiYm9keSI6MTUsImxlZyI6OH0sInRyYWl0cyI6WyJHcmVjby1Sb21hbiBjaGFpbiB3cmVzdGxpbmciLCJSZWFyLW5ha2VkIGNob2tlIGZpbmlzaGVyIiwiTmV2ZXIgYmVlbiBkcm9wcGVkIiwiSGVhZC1odW50aW5nIDc3JSIsIlVuZGVmZWF0ZWQgaW4gMjAiXSwicmVhZCI6IlVuZGVmZWF0ZWQgaW4gdHdlbnR5IGFuZCBjYXJyeWluZyB0aGUgaGlnaGVzdCB0YWtlZG93biByYXRlIGluIHRoaXMgZmlnaHQgYXQgNC43OCBwZXIgZmlmdGVlbiBtaW51dGVzLiBIaXMga25vY2tkb3duIGF2ZXJhZ2UgYWdhaW5zdCBzaXRzIGF0IGEgZmxhdCAwLjAwIGFjcm9zcyB0d2VudHkgZmlnaHRzLiBUaGUgc3RyaWtpbmcgaXMgdGhlcmUgdG8gc2V0IHVwIHRoZSBsZXZlbCBjaGFuZ2U6IDc3JSBvZiBoaXMgdm9sdW1lIGdvZXMgdG8gdGhlIGhlYWQsIGFuZCBhbGwgZm91ciBvZiBoaXMgc3VibWlzc2lvbnMgYXJlIHJlYXItbmFrZWQgY2hva2VzLiJ9LCJ2ZXJkaWN0IjoiVm9sa2Fub3Zza2kncyA2OSUgdGFrZWRvd24gZGVmZW5jZSBhZ2FpbnN0IEV2bG9ldidzIDQuNzggdGFrZWRvd25zIHBlciBmaWZ0ZWVuIG1pbnV0ZXMuIFN0YW5kaW5nLCB0aGUgY2hhbXBpb24gaG9sZHMgYSB0d28tc3RyaWtlLXBlci1taW51dGUgb3V0cHV0IGFkdmFudGFnZSBhbmQgZXZlcnkgYWNjdXJhY3kgbWV0cmljLiBJZiBFdmxvZXYgZ2V0cyB0byB0aGUgaGlwcyBhbmQga2VlcHMgaGltIHRoZXJlLCBhbiB1bmJlYXRlbiAyMC0wIHJlY29yZCB3YWxrcyBpbnRvIHRoZSBjaGFtcGlvbnNoaXAgcm91bmRzIHdpdGggdGhlIGJlbHQgaW4gcmVhY2guIn0seyJzbG90IjoiQ28tbWFpbiBldmVudCIsIndlaWdodCI6IkJhbnRhbXdlaWdodCB0aXRsZSBib3V0Iiwicm91bmRzIjoiNSByb3VuZHMiLCJ0aXRsZSI6dHJ1ZSwicmVkIjp7ImZpcnN0IjoiUGV0ciIsImxhc3QiOiJZYW4iLCJuaWNrIjoiTm8gTWVyY3kiLCJpbml0aWFscyI6IlBZIiwiaW1nIjp0KyIyMDI1LTEyL1lBTl9QRVRSX0xfQkVMVF8wNC0wOS5wbmc/aXRvaz1yRUlRaE52dyIsImZsYWciOiJSVVMiLCJyYW5rIjoiQ2hhbXBpb24iLCJwZnAiOiIjNCBQRlAiLCJyZWNvcmQiOiIyMC01LTAiLCJhZ2UiOjMzLCJoZWlnaHQiOiI1JzcuNVwiIiwicmVhY2giOiI2N1wiIiwibGVnUmVhY2giOiIzOFwiIiwiZ3ltIjoiVW5kaXNjbG9zZWQiLCJzdHlsZSI6IkJveGVyIiwiYXZnVGltZSI6IjE3OjM4Iiwic2xwbSI6NS4xNiwic2FwbSI6NC4yNCwic3RyQWNjIjo1NSwic3RyRGVmIjo2MCwidGQxNSI6MS43LCJ0ZERlZiI6ODYsImtkMTUiOjAuNTMsInN1YjE1IjowLjExLCJmaW5pc2giOnsia28iOjM1LCJkZWMiOjYwLCJzdWIiOjV9LCJ0YXJnZXQiOnsiaGVhZCI6NjksImJvZHkiOjE5LCJsZWciOjEyfSwidHJhaXRzIjpbIk1hc3RlciBvZiBTcG9ydCwgYm94aW5nIiwiVXBwZXJjdXQiLCJCb2R5IGludmVzdG1lbnQgMTklIiwiODYlIHRha2Vkb3duIGRlZmVuY2UiLCJSZWNsYWltZWQgdGhlIGJlbHQgYXQgVUZDIDMyMyJdLCJyZWFkIjoiVGhlIHB1cmVzdCBib3hlciBpbiB0aGUgYnVpbGRpbmcuIDU1JSBhY2N1cmFjeSBhY3Jvc3MgMiw2NTIgYXR0ZW1wdHMgYW5kIDg2JSB0YWtlZG93biBkZWZlbmNlLCB0aGUgc2luZ2xlIG51bWJlciB0aGF0IGRlY2lkZWQgdGhlIHJlbWF0Y2ggaW4gRGVjZW1iZXIuIEhlIGludmVzdHMgaW4gdGhlIGJvZHksIDE5JSBvZiB0b3RhbCB2b2x1bWUsIHdoaWNoIGlzIHdoeSBoaXMgb3Bwb25lbnRzIHJlYWNoIHRoZSBjaGFtcGlvbnNoaXAgcm91bmRzIGFscmVhZHkgd29ybiBkb3duLiJ9LCJibHVlIjp7ImZpcnN0IjoiTWVyYWIiLCJsYXN0IjoiRHZhbGlzaHZpbGkiLCJuaWNrIjoiVGhlIE1hY2hpbmUiLCJpbml0aWFscyI6Ik1EIiwiaW1nIjp0KyIyMDIyLTA4L0RWQUxJU0hWSUxJX01FUkFCX0xfMDgtMjAucG5nP2l0b2s9VU5meEN1Y0IiLCJmbGFnIjoiR0VPIiwicmFuayI6IiMxIiwicGZwIjoiIzkgUEZQIiwicmVjb3JkIjoiMjEtNS0wIiwiYWdlIjozNSwiaGVpZ2h0IjoiNSc2XCIiLCJyZWFjaCI6IjY4XCIiLCJsZWdSZWFjaCI6IjM4XCIiLCJneW0iOiJUZWFtIFNlcnJhL0xvbmdvIiwic3R5bGUiOiJGcmVlc3R5bGUiLCJhdmdUaW1lIjoiMTc6MzYiLCJzbHBtIjo0LjQyLCJzYXBtIjoyLjgsInN0ckFjYyI6NDIsInN0ckRlZiI6NTQsInRkMTUiOjUuOTcsInRkRGVmIjo3Niwia2QxNSI6MC4wNSwic3ViMTUiOjAuMzUsImZpbmlzaCI6eyJrbyI6MTQsImRlYyI6NzYsInN1YiI6MTB9LCJ0YXJnZXQiOnsiaGVhZCI6NjcsImJvZHkiOjE3LCJsZWciOjE2fSwidHJhaXRzIjpbIkp1ZG8gYmxhY2sgYmVsdCIsIlNhbWJvIGJhc2UiLCIzMzggY2FyZWVyIHRha2Vkb3duIGF0dGVtcHRzIiwiUGFjZSBvdmVyIHBvd2VyIiwiTG9uZ2VzdCBCVyB3aW4gc3RyZWFrICgxMykiXSwicmVhZCI6IjMzOCB0YWtlZG93biBhdHRlbXB0cyBpcyB0aGUgaGVhdmllc3Qgd29ya2xvYWQgaW4gVUZDIGJhbnRhbXdlaWdodCBoaXN0b3J5LiA0MiUgc3RyaWtpbmcgYWNjdXJhY3kgcmVhZHMgbG93IHVudGlsIHlvdSByZWFkIGl0IGFzIHByZXNzdXJlOiBoZSB0aHJvd3MgdG8gY2xvc2UgZGlzdGFuY2UsIHRoZW4gY2hhaW5zIGF0dGVtcHRzIHVudGlsIG9uZSBzdGlja3MuIDIxJSBvZiBoaXMgc3RyaWtlcyBjb21lIGZyb20gdG9wIHBvc2l0aW9uLiBIZSBhYnNvcmJzIDIuODAgYSBtaW51dGUsIHNvIHRoZSBjYXJkaW8gaG9sZHMuIn0sInZlcmRpY3QiOiI4NiUgdGFrZWRvd24gZGVmZW5jZSBhZ2FpbnN0IDUuOTcgdGFrZWRvd24gYXR0ZW1wdHMgcGVyIGZpZnRlZW4gbWludXRlcywgdGhlIG1vc3QgZGlyZWN0IHN0eWxpc3RpYyBjb2xsaXNpb24gb24gdGhlIGNhcmQuIFlhbiBzb2x2ZWQgaXQgb25jZSBhbHJlYWR5LCBvdmVyIGZpdmUgcm91bmRzLCBpbiBEZWNlbWJlci4gRHZhbGlzaHZpbGkgYXJyaXZlcyB3aXRoIHRlbiBtb250aHMgb2YgdGFwZSBhbmQgYSBoYWJpdCBvZiBjaGFuZ2luZyBoaXMgYW5zd2VyIHRoZSBzZWNvbmQgdGltZSBhcm91bmQuIn0seyJzbG90IjoiTWFpbiBjYXJkIiwid2VpZ2h0IjoiRmx5d2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiTG9uZSdlciIsImxhc3QiOiJLYXZhbmFnaCIsIm5pY2siOiIiLCJpbml0aWFscyI6IkxLIiwiaW1nIjp0KyIyMDI1LTAzL0tBVkFOQUdIX0xPTkVFUl9MXzAzLTIyLnBuZz9pdG9rPVR1ZHpRLTRiIiwiZmxhZyI6IkVORyIsInJhbmsiOiIjNiIsInBmcCI6IiIsInJlY29yZCI6IjEwLTItMCIsImFnZSI6MjcsImhlaWdodCI6IjUnNlwiIiwicmVhY2giOiI2N1wiIiwibGVnUmVhY2giOiIzNi41XCIiLCJneW0iOiJHQiBUb3AgVGVhbSIsInN0eWxlIjoiS2lja2JveGVyIiwiYXZnVGltZSI6IjEzOjI3Iiwic2xwbSI6NC4xMywic2FwbSI6My45NCwic3RyQWNjIjo1MCwic3RyRGVmIjo1NCwidGQxNSI6MS4xMiwidGREZWYiOjgzLCJrZDE1IjowLjM3LCJzdWIxNSI6MC4zNywiZmluaXNoIjp7ImtvIjo0MCwiZGVjIjo1MCwic3ViIjoxMH0sInRhcmdldCI6eyJoZWFkIjo1NiwiYm9keSI6MjUsImxlZyI6MTl9LCJ0cmFpdHMiOlsiS2lja2JveGluZyBiYXNlIiwiODElIHN0YW5kaW5nIHZvbHVtZSIsIjgzJSB0YWtlZG93biBkZWZlbmNlIiwiU3RvcHBlZCBDaGFybGVzIEpvaG5zb24gaW4gdHdvIiwiRml2ZSByb3VuZHMgd2l0aCBCcmFuZG9uIE1vcmVubyJdLCJyZWFkIjoiQSBwdXJlIGtpY2tib3hlcidzIGRpc3RyaWJ1dGlvbjogODElIG9mIGhpcyBzdHJpa2VzIGxhbmQgYXQgcmFuZ2UgYW5kIDQ0JSBnbyBiZWxvdyB0aGUgaGVhZCwgdGhlIG1vc3QgYmFsYW5jZWQgdGFyZ2V0IHNwbGl0IGluIHRoaXMgYm91dC4gODMlIHRha2Vkb3duIGRlZmVuY2Uga2VlcHMgdGhlIGZpZ2h0IHdoZXJlIGhlIHdhbnRzIGl0LiBIZSBjb21lcyBpbiBvZmYgYSB0aGlyZC1yb3VuZCBzdWJtaXNzaW9uIGxvc3MgdG8gQnJhbmRvbiBSb3l2YWwgaW4gSnVseSwgc28gdGhlIHNjcmFtYmxlIGV4Y2hhbmdlcyBhcmUgdGhlIGxpdmUgcXVlc3Rpb24uIn0sImJsdWUiOnsiZmlyc3QiOiJSYW1hemFuIiwibGFzdCI6IlRlbWlyb3YiLCJuaWNrIjoiVGVtdXJsYW4iLCJpbml0aWFscyI6IlJUIiwiaW1nIjp0KyIyMDI0LTExL1RFTUlST1ZfUkFNQVpBTl9MXzEwLTEyLnBuZz9pdG9rPUtfRXI2V1BRIiwiZmxhZyI6IlVaQiIsInJhbmsiOiIjMTAiLCJwZnAiOiIiLCJyZWNvcmQiOiIyMC0zLTAiLCJhZ2UiOjI5LCJoZWlnaHQiOiI1JzRcIiIsInJlYWNoIjoiNjNcIiIsImxlZ1JlYWNoIjoiMzZcIiIsImd5bSI6IkxlZ2lvbiBGaWdodCBDbHViIiwic3R5bGUiOiJTdHJpa2VyIiwiYXZnVGltZSI6IjA3OjI0Iiwic2xwbSI6NC43Mywic2FwbSI6My42NSwic3RyQWNjIjo0MSwic3RyRGVmIjo2MiwidGQxNSI6MC42OCwidGREZWYiOjEwMCwia2QxNSI6My4zOCwic3ViMTUiOjAsImZpbmlzaCI6eyJrbyI6NjAsImRlYyI6MzUsInN1YiI6NX0sInRhcmdldCI6eyJoZWFkIjo4MSwiYm9keSI6MTcsImxlZyI6Mn0sInRyYWl0cyI6WyIxMiB3aW5zIGJ5IGtub2Nrb3V0IiwiMTEgZmlyc3Qtcm91bmQgZmluaXNoZXMiLCIzLjM4IGtub2NrZG93bnMgcGVyIDE1IG1pbiIsIjEwMCUgdGFrZWRvd24gZGVmZW5jZSIsIjEyLWZpZ2h0IHdpbiBzdHJlYWsiXSwicmVhZCI6IjMuMzgga25vY2tkb3ducyBwZXIgZmlmdGVlbiBtaW51dGVzLCBhIGZpZ3VyZSBvbmx5IGEgdGhyZWUtbWludXRlIFVGQyBzYW1wbGUgZWxzZXdoZXJlIG9uIHRoaXMgY2FyZCBiZWF0cy4gODclIG9mIGhpcyBzdHJpa2VzIGxhbmQgc3RhbmRpbmcgYW5kIDgxJSBnbyB0byB0aGUgaGVhZCwgc28gdGhlIGludGVudCBpcyBwbGFpbi4gSGlzIGF2ZXJhZ2UgZmlnaHQgbGFzdHMgc2V2ZW4gbWludXRlcyB0d2VudHktZm91ci4gSGUgc3RvcHBlZCBTdGV2ZSBFcmNlZyBpbnNpZGUgYSByb3VuZCBpbiB0aGlzIHNhbWUgYnVpbGRpbmcgaW4gSnVseS4ifSwidmVyZGljdCI6IkEgc3RyaWtlcidzIGZpZ2h0IGJvdGggbWVuIGFjdGl2ZWx5IHdhbnQuIFRlbWlyb3YgcHV0cyBzb21lYm9keSBvbiB0aGUgY2FudmFzIGV2ZXJ5IGZvdXIgYW5kIGEgaGFsZiBtaW51dGVzIG9mIGNhZ2UgdGltZSwgYW5kIGhpcyByZWNvcmQgaXMgYnVpbHQgYWxtb3N0IGVudGlyZWx5IGluc2lkZSB0aGUgb3BlbmluZyByb3VuZHMuIEthdmFuYWdoIGhhcyB0aGUgbG9uZ2VyIGVuZ2luZSwgdGhlIGhpZ2hlciB3b3JrIHJhdGUgYW5kIGEgZml2ZS1yb3VuZCB3aW4gb3ZlciBCcmFuZG9uIE1vcmVuby4gUm91bmQgb25lIGJlbG9uZ3MgdG8gVGVtaXJvdjsgZXZlcnl0aGluZyBhZnRlciBiZWxvbmdzIHRvIEthdmFuYWdoLiJ9LHsic2xvdCI6Ik1haW4gY2FyZCIsIndlaWdodCI6IkhlYXZ5d2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiQWxleGFuZGVyIiwibGFzdCI6IlZvbGtvdiIsIm5pY2siOiJEcmFnbyIsImluaXRpYWxzIjoiQVYiLCJpbWciOnQrIjIwMjYtMDUvVk9MS09WX0FMRVhBTkRFUl9MXzA1LTA5LnBuZz9pdG9rPVo3UHQ0cDNhIiwiZmxhZyI6IlJVUyIsInJhbmsiOiIjMiIsInBmcCI6IiIsInJlY29yZCI6IjQwLTExLTAiLCJhZ2UiOjM3LCJoZWlnaHQiOiI2JzdcIiIsInJlYWNoIjoiODBcIiIsImxlZ1JlYWNoIjoiNDcuNVwiIiwiZ3ltIjoiR2xvYmFsIEZpZ2h0IEd5bSIsInN0eWxlIjoiQnJhemlsaWFuIEppdS1KaXRzdSIsImF2Z1RpbWUiOiIxMzowOSIsInNscG0iOjQuODQsInNhcG0iOjIuOSwic3RyQWNjIjo1OCwic3RyRGVmIjo1NCwidGQxNSI6MC41NCwidGREZWYiOjY5LCJrZDE1IjowLjIyLCJzdWIxNSI6MC4yMiwiZmluaXNoIjp7ImtvIjo2MCwiZGVjIjozMCwic3ViIjoxMH0sInRhcmdldCI6eyJoZWFkIjo1NywiYm9keSI6MjQsImxlZyI6MTl9LCJ0cmFpdHMiOlsiODBpbiByZWFjaCIsIjU4JSBzdHJpa2luZyBhY2N1cmFjeSIsIjI0IHdpbnMgYnkga25vY2tvdXQiLCI1MSBwcm9mZXNzaW9uYWwgZmlnaHRzIiwiVHdvIHN0cmFpZ2h0IHdpbnMiXSwicmVhZCI6IlRoZSBsb25nZXN0IGZyYW1lIG9uIHRoZSBjYXJkIGF0IDZmdCA3aW4gd2l0aCBhbiA4MC1pbmNoIHJlYWNoLCBhbmQgdGhlIG1vc3QgYWNjdXJhdGUgaGVhdnl3ZWlnaHQgaGVyZSBhdCA1OCUgYWNyb3NzIDIsMzA1IGF0dGVtcHRzLiA4MiUgb2YgaGlzIHN0cmlrZXMgbGFuZCBzdGFuZGluZyBhbmQgaGUgc3ByZWFkcyB0aGVtLCAyNCUgdG8gdGhlIGJvZHkgYW5kIDE5JSB0byB0aGUgbGVncy4gNTEgcHJvZmVzc2lvbmFsIGZpZ2h0cyBhbmQgMjQga25vY2tvdXRzLiBIZSBhYnNvcmJzIDIuOTAgYSBtaW51dGUsIGxvdyBmb3IgYSBtYW4gd2hvIHN0YW5kcyBhdCByYW5nZSB0aGlzIGxvbmcuIn0sImJsdWUiOnsiZmlyc3QiOiJSaXp2YW4iLCJsYXN0IjoiS3VuaWV2IiwibmljayI6IiIsImluaXRpYWxzIjoiUksiLCJpbWciOnQrIjIwMjYtMDcvS1VOSUVWX1JJWlZBTl9MXzA3LTI1LnBuZz9pdG9rPVBTenhkR21ZIiwiZmxhZyI6IlJVUyIsInJhbmsiOiIjNyIsInBmcCI6IiIsInJlY29yZCI6IjE0LTMtMSIsImFnZSI6MzQsImhlaWdodCI6IjYnNFwiIiwicmVhY2giOiI3NlwiIiwibGVnUmVhY2giOiI0MVwiIiwiZ3ltIjoiQW1lcmljYW4gVG9wIFRlYW0iLCJzdHlsZSI6Ik5vdCBsaXN0ZWQiLCJhdmdUaW1lIjoiMTE6MjYiLCJzbHBtIjo0LjMyLCJzYXBtIjoyLjIyLCJzdHJBY2MiOjU1LCJzdHJEZWYiOjQ5LCJ0ZDE1IjowLjc5LCJ0ZERlZiI6OTQsImtkMTUiOjAuNTIsInN1YjE1IjowLCJmaW5pc2giOnsia28iOjUwLCJkZWMiOjM2LCJzdWIiOjE0fSwidGFyZ2V0Ijp7ImhlYWQiOjcwLCJib2R5IjoyMywibGVnIjo2fSwidHJhaXRzIjpbIjk0JSB0YWtlZG93biBkZWZlbmNlIiwiMzElIG9mIHN0cmlrZXMgaW4gdGhlIGNsaW5jaCIsIjcgd2lucyBieSBrbm9ja291dCIsIlRocmVlIHN0cmFpZ2h0IFVGQyB3aW5zIiwiQmVhdCBCbGF5ZGVzIGFuZCBBbG1laWRhIl0sInJlYWQiOiJUaHJlZSBVRkMgd2lucyBpbiBhIHJvdywgb3ZlciBDdXJ0aXMgQmxheWRlcywgSmFpbHRvbiBBbG1laWRhIGFuZCBUeXJlbGwgRm9ydHVuZSwgdGhlIGxhc3QgYnkgdGhpcmQtcm91bmQgc3RvcHBhZ2UgaW4gSnVseS4gMzElIG9mIGhpcyBzaWduaWZpY2FudCBzdHJpa2VzIGxhbmQgaW4gdGhlIGNsaW5jaCwgdGhlIGhpZ2hlc3QgY2xpbmNoIHNoYXJlIG9uIHRoZSBjYXJkLCBhbmQgOTQlIHRha2Vkb3duIGRlZmVuY2UgbWVhbnMgaGUgZGVjaWRlcyB3aGVyZSB0aGUgZmlnaHQgaGFwcGVucy4gSGUgYWJzb3JicyAyLjIyIGEgbWludXRlLiBUaGUgbnVtYmVyIHRvIHdhdGNoIGlzIDQ5JSBzdHJpa2luZyBkZWZlbmNlIGFnYWluc3QgYSBtYW4gd2hvIGxhbmRzIDU4JSBvZiB3aGF0IGhlIHRocm93cy4ifSwidmVyZGljdCI6IlRocmVlIGluY2hlcyBvZiBoZWlnaHQgYW5kIGZvdXIgb2YgcmVhY2ggdG8gVm9sa292LCB3aG8gaGFzIGZvdWdodCA1MSB0aW1lcyBhbmQgbGFuZHMgNTglIGF0IHJhbmdlLiBLdW5pZXYncyByb3V0ZSBpcyB0aGUgY2xpbmNoLCB3aGVyZSBuZWFybHkgYSB0aGlyZCBvZiBoaXMgc3RyaWtlcyBsYW5kLCBhbmQgaGlzIDk0JSB0YWtlZG93biBkZWZlbmNlIGtlZXBzIGl0IHRoZXJlLiBJZiBWb2xrb3YgaG9sZHMgdGhlIGRpc3RhbmNlIGZvciBmaWZ0ZWVuIG1pbnV0ZXMgdGhlIGFjY3VyYWN5IGVkZ2UgaXMgZGVjaXNpdmU7IGlmIEt1bmlldiBjbG9zZXMgaXQsIHRoZSBmaWdodCBjaGFuZ2VzIHNoYXBlLiJ9LHsic2xvdCI6Ik1haW4gY2FyZCIsIndlaWdodCI6IkZlYXRoZXJ3ZWlnaHQgYm91dCIsInJvdW5kcyI6IjMgcm91bmRzIiwidGl0bGUiOmZhbHNlLCJyZWQiOnsiZmlyc3QiOiJBcm5vbGQiLCJsYXN0IjoiQWxsZW4iLCJuaWNrIjoiQWxtaWdodHkiLCJpbml0aWFscyI6IkFBIiwiaW1nIjp0KyIyMDI2LTA1L0FMTEVOX0FSTk9MRF9MXzA1LTE2LnBuZz9pdG9rPWQybDhnVnAtIiwiZmxhZyI6IkVORyIsInJhbmsiOiIjNyIsInBmcCI6IiIsInJlY29yZCI6IjIxLTQtMCIsImFnZSI6MzIsImhlaWdodCI6IjUnOFwiIiwicmVhY2giOiI3MFwiIiwibGVnUmVhY2giOiIzOVwiIiwiZ3ltIjoiQktLIC8gVHJpc3RhciIsInN0eWxlIjoiTU1BIiwiYXZnVGltZSI6IjE0OjI4Iiwic2xwbSI6My41Miwic2FwbSI6My4xNSwic3RyQWNjIjo0NCwic3RyRGVmIjo2MCwidGQxNSI6MS4yNCwidGREZWYiOjczLCJrZDE1IjowLjI4LCJzdWIxNSI6MC4yOCwiZmluaXNoIjp7ImtvIjozMywiZGVjIjo0OCwic3ViIjoxOX0sInRhcmdldCI6eyJoZWFkIjo3MywiYm9keSI6MTgsImxlZyI6OH0sInRyYWl0cyI6WyJUaHJlZSBzdHJhaWdodCB3aW5zIiwiRml2ZS1yb3VuZCBkZWNpc2lvbiBpbiBNYXkiLCI2MCUgc3RyaWtpbmcgZGVmZW5jZSIsIjg5JSBvZiBzdHJpa2VzIHN0YW5kaW5nIiwiTG9zdCB0byBFdmxvZXYgaW4gMjAyNCJdLCJyZWFkIjoiVGhyZWUgd2lucyBpbiBhIHJvdyBzaW5jZSB0aGUgRXZsb2V2IGxvc3MsIHRoZSBtb3N0IHJlY2VudCBvdmVyIGZpdmUgcm91bmRzIGFnYWluc3QgTWVscXVpemFlbCBDb3N0YSBpbiBNYXkuIDg5JSBvZiBoaXMgc3RyaWtlcyBsYW5kIHN0YW5kaW5nIGFuZCA3MyUgZ28gdG8gdGhlIGhlYWQsIGJlaGluZCA2MCUgc3RyaWtpbmcgZGVmZW5jZSwgdGhlIGJlc3Qgb2YgdGhlIGZvdXIgZmVhdGhlcndlaWdodHMgb3V0c2lkZSB0aGUgdGl0bGUgZmlnaHQuIE91dHB1dCBpcyBtb2Rlc3QgYXQgMy41MiBhIG1pbnV0ZTsgaGUgd2lucyByb3VuZHMgb24gZGVmZW5jZSBhbmQgdGltaW5nIHJhdGhlciB0aGFuIHZvbHVtZS4gNDglIG9mIGhpcyB3aW5zIHJlYWNoIHRoZSBqdWRnZXMuIn0sImJsdWUiOnsiZmlyc3QiOiJBYXJvbiIsImxhc3QiOiJQaWNvIiwibmljayI6IiIsImluaXRpYWxzIjoiQVAiLCJpbWciOnQrIjIwMjUtMDgvUElDT19BQVJPTl9SXzA4LTE2LnBuZz9pdG9rPTkweHZ2d1NaIiwiZmxhZyI6IlVTQSIsInJhbmsiOiIjMTEiLCJwZnAiOiIiLCJyZWNvcmQiOiIxNC01LTAiLCJhZ2UiOjI5LCJoZWlnaHQiOiI1JzhcIiIsInJlYWNoIjoiNzAuNVwiIiwibGVnUmVhY2giOiJuL2EiLCJneW0iOiJKYWNrc29uIFdpbmsgTU1BIEFjYWRlbXkiLCJzdHlsZSI6IkJveGluZyIsImF2Z1RpbWUiOiIwOToxMSIsInNscG0iOjYuMTYsInNhcG0iOjMuMTEsInN0ckFjYyI6NTQsInN0ckRlZiI6NDUsInRkMTUiOjYuNTQsInRkRGVmIjpudWxsLCJrZDE1IjowLCJzdWIxNSI6MCwiZmluaXNoIjp7ImtvIjo2NCwiZGVjIjoyMSwic3ViIjoxNH0sInRhcmdldCI6eyJoZWFkIjo3NiwiYm9keSI6MTQsImxlZyI6MTB9LCJ0cmFpdHMiOlsiNi4xNiBzdHJpa2VzIGEgbWludXRlIiwiNi41NCB0YWtlZG93biBhdHRlbXB0cyBwZXIgMTUgbWluIiwiOSB3aW5zIGJ5IGtub2Nrb3V0IiwiQmVhdCBQYXRyaWNpbyBQaXRidWxsIGluIEFwcmlsIiwiVHdvIFVGQyBmaWdodHMiXSwicmVhZCI6IlR3byBVRkMgZmlnaHRzOiBhIGZpcnN0LXJvdW5kIGtub2Nrb3V0IGxvc3MgdG8gTGVyb25lIE11cnBoeSwgdGhlbiBhIGRlY2lzaW9uIG92ZXIgUGF0cmljaW8gUGl0YnVsbCBpbiBBcHJpbC4gVGhlIHNhbXBsZSBpcyBzbWFsbCBhdCAyMTAgYXR0ZW1wdHMsIGJ1dCB0aGUgc2hhcGUgaXMgY2xlYXI6IDYuMTYgc2lnbmlmaWNhbnQgc3RyaWtlcyBhIG1pbnV0ZSwgdGhlIGhpZ2hlc3Qgb24gdGhlIGNhcmQsIGFuZCA2LjU0IHRha2Vkb3duIGF0dGVtcHRzIHBlciBmaWZ0ZWVuIG1pbnV0ZXMgYmVoaW5kIHRoZW0uIDQ1JSBzdHJpa2luZyBkZWZlbmNlIGlzIHRoZSBjb3N0IG9mIHRoYXQgcHJlc3N1cmUuIE5pbmUgb2YgaGlzIGZvdXJ0ZWVuIHdpbnMgYXJlIGtub2Nrb3V0cy4ifSwidmVyZGljdCI6IlBpY28gdGhyb3dzIGFsbW9zdCB0d2ljZSBBbGxlbidzIHZvbHVtZSBhbmQgYWRkcyBzaXggdGFrZWRvd24gYXR0ZW1wdHMgcGVyIGZpZnRlZW4gbWludXRlcyBvbiB0b3A7IEFsbGVuJ3MgNjAlIHN0cmlraW5nIGRlZmVuY2UgYW5kIDczJSB0YWtlZG93biBkZWZlbmNlIGFyZSBidWlsdCBmb3IgZXhhY3RseSB0aGF0LiBQaWNvJ3MgYXZlcmFnZSBmaWdodCBsYXN0cyBuaW5lIG1pbnV0ZXMsIEFsbGVuJ3MgZm91cnRlZW4gYW5kIGEgaGFsZi4gVGhlIGxhdGVyIGl0IGdvZXMsIHRoZSBtb3JlIGl0IGJlbG9uZ3MgdG8gQWxsZW4uIn0seyJzbG90IjoiUHJlbGltcyIsIndlaWdodCI6IkxpZ2h0IGhlYXZ5d2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiQXphbWF0IiwibGFzdCI6Ik11cnpha2Fub3YiLCJuaWNrIjoiUHJvZmVzc2lvbmFsIiwiaW5pdGlhbHMiOiJBTSIsImltZyI6dCsiMjAyNi0wNC9NVVJaQUtBTk9WX0FaQU1BVF9MXzA0LTExLnBuZz9pdG9rPW1xUWE5bnJhIiwiZmxhZyI6IlJVUyIsInJhbmsiOiIjOCIsInBmcCI6IiIsInJlY29yZCI6IjE2LTEtMCIsImFnZSI6MzcsImhlaWdodCI6IjUnMTBcIiIsInJlYWNoIjoiNzEuNVwiIiwibGVnUmVhY2giOiI0MVwiIiwiZ3ltIjoiSyBEb2pvIFdhcnJpb3IgVHJpYmUiLCJzdHlsZSI6Ik1NQSIsImF2Z1RpbWUiOiIwODoxNyIsInNscG0iOjQuNCwic2FwbSI6My4yLCJzdHJBY2MiOjU2LCJzdHJEZWYiOjU2LCJ0ZDE1IjowLjY4LCJ0ZERlZiI6ODksImtkMTUiOjEuNTgsInN1YjE1IjowLjIzLCJmaW5pc2giOnsia28iOjc1LCJkZWMiOjE5LCJzdWIiOjZ9LCJ0YXJnZXQiOnsiaGVhZCI6NzEsImJvZHkiOjI2LCJsZWciOjR9LCJ0cmFpdHMiOlsiMTIgS09zIGZyb20gMTYgd2lucyIsIjEwIGZpcnN0LXJvdW5kIGZpbmlzaGVzIiwiODklIHRha2Vkb3duIGRlZmVuY2UiLCIzw5cgaGFuZC10by1oYW5kIHdvcmxkIGNoYW1waW9uIiwiU3RvcHBlZCBSYWtpxIcgYXQgRXRpaGFkIEFyZW5hIl0sInJlYWQiOiI3NSUgb2YgaGlzIHdpbnMgYXJyaXZlIGJ5IGtub2Nrb3V0IGFuZCB0ZW4gb2YgdGhlbSBsYW5kZWQgaW4gcm91bmQgb25lLiA1NiUgYWNjdXJhY3kgcGFpcmVkIHdpdGggMS41OCBrbm9ja2Rvd25zIHBlciBmaWZ0ZWVuIG1pbnV0ZXMgcmVhZHMgYXMgYSBmaW5pc2hpbmcgcmF0ZS4gSGUgc3RvcHBlZCBBbGVrc2FuZGFyIFJha2nEhyBpbnNpZGUgYSByb3VuZCBhdCBFdGloYWQgQXJlbmEgbGFzdCBPY3RvYmVyLiBIaXMgZmlyc3QgY2FyZWVyIGxvc3MgY2FtZSBpbiByb3VuZCB0aHJlZSBhZ2FpbnN0IFBhdWxvIENvc3RhIGluIEFwcmlsLCB0aGUgb25seSB0aW1lIGFueW9uZSBoYXMgYXNrZWQgaGltIGEgbG9uZyBxdWVzdGlvbi4ifSwiYmx1ZSI6eyJmaXJzdCI6IkRvbWluaWNrIiwibGFzdCI6IlJleWVzIiwibmljayI6IlRoZSBEZXZhc3RhdG9yIiwiaW5pdGlhbHMiOiJEUiIsImltZyI6dCsiMjAyNi0wNC9SRVlFU19ET01JTklDS19MXzA0LTExLnBuZz9pdG9rPTdIU1Z0djFwIiwiZmxhZyI6IlVTQSIsInJhbmsiOiIjMTAiLCJwZnAiOiIiLCJyZWNvcmQiOiIxNi01LTAiLCJhZ2UiOjM2LCJoZWlnaHQiOiI2JzRcIiIsInJlYWNoIjoiNzdcIiIsImxlZ1JlYWNoIjoiNDMuNVwiIiwiZ3ltIjoiQ29icmEgS2FpIFZpY3RvcnZpbGxlIiwic3R5bGUiOiJLaWNrYm94ZXIiLCJhdmdUaW1lIjoiMDc6NTEiLCJzbHBtIjo0Ljk5LCJzYXBtIjozLjQsInN0ckFjYyI6NTQsInN0ckRlZiI6NTAsInRkMTUiOjAuMjUsInRkRGVmIjo4Mywia2QxNSI6MC44OSwic3ViMTUiOjAuMjUsImZpbmlzaCI6eyJrbyI6NjMsImRlYyI6MjUsInN1YiI6MTN9LCJ0YXJnZXQiOnsiaGVhZCI6NTYsImJvZHkiOjI0LCJsZWciOjIwfSwidHJhaXRzIjpbIjc3aW4gcmVhY2giLCJIZWFkIGtpY2siLCIxMCB3aW5zIGJ5IGtub2Nrb3V0IiwiNCBmaW5pc2hlcyBpbnNpZGUgYSBtaW51dGUiLCJUd28gdGl0bGUgY2hhbGxlbmdlcyJdLCJyZWFkIjoiU2l4IGluY2hlcyBvZiBoZWlnaHQgYW5kIDUuNSBpbmNoZXMgb2YgcmVhY2ggb3ZlciBNdXJ6YWthbm92LCBwbHVzIHRoZSBsb25nZXN0IGxlZ3MgaW4gdGhlIGJvdXQgYXQgNDMuNSBpbmNoZXMuIEZvdXIgb2YgaGlzIGZpbmlzaGVzIGNhbWUgaW5zaWRlIHNpeHR5IHNlY29uZHMuIFRoZSB2dWxuZXJhYmlsaXR5IHNpdHMgcGxhaW5seSBvbiB0aGUgcmVjb3JkOiA1MCUgc3RyaWtpbmcgZGVmZW5jZSwgdGhlIGxvd2VyIGZpZ3VyZSBpbiB0aGlzIGJvdXQsIGFuZCBmb3VyIHN0b3BwYWdlIGxvc3Nlcy4ifSwidmVyZGljdCI6IlR3byBvZiB0aGUgaGlnaGVzdCBmaW5pc2hpbmcgcmF0ZXMgaW4gdGhlIGRpdmlzaW9uIGFjcm9zcyA0NyBjb21iaW5lZCBmaWdodHMsIG9ubHkgZWxldmVuIG9mIHdoaWNoIHJlYWNoZWQgYSBkZWNpc2lvbi4gUmV5ZXMgb3ducyB0aGUgbGVuZ3RoOyBNdXJ6YWthbm92IG93bnMgdGhlIGFjY3VyYWN5IGVkZ2UgYW5kIDg5JSB0YWtlZG93biBkZWZlbmNlLiBCb3RoIG1lbiBzaXQgYXQgNTYlIHN0cmlraW5nIGRlZmVuY2Ugb3IgYmVsb3csIGFuZCBib3RoIGF2ZXJhZ2UgdW5kZXIgbmluZSBtaW51dGVzIG9mIGNhZ2UgdGltZSBwZXIgZmlnaHQuIFdob2V2ZXIgbGFuZHMgY2xlYW5seSBmaXJzdCBhbG1vc3QgY2VydGFpbmx5IGVuZHMgaXQuIn0seyJzbG90IjoiUHJlbGltcyIsIndlaWdodCI6IkxpZ2h0IGhlYXZ5d2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiTmlraXRhIiwibGFzdCI6IktyeWxvdiIsIm5pY2siOiJUaGUgTWluZXIiLCJpbml0aWFscyI6Ik5LIiwiaW1nIjp0KyIyMDI2LTA3L0tSWUxPVl9OSUtJVEFfTF8wNy0xMS5wbmc/aXRvaz1HLVNLRVhzNSIsImZsYWciOiJSVVMiLCJyYW5rIjoiIzE1IiwicGZwIjoiIiwicmVjb3JkIjoiMzEtMTItMCIsImFnZSI6MzQsImhlaWdodCI6IjYnM1wiIiwicmVhY2giOiI3Ny41XCIiLCJsZWdSZWFjaCI6IjQ0LjVcIiIsImd5bSI6IkZpZ2h0IENsdWIgTm8xIiwic3R5bGUiOiJLYXJhdGUiLCJhdmdUaW1lIjoiMDc6MDkiLCJzbHBtIjo0LjM4LCJzYXBtIjoyLjc1LCJzdHJBY2MiOjU0LCJzdHJEZWYiOjQ4LCJ0ZDE1IjoyLjE5LCJ0ZERlZiI6NTMsImtkMTUiOjAuNTcsInN1YjE1IjoxLjE0LCJmaW5pc2giOnsia28iOjQyLCJkZWMiOjYsInN1YiI6NTJ9LCJ0YXJnZXQiOnsiaGVhZCI6NTksImJvZHkiOjI1LCJsZWciOjE2fSwidHJhaXRzIjpbIjE2IHdpbnMgYnkgc3VibWlzc2lvbiIsIjEzIHdpbnMgYnkga25vY2tvdXQiLCIyIG9mIDMxIHdpbnMgYnkgZGVjaXNpb24iLCJTdG9wcGVkIFdoaXR0YWtlciBpbiBKdWx5IiwiVGhyZWUgc3RyYWlnaHQga25vY2tvdXRzIl0sInJlYWQiOiJUd2VudHktbmluZSBvZiBoaXMgdGhpcnR5LW9uZSB3aW5zIGFyZSBmaW5pc2hlcywgc2l4dGVlbiBieSBzdWJtaXNzaW9uIGFuZCB0aGlydGVlbiBieSBrbm9ja291dCwgYW5kIGhpcyBhdmVyYWdlIGZpZ2h0IGxhc3RzIHNldmVuIG1pbnV0ZXMgbmluZS4gVGhyZWUgc3RyYWlnaHQga25vY2tvdXRzLCB0aGUgbGF0ZXN0IG92ZXIgUm9iZXJ0IFdoaXR0YWtlciBpbiBKdWx5LiBUaGUgZXhwb3N1cmUgaXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGxlZGdlcjogNDglIHN0cmlraW5nIGRlZmVuY2UgYW5kIDUzJSB0YWtlZG93biBkZWZlbmNlLCBib3RoIHRoZSBsb3dlciBmaWd1cmVzIGluIHRoaXMgYm91dCwgYW5kIGEgZmlyc3Qtcm91bmQga25vY2tvdXQgbG9zcyB0byBEb21pbmljayBSZXllcywgd2hvIGZpZ2h0cyBvbiB0aGUgc2FtZSBjYXJkLiJ9LCJibHVlIjp7ImZpcnN0IjoiQWJkdWwgUmFraG1hbiIsImxhc3QiOiJZYWtoeWFldiIsIm5pY2siOiJUaGUgSHVudGVyIiwiaW5pdGlhbHMiOiJBWSIsImltZyI6dCsiMjAyNi0wNi9ZQUtIWUFFVl9BQkRVTF9SQUtITUFOX0xfMDYtMjcucG5nP2l0b2s9cjI1b3VKMHMiLCJmbGFnIjoiVFVSIiwicmFuayI6IiIsInBmcCI6IiIsInJlY29yZCI6IjEwLTAtMCIsImFnZSI6MjUsImhlaWdodCI6IjYnMlwiIiwicmVhY2giOiI3OFwiIiwibGVnUmVhY2giOiI0NFwiIiwiZ3ltIjoiTU1BIE51ZXJuYmVyZyIsInN0eWxlIjoiTU1BIiwiYXZnVGltZSI6IjAxOjAxIiwic2xwbSI6OC42NCwic2FwbSI6Mi4yMiwic3RyQWNjIjo2OSwic3RyRGVmIjo1OSwidGQxNSI6MTEuMTEsInRkRGVmIjoxMDAsImtkMTUiOjExLjExLCJzdWIxNSI6Ny40MSwiZmluaXNoIjp7ImtvIjo0MCwiZGVjIjoxMCwic3ViIjo1MH0sInRhcmdldCI6eyJoZWFkIjo4OSwiYm9keSI6OSwibGVnIjozfSwidHJhaXRzIjpbIjEwLTAgdW5kZWZlYXRlZCIsIlRocmVlIFVGQyB3aW5zLCBhbGwgaW5zaWRlIGEgcm91bmQiLCJFaWdodC1zZWNvbmQga25vY2tvdXQgaW4gSnVuZSIsIjUgd2lucyBieSBzdWJtaXNzaW9uIiwiQXZlcmFnZSBmaWdodCB0aW1lIDE6MDEiXSwicmVhZCI6IlRocmVlIFVGQyBmaWdodHMsIHRocmVlIGZpcnN0LXJvdW5kIGZpbmlzaGVzLCBhbmQgYSBjb21iaW5lZCBjYWdlIHRpbWUgb2YganVzdCBvdmVyIHRocmVlIG1pbnV0ZXM6IHR3byBzdWJtaXNzaW9ucywgdGhlbiBhbiBlaWdodC1zZWNvbmQga25vY2tvdXQgb2YgSnVsaXVzIFdhbGtlciBpbiBKdW5lLiBFdmVyeSBwZXItbWludXRlIGZpZ3VyZSBpcyBpbmZsYXRlZCBieSB0aGF0IHNhbXBsZSwgc28gcmVhZCB0aGVtIGFzIGludGVudCByYXRoZXIgdGhhbiBhdmVyYWdlcy4gNjAlIG9mIGhpcyBzdHJpa2VzIGhhdmUgbGFuZGVkIGZyb20gdGhlIGdyb3VuZCBhbmQgbmluZSBvZiBoaXMgdGVuIHdpbnMgYXJlIGZpbmlzaGVzLiBOb2JvZHkgaGFzIHRha2VuIGhpbSBwYXN0IGEgcm91bmQuIn0sInZlcmRpY3QiOiJOZWl0aGVyIG1hbiBwbGFucyBvbiB0aGUganVkZ2VzOiAyOSBvZiBLcnlsb3YncyAzMSB3aW5zIGFuZCA5IG9mIFlha2h5YWV2J3MgMTAgYXJlIGZpbmlzaGVzLiBLcnlsb3YgaGFzIDQzIGZpZ2h0cyBvZiB0YXBlIGFuZCB0aHJlZSBzdHJhaWdodCBrbm9ja291dHM7IFlha2h5YWV2IGhhcyB0aHJlZSBtaW51dGVzIG9mIFVGQyBmb290YWdlIGFuZCBhIDEwMCUgdGFrZWRvd24gZGVmZW5jZSB0aGF0IGhhcyBuZXZlciBiZWVuIHRlc3RlZC4gS3J5bG92J3MgNTMlIHRha2Vkb3duIGRlZmVuY2UgaXMgdGhlIG9wZW5pbmcsIGFuZCB0aGUgZmlyc3Qgc2NyYW1ibGUgd2lsbCBzYXkgbW9zdCBvZiBpdC4ifSx7InNsb3QiOiJQcmVsaW1zIiwid2VpZ2h0IjoiTWlkZGxld2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiQWJ1cyIsImxhc3QiOiJNYWdvbWVkb3YiLCJuaWNrIjoiIiwiaW5pdGlhbHMiOiJBTSIsImltZyI6dCsiMjAyNi0wNi9NQUdPTUVET1ZfQUJVU19MXzA2LTI3LnBuZz9pdG9rPVNMbXpYaldwIiwiZmxhZyI6IkdFUiIsInJhbmsiOiIjMTIiLCJwZnAiOiIiLCJyZWNvcmQiOiIyOS03LTEiLCJhZ2UiOjM2LCJoZWlnaHQiOiI2JzJcIiIsInJlYWNoIjoiNzhcIiIsImxlZ1JlYWNoIjoiNDNcIiIsImd5bSI6IlVuZGlzY2xvc2VkIiwic3R5bGUiOiJNTUEiLCJhdmdUaW1lIjoiMDk6NDYiLCJzbHBtIjozLjA2LCJzYXBtIjozLjM0LCJzdHJBY2MiOjQ5LCJzdHJEZWYiOjU2LCJ0ZDE1IjoyLjUsInRkRGVmIjoxMDAsImtkMTUiOjAuMzgsInN1YjE1IjowLjU4LCJmaW5pc2giOnsia28iOjQ4LCJkZWMiOjI0LCJzdWIiOjI4fSwidGFyZ2V0Ijp7ImhlYWQiOjU2LCJib2R5IjozMSwibGVnIjoxM30sInRyYWl0cyI6WyIxMDAlIHRha2Vkb3duIGRlZmVuY2UiLCIzMSUgb2Ygc3RyaWtlcyB0byB0aGUgYm9keSIsIlN1Ym1pdHRlZCBQeWZlciBhbmQgT2xla3NpZWpjenVrIiwiMjIgZmluaXNoZXMgaW4gMjkgd2lucyIsIlRocmVlIHN0cmFpZ2h0IHdpbnMiXSwicmVhZCI6IlRocmVlIHN0cmFpZ2h0IHdpbnMsIHRoZSBsYXN0IHR3byBieSBzdWJtaXNzaW9uIGluc2lkZSB0d28gcm91bmRzLCBvdmVyIEpvZSBQeWZlciBhbmQgTWljaGFsIE9sZWtzaWVqY3p1ay4gMzElIG9mIGhpcyBzdHJpa2VzIGdvIHRvIHRoZSBib2R5LCB0aGUgaGVhdmllc3QgYm9keSBpbnZlc3RtZW50IG9uIHRoZSBjYXJkLCBhbmQgMTAwJSB0YWtlZG93biBkZWZlbmNlIGFjcm9zcyBoaXMgVUZDIHJ1bi4gT3V0cHV0IGlzIGxvdyBhdCAzLjA2IGEgbWludXRlIGFuZCBoZSBhYnNvcmJzIHNsaWdodGx5IG1vcmUgdGhhbiBoZSBsYW5kcywgc28gdGhlIHJvdW5kcyBhcmUgd29uIG9uIHRoZSBmaW5pc2ggcmF0aGVyIHRoYW4gdGhlIHNjb3JlY2FyZHM6IDIyIG9mIGhpcyAyOSB3aW5zIGFyZSBzdG9wcGFnZXMuIn0sImJsdWUiOnsiZmlyc3QiOiJDYW0iLCJsYXN0IjoiUm93c3RvbiIsIm5pY2siOiIiLCJpbml0aWFscyI6IkNSIiwiaW1nIjp0KyIyMDI2LTA0L1JPV1NUT05fQ0FNX0xfMDUtMDIucG5nP2l0b2s9dXFEV3EwTzAiLCJmbGFnIjoiQVVTIiwicmFuayI6IiIsInBmcCI6IiIsInJlY29yZCI6IjE1LTMtMCIsImFnZSI6MzEsImhlaWdodCI6IjYnM1wiIiwicmVhY2giOiI3OFwiIiwibGVnUmVhY2giOiI0NVwiIiwiZ3ltIjoiQ2l0eSBLaWNrYm94aW5nIiwic3R5bGUiOiJCcmF6aWxpYW4gSml1LUppdHN1IiwiYXZnVGltZSI6IjA4OjU3Iiwic2xwbSI6NC42LCJzYXBtIjoyLjEyLCJzdHJBY2MiOjQ5LCJzdHJEZWYiOjUyLCJ0ZDE1IjoxLjM0LCJ0ZERlZiI6MzMsImtkMTUiOjEuMCwic3ViMTUiOjAuMzMsImZpbmlzaCI6eyJrbyI6NDAsImRlYyI6MTMsInN1YiI6NDd9LCJ0YXJnZXQiOnsiaGVhZCI6NzgsImJvZHkiOjEyLCJsZWciOjEwfSwidHJhaXRzIjpbIlRocmVlIFVGQyB3aW5zIGZyb20gdGhyZWUiLCI3IHdpbnMgYnkgc3VibWlzc2lvbiIsIjEuMDAga25vY2tkb3ducyBwZXIgMTUgbWluIiwiMzMlIG9mIHN0cmlrZXMgZnJvbSB0aGUgZ3JvdW5kIiwiQ2l0eSBLaWNrYm94aW5nIl0sInJlYWQiOiJUaHJlZSBVRkMgZmlnaHRzLCB0aHJlZSB3aW5zLCB0d28gb2YgdGhlbSBrbm9ja291dHMgaW5zaWRlIHR3byByb3VuZHMuIEhlIGxhbmRzIDQuNjAgYSBtaW51dGUgYW5kIGFic29yYnMgMi4xMiwgdGhlIGJlc3QgZGlmZmVyZW50aWFsIGluIHRoaXMgYm91dCwgYW5kIGEgdGhpcmQgb2YgaGlzIHN0cmlrZXMgY29tZSBmcm9tIHRoZSBncm91bmQsIHdoZXJlIHNldmVuIG9mIGhpcyBmaWZ0ZWVuIHdpbnMgaGF2ZSBlbmRlZCBieSBzdWJtaXNzaW9uLiBUaGUgZ2FwIGlzIDMzJSB0YWtlZG93biBkZWZlbmNlLCB0aGUgbG93ZXN0IGZpZ3VyZSBvbiB0aGUgY2FyZCwgYWdhaW5zdCBhbiBvcHBvbmVudCB3aG8gYXR0ZW1wdHMgMi41MCB0YWtlZG93bnMgcGVyIGZpZnRlZW4gbWludXRlcy4ifSwidmVyZGljdCI6IlJvd3N0b24ncyAzMyUgdGFrZWRvd24gZGVmZW5jZSBhZ2FpbnN0IE1hZ29tZWRvdidzIDIuNTAgdGFrZWRvd24gYXR0ZW1wdHMgcGVyIGZpZnRlZW4gbWludXRlcyBhbmQgMTAwJSBkZWZlbmNlIG9mIGhpcyBvd246IHRoZSBncmFwcGxpbmcgZXhjaGFuZ2VzIHJ1biBvbmUgd2F5IG9uIHBhcGVyLiBTdGFuZGluZywgUm93c3RvbiBoYXMgdGhlIGJldHRlciBudW1iZXJzIG9uIGJvdGggc2lkZXMsIDQuNjAgbGFuZGVkIHRvIDMuMDYgYW5kIDIuMTIgYWJzb3JiZWQgdG8gMy4zNC4gTWFnb21lZG92J3MgYm9keSB3b3JrIGlzIGhvdyBoZSBzbG93cyBhIHlvdW5nZXIgbWFuOyBSb3dzdG9uJ3Mga25vY2tkb3duIHJhdGUgaXMgaG93IGhlIGVuZHMgaXQgZWFybHkuIn0seyJzbG90IjoiUHJlbGltcyIsIndlaWdodCI6IkxpZ2h0d2VpZ2h0IGJvdXQiLCJyb3VuZHMiOiIzIHJvdW5kcyIsInRpdGxlIjpmYWxzZSwicmVkIjp7ImZpcnN0IjoiR3JhbnQiLCJsYXN0IjoiRGF3c29uIiwibmljayI6IktHRCIsImluaXRpYWxzIjoiR0QiLCJpbWciOnQrIjIwMjYtMDUvREFXU09OX0dSQU5UX0xfMDUtMDkucG5nP2l0b2s9SnVWRWhSb18iLCJmbGFnIjoiVVNBIiwicmFuayI6IiIsInBmcCI6IiIsInJlY29yZCI6IjI0LTMtMSIsImFnZSI6MzIsImhlaWdodCI6IjUnMTBcIiIsInJlYWNoIjoiNzJcIiIsImxlZ1JlYWNoIjoiNDBcIiIsImd5bSI6IkFtZXJpY2FuIFRvcCBUZWFtIiwic3R5bGUiOiJHcmFwcGxlciIsImF2Z1RpbWUiOiIxMTowMCIsInNscG0iOjMuMTQsInNhcG0iOjIuMTQsInN0ckFjYyI6NTEsInN0ckRlZiI6NDUsInRkMTUiOjMuNTgsInRkRGVmIjo2Nywia2QxNSI6MC4wOSwic3ViMTUiOjEuMzYsImZpbmlzaCI6eyJrbyI6MjEsImRlYyI6MjEsInN1YiI6NTh9LCJ0YXJnZXQiOnsiaGVhZCI6NjksImJvZHkiOjE5LCJsZWciOjEyfSwidHJhaXRzIjpbIkJKSiBibGFjayBiZWx0IiwiMTQgc3VibWlzc2lvbnMsIDEyIGJ5IFJOQyIsIjQyJSBvZiBzdHJpa2VzIGZyb20gdGhlIGdyb3VuZCIsIjEuMzYgc3VibWlzc2lvbiBhdmVyYWdlIiwiVHJpYW5nbGUgYW5kIGVsYm93cyJdLCJyZWFkIjoiNTglIG9mIGhpcyB3aW5zIGNvbWUgYnkgc3VibWlzc2lvbiBhbmQgdHdlbHZlIG9mIHRoZSBmb3VydGVlbiBhcmUgcmVhci1uYWtlZCBjaG9rZXMuIDQyJSBvZiBoaXMgc2lnbmlmaWNhbnQgc3RyaWtlcyBsYW5kIGZyb20gdGhlIGdyb3VuZCwgYmVjYXVzZSB0aGUgc3RyaWtlcyBleGlzdCB0byBvcGVuIHVwIHRoZSBiYWNrLiAzLjE0IHN0cmlrZXMgYSBtaW51dGUgaXMgYW1vbmcgdGhlIGxvd2VzdCBvdXRwdXRzIG9uIHRoZSBjYXJkIGFuZCBpdCBpcyBlbnRpcmVseSBkZWxpYmVyYXRlLiJ9LCJibHVlIjp7ImZpcnN0IjoiTnVydWxsbyIsImxhc3QiOiJBbGlldiIsIm5pY2siOiJUYWppayBFYWdsZSIsImluaXRpYWxzIjoiTkEiLCJpbWciOnQrIjIwMjYtMDcvQUxJRVZfTlVSVUxMT19MXzA3LTI1LnBuZz9pdG9rPTJKUFVYQURHIiwiZmxhZyI6IlRKSyIsInJhbmsiOiIiLCJwZnAiOiIiLCJyZWNvcmQiOiIxMi0wLTAiLCJhZ2UiOjI1LCJoZWlnaHQiOiI1JzEwXCIiLCJyZWFjaCI6IjcyXCIiLCJsZWdSZWFjaCI6IjM4XCIiLCJneW0iOiJVbmRpc2Nsb3NlZCIsInN0eWxlIjoiV3Jlc3RsaW5nIiwiYXZnVGltZSI6IjEyOjU1Iiwic2xwbSI6Mi4yOSwic2FwbSI6MS41OSwic3RyQWNjIjo0NCwic3RyRGVmIjo1NSwidGQxNSI6My40OCwidGREZWYiOjgwLCJrZDE1IjowLCJzdWIxNSI6MC40NiwiZmluaXNoIjp7ImtvIjoxNywiZGVjIjo4Mywic3ViIjowfSwidGFyZ2V0Ijp7ImhlYWQiOjgyLCJib2R5IjoxNCwibGVnIjo0fSwidHJhaXRzIjpbIjEyLTAgdW5kZWZlYXRlZCIsIkNvbWJhdCBzYW1ibyBBc2lhbiBjaGFtcGlvbiIsIjLDlyBXb3JsZCBQYW5rcmF0aW9uIGNoYW1waW9uIiwiODAlIHRha2Vkb3duIGRlZmVuY2UiLCI0MyUgb2Ygc3RyaWtlcyBmcm9tIHRoZSBncm91bmQiXSwicmVhZCI6IlVuZGVmZWF0ZWQgYXQgMTItMCwgd2l0aCB0ZW4gb2YgdGhvc2Ugd2lucyBieSBkZWNpc2lvbi4gSGUgd2lucyBvbiBjb250cm9sOiBoZSBhYnNvcmJzIDEuNTkgc3RyaWtlcyBhIG1pbnV0ZSwgdGhlIGxvd2VzdCBmaWd1cmUgb24gdGhlIGVudGlyZSBjYXJkLCBhbmQgbGFuZHMgODIlIG9mIGhpcyBvd24gdG8gdGhlIGhlYWQgZnJvbSB0b3AgcG9zaXRpb24uIElkZW50aWNhbCBoZWlnaHQgYW5kIHJlYWNoIHRvIERhd3Nvbiwgc2V2ZW4geWVhcnMgeW91bmdlci4ifSwidmVyZGljdCI6IlRoZSBvbmx5IGJvdXQgb24gdGhlIGNhcmQgd2hlcmUgYm90aCBtZW4gbGFuZCBtb3JlIHRoYW4gNDAlIG9mIHRoZWlyIHNpZ25pZmljYW50IHN0cmlrZXMgZnJvbSB0aGUgZ3JvdW5kLiBEYXdzb24ncyAxLjM2IHN1Ym1pc3Npb24gYXZlcmFnZSBpcyB0aGUgaGlnaGVzdCBvZiBhbnlvbmUgaGVyZSB3aXRoIGEgZnVsbCBVRkMgc2FtcGxlOyBBbGlldidzIGFuc3dlciBpcyA4MCUgdGFrZWRvd24gZGVmZW5jZSBhbmQgYW4gdW5iZWF0ZW4gcmVjb3JkLiBXaG9ldmVyIHdpbnMgdGhlIGZpcnN0IHNjcmFtYmxlIHZlcnkgbGlrZWx5IHdpbnMgdGhlIGZpZ2h0LiJ9XSxhPWU9PlN0cmluZyhlKS5yZXBsYWNlKC9bJjw+Il0vZyxlPT4oeyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyJ9W2VdKSksaT1be2s6InNscG0iLGw6IlN0cmlrZXMgbGFuZGVkPGJyPnBlciBtaW4iLGRvbTo3LGRsOiIwIOKAkyA3LjAwIixmOmU9PmUudG9GaXhlZCgyKX0se2s6InN0ckFjYyIsbDoiU3RyaWtpbmc8YnI+YWNjdXJhY3kiLGRvbToxMDAsZGw6IjAg4oCTIDEwMCUiLGY6ZT0+bnVsbD09ZT8ibi9hIjplKyIlIn0se2s6InN0ckRlZiIsbDoiU3RyaWtpbmc8YnI+ZGVmZW5jZSIsZG9tOjEwMCxkbDoiMCDigJMgMTAwJSIsZjplPT5udWxsPT1lPyJuL2EiOmUrIiUifSx7azoidGQxNSIsbDoiVGFrZWRvd25zPGJyPnBlciAxNSBtaW4iLGRvbTo3LGRsOiIwIOKAkyA3LjAwIixmOmU9PmUudG9GaXhlZCgyKX0se2s6InRkRGVmIixsOiJUYWtlZG93bjxicj5kZWZlbmNlIixkb206MTAwLGRsOiIwIOKAkyAxMDAlIixmOmU9Pm51bGw9PWU/Im4vYSI6ZSsiJSJ9LHtrOiJrZDE1IixsOiJLbm9ja2Rvd25zPGJyPnBlciAxNSBtaW4iLGRvbTo0LGRsOiIwIOKAkyA0LjAwIixmOmU9PmUudG9GaXhlZCgyKX1dO2Z1bmN0aW9uIHMoZSx0KXtjb25zdCBuPXQubWFwKGU9PmUudj4wP2A8c3BhbiBjbGFzcz0iJHtlLmN9IiBzdHlsZT0iZmxleDowIDAgJHtlLnZ9JSI+JHtlLnY+PTE4P2EoZS5rKSsiICIrZS52KyIlIjoiIn08L3NwYW4+YDoiIikuam9pbigiIiksaT10LmZpbHRlcihlPT5lLnY+MCkubWFwKGU9PmA8c3Bhbj48aSBjbGFzcz0iJHtlLmN9Ij48L2k+JHthKGUuayl9ICR7ZS52fSU8L3NwYW4+YCkuam9pbigiIik7cmV0dXJuYDxkaXYgY2xhc3M9InNwbGl0LWxhYmVsIj4ke2EoZSl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ic3BsaXQiPiR7bn08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQiPiR7aX08L2Rpdj5gfWZ1bmN0aW9uIG8oZSl7cmV0dXJuYDxkaXYgY2xhc3M9InRhcGUtZ3JpZCI+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5SZWNvcmQ8L2Rpdj48ZGl2IGNsYXNzPSJ2Ij4ke2EoZS5yZWNvcmQpfTwvZGl2PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRhcGUtY2VsbCI+PGRpdiBjbGFzcz0iayI+QWdlPC9kaXY+PGRpdiBjbGFzcz0idiI+JHtlLmFnZX08L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0YXBlLWNlbGwiPjxkaXYgY2xhc3M9ImsiPkhlaWdodDwvZGl2PjxkaXYgY2xhc3M9InYiPiR7YShlLmhlaWdodCl9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5SZWFjaDwvZGl2PjxkaXYgY2xhc3M9InYiPiR7YShlLnJlYWNoKX08L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0YXBlLWNlbGwiPjxkaXYgY2xhc3M9ImsiPkxlZyByZWFjaDwvZGl2PjxkaXYgY2xhc3M9InYiPiR7YShlLmxlZ1JlYWNoKX08L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0YXBlLWNlbGwiPjxkaXYgY2xhc3M9ImsiPkF2ZyBmaWdodCB0aW1lPC9kaXY+PGRpdiBjbGFzcz0idiI+JHthKGUuYXZnVGltZSl9PC9kaXY+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGFwZS1jZWxsIj48ZGl2IGNsYXNzPSJrIj5TdHlsZTwvZGl2PjxkaXYgY2xhc3M9InYiPiR7YShlLnN0eWxlKX08L2Rpdj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0YXBlLWNlbGwiPjxkaXYgY2xhc3M9ImsiPkNhbXA8L2Rpdj48ZGl2IGNsYXNzPSJ2IiBzdHlsZT0iZm9udC1zaXplOjAuNjg3NXJlbSI+JHthKGUuZ3ltKX08L2Rpdj48L2Rpdj5cbiAgPC9kaXY+YH1mdW5jdGlvbiByKGUsdCl7Y29uc3Qgbj1bZS5yYW5rLGUucGZwXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIC8vICIpO3JldHVybmA8ZGl2IGNsYXNzPSJjb3JuZXIgJHt0fSI+XG4gICAgPGRpdiBjbGFzcz0iZmlnIj5cbiAgICAgIDxpbWcgc3JjPSIke2UuaW1nfSIgYWx0PSIke2EoZS5maXJzdCl9ICR7YShlLmxhc3QpfSIgbG9hZGluZz0ibGF6eSIgcmVmZXJyZXJwb2xpY3k9Im5vLXJlZmVycmVyIlxuICAgICAgICAgICBvbmVycm9yPSJ0aGlzLmNsb3Nlc3QoJy5maWcnKS5jbGFzc0xpc3QuYWRkKCdmYWlsZWQnKSI+XG4gICAgICA8c3BhbiBjbGFzcz0ibW9uby1mYiI+JHthKGUuaW5pdGlhbHMpfTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPSJmbGFnIj4ke2EoZS5mbGFnKX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT0ibWluLXdpZHRoOjA7cGFkZGluZy1ib3R0b206NnB4Ij5cbiAgICAgICR7ZS5uaWNrP2A8ZGl2IGNsYXNzPSJmLW5pY2siPiIke2EoZS5uaWNrKX0iPC9kaXY+YDoiIn1cbiAgICAgIDxkaXYgY2xhc3M9ImYtbmFtZSI+JHthKGUuZmlyc3QpfTxicj4ke2EoZS5sYXN0KX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9ImYtc3ViIj4ke2UucmVjb3JkfSAke24/YDxzcGFuIGNsYXNzPSJmLXJhbmsiPi8vICR7YShuKX08L3NwYW4+YDoiIn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YH1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm91dHMiKS5pbm5lckhUTUw9bi5tYXAoKGUsdCk9PntyZXR1cm5gXG4gIDxhcnRpY2xlIGNsYXNzPSJib3V0JHtlLnRpdGxlPyIgdGl0bGUtYm91dCI6IiJ9IiBkYXRhLW9wZW49ImZhbHNlIj5cbiAgICA8YnV0dG9uIGNsYXNzPSJib3V0LWhlYWQiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJwYW5lbC0ke3R9Ij5cbiAgICAgIDxkaXYgY2xhc3M9ImJvdXQtc3RyaXAiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic2xvdCI+JHthKGUuc2xvdCl9PC9zcGFuPlxuICAgICAgICAke2UudGl0bGU/JzxzcGFuIGNsYXNzPSJiZWx0Ij5UaXRsZSBvbiB0aGUgbGluZTwvc3Bhbj4nOiIifVxuICAgICAgICA8c3BhbiBjbGFzcz0id2VpZ2h0Ij4ke2EoZS53ZWlnaHQpfSAvLyAke2EoZS5yb3VuZHMpfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGFwZSI+XG4gICAgICAgICR7cihlLnJlZCwicmVkIil9XG4gICAgICAgIDxkaXYgY2xhc3M9InZzLXNwaW5lIj48c3BhbiBjbGFzcz0ic3BpbmUtcnVsZSI+PC9zcGFuPlZTPHNwYW4gY2xhc3M9InNwaW5lLXJ1bGUiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgJHtyKGUuYmx1ZSwiYmx1ZSIpfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJleHBhbmQtY3VlIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImN1ZS1zaHV0Ij5UZWNobmljYWwgYnJlYWtkb3duPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0iY3VlLW9wZW4iPkNsb3NlIGJyZWFrZG93bjwvc3Bhbj5cbiAgICAgICAgPHN2ZyBjbGFzcz0iY2FyZXQiIHdpZHRoPSIxMSIgaGVpZ2h0PSI3IiB2aWV3Qm94PSIwIDAgMTEgNyIgZmlsbD0ibm9uZSIgYXJpYS1oaWRkZW49InRydWUiPlxuICAgICAgICAgIDxwYXRoIGQ9Ik0xIDFsNC41IDQuNUwxMCAxIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPSJwYW5lbC13cmFwIiBpZD0icGFuZWwtJHt0fSI+XG4gICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWluIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1sYWJlbCI+SGVhZCB0byBoZWFkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iY21wIj4ke249ZS5yZWQsZD1lLmJsdWUsaS5tYXAoZT0+e2NvbnN0IHQ9bltlLmtdLGE9ZFtlLmtdLGk9TWF0aC5taW4oMTAwLCh0fHwwKS9lLmRvbSoxMDApLHM9TWF0aC5taW4oMTAwLChhfHwwKS9lLmRvbSoxMDApLG89dD5hLHI9YT50O3JldHVybmA8ZGl2IGNsYXNzPSJjbXAtcm93Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0iY21wLXZhbCBsJHtvPyIiOiIgZGltIn0iPiR7ZS5mKHQpfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0cmFjayBsIj48c3BhbiBjbGFzcz0iZmlsbCR7bz8iIGxlYWQiOiIifSIgZGF0YS13PSIke2l9IiBzdHlsZT0id2lkdGg6MCUiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0iY21wLWtleSI+JHtlLmx9PHNwYW4gY2xhc3M9ImRvbSI+JHtlLmRsfTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idHJhY2sgciI+PHNwYW4gY2xhc3M9ImZpbGwke3I/IiBsZWFkIjoiIn0iIGRhdGEtdz0iJHtzfSIgc3R5bGU9IndpZHRoOjAlIj48L3NwYW4+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9ImNtcC12YWwgciR7cj8iIjoiIGRpbSJ9Ij4ke2UuZihhKX08L2Rpdj5cbiAgICAgIDwvZGl2PmB9KS5qb2luKCIiKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1ub3RlIj5cbiAgICAgICAgICAgIEJhcnMgYXJlIGRyYXduIHRvIHRoZSBmaXhlZCBzY2FsZSBzaG93biBiZXNpZGUgZWFjaCBtZXRyaWMuIEEgNTElIGJhciBmaWxsc1xuICAgICAgICAgICAgNTElIG9mIGl0cyB0cmFjay4gSGF0Y2hlZCBmaWxsIG1hcmtzIHdob2V2ZXIgbGVhZHMgdGhlIHJvdy5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1sYWJlbCI+RmlnaHRlciBwcm9maWxlczwvZGl2PlxuICAgICAgICAgICR7ZnVuY3Rpb24oZSx0KXtjb25zdCBuPShlLHQsbik9PmBcbiAgICA8ZGl2IGNsYXNzPSJwYyBsZWZ0JHtuPyIgaGRyIjoiIGJhbmQifSI+JHtlfTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InBjIHJpZ2h0JHtuPyIgaGRyIjoiIGJhbmQifSI+JHt0fTwvZGl2PmA7cmV0dXJuYDxkaXYgY2xhc3M9InByb2ZpbGVzIj5cbiAgICAke24oYDxoNCBjbGFzcz0icHJvZi1uYW1lIHJlZC1uIj4ke2EoZS5maXJzdCl9ICR7YShlLmxhc3QpfTwvaDQ+XG4gICAgICAgPGRpdiBjbGFzcz0iY29ybmVyLXRhZyI+UmVkIGNvcm5lciR7ZS5uaWNrPycgLy8gIicrYShlLm5pY2spKyciJzoiIn08L2Rpdj5gLGA8aDQgY2xhc3M9InByb2YtbmFtZSBibHVlLW4iPiR7YSh0LmZpcnN0KX0gJHthKHQubGFzdCl9PC9oND5cbiAgICAgICA8ZGl2IGNsYXNzPSJjb3JuZXItdGFnIj5CbHVlIGNvcm5lciR7dC5uaWNrPycgLy8gIicrYSh0Lm5pY2spKyciJzoiIn08L2Rpdj5gLCEwKX1cbiAgICAke24obyhlKSxvKHQpKX1cbiAgICAke24oYDxkaXYgY2xhc3M9InRyYWl0cyI+JHtlLnRyYWl0cy5tYXAoZT0+YDxzcGFuIGNsYXNzPSJ0cmFpdCI+JHthKGUpfTwvc3Bhbj5gKS5qb2luKCIiKX08L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ0cmFpdHMiPiR7dC50cmFpdHMubWFwKGU9PmA8c3BhbiBjbGFzcz0idHJhaXQiPiR7YShlKX08L3NwYW4+YCkuam9pbigiIil9PC9kaXY+YCl9XG4gICAgJHtuKGA8cCBjbGFzcz0icmVhZCI+JHthKGUucmVhZCl9PC9wPmAsYDxwIGNsYXNzPSJyZWFkIj4ke2EodC5yZWFkKX08L3A+YCl9XG4gICAgJHtuKHMoIldpbiBtZXRob2QgZGlzdHJpYnV0aW9uIixbe2M6InNwLWtvIixrOiJLTyIsdjplLmZpbmlzaC5rb30se2M6InNwLWRlYyIsazoiREVDIix2OmUuZmluaXNoLmRlY30se2M6InNwLXN1YiIsazoiU1VCIix2OmUuZmluaXNoLnN1Yn1dKSxzKCJXaW4gbWV0aG9kIGRpc3RyaWJ1dGlvbiIsW3tjOiJzcC1rbyIsazoiS08iLHY6dC5maW5pc2gua299LHtjOiJzcC1kZWMiLGs6IkRFQyIsdjp0LmZpbmlzaC5kZWN9LHtjOiJzcC1zdWIiLGs6IlNVQiIsdjp0LmZpbmlzaC5zdWJ9XSkpfVxuICAgICR7bihzKCJTaWduaWZpY2FudCBzdHJpa2VzIGJ5IHRhcmdldCIsW3tjOiJzcC1oZWFkIixrOiJIZWFkIix2OmUudGFyZ2V0LmhlYWR9LHtjOiJzcC1ib2R5IixrOiJCb2R5Iix2OmUudGFyZ2V0LmJvZHl9LHtjOiJzcC1sZWciLGs6IkxlZyIsdjplLnRhcmdldC5sZWd9XSkscygiU2lnbmlmaWNhbnQgc3RyaWtlcyBieSB0YXJnZXQiLFt7Yzoic3AtaGVhZCIsazoiSGVhZCIsdjp0LnRhcmdldC5oZWFkfSx7Yzoic3AtYm9keSIsazoiQm9keSIsdjp0LnRhcmdldC5ib2R5fSx7Yzoic3AtbGVnIixrOiJMZWciLHY6dC50YXJnZXQubGVnfV0pKX1cbiAgPC9kaXY+YH0oZS5yZWQsZS5ibHVlKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJkaWN0Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZrIj5XaGVyZSB0aGlzIGZpZ2h0IGlzIGRlY2lkZWQ8L2Rpdj5cbiAgICAgICAgICAgIDxwPiR7YShlLnZlcmRpY3QpfTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJzcmMiPlNvdXJjZTogVUZDLmNvbSBhdGhsZXRlIHJlY29yZHMsIHJldHJpZXZlZCA2IE9jdCAyMDI2PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvYXJ0aWNsZT5cbmA7dmFyIG4sZH0pLmpvaW4oIiIpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ib3V0LWhlYWQiKS5mb3JFYWNoKGU9PntlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2NvbnN0IHQ9ZS5jbG9zZXN0KCIuYm91dCIpLG49InRydWUiPT09dC5kYXRhc2V0Lm9wZW47dC5kYXRhc2V0Lm9wZW49U3RyaW5nKCFuKSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsU3RyaW5nKCFuKSk7Y29uc3QgYT10LnF1ZXJ5U2VsZWN0b3JBbGwoIi50cmFjayAuZmlsbCIpO24/YS5mb3JFYWNoKGU9PntlLnN0eWxlLndpZHRoPSIwJSJ9KTooYS5mb3JFYWNoKGU9PntlLnN0eWxlLndpZHRoPSIwJSJ9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2EuZm9yRWFjaCgoZSx0KT0+e3NldFRpbWVvdXQoKCk9PntlLnN0eWxlLndpZHRoPWUuZGF0YXNldC53KyIlIn0sMTIwKzQwKnQpfSl9KSkpfSl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmFxIikuaW5uZXJIVE1MPVt7cToiV2hlbiBhbmQgd2hlcmUgaXMgVUZDIDMzMz8iLGE6IlVGQyAzMzMgdGFrZXMgcGxhY2Ugb24gU2F0dXJkYXkgMjQgT2N0b2JlciAyMDI2IGF0IEV0aWhhZCBBcmVuYSwgWWFzIElzbGFuZCwgQWJ1IERoYWJpLCBoZWFkbGluaW5nIEFidSBEaGFiaSBTaG93ZG93biBXZWVrLiBNYWluIGNhcmQgaXMgc2NoZWR1bGVkIGZvciAyMjowMCBHdWxmIFN0YW5kYXJkIFRpbWUsIHdpdGggcHJlbGltcyBmcm9tIDIwOjAwIGFuZCBlYXJseSBwcmVsaW1zIGZyb20gMTg6MDAuIENoZWNrIHlvdXIgdGlja2V0IGZvciBmaW5hbCBkb29yIHRpbWVzLiJ9LHtxOiJXaG8gaXMgZmlnaHRpbmcgYXQgVUZDIDMzMz8iLGE6IkFsZXhhbmRlciBWb2xrYW5vdnNraSBkZWZlbmRzIHRoZSBmZWF0aGVyd2VpZ2h0IHRpdGxlIGFnYWluc3QgTW92c2FyIEV2bG9ldiBpbiB0aGUgbWFpbiBldmVudCwgYW5kIFBldHIgWWFuIGRlZmVuZHMgdGhlIGJhbnRhbXdlaWdodCB0aXRsZSBhZ2FpbnN0IE1lcmFiIER2YWxpc2h2aWxpIGluIHRoZSBjby1tYWluLiBUaGUgbWFpbiBjYXJkIGFsc28gaGFzIExvbmUnZXIgS2F2YW5hZ2ggdnMgUmFtYXphbiBUZW1pcm92IGF0IGZseXdlaWdodCwgQWxleGFuZGVyIFZvbGtvdiB2cyBSaXp2YW4gS3VuaWV2IGF0IGhlYXZ5d2VpZ2h0IGFuZCBBcm5vbGQgQWxsZW4gdnMgQWFyb24gUGljbyBhdCBmZWF0aGVyd2VpZ2h0LiBPbiB0aGUgcHJlbGltczogQXphbWF0IE11cnpha2Fub3YgdnMgRG9taW5pY2sgUmV5ZXMgYW5kIE5pa2l0YSBLcnlsb3YgdnMgQWJkdWwgUmFraG1hbiBZYWtoeWFldiBhdCBsaWdodCBoZWF2eXdlaWdodCwgQWJ1cyBNYWdvbWVkb3YgdnMgQ2FtIFJvd3N0b24gYXQgbWlkZGxld2VpZ2h0LCBhbmQgR3JhbnQgRGF3c29uIHZzIE51cnVsbG8gQWxpZXYgYXQgbGlnaHR3ZWlnaHQuIFRoZSBjYXJkIGlzIHN1YmplY3QgdG8gY2hhbmdlLiJ9LHtxOiJXaGF0IGRvZXMgYSBVRkMgQWJ1IERoYWJpIHRpY2tldCBhbmQgaG90ZWwgcGFja2FnZSBpbmNsdWRlPyIsYToiRXZlcnkgcGFja2FnZSBpbmNsdWRlcyB5b3VyIG9mZmljaWFsIG1hdGNoIHRpY2tldCBpbiB5b3VyIGNob3NlbiBjYXRlZ29yeSwgb25lIG5pZ2h0J3MgYWNjb21tb2RhdGlvbiBvbiBvciBuZWFyIFlhcyBJc2xhbmQsIGFsbCB0YXhlcyBhbmQgVkFULCBhbmQgdGhlIHNlcnZpY2VzIG9mIHRoZSBFUyBTcG9ydCB0ZWFtIGluIEFidSBEaGFiaS4gQ2F0ZWdvcmllcyBydW4gZnJvbSA4IHRocm91Z2ggdG8gMywgcGx1cyBWSVAgZmxvb3Igc2VhdGluZy4gU3RheXMgY2FuIGJlIGV4dGVuZGVkIGJleW9uZCBvbmUgbmlnaHQgYW5kIG11bHRpcGxlIHRpY2tldHMgY2FuIGJlIGJvb2tlZCB1bmRlciBhIHNpbmdsZSBwYWNrYWdlLiBUZWxsIHVzIHdoYXQgeW91IG5lZWQgb24gdGhlIGVucXVpcnkgZm9ybS4ifSx7cToiSXMgdGhlcmUgcGFya2luZyBhdCBFdGloYWQgQXJlbmE/IixhOiJZZXMuIE9uLXNpdGUgcGFya2luZyBhdCBZYXMgQmF5IGlzIGZyZWUgYW5kIHNpZ25wb3N0ZWQgZnJvbSB0aGUgWWFzIElzbGFuZCBhcHByb2FjaCByb2Fkcy4gQXJyaXZlIGVhcmx5IG9uIGZpZ2h0IG5pZ2h0LiBUaGUgYXJlbmEgc2l0cyBhbG9uZ3NpZGUgdGhlIFlhcyBCYXkgV2F0ZXJmcm9udCByZXN0YXVyYW50cyBhbmQgdGhlIGFyZWEgZmlsbHMgd2VsbCBiZWZvcmUgZmlyc3QgYmVsbC4ifSx7cToiSG93IHdpbGwgSSByZWNlaXZlIG15IHRpY2tldCBhbmQgY29uZmlybWF0aW9uPyIsYToiQ29uZmlybWF0aW9uIGlzIGVtYWlsZWQgb25jZSB5b3VyIHBhY2thZ2UgaXMgc2VjdXJlZC4gVGlja2V0cyBhcmUgaXNzdWVkIGRpZ2l0YWxseSBhaGVhZCBvZiB0aGUgZXZlbnQsIHdpdGggY29sbGVjdGlvbiBkZXRhaWxzIGNvbmZpcm1lZCBpbiB3cml0aW5nIGJlZm9yZWhhbmQuIElmIGFueXRoaW5nIGlzIHVuY2xlYXIsIHJlcGx5IHRvIHlvdXIgY29uZmlybWF0aW9uIGVtYWlsIGFuZCBpdCBnb2VzIHN0cmFpZ2h0IHRvIHRoZSB0ZWFtIGhhbmRsaW5nIHlvdXIgYm9va2luZy4ifSx7cToiQ2FuIEkgYm9vayBmb3IgYSBncm91cCBvciBmb3IgY29ycG9yYXRlIGhvc3Rpbmc/IixhOiJZZXMuIEdyb3VwIGFuZCBjb3Jwb3JhdGUgYm9va2luZ3MgYXJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgdGhlIEVTIFNwb3J0IHRlYW0uIEVtYWlsIGluZm9AZXMtc3BvcnQuYWUgd2l0aCB0aGUgaGVhZGNvdW50LCB0aGUgY2F0ZWdvcnkgYW5kIHdoZXRoZXIgeW91IG5lZWQgaG9zcGl0YWxpdHksIGFuZCB3ZSB3aWxsIGNvbWUgYmFjayB3aXRoIGEgdGFpbG9yZWQgcHJvcG9zYWwuIn1dLm1hcCgoZSx0KT0+YFxuICA8ZGl2IGNsYXNzPSJmYXEtaXRlbSIgZGF0YS1vcGVuPSJmYWxzZSI+XG4gICAgPGJ1dHRvbiBjbGFzcz0iZmFxLXEiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJmYS0ke3R9Ij5cbiAgICAgIDxzcGFuIGNsYXNzPSJpeCI+JHtTdHJpbmcodCsxKS5wYWRTdGFydCgyLCIwIil9PC9zcGFuPlxuICAgICAgPHNwYW4+JHthKGUucSl9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9InBtIiBhcmlhLWhpZGRlbj0idHJ1ZSI+Kzwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPSJmYXEtd3JhcCIgaWQ9ImZhLSR7dH0iPlxuICAgICAgPGRpdiBjbGFzcz0iZmFxLWEiPjxkaXYgY2xhc3M9ImZhcS1hLWluIj4ke2EoZS5hKX08L2Rpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+YCkuam9pbigiIiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmZhcS1xIikuZm9yRWFjaChlPT57ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pntjb25zdCB0PWUuY2xvc2VzdCgiLmZhcS1pdGVtIiksbj0idHJ1ZSI9PT10LmRhdGFzZXQub3Blbjt0LmRhdGFzZXQub3Blbj1TdHJpbmcoIW4pLGUuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoIW4pKX0pfSksZnVuY3Rpb24oKXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2c3RvcnkiKTtpZighZSlyZXR1cm47Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi52c3RvcnktaGVhZCIpO3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57Y29uc3Qgbj0idHJ1ZSI9PT1lLmRhdGFzZXQub3BlbjtlLmRhdGFzZXQub3Blbj1TdHJpbmcoIW4pLHQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixTdHJpbmcoIW4pKX0pfSgpO2NvbnN0IGQ9bmV3IERhdGUoIjIwMjYtMTAtMjRUMTg6MDA6MDArMDQ6MDAiKS5nZXRUaW1lKCksYz1lPT5TdHJpbmcoZSkucGFkU3RhcnQoMiwiMCIpO2Z1bmN0aW9uIGwoKXtjb25zdCBlPWQtRGF0ZS5ub3coKTtlPD0wP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjZC1jZWxscyIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iY2QtY2VsbCIgc3R5bGU9ImZsZXg6MSI+PGRpdiBjbGFzcz0iY2QtbiI+TElWRTwvZGl2PjxkaXYgY2xhc3M9ImNkLWwiPkV0aWhhZCBBcmVuYTwvZGl2PjwvZGl2Pic6KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjZC1kIikudGV4dENvbnRlbnQ9TWF0aC5mbG9vcihlLzg2NGU1KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2QtaCIpLnRleHRDb250ZW50PWMoTWF0aC5mbG9vcihlJTg2NGU1LzM2ZTUpKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2QtbSIpLnRleHRDb250ZW50PWMoTWF0aC5mbG9vcihlJTM2ZTUvNmU0KSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNkLXMiKS50ZXh0Q29udGVudD1jKE1hdGguZmxvb3IoZSU2ZTQvMWUzKSkpfWwoKSxzZXRJbnRlcnZhbChsLDFlMyk7dmFyIHU9e2V2ZW50OiJVRkMgMzMzIix2ZW51ZToiRXRpaGFkIEFyZW5hLCBBYnUgRGhhYmkiLGN1cnJlbmN5OiJBRUQiLGRlZmF1bHRHdWVzdHM6MSxjYXRlZ29yaWVzOnsxOntuYW1lOiJDYXRlZ29yeSAxIixhcmVhOiJGbG9vciIsY29sb3VyOiIjNkExMDEwIixwcmljZTpudWxsLG5vdGU6IiJ9LDI6e25hbWU6IkNhdGVnb3J5IDIiLGFyZWE6IkZsb29yIixjb2xvdXI6IiMwODZGODEiLHByaWNlOjEzNjIwLG5vdGU6IlN1YmplY3QgdG8gYXZhaWxhYmlsaXR5In0sMzp7bmFtZToiQ2F0ZWdvcnkgMyIsYXJlYToiRmxvb3IiLGNvbG91cjoiI0QzMUM1NSIscHJpY2U6MTExMjAsbm90ZToiU3ViamVjdCB0byBhdmFpbGFiaWxpdHkifSw0OntuYW1lOiJDYXRlZ29yeSA0IixhcmVhOiJGbG9vciIsY29sb3VyOiIjMjlBOUQ5IixwcmljZToxMjIxMCxub3RlOiJTdWJqZWN0IHRvIGF2YWlsYWJpbGl0eSJ9LDU6e25hbWU6IkNhdGVnb3J5IDUiLGFyZWE6Ikxvd2VyIGJvd2wiLGNvbG91cjoiIzI5NzM1OSIscHJpY2U6NzI4NSxub3RlOiIifSw2OntuYW1lOiJDYXRlZ29yeSA2IixhcmVhOiJMb3dlciBib3dsIixjb2xvdXI6IiM5RDVDMkYiLHByaWNlOjIzNzAsbm90ZToiIn0sNzp7bmFtZToiQ2F0ZWdvcnkgNyIsYXJlYToiTG93ZXIgYm93bCIsY29sb3VyOiIjOUQ5OENBIixwcmljZToxNDUwLG5vdGU6IiJ9LDg6e25hbWU6IkNhdGVnb3J5IDgiLGFyZWE6IlVwcGVyIGJvd2wiLGNvbG91cjoiIzg1ODk4RCIscHJpY2U6MTYyMCxub3RlOiIifX0sc29sZE91dENhdGVnb3JpZXM6WzQsOF0saGlkZGVuRmllbGROYW1lOiJzZWF0bWFwLXNlbGVjdGlvbiIsZW5xdWlyeVVybDoiIixvbkVucXVpcmU6bnVsbH07IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc1NlYXRNYXAiKTtpZihlKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU3RhZ2UiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21TdmciKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21WcCIpLGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbVRpcCIpLHM9dSxvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4ucXVlcnlTZWxlY3RvckFsbCgiLmVzbS1ibGsiKSkscj17fSxkPW51bGwsYz0ibW91c2UiO28uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGF0YS1jYXQiKTtTKHQpP2UuY2xhc3NMaXN0LmFkZCgiaXMtb3V0Iik6KGUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSxlLnNldEF0dHJpYnV0ZSgicm9sZSIsImJ1dHRvbiIpLGUuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiU2VsZWN0ICIrcy5jYXRlZ29yaWVzW3RdLm5hbWUrIiAoIitzLmNhdGVnb3JpZXNbdF0uYXJlYSsiKSwgIitmdW5jdGlvbihlKXt2YXIgdD1zLmNhdGVnb3JpZXNbZV0ucHJpY2U7cmV0dXJuIG51bGw9PT10PyJwcmljZSBvbiByZXF1ZXN0IjpzLmN1cnJlbmN5KyIgIit4KHQpKyIgcGVyIHBlcnNvbiJ9KHQpKSl9KTt2YXIgbCxoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21CYW5kcyIpO28uZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixmdW5jdGlvbihlKXtjPWUucG9pbnRlclR5cGV9KSxlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxrIiksbz1zLmNhdGVnb3JpZXNbbl0scj1lLmNsYXNzTGlzdC5jb250YWlucygiaXMtb3V0Iik7aS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS10aXBjIixvLmNvbG91ciksaS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVzbS10aXAtayI+JytvLmFyZWErKGE/IiAmbWlkZG90OyBuZWFyIHNlY3Rpb24gIithOiIiKSsnPC9kaXY+PGRpdiBjbGFzcz0iZXNtLXRpcC1uIj4nK28ubmFtZSsiPC9kaXY+Iisocj8nPGRpdiBjbGFzcz0iZXNtLXRpcC1wIGlzLXJlcSIgc3R5bGU9ImNvbG9yOnZhcigtLWRpbSkiPlNvbGQgb3V0PC9kaXY+JzpudWxsPT09by5wcmljZT8nPGRpdiBjbGFzcz0iZXNtLXRpcC1wIj5PbiByZXF1ZXN0PC9kaXY+JzonPGRpdiBjbGFzcz0iZXNtLXRpcC1wIj48c21hbGw+JytzLmN1cnJlbmN5KyI8L3NtYWxsPiIreChvLnByaWNlKSsiPC9kaXY+IikrJzxkaXYgY2xhc3M9ImVzbS10aXAteCI+Jysocj8iQ3VycmVudGx5IHVuYXZhaWxhYmxlIjoiUGVyIHBlcnNvbiAmbWlkZG90OyByZXNlcnZlZCBieSBjYXRlZ29yeSIpKyI8L2Rpdj4iLGkuY2xhc3NMaXN0LmFkZCgiaXMtb24iKSxDKHQpfShlLHQpfSksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLEMpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsSSksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24odCl7a3x8KHQuc3RvcFByb3BhZ2F0aW9uKCksTShlKSwidG91Y2giPT09YyYmKGNsZWFyVGltZW91dChsKSxsPXNldFRpbWVvdXQoSSwxNjAwKSkpfSksZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbih0KXsiRW50ZXIiIT09dC5rZXkmJiIgIiE9PXQua2V5fHwodC5wcmV2ZW50RGVmYXVsdCgpLE0oZSkpfSl9KTt2YXIgbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtTGlzdCIpLGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbUVtcHR5IiksZz17fTt2YXIgZXNtU2VuZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU2VuZCIpO2Z1bmN0aW9uIHVwZGF0ZUVzbUN0YSgpe3ZhciB0PVIoKSxuNT10Lml0ZW1zLmxlbmd0aD09PTEmJk51bWJlcihTdHJpbmcodC5pdGVtc1swXS5jYXRlZ29yeSkucmVwbGFjZSgvXEQvZywiIikpPT09NTtlc21TZW5kLnRleHRDb250ZW50PW41PyJCdXkgTm93IjoiU2VuZCBlbnF1aXJ5Ijtlc21TZW5kLmNsYXNzTGlzdC50b2dnbGUoImVzLWhvdGVsLWJ1eSIsbjUpO2VzbVNlbmQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixuNT8iQnV5IE5vdyI6IlNlbmQgZW5xdWlyeSIpO2lmKG41KXtlc21TZW5kLmNsYXNzTGlzdC5hZGQoImVzLWhvdGVsLWJvb2stdHJpZ2dlciIpO2VzbVNlbmQuc2V0QXR0cmlidXRlKCJkYXRhLW9wZW4taG90ZWwtYm9va2luZyIsIiIpfWVsc2V7ZXNtU2VuZC5jbGFzc0xpc3QucmVtb3ZlKCJlcy1ob3RlbC1ib29rLXRyaWdnZXIiKTtlc21TZW5kLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1vcGVuLWhvdGVsLWJvb2tpbmciKX19ZXNtU2VuZC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZXYpe3ZhciB0PVIoKSxuNT10Lml0ZW1zLmxlbmd0aD09PTEmJk51bWJlcihTdHJpbmcodC5pdGVtc1swXS5jYXRlZ29yeSkucmVwbGFjZSgvXEQvZywiIikpPT09NTtpZihuNSl7d2luZG93LkVTX0hPVEVMX0JPT0tfQ09ORklHPXtwcm9kdWN0SWQ6ODE3NSxwcm9kdWN0TmFtZToiVUZDIDMzMyBDQVQgNSBUaWNrZXQgKyBIb3RlbCAoSGF3dGhvcm4gU3VpdGVzIGJ5IFd5bmRoYW0gQWJ1IERoYWJpKSIscHJvZHVjdFByaWNlOjcyODUsbWluaW11bVN0YXk6Mixob3RlbElkczoiIixjaXR5SWQ6IiIsY291bnRyeUNvZGU6IkFFIixjYW5jZWxsYXRpb246ZmFsc2UsZGlzcGxheUhvdGVsUHJpY2U6ZmFsc2UsYWpheFVybDoiaHR0cHM6Ly93d3cuZXMtc3BvcnQuYWUvd3AtYWRtaW4vYWRtaW4tYWpheC5waHAifTtyZXR1cm47fWRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJlc3Nwb3J0OnNlYXRtYXAtZW5xdWlyeSIse2RldGFpbDp0LGJ1YmJsZXM6ITB9KSk7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25hbWU9Iicrcy5oaWRkZW5GaWVsZE5hbWUrJyJdJyk7aWYobnx8KChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnR5cGU9ImhpZGRlbiIsbi5uYW1lPXMuaGlkZGVuRmllbGROYW1lLGUuYXBwZW5kQ2hpbGQobikpLG4udmFsdWU9dC5zdW1tYXJ5KyJcblxuRXN0aW1hdGVkIHRvdGFsOiAiK3MuY3VycmVuY3krIiAiK3godC5lc3RpbWF0ZWRUb3RhbCkrIiAoZXhjbC4gVkFUKSIsImZ1bmN0aW9uIiE9dHlwZW9mIHMub25FbnF1aXJlfHwhMCE9PXMub25FbnF1aXJlKHQpKWlmKHMuZW5xdWlyeVVybCl7dmFyIGE9bmV3IFVSTFNlYXJjaFBhcmFtcyh7ZXZlbnQ6dC5ldmVudCxzZWF0czp0LnN1bW1hcnksZ3Vlc3RzOnQudG90YWxHdWVzdHMsdG90YWw6dC5lc3RpbWF0ZWRUb3RhbH0pO3dpbmRvdy5sb2NhdGlvbi5ocmVmPXMuZW5xdWlyeVVybCsocy5lbnF1aXJ5VXJsLmluZGV4T2YoIj8iKT4tMT8iJiI6Ij8iKSthLnRvU3RyaW5nKCl9ZWxzZSBlc09wZW5FbnF1aXJ5KCJUaWNrZXQgYW5kIGhvdGVsIHBhY2thZ2UiLCIiKX0pO3VwZGF0ZUVzbUN0YSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21DbGVhciIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3I9e30sJCgpLHEoKSxEKCl9KTt2YXIgdixwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21Ub2FzdCIpLHk9e2s6MSx4OjAseTowfTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtSW4iKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgZT1IKCk7TigxLjQ1LGVbMF0sZVsxXSl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtT3V0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGU9SCgpO04oMS8xLjQ1LGVbMF0sZVsxXSl9KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtUnN0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7eT17azoxLHg6MCx5OjB9LEYoKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKGUpe2lmKCFlLmN0cmxLZXkmJiFlLm1ldGFLZXkpe2VzTWFwRmxhc2godCwiQ3RybCArIHNjcm9sbCB0byB6b29tIik7cmV0dXJufWUucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO04oZS5kZWx0YVk8MD8xLjE4OjEvMS4xOCxlLmNsaWVudFgtbi5sZWZ0LGUuY2xpZW50WS1uLnRvcCl9LHtwYXNzaXZlOiExfSk7dmFyIGI9ITEsaz0hMSx3PW51bGwsRT17fSxMPW51bGw7aWYodC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsZnVuY3Rpb24oZSl7aWYoRVtlLnBvaW50ZXJJZF09e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfSwyPT09T2JqZWN0LmtleXMoRSkubGVuZ3RoKXt2YXIgdD1PYmplY3Qua2V5cyhFKSxuPUVbdFswXV0sYT1FW3RbMV1dO3JldHVybiBMPU1hdGguaHlwb3Qobi54LWEueCxuLnktYS55KSx2b2lkKGI9ITEpfWI9ITAsaz0hMSx3PXt4OmUuY2xpZW50WCx5OmUuY2xpZW50WX19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKGUpe0VbZS5wb2ludGVySWRdJiYoRVtlLnBvaW50ZXJJZF09e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfSk7dmFyIG49T2JqZWN0LmtleXMoRSk7aWYoMj09PW4ubGVuZ3RoJiZMKXt2YXIgYT1FW25bMF1dLGk9RVtuWzFdXSxzPU1hdGguaHlwb3QoYS54LWkueCxhLnktaS55KSxvPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIE4ocy9MLChhLngraS54KS8yLW8ubGVmdCwoYS55K2kueSkvMi1vLnRvcCksdm9pZChMPXMpfWlmKGIpe3ZhciBwej1lc21QWCgpLHI9KGUuY2xpZW50WC13LngpL3B6LnMsZD0oZS5jbGllbnRZLXcueSkvcHoucztNYXRoLmFicyhyKStNYXRoLmFicyhkKT40JiYoaz0hMCx0LmNsYXNzTGlzdC5hZGQoImlzLXBhbm5pbmciKSxJKCkpLHkueCs9cix5LnkrPWQsdz17eDplLmNsaWVudFgseTplLmNsaWVudFl9LEYoKX19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixVKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsVSksdC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybGVhdmUiLGZ1bmN0aW9uKCl7SSgpfSksd2luZG93LkVTU2VhdE1hcD17Y29uZmlnOnMsZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFIoKX0sY2xlYXI6ZnVuY3Rpb24oKXtyPXt9LCQoKSxxKCksRCgpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9bi5xdWVyeVNlbGVjdG9yKCcuZXNtLWJsa1tkYXRhLWNhdD0iJytlKyciXScpO3QmJk0odCl9LHNldFNvbGRPdXQ6ZnVuY3Rpb24oZSl7cy5zb2xkT3V0Q2F0ZWdvcmllcz1lfHxbXSxvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9UyhlLmdldEF0dHJpYnV0ZSgiZGF0YS1jYXQiKSk7ZS5jbGFzc0xpc3QudG9nZ2xlKCJpcy1vdXQiLHQpLHQ/ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iik6ZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfSkscSgpfSxzZXRQcmljZTpmdW5jdGlvbihlLHQpe3MuY2F0ZWdvcmllc1tlXS5wcmljZT10LHEoKSxEKCl9fSx3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihob3Zlcjogbm9uZSkiKS5tYXRjaGVzKXt2YXIgQT1lLnF1ZXJ5U2VsZWN0b3IoIi5lc20taGludCIpO0EmJihBLnRleHRDb250ZW50PSJQaW5jaCB0byB6b29tIMK3IGRyYWcgdG8gcGFuIil9cSgpLEQoKSxGKCl9ZnVuY3Rpb24geChlKXtyZXR1cm4gZS50b0xvY2FsZVN0cmluZygiZW4tVVMiKX1mdW5jdGlvbiBUKGUpe3JldHVybiBTdHJpbmcoZSl9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gcy5zb2xkT3V0Q2F0ZWdvcmllcy5pbmRleE9mKE51bWJlcihlKSk+LTF9ZnVuY3Rpb24gcSgpe2guaW5uZXJIVE1MPSIiLE9iamVjdC5rZXlzKHMuY2F0ZWdvcmllcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1zLmNhdGVnb3JpZXNbZV0sbj1zLnNvbGRPdXRDYXRlZ29yaWVzLmluZGV4T2YoTnVtYmVyKGUpKT4tMSxhPXJbZV0/cltlXS5ndWVzdHM6MCxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2kudHlwZT0iYnV0dG9uIixpLmNsYXNzTmFtZT0iZXNtLWJhbmQiKyhkPT1lPyIgaXMtYWN0aXZlIjoiIiksaS5zZXRBdHRyaWJ1dGUoImRhdGEtY2F0IixlKSxpLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIixkPT1lPyJ0cnVlIjoiZmFsc2UiKTt2YXIgbz1uPyc8c3BhbiBjbGFzcz0iZXNtLWJhbmQtcCBpcy1yZXEiPlNvbGQgb3V0PC9zcGFuPic6bnVsbD09PXQucHJpY2U/JzxzcGFuIGNsYXNzPSJlc20tYmFuZC1wIGlzLXJlcSI+T24gcmVxdWVzdDwvc3Bhbj4nOic8c3BhbiBjbGFzcz0iZXNtLWJhbmQtcCI+PHNwYW4+JytzLmN1cnJlbmN5KyI8L3NwYW4+Iit4KHQucHJpY2UpKyI8L3NwYW4+IjtpLmlubmVySFRNTD0nPHNwYW4gY2xhc3M9ImVzbS1iYW5kLWNoaXAiIHN0eWxlPSJiYWNrZ3JvdW5kOicrdC5jb2xvdXIrJyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJlc20tYmFuZC1uIj4nK3QubmFtZSsiPHM+Iit0LmFyZWErKHQubm90ZT8iICZtaWRkb3Q7ICIrdC5ub3RlOiIiKSsiPC9zPjwvc3Bhbj4iK28rKGE/JzxzcGFuIGNsYXNzPSJlc20tYmFuZC1jIj4nK2ErIjwvc3Bhbj4iOiIiKSxpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtkPWQ9PWU/bnVsbDplLEIoZCksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbUZpbHRlck5vdGUiKS50ZXh0Q29udGVudD1kP3MuY2F0ZWdvcmllc1tkXS5uYW1lKyIgb25seSI6IkFsbCBzaG93biIscSgpfShlKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsZnVuY3Rpb24oKXtkfHxCKGUpfSksaS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2R8fEIobnVsbCl9KSxoLmFwcGVuZENoaWxkKGkpfSl9ZnVuY3Rpb24gQih0KXtlLmNsYXNzTGlzdC50b2dnbGUoImlzLWZpbHRlcmVkIixudWxsIT09dCksby5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LnRvZ2dsZSgiaXMtbGl0IixudWxsIT09dCYmZS5nZXRBdHRyaWJ1dGUoImRhdGEtY2F0Iik9PXQpfSl9ZnVuY3Rpb24gQyhlKXt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9ZS5jbGllbnRYLW4ubGVmdCsxNixzPWUuY2xpZW50WS1uLnRvcCsxNjthK2kub2Zmc2V0V2lkdGg+bi53aWR0aC04JiYoYT1lLmNsaWVudFgtbi5sZWZ0LWkub2Zmc2V0V2lkdGgtMTIpLHMraS5vZmZzZXRIZWlnaHQ+bi5oZWlnaHQtOCYmKHM9ZS5jbGllbnRZLW4udG9wLWkub2Zmc2V0SGVpZ2h0LTEyKSxpLnN0eWxlLmxlZnQ9TWF0aC5tYXgoNixhKSsicHgiLGkuc3R5bGUudG9wPU1hdGgubWF4KDYscykrInB4In1mdW5jdGlvbiBJKCl7aS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1vbiIpfWZ1bmN0aW9uIE0oZSl7aWYoZS5jbGFzc0xpc3QuY29udGFpbnMoImlzLW91dCIpKU8oIlRoYXQgY2F0ZWdvcnkgaXMgc29sZCBvdXQiKTtlbHNle3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpLG49VCh0KTtyW25dP2RlbGV0ZSByW25dOihyW25dPXtjYXQ6TnVtYmVyKHQpLGd1ZXN0czpzLmRlZmF1bHRHdWVzdHN9LE8ocy5jYXRlZ29yaWVzW3RdLm5hbWUrIiBzZWxlY3RlZCIpKSwkKCkscSgpLEQoKSxyW25dJiZvLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5nZXRBdHRyaWJ1dGUoImRhdGEtY2F0Iik9PT10JiYoZS5jbGFzc0xpc3QucmVtb3ZlKCJtby1oaXQiKSxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGUuY2xhc3NMaXN0LmFkZCgibW8taGl0IiksZS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uIHQoKXtlLmNsYXNzTGlzdC5yZW1vdmUoIm1vLWhpdCIpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0KX0pKX0pfX1mdW5jdGlvbiAkKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSEhcltUKGUuZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpKV07ZS5jbGFzc0xpc3QudG9nZ2xlKCJpcy1zZWwiLHQpLGUuc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLHQ/InRydWUiOiJmYWxzZSIpfSl9ZnVuY3Rpb24gRCgpe3ZhciBlPU9iamVjdC5rZXlzKHIpO20uaW5uZXJIVE1MPSIiLGYuc3R5bGUuZGlzcGxheT1lLmxlbmd0aD8ibm9uZSI6ImJsb2NrIixlLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcltlXS5jYXQtclt0XS5jYXR9KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9cltlXSxuPXMuY2F0ZWdvcmllc1t0LmNhdF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmNsYXNzTmFtZT0iZXNtLXJvdyIsYS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1yb3djIixuLmNvbG91ciksYS5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJlc20tcm93LWJhciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJlc20tcm93LW4iPicrbi5uYW1lKyI8cz4iK24uYXJlYSsiICZtaWRkb3Q7ICIrKG51bGw9PT1uLnByaWNlPyJvbiByZXF1ZXN0IjpzLmN1cnJlbmN5KyIgIit4KG4ucHJpY2UpKyIgcHAiKSsnPC9zPjwvc3Bhbj48c3BhbiBjbGFzcz0iZXNtLXF0eSI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtYT0iLSIgYXJpYS1sYWJlbD0iRmV3ZXIgZ3Vlc3RzIj4mbWludXM7PC9idXR0b24+PHNwYW4+Jyt0Lmd1ZXN0cysnPC9zcGFuPjxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWE9IisiIGFyaWEtbGFiZWw9Ik1vcmUgZ3Vlc3RzIj4rPC9idXR0b24+PC9zcGFuPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZXNtLWRlbCIgZGF0YS1hPSJ4IiBhcmlhLWxhYmVsPSJSZW1vdmUgJytuLm5hbWUrJyI+JnRpbWVzOzwvYnV0dG9uPicsZ1tlXXx8YS5jbGFzc0xpc3QuYWRkKCJtby1uZXciKSxhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihuKXt2YXIgYT1uLnRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYSIpO2EmJigiKyI9PT1hJiZ0Lmd1ZXN0cysrLCItIj09PWEmJih0Lmd1ZXN0cz1NYXRoLm1heCgxLHQuZ3Vlc3RzLTEpKSwieCI9PT1hJiZkZWxldGUgcltlXSwkKCkscSgpLEQoKSl9KSxtLmFwcGVuZENoaWxkKGEpfSk7dmFyIHQ9MCxuPTAsYT0hMTtlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9cltlXSxvPXMuY2F0ZWdvcmllc1tpLmNhdF0ucHJpY2U7bis9aS5ndWVzdHMsbnVsbD09PW8/YT0hMDp0Kz1vKmkuZ3Vlc3RzfSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbUNvdW50IikudGV4dENvbnRlbnQ9ZS5sZW5ndGgrKDE9PT1lLmxlbmd0aD8iIGNhdGVnb3J5IjoiIGNhdGVnb3JpZXMiKSsobj8iIMK3ICIrbisoMT09PW4/IiBndWVzdCI6IiBndWVzdHMiKToiIiksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbVRvdGFsIikuaW5uZXJIVE1MPSI8c21hbGw+IitzLmN1cnJlbmN5KyI8L3NtYWxsPiIreCh0KSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtTm90ZSIpLmlubmVySFRNTD1lLmxlbmd0aD8iRXhjbHVkZXMgNSUgVkFULiIrKGE/IiBDYXRlZ29yeSZuYnNwOzEgaXMgcHJpY2VkIG9uIHJlcXVlc3QgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzIHRvdGFsLiI6IiIpOiIiLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21TZW5kIikuZGlzYWJsZWQ9IWUubGVuZ3RoO3ZhciBlc21Jc0NhdDU9ZS5sZW5ndGg9PT0xJiZOdW1iZXIocltlWzBdXS5jYXQpPT09NSxlc21CdG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzbVNlbmQiKTtlc21CdG4udGV4dENvbnRlbnQ9ZXNtSXNDYXQ1PyJCdXkgTm93IjoiU2VuZCBlbnF1aXJ5Ijtlc21CdG4uY2xhc3NMaXN0LnRvZ2dsZSgiZXMtaG90ZWwtYnV5Iixlc21Jc0NhdDUpO2VzbUJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJlcy1ob3RlbC1ib29rLXRyaWdnZXIiLGVzbUlzQ2F0NSk7ZXNtSXNDYXQ1P2VzbUJ0bi5zZXRBdHRyaWJ1dGUoImRhdGEtb3Blbi1ob3RlbC1ib29raW5nIiwiIik6ZXNtQnRuLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1vcGVuLWhvdGVsLWJvb2tpbmciKTtnPXt9LGUuZm9yRWFjaChmdW5jdGlvbihlKXtnW2VdPSEwfSl9ZnVuY3Rpb24gUigpe3ZhciBlPVtdLHQ9MCxuPTAsYT0hMTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1yW2ldLGQ9cy5jYXRlZ29yaWVzW28uY2F0XTtuKz1vLmd1ZXN0cyxudWxsPT09ZC5wcmljZT9hPSEwOnQrPWQucHJpY2Uqby5ndWVzdHMsZS5wdXNoKHtjYXRlZ29yeTpkLm5hbWUsYXJlYTpkLmFyZWEsZ3Vlc3RzOm8uZ3Vlc3RzLHByaWNlUGVyUGVyc29uOmQucHJpY2UsbGluZVRvdGFsOm51bGw9PT1kLnByaWNlP251bGw6ZC5wcmljZSpvLmd1ZXN0c30pfSksZS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY2F0ZWdvcnkubG9jYWxlQ29tcGFyZSh0LmNhdGVnb3J5KX0pLHtldmVudDpzLmV2ZW50LHZlbnVlOnMudmVudWUsY3VycmVuY3k6cy5jdXJyZW5jeSxpdGVtczplLHRvdGFsR3Vlc3RzOm4sZXN0aW1hdGVkVG90YWw6dCxpbmNsdWRlc09uUmVxdWVzdDphLHN1bW1hcnk6ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2F0ZWdvcnkrIiAoIitlLmFyZWErIikgeCIrZS5ndWVzdHMrIiBndWVzdCIrKDE9PT1lLmd1ZXN0cz8iIjoicyIpKyIg4oCUICIrKG51bGw9PT1lLnByaWNlUGVyUGVyc29uPyJvbiByZXF1ZXN0IjpzLmN1cnJlbmN5KyIgIit4KGUubGluZVRvdGFsKSl9KS5qb2luKCJcbiIpfX1mdW5jdGlvbiBPKGUpe3AudGV4dENvbnRlbnQ9ZSxwLmNsYXNzTGlzdC5hZGQoImlzLW9uIiksY2xlYXJUaW1lb3V0KHYpLHY9c2V0VGltZW91dChmdW5jdGlvbigpe3AuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb24iKX0sMjQwMCl9ZnVuY3Rpb24gRigpe2Euc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5LngrIiwiK3kueSsiKSBzY2FsZSgiK3kuaysiKSIpfWZ1bmN0aW9uIGVzbVBYKCl7dmFyIHN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc21TdGFnZSIpLHI9c3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksc2M9TWF0aC5taW4oci53aWR0aC8xMTkzLjUsci5oZWlnaHQvOTM2LjkpfHwxO3JldHVybntzOnNjLG94OihyLndpZHRoLTExOTMuNSpzYykvMixveTooci5oZWlnaHQtOTM2Ljkqc2MpLzJ9fWZ1bmN0aW9uIE4oZSx0LG4pe3ZhciBwPWVzbVBYKCk7dD02MjYuOCsodC1wLm94KS9wLnMsbj02OC42KyhuLXAub3kpL3Auczt2YXIgYT1NYXRoLm1pbig2LE1hdGgubWF4KDEseS5rKmUpKTtpZihhIT09eS5rKXt2YXIgaT15Lms/YS95Lms6MTt5Lng9dC0odC15LngpKmkseS55PW4tKG4teS55KSppLHkuaz1hLDE9PT15LmsmJih5Lng9MCx5Lnk9MCksRigpfX1mdW5jdGlvbiBIKCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS53aWR0aC8yLGUuaGVpZ2h0LzJdfWZ1bmN0aW9uIFUoZSl7ZGVsZXRlIEVbZS5wb2ludGVySWRdLE9iamVjdC5rZXlzKEUpLmxlbmd0aDwyJiYoTD1udWxsKSxiPSExLHQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtcGFubmluZyIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtrPSExfSwwKX19KCksZnVuY3Rpb24oKXtpZighKHdpbmRvdy5tYXRjaE1lZGlhJiZtYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXN8fCJ1bmRlZmluZWQiPT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibW8iKTt2YXIgZT1bXTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY3RhLWluID4gKiwgLmVzbSIpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSk7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlYXRtYXAgLnNlYy1oZWFkIik7dCYmZS5wdXNoKHQpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmYXEiKTtpZihuKXt2YXIgYT1uLmNsb3Nlc3QoIi53cmFwIikmJm4uY2xvc2VzdCgiLndyYXAiKS5xdWVyeVNlbGVjdG9yKCIuc2VjLWhlYWQiKTthJiZlLnB1c2goYSl9dmFyIGk9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJkYXRhLW1vIiwiIiksaS5wdXNoKGUpfSksWyIudGllcnMgPiAudGllciIsIi52aXRhbHMgPiAqIiwiLmFydHMgPiAqIiwiLmZhcS1pdGVtIiwiLnZlbnVlLXNwZWNzID4gKiJdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbCxuPTA7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBhPWUucGFyZW50Tm9kZTtuPWE9PT10P24rMTowLHQ9YSxlLnNldEF0dHJpYnV0ZSgiZGF0YS1tbyIsIiIpLGUuc3R5bGUuc2V0UHJvcGVydHkoIi0tbW8tZCIsTWF0aC5taW4oNTAqbiwzMDApKyJtcyIpLGkucHVzaChlKX0pfSk7dmFyIHM9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0Iikscy51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7dGhyZXNob2xkOi4xOCxyb290TWFyZ2luOiIwcHggMHB4IC02JSAwcHgifSk7aS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Mub2JzZXJ2ZShlKX0pO3ZhciBvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5pZGVudC1udW0iKTtvJiZsKG8sby50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIiIpLDMwMCwxODApLFsiY2QtZCIsImNkLWgiLCJjZC1tIiwiY2QtcyJdLmZvckVhY2goZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtuJiZsKG4sbi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIiIpLDI2MCsxNTAqdCw2MCl9KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXNtU3RhZ2UiKTtpZihyKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTmFtZT0iZXNtLXNjYW5saW5lIixyLmFwcGVuZENoaWxkKGQpO3ZhciBjPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pc0ludGVyc2VjdGluZyYmKGQuY2xhc3NMaXN0LmFkZCgicnVuIiksZC5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKCl7ZC5yZW1vdmUoKX0pLGMuZGlzY29ubmVjdCgpKX0pfSx7dGhyZXNob2xkOi4zNX0pO2Mub2JzZXJ2ZShyKX19ZnVuY3Rpb24gbChlLHQsbixhKXt2YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO2kmJihlLnN0eWxlLndpZHRoPWkrInB4Iik7dmFyIHM9dC5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBuLnRleHRDb250ZW50PWUsbi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLG4uc3R5bGUud2lkdGg9MTAwL3QubGVuZ3RoKyIlIixuLnN0eWxlLnRleHRBbGlnbj0iY2VudGVyIixufSk7ZS50ZXh0Q29udGVudD0iIixzLmZvckVhY2goZnVuY3Rpb24odCl7ZS5hcHBlbmRDaGlsZCh0KX0pO3ZhciBvPXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSxyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7cy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7b1tuXSYmIWlzTmFOKHBhcnNlSW50KHRbbl0sMTApKXx8aXNOYU4ocGFyc2VJbnQodFtuXSwxMCkpfHwoZS50ZXh0Q29udGVudD1TdHJpbmcoTWF0aC5mbG9vcigxMCpNYXRoLnJhbmRvbSgpKSkpfSl9LDQ4KTtzLmZvckVhY2goZnVuY3Rpb24oaSxzKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7b1tzXT0hMCxpLnRleHRDb250ZW50PXRbc10sby5ldmVyeShCb29sZWFuKSYmKGNsZWFySW50ZXJ2YWwociksZS50ZXh0Q29udGVudD10LmpvaW4oIiIpLGUuc3R5bGUud2lkdGg9IiIpfSxuK3MqYSl9KX19KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQ9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMsbj1udWxsO3RyeXtuPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJlc1RoZW1lIil9Y2F0Y2goZil7fSJsaWdodCI9PT1ufHwiZGFyayI9PT1uP2Uuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixuKTp3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIikubWF0Y2hlcyYmZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLCJsaWdodCIpO3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aGVtZUJ0biIpO2Z1bmN0aW9uIGkodCl7ZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLHQpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZXNUaGVtZSIsdCl9Y2F0Y2goZil7fX1hJiZhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciBuPSJsaWdodCI9PT1lLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpPyJkYXJrIjoibGlnaHQiO2lmKGEuY2xhc3NMaXN0LmFkZCgic3BpbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmNsYXNzTGlzdC5yZW1vdmUoInNwaW4iKX0sNTIwKSwhdCYmZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbil7dmFyIHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXMubGVmdCtzLndpZHRoLzIscj1zLnRvcCtzLmhlaWdodC8yLGQ9TWF0aC5oeXBvdChNYXRoLm1heChvLHdpbmRvdy5pbm5lcldpZHRoLW8pLE1hdGgubWF4KHIsd2luZG93LmlubmVySGVpZ2h0LXIpKTtkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGZ1bmN0aW9uKCl7aShuKX0pLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtlLmFuaW1hdGUoe2NsaXBQYXRoOlsiY2lyY2xlKDBweCBhdCAiK28rInB4ICIrcisicHgpIiwiY2lyY2xlKCIrZCsicHggYXQgIitvKyJweCAiK3IrInB4KSJdfSx7ZHVyYXRpb246NjIwLGVhc2luZzoiY3ViaWMtYmV6aWVyKC40LDAsLjIsMSkiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLW5ldyhyb290KSJ9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7fSl9ZWxzZSFmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQoInRoZW1pbmciKSxpKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsYXNzTGlzdC5yZW1vdmUoInRoZW1pbmciKX0sNTYwKX0obil9KTt2YXIgcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Iik7ZnVuY3Rpb24gbygpe3MuY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixvLHtwYXNzaXZlOiEwfSksbygpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZCdXJnZXIiKSxkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZQYW5lbCIpLGM9bnVsbDtmdW5jdGlvbiBsKCl7Y2xlYXJUaW1lb3V0KGMpLGQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLGQuaGlkZGVuPSExLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZC5vZmZzZXRXaWR0aCxkLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkNsb3NlIG1lbnUiKX1mdW5jdGlvbiB1KCl7ZC5oaWRkZW58fChkLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxkLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUiKSxjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5oaWRkZW49ITAsZC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIiksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iIn0sdD8wOjI2MCkpfXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZC5oaWRkZW4/bCgpOnUoKX0pLGQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtY2xvc2UtbWVudV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dSgpfSl9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXsiRXNjYXBlIiE9PWUua2V5fHxkLmhpZGRlbnx8KHUoKSxyLmZvY3VzKCkpfSk7dmFyIGg9d2luZG93Lm1hdGNoTWVkaWEoIihtaW4td2lkdGg6IDEwMDFweCkiKSxtPWZ1bmN0aW9uKGUpe2UubWF0Y2hlcyYmdSgpfTtoLmFkZEV2ZW50TGlzdGVuZXI/aC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLG0pOmguYWRkTGlzdGVuZXImJmguYWRkTGlzdGVuZXIobSl9KCksZnVuY3Rpb24oKXtpZigoIXdpbmRvdy5tYXRjaE1lZGlhfHwhd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcykmJiJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtbyIpO3ZhciBlPVsiLnN0YWNrID4gLml0ZW0iLCIuYWNjLWl0ZW0iLCIuZmFxLWl0ZW0iLCIuYm91dCIsIi52c3RvcnkiLCIudGtib3giLCIuYWItZnJhbWUiLCIuY21wIHRib2R5IHRkIiwiLmNtcCB0aGVhZCB0aCIsIi50YXBlLWNlbGwiLCIudnMtcm93IiwiLnZlbnVlLXNwZWNzID4gKiIsIi56cC10aWVyIiwiLnRrZ3JpZCB0ZCIsIi5zdGF0cyA+IC5zdGF0IiwiLnN0YXRzID4gLnN0IiwiLnZpdGFscyA+IC52aXRhbCIsIi5oZXJvLW1ldGEgPiAuaG0iLCIudGllcnMgPiAudGllciIsIi52Z3JpZCA+IC52YmxvY2siLCIua2MtY2FyZCIsIi5hYi1zcGVjIiwiLmluYy1saXN0ID4gbGkiLCIuYXJ0cyA+IC5hcnQiLCIuZm9yayA+IC5yb3V0ZSIsIi5jYXRhbG9ndWUgLm5jYXJkIiwiLm9jYXJkIiwiLnBjYXJkIiwiLmJjYXJkIiwiLnBjYXJkcCIsIi5maXZldy1ncmlkID4gKiIsIi5sb2dvcyA+IC5sb2dvIiwiLmVzbS1iYW5kIiwiLm1hcC1jaGlwIiwiLnRhcGUtZ3JpZCA+IC50YXBlLWNlbGwiLCIuZ2NhcmQiXSx0PWUuam9pbigiLCIpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW1vXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKHQpfHxlLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1tbyIpfSk7dmFyIG49W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LGE9bnVsbCxpPTA7dHJ5e3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKX1jYXRjaChzKXtyZXR1cm59dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmhhc0F0dHJpYnV0ZSgiZGF0YS1tbyIpKXt2YXIgdD1lLnBhcmVudE5vZGU7aT10PT09YT9pKzE6MCxhPXQsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbW8iLCIiKSxlLnN0eWxlLnNldFByb3BlcnR5KCItLW1vLWQiLE1hdGgubWluKDUwKmksMzAwKSsibXMiKSxuLnB1c2goZSl9fSl9KSxuLmxlbmd0aCl7dmFyIGE9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0IiksYS51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7cm9vdE1hcmdpbjoiMHB4IDBweCAtNiUgMHB4Iix0aHJlc2hvbGQ6LjA1fSk7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Eub2JzZXJ2ZShlKX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmZS5jbGFzc0xpc3QuYWRkKCJtby1saXQiKX19KX0sNGUzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmNsYXNzTGlzdC5jb250YWlucygibW8tbGl0Iikpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC50b3A8aW5uZXJIZWlnaHQmJnQuYm90dG9tPjAmJnQuaGVpZ2h0JiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw2MCl9KX19fSgpLGZ1bmN0aW9uKCl7WyJ4cUZvcm0iLCJyZmkiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3QmJnQuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixmdW5jdGlvbihlKXt0LmNoZWNrVmFsaWRpdHkoKSYmKCh0LmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpfHwiIikudHJpbSgpfHwod2luZG93LmxvY2F0aW9uLmhyZWY9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1lLnF1ZXJ5U2VsZWN0b3IoIltuYW1lPWV2ZW50LW5hbWVdIik7cmV0dXJuIG4mJnQucHVzaCgiRW5xdWlyeTogIituLnZhbHVlKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSxzZWxlY3QsdGV4dGFyZWEiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWUucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPSInK24uaWQrJyJdJyksaT1hP2EudGV4dENvbnRlbnQudHJpbSgpOm4ubmFtZXx8bi5pZDtuLnZhbHVlJiZ0LnB1c2goaSsiOiAiK24udmFsdWUpfSksIm1haWx0bzppbmZvQGVzLXNwb3J0LmFlP3N1YmplY3Q9IitlbmNvZGVVUklDb21wb25lbnQoKG4/bi52YWx1ZToiV2Vic2l0ZSBlbnF1aXJ5IikrIiAtIGVucXVpcnkiKSsiJmJvZHk9IitlbmNvZGVVUklDb21wb25lbnQodC5qb2luKCJcbiIpKX0odCkpKX0sITApfSk7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxTW9kYWwiKTtpZihlJiYhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImRhdGEteHEtbmF0aXZlIikpe3ZhciB0LG49d2luZG93Lm1hdGNoTWVkaWEmJm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyxhPW51bGw7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKHMpe3MucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbihpKXtjbGVhclRpbWVvdXQodCksYT1pLGUuaGlkZGVuPSExLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5vZmZzZXRXaWR0aCxlLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKCJpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSkiKTt0JiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG4/MDoyNjApfShpKX0pfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtY2xvc2UteHFdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzKX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKHQpeyJFc2NhcGUiIT09dC5rZXl8fGUuaGlkZGVufHxzKCl9KTt2YXIgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFGb3JtIik7aSYmaS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxpLmNoZWNrVmFsaWRpdHkoKSl7dmFyIHQ9aS5nZXRBdHRyaWJ1dGUoImRhdGEtZW5kcG9pbnQiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cVNlbnQiKSxhPWZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QuYWRkKCJvbiIpO2kucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07dD9mZXRjaCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKGkpfSkudGhlbihhKS5jYXRjaChhKTphKCl9ZWxzZSBpLnJlcG9ydFZhbGlkaXR5KCl9KX1mdW5jdGlvbiBzKCl7ZS5oaWRkZW58fChlLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxjbGVhclRpbWVvdXQodCksdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5oaWRkZW49ITAsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iIixhJiZhLmZvY3VzJiZhLmZvY3VzKCksYT1udWxsfSxuPzA6MzYwKSl9fSgpfSgpOwo7KGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdiIpO2lmKCFuKXJldHVybjt2YXIgZj1mdW5jdGlvbigpe24uY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX07ZigpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGYpO30pKCk7CjsoZnVuY3Rpb24oKXt2YXIgdGllcnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVzLXBnIC50aWVyW2RhdGEteHEtaW50ZXJlc3RdIik7aWYoIXRpZXJzLmxlbmd0aClyZXR1cm47ZnVuY3Rpb24gb3Blbih0KXt2YXIgc2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4LWNhdCIpLG1zZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC1tc2ciKTtpZihzZWwpe2Zvcih2YXIgaT0wO2k8c2VsLm9wdGlvbnMubGVuZ3RoO2krKylpZihzZWwub3B0aW9uc1tpXS50ZXh0PT09dC5nZXRBdHRyaWJ1dGUoImRhdGEteHEtaW50ZXJlc3QiKSl7c2VsLnNlbGVjdGVkSW5kZXg9aTticmVha319dmFyIGI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtb3Blbi14cV0iKTtpZihiKWIuY2xpY2soKX10aWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0LmNsb3Nlc3QoImEiKSlyZXR1cm47b3Blbih0KX0pO3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7aWYoZS5rZXk9PT0iRW50ZXIifHxlLmtleT09PSIgIil7ZS5wcmV2ZW50RGVmYXVsdCgpO29wZW4odCl9fSl9KX0pKCk7Cg==
LyogZXNGb3JtSnM6IGVucXVpcnkgZm9ybXMgZGVsaXZlciBzb21ld2hlcmUgYW5kIHRlbGwgdGhlIHRydXRoIChDTC0yMDI2MTAwMi0xMiwgMiBPY3QgMjAy
Njsgc3RhdHVzIG5hbWVzIGZpeGVkIGluCiAgIENMLTIwMjYxMDAyLTE0IHRoZSBzYW1lIG5pZ2h0KS4KICAgVGFrZXMgdGhlIHN1Ym1pdCBvZiAjcmZpIGFu
ZCAjeHFGb3JtIGF0IHRoZSBjYXB0dXJlIHBoYXNlLCBhaGVhZCBvZiB0aGUgb2xkZXIgaGFuZGxlcnMgaW4gdGhlIG1haW4gYW5kIGV2ZW50CiAgIHBheWxv
YWRzICh3aGljaCBzaG93ZWQgUmVjZWl2ZWQgd2l0aCBubyBkZWxpdmVyeSwgb3IgaGFuZGVkIGEgbWFpbHRvOiBsaW5rIHRvIHRoZSBtYWlsIGNsaWVudCku
CiAgIFJvdXRlIDE6IGRhdGEtZW5kcG9pbnQgc2V0IChhbiBodHRwcyBVUkwsIGUuZy4gdGhlIG44biB3ZWJob29rKTogUE9TVCB0aGUgRm9ybURhdGEgdGhl
cmUsIHN1Y2Nlc3Mgb24gYSAyeHguCiAgIFJvdXRlIDI6IG5vIGVuZHBvaW50OiBoYW5kIHRoZSBlbnF1aXJ5IHRvIHRoZSBzaXRlJ3Mgb3duIENvbnRhY3Qg
Rm9ybSA3IGZvcm0gODY3LCB3aGljaCBpcyBpbiB0aGUgcGFnZSAodGhlIG9sZAogICB0aGVtZSdzIGVucXVpcnkgcG9wdXApLCB3aXRoIENGNydzIHJlQ0FQ
VENIQSB2MyBhbmQgQWtpc21ldCBjaGVja3MsIGFuZCByZWFkIENGNydzIG91dGNvbWUuCiAgIENGNyByZXBvcnRzIHRoZSBvdXRjb21lIHR3aWNlOiB0aGUg
d3BjZjdzdWJtaXQgZXZlbnQgb24gdGhlIGZvcm0ncyB3cmFwcGVyIGNhcnJpZXMgdGhlIEFQSSBzdGF0dXMgKG1haWxfc2VudCwKICAgbWFpbF9mYWlsZWQs
IHZhbGlkYXRpb25fZmFpbGVkLCBhY2NlcHRhbmNlX21pc3NpbmcsIHNwYW0sIGFib3J0ZWQpLCBhbmQgdGhlIHdwY2Y3c3RhdHVzY2hhbmdlZCBldmVudCBv
biB0aGUgZm9ybQogICBjYXJyaWVzIHRoZSBzaG9ydCBmb3JtIChzZW50LCBmYWlsZWQsIGludmFsaWQsIHVuYWNjZXB0ZWQsIHNwYW0sIGFib3J0ZWQpLiBC
b3RoIGFyZSBhY2NlcHRlZCBoZXJlOyB0aGUgZmlyc3QKICAgdmVyc2lvbiBsaXN0ZW5lZCBmb3IgdGhlIGxvbmcgbmFtZXMgb24gdGhlIHNlY29uZCBldmVu
dCwgc28gc2VudCBhbmQgZmFpbGVkIHdlcmUgbmV2ZXIgc2VlbiBhbmQgdGhlIGZvcm0gd2FpdGVkCiAgIGZvciB0aGUgdGltZW91dC4gQW55dGhpbmcgYnV0
IHN1Y2Nlc3Mgc2hvd3MgYW4gZXJyb3Igd2l0aCB0aGUgb2ZmaWNlIGVtYWlsIGFuZCBwaG9uZSBhbmQga2VlcHMgdGhlIHZhbHVlcy4gKi8KKGZ1bmN0aW9u
ICgpIHsKICB2YXIgRk9STVMgPSAnZm9ybSNyZmksIGZvcm0jeHFGb3JtJzsKICB2YXIgRU1BSUwgPSAnaW5mb0Blcy1zcG9ydC5hZScsIFBIT05FID0gJys5
NzEgNCA0MzUgNjYxMicsIENGN19JRCA9ICc4NjcnLCBXQUlUID0gNDUwMDA7CiAgdmFyIE9LID0geyBtYWlsX3NlbnQ6IDEsIHNlbnQ6IDEgfTsKICB2YXIg
QkFEID0geyBtYWlsX2ZhaWxlZDogMSwgZmFpbGVkOiAxLCBzcGFtOiAxLCB2YWxpZGF0aW9uX2ZhaWxlZDogMSwgaW52YWxpZDogMSwgYWNjZXB0YW5jZV9t
aXNzaW5nOiAxLCB1bmFjY2VwdGVkOiAxLCBhYm9ydGVkOiAxLCBwYXltZW50X3JlcXVpcmVkOiAxLCAncGF5bWVudC1yZXF1aXJlZCc6IDEgfTsKICB2YXIg
TE9ORyA9IHsgc2VudDogJ21haWxfc2VudCcsIGZhaWxlZDogJ21haWxfZmFpbGVkJywgaW52YWxpZDogJ3ZhbGlkYXRpb25fZmFpbGVkJywgdW5hY2NlcHRl
ZDogJ2FjY2VwdGFuY2VfbWlzc2luZycsICdwYXltZW50LXJlcXVpcmVkJzogJ3BheW1lbnRfcmVxdWlyZWQnIH07CiAgdmFyIFJFQVNPTiA9IHsgdmFsaWRh
dGlvbl9mYWlsZWQ6ICdhIGZpZWxkIHdhcyByZWplY3RlZCcsIHNwYW06ICd0aGUgc3BhbSBmaWx0ZXIgYmxvY2tlZCBpdCcsIG1haWxfZmFpbGVkOiAndGhl
IG1haWwgc2VydmVyIGRpZCBub3QgYWNjZXB0IGl0JywKICAgICAgICAgICAgICAgICBhY2NlcHRhbmNlX21pc3Npbmc6ICdjb25zZW50IHdhcyBtaXNzaW5n
JywgYWJvcnRlZDogJ2l0IHdhcyBpbnRlcnJ1cHRlZCcsIHBheW1lbnRfcmVxdWlyZWQ6ICdwYXltZW50IHdhcyByZXF1ZXN0ZWQnLCB0aW1lb3V0OiAnbm8g
cmVwbHkgaW4gdGltZScsCiAgICAgICAgICAgICAgICAgbmV0d29yazogJ2EgY29ubmVjdGlvbiBwcm9ibGVtJywgZXhjZXB0aW9uOiAnYSBzY3JpcHQgZXJy
b3InLCAnbm8gZGVzdGluYXRpb24nOiAndGhlIGZvcm0gaGFzIG5vd2hlcmUgdG8gc2VuZCcgfTsKICB2YXIgRklFTEQgPSB7ICd5b3VyLW5hbWUnOiAnZmly
c3QgbmFtZScsICdsYXN0LW5hbWUnOiAnbGFzdCBuYW1lJywgJ3RleHQtOTk4JzogJ2NvbXBhbnknLCAneW91ci1lbWFpbCc6ICdlbWFpbCcsICd5b3VyLXRl
bCc6ICdwaG9uZScsICd5b3VyLW1lc3NhZ2UnOiAnbWVzc2FnZScgfTsKICBmdW5jdGlvbiBsb2coeCkgeyB0cnkgeyAod2luZG93LmVzRm9ybUxvZyA9IHdp
bmRvdy5lc0Zvcm1Mb2cgfHwgW10pLnB1c2goeCk7IH0gY2F0Y2ggKGVycikge30gfQogIGZ1bmN0aW9uIHNlbnRFbChmKSB7IHJldHVybiBmLnF1ZXJ5U2Vs
ZWN0b3IoJy5zZW50JykgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbnQnKTsgfQogIGZ1bmN0aW9uIHNob3coZiwgb2ssIG1zZykgewogICAgdmFy
IHMgPSBzZW50RWwoZik7IGlmICghcykgcmV0dXJuOwogICAgaWYgKCFzLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnJykpIHMuc2V0QXR0cmlidXRlKCdkYXRh
LW9yaWcnLCBzLnRleHRDb250ZW50KTsKICAgIHMudGV4dENvbnRlbnQgPSBvayA/IHMuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWcnKSA6IG1zZzsKICAgIHMu
Y2xhc3NMaXN0LnRvZ2dsZSgnaXMtZXJyJywgIW9rKTsgcy5jbGFzc0xpc3QuYWRkKCdvbicpOwogICAgY2xlYXJUaW1lb3V0KHMuX2VzVCk7CiAgICBzLl9l
c1QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcy5jbGFzc0xpc3QucmVtb3ZlKCdvbicpOyBzLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWVycicpOyBzLnRl
eHRDb250ZW50ID0gcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZycpOyB9LCBvayA/IDcwMDAgOiAyNTAwMCk7CiAgfQogIGZ1bmN0aW9uIGJ1c3koZiwgb24p
IHsKICAgIHZhciBiID0gZi5xdWVyeVNlbGVjdG9yKCdbdHlwZT0ic3VibWl0Il0nKTsgaWYgKCFiKSByZXR1cm47CiAgICBiLmRpc2FibGVkID0gb247CiAg
ICBpZiAob24pIHsgaWYgKCFiLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpKSBiLnNldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcsIGIudGV4dENvbnRlbnQp
OyBiLnRleHRDb250ZW50ID0gJ1NlbmRpbmcnOyB9CiAgICBlbHNlIGlmIChiLmdldEF0dHJpYnV0ZSgnZGF0YS1sYWJlbCcpKSBiLnRleHRDb250ZW50ID0g
Yi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGFiZWwnKTsKICB9CiAgZnVuY3Rpb24gdmFsKGYsIG4pIHsgdmFyIGUgPSBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSIn
ICsgbiArICciXScpOyByZXR1cm4gZSA/IFN0cmluZyhlLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpIDogJyc7IH0KICBmdW5jdGlv
biBjb25zZW50KGYpIHsgdmFyIGMgPSBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjb25zZW50Il0nKTsgcmV0dXJuIGMgJiYgYy5jaGVja2VkID8gJ3llcycg
OiAnbm8nOyB9CiAgZnVuY3Rpb24gY2Y3Zm9ybSgpIHsgdmFyIGkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJfd3BjZjciXVt2YWx1
ZT0iJyArIENGN19JRCArICciXScpOyByZXR1cm4gaSA/IGkuY2xvc2VzdCgnZm9ybScpIDogbnVsbDsgfQogIGZ1bmN0aW9uIHZpYUNmNyhmLCBkb25lKSB7
CiAgICB2YXIgYyA9IGNmN2Zvcm0oKTsKICAgIGlmICghYyB8fCAhd2luZG93LndwY2Y3IHx8IHR5cGVvZiB3aW5kb3cud3BjZjcuc3VibWl0ICE9PSAnZnVu
Y3Rpb24nKSByZXR1cm4gZmFsc2U7CiAgICBmdW5jdGlvbiBzZXQobiwgdikgeyB2YXIgZSA9IGMucXVlcnlTZWxlY3RvcignW25hbWU9IicgKyBuICsgJyJd
Jyk7IGlmIChlKSBlLnZhbHVlID0gdjsgfQogICAgdmFyIGludGVyZXN0ID0gdmFsKGYsICdpbnRlcmVzdCcpIHx8IHZhbChmLCAnc3BvcnQnKSwgZXYgPSB2
YWwoZiwgJ2V2ZW50LW5hbWUnKSB8fCAnV2Vic2l0ZSBlbnF1aXJ5JzsKICAgIC8qIHRlYW0tdHJhdmVsIGZvcm0gKCN4cUZvcm0pIGhhcyBjb250YWN0LW5h
bWUgLyB0ZWFtLW5hbWUgLyBzcG9ydCBpbnN0ZWFkIG9mIGZpcnN0LW5hbWUgLyBsYXN0LW5hbWUgLyBjb21wYW55CiAgICAgICAoZWRpdGVkIGxpdmUgb24g
NzMyNCBvbiAxNCBPY3QgMjAyNiwgZm9sZGVkIGludG8gdGhpcyBzb3VyY2Ugb24gMTYgT2N0LCBDTC0yMDI2MTAxNi0wMSkgKi8KICAgIHZhciBjbiA9IHZh
bChmLCAnY29udGFjdC1uYW1lJykuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKTsKICAgIHZhciBmaXJzdCA9IHZhbChmLCAnZmlyc3QtbmFtZScpIHx8
IChjbi5sZW5ndGggPiAxID8gY24uc2xpY2UoMCwgLTEpLmpvaW4oJyAnKSA6IGNuWzBdKSB8fCAnV2Vic2l0ZSc7CiAgICB2YXIgbGFzdCAgPSB2YWwoZiwg
J2xhc3QtbmFtZScpICB8fCAoY24ubGVuZ3RoID4gMSA/IGNuW2NuLmxlbmd0aCAtIDFdIDogKGNuLmxlbmd0aCA/ICctJyA6ICdFbnF1aXJ5JykpOwogICAg
c2V0KCd5b3VyLW5hbWUnLCBmaXJzdCk7IHNldCgnbGFzdC1uYW1lJywgbGFzdCk7CiAgICBzZXQoJ3RleHQtOTk4JywgdmFsKGYsICdjb21wYW55JykgfHwg
dmFsKGYsICd0ZWFtLW5hbWUnKSB8fCAnTm90IGdpdmVuJyk7CiAgICBzZXQoJ3lvdXItZW1haWwnLCB2YWwoZiwgJ2VtYWlsJykpOyBzZXQoJ3lvdXItdGVs
JywgdmFsKGYsICdwaG9uZScpKTsKICAgIHNldCgnaW50ZXJlc3RlZC1pbicsIGludGVyZXN0KTsgc2V0KCdldmVudC1uYW1lJywgZXYpOwogICAgdmFyIGV4
dHJhID0gW107CiAgICBpZiAodmFsKGYsICd0ZWFtLW5hbWUnKSkgICAgZXh0cmEucHVzaCgnVGVhbTogJyArIHZhbChmLCAndGVhbS1uYW1lJykpOwogICAg
aWYgKHZhbChmLCAnY29udGFjdC1uYW1lJykpIGV4dHJhLnB1c2goJ0NvbnRhY3Q6ICcgKyB2YWwoZiwgJ2NvbnRhY3QtbmFtZScpKTsKICAgIGlmICh2YWwo
ZiwgJ3Nwb3J0JykpICAgICAgICBleHRyYS5wdXNoKCdTcG9ydDogJyArIHZhbChmLCAnc3BvcnQnKSk7CiAgICBzZXQoJ3lvdXItbWVzc2FnZScsIFt2YWwo
ZiwgJ21lc3NhZ2UnKSB8fCAnTm8gbWVzc2FnZSBsZWZ0LicsICcnXS5jb25jYXQoZXh0cmEsIFsKICAgICAgJ0ludGVyZXN0ZWQgaW46ICcgKyBpbnRlcmVz
dCwgJ0V2ZW50OiAnICsgZXYsCiAgICAgICdSb3V0aW5nOiAnICsgdmFsKGYsICdlZWJfZXZlbnQnKSArICcgLyAnICsgdmFsKGYsICdlZWJfY2F0ZWdvcnkn
KSArICcgLyAnICsgdmFsKGYsICdlZWJfcmVhc29uJyksCiAgICAgICdDb25zZW50IHRvIGNvbnRhY3Q6ICcgKyBjb25zZW50KGYpLCAnU2VudCBmcm9tOiAn
ICsgbG9jYXRpb24uaHJlZl0pLmpvaW4oJ1xuJykpOwogICAgdmFyIHNldHRsZWQgPSBmYWxzZSwgdDsKICAgIGZ1bmN0aW9uIGZpbmlzaChvaywgc3RhdHVz
LCBleHRyYSkgewogICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuOyBzZXR0bGVkID0gdHJ1ZTsgY2xlYXJUaW1lb3V0KHQpOwogICAgICBjLnJlbW92ZUV2ZW50
TGlzdGVuZXIoJ3dwY2Y3c3RhdHVzY2hhbmdlZCcsIG9uU3RhdHVzKTsgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd3BjZjdzdWJtaXQnLCBvblN1
Ym1pdCk7CiAgICAgIGRvbmUob2ssIHN0YXR1cywgZXh0cmEpOwogICAgfQogICAgZnVuY3Rpb24gc2V0dGxlKHN0LCBkKSB7CiAgICAgIHN0ID0gU3RyaW5n
KHN0IHx8ICcnKTsKICAgICAgaWYgKE9LW3N0XSkgeyBmaW5pc2godHJ1ZSwgJ21haWxfc2VudCcpOyByZXR1cm47IH0KICAgICAgaWYgKCFCQURbc3RdKSBy
ZXR1cm47CiAgICAgIHZhciBleHRyYSA9ICcnLCBpbnYgPSBkICYmIGQuYXBpUmVzcG9uc2UgJiYgZC5hcGlSZXNwb25zZS5pbnZhbGlkX2ZpZWxkczsKICAg
ICAgaWYgKGludiAmJiBpbnYubGVuZ3RoKSB7IHZhciBuYW1lcyA9IFtdOyBmb3IgKHZhciBpID0gMDsgaSA8IGludi5sZW5ndGg7IGkrKykgbmFtZXMucHVz
aChGSUVMRFtpbnZbaV0uZmllbGRdIHx8IGludltpXS5maWVsZCk7IGV4dHJhID0gbmFtZXMuam9pbignLCAnKTsgfQogICAgICBpZiAoZCAmJiBkLmFwaVJl
c3BvbnNlICYmIGQuYXBpUmVzcG9uc2UubWVzc2FnZSkgbG9nKCdjZjc6ICcgKyBkLmFwaVJlc3BvbnNlLm1lc3NhZ2UpOwogICAgICBmaW5pc2goZmFsc2Us
IExPTkdbc3RdIHx8IHN0LCBleHRyYSk7CiAgICB9CiAgICAvKiBzdGF0dXNjaGFuZ2VkIGZpcmVzIGZpcnN0LCBpbnNpZGUgQ0Y3J3Mgc2V0U3RhdHVzOyBh
IHRpY2sgbGF0ZXIgdGhlIHN1Ym1pdCBldmVudCBicmluZ3MgdGhlIGRldGFpbCAocmVqZWN0ZWQKICAgICAgIGZpZWxkcywgbWVzc2FnZSksIHNvIGxldCB0
aGF0IG9uZSBzZXR0bGUgZmlyc3Qgd2hlbiBpdCBjb21lcyAqLwogICAgZnVuY3Rpb24gb25TdGF0dXMoZSkgeyB2YXIgc3QgPSAoZS5kZXRhaWwgJiYgZS5k
ZXRhaWwuc3RhdHVzKSB8fCBjLmdldEF0dHJpYnV0ZSgnZGF0YS1zdGF0dXMnKTsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNldHRsZShzdCk7IH0sIDAp
OyB9CiAgICBmdW5jdGlvbiBvblN1Ym1pdChlKSB7IHZhciBkID0gZS5kZXRhaWwgfHwge307IGlmIChTdHJpbmcoZC5jb250YWN0Rm9ybUlkKSAhPT0gQ0Y3
X0lEKSByZXR1cm47IHNldHRsZShkLnN0YXR1cywgZCk7IH0KICAgIGMuYWRkRXZlbnRMaXN0ZW5lcignd3BjZjdzdGF0dXNjaGFuZ2VkJywgb25TdGF0dXMp
OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd3BjZjdzdWJtaXQnLCBvblN1Ym1pdCk7CiAgICB0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7
IGZpbmlzaChmYWxzZSwgJ3RpbWVvdXQnKTsgfSwgV0FJVCk7CiAgICB0cnkgeyB3aW5kb3cud3BjZjcuc3VibWl0KGMpOyB9IGNhdGNoIChlcnIpIHsgZmlu
aXNoKGZhbHNlLCAnZXhjZXB0aW9uJyk7IH0KICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiB2aWFFbmRwb2ludChmLCB1cmwsIGRvbmUpIHsKICAg
IHZhciBjdGwgPSAoJ0Fib3J0Q29udHJvbGxlcicgaW4gd2luZG93KSA/IG5ldyBBYm9ydENvbnRyb2xsZXIoKSA6IG51bGw7CiAgICB2YXIgdCA9IGN0bCA/
IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBjdGwuYWJvcnQoKTsgfSwgV0FJVCkgOiBudWxsOwogICAgdmFyIG9wdHMgPSB7IG1ldGhvZDogJ1BPU1QnLCBi
b2R5OiBuZXcgRm9ybURhdGEoZikgfTsgaWYgKGN0bCkgb3B0cy5zaWduYWwgPSBjdGwuc2lnbmFsOwogICAgZmV0Y2godXJsLCBvcHRzKS50aGVuKGZ1bmN0
aW9uIChyKSB7IGlmICh0KSBjbGVhclRpbWVvdXQodCk7IGRvbmUoci5vaywgJ2h0dHAgJyArIHIuc3RhdHVzKTsgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9u
ICgpIHsgaWYgKHQpIGNsZWFyVGltZW91dCh0KTsgZG9uZShmYWxzZSwgJ25ldHdvcmsnKTsgfSk7CiAgfQogIGZ1bmN0aW9uIGZhaWwoZiwgc3RhdHVzLCBl
eHRyYSkgewogICAgYnVzeShmLCBmYWxzZSk7CiAgICB2YXIgd2h5ID0gKFJFQVNPTltzdGF0dXNdIHx8IHN0YXR1cykgKyAoZXh0cmEgPyAnOiAnICsgZXh0
cmEgOiAnJyk7CiAgICBzaG93KGYsIGZhbHNlLCAnU29ycnksIHRoYXQgZGlkIG5vdCBzZW5kICgnICsgd2h5ICsgJykuIEVtYWlsICcgKyBFTUFJTCArICcg
b3IgY2FsbCAnICsgUEhPTkUgKyAnLicpOwogICAgbG9nKHN0YXR1cyk7CiAgfQogIC8qIEFuYWx5dGljcyAoMTYgT2N0IDIwMjYsIHNpdGUgcGxhbiA2LjYp
OiB0aGUgdGFnIG1hbmFnZXIncyBvd24gbGlzdGVuZXJzIG5ldmVyIHNlZSBvdXIgZm9ybXMsIGJlY2F1c2UgdGhpcwogICAgIGhhbmRsZXIgc3RvcHMgdGhl
IHN1Ym1pdCBldmVudCBhdCB0aGUgY2FwdHVyZSBwaGFzZSBhbmQgdGhlIGVucXVpcnkgZ29lcyBvdXQgdGhyb3VnaCB3cGNmNy5zdWJtaXQoKSwgd2hpY2gg
ZmlyZXMKICAgICBubyBzdWJtaXQgZXZlbnQ7IHNvIGV2ZXJ5IGVucXVpcnkgZXZlbnQgc3RvcHBlZCBvbiBsYXVuY2ggZGF5LiBUaGUgY29udGFpbmVyJ3Mg
bGVhZF9mb3JtIHRhZyBmaXJlcyBvbgogICAgIGd0bS5mb3JtU3VibWl0IGFuZCBpdHMgd2hhdHNhcHBfY2xpY2tzIHRhZyBvbiBndG0ubGlua0NsaWNrIHdp
dGggdGhlIGVuY29kZWQgV2hhdHNBcHAgVVJMIChib3RoIHRyaWdnZXJzIGFjY2VwdAogICAgIGEgcHVzaCB3aXRoIG5vIGd0bS50cmlnZ2VycykuIFB1c2hl
ZCBvbmNlIHBlciBzdWNjZXNzZnVsIHNlbmQsIG5ldmVyIG9uIGEgZmFpbGVkIG9uZS4gZXNfZW5xdWlyeV9zZW50IGlzIHRoZQogICAgIHNhbWUgcHVzaCB1
bmRlciBhIHBsYWluIG5hbWUgZm9yIGFueSBmdXR1cmUgdHJpZ2dlci4gKi8KICB2YXIgV0EgPSAnaHR0cHM6Ly93YS5tZS85NzE1NTgxNTM1ODQ/dGV4dD1J
JTI3bSUyMGludGVyZXN0ZWQlMjBpbiUyMGNvbm5lY3RpbmclMjB3aXRoJTIwdGhlJTIwRVMlMjBTcG9ydCUyMHRlYW0nOwogIGZ1bmN0aW9uIHRyYWNrKG5h
bWUsIGRhdGEpIHsKICAgIHRyeSB7IHZhciBkID0geyBldmVudDogbmFtZSB9OyBmb3IgKHZhciBrIGluIGRhdGEpIGRba10gPSBkYXRhW2tdOyAod2luZG93
LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW10pLnB1c2goZCk7IH0gY2F0Y2ggKGVycikge30KICB9CiAgZnVuY3Rpb24gc3VjY2VzcyhmKSB7
CiAgICBidXN5KGYsIGZhbHNlKTsgc2hvdyhmLCB0cnVlKTsKICAgIHZhciBkID0geyAnZ3RtLmVsZW1lbnRJZCc6IGYuaWQgfHwgJycsICdndG0uZWxlbWVu
dENsYXNzZXMnOiBmLmNsYXNzTmFtZSB8fCAnJywgJ2d0bS5lbGVtZW50VXJsJzogbG9jYXRpb24uaHJlZiwKICAgICAgICAgICAgICBlc19mb3JtOiBmLmlk
IHx8ICcnLCBlc19ldmVudDogdmFsKGYsICdldmVudC1uYW1lJyksIGVzX2ludGVyZXN0OiB2YWwoZiwgJ2ludGVyZXN0JyksIGVzX3BhZ2U6IGxvY2F0aW9u
LnBhdGhuYW1lIH07CiAgICB0cmFjaygnZ3RtLmZvcm1TdWJtaXQnLCBkKTsgdHJhY2soJ2VzX2VucXVpcnlfc2VudCcsIGQpOwogICAgZi5yZXNldCgpOyBs
b2coJ21haWxfc2VudCcpOwogIH0KICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgYSA9IGUudGFy
Z2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCdhW2hyZWYqPSJ3YS5tZS8iXScpIDogbnVsbDsKICAgIGlmIChhKSB0cmFjaygn
Z3RtLmxpbmtDbGljaycsIHsgJ2d0bS5lbGVtZW50VXJsJzogV0EsICdndG0uZWxlbWVudElkJzogYS5pZCB8fCAnJywgJ2d0bS5lbGVtZW50Q2xhc3Nlcyc6
IGEuY2xhc3NOYW1lIHx8ICcnLCBlc193aGF0c2FwcDogYS5ocmVmLCBlc19wYWdlOiBsb2NhdGlvbi5wYXRobmFtZSB9KTsKICB9LCB0cnVlKTsKICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIGYgPSBlLnRhcmdldDsKICAgIGlmICghZiB8fCAhZi5tYXRj
aGVzIHx8ICFmLm1hdGNoZXMoRk9STVMpKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGUuc3RvcEltbWVk
aWF0ZVByb3BhZ2F0aW9uKCk7CiAgICBpZiAoIWYuY2hlY2tWYWxpZGl0eSgpKSB7IGYucmVwb3J0VmFsaWRpdHkoKTsgcmV0dXJuOyB9CiAgICBpZiAoZi5n
ZXRBdHRyaWJ1dGUoJ2RhdGEtc2VuZGluZycpID09PSAnMScpIHJldHVybjsKICAgIGYuc2V0QXR0cmlidXRlKCdkYXRhLXNlbmRpbmcnLCAnMScpOyBidXN5
KGYsIHRydWUpOwogICAgdmFyIGRvbmUgPSBmdW5jdGlvbiAob2ssIHN0YXR1cywgZXh0cmEpIHsgZi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2VuZGluZycp
OyBpZiAob2spIHN1Y2Nlc3MoZik7IGVsc2UgZmFpbChmLCBzdGF0dXMsIGV4dHJhKTsgfTsKICAgIHZhciB1cmwgPSAoZi5nZXRBdHRyaWJ1dGUoJ2RhdGEt
ZW5kcG9pbnQnKSB8fCAnJykucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKICAgIGlmICh1cmwpIHsgdmlhRW5kcG9pbnQoZiwgdXJsLCBkb25lKTsgcmV0
dXJuOyB9CiAgICBpZiAodmlhQ2Y3KGYsIGRvbmUpKSByZXR1cm47CiAgICBkb25lKGZhbHNlLCAnbm8gZGVzdGluYXRpb24nKTsKICB9LCB0cnVlKTsKICAv
KiB0aGUgb2ZmaWNlIGZvcm0gdGhhdCByZWNlaXZlcyB0aGUgZW5xdWlyeSByZXF1aXJlcyBhIHBob25lIG51bWJlciAqLwogIHZhciBmb3JtcyA9IGRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoRk9STVMpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybXMubGVuZ3RoOyBpKyspIHsgdmFyIHAgPSBmb3Jtc1tpXS5x
dWVyeVNlbGVjdG9yKCdbbmFtZT0icGhvbmUiXScpOyBpZiAocCkgcC5yZXF1aXJlZCA9IHRydWU7IH0KfSkoKTsK
LyogZXNSZmlKczogb3BlbmluZyB0aGUgZW5xdWlyeSBmb3JtIGtlZXBzIHRoZSBwYWdlIHdoZXJlIGl0IGlzIChDTC0yMDI2MTAwNi0wMSwgNiBPY3QgMjAy
NikuCiAgIEV2ZXJ5IGNvbnRyb2wgdGhhdCBvcGVucyBhIGZvcm0gaXMgYW4gYW5jaG9yIHRvICNlbnF1aXJlLCB0aGUgaW4tcGFnZSBmYWxsYmFjayBmb3Ig
cmVhZGVycyB3aXRob3V0IHNjcmlwdC4KICAgVGhlIG9sZCB0aGVtZSdzIGN1c3RvbS1zY3JpcHQuanMgbGlzdGVucyBvbiBkb2N1bWVudCBmb3IgZXZlcnkg
Y2xpY2sgb24gYVtocmVmKj0iIyJdIGFuZCBzbW9vdGgtc2Nyb2xscyB0bwogICB0aGF0IHNlY3Rpb24sIHNvIHRoZSBwYWdlIHNsaWQgdG8gdGhlIGJvdHRv
bSB1bmRlciB0aGUgb3BlbiBmb3JtLiBPdXIgb3BlbmVyIHJ1bnMgb24gdGhlIGVsZW1lbnQgYW5kIGNhbGxzCiAgIHByZXZlbnREZWZhdWx0LCB3aGljaCBk
b2VzIG5vdCBzdG9wIGEgZGVsZWdhdGVkIGhhbmRsZXIgb24gZG9jdW1lbnQ7IHN0b3BwaW5nIHRoZSBjbGljayBmcm9tIHJlYWNoaW5nIGRvY3VtZW50CiAg
IGRvZXMuIFRoZSBzdG9wIGhhcHBlbnMgb24gYm9keSwgYWZ0ZXIgZXZlcnkgaGFuZGxlciBvbiB0aGUgZWxlbWVudCBpdHNlbGYgaGFzIHJ1biAodGhlIG9w
ZW5lciwgdGhlCiAgICJJbnRlcmVzdGVkIGluIiBwcmVzZWxlY3QpLCBhbmQgb25seSBmb3IgY2xpY2tzIG9uIGEgZm9ybSBvcGVuZXIuIExpbmtzIHRoYXQg
b25seSBwb2ludCBhdCAjZW5xdWlyZSBzdGlsbCBzY3JvbGwuCiAgIFNvdXJjZSBvZiB0cnV0aDogdGVtcGxhdGUvZnJhZ21lbnRzL3JmaS1qcy5qcywgc2hp
cHBlZCBieSBzY3JpcHRzL3JmaV9ub19zY3JvbGxfMjAyNi0xMC0wNi5weS4gKi8KKGZ1bmN0aW9uICgpIHsKICB2YXIgU0VMID0gJ1tkYXRhLW9wZW4tcmZp
XSwgW2RhdGEtb3Blbi14cV0nOwogIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKICBpZiAoIWJvZHkgfHwgIWJvZHkuYWRkRXZlbnRMaXN0ZW5lcikgcmV0
dXJuOwogIGJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICB3aGlsZSAoZWwg
JiYgZWwgIT09IGJvZHkpIHsKICAgICAgaWYgKGVsLm1hdGNoZXMgJiYgZWwubWF0Y2hlcyhTRUwpKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IHJldHVybjsg
fQogICAgICBlbCA9IGVsLnBhcmVudE5vZGU7CiAgICB9CiAgfSwgZmFsc2UpOwp9KSgpOwo=
LyogZXNDYXJ0SnM6IHRoZSBjYXJ0IGljb24gaW4gdGhlIG5hdiBzaG93cyBob3cgbWFueSBpdGVtcyBhcmUgaW4gdGhlIHZpc2l0b3IncyBiYXNrZXQgKENM
LTIwMjYxMDA5LTAyLCA5IE9jdCAyMDI2KS4KICAgTG91aXM6ICJDYW4gd2UgYWRkIGEgY2FydCBpY29uIHRvIHRoZSB0b3AgcmlnaHQgb2YgdGhlIG5ldyBz
aXRlIHNvIHRoYXQgcGVvcGxlIGNhbiBuYXZpZ2F0ZSB0aGUgd2Vic2l0ZSBhZnRlcgogICBhZGRlZCB0byBjYXJ0IGFuZCB0aGVuIGdvIGJhY2sgdG8gcGF5
PyBPdGhlcndpc2UgaXQncyBub3Qgb2J2aW91cyBob3cgeW91J2Qgc2VlIHdoYXQncyBpbiB5b3VyIGJhc2tldCBpZiB5b3UKICAgbmF2aWdhdGVkIGF3YXkg
ZnJvbSB0aGUgY2hlY2tvdXQgcGFnZSIuIFRoZSBpY29uIGl0c2VsZiBpcyBwbGFpbiBtYXJrdXAgKGEgbGluayB0byAvY2FydC8pLCBzbyBpdCB3b3JrcyB3
aXRob3V0CiAgIHNjcmlwdC4gVGhpcyByZWFkcyB0aGUgV29vQ29tbWVyY2UgU3RvcmUgQVBJIGZvciB0aGUgdmlzaXRvcidzIG93biBzZXNzaW9uIChzYW1l
LW9yaWdpbiBjb29raWVzLCBubyBub25jZSBuZWVkZWQKICAgZm9yIGEgcmVhZCkgYW5kIHNob3dzIHRoZSBjb3VudCBiYWRnZSB3aGVuIHRoZSBiYXNrZXQg
aGFzIGFueXRoaW5nIGluIGl0OyBhIGZhaWxlZCBvciBlbXB0eSByZWFkIGxlYXZlcyB0aGUgYmFkZ2UKICAgaGlkZGVuLiBSZS1yZWFkIHdoZW4gdGhlIHBh
Z2UgaXMgc2hvd24gYWdhaW4gZnJvbSB0aGUgYmFjay1mb3J3YXJkIGNhY2hlLCB3aGljaCBpcyBob3cgcGVvcGxlIGNvbWUgYmFjayBmcm9tIHRoZQogICBj
YXJ0LiBTb3VyY2Ugb2YgdHJ1dGg6IHRlbXBsYXRlL2ZyYWdtZW50cy9jYXJ0LWpzLmpzLCBzaGlwcGVkIGJ5IHNjcmlwdHMvY2FydF9pY29uXzIwMjYtMTAt
MDkucHkuICovCihmdW5jdGlvbiAoKSB7CiAgdmFyIGJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdkNhcnROJyk7CiAgaWYgKCFiYWRnZSkg
cmV0dXJuOwogIHZhciBVUkwgPSAnaHR0cHM6Ly93d3cuZXMtc3BvcnQuYWUvd3AtanNvbi93Yy9zdG9yZS92MS9jYXJ0JzsKICBmdW5jdGlvbiBzaG93KG4p
IHsKICAgIG4gPSBwYXJzZUludChuLCAxMCkgfHwgMDsKICAgIGJhZGdlLnRleHRDb250ZW50ID0gbiA+IDk5ID8gJzk5KycgOiBTdHJpbmcobik7CiAgICBi
YWRnZS5oaWRkZW4gPSBuIDwgMTsKICAgIHZhciBhID0gYmFkZ2UucGFyZW50Tm9kZTsKICAgIGlmIChhKSBhLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcs
IG4gPiAwID8gJ1lvdXIgY2FydCwgJyArIG4gKyAobiA9PT0gMSA/ICcgaXRlbScgOiAnIGl0ZW1zJykgOiAnWW91ciBjYXJ0Jyk7CiAgfQogIGZ1bmN0aW9u
IHJlYWQoKSB7CiAgICBpZiAoIXdpbmRvdy5mZXRjaCkgcmV0dXJuOwogICAgZmV0Y2goVVJMLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLCBjYWNo
ZTogJ25vLXN0b3JlJywgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0
dXJuIHIub2sgPyByLmpzb24oKSA6IG51bGw7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChjKSB7IGlmIChjKSBzaG93KGMuaXRlbXNfY291bnQpOyB9KQog
ICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogIH0KICByZWFkKCk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgZnVuY3Rpb24g
KGUpIHsgaWYgKGUucGVyc2lzdGVkKSByZWFkKCk7IH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlv
biAoKSB7IGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgcmVhZCgpOyB9KTsKfSkoKTsK
Step 1 of 5
When are you staying?
UFC 333 CAT 4 Ticket + Hotel (Ramada by Wyndham Abu Dhabi) needs at least 2 nights. We've set the minimum stay — change the dates if you're staying longer.
Dates and guests
Check in – check out
Select dates
Mo Tu We Th Fr Sa Su
Select check-in, then check-out · min 2 nights
Guests and rooms
1 adult · 1 room
Adults
18 and over · one race ticket each
Children
2–12 · circuit entry is free
Rooms
Max 4 guests per room
Step 2 of 5
Pick your hotel
← Back to all hotels
Step 3 of 5
Choose a room
Step 4 of 5
Who is travelling?
Names must match the passport or Emirates ID used at check-in and at the circuit gate. Tickets are issued in the lead guest's name.
Step 5 of 5
Check it over
Nothing is charged yet. The cart holds your rate for 20 minutes.
I've checked the guest names and dates, and I accept the ticket and hotel terms. ES Sport can contact me about this booking.