PageSourceSearch

https://clandestinofestival.org/2026/wp-content/themes/Festival202…/bundle.min.js?ver=2505207dc6e6ea302acd37

js clandestinofestival.org collected 2026-10-03 21:29:29 UTC 503,693 bytes, 4,181 lines download raw bytes

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2"use strict";
3var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5    return new (P || (P = Promise))(function (resolve, reject) {
6        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9        step((generator = generator.apply(thisArg, _arguments || [])).next());
10    });
11};
12var __generator = (this && this.__generator) || function (thisArg, body) {
13    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15    function verb(n) { return function (v) { return step([n, v]); }; }
16    function step(op) {
17        if (f) throw new TypeError("Generator is already executing.");
18        while (g && (g = 0, op[0] && (_ = 0)), _) try {
19            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20            if (y = 0, t) op = [op[0] & 2, t.value];
21            switch (op[0]) {
22                case 0: case 1: t = op; break;
23                case 4: _.label++; return { value: op[1], done: false };
24                case 5: _.label++; y = op[1]; op = [0]; continue;
25                case 7: op = _.ops.pop(); _.trys.pop(); continue;
26                default:
27                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31                    if (t[2]) _.ops.pop();
32                    _.trys.pop(); continue;
33            }
34            op = body.call(thisArg, _);
35        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37    }
38};
39Object.defineProperty(exports, "__esModule", { value: true });
40exports.locale = void 0;
41var config_1 = require("./modules/config");
42var page_1 = require("./modules/page");
43var site_1 = require("./modules/site");
44var logo_1 = require("./modules/logo");
45var button_1 = require("./modules/button");
46var news_1 = require("./modules/news");
47var program_1 = require("./modules/program");
48var calendar_1 = require("./modules/calendar");
49var ticket_1 = require("./modules/ticket");
50var schedule_1 = require("./modules/schedule");
51var info_1 = require("./modules/info");
52var pods_1 = require("./modules/pods");
53var contentService_1 = require("./modules/contentService");
54var eventService_1 = require("./modules/eventService");
55var eventType_1 = require("./modules/eventType");
56var pagesWpRendered = [page_1.Pages.PRESS];
57var system = {
58    currentPage: page_1.sitemap[page_1.Locales.sv].NEWS,
59    init: function (locale) {
60        var _a;
61        return __awaiter(this, void 0, void 0, function () {
62            var urlIndex, pageUrl, subPage, sitePage;
63            return __generator(this, function (_b) {
64                switch (_b.label) {
65                    case 0: return [4 /*yield*/, eventService_1.eventService.init(locale)];
66                    case 1:
67                        _b.sent();
68                        return [4 /*yield*/, site_1.site.init(locale)];
69                    case 2:
70                        _b.sent();
71                        urlIndex = locale === page_1.Locales.en ? 3 : 2;
72                        pageUrl = window.location.pathname.split("/")[urlIndex];
73                        subPage = window.location.pathname.split("/")[urlIndex + 1];
74                        console.log("window.location.pathname", window.location.pathname);
75                        console.log("pageUrl", pageUrl);
76                        console.log("subPage", subPage);
77                        return [4 /*yield*/, page_1.page.findPageByUrl(pageUrl, subPage, page_1.Locales[locale])];
78                    case 3:
79                        sitePage = _b.sent();
80                        system.currentPage = sitePage;
81                        console.log("system.currentPage: ", system.currentPage);
82                        if (pagesWpRendered.includes((_a = this.currentPage) === null || _a === void 0 ? void 0 : _a.page)) {
83                            contentService_1.contentService.init(locale, sitePage.category);
84                            site_1.site.listenBoxes();
85                        }
86                        else {
87                            this.initPageModules(locale);
88                        }
89                        site_1.site.checkHash();
90                        logo_1.logo.init();
91                        button_1.button.init();
92                        eventType_1.eventType.init(locale);
93                        return [2 /*return*/];
94                }
95            });
96        });
97    },
98    initPageModules: function (locale) {
99        var _a;
100        return __awaiter(this, void 0, void 0, function () {
101            return __generator(this, function (_b) {
102                if (!((_a = system.currentPage) === null || _a === void 0 ? void 0 : _a.page)) {
103                    return [2 /*return*/];
104                }
105                if (system.currentPage.page === page_1.Pages.NEWS) {
106                    news_1.news.init(locale, system.currentPage);
107                }
108                else if (system.currentPage.page === page_1.Pages.PROGRAM) {
109                    program_1.program.init(locale);
110                }
111                else if (system.currentPage.page === page_1.Pages.SCHEDULE) {
112                    schedule_1.schedule.init(locale);
113                }
114                else if (system.currentPage.page === page_1.Pages.CALENDAR) {
115                    calendar_1.calendar.init(locale);
116                }
117                else if (system.currentPage.page === page_1.Pages.TICKETS) {
118                    ticket_1.ticket.init(locale);
119                }
120                else if (system.currentPage.page === page_1.Pages.INFO) {
121                    info_1.info.init(locale, system.currentPage);
122                }
123                else if (system.currentPage.page === page_1.Pages.PODCAST) {
124                    pods_1.pods.init(locale, system.currentPage);
125                }
126                return [2 /*return*/];
127            });
128        });
129    },
130    getLocaleFromHtml: function () {
131        var _a;
132        return __awaiter(this, void 0, void 0, function () {
133            var localeObject, locale;
134            return __generator(this, function (_b) {
135                localeObject = document.getElementsByTagName("html")[0];
136                locale = config_1.config.defaultLang;
137                if (localeObject) {
138                    locale =
139                        ((_a = localeObject.getAttribute("lang")) === null || _a === void 0 ? void 0 : _a.substring(0, 2)) ||
140                            config_1.config.defaultLang;
141                }
142                return [2 /*return*/, locale];
143            });
144        });
145    },
146};
147/*
148 * Global
149 */
150exports.locale = "sv";
151$(document).ready(function () {
152    return __awaiter(this, void 0, void 0, function () {
153        var locale;
154        return __generator(this, function (_a) {
155            switch (_a.label) {
156                case 0: return [4 /*yield*/, system.getLocaleFromHtml()];
157                case 1:
158                    locale = _a.sent();
159                    return [4 /*yield*/, config_1.config.configureLocale(locale)];
160                case 2:
161                    _a.sent();
162                    return [4 /*yield*/, system.init(locale)];
163                case 3:
164                    _a.sent();
165                    return [2 /*return*/];
166            }
167        });
168    });
169});
170
171},{"./modules/button":2,"./modules/calendar":3,"./modules/config":4,"./modules/contentService":5,"./modules/eventService":7,"./modules/eventType":8,"./modules/info":12,"./modules/logo":14,"./modules/news":15,"./modules/page":16,"./modules/pods":17,"./modules/program":18,"./modules/schedule":19,"./modules/site":21,"./modules/ticket":22}],2:[function(require,module,exports){
172"use strict";
173Object.defineProperty(exports, "__esModule", { value: true });
174exports.button = void 0;
175var element_1 = require("./element");
176var initialData = window.__INITIAL_DATA__;
177exports.button = {
178    listen: function () {
179        if (null !== element_1.element.buttons.buttonToggle) {
180            element_1.element.buttons.buttonToggle.onclick = function () {
181                var _a;
182                if (-1 !=
183                    ((_a = element_1.element.wrappers.mainWrapper) === null || _a === void 0 ? void 0 : _a.className.indexOf("toggled-on"))) {
184                    element_1.element.wrappers.navWrapper.className =
185                        element_1.element.wrappers.navWrapper.className.replace(" toggled-on", "");
186                    element_1.element.wrappers.mainWrapper.className =
187                        element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", "");
188                }
189                else {
190                    element_1.element.wrappers.navWrapper.className += " toggled-on";
191                    element_1.element.wrappers.mainWrapper.className += " toggled-on";
192                }
193            };
194        }
195        if (null !== element_1.element.buttons.buttonToggleMobile) {
196            element_1.element.buttons.buttonToggleMobile.onclick = function () {
197                if (-1 !=
198                    element_1.element.wrappers.mainWrapper.className.indexOf("toggled-on")) {
199                    element_1.element.wrappers.navWrapper.className =
200                        element_1.element.wrappers.navWrapper.className.replace(" toggled-on", "");
201                    element_1.element.wrappers.mainWrapper.className =
202                        element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", "");
203                }
204                else {
205                    element_1.element.wrappers.navWrapper.className += " toggled-on";
206                    element_1.element.wrappers.mainWrapper.className += " toggled-on";
207                }
208            };
209        }
210        if (null !== element_1.element.buttons.buttonCloseSinglePane) {
211            element_1.element.buttons.buttonCloseSinglePane.onclick = function () {
212                element_1.element.wrappers.navWrapper.className =
213                    element_1.element.wrappers.navWrapper.className.replace(" toggled-on", "");
214                element_1.element.wrappers.mainWrapper.className =
215                    element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", "");
216                element_1.element.wrappers.mainWrapper.className =
217                    element_1.element.wrappers.mainWrapper.className.replace(" single-focus", "");
218                element_1.element.wrappers.mainWrapper.className =
219                    element_1.element.wrappers.mainWrapper.className.replace(" share", "");
220                var stateObj = { foo: "bar" };
221                history.pushState(stateObj, "", initialData.overviewUrl);
222            };
223        }
224        // if (null !== element.buttons.buttonShare) {
225        //     element.buttons.buttonShare.onclick = function () {
226        //         if (-1 === element.wrappers.mainWrapper.className.indexOf('share')) {
227        //             element.wrappers.mainWrapper.className += ' share';
228        //         }
229        //     };
230        // }
231        if (null !== element_1.element.buttons.buttonCloseShare) {
232            element_1.element.buttons.buttonCloseShare.onclick = function () {
233                element_1.element.wrappers.mainWrapper.className =
234                    element_1.element.wrappers.mainWrapper.className.replace(" share", "");
235            };
236        }
237        if (null !== element_1.element.buttons.buttonShareUrl) {
238            element_1.element.buttons.buttonShareUrl.addEventListener("click", function (e) {
239                var text = element_1.element.buttons.buttonShareUrl.href;
240                var textArea = document.createElement("textarea");
241                //
242                // *** This styling is an extra step which is likely not required. ***
243                //
244                // Why is it here? To ensure:
245                // 1. the element is able to have focus and selection.
246                // 2. if element was to flash render it has minimal visual impact.
247                // 3. less flakyness with selection and copying which **might** occur if
248                //    the textarea element is not visible.
249                //
250                // The likelihood is the element won't even render, not even a flash,
251                // so some of these are just precautions. However in IE the element
252                // is visible whilst the popup box asking the user for permission for
253                // the web page to copy to the clipboard.
254                //
255                // Place in top-left corner of screen regardless of scroll position.
256                textArea.style.position = "fixed";
257                textArea.style.top = "0";
258                textArea.style.left = "0";
259                // Ensure it has a small width and height. Setting to 1px / 1em
260                // doesn't work as this gives a negative w/h on some browsers.
261                textArea.style.width = "2em";
262                textArea.style.height = "2em";
263                // We don't need padding, reducing the size if it does flash render.
264                textArea.style.padding = "0";
265                // Clean up any borders.
266                textArea.style.border = "none";
267                textArea.style.outline = "none";
268                textArea.style.boxShadow = "none";
269                // Avoid flash of white box if rendered for any reason.
270                textArea.style.background = "transparent";
271                textArea.value = text;
272                document.body.appendChild(textArea);
273                textArea.select();
274                try {
275                    var successful = document.execCommand("copy");
276                    var msg = successful ? "successful" : "unsuccessful";
277                    console.log("Copying text command was " + msg);
278                }
279                catch (err) {
280                    console.log("Oops, unable to copy");
281                }
282                document.body.removeChild(textArea);
283                e.stopPropagation();
284                e.preventDefault();
285                element_1.element.buttons.buttonShareUrl.innerHTML = "Url (Copied)";
286            });
287        }
288    },
289    init: function () {
290        console.log("button init");
291        exports.button.listen();
292    },
293};
294
295},{"./element":6}],3:[function(require,module,exports){
296"use strict";
297var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
298    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
299    return new (P || (P = Promise))(function (resolve, reject) {
300        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
301        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
302        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
303        step((generator = generator.apply(thisArg, _arguments || [])).next());
304    });
305};
306var __generator = (this && this.__generator) || function (thisArg, body) {
307    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
308    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
309    function verb(n) { return function (v) { return step([n, v]); }; }
310    function step(op) {
311        if (f) throw new TypeError("Generator is already executing.");
312        while (g && (g = 0, op[0] && (_ = 0)), _) try {
313            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
314            if (y = 0, t) op = [op[0] & 2, t.value];
315            switch (op[0]) {
316                case 0: case 1: t = op; break;
317                case 4: _.label++; return { value: op[1], done: false };
318                case 5: _.label++; y = op[1]; op = [0]; continue;
319                case 7: op = _.ops.pop(); _.trys.pop(); continue;
320                default:
321                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
322                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
323                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
324                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
325                    if (t[2]) _.ops.pop();
326                    _.trys.pop(); continue;
327            }
328            op = body.call(thisArg, _);
329        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
330        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
331    }
332};
333var __importDefault = (this && this.__importDefault) || function (mod) {
334    return (mod && mod.__esModule) ? mod : { "default": mod };
335};
336Object.defineProperty(exports, "__esModule", { value: true });
337exports.calendar = void 0;
338var config_1 = require("./config");
339var site_1 = require("./site");
340var festivalpass_1 = require("./festivalpass");
341var language_1 = require("./language");
342var eventService_1 = require("./eventService");
343var externalEventService_1 = require("./externalEventService");
344var dayjs_1 = __importDefault(require("dayjs"));
345exports.calendar = {
346    _locale: config_1.config.defaultLang,
347    allEvents: [],
348    allPasses: [],
349    renderMonth: function (postDate, addNow) {
350        var nowString = addNow ? 'id="now" ' : "";
351        $(".entry-content").append("<h2 ".concat(nowString, "class=\"month-header\">").concat(postDate.format("MMMM YYYY"), "</h2>"));
352    },
353    renderCalendarBox: function (postYear, postMonth) {
354        $(".entry-content").append("<div class=\"calendar-box-".concat(postYear, "-").concat(postMonth, "\">"));
355    },
356    isDateBeforeToday: function (date) {
357        return (new Date(date.toDateString()) < new Date(new Date().toDateString()));
358    },
359    renderPost: function (eventYear, eventMonth, event) {
360        var archiveClass = exports.calendar.isDateBeforeToday(event.startTime)
361            ? " archive"
362            : "";
363        var template = "<div class=\"calendar-item ".concat(event.extraCssClass || "").concat(archiveClass, "\" data-id=\"").concat(event.id, "\" data-link=\"").concat(event.link, "\" style=\"background-color:").concat(event.backgroundColor, "\"><div>");
364        template += eventService_1.eventService.renderEventType(event);
365        template += "<h2>".concat(event.title, "</h2>");
366        template += '<p class="time-and-place">';
367        template += eventService_1.eventService.renderDateAndVenue(event);
368        template += "</p>";
369        template += "<p class=\"ticket\">";
370        if (event.ticket) {
371            template += "<a href=\"".concat(event.ticket, "\" target=\"_blank\">").concat(language_1.language.get(site_1.site._locale, "BiljettPl"), "</a>");
372        }
373        template += "</p>";
374        template += "</div></div>";
375        $(".calendar-box-".concat(eventYear, "-").concat(eventMonth)).append(template);
376    },
377    parsePost: function (currentYear, currentMonth, event) {
378        var eventYear = (0, dayjs_1.default)(event.startDate).year();
379        var eventMonth = (0, dayjs_1.default)(event.startDate).month();
380        //console.log(event.startDate, eventYear, eventMonth);
381        if (currentYear === -1 ||
382            currentYear !== eventYear ||
383            currentMonth === -1 ||
384            currentMonth !== eventMonth) {
385            var now = (0, dayjs_1.default)();
386            var addNow = false;
387            // console.log(
388            //     "eventYear",
389            //     eventYear,
390            //     "eventMonth",
391            //     eventMonth,
392            //     "now.month()+1",
393            //     now.month() + 1
394            // );
395            if (!addNow &&
396                now.year() === eventYear &&
397                (now.month() + 1 === eventMonth ||
398                    now.month() + 1 >= eventMonth)) {
399                console.log("addNow", now.format("MMMM YYYY"));
400                addNow = true;
401            }
402            exports.calendar.renderMonth((0, dayjs_1.default)(event.startDate), addNow);
403            exports.calendar.renderCalendarBox(eventYear, eventMonth);
404        }
405        exports.calendar.renderPost(eventYear, eventMonth, event);
406        return { eventYear: eventYear, eventMonth: eventMonth };
407    },
408    parse: function (events) {
409        var currentYear = -1;
410        var currentMonth = -1;
411        events.forEach(function (event) {
412            if (event.startDate) {
413                var eventDate = exports.calendar.parsePost(currentYear, currentMonth, event);
414                currentYear = eventDate.eventYear;
415                currentMonth = eventDate.eventMonth;
416            }
417        });
418    },
419    parseFestivalpasses: function (events, locale) {
420        events.forEach(function (event) {
421            if (event.passes) {
422                var addPipe = event.ticket ? true : false;
423                var selector = "[data-id=\"".concat(event.id, "\"] .ticket");
424                festivalpass_1.festivalpass.load(event.passes, selector, addPipe, exports.calendar.allPasses, locale);
425            }
426        });
427    },
428    load: function (events, locale) {
429        exports.calendar.parse(events);
430        exports.calendar.parseFestivalpasses(events, locale);
431        exports.calendar.listenBoxes();
432    },
433    listenBoxes: function () {
434        console.log("calendar listenBoxes");
435        $("div.calendar-item").click(function (e) {
436            if (e.currentTarget.className.includes("external")) {
437                window.location.href = e.currentTarget.dataset.link;
438            }
439            else {
440                site_1.site.handleClick(this);
441            }
442        });
443    },
444    appendContent: function (events) {
445        events.forEach(function (event) {
446            if (!eventService_1.eventService.allEvents.find(function (e) { return e.id === event.id; }) &&
447                !eventService_1.eventService.allEvents.find(function (e) { return e.slug === event.slug; })) {
448                exports.calendar.allEvents.push(event);
449            }
450            else {
451                console.log("event exists!", event.title);
452            }
453        });
454        exports.calendar.allEvents = eventService_1.eventService.sort(exports.calendar.allEvents, eventService_1.SortOrder.DESC);
455    },
456    checkHash: function () {
457        console.log("hash", window.location.hash);
458        if (window.location.hash) {
459            var target = window.location.hash.replace("#", "");
460            //alert("hash" + target);
461            //location.hash = "#" + target;
462            var element_to_scroll_to = document.getElementById(target);
463            element_to_scroll_to.scrollIntoView();
464            $(".site-title").addClass("scrolled");
465        }
466    },
467    init: function (locale) {
468        return __awaiter(this, void 0, void 0, function () {
469            var _a, _b, _c, _d;
470            return __generator(this, function (_e) {
471                switch (_e.label) {
472                    case 0:
473                        exports.calendar._locale = locale;
474                        _a = exports.calendar;
475                        return [4 /*yield*/, festivalpass_1.festivalpass.getPasses(locale)];
476                    case 1:
477                        _a.allPasses = _e.sent();
478                        _b = exports.calendar;
479                        return [4 /*yield*/, eventService_1.eventService.get(locale)];
480                    case 2:
481                        _b.allEvents = _e.sent();
482                        _d = (_c = exports.calendar).appendContent;
483                        return [4 /*yield*/, externalEventService_1.externalEventService.getForSorces(locale)];
484                    case 3:
485                        _d.apply(_c, [_e.sent()]);
486                        exports.calendar.allEvents = eventService_1.eventService.filterHasValidStartTime(exports.calendar.allEvents);
487                        exports.calendar.allEvents = eventService_1.eventService.sort(exports.calendar.allEvents, eventService_1.SortOrder.DESC);
488                        exports.calendar.load(exports.calendar.allEvents, locale);
489                        setTimeout(function () {
490                            exports.calendar.checkHash();
491                        }, 50);
492                        console.log("calendar init", exports.calendar._locale);
493                        return [2 /*return*/];
494                }
495            });
496        });
497    },
498};
499
500},{"./config":4,"./eventService":7,"./externalEventService":9,"./festivalpass":10,"./language":13,"./site":21,"dayjs":25}],4:[function(require,module,exports){
501"use strict";
502var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
503    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
504    return new (P || (P = Promise))(function (resolve, reject) {
505        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
506        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
507        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
508        step((generator = generator.apply(thisArg, _arguments || [])).next());
509    });
510};
511var __generator = (this && this.__generator) || function (thisArg, body) {
512    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
513    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
514    function verb(n) { return function (v) { return step([n, v]); }; }
515    function step(op) {
516        if (f) throw new TypeError("Generator is already executing.");
517        while (g && (g = 0, op[0] && (_ = 0)), _) try {
518            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
519            if (y = 0, t) op = [op[0] & 2, t.value];
520            switch (op[0]) {
521                case 0: case 1: t = op; break;
522                case 4: _.label++; return { value: op[1], done: false };
523                case 5: _.label++; y = op[1]; op = [0]; continue;
524                case 7: op = _.ops.pop(); _.trys.pop(); continue;
525                default:
526                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
527                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
528                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
529                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
530                    if (t[2]) _.ops.pop();
531                    _.trys.pop(); continue;
532            }
533            op = body.call(thisArg, _);
534        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
535        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
536    }
537};
538var __importDefault = (this && this.__importDefault) || function (mod) {
539    return (mod && mod.__esModule) ? mod : { "default": mod };
540};
541Object.defineProperty(exports, "__esModule", { value: true });
542exports.config = void 0;
543var dayjs_1 = __importDefault(require("dayjs"));
544var localizedFormat_1 = __importDefault(require("dayjs/plugin/localizedFormat"));
545require("dayjs/locale/sv");
546//import 'dayjs/locale/en';
547exports.config = {
548    siteFolder: "/2026/",
549    siteUrl: "https://clandestinofestival.org",
550    defaultLang: "sv",
551    pageSize: 100,
552    earliestEventHour: 8,
553    defaultColor: "#ff4b37",
554    getSiteRoot: function () {
555        return $("html").attr("lang") === "sv-SE"
556            ? exports.config.siteFolder
557            : exports.config.siteFolder + "en/";
558    },
559    getRestUrl: function () {
560        return this.getSiteRoot() + "wp-json/wp/v2/";
561    },
562    configureLocale: function (locale) {
563        return __awaiter(this, void 0, void 0, function () {
564            return __generator(this, function (_a) {
565                console.log("config locale:", locale);
566                dayjs_1.default.locale(locale);
567                dayjs_1.default.extend(localizedFormat_1.default);
568                return [2 /*return*/];
569            });
570        });
571    },
572    externalEventSources: [
573        "https://clandestinoinstitut.org/wp-json/wp/v2/posts/?per_page=300&categories=1&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC",
574        "https://clandestinofestival.org/2025/wp-json/wp/v2/posts/?per_page=100&categories=11&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC",
575    ],
576};
577
578},{"dayjs":25,"dayjs/locale/sv":26,"dayjs/plugin/localizedFormat":30}],5:[function(require,module,exports){
579"use strict";
580var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
581    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
582    return new (P || (P = Promise))(function (resolve, reject) {
583        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
584        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
585        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
586        step((generator = generator.apply(thisArg, _arguments || [])).next());
587    });
588};
589var __generator = (this && this.__generator) || function (thisArg, body) {
590    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
591    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
592    function verb(n) { return function (v) { return step([n, v]); }; }
593    function step(op) {
594        if (f) throw new TypeError("Generator is already executing.");
595        while (g && (g = 0, op[0] && (_ = 0)), _) try {
596            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
597            if (y = 0, t) op = [op[0] & 2, t.value];
598            switch (op[0]) {
599                case 0: case 1: t = op; break;
600                case 4: _.label++; return { value: op[1], done: false };
601                case 5: _.label++; y = op[1]; op = [0]; continue;
602                case 7: op = _.ops.pop(); _.trys.pop(); continue;
603                default:
604                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
605                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
606                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
607                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
608                    if (t[2]) _.ops.pop();
609                    _.trys.pop(); continue;
610            }
611            op = body.call(thisArg, _);
612        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
613        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
614    }
615};
616var __read = (this && this.__read) || function (o, n) {
617    var m = typeof Symbol === "function" && o[Symbol.iterator];
618    if (!m) return o;
619    var i = m.call(o), r, ar = [], e;
620    try {
621        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
622    }
623    catch (error) { e = { error: error }; }
624    finally {
625        try {
626            if (r && !r.done && (m = i["return"])) m.call(i);
627        }
628        finally { if (e) throw e.error; }
629    }
630    return ar;
631};
632var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
633    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
634        if (ar || !(i in from)) {
635            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
636            ar[i] = from[i];
637        }
638    }
639    return to.concat(ar || Array.prototype.slice.call(from));
640};
641var __importDefault = (this && this.__importDefault) || function (mod) {
642    return (mod && mod.__esModule) ? mod : { "default": mod };
643};
644Object.defineProperty(exports, "__esModule", { value: true });
645exports.contentService = void 0;
646var config_1 = require("./config");
647var dayjs_1 = __importDefault(require("dayjs"));
648exports.contentService = {
649    _locale: config_1.config.defaultLang,
650    allContents: [],
651    breakLines: function (title) {
652        title = title.replace("&lt;wbr />", "<wbr />");
653        title = title.replace("&lt;br />", "<br />");
654        title = title.replace("&lt;br>", "<br />");
655        return title;
656    },
657    stripTags: function (title) {
658        title = title.replace("<wbr />", "");
659        title = title.replace("<br />", "");
660        title = title.replace("<br />", "");
661        return title;
662    },
663    convert: function (post, locale) {
664        var _a, _b, _c, _d, _e, _f;
665        var event = {
666            id: post.id,
667            slug: post.slug,
668            title: exports.contentService.breakLines(post.title.rendered),
669            lank: post.acf.lank,
670            content: post.content["rendered"],
671            categories: post.categories,
672            sticky: post.sticky,
673            date: post.date,
674            type: post.type,
675            featuredImage: (_b = (_a = post.nss_featured_images) === null || _a === void 0 ? void 0 : _a.medium) === null || _b === void 0 ? void 0 : _b.src,
676            featuredImageHeight: (_d = (_c = post.nss_featured_images) === null || _c === void 0 ? void 0 : _c.medium) === null || _d === void 0 ? void 0 : _d.height,
677            featuredImageWidth: (_f = (_e = post.nss_featured_images) === null || _e === void 0 ? void 0 : _e.medium) === null || _f === void 0 ? void 0 : _f.width,
678        };
679        return event;
680    },
681    load: function (locale, category) {
682        return __awaiter(this, void 0, void 0, function () {
683            return __generator(this, function (_a) {
684                switch (_a.label) {
685                    case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() +
686                            "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(category, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC&lang=").concat(locale))];
687                    case 1: return [2 /*return*/, _a.sent()];
688                }
689            });
690        });
691    },
692    loadSingle: function (postId, postSlug) {
693        return __awaiter(this, void 0, void 0, function () {
694            var query, result;
695            return __generator(this, function (_a) {
696                switch (_a.label) {
697                    case 0:
698                        query = "";
699                        if (postId !== undefined) {
700                            query += postId;
701                        }
702                        else {
703                            query += "?slug=" + postSlug;
704                        }
705                        return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "posts/" + query)];
706                    case 1:
707                        result = _a.sent();
708                        if (result.length === 1) {
709                            // By slug returns array
710                            return [2 /*return*/, result[0]];
711                        }
712                        return [2 /*return*/, result];
713                }
714            });
715        });
716    },
717    getSingle: function (postId, postSlug) {
718        return __awaiter(this, void 0, void 0, function () {
719            var _a, _b;
720            return __generator(this, function (_c) {
721                switch (_c.label) {
722                    case 0:
723                        console.log("contentService.getSingle ".concat(postId, " ").concat(postSlug));
724                        _b = (_a = exports.contentService).convert;
725                        return [4 /*yield*/, exports.contentService.loadSingle(postId, postSlug)
725];
726                    case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.contentService._locale])];
727                }
728            });
729        });
730    },
731    getSingleFromPreloaded: function (postId, postSlug) {
732        return __awaiter(this, void 0, void 0, function () {
733            var query;
734            return __generator(this, function (_a) {
735                console.log("contentService.allContents.length", exports.contentService.allContents.length);
736                query = function (event) { return event.id === postId; };
737                if (postSlug !== undefined) {
738                    query = function (event) { return event.id === postId; };
739                }
740                return [2 /*return*/, exports.contentService.allContents.find(query)];
741            });
742        });
743    },
744    sort: function (contents) {
745        contents.sort(function (a, b) {
746            var eventA = (0, dayjs_1.default)(a.date);
747            var eventB = (0, dayjs_1.default)(b.date);
748            return eventB.toDate().getTime() - eventA.toDate().getTime();
749        });
750        return contents;
751    },
752    addExtraClasses: function (contents) {
753        if (contents.length === 1) {
754            contents[0].extraCssClass += " only-one";
755        }
756    },
757    sortSticky: function (contents) {
758        var sticky = exports.contentService.sort(contents.filter(function (event) { return event.sticky; }));
759        var nonSticky = exports.contentService.sort(contents.filter(function (event) { return !event.sticky; }));
760        sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false));
761        return sticky;
762    },
763    get: function (locale, category) {
764        return __awaiter(this, void 0, void 0, function () {
765            var posts, contents;
766            return __generator(this, function (_a) {
767                switch (_a.label) {
768                    case 0:
769                        if (exports.contentService.allContents.length > 0) {
770                            return [2 /*return*/, exports.contentService.allContents];
771                        }
772                        return [4 /*yield*/, exports.contentService.load(locale, category)];
773                    case 1:
774                        posts = _a.sent();
775                        contents = [];
776                        posts.forEach(function (post) {
777                            contents.push(exports.contentService.convert(post, locale));
778                        });
779                        contents = exports.contentService.sortSticky(contents);
780                        return [2 /*return*/, contents];
781                }
782            });
783        });
784    },
785    init: function (locale, category) {
786        return __awaiter(this, void 0, void 0, function () {
787            var _a;
788            return __generator(this, function (_b) {
789                switch (_b.label) {
790                    case 0:
791                        exports.contentService._locale = locale;
792                        _a = exports.contentService;
793                        return [4 /*yield*/, exports.contentService.get(locale, category)];
794                    case 1:
795                        _a.allContents = _b.sent();
796                        console.log("contentService init", exports.contentService._locale);
797                        return [2 /*return*/];
798                }
799            });
800        });
801    },
802};
803
804},{"./config":4,"dayjs":25}],6:[function(require,module,exports){
805"use strict";
806Object.defineProperty(exports, "__esModule", { value: true });
807exports.element = void 0;
808exports.element = {
809    buttons: {
810        buttonToggle: document.getElementById("button-nav-wrapper-toggle"),
811        buttonToggleMobile: document.getElementById("button-nav-wrapper-toggle-mobile"),
812        buttonCloseSinglePane: document.getElementById("button-close-single-pane"),
813        // buttonShare: document.getElementById(
814        //     "button-share"
815        // ) as HTMLAnchorElement,
816        buttonShareFb: document.getElementById("button-share-fb"),
817        //buttonShareTwitter:     document.getElementById('button-share-twitter') as HTMLAnchorElement,
818        calendarContainer: document.getElementById("calendar-container"),
819        buttonAddToCalendar: document.getElementById("add-to-calendar-button"),
820        buttonShareUrl: document.getElementById("button-share-url"),
821        buttonCloseShare: document.getElementById("button-close-share"),
822    },
823    wrappers: {
824        navWrapper: document.getElementById("nav-wrapper"),
825        mainWrapper: document.getElementById("main-wrapper"),
826    },
827};
828
829},{}],7:[function(require,module,exports){
830"use strict";
831var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
832    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
833    return new (P || (P = Promise))(function (resolve, reject) {
834        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
835        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
836        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
837        step((generator = generator.apply(thisArg, _arguments || [])).next());
838    });
839};
840var __generator = (this && this.__generator) || function (thisArg, body) {
841    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
842    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
843    function verb(n) { return function (v) { return step([n, v]); }; }
844    function step(op) {
845        if (f) throw new TypeError("Generator is already executing.");
846        while (g && (g = 0, op[0] && (_ = 0)), _) try {
847            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
848            if (y = 0, t) op = [op[0] & 2, t.value];
849            switch (op[0]) {
850                case 0: case 1: t = op; break;
851                case 4: _.label++; return { value: op[1], done: false };
852                case 5: _.label++; y = op[1]; op = [0]; continue;
853                case 7: op = _.ops.pop(); _.trys.pop(); continue;
854                default:
855                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
856                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
857                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
858                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
859                    if (t[2]) _.ops.pop();
860                    _.trys.pop(); continue;
861            }
862            op = body.call(thisArg, _);
863        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
864        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
865    }
866};
867var __read = (this && this.__read) || function (o, n) {
868    var m = typeof Symbol === "function" && o[Symbol.iterator];
869    if (!m) return o;
870    var i = m.call(o), r, ar = [], e;
871    try {
872        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
873    }
874    catch (error) { e = { error: error }; }
875    finally {
876        try {
877            if (r && !r.done && (m = i["return"])) m.call(i);
878        }
879        finally { if (e) throw e.error; }
880    }
881    return ar;
882};
883var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
884    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
885        if (ar || !(i in from)) {
886            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
887            ar[i] = from[i];
888        }
889    }
890    return to.concat(ar || Array.prototype.slice.call(from));
891};
892var __importDefault = (this && this.__importDefault) || function (mod) {
893    return (mod && mod.__esModule) ? mod : { "default": mod };
894};
895Object.defineProperty(exports, "__esModule", { value: true });
896exports.eventService = exports.FEATURED_IMAGE_SIZE = exports.SortOrder = void 0;
897var config_1 = require("./config");
898var page_1 = require("./page");
899var dayjs_1 = __importDefault(require("dayjs"));
900var contentService_1 = require("./contentService");
901var venueService_1 = require("./venueService");
902var isSameOrBefore_1 = __importDefault(require("dayjs/plugin/isSameOrBefore"));
903var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter"));
904var validDate_1 = require("./validDate");
905//import { testContent } from "./testContent";
906var eventType_1 = require("./eventType");
907var language_1 = require("./language");
908//const TBA = "tba";
909var SortOrder;
910(function (SortOrder) {
911    SortOrder["ASC"] = "asc";
912    SortOrder["DESC"] = "desc";
913    SortOrder["RANDOM"] = "random";
914})(SortOrder = exports.SortOrder || (exports.SortOrder = {}));
915exports.FEATURED_IMAGE_SIZE = "medium";
916exports.eventService = {
917    _locale: config_1.config.defaultLang,
918    allEvents: [],
919    allVenues: [],
920    renderCss: function (eventId, imageHeigh, imageWidth) {
921        var newWidth = (imageWidth * 300) / imageHeigh;
922        var css = "<style scoped=\"\">\n        @media (min-width: 960px) {\n            .single-box-".concat(eventId, " {\n                width: ").concat(newWidth, "px !important;\n                max-width: initial !important;\n            }\n        }\n        </style>");
923        $("#content").append(css);
924    },
925    renderVenue: function (event) {
926        var template = "";
927        if (event.venue) {
928            template += "<br>".concat(event.venueFormatted);
929        }
930        return template;
931    },
932    renderDateAndVenue: function (event) {
933        var template = "";
934        if (event.dateFormatted) {
935            template += "".concat(event.dateFormatted);
936        }
937        template += exports.eventService.renderVenue(event);
938        return template;
939    },
940    renderEventStatuses: function (event) {
941        var template = "";
942        if (event.cancelled) {
943            template += "<h2 class=\"cancelled-text\">".concat(language_1.language.get(exports.eventService._locale, "Cancelled"), "</h2>");
944        }
945        else {
946            if (event.soldOut) {
947                template += "<h2 class=\"soldout-text\">".concat(language_1.language.get(exports.eventService._locale, "SoldOut"), "</h2>");
948            }
949        }
950        return template;
951    },
952    renderEventType: function (event) {
953        var template = "<p class=\"event-type\">";
954        switch (event.eventType) {
955            case eventType_1.EventTypes.FESTIVAL:
956                template += eventType_1.eventType.getEventTypeDescription(event.eventType);
957                //template += eventService.renderDateAndVenue(event);
958                // if (event.venue) {
959                //     // Do not render TBA
960                //     template += eventService.renderVenue(event);
961                // }
962                break;
963            case eventType_1.EventTypes.BEYOND:
964                template += eventType_1.eventType.getEventTypeDescription(event.eventType);
965                //template += eventService.renderDateAndVenue(event);
966                break;
967            case eventType_1.EventTypes.PODS:
968                template += eventType_1.eventType.getEventTypeDescription(event.eventType);
969                //template += eventService.renderDateAndVenue(event);
970                break;
971            case eventType_1.EventTypes.TALKS:
972                template += eventType_1.eventType.getEventTypeDescription(event.eventType);
973                //template += eventService.renderDateAndVenue(event);
974                break;
975            //default:
976            //    template += eventService.renderDateAndVenue(event);
977        }
978        return template + "</p>";
979    },
980    renderPost: function (event) {
981        if (event.featuredImage) {
982            exports.eventService.renderCss(event.id, event.featuredImageHeight, event.featuredImageWidth);
983        }
984        var template = "<a href=\"".concat(config_1.config.siteFolder).concat(event.slug, "/\" data-id=\"").concat(event.id, "\" data-slug=\"").concat(event.slug, "\" data-format=\"\" class=\"single-box single-box-").concat(event.id, " ").concat(event.extraCssClass || "", "\" title=\"").concat(event.title, "\" rel=\"bookmark\">");
985        template += exports.eventService.renderEventStatuses(event);
986        if (event.featuredImage) {
987            template += "<img width=\"1024\" height=\"683\" src=\"".concat(event.featuredImage, "\" class=\"attachment-medium size-medium wp-post-image\" alt=\"\" decoding=\"async\" fetchpriority=\"high\">");
988        }
989        template += '<div class="caption-text">';
990        template += exports.eventService.renderEventType(event);
991        template += "<h2>".concat(event.title, "</h2>");
992        template += '<p class="time-and-place">';
993        template += exports.eventService.renderDateAndVenue(event);
994        template += "</p>";
995        template += "</div>";
996        template += "</a>";
997        $("#content").append(template);
998    },
999    adjustMidnight: function (date) {
1000        if (date.hour() < config_1.config.earliestEventHour) {
1001            return date.add(1, "day");
1002        }
1003        return date;
1004    },
1005    addTime: function (date, time) {
1006        return time
1007            ? exports.eventService.adjustMidnight((0, dayjs_1.default)(date + time)).toDate()
1008            : undefined;
1009    },
1010    getDoorsFormattedTime: function (dateString) {
1011        if (!dateString) {
1012            return undefined;
1013        }
1014        return dateString.replace(":", ".");
1015    },
1016    convert: function (post, locale) {
1017        var _a, _b, _c, _d, _e, _f;
1018        // let venue: ClandestinoVenue = eventService.allVenues.find(
1019        //     (v) => v.id === post.acf.scen?.ID
1020        // );
1021        // if (!venue) {
1022        //     if (post.acf?.scen) {
1023        //         // Fix for external events
1024        //         venue = {
1025        //             id: 0,
1026        //             title: post.acf["scen"]?.post_title,
1027        //             slug: TBA,
1028        //             active: true,
1029        //         };
1030        //     }
1031        //     venue = {
1032        //         id: 0,
1033        //         title: TBA,
1034        //         slug: TBA,
1035        //         active: true,
1036        //     };
1037        // }
1038        var venue = venueService_1.venueService.getVenueOrTBA(post);
1039        var venueFormatted = venue.title;
1040        var event = {
1041            id: post.id,
1042            slug: post.slug,
1043            title: contentService_1.contentService.breakLines(post.title.rendered),
1044            content: post.content["rendered"],
1045            sticky: post.sticky,
1046            date: post.date,
1047            type: post.type,
1048            featuredImage: (_b = (_a = post.nss_featured_images) === null || _a === void 0 ? void 0 : _a.medium) === null || _b === void 0 ? void 0 : _b.src,
1049            featuredImageHeight: (_d = (_c = post.nss_featured_images) === null || _c === void 0 ? void 0 : _c.medium) === null || _d === void 0 ? void 0 : _d.height,
1050            featuredImageWidth: (_f = (_e = post.nss_featured_images) === null || _e === void 0 ? void 0 : _e.medium) === null || _f === void 0 ? void 0 : _f.width,
1051            venue: venue,
1052            venueFormatted: venueFormatted,
1053            //venueTitle: post.acf["scen"]?.post_title || TBA,
1054            startDate: post.acf.datum,
1055            endDate: post.acf.slutdatum,
1056            doorsOpen: exports.eventService.addTime(post.acf.datum, post.acf.dorrar_oppnar),
1057            doorsOpenFormatted: exports.eventService.getDoorsFormattedTime(post.acf.dorrar_oppnar),
1058            startTime: exports.eventService.addTime(post.acf.datum, post.acf.starttid),
1059            endTime: exports.eventService.addTime(post.acf.datum, post.acf.sluttid),
1060            startTime2: exports.eventService.addTime(post.acf.datum, post.acf.starttid2),
1061            endTime2: exports.eventService.addTime(post.acf.datum, post.acf.sluttid2),
1062            startTime3: exports.eventService.addTime(post.acf.datum, post.acf.starttid3),
1063            endTime3: exports.eventService.addTime(post.acf.datum, post.acf.sluttid3),
1064            backgroundColor: post.acf.bakgrundsfarg || (venue === null || venue === void 0 ? void 0 : venue.color) || config_1.config.defaultColor,
1065            ticket: post.acf.biljett,
1066            passes: post.acf.festivalpass,
1067            dateTimeFormatted: exports.eventService.getDateAndTime(post, locale, true),
1068            dateFormatted: exports.eventService.getDateAndTime(post, locale, false),
1069            categories: post.categories,
1070            eventType: post.acf.event_typ,
1071            soldOut: post.acf.slutsald,
1072            cancelled: post.acf.installd,
1073            extraCssClass: "",
1074        };
1075        //event.cancelled = true;
1076        //console.log("e", event);
1077        //testContent.setTestImages(event);
1078        exports.eventService.addArchivedClass(event);
1079        exports.eventService.addCancelledClass(event);
1080        if (!event.cancelled) {
1081            exports.eventService.addSoldOutClass(event);
1082        }
1083        return event;
1084    },
1085    getStartTime: function (startTime, separator) {
1086        if (!startTime) {
1087            return "";
1088        }
1089        return separator + startTime.replace(":00", "").replace(":", ".");
1090    },
1091    getEndTime: function (endTime) {
1092        if (!endTime) {
1093            return "";
1094        }
1095        return "–" + endTime.replace(":00", "").replace(":", ".");
1096    },
1097    // getScene: function (scene: string): string {
1098    //     if (!scene) {
1099    //         return TBA;
1100    //     }
1101    //     return scene;
1102    // },
1103    getTimes: function (post) {
1104        var kl = language_1.language.get(exports.eventService._locale, "Kl");
1105        var times = "";
1106        times += exports.eventService.getStartTime(post.acf["starttid"], " ".concat(kl, " "));
1107        times += exports.eventService.getEndTime(post.acf["sluttid"]);
1108        times += exports.eventService.getStartTime(post.acf["starttid2"], ", ");
1109        times += exports.eventService.getEndTime(post.acf["sluttid2"]);
1110        times += exports.eventService.getStartTime(post.acf["starttid3"], ", ");
1111        times += exports.eventService.getEndTime(post.acf["sluttid3"]);
1112        return times;
1113    },
1114    getDateAndTime: function (post, locale, renderTimes) {
1115        if (!post.acf["datum"]) {
1116            return "";
1117        }
1118        var timeAndPlace = "";
1119        if (post.acf["slutdatum"] !== "" &&
1120            post.acf["slutdatum"] !== undefined) {
1121            var startDay = (0, dayjs_1.default)(post.acf["datum"]).format("D");
1122            var startMonth = (0, dayjs_1.default)(post.acf["datum"]).format("MMMM");
1123            var endDay = (0, dayjs_1.default)(post.acf["slutdatum"]).format("D");
1124            var endMonth = (0, dayjs_1.default)(post.acf["slutdatum"]).format("MMMM");
1125            var year = (0, dayjs_1.default)(post.acf["slutdatum"]).format("YYYY");
1126            if (locale == "sv") {
1127                if (startMonth == endMonth) {
1128                    timeAndPlace += startDay;
1129                }
1130                else {
1131                    timeAndPlace += startDay;
1132                    timeAndPlace += " " + startMonth;
1133                }
1134                if (startDay != endDay) {
1135                    timeAndPlace += "–" + endDay;
1136                }
1137                timeAndPlace += " " + endMonth;
1138                timeAndPlace += " " + year;
1139            }
1140            else {
1141                timeAndPlace += startMonth + " ";
1142                if (startMonth == endMonth) {
1143                    timeAndPlace += startDay;
1144                    if (startDay != endDay) {
1145                        timeAndPlace += "–" + endDay;
1146                    }
1147                }
1148                else {
1149                    timeAndPlace += startDay;
1150                    timeAndPlace += "–" + endMonth;
1151                    timeAndPlace += " " + endDay;
1152                }
1153                timeAndPlace += ", " + year;
1154            }
1155        }
1156        else {
1157            timeAndPlace = (0, dayjs_1.default)(post.acf["datum"]).format("LL");
1158        }
1159        if (renderTimes) {
1160            timeAndPlace += ", " + exports.eventService.getTimes(post);
1161        }
1162        // timeAndPlace +=
1163        //     "<br>" + eventService.getScene(post.acf["scen"]?.post_title);
1164        return timeAndPlace;
1165    },
1166    // setEventTypeDescriptions: function (event: ClandestinoEvent) {
1167    //     switch (event.eventType) {
1168    //         case "festival":
1169    //             let etef =
1170    //                 '<p class="event-type">' + eventTypes.beyond + "</p>";
1171    //             event.dateAndPlace = eventTypes.festival;
1172    //             event.timeAndPlace = etef + eventTypes.festival;
1173    //             console.log("// code block festival");
1174    //             break;
1175    //         case "beyond":
1176    //             let ettb =
1177    //                 '<p class="event-type">' + eventTypes.beyond + "</p>";
1178    //             event.dateAndPlace =
1179    //                 eventTypes.beyond + "<br>" + event.dateAndPlace;
1180    //             event.timeAndPlace = ettb + event.timeAndPlace;
1181    //             console.log("// code block beyond");
1182    //             break;
1183    //         default:
1184    //         // code block
1185    //     }
1186    // },
1187    isDateBeforeToday: function (date) {
1188        return (new Date(date.toDateString()) < new Date(new Date().toDateString()));
1189    },
1190    addArchivedClass: function (event) {
1191        if (!event.startTime) {
1192            //event.extraCssClass += " archived";
1193            return;
1194        }
1195        var archivedClass = exports.eventService.isDateBeforeToday(event.startTime)
1196            ? " archived"
1197            : "";
1198        event.extraCssClass += archivedClass;
1199    },
1200    addSoldOutClass: function (event) {
1201        var soldOutClass = event.soldOut ? " soldout" : "";
1202        event.extraCssClass += soldOutClass;
1203    },
1204    addCancelledClass: function (event) {
1205        var cancelledClass = event.cancelled ? " cancelled" : "";
1206        event.extraCssClass += cancelledClass;
1207    },
1208    load: function () {
1209        return __awaiter(this, void 0, void 0, function () {
1210            return __generator(this, function (_a) {
1211                switch (_a.label) {
1212                    case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() +
1213                            "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(page_1.sitemap[page_1.Locales[exports.eventService._locale]].PROGRAM
1214                                .category, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"))];
1215                    case 1: return [2 /*return*/, _a.sent()];
1216                }
1217            });
1218        });
1219    },
1220    getSingle: function (postId, postSlug) {
1221        return __awaiter(this, void 0, void 0, function () {
1222            var _a, _b;
1223            return __generator(this, function (_c) {
1224                switch (_c.label) {
1225                    case 0:
1226                        _b = (_a = exports.eventService).convert;
1227                        return [4 /*yield*/, contentService_1.contentService.loadSingle(postId, postSlug)];
1228                    case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.eventService._locale])];
1229                }
1230            });
1231        });
1232    },
1233    getSingleFromPreloaded: function (postId, postSlug) {
1234        return __awaiter(this, void 0, void 0, function () {
1235            var query;
1236            return __generator(this, function (_a) {
1237                console.log("eventService.allEvents.length", exports.eventService.allEvents.length);
1238                query = function (event) { return event.id === postId; };
1239                if (postSlug !== undefined) {
1240                    query = function (event) { return event.id === postId; };
1241                }
1242                return [2 /*return*/, exports.eventService.allEvents.find(query)];
1243            });
1244        });
1245    },
1246    shuffle: function (array) {
1247        var _a;
1248        var currentIndex = array.length;
1249        // While there remain elements to shuffle...
1250        while (currentIndex != 0) {
1251            // Pick a remaining element...
1252            var randomIndex = Math.floor(Math.random() * currentIndex);
1253            currentIndex--;
1254            // And swap it with the current element.
1255            _a = __read([
1256                array[randomIndex],
1257                array[currentIndex],
1258            ], 2), array[currentIndex] = _a[0], array[randomIndex] = _a[1];
1259        }
1260        return array;
1261    },
1262    sort: function (events, sortOrder) {
1263        if (sortOrder === void 0) { sortOrder = SortOrder.ASC; }
1264        if (sortOrder === SortOrder.RANDOM) {
1265            return exports.eventService.shuffle(events);
1266        }
1267        events.sort(function (a, b) {
1268            var _a, _b, _c, _d;
1269            return sortOrder === SortOrder.ASC
1270                ? ((_a = a.startTime) === null || _a === void 0 ? void 0 : _a.getTime()) - ((_b = b.startTime) === null || _b === void 0 ? void 0 : _b.getTime())
1271                : ((_c = b.startTime) === null || _c === void 0 ? void 0 : _c.getTime()) - ((_d = a.startTime) === null || _d === void 0 ? void 0 : _d.getTime());
1272        });
1273        return events;
1274    },
1275    sortSticky: function (events, sortOrder) {
1276        if (sortOrder === void 0) { sortOrder = SortOrder.ASC; }
1277        var sticky = exports.eventService.sort(events.filter(function (event) { return event.sticky; }));
1278        var nonSticky = exports.eventService.sort(events.filter(function (event) { return !event.sticky; }), sortOrder);
1279        sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false));
1280        return sticky;
1281    },
1282    sortPastAndFuture: function (events, removeBeforeDate) {
1283        dayjs_1.default.extend(isSameOrBefore_1.default);
1284        dayjs_1.default.extend(isSameOrAfter_1.default);
1285        var future = events.filter(function (_a) {
1286            var startDate = _a.startDate;
1287            return (0, dayjs_1.default)(startDate).isSameOrAfter(removeBeforeDate, "second");
1288        });
1289        var past = events.filter(function (_a) {
1290            var startDate = _a.startDate;
1291            return (0, dayjs_1.default)(startDate).isSameOrBefore(removeBeforeDate, "second");
1292        });
1293        future.push.apply(future, __spreadArray([], __read(past), false));
1294        console.log("count past:" + past.length);
1295        console.log("count future:" + future.length);
1296        return future;
1297    },
1298    filterOld: function (events, removeBeforeDate) {
1299        return __awaiter(this, void 0, void 0, function () {
1300            return __generator(this, function (_a) {
1301                console.log("removeBeforeDate", removeBeforeDate);
1302                dayjs_1.default.extend(isSameOrAfter_1.default);
1303                return [2 /*return*/, events.filter(function (_a) {
1304                        var date = _a.date, endTime = _a.endTime;
1305                        return (0, dayjs_1.default)(endTime || date).isSameOrAfter(removeBeforeDate, "second");
1306                    })];
1307            });
1308        });
1309    },
1310    filterHasValidStartTime: function (events) {
1311        return events.filter(function (event) { return (0, validDate_1.validDate)(event.startTime); });
1312    },
1313    appendContent: function (events) {
1314        events.forEach(function (event) {
1315            if (!exports.eventService.allEvents.find(function (e) { return e.id === event.id; })) {
1316                exports.eventService.allEvents.push(event);
1317            }
1318        });
1319        exports.eventService.sortSticky(exports.eventService.allEvents);
1320    },
1321    get: function (locale) {
1322        return __awaiter(this, void 0, void 0, function () {
1323            var posts, events;
1324            return __generator(this, function (_a) {
1325                switch (_a.label) {
1326                    case 0:
1327                        if (exports.eventService.allEvents.length > 0) {
1328                            return [2 /*return*/, exports.eventService.allEvents];
1329                        }
1330                        return [4 /*yield*/, exports.eventService.load()];
1331                    case 1:
1332                        posts = _a.sent();
1333                        events = [];
1334                        posts.forEach(function (post) {
1335                            events.push(exports.eventService.convert(post, locale));
1336                        });
1337                        events = exports.eventService.sortSticky(events);
1338                        return [2 /*return*/, events];
1339                }
1340            });
1341        });
1342    },
1343    getForSchedule: function (locale) {
1344        return __awaiter(this, void 0, void 0, function () {
1345            var events, eventsHasProps, multiEvents;
1346            return __generator(this, function (_a) {
1347                switch (_a.label) {
1348                    case 0: return [4 /*yield*/, exports.eventService.get(locale)];
1349                    case 1:
1350                        events = _a.sent();
1351                        eventsHasProps = events.filter(function (e) { return e.startDate && e.endTime; });
1352                        multiEvents = eventsHasProps.filter(function (e) { return !(0, dayjs_1.default)(e.startDate).isSame(e.endDate); });
1353                        multiEvents.forEach(function (event) {
1354                            var startTimeCounter = (0, dayjs_1.default)(event.startDate);
1355                            var endTimeCounter = (0, dayjs_1.default)(event.endDate);
1356                            while (startTimeCounter.isSameOrBefore(event.endDate, "day")) {
1357                                if (startTimeCounter.isAfter(event.startDate, "day")) {
1358                                    var clone = structuredClone(event);
1359                                    clone.startDate = startTimeCounter.toDate();
1360                                    clone.endDate = endTimeCounter.toDate();
1361                                    clone.startTime = exports.eventService.addTime((0, dayjs_1.default)(clone.startDate).format("YYYY-MM-DD"), (0, dayjs_1.default)(event.startTime).format("HH:mm"));
1362                                    clone.endTime = exports.eventService.addTime((0, dayjs_1.default)(clone.endDate).format("YYYY-MM-DD"), (0, dayjs_1.default)(event.endTime).format("HH:mm"));
1363                                    eventsHasProps.push(clone);
1364                                }
1365                                startTimeCounter = startTimeCounter.add(1, "day");
1366                                endTimeCounter = endTimeCounter.add(1, "day");
1367                            }
1368                        });
1369                        return [2 /*return*/, eventsHasProps];
1370                }
1371            });
1372        });
1373    },
1374    init: function (locale) {
1375        return __awaiter(this, void 0, void 0, function () {
1376            var _a;
1377            return __generator(this, function (_b) {
1378                switch (_b.label) {
1379                    case 0:
1380                        exports.eventService._locale = locale;
1381                        return [4 /*yield*/, venueService_1.venueService.init(locale)];
1382                    case 1:
1383                        _b.sent();
1384                        exports.eventService.allVenues = venueService_1.venueService.allVenues;
1385                        _a = exports.eventService;
1386                        return [4 /*yield*/, exports.eventService.get(locale)];
1387                    case 2:
1388                        _a.allEvents = _b.sent();
1389                        console.log("eventService init", exports.eventService._locale);
1390                        return [2 /*return*/];
1391                }
1392            });
1393        });
1394    },
1395};
1396
1397},{"./config":4,"./contentService":5,"./eventType":8,"./language":13,"./page":16,"./validDate":23,"./venueService":24,"dayjs":25,"dayjs/plugin/isSameOrAfter":28,"dayjs/plugin/isSameOrBefore":29}],8:[function(require,module,exports){
1398"use strict";
1399var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1400    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1401    return new (P || (P = Promise))(function (resolve, reject) {
1402        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1403        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1404        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1405        step((generator = generator.apply(thisArg, _arguments || [])).next());
1406    });
1407};
1408var __generator = (this && this.__generator) || function (thisArg, body) {
1409    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1410    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
1411    function verb(n) { return function (v) { return step([n, v]); }; }
1412    function step(op) {
1413        if (f) throw new TypeError("Generator is already executing.");
1414        while (g && (g = 0, op[0] && (_ = 0)), _) try {
1415            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1416            if (y = 0, t) op = [op[0] & 2, t.value];
1417            switch (op[0]) {
1418                case 0: case 1: t = op; break;
1419                case 4: _.label++; return { value: op[1], done: false };
1420                case 5: _.label++; y = op[1]; op = [0]; continue;
1421                case 7: op = _.ops.pop(); _.trys.pop(); continue;
1422                default:
1423                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
1424                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
1425                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
1426                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
1427                    if (t[2]) _.ops.pop();
1428                    _.trys.pop(); continue;
1429            }
1430            op = body.call(thisArg, _);
1431        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
1432        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
1433    }
1434};
1435Object.defineProperty(exports, "__esModule", { value: true });
1436exports.eventType = exports.EventTypes = void 0;
1437var language_1 = require("./language");
1438var EventTypes;
1439(function (EventTypes) {
1440    EventTypes["FESTIVAL"] = "festival";
1441    EventTypes["BEYOND"] = "beyond";
1442    EventTypes["FESTIVAL_AND_BEYOND"] = "festival_and_beyond";
1443    EventTypes["TALKS"] = "talks";
1444    EventTypes["PODS"] = "pods";
1445})(EventTypes = exports.EventTypes || (exports.EventTypes = {}));
1446exports.eventType = {
1447    eventTypes: [],
1448    getEventTypeDescription: function (value) {
1449        return exports.eventType.eventTypes.find(function (et) { return et.value === value; })
1450            .description;
1451    },
1452    getKeyByValue: function (obj, value) {
1453        return Object.keys(obj).find(function (key) { return obj[key] === value; });
1454    },
1455    init: function (locale) {
1456        return __awaiter(this, void 0, void 0, function () {
1457            var festival, beyond, festival_and_beyond, talks, pods;
1458            return __generator(this, function (_a) {
1459                festival = {
1460                    value: "festival",
1461                    description: language_1.language.get(locale, "ClandestinoFestival"),
1462                };
1463                beyond = {
1464                    value: "beyond",
1465                    description: "Clandestino & Beyond",
1466                };
1467                festival_and_beyond = {
1468                    value: "festival_and_beyond",
1469                    description: "Clandestino Festival & Beyond",
1470                };
1471                talks = {
1472                    value: "talks",
1473                    description: "Clandestino Talks",
1474                };
1475                pods = {
1476                    value: "pods",
1477                    description: "Clandestino Podcast",
1478                };
1479                exports.eventType.eventTypes.push(festival);
1480                exports.eventType.eventTypes.push(beyond);
1481                exports.eventType.eventTypes.push(festival_and_beyond);
1482                exports.eventType.eventTypes.push(talks);
1483                exports.eventType.eventTypes.push(pods);
1484                return [2 /*return*/];
1485            });
1486        });
1487    },
1488};
1489
1490},{"./language":13}],9:[function(require,module,exports){
1491"use strict";
1492var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1493    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1494    return new (P || (P = Promise))(function (resolve, reject) {
1495        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1496        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1497        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1498        step((generator = generator.apply(thisArg, _arguments || [])).next());
1499    });
1500};
1501var __generator = (this && this.__generator) || function (thisArg, body) {
1502    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1503    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
1504    function verb(n) { return function (v) { return step([n, v]); }; }
1505    function step(op) {
1506        if (f) throw new TypeError("Generator is already executing.");
1507        while (g && (g = 0, op[0] && (_ = 0)), _) try {
1508            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1509            if (y = 0, t) op = [op[0] & 2, t.value];
1510            switch (op[0]) {
1511                case 0: case 1: t = op; break;
1512                case 4: _.label++; return { value: op[1], done: false };
1513                case 5: _.label++; y = op[1]; op = [0]; continue;
1514                case 7: op = _.ops.pop(); _.trys.pop(); continue;
1515                default:
1516                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
1517                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
1518                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
1519                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
1520                    if (t[2]) _.ops.pop();
1521                    _.trys.pop(); continue;
1522            }
1523            op = body.call(thisArg, _);
1524        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
1525        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
1526    }
1527};
1528var __values = (this && this.__values) || function(o) {
1529    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
1530    if (m) return m.call(o);
1531    if (o && typeof o.length === "number") return {
1532        next: function () {
1533            if (o && i >= o.length) o = void 0;
1534            return { value: o && o[i++], done: !o };
1535        }
1536    };
1537    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
1538};
1539Object.defineProperty(exports, "__esModule", { value: true });
1540exports.externalEventService = void 0;
1541var config_1 = require("./config");
1542var eventService_1 = require("./eventService");
1543exports.externalEventService = {
1544    _locale: config_1.config.defaultLang,
1545    load: function (source) {
1546        return __awaiter(this, void 0, void 0, function () {
1547            return __generator(this, function (_a) {
1548                switch (_a.label) {
1549                    case 0: return [4 /*yield*/, $.get(source)];
1550                    case 1: return [2 /*return*/, _a.sent()];
1551                }
1552            });
1553        });
1554    },
1555    appendPosts: function (posts, append) {
1556        append.forEach(function (post) {
1557            posts.push(post);
1558        });
1559        return posts;
1560    },
1561    setExternal: function (event, link) {
1562        //event.backgroundColor = "#001100";
1563        event.extraCssClass = "external";
1564        event.link = link;
1565    },
1566    get: function (source, locale) {
1567        return __awaiter(this, void 0, void 0, function () {
1568            var posts, events, posts_1, posts_1_1, post, event_1;
1569            var e_1, _a;
1570            return __generator(this, function (_b) {
1571                switch (_b.label) {
1572                    case 0: return [4 /*yield*/, exports.externalEventService.load(source)];
1573                    case 1:
1574                        posts = _b.sent();
1575                        events = [];
1576                        try {
1577                            for (posts_1 = __values(posts), posts_1_1 = posts_1.next(); !posts_1_1.done; posts_1_1 = posts_1.next()) {
1578                                post = posts_1_1.value;
1579                                event_1 = eventService_1.eventService.convert(post, locale);
1580                                exports.externalEventService.setExternal(event_1, post.link);
1581                                events.push(event_1);
1582                            }
1583                        }
1584                        catch (e_1_1) { e_1 = { error: e_1_1 }; }
1585                        finally {
1586                            try {
1587                                if (posts_1_1 && !posts_1_1.done && (_a = posts_1.return)) _a.call(posts_1);
1588                            }
1589                            finally { if (e_1) throw e_1.error; }
1590                        }
1591                        //events = eventService.sortSticky(events);
1592                        return [2 /*return*/, events];
1593                }
1594            });
1595        });
1596    },
1597    getForSorces: function (locale) {
1598        return __awaiter(this, void 0, void 0, function () {
1599            var events, _a, _b, source, _c, _d, e_2_1;
1600            var e_2, _e;
1601            return __generator(this, function (_f) {
1602                switch (_f.label) {
1603                    case 0:
1604                        events = [];
1605                        _f.label = 1;
1606                    case 1:
1607                        _f.trys.push([1, 6, 7, 8]);
1608                        _a = __values(config_1.config.externalEventSources), _b = _a.next();
1609                        _f.label = 2;
1610                    case 2:
1611                        if (!!_b.done) return [3 /*break*/, 5];
1612                        source = _b.value;
1613                        _d = (_c = events).concat;
1614                        return [4 /*yield*/, exports.externalEventService.get(source, locale)];
1615                    case 3:
1616                        events = _d.apply(_c, [_f.sent()]);
1617                        _f.label = 4;
1618                    case 4:
1619                        _b = _a.next();
1620                        return [3 /*break*/, 2];
1621                    case 5: return [3 /*break*/, 8];
1622                    case 6:
1623                        e_2_1 = _f.sent();
1624                        e_2 = { error: e_2_1 };
1625                        return [3 /*break*/, 8];
1626                    case 7:
1627                        try {
1628                            if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
1629                        }
1630                        finally { if (e_2) throw e_2.error; }
1631                        return [7 /*endfinally*/];
1632                    case 8: return [2 /*return*/, events];
1633                }
1634            });
1635        });
1636    },
1637};
1638
1639},{"./config":4,"./eventService":7}],10:[function(require,module,exports){
1640"use strict";
1641var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1642    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1643    return new (P || (P = Promise))(function (resolve, reject) {
1644        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1645        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1646        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1647        step((generator = generator.apply(thisArg, _arguments || [])).next());
1648    });
1649};
1650var __generator = (this && this.__generator) || function (thisArg, body) {
1651    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1652    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
1653    function verb(n) { return function (v) { return step([n, v]); }; }
1654    function step(op) {
1655        if (f) throw new TypeError("Generator is already executing.");
1656        while (g && (g = 0, op[0] && (_ = 0)), _) try {
1657            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1658            if (y = 0, t) op = [op[0] & 2, t.value];
1659            switch (op[0]) {
1660                case 0: case 1: t = op; break;
1661                case 4: _.label++; return { value: op[1], done: false };
1662                case 5: _.label++; y = op[1]; op = [0]; continue;
1663                case 7: op = _.ops.pop(); _.trys.pop(); continue;
1664                default:
1665                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
1666                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
1667                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
1668                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
1669                    if (t[2]) _.ops.pop();
1670                    _.trys.pop(); continue;
1671            }
1672            op = body.call(thisArg, _);
1673        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
1674        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
1675    }
1676};
1677var __read = (this && this.__read) || function (o, n) {
1678    var m = typeof Symbol === "function" && o[Symbol.iterator];
1679    if (!m) return o;
1680    var i = m.call(o), r, ar = [], e;
1681    try {
1682        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
1683    }
1684    catch (error) { e = { error: error }; }
1685    finally {
1686        try {
1687            if (r && !r.done && (m = i["return"])) m.call(i);
1688        }
1689        finally { if (e) throw e.error; }
1690    }
1691    return ar;
1692};
1693var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
1694    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1695        if (ar || !(i in from)) {
1696            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
1697            ar[i] = from[i];
1698        }
1699    }
1700    return to.concat(ar || Array.prototype.slice.call(from));
1701};
1702var __importDefault = (this && this.__importDefault) || function (mod) {
1703    return (mod && mod.__esModule) ? mod : { "default": mod };
1704};
1705Object.defineProperty(exports, "__esModule", { value: true });
1706exports.festivalpass = void 0;
1707var config_1 = require("./config");
1708var eventService_1 = require("./eventService");
1709var language_1 = require("./language");
1710var dayjs_1 = __importDefault(require("dayjs"));
1711var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter"));
1712var venueService_1 = require("./venueService");
1713var contentService_1 = require("./contentService");
1714exports.festivalpass = {
1715    _locale: config_1.config.defaultLang,
1716    renderPassLink: function (pass, selector) {
1717        if (!pass.sticky) {
1718            pass.title = language_1.language.get(exports.festivalpass._locale, "BiljettPl");
1719        }
1720        var template = "<a id=\"".concat(pass.id, "\" href=\"").concat(pass.ticket, "\" class=\"festivalpass\" title=\"").concat(pass.title, "\" rel=\"bookmark\" target=\"_blank\">");
1721        template += "".concat(pass.title);
1722        template += "</a>";
1723        $(selector).append(template);
1724    },
1725    renderPass: function (pass, selector) {
1726        var template = "<span id=\"".concat(pass.id, "\" class=\"festivalpass\" title=\"").concat(pass.title, "\">");
1727        template += "".concat(pass.title);
1728        template += "</span>";
1729        $(selector).append(template);
1730    },
1731    parsePass: function (pass, selector) {
1732        pass.ticket == ""
1733            ? exports.festivalpass.renderPass(pass, selector)
1734            : exports.festivalpass.renderPassLink(pass, selector);
1735    },
1736    parse: function (passes, eventPasses, selector, addPipe) {
1737        passes.forEach(function (pass) {
1738            //pass.ticket!=='' &&
1739            if (eventPasses.includes(pass.id)) {
1740                // Check if already appended
1741                if ($(selector).find("#".concat(pass.id)).length) {
1742                    return;
1743                }
1744                if (addPipe) {
1745                    $(selector).append(" | ");
1746                    addPipe = false;
1747                }
1748                exports.festivalpass.parsePass(pass, selector);
1749                if (passes.length > 1) {
1750                    addPipe = true;
1751                }
1752            }
1753        });
1754    },
1755    translatePasses: function (passes, locale) {
1756        passes.forEach(function (pass) {
1757            var _a, _b, _c;
1758            if ((_a = pass.title) === null || _a === void 0 ? void 0 : _a.includes("Gold")) {
1759                if (locale === "sv") {
1760                    pass.title = language_1.language.get(locale, "Goldpass");
1761                }
1762                if (pass.venueFormatted === "tba") {
1763                    pass.venueFormatted = "";
1764                }
1765                pass.dateFormatted = "&nbsp;";
1766            }
1767            if ((_b = pass.title) === null || _b === void 0 ? void 0 : _b.includes("Festival Pass")) {
1768                if (locale === "sv") {
1769                    pass.title = language_1.language.get(locale, "Festivalpass");
1770                }
1771            }
1772            if ((_c = pass.title) === null || _c === void 0 ? void 0 : _c.includes("Fri entré – Anmälan krävs")) {
1773                if (locale === "en") {
1774                    pass.title = language_1.language.get(locale, "FreeAdmissionRegistrationRequired");
1775                }
1776            }
1777        });
1778    },
1779    loadPasses: function () {
1780        return __awaiter(this, void 0, void 0, function () {
1781            var url;
1782            return __generator(this, function (_a) {
1783                switch (_a.label) {
1784                    case 0:
1785                        url = config_1.config.getRestUrl() +
1786                            "festivalpass?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC");
1787                        return [4 /*yield*/, $.get(url)];
1788                    case 1: return [2 /*return*/, _a.sent()];
1789                }
1790            });
1791        });
1792    },
1793    sortByViewOrder: function (passes) {
1794        passes.sort(function (a, b) {
1795            return a.viewOrder - b.viewOrder;
1796        });
1797        return passes;
1798    },
1799    sortByDate: function (passes) {
1800        passes.sort(function (a, b) {
1801            var eventA = (0, dayjs_1.default)(a.date);
1802            var eventB = (0, dayjs_1.default)(b.date);
1803            return eventA.toDate().getTime() - eventB.toDate().getTime();
1804        });
1805        return passes;
1806    },
1807    sortBySticky: function (passes) {
1808        return __awaiter(this, void 0, void 0, function () {
1809            var sticky, nonSticky;
1810            return __generator(this, function (_a) {
1811                sticky = exports.festivalpass.sortByViewOrder(passes.filter(function (pass) { return pass.sticky; }));
1812                nonSticky = exports.festivalpass.sortByDate(passes.filter(function (pass) { return !pass.sticky; }));
1813                sticky.push.apply(sticky, __spreadArray([], __read(nonSticky), false));
1814                return [2 /*return*/, sticky];
1815            });
1816        });
1817    },
1818    filterOld: function (passes, removeBeforeDate) {
1819        return __awaiter(this, void 0, void 0, function () {
1820            return __generator(this, function (_a) {
1821                console.log("removeBeforeDate", removeBeforeDate);
1822                dayjs_1.default.extend(isSameOrAfter_1.default);
1823                return [2 /*return*/, passes.filter(function (_a) {
1824                        var date = _a.date, endDate = _a.endDate;
1825                        return (0, dayjs_1.default)(endDate || date).isSameOrAfter(removeBeforeDate, "second");
1826                    })];
1827            });
1828        });
1829    },
1830    convert: function (post, locale) {
1831        // let venue = eventService.allVenues.find(
1832        //     (v) => v.id === post.acf.scen.ID
1833        // );
1834        var venue = venueService_1.venueService.getVenueOrTBA(post);
1835        var venueFormatted = venue.title;
1836        var pass = {
1837            id: post.id,
1838            title: contentService_1.contentService.breakLines(post.title.rendered),
1839            date: post.acf.datum,
1840            endDate: post.acf.slutdatum,
1841            overTitle: post.acf.overrubrik,
1842            eventType: post.acf.event_typ,
1843            venueFormatted: venueFormatted,
1844            backgroundColor: post.acf.bakgrundsfarg || (venue === null || venue === void 0 ? void 0 : venue.color) || config_1.config.defaultColor,
1845            ticket: post.acf.biljett,
1846            dateFormatted: eventService_1.eventService.getDateAndTime(post, locale, false),
1847            dateTimeFormatted: eventService_1.eventService.getDateAndTime(post, locale, true),
1848            viewOrder: post.acf.ordning,
1849            sticky: post.sticky || post.acf.klistrad || false,
1850        };
1851        return pass;
1852    },
1853    getPasses: function (locale) {
1854        return __awaiter(this, void 0, void 0, function () {
1855            var postPasses, passes;
1856            return __generator(this, function (_a) {
1857                switch (_a.label) {
1858                    case 0: return [4 /*yield*/, exports.festivalpass.loadPasses()];
1859                    case 1:
1860                        postPasses = _a.sent();
1861                        passes = [];
1862                        postPasses.forEach(function (ticket) {
1863                            var pass = exports.festivalpass.convert(ticket, locale);
1864                            passes.push(pass);
1865                        });
1866                        exports.festivalpass.sortByViewOrder(passes);
1867                        exports.festivalpass.translatePasses(passes, locale);
1868                        return [2 /*return*/, passes];
1869                }
1870            });
1871        });
1872    },
1873    load: function (eventPasses, selector, addPipe, tickets, locale) {
1874        return __awaiter(this, void 0, void 0, function () {
1875            return __generator(this, function (_a) {
1876                switch (_a.label) {
1877                    case 0:
1878                        exports.festivalpass._locale = locale;
1879                        if (!(tickets.length === 0)) return [3 /*break*/, 2];
1880                        return [4 /*yield*/, exports.festivalpass.getPasses(locale)];
1881                    case 1:
1882                        tickets = _a.sent();
1883                        _a.label = 2;
1884                    case 2:
1885                        exports.festivalpass.parse(tickets, eventPasses, selector, addPipe);
1886                        return [2 /*return*/];
1887                }
1888            });
1889        });
1890    },
1891};
1892
1893},{"./config":4,"./contentService":5,"./eventService":7,"./language":13,"./venueService":24,"dayjs":25,"dayjs/plugin/isSameOrAfter":28}],11:[function(require,module,exports){
1894"use strict";
1895var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
1896    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1897    return new (P || (P = Promise))(function (resolve, reject) {
1898        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1899        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1900        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1901        step((generator = generator.apply(thisArg, _arguments || [])).next());
1902    });
1903};
1904var __generator = (this && this.__generator) || function (thisArg, body) {
1905    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1906    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
1907    function verb(n) { return function (v) { return step([n, v]); }; }
1908    function step(op) {
1909        if (f) throw new TypeError("Generator is already executing.");
1910        while (g && (g = 0, op[0] && (_ = 0)), _) try {
1911            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1912            if (y = 0, t) op = [op[0] & 2, t.value];
1913            switch (op[0]) {
1914                case 0: case 1: t = op; break;
1915                case 4: _.label++; return { value: op[1], done: false };
1916                case 5: _.label++; y = op[1]; op = [0]; continue;
1917                case 7: op = _.ops.pop(); _.trys.pop(); continue;
1918                default:
1919                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
1920                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
1921                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
1922                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
1923                    if (t[2]) _.ops.pop();
1924                    _.trys.pop(); continue;
1925            }
1926            op = body.call(thisArg, _);
1927        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
1928        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
1929    }
1930};
1931var __values = (this && this.__values) || function(o) {
1932    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
1933    if (m) return m.call(o);
1934    if (o && typeof o.length === "number") return {
1935        next: function () {
1936            if (o && i >= o.length) o = void 0;
1937            return { value: o && o[i++], done: !o };
1938        }
1939    };
1940    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
1941};
1942Object.defineProperty(exports, "__esModule", { value: true });
1943exports.historical = void 0;
1944var config_1 = require("./config");
1945var language_1 = require("./language");
1946exports.historical = {
1947    _locale: config_1.config.defaultLang,
1948    addLetterClasses: function () {
1949        return __awaiter(this, void 0, void 0, function () {
1950            return __generator(this, function (_a) {
1951                $(".wp-block-list").each(function (index) {
1952                    var letter = $(this).siblings("p")[index];
1953                    $(letter).addClass("letter");
1954                    $(letter).addClass("letter" + index);
1955                });
1956                return [2 /*return*/];
1957            });
1958        });
1959    },
1960    createSearchInput: function () {
1961        return __awaiter(this, void 0, void 0, function () {
1962            var label, s;
1963            return __generator(this, function (_a) {
1964                label = language_1.language.get(exports.historical._locale, "SearchAct");
1965                s = $("<input id=\"search\" placeholder=\"".concat(label, "\" />"));
1966                $(".single-description").prepend(s);
1967                return [2 /*return*/];
1968            });
1969        });
1970    },
1971    handleSearchAct: function () {
1972        return __awaiter(this, void 0, void 0, function () {
1973            return __generator(this, function (_a) {
1974                $("input#search").on("input", function () {
1975                    $("select#year").val("-1");
1976                    //console.log((this as HTMLInputElement).value);
1977                    var searchTerm = this.value.toLowerCase();
1978                    $(".wp-block-list").each(function (index) {
1979                        var letter = $(this).siblings("p")[index];
1980                        //$(letter).addClass("letter");
1981                        //$(letter).addClass("letter" + index);
1982                        var hideLetter = true;
1983                        $(this)
1984                            .children()
1985                            .each(function (index) {
1986                            var text = $(this).text().toLowerCase();
1987                            var hide = true;
1988                            if (text.includes(searchTerm) && hide) {
1989                                hide = false;
1990                            }
1991                            if (hide && searchTerm != "") {
1992                                //console.log("hide:" + $(this));
1993                                $(this).addClass("is-hidden");
1994                            }
1995                            else {
1996                                $(this).removeClass("is-hidden");
1997                                if (hideLetter) {
1998                                    hideLetter = false;
1999                                }
2000                            }
2001                        });
2002                        if (hideLetter) {
2003                            $(letter).addClass("is-hidden");
2004                        }
2005                        else {
2006                            $(letter).removeClass("is-hidden");
2007                        }
2008                    });
2009                });
2010                return [2 /*return*/];
2011            });
2012        });
2013    },
2014    sortYears: function (years) {
2015        return __awaiter(this, void 0, void 0, function () {
2016            return __generator(this, function (_a) {
2017                return [2 /*return*/, years.sort()];
2018            });
2019        });
2020    },
2021    createYearDropdownList: function (years) {
2022        return __awaiter(this, void 0, void 0, function () {
2023            var label, s, years_1, years_1_1, val;
2024            var e_1, _a;
2025            return __generator(this, function (_b) {
2026                label = language_1.language.get(exports.historical._locale, "SelectYear");
2027                s = $('<select id="year" />');
2028                $("<option />", { value: "-1", text: label }).appendTo(s);
2029                try {
2030                    for (years_1 = __values(years), years_1_1 = years_1.next(); !years_1_1.done; years_1_1 = years_1.next()) {
2031                        val = years_1_1.value;
2032                        $("<option />", { value: val, text: val }).appendTo(s);
2033                    }
2034                }
2035                catch (e_1_1) { e_1 = { error: e_1_1 }; }
2036                finally {
2037                    try {
2038                        if (years_1_1 && !years_1_1.done && (_a = years_1.return)) _a.call(years_1);
2039                    }
2040                    finally { if (e_1) throw e_1.error; }
2041                }
2042                //s.prepend(".single-description"); // or wherever it should be
2043                $(".single-description").prepend(s);
2044                return [2 /*return*/];
2045            });
2046        });
2047    },
2048    handleSelectYear: function () {
2049        return __awaiter(this, void 0, void 0, function () {
2050            return __generator(this, function (_a) {
2051                $("select#year").on("change", function () {
2052                    $("input#search").val("");
2053                    //console.log(this.value);
2054                    var selectedYear = parseInt(this.value);
2055                    $(".wp-block-list").each(function (index) {
2056                        var letter = $(this).siblings("p")[index];
2057                        //$(letter).addClass("letter");
2058                        //$(letter).addClass("letter" + index);
2059                        var hideLetter = true;
2060                        $(this)
2061                            .children()
2062                            .each(function (index) {
2063                            var e_2, _a;
2064                            var text = $(this).text();
2065                            //var res = text.matchAll(/(?:(?:19|20)[0-9]{2})/);
2066                            var hide = true;
2067                            var regex = /(?:(?:19|20)[0-9]{2})/g;
2068                            try {
2069                                for (var _b = __values(text.matchAll(regex)), _c = _b.next(); !_c.done; _c = _b.next()) {
2070                                    var match = _c.value;
2071                                    //console.log(match[0]);
2072                                    var year = parseInt(match[0]);
2073                                    if (year === selectedYear && hide) {
2074                                        hide = false;
2075                                    }
2076                                }
2077                            }
2078                            catch (e_2_1) { e_2 = { error: e_2_1 }; }
2079                            finally {
2080                                try {
2081                                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
2082                                }
2083                                finally { if (e_2) throw e_2.error; }
2084                            }
2085                            if (hide && selectedYear != -1) {
2086                                //console.log("hide:" + $(this));
2087                                $(this).addClass("is-hidden");
2088                            }
2089                            else {
2090                                $(this).removeClass("is-hidden");
2091                                if (hideLetter) {
2092                                    hideLetter = false;
2093                                }
2094                            }
2095                        });
2096                        if (hideLetter) {
2097                            $(letter).addClass("is-hidden");
2098                        }
2099                        else {
2100                            $(letter).removeClass("is-hidden");
2101                        }
2102                    });
2103                });
2104                return [2 /*return*/];
2105            });
2106        });
2107    },
2108    parseYears: function () {
2109        return __awaiter(this, void 0, void 0, function () {
2110            var years, _a, _b;
2111            return __generator(this, function (_c) {
2112                switch (_c.label) {
2113                    case 0:
2114                        years = [];
2115                        $(".wp-block-list li").each(function (index) {
2116                            var e_3, _a;
2117                            //console.log(index + ": " + $(this).text());
2118                            var text = $(this).text();
2119                            //var res = text.matchAll(/(?:(?:19|20)[0-9]{2})/);
2120                            var regex = /(?:(?:19|20)[0-9]{2})/g;
2121                            try {
2122                                for (var _b = __values(text.matchAll(regex)), _c = _b.next(); !_c.done; _c = _b.next()) {
2123                                    var match = _c.value;
2124                                    //console.log(match[0]);
2125                                    var year = parseInt(match[0]);
2126                                    if (year === 2000) {
2127                                        break;
2128                                    }
2129                                    if (!years.includes(year))
2130                                        years.push(year);
2131                                }
2132                            }
2133                            catch (e_3_1) { e_3 = { error: e_3_1 }; }
2134                            finally {
2135                                try {
2136                                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
2137                                }
2138                                finally { if (e_3) throw e_3.error; }
2139                            }
2140                            //console.log(res);
2141                        });
2142                        _b = (_a = exports.historical).createYearDropdownList;
2143                        return [4 /*yield*/, exports.historical.sortYears(years)];
2144                    case 1:
2145                        _b.apply(_a, [_c.sent()]);
2146                        exports.historical.handleSelectYear();
2147                        return [2 /*return*/];
2148                }
2149            });
2150        });
2151    },
2152    init: function (locale, currentPage) {
2153        return __awaiter(this, void 0, void 0, function () {
2154            return __generator(this, function (_a) {
2155                switch (_a.label) {
2156                    case 0:
2157                        exports.historical._locale = locale;
2158                        console.log("historical init", exports.historical._locale);
2159                        return [4 /*yield*/, exports.historical.addLetterClasses()];
2160                    case 1:
2161                        _a.sent();
2162                        return [4 /*yield*/, exports.historical.parseYears()];
2163                    case 2:
2164                        _a.sent();
2165                        return [4 /*yield*/, exports.historical.createSearchInput()];
2166                    case 3:
2167                        _a.sent();
2168                        return [4 /*yield*/, exports.historical.handleSearchAct()];
2169                    case 4:
2170                        _a.sent();
2171                        return [2 /*return*/];
2172                }
2173            });
2174        });
2175    },
2176};
2177
2178},{"./config":4,"./language":13}],12:[function(require,module,exports){
2179"use strict";
2180var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2181    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2182    return new (P || (P = Promise))(function (resolve, reject) {
2183        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2184        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2185        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2186        step((generator = generator.apply(thisArg, _arguments || [])).next());
2187    });
2188};
2189var __generator = (this && this.__generator) || function (thisArg, body) {
2190    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2191    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2192    function verb(n) { return function (v) { return step([n, v]); }; }
2193    function step(op) {
2194        if (f) throw new TypeError("Generator is already executing.");
2195        while (g && (g = 0, op[0] && (_ = 0)), _) try {
2196            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2197            if (y = 0, t) op = [op[0] & 2, t.value];
2198            switch (op[0]) {
2199                case 0: case 1: t = op; break;
2200                case 4: _.label++; return { value: op[1], done: false };
2201                case 5: _.label++; y = op[1]; op = [0]; continue;
2202                case 7: op = _.ops.pop(); _.trys.pop(); continue;
2203                default:
2204                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2205                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2206                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2207                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2208                    if (t[2]) _.ops.pop();
2209                    _.trys.pop(); continue;
2210            }
2211            op = body.call(thisArg, _);
2212        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2213        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2214    }
2215};
2216Object.defineProperty(exports, "__esModule", { value: true });
2217exports.info = void 0;
2218var config_1 = require("./config");
2219var site_1 = require("./site");
2220var contentService_1 = require("./contentService");
2221var page_1 = require("./page");
2222var venueService_1 = require("./venueService");
2223var historical_1 = require("./historical");
2224exports.info = {
2225    _locale: config_1.config.defaultLang,
2226    allContents: [],
2227    renderPost: function (content) {
2228        var link = "".concat(config_1.config.siteFolder, "info/").concat(content.slug, "/");
2229        var dataFormat = "";
2230        if (content.lank) {
2231            link = content.lank;
2232            dataFormat = " data-format=\"link\"";
2233        }
2234        var template = "<a href=\"".concat(link, "\" data-id=\"").concat(content.id, "\" data-slug=\"info/").concat(content.slug, "\"").concat(dataFormat, " class=\"single-box info ").concat(content.slug, "\" title=\"").concat(content.title, "\" rel=\"bookmark\">\n            <div class=\"caption-text\" id=\"0\"><h2>").concat(content.title, "</h2></div>\n            </a>");
2235        $("#content").append(template);
2236    },
2237    parse: function (contents, locale, currentPage) {
2238        contents.forEach(function (event) {
2239            exports.info.renderPost(event);
2240        });
2241        exports.info.listenBoxes(locale, currentPage);
2242    },
2243    load: function () {
2244        return __awaiter(this, void 0, void 0, function () {
2245            return __generator(this, function (_a) {
2246                switch (_a.label) {
2247                    case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() +
2248                            "info?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=meta_value_num&filter[meta_key]=ordning&filter[order]=ASC"))];
2249                    case 1: return [2 /*return*/, _a.sent()];
2250                }
2251            });
2252        });
2253    },
2254    loadSingle: function (postId, postSlug) {
2255        return __awaiter(this, void 0, void 0, function () {
2256            var query, result;
2257            return __generator(this, function (_a) {
2258                switch (_a.label) {
2259                    case 0:
2260                        query = "";
2261                        if (postId) {
2262                            query += postId;
2263                        }
2264                        else {
2265                            query += "?slug=" + postSlug;
2266                        }
2267                        return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "info/" + query)];
2268                    case 1:
2269                        result = _a.sent();
2270                        if (result.length === 1) {
2271                            // By slug returns array
2272                            return [2 /*return*/, result[0]];
2273                        }
2274                        return [2 /*return*/, result];
2275                }
2276            });
2277        });
2278    },
2279    listenBoxes: function (locale, currentPage) {
2280        console.log("info listenBoxes");
2281        $("a.single-box").click(function (e) {
2282            return __awaiter(this, void 0, void 0, function () {
2283                var postFormat, slug;
2284                return __generator(this, function (_a) {
2285                    switch (_a.label) {
2286                        case 0:
2287                            postFormat = $(this).data("format");
2288                            slug = $(this).data("slug");
2289                            if ("link" === postFormat) {
2290                                return [2 /*return*/];
2291                            }
2292                            e.stopPropagation();
2293                            e.preventDefault();
2294                            return [4 /*yield*/, site_1.site.handleClick(this, "info")];
2295                        case 1:
2296                            _a.sent();
2297                            if (slug.includes("previous")) {
2298                                // Hackish
2299                                historical_1.historical.init(locale, currentPage);
2300                            }
2301                            return [2 /*return*/];
2302                    }
2303                });
2304            });
2305        });
2306    },
2307    get: function (locale) {
2308        return __awaiter(this, void 0, void 0, function () {
2309            var posts, contents;
2310            return __generator(this, function (_a) {
2311                switch (_a.label) {
2312                    case 0:
2313                        if (exports.info.allContents.length > 0) {
2314                            return [2 /*return*/, exports.info.allContents];
2315                        }
2316                        return [4 /*yield*/, exports.info.load()];
2317                    case 1:
2318                        posts = _a.sent();
2319                        contents = [];
2320                        posts.forEach(function (post) {
2321                            contents.push(contentService_1.contentService.convert(post, locale));
2322                        });
2323                        return [2 /*return*/, contents];
2324                }
2325            });
2326        });
2327    },
2328    addVenues: function (content) {
2329        return __awaiter(this, void 0, void 0, function () {
2330            return __generator(this, function (_a) {
2331                switch (_a.label) {
2332                    case 0:
2333                        console.log("info.addVenues ".concat(content.slug));
2334                        if (!(content.slug ===
2335                            page_1.sitemap[page_1.Locales[exports.info._locale]].VENUES.singleUrl)) return [3 /*break*/, 2];
2336                        return [4 /*yield*/, venueService_1.venueService.init(exports.info._locale)];
2337                    case 1:
2338                        _a.sent();
2339                        venueService_1.venueService.allVenues.forEach(function (venue) {
2340                            venueService_1.venueService.append(content, venue);
2341                        });
2342                        _a.label = 2;
2343                    case 2: return [2 /*return*/, content];
2344                }
2345            });
2346        });
2347    },
2348    getSingle: function (postId, postSlug) {
2349        return __awaiter(this, void 0, void 0, function () {
2350            var _a, _b, _c, _d;
2351            return __generator(this, function (_e) {
2352                switch (_e.label) {
2353                    case 0:
2354                        console.log("info.getSingle ".concat(postId, " ").concat(postSlug));
2355                        _b = (_a = exports.info).addVenues;
2356                        _d = (_c = contentService_1.contentService).convert;
2357                        return [4 /*yield*/, exports.info.loadSingle(postId, postSlug)];
2358                    case 1: return [2 /*return*/, _b.apply(_a, [_d.apply(_c, [_e.sent(), exports.info._locale])])];
2359                }
2360            });
2361        });
2362    },
2363    init: function (locale, currentPage) {
2364        return __awaiter(this, void 0, void 0, function () {
2365            var _a, content;
2366            return __generator(this, function (_b) {
2367                switch (_b.label) {
2368                    case 0:
2369                        exports.info._locale = locale;
2370                        _a = exports.info;
2371                        return [4 /*yield*/, exports.info.get(locale)];
2372                    case 1:
2373                        _a.allContents = _b.sent();
2374                        exports.info.parse(exports.info.allContents, locale, currentPage);
2375                        console.log("info init", exports.info._locale);
2376                        if (!currentPage.singleUrl) return [3 /*break*/, 5];
2377                        return [4 /*yield*/, exports.info.getSingle(null, currentPage.singleUrl)];
2378                    case 2:
2379                        content = (_b.sent());
2380                        return [4 /*yield*/, site_1.site.loadSingle(content.id, currentPage.singleUrl, "info")];
2381                    case 3:
2382                        _b.sent();
2383                        if (!(currentPage.subPage === page_1.Pages.HISTORICAL)) return [3 /*break*/, 5];
2384                        return [4 /*yield*/, historical_1.historical.init(locale, currentPage)];
2385                    case 4:
2386                        _b.sent();
2387                        _b.label = 5;
2388                    case 5: return [2 /*return*/];
2389                }
2390            });
2391        });
2392    },
2393};
2394
2395},{"./config":4,"./contentService":5,"./historical":11,"./page":16,"./site":21,"./venueService":24}],13:[function(require,module,exports){
2396"use strict";
2397Object.defineProperty(exports, "__esModule", { value: true });
2398exports.language = void 0;
2399var translation = {
2400    sv: {
2401        Biljett: "Biljett",
2402        BiljettPl: "Biljetter",
2403        Doors: "Dörrar öppnar",
2404        Opens: "Öppnar",
2405        SoldOut: "Slutsåld",
2406        Cancelled: "Inställd",
2407        SelectYear: "Välj år",
2408        SearchAct: "Sök akt",
2409        //ClandestinoFestival: "Clandestino Festival<br>29 maj–1 juni 2025",
2410        ClandestinoFestival: "Clandestino Festival",
2411        Goldpass: "Guldpass",
2412        Festivalpass: "Festivalpass",
2413        Kl: "kl",
2414        FreeAdmissionRegistrationRequired: "Fri entré – Anmälan krävs"
2415    },
2416    en: {
2417        Biljett: "Ticket",
2418        BiljettPl: "Tickets",
2419        Doors: "Doors open",
2420        Opens: "Open",
2421        SoldOut: "Sold Out",
2422        Cancelled: "Cancelled",
2423        SelectYear: "Select year",
2424        SearchAct: "Search act",
2425        //ClandestinoFestival: "Clandestino Festival<br>May 29–June 1 2025",
2426        ClandestinoFestival: "Clandestino Festival",
2427        Goldpass: "Gold Pass",
2428        Festivalpass: "Festival Pass",
2429        Kl: "hrs",
2430        FreeAdmissionRegistrationRequired: "Free admission – Registration required"
2431    },
2432};
2433exports.language = {
2434    get: function (lan, trans) {
2435        return translation[lan][trans];
2436    },
2437    init: function () {
2438        console.log('language init');
2439    }
2440};
2441
2442},{}],14:[function(require,module,exports){
2443"use strict";
2444Object.defineProperty(exports, "__esModule", { value: true });
2445exports.logo = void 0;
2446exports.logo = {
2447    scrolledLogo: function () {
2448        var scrolled = ($('.scrolled').length > 0);
2449        var singleView = ($('.single-focus').length > 0);
2450        var scrollObject;
2451        var breakpoint;
2452        if (singleView) {
2453            if (scrolled) {
2454                return;
2455            }
2456            scrollObject = $('.single-description').first();
2457            breakpoint = 110;
2458        }
2459        else {
2460            scrollObject = $('#content').first();
2461            breakpoint = -90;
2462        }
2463        var contentPosTop = scrollObject.position().top;
2464        if (contentPosTop < breakpoint) {
2465            $('.site-title').addClass('scrolled');
2466        }
2467        else {
2468            $('.site-title').removeClass('scrolled');
2469        }
2470    },
2471    listen: function () {
2472        var didScroll = false;
2473        document.addEventListener('wheel', function (evt) {
2474            didScroll = true;
2475        }, { capture: false, passive: true });
2476        document.addEventListener('touchmove', function (evt) {
2477            didScroll = true;
2478        }, { capture: false, passive: true });
2479        setInterval(function () {
2480            if (didScroll) {
2481                didScroll = false;
2482                exports.logo.scrolledLogo();
2483            }
2484        }, 170);
2485    },
2486    init: function () {
2487        console.log('logo init');
2488        exports.logo.listen();
2489    }
2490};
2491
2492},{}],15:[function(require,module,exports){
2493"use strict";
2494var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2495    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2496    return new (P || (P = Promise))(function (resolve, reject) {
2497        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2498        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2499        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2500        step((generator = generator.apply(thisArg, _arguments || [])).next());
2501    });
2502};
2503var __generator = (this && this.__generator) || function (thisArg, body) {
2504    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2505    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2506    function verb(n) { return function (v) { return step([n, v]); }; }
2507    function step(op) {
2508        if (f) throw new TypeError("Generator is already executing.");
2509        while (g && (g = 0, op[0] && (_ = 0)), _) try {
2510            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2511            if (y = 0, t) op = [op[0] & 2, t.value];
2512            switch (op[0]) {
2513                case 0: case 1: t = op; break;
2514                case 4: _.label++; return { value: op[1], done: false };
2515                case 5: _.label++; y = op[1]; op = [0]; continue;
2516                case 7: op = _.ops.pop(); _.trys.pop(); continue;
2517                default:
2518                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2519                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2520                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2521                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2522                    if (t[2]) _.ops.pop();
2523                    _.trys.pop(); continue;
2524            }
2525            op = body.call(thisArg, _);
2526        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2527        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2528    }
2529};
2530Object.defineProperty(exports, "__esModule", { value: true });
2531exports.news = void 0;
2532var config_1 = require("./config");
2533var site_1 = require("./site");
2534var eventService_1 = require("./eventService");
2535var contentService_1 = require("./contentService");
2536exports.news = {
2537    _locale: config_1.config.defaultLang,
2538    allEvents: [],
2539    parse: function (events) {
2540        events.forEach(function (event) {
2541            eventService_1.eventService.renderPost(event);
2542        });
2543    },
2544    load: function (events, locale) {
2545        exports.news.parse(events);
2546        exports.news.listenBoxes();
2547    },
2548    listenBoxes: function () {
2549        console.log("news listenBoxes");
2550        $("a.single-box").click(function (e) {
2551            site_1.site.handleClick(this);
2552            e.stopPropagation();
2553            e.preventDefault();
2554        });
2555    },
2556    init: function (locale, currentPage) {
2557        return __awaiter(this, void 0, void 0, function () {
2558            return __generator(this, function (_a) {
2559                switch (_a.label) {
2560                    case 0:
2561                        exports.news._locale = locale;
2562                        //await eventService.init(locale);
2563                        return [4 /*yield*/, contentService_1.contentService.init(locale, currentPage.category)];
2564                    case 1:
2565                        //await eventService.init(locale);
2566                        _a.sent();
2567                        eventService_1.eventService.appendContent(contentService_1.contentService.allContents);
2568                        exports.news.allEvents = eventService_1.eventService.allEvents.filter(function (e) {
2569                            return e.categories.includes(currentPage.category);
2570                        });
2571                        exports.news.allEvents = eventService_1.eventService.sortSticky(exports.news.allEvents, eventService_1.SortOrder.RANDOM);
2572                        contentService_1.contentService.addExtraClasse
2572s(exports.news.allEvents);
2573                        exports.news.load(exports.news.allEvents, locale);
2574                        console.log("news init", exports.news._locale);
2575                        return [2 /*return*/];
2576                }
2577            });
2578        });
2579    },
2580};
2581
2582},{"./config":4,"./contentService":5,"./eventService":7,"./site":21}],16:[function(require,module,exports){
2583"use strict";
2584var _a;
2585Object.defineProperty(exports, "__esModule", { value: true });
2586exports.page = exports.sitemap = exports.Locales = exports.Pages = void 0;
2587var Pages;
2588(function (Pages) {
2589    Pages["NEWS"] = "NEWS";
2590    Pages["PROGRAM"] = "PROGRAM";
2591    Pages["TICKETS"] = "TICKET";
2592    Pages["SCHEDULE"] = "SCHEDULE";
2593    Pages["CALENDAR"] = "CALENDAR";
2594    Pages["INFO"] = "INFO";
2595    Pages["VENUES"] = "VENUES";
2596    Pages["BACKSTAGE"] = "BACKSTAGE";
2597    //ACCESSIBILITY = "ACCESSIBILITY",
2598    Pages["FAQ"] = "FAQ";
2599    Pages["PARTNERS"] = "PARTNERS";
2600    Pages["PODCAST"] = "PODCAST";
2601    Pages["HISTORICAL"] = "HISTORICAL";
2602    Pages["ARCHIVE_OF_IMAGES"] = "ARCHIVE_OF_IMAGES";
2603    Pages["PRESS"] = "PRESS";
2604})(Pages = exports.Pages || (exports.Pages = {}));
2605var Locales;
2606(function (Locales) {
2607    Locales["sv"] = "sv";
2608    Locales["en"] = "en";
2609})(Locales = exports.Locales || (exports.Locales = {}));
2610exports.sitemap = (_a = {},
2611    _a[Locales.sv] = {
2612        NEWS: { page: Pages.NEWS, url: "", category: 9 },
2613        PROGRAM: { page: Pages.PROGRAM, url: "program", category: 11 },
2614        TICKET: { page: Pages.TICKETS, url: "biljetter" },
2615        SCHEDULE: { page: Pages.SCHEDULE, url: "spelschema" },
2616        CALENDAR: { page: Pages.CALENDAR, url: "kalender" },
2617        INFO: { page: Pages.INFO, url: "info" },
2618        VENUES: { page: Pages.INFO, url: "info", singleUrl: "scener" },
2619        // ACCESSIBILITY: {
2620        //     page: Pages.INFO,
2621        //     url: "info",
2622        //     singleUrl: "tillganglighet",
2623        // },
2624        FAQ: { page: Pages.INFO, url: "info", singleUrl: "faq" },
2625        PARTNERS: { page: Pages.INFO, url: "info", singleUrl: "partners" },
2626        BACKSTAGE: { page: Pages.INFO, url: "info", singleUrl: "backstage" },
2627        HISTORICAL: {
2628            page: Pages.INFO,
2629            subPage: Pages.HISTORICAL,
2630            url: "info",
2631            singleUrl: "previous-line-up",
2632        },
2633        PODCAST: { page: Pages.PODCAST, url: "pods", category: 10 },
2634        ARCHIVE_OF_IMAGES: { page: Pages.ARCHIVE_OF_IMAGES, url: "bildarkiv" },
2635        PRESS: { page: Pages.PRESS, url: "press" },
2636    },
2637    _a[Locales.en] = {
2638        NEWS: { page: Pages.NEWS, url: "", category: 15 },
2639        PROGRAM: { page: Pages.PROGRAM, url: "program", category: 17 },
2640        TICKET: { page: Pages.TICKETS, url: "tickets" },
2641        SCHEDULE: { page: Pages.SCHEDULE, url: "schedule" },
2642        CALENDAR: { page: Pages.CALENDAR, url: "calendar" },
2643        INFO: { page: Pages.INFO, url: "info" },
2644        VENUES: { page: Pages.INFO, url: "info", singleUrl: "venues" },
2645        // ACCESSIBILITY: {
2646        //     page: Pages.INFO,
2647        //     url: "info",
2648        //     singleUrl: "accessibility",
2649        // },
2650        FAQ: { page: Pages.INFO, url: "info", singleUrl: "faq" },
2651        PARTNERS: { page: Pages.INFO, url: "info", singleUrl: "partners" },
2652        BACKSTAGE: { page: Pages.INFO, url: "info", singleUrl: "backstage" },
2653        PODCAST: { page: Pages.PODCAST, url: "pods", category: 16 },
2654        ARCHIVE_OF_IMAGES: {
2655            page: Pages.ARCHIVE_OF_IMAGES,
2656            url: "archive-of-images",
2657        },
2658        PRESS: { page: Pages.PRESS, url: "press" },
2659    },
2660    _a);
2661exports.page = {
2662    findPageByUrl: function (url, subPage, locale) {
2663        var page = Object.values(exports.sitemap[locale]).find(function (e) { return e.url === url && e.singleUrl === subPage; });
2664        if (page) {
2665            return page;
2666        }
2667        return Object.values(exports.sitemap[locale]).find(function (e) { return e.url === url; });
2668    },
2669};
2670
2671},{}],17:[function(require,module,exports){
2672"use strict";
2673var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2674    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2675    return new (P || (P = Promise))(function (resolve, reject) {
2676        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2677        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2678        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2679        step((generator = generator.apply(thisArg, _arguments || [])).next());
2680    });
2681};
2682var __generator = (this && this.__generator) || function (thisArg, body) {
2683    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2684    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2685    function verb(n) { return function (v) { return step([n, v]); }; }
2686    function step(op) {
2687        if (f) throw new TypeError("Generator is already executing.");
2688        while (g && (g = 0, op[0] && (_ = 0)), _) try {
2689            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2690            if (y = 0, t) op = [op[0] & 2, t.value];
2691            switch (op[0]) {
2692                case 0: case 1: t = op; break;
2693                case 4: _.label++; return { value: op[1], done: false };
2694                case 5: _.label++; y = op[1]; op = [0]; continue;
2695                case 7: op = _.ops.pop(); _.trys.pop(); continue;
2696                default:
2697                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2698                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2699                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2700                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2701                    if (t[2]) _.ops.pop();
2702                    _.trys.pop(); continue;
2703            }
2704            op = body.call(thisArg, _);
2705        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2706        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2707    }
2708};
2709Object.defineProperty(exports, "__esModule", { value: true });
2710exports.pods = void 0;
2711var config_1 = require("./config");
2712var site_1 = require("./site");
2713var contentService_1 = require("./contentService");
2714var eventService_1 = require("./eventService");
2715exports.pods = {
2716    _locale: config_1.config.defaultLang,
2717    allContents: [],
2718    archivePodBeforeId: 12344,
2719    parse: function (contents) {
2720        contents.forEach(function (content) {
2721            if (content.id <= exports.pods.archivePodBeforeId || content.id == 12333) {
2722                content.extraCssClass = "pods-archive";
2723            }
2724            var event = content;
2725            event.eventType = "pods";
2726            eventService_1.eventService.renderPost(event);
2727        });
2728    },
2729    load: function (contents, locale) {
2730        exports.pods.parse(contents);
2731        exports.pods.listenBoxes();
2732    },
2733    listenBoxes: function () {
2734        console.log("pods listenBoxes");
2735        $("a.single-box").click(function (e) {
2736            site_1.site.handleClick(this);
2737            e.stopPropagation();
2738            e.preventDefault();
2739        });
2740    },
2741    init: function (locale, currentPage) {
2742        return __awaiter(this, void 0, void 0, function () {
2743            return __generator(this, function (_a) {
2744                switch (_a.label) {
2745                    case 0:
2746                        exports.pods._locale = locale;
2747                        return [4 /*yield*/, contentService_1.contentService.init(locale, currentPage.category)];
2748                    case 1:
2749                        _a.sent();
2750                        exports.pods.allContents = contentService_1.contentService.allContents;
2751                        exports.pods.load(exports.pods.allContents, locale);
2752                        console.log("pods init", exports.pods._locale);
2753                        return [2 /*return*/];
2754                }
2755            });
2756        });
2757    },
2758};
2759
2760},{"./config":4,"./contentService":5,"./eventService":7,"./site":21}],18:[function(require,module,exports){
2761"use strict";
2762var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2763    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2764    return new (P || (P = Promise))(function (resolve, reject) {
2765        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2766        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2767        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2768        step((generator = generator.apply(thisArg, _arguments || [])).next());
2769    });
2770};
2771var __generator = (this && this.__generator) || function (thisArg, body) {
2772    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2773    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2774    function verb(n) { return function (v) { return step([n, v]); }; }
2775    function step(op) {
2776        if (f) throw new TypeError("Generator is already executing.");
2777        while (g && (g = 0, op[0] && (_ = 0)), _) try {
2778            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2779            if (y = 0, t) op = [op[0] & 2, t.value];
2780            switch (op[0]) {
2781                case 0: case 1: t = op; break;
2782                case 4: _.label++; return { value: op[1], done: false };
2783                case 5: _.label++; y = op[1]; op = [0]; continue;
2784                case 7: op = _.ops.pop(); _.trys.pop(); continue;
2785                default:
2786                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2787                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2788                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2789                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2790                    if (t[2]) _.ops.pop();
2791                    _.trys.pop(); continue;
2792            }
2793            op = body.call(thisArg, _);
2794        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2795        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2796    }
2797};
2798var __importDefault = (this && this.__importDefault) || function (mod) {
2799    return (mod && mod.__esModule) ? mod : { "default": mod };
2800};
2801Object.defineProperty(exports, "__esModule", { value: true });
2802exports.program = void 0;
2803var config_1 = require("./config");
2804var site_1 = require("./site");
2805var eventService_1 = require("./eventService");
2806var contentService_1 = require("./contentService");
2807var dayjs_1 = __importDefault(require("dayjs"));
2808exports.program = {
2809    _locale: config_1.config.defaultLang,
2810    allEvents: [],
2811    removeAfterDays: 1,
2812    parse: function (events) {
2813        events.forEach(function (event) {
2814            eventService_1.eventService.renderPost(event);
2815        });
2816    },
2817    load: function (events, locale) {
2818        exports.program.parse(events);
2819        exports.program.listenBoxes();
2820    },
2821    listenBoxes: function () {
2822        console.log("lineup listenBoxes");
2823        $("a.single-box").click(function (e) {
2824            site_1.site.handleClick(this);
2825            e.stopPropagation();
2826            e.preventDefault();
2827        });
2828    },
2829    init: function (locale) {
2830        return __awaiter(this, void 0, void 0, function () {
2831            var _a;
2832            return __generator(this, function (_b) {
2833                switch (_b.label) {
2834                    case 0:
2835                        exports.program._locale = locale;
2836                        _a = exports.program;
2837                        return [4 /*yield*/, eventService_1.eventService.get(locale)];
2838                    case 1:
2839                        _a.allEvents = _b.sent();
2840                        exports.program.allEvents = eventService_1.eventService.sortPastAndFuture(exports.program.allEvents, (0, dayjs_1.default)().subtract(exports.program.removeAfterDays, "days").toDate());
2841                        exports.program.load(exports.program.allEvents, locale);
2842                        contentService_1.contentService.addExtraClasses(exports.program.allEvents);
2843                        console.log("lineup init", exports.program._locale);
2844                        return [2 /*return*/];
2845                }
2846            });
2847        });
2848    },
2849};
2850
2851},{"./config":4,"./contentService":5,"./eventService":7,"./site":21,"dayjs":25}],19:[function(require,module,exports){
2852"use strict";
2853var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2854    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2855    return new (P || (P = Promise))(function (resolve, reject) {
2856        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2857        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2858        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2859        step((generator = generator.apply(thisArg, _arguments || [])).next());
2860    });
2861};
2862var __generator = (this && this.__generator) || function (thisArg, body) {
2863    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2864    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2865    function verb(n) { return function (v) { return step([n, v]); }; }
2866    function step(op) {
2867        if (f) throw new TypeError("Generator is already executing.");
2868        while (g && (g = 0, op[0] && (_ = 0)), _) try {
2869            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2870            if (y = 0, t) op = [op[0] & 2, t.value];
2871            switch (op[0]) {
2872                case 0: case 1: t = op; break;
2873                case 4: _.label++; return { value: op[1], done: false };
2874                case 5: _.label++; y = op[1]; op = [0]; continue;
2875                case 7: op = _.ops.pop(); _.trys.pop(); continue;
2876                default:
2877                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2878                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2879                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2880                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2881                    if (t[2]) _.ops.pop();
2882                    _.trys.pop(); continue;
2883            }
2884            op = body.call(thisArg, _);
2885        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2886        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2887    }
2888};
2889var __importDefault = (this && this.__importDefault) || function (mod) {
2890    return (mod && mod.__esModule) ? mod : { "default": mod };
2891};
2892Object.defineProperty(exports, "__esModule", { value: true });
2893exports.schedule = void 0;
2894var config_1 = require("./config");
2895var site_1 = require("./site");
2896var eventService_1 = require("./eventService");
2897var language_1 = require("./language");
2898var dayjs_1 = __importDefault(require("dayjs"));
2899var isBetween_1 = __importDefault(require("dayjs/plugin/isBetween"));
2900var isSameOrBefore_1 = __importDefault(require("dayjs/plugin/isSameOrBefore"));
2901var isSameOrAfter_1 = __importDefault(require("dayjs/plugin/isSameOrAfter"));
2902exports.schedule = {
2903    _locale: config_1.config.defaultLang,
2904    allEvents: [],
2905    allVenues: [],
2906    slotsToRender: 80,
2907    removeAfterDays: 1,
2908    renderSlot: function (event, startTime, endTime, selector) {
2909        return __awaiter(this, void 0, void 0, function () {
2910            var startSlot, endSlot, template;
2911            return __generator(this, function (_a) {
2912                startSlot = startTime
2913                    ? exports.schedule.roundTime((0, dayjs_1.default)(startTime)).format("HHmm")
2914                    : "";
2915                endSlot = endTime
2916                    ? exports.schedule.roundTime((0, dayjs_1.default)(endTime)).format("HHmm")
2917                    : "";
2918                template = "\n        <div class=\"schedule-item\"  data-id=\"".concat(event.id, "\" style=\"grid-column: track-").concat(event.track, "; grid-row: time-").concat(startSlot, " / time-").concat(endSlot, ";background-color:").concat(event.venue.color, "\">\n            <div>\n                <p class=\"time\">").concat((0, dayjs_1.default)(startTime).format("HH.mm"), "\u2013").concat((0, dayjs_1.default)(endTime).format("HH.mm"), "</p>\n                <h2>").concat(event.title, "</h2>\n            </div>\n        </div>");
2919                $(selector).append(template);
2920                return [2 /*return*/];
2921            });
2922        });
2923    },
2924    renderEvent: function (event, selector) {
2925        return __awaiter(this, void 0, void 0, function () {
2926            return __generator(this, function (_a) {
2927                switch (_a.label) {
2928                    case 0:
2929                        console.log("renderEvent", event);
2930                        return [4 /*yield*/, exports.schedule.renderSlot(event, event.startTime, event.endTime, selector)];
2931                    case 1:
2932                        _a.sent();
2933                        console.log("event.startTime2", event.startTime2);
2934                        if (!(event.startTime2 && event.endTime2)) return [3 /*break*/, 3];
2935                        return [4 /*yield*/, exports.schedule.renderSlot(event, event.startTime2, event.endTime2, selector)];
2936                    case 2:
2937                        _a.sent();
2938                        _a.label = 3;
2939                    case 3:
2940                        if (!(event.startTime3 && event.endTime3)) return [3 /*break*/, 5];
2941                        return [4 /*yield*/, exports.schedule.render
2941Slot(event, event.startTime3, event.endTime3, selector)];
2942                    case 4:
2943                        _a.sent();
2944                        _a.label = 5;
2945                    case 5: return [2 /*return*/];
2946                }
2947            });
2948        });
2949    },
2950    roundTime: function (date) {
2951        var minutes = date.format("mm");
2952        if (["00", "15", "30", "45"].includes(minutes)) {
2953            return date;
2954        }
2955        return (0, dayjs_1.default)(Math.ceil(date.toDate().getTime() / 900000) * 900000);
2956    },
2957    addTimeSlot: function (timeSlot, slotSize, selector, hidden) {
2958        return __awaiter(this, void 0, void 0, function () {
2959            var timeSlotEnd;
2960            return __generator(this, function (_a) {
2961                timeSlotEnd = timeSlot.add(slotSize, "m");
2962                $(selector).append("<h3 class=\"time-slot ".concat(hidden, "\" style=\"grid-row: time-").concat(timeSlot.format("HHmm"), " / time-").concat(timeSlotEnd.format("HHmm"), ";\">").concat(timeSlot.format("HH.mm"), "</h3>"));
2963                return [2 /*return*/];
2964            });
2965        });
2966    },
2967    renderSlots: function (day) {
2968        return __awaiter(this, void 0, void 0, function () {
2969            var currentTimeslot, _loop_1, i;
2970            var _this = this;
2971            return __generator(this, function (_a) {
2972                console.log("renderSlots");
2973                console.log("day.events.length", day.events.length);
2974                console.log("day.events[0]", day.events[0]);
2975                console.log("day.startSlot", day.startSlot);
2976                console.log("day.endSlot", day.endSlot);
2977                currentTimeslot = (0, dayjs_1.default)(day.date).add(config_1.config.earliestEventHour, "h");
2978                _loop_1 = function (i) {
2979                    var nextTimeslot = currentTimeslot.add(15, "m");
2980                    var hidden = "";
2981                    if (currentTimeslot.isSameOrBefore(day.startSlot) ||
2982                        currentTimeslot.isSameOrAfter(day.endSlot)) {
2983                        //console.log(currentTimeslot.format('HH:mm')+' is before '+day.startSlot.format('HH:mm'));
2984                        //currentTimeslot = nextTimeslot;
2985                        //continue;
2986                        hidden = "hidden";
2987                    }
2988                    if (currentTimeslot.format("mm") == "00" ||
2989                        currentTimeslot.format("mm") == "30") {
2990                        exports.schedule.addTimeSlot(currentTimeslot, 30, day.selector, hidden);
2991                    }
2992                    var events = day.events.filter(function (_a) {
2993                        var startTime = _a.startTime;
2994                        return (0, dayjs_1.default)(startTime).isBetween(currentTimeslot, nextTimeslot, "second", "[)");
2995                    });
2996                    if (events.length > 0) {
2997                        console.log("events.length" + events.length, day.selector);
2998                        events.forEach(function (event) { return __awaiter(_this, void 0, void 0, function () {
2999                            return __generator(this, function (_a) {
3000                                switch (_a.label) {
3001                                    case 0: return [4 /*yield*/, exports.schedule.renderEvent(event, day.selector)];
3002                                    case 1:
3003                                        _a.sent();
3004                                        return [2 /*return*/];
3005                                }
3006                            });
3007                        }); });
3008                    }
3009                    else {
3010                        console.log("no events", day.selector);
3011                    }
3012                    currentTimeslot = nextTimeslot;
3013                };
3014                for (i = 0; i < this.slotsToRender; i++) {
3015                    _loop_1(i);
3016                }
3017                return [2 /*return*/];
3018            });
3019        });
3020    },
3021    renderVenues: function (day) {
3022        return __awaiter(this, void 0, void 0, function () {
3023            return __generator(this, function (_a) {
3024                day.venues.forEach(function (venue) {
3025                    var venueTitle = venue.title.replace("&#8203;", '<span class="hyphen">‐</span>');
3026                    venueTitle = venueTitle.replace(", Ringön", '');
3027                    $(day.selector).append("<span class=\"track-slot\" aria-hidden=\"true\" style=\"grid-column: track-".concat(venue.track, "; grid-row: tracks;\"><p class=\"time-and-place\">").concat(venueTitle, "</p><p class=\"doors-open\">").concat(language_1.language.get(site_1.site._locale, "Opens"), " ").concat(venue.doorsOpen, "</p></span>"));
3028                });
3029                return [2 /*return*/];
3030            });
3031        });
3032    },
3033    renderSchedule: function (day) {
3034        return __awaiter(this, void 0, void 0, function () {
3035            var dayTitle;
3036            return __generator(this, function (_a) {
3037                switch (_a.label) {
3038                    case 0:
3039                        console.log("renderschedule");
3040                        dayTitle = (0, dayjs_1.default)(day.date).format("dddd D MMMM");
3041                        $(".entry-content").append("\n        <h2 class=\"schedule-day\">".concat(dayTitle, "</h2>\n        <div class=\"schedule tracks").concat(day.venues.length, " ").concat(day.selector.replace(".", ""), "\" aria-labelledby=\"schedule-heading\"></div>"));
3042                        return [4 /*yield*/, exports.schedule.renderVenues(day)];
3043                    case 1:
3044                        _a.sent();
3045                        return [4 /*yield*/, exports.schedule.renderSlots(day)];
3046                    case 2:
3047                        _a.sent();
3048                        return [2 /*return*/];
3049                }
3050            });
3051        });
3052    },
3053    addEventTracks: function (day) {
3054        return __awaiter(this, void 0, void 0, function () {
3055            return __generator(this, function (_a) {
3056                day.events.forEach(function (event) {
3057                    var _a;
3058                    event.track = (_a = day.venues.find(function (e) { return e.title === event.venue.title; })) === null || _a === void 0 ? void 0 : _a.track;
3059                });
3060                return [2 /*return*/];
3061            });
3062        });
3063    },
3064    addDayLength: function (day) {
3065        var _a, _b;
3066        return __awaiter(this, void 0, void 0, function () {
3067            var start, end;
3068            return __generator(this, function (_c) {
3069                start = (0, dayjs_1.default)((_a = day.events[0]) === null || _a === void 0 ? void 0 : _a.startTime);
3070                end = (0, dayjs_1.default)((_b = day.events[day.events.length - 1]) === null || _b === void 0 ? void 0 : _b.endTime);
3071                if (end.hour() < 8) {
3072                    end = end.add(1, "day");
3073                }
3074                //day.startSlot = start.subtract(1, "hour").toDate();
3075                day.startSlot = start.toDate();
3076                //day.endSlot = end.add(1, "hour").toDate();
3077                day.endSlot = end.toDate();
3078                return [2 /*return*/];
3079            });
3080        });
3081    },
3082    addEvents: function (events, day) {
3083        return __awaiter(this, void 0, void 0, function () {
3084            var _this = this;
3085            return __generator(this, function (_a) {
3086                events.forEach(function (event) { return __awaiter(_this, void 0, void 0, function () {
3087                    var date;
3088                    return __generator(this, function (_a) {
3089                        date = (0, dayjs_1.default)(event.startDate);
3090                        if ((0, dayjs_1.default)(day.date).isSame(date, "day") &&
3091                            event.startTime &&
3092                            event.endTime) {
3093                            day.events.push(event);
3094                            console.log("addEvent", event);
3095                        }
3096                        return [2 /*return*/];
3097                    });
3098                }); });
3099                return [2 /*return*/];
3100            });
3101        });
3102    },
3103    addVenues: function (day) {
3104        return __awaiter(this, void 0, void 0, function () {
3105            var track;
3106            return __generator(this, function (_a) {
3107                track = 1;
3108                day.events.forEach(function (event) {
3109                    var venueTitle = (event === null || event === void 0 ? void 0 : event.venue.title) || "tba";
3110                    if (!day.venues.some(function (e) { return e.title === venueTitle; })) {
3111                        var venue = {
3112                            title: venueTitle,
3113                            track: track,
3114                            doorsOpen: event.doorsOpenFormatted ||
3115                                (0, dayjs_1.default)(event.startTime).format("H.mm"),
3116                        };
3117                        day.venues.push(venue);
3118                        track++;
3119                    }
3120                });
3121                return [2 /*return*/];
3122            });
3123        });
3124    },
3125    sortVenues: function (day) {
3126        return __awaiter(this, void 0, void 0, function () {
3127            var track;
3128            return __generator(this, function (_a) {
3129                day.venues.sort(function (a, b) {
3130                    var nameA = a.title.toUpperCase();
3131                    var nameB = b.title.toUpperCase();
3132                    if (nameA < nameB) {
3133                        return -1;
3134                    }
3135                    if (nameA > nameB) {
3136                        return 1;
3137                    }
3138                    // names must be equal
3139                    return 0;
3140                });
3141                track = 1;
3142                day.venues.forEach(function (venue) {
3143                    venue.track = track;
3144                    track++;
3145                });
3146                return [2 /*return*/];
3147            });
3148        });
3149    },
3150    renderDay: function (day) {
3151        return __awaiter(this, void 0, void 0, function () {
3152            return __generator(this, function (_a) {
3153                switch (_a.label) {
3154                    case 0: return [4 /*yield*/, exports.schedule.addEvents(exports.schedule.allEvents, day)];
3155                    case 1:
3156                        _a.sent();
3157                        //day.events = await schedule.sort(day.events);
3158                        return [4 /*yield*/, exports.schedule.addVenues(day)];
3159                    case 2:
3160                        //day.events = await schedule.sort(day.events);
3161                        _a.sent();
3162                        return [4 /*yield*/, exports.schedule.sortVenues(day)];
3163                    case 3:
3164                        _a.sent();
3165                        return [4 /*yield*/, exports.schedule.addEventTracks(day)];
3166                    case 4:
3167                        _a.sent();
3168                        return [4 /*yield*/, exports.schedule.addDayLength(day)];
3169                    case 5:
3170                        _a.sent();
3171                        return [4 /*yield*/, exports.schedule.renderSchedule(day)];
3172                    case 6:
3173                        _a.sent();
3174                        return [2 /*return*/];
3175                }
3176            });
3177        });
3178    },
3179    loadEvents: function () {
3180        return __awaiter(this, void 0, void 0, function () {
3181            return __generator(this, function (_a) {
3182                switch (_a.label) {
3183                    case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() +
3184                            "posts/?per_page=".concat(config_1.config.pageSize, "&categories=10&&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"))];
3185                    case 1: return [2 /*return*/, _a.sent()];
3186                }
3187            });
3188        });
3189    },
3190    listenBoxes: function () {
3191        console.log("schedule listenBoxes");
3192        $("div.schedule-item").click(function (e) {
3193            site_1.site.handleClick(this);
3194        });
3195    },
3196    loadFestival2025Days: function () {
3197        return __awaiter(this, void 0, void 0, function () {
3198            var day0, day1, day2, day3, day4;
3199            return __generator(this, function (_a) {
3200                switch (_a.label) {
3201                    case 0:
3202                        day0 = {
3203                            date: (0, dayjs_1.default)("2024-05-2").toDate(),
3204                            selector: ".day0",
3205                            venues: [],
3206                            events: [],
3207                        };
3208                        return [4 /*yield*/, exports.schedule.renderDay(day0)];
3209                    case 1:
3210                        _a.sent();
3211                        return [2 /*return*/];
3212                    case 2:
3213                        _a.sent();
3214                        day2 = {
3215                            date: (0, dayjs_1.default)("2023-06-9").toDate(),
3216                            selector: ".day2",
3217                            venues: [],
3218                            events: [],
3219                        };
3220                        return [4 /*yield*/, exports.schedule.renderDay(day2)];
3221                    case 3:
3222                        _a.sent();
3223                        day3 = {
3224                            date: (0, dayjs_1.default)("2023-06-10").toDate(),
3225                            selector: ".day3",
3226                            venues: [],
3227                            events: [],
3228                        };
3229                        return [4 /*yield*/, exports.schedule.renderDay(day3)];
3230                    case 4:
3231                        _a.sent();
3232                        day4 = {
3233                            date: (0, dayjs_1.default)("2023-06-11").toDate(),
3234                            selector: ".day4",
3235                            venues: [],
3236                            events: [],
3237                        };
3238                        return [4 /*yield*/, exports.schedule.renderDay(day4)];
3239                    case 5:
3240                        _a.sent();
3241                        return [2 /*return*/];
3242                }
3243            });
3244        });
3245    },
3246    loadMonthlyDays: function () {
3247        return __awaiter(this, void 0, void 0, function () {
3248            var daysInMonth, dayOfMonth, daysToRender, i, day;
3249            var _this = this;
3250            return __generator(this, function (_a) {
3251                daysInMonth = (0, dayjs_1.default)().daysInMonth() + 365;
3252                dayOfMonth = (0, dayjs_1.default)();
3253                daysToRender = [];
3254                for (i = 0; i < daysInMonth; i++) {
3255                    dayOfMonth = (0, dayjs_1.default)().date(i);
3256                    dayOfMonth = dayOfMonth.set("minute", 0);
3257                    dayOfMonth = dayOfMonth.set("hour", 0);
3258                    if (exports.schedule.allEvents.find(function (e) {
3259                        return (0, dayjs_1.default)(e.startDate).isSame(dayOfMonth, "day");
3260                    })) {
3261                        day = {
3262                            date: dayOfMonth.toDate(),
3263                            selector: ".day" + i,
3264                            venues: [],
3265                            events: [],
3266                        };
3267                        if (!daysToRender.includes(day)) {
3268                            daysToRender.push(day);
3269                        }
3270                    }
3271                }
3272                daysToRender.forEach(function (day) { return __awaiter(_this, void 0, void 0, function () {
3273                    return __generator(this, function (_a) {
3274                        switch (_a.label) {
3275                            case 0:
3276                                console.log("renderDay");
3277                                return [4 /*yield*/, exports.schedule.renderDay(day)];
3278                            case 1:
3279                                _a.sent();
3280                                return [2 /*return*/];
3281                        }
3282                    });
3283                }); });
3284                return [2 /*return*/];
3285            });
3286        });
3287    },
3288    init: function (locale) {
3289        return __awaiter(this, void 0, void 0, function () {
3290            var _a, _b;
3291            return __generator(this, function (_c) {
3292                switch (_c.label) {
3293                    case 0:
3294                        dayjs_1.default.extend(isBetween_1.default);
3295                        dayjs_1.default.extend(isSameOrBefore_1.default);
3296                        dayjs_1.default.extend(isSameOrAfter_1.default);
3297                        exports.schedule._locale = locale;
3298                        _a = exports.schedule;
3299                        return [4 /*yield*/, eventService_1.eventService.getForSchedule(locale)];
3300                    case 1:
3301                        _a.allEvents = _c.sent();
3302                        _b = exports.schedule;
3303                        return [4 /*yield*/, eventService_1.eventService.filterOld(exports.schedule.allEvents, (0, dayjs_1.default)().subtract(exports.schedule.removeAfterDays, "days").toDate())];
3304                    case 2:
3305                        _b.allEvents = _c.sent();
3306                        //await schedule.loadFestival2025Days();
3307                        return [4 /*yield*/, exports.schedule.loadMonthlyDays()];
3308                    case 3:
3309                        //await schedule.loadFestival2025Days();
3310                        _c.sent();
3311                        setTimeout(function () {
3312                            exports.schedule.listenBoxes();
3313                            console.log("schedule init", exports.schedule._locale);
3314                        }, 250);
3315                        return [2 /*return*/];
3316                }
3317            });
3318        });
3319    },
3320};
3321
3322},{"./config":4,"./eventService":7,"./language":13,"./site":21,"dayjs":25,"dayjs/plugin/isBetween":27,"dayjs/plugin/isSameOrAfter":28,"dayjs/plugin/isSameOrBefore":29}],20:[function(require,module,exports){
3323"use strict";
3324var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3325    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3326    return new (P || (P = Promise))(function (resolve, reject) {
3327        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3328        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3329        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3330        step((generator = generator.apply(thisArg, _arguments || [])).next());
3331    });
3332};
3333var __generator = (this && this.__generator) || function (thisArg, body) {
3334    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
3335    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
3336    function verb(n) { return function (v) { return step([n, v]); }; }
3337    function step(op) {
3338        if (f) throw new TypeError("Generator is already executing.");
3339        while (g && (g = 0, op[0] && (_ = 0)), _) try {
3340            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
3341            if (y = 0, t) op = [op[0] & 2, t.value];
3342            switch (op[0]) {
3343                case 0: case 1: t = op; break;
3344                case 4: _.label++; return { value: op[1], done: false };
3345                case 5: _.label++; y = op[1]; op = [0]; continue;
3346                case 7: op = _.ops.pop(); _.trys.pop(); continue;
3347                default:
3348                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
3349                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
3350                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
3351                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
3352                    if (t[2]) _.ops.pop();
3353                    _.trys.pop(); continue;
3354            }
3355            op = body.call(thisArg, _);
3356        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
3357        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
3358    }
3359};
3360var __importDefault = (this && this.__importDefault) || function (mod) {
3361    return (mod && mod.__esModule) ? mod : { "default": mod };
3362};
3363Object.defineProperty(exports, "__esModule", { value: true });
3364exports.share = void 0;
3365var config_1 = require("./config");
3366var element_1 = require("./element");
3367var dayjs_1 = __importDefault(require("dayjs"));
3368var contentService_1 = require("./contentService");
3369exports.share = {
3370    _locale: config_1.config.defaultLang,
3371    renderShareLinks: function (event, link) {
3372        element_1.element.buttons.buttonShareFb.href =
3373            "https://www.facebook.com/sharer.php?u=" + link;
3374        // element.buttons.buttonShareTwitter.href =
3375        //     "http://twitter.com/share?text=" +
3376        //     event.title +
3377        //     "&url=" +
3378        //     config.siteUrl +
3379        //     config.getSiteRoot() +
3380        //     event.slug +
3381        //     "/" +
3382        //     "&hashtags=clandestinofestival";
3383        element_1.element.buttons.buttonShareUrl.href = link;
3384        element_1.element.buttons.buttonShareUrl.innerHTML = "Url";
3385    },
3386    addCalenderProperty: function (calendar, property, value) {
3387        //calendar.getElementsByClassName(property)[0].innerHTML = value;
3388        calendar.setAttribute(property, value);
3389    },
3390    renderAddToCalendar: function (event, link) {
3391        if (!event.startTime) {
3392            element_1.element.buttons.calendarContainer.classList.add("is-hidden");
3393            return;
3394        }
3395        else {
3396            element_1.element.buttons.calendarContainer.classList.remove("is-hidden");
3397        }
3398        var calendar = element_1.element.buttons.buttonAddToCalendar;
3399        if (calendar) {
3400            exports.share.addCalenderProperty(calendar, "name", contentService_1.contentService.stripTags(event.title));
3401            var description = "";
3402            description += 'Read more: <a href="' + link + '">' + link + "</a>";
3403            if (event.venueFormatted) {
3404                description += "\r\nVenue: " + event.venueFormatted;
3405            }
3406            exports.share.addCalenderProperty(calendar, "description", description);
3407            if (event.venue.address) {
3408                exports.share.addCalenderProperty(calendar, "location", event.venue.address);
3409            }
3410            exports.share.addCalenderProperty(calendar, "startDate", (0, dayjs_1.default)(event.startTime).format("YYYY-MM-DD"));
3411            exports.share.addCalenderProperty(calendar, "startTime", (0, dayjs_1.default)(event.startTime).format("HH:mm"));
3412            if (event.endTime) {
3413                exports.share.addCalenderProperty(calendar, "endDate", (0, dayjs_1.default)(event.endTime).format("YYYY-MM-DD"));
3414                exports.share.addCalenderProperty(calendar, "endTime", (0, dayjs_1.default)(event.endTime).format("HH:mm"));
3415            }
3416        }
3417        // element.buttons.buttonShareTwitter.href =
3418        //     "http://twitter.com/share?text=" +
3419        //     event.title +
3420        //     "&url=" +
3421        //     config.siteUrl +
3422        //     config.getSiteRoot() +
3423        //     event.slug +
3424        //     "/" +
3425        //     "&hashtags=clandestinofestival";
3426        element_1.element.buttons.buttonShareUrl.href =
3427            config_1.config.siteUrl + config_1.config.getSiteRoot() + event.slug;
3428        element_1.element.buttons.buttonShareUrl.innerHTML = "Url";
3429    },
3430    listenShareButtonSingle: function () {
3431        var buttonShareSingle = document.getElementById("button-share-single");
3432        console.log("listenShareButtonSingle" + buttonShareSingle);
3433        if (null !== buttonShareSingle) {
3434            buttonShareSingle.onclick = function () {
3435                if (-1 ===
3436                    element_1.element.wrappers.mainWrapper.className.indexOf("share")) {
3437                    element_1.element.wrappers.mainWrapper.className += " share";
3438                }
3439            };
3440        }
3441    },
3442    init: function (locale, event) {
3443        return __awaiter(this, void 0, void 0, function () {
3444            var link;
3445            return __generator(this, function (_a) {
3446                exports.share.listenShareButtonSingle();
3447                link = config_1.config.siteUrl + config_1.config.getSiteRoot() + event.slug + "/";
3448                exports.share._locale = locale;
3449                exports.share.renderShareLinks(event, link);
3450                exports.share.renderAddToCalendar(event, link);
3451                console.log("share init", exports.share._locale);
3452                return [2 /*return*/];
3453            });
3454        });
3455    },
3456};
3457
3458},{"./config":4,"./contentService":5,"./element":6,"dayjs":25}],21:[function(require,module,exports){
3459"use strict";
3460var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3461    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3462    return new (P || (P = Promise))(function (resolve, reject) {
3463        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3464        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3465        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3466        step((generator = generator.apply(thisArg, _arguments || [])).next());
3467    });
3468};
3469var __generator = (this && this.__generator) || function (thisArg, body) {
3470    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
3471    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
3472    function verb(n) { return function (v) { return step([n, v]); }; }
3473    function step(op) {
3474        if (f) throw new TypeError("Generator is already executing.");
3475        while (g && (g = 0, op[0] && (_ = 0)), _) try {
3476            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
3477            if (y = 0, t) op = [op[0] & 2, t.value];
3478            switch (op[0]) {
3479                case 0: case 1: t = op; break;
3480                case 4: _.label++; return { value: op[1], done: false };
3481                case 5: _.label++; y = op[1]; op = [0]; continue;
3482                case 7: op = _.ops.pop(); _.trys.pop(); continue;
3483                default:
3484                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
3485                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
3486                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
3487                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
3488                    if (t[2]) _.ops.pop();
3489                    _.trys.pop(); continue;
3490            }
3491            op = body.call(thisArg, _);
3492        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
3493        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
3494    }
3495};
3496Object.defineProperty(exports, "__esModule", { value: true });
3497exports.site = void 0;
3498var config_1 = require("./config");
3499var element_1 = require("./element");
3500var festivalpass_1 = require("./festivalpass");
3501var language_1 = require("./language");
3502var eventService_1 = require("./eventService");
3503var contentService_1 = require("./contentService");
3504var info_1 = require("./info");
3505//import { testContent } from "./testContent";
3506var eventType_1 = require("./eventType");
3507var share_1 = require("./share");
3508exports.site = {
3509    _locale: config_1.config.defaultLang,
3510    renderLanguageSelector: function (slug) {
3511        return __awaiter(this, void 0, void 0, function () {
3512            var swedishUrl, englishUrl;
3513            return __generator(this, function (_a) {
3514                swedishUrl = config_1.config.siteFolder + slug + "/";
3515                englishUrl = config_1.config.siteFolder + "en/" + slug + "/";
3516                return [2 /*return*/, "<div class=\"language-selector\"><a href=\"".concat(swedishUrl, "\" class=\"swedish\">Svenska</a> | <a href=\"").concat(englishUrl, "\" class=\"english\">English</a></div>")];
3517            });
3518        });
3519    },
3520    renderHeadLineAndMeta: function (event) {
3521        return __awaiter(this, void 0, void 0, function () {
3522            var template, _a;
3523            return __generator(this, function (_b) {
3524                switch (_b.label) {
3525                    case 0:
3526                        template = "";
3527                        if (event.eventType) {
3528                            template += "<p class=\"event-type\">".concat(eventType_1.eventType.getEventTypeDescription(event.eventType), "</p>");
3529                        }
3530                        _a = template;
3531                        return [4 /*yield*/, exports.site.renderLanguageSelector(event.slug)];
3532                    case 1:
3533                        template = _a + _b.sent();
3534                        template += "<h1 class=\"entry-title\">".concat(event.title, "</h1>");
3535                        template += "<div class=\"share-single\"><a href=\"#\" id=\"button-share-single\"><span>Share post</span></a></div>";
3536                        template += "<div class=\"single-meta\">";
3537                        if (event.dateTimeFormatted || event.venue) {
3538                            template += "<p class=\"time-and-place\">";
3539                        }
3540                        if (event.dateTimeFormatted) {
3541                            template += "".concat(event.dateTimeFormatted);
3542                        }
3543                        if (event.venue) {
3544                            if (event.dateTimeFormatted) {
3545                                template += "<br>";
3546                            }
3547                            template += "".concat(event.venueFormatted);
3548                        }
3549                        if (event.dateTimeFormatted || event.venue) {
3550                            template += "</p>";
3551                        }
3552                        // 2025 and before we showed doors opened on single view, removed since 2026
3553                        // if (event.doorsOpenFormatted) {
3554                        //     template += `<p class="doors-open">${language.get(
3555                        //         site._locale,
3556                        //         "Doors"
3557                        //     )} ${event.doorsOpenFormatted}</p>`;
3558                        // }
3559                        template += "<p class=\"ticket\">";
3560                        if (event.ticket) {
3561                            template += "<a href=\"".concat(event.ticket, "\">").concat(language_1.language.get(exports.site._locale, "BiljettPl"), "</a>");
3562                        }
3563                        template += "</p>";
3564                        template += "</div>";
3565                        $(template).prependTo(".single-description");
3566                        return [2 /*return*/];
3567                }
3568            });
3569        });
3570    },
3571    makeLargeImage: function () {
3572        var imageRef = $("#single-pane-content .single-description .wp-block-image:first");
3573        if (imageRef.length === 0) {
3574            imageRef = $("#single-pane-content .single-description figure:first");
3575        }
3576        var imageDetached = imageRef.detach();
3577        imageDetached.prependTo("#single-pane-content");
3578    },
3579    renderEventStatuses: function (event) {
3580        if (event.cancelled || event.soldOut) {
3581            var selector = "#single-pane-content > .wp-block-image";
3582            $(selector).addClass(event.extraCssClass);
3583            var labels = eventService_1.eventService.renderEventStatuses(event);
3584            $(labels).prependTo(selector);
3585        }
3586    },
3587    addWpEditLink: function (postId) {
3588        if ($("body").hasClass("logged-in")) {
3589            $(".custom-post-edit").remove();
3590            $("#wp-admin-bar-root-default").append('<li class="custom-post-edit"><a href="' +
3591                config_1.config.siteFolder +
3592                "wp-admin/post.php?post=" +
3593                postId +
3594                '&action=edit&lang=sv">Redigera inlägg</a></li>');
3595        }
3596    },
3597    handleWrappers: function () {
3598        return __awaiter(this, void 0, void 0, function () {
3599            return __generator(this, function (_a) {
3600                if (-1 ===
3601                    element_1.element.wrappers.mainWrapper.className.indexOf("single-focus")) {
3602                    element_1.element.wrappers.mainWrapper.className += " single-focus";
3603                }
3604                element_1.element.wrappers.navWrapper.className =
3605                    element_1.element.wrappers.navWrapper.className.replace(" toggled-on", "");
3606                element_1.element.wrappers.mainWrapper.className =
3607                    element_1.element.wrappers.mainWrapper.className.replace(" toggled-on", "");
3608                return [2 /*return*/];
3609            });
3610        });
3611    },
3612    addState: function (event) {
3613        var stateObj = { foo: "bar" };
3614        var urlParent = event.type === "info" ? "info/" : "";
3615        var url = config_1.config.getSiteRoot() + urlParent + event.slug + "/";
3616        history.pushState(stateObj, event.title, url);
3617    },
3618    renderSingle: function (event) {
3619        return __awaiter(this, void 0, void 0, function () {
3620            var fullContent, content;
3621            return __generator(this, function (_a) {
3622                switch (_a.label) {
3623                    case 0:
3624                        fullContent = $("<div/>").append(event.content);
3625                        content = '<div class="single-description">';
3626                        content += fullContent.html();
3627                        content += "</div>";
3628                        $("#single-pane-content").html(content);
3629                        if (!(event.type === "info")) return [3 /*break*/, 1];
3630                        $("#single-pane-content").addClass("no-top-image");
3631                        return [3 /*break*/, 3];
3632                    case 1:
3633                        exports.site.makeLargeImage();
3634                        return [4 /*yield*/, exports.site.renderHeadLineAndMeta(event)];
3635                    case 2:
3636                        _a.sent();
3637                        exports.site.renderEventStatuses(event);
3638                        _a.label = 3;
3639                    case 3: return [2 /*return*/];
3640                }
3641            });
3642        });
3643    },
3644    loadSinglePasses: function (event) {
3645        return __awaiter(this, void 0, void 0, function () {
3646            var addPipe, selector;
3647            return __generator(this, function (_a) {
3648                addPipe = false;
3649                if (event.passes) {
3650                    selector = ".single-meta .ticket";
3651                    if (event.ticket) {
3652                        //selector = ".single-meta .ticket";
3653                        addPipe = true;
3654                    }
3655                    festivalpass_1.festivalpass.load(event.passes, selector, addPipe, [], exports.site._locale);
3656                }
3657                return [2 /*return*/];
3658            });
3659        });
3660    },
3661    loadSingle: function (postId, postSlug, type) {
3662        return __awaiter(this, void 0, void 0, function () {
3663            var event;
3664            return __generator(this, function (_a) {
3665                switch (_a.label) {
3666                    case 0:
3667                        console.log("loadSingle", exports.site._locale);
3668                        $("#single-pane-content").html("");
3669                        event = undefined;
3670                        if (!(type === "info")) return [3 /*break*/, 2];
3671                        return [4 /*yield*/, info_1.info.getSingle(postId, postSlug)];
3672                    case 1:
3673                        event = (_a.sent());
3674                        return [3 /*break*/, 9];
3675                    case 2: return [4 /*yield*/, eventService_1.eventService.getSingleFromPreloaded(postId, postSlug)];
3676                    case 3:
3677                        event = _a.sent();
3678                        if (!!event) return [3 /*break*/, 5];
3679                        return [4 /*yield*/, contentService_1.contentService.getSingleFromPreloaded(postId, postSlug)];
3680                    case 4:
3681                        event = (_a.sent());
3682                        _a.label = 5;
3683                    case 5:
3684                        if (!!event) return [3 /*break*/, 7];
3685                        return [4 /*yield*/, eventService_1.eventService.getSingle(postId, postSlug)];
3686                    case 6:
3687                        event = _a.sent();
3688                        _a.label = 7;
3689                    case 7:
3690                        if (!!event) return [3 /*break*/, 9];
3691                        return [4 /*yield*/, contentService_1.contentService.getSingle(postId, postSlug)];
3692                    case 8:
3693                        event = (_a.sent());
3694                        _a.label = 9;
3695                    case 9: 
3696                    // if(event.title==='Addis-Dakar') {
3697                    //     event.timeAndPlace = event.timeAndPlace.replace('00–03','00–01 & 02-03');
3698                    // }
3699                    // console.log(event)
3700                    return [4 /*yield*/, exports.site.renderSingle(event)];
3701                    case 10:
3702                        // if(event.title==='Addis-Dakar') {
3703                        //     event.timeAndPlace = event.timeAndPlace.replace('00–03','00–01 & 02-03');
3704                        // }
3705                        // console.log(event)
3706                        _a.sent();
3707                        return [4 /*yield*/, exports.site.handleWrappers()];
3708                    case 11:
3709                        _a.sent();
3710                        return [4 /*yield*/, share_1.share.init(exports.site._locale, event)];
3711                    case 12:
3712                        _a.sent();
3713                        exports.site.addWpEditLink(event.id);
3714                        exports.site.addState(event);
3715                        // if (event.id < testContent.highestId) {
3716                        //     let testImage = testContent.getRandomImage();
3717                        //     let image = $("#single-pane-content .wp-block-image:first img");
3718                        //     image.attr("srcset", testImage);
3719                        //     image.attr("src", testImage);
3720                        //     //image.attr("width", "auto");
3721                        //     image.attr("height", "auto");
3722                        //     image.removeAttr("sizes");
3723                        // }
3724                        return [4 /*yield*/, exports.site.loadSinglePasses(event)];
3725                    case 13:
3726                        // if (event.id < testContent.highestId) {
3727                        //     let testImage = testContent.getRandomImage();
3728                        //     let image = $("#single-pane-content .wp-block-image:first img");
3729                        //     image.attr("srcset", testImage);
3730                        //     image.attr("src", testImage);
3731                        //     //image.attr("width", "auto");
3732                        //     image.attr("height", "auto");
3733                        //     image.removeAttr("sizes");
3734                        // }
3735                        _a.sent();
3736                        return [2 /*return*/];
3737                }
3738            });
3739        });
3740    },
3741    handleClick: function (that, type) {
3742        return __awaiter(this, void 0, void 0, function () {
3743            var singlePane, postId, postSlug, postFormat;
3744            return __generator(this, function (_a) {
3745                switch (_a.label) {
3746                    case 0:
3747                        singlePane = document.getElementById("single-pane");
3748                        postId = $(that).data("id");
3749                        postSlug = $(that).data("slug");
3750                        postFormat = $(that).data("format");
3751                        if ("link" === postFormat) {
3752                            return [2 /*return*/];
3753                        }
3754                        if (!(postId !== postSlug)) return [3 /*break*/, 2];
3755                        //$("#single-pane-content").html('');
3756                        if (singlePane) {
3757                            singlePane.scrollTop = 0;
3758                        }
3759                        return [4 /*yield*/, exports.site.loadSingle(postId, undefined, type)];
3760                    case 1:
3761                        _a.sent();
3762                        _a.label = 2;
3763                    case 2: return [2 /*return*/];
3764                }
3765            });
3766        });
3767    },
3768    listenBoxes: function () {
3769        console.log("site.listenBoxes");
3770        $("a.single-box").click(function (e) {
3771            exports.site.handleClick(this);
3772            e.stopPropagation();
3773            e.preventDefault();
3774        });
3775    },
3776    checkHash: function () {
3777        if (window.location.hash) {
3778            var slug = window.location.hash.replace("#", "");
3779            exports.site.loadSingle(undefined, slug);
3780            //Make sure logo is gone on mobile
3781            $(".site-title").addClass("scrolled");
3782        }
3783    },
3784    init: function (locale) {
3785        exports.site._locale = locale;
3786        //site._locale = 'en';//Local test
3787        console.log("site init", exports.site._locale);
3788    },
3789};
3790
3791},{"./config":4,"./contentService":5,"./element":6,"./eventService":7,"./eventType":8,"./festivalpass":10,"./info":12,"./language":13,"./share":20}],22:[function(require,module,exports){
3792"use strict";
3793var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3794    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3795    return new (P || (P = Promise))(function (resolve, reject) {
3796        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3797        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3798        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3799        step((generator = generator.apply(thisArg, _arguments || [])).next());
3800    });
3801};
3802var __generator = (this && this.__generator) || function (thisArg, body) {
3803    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
3804    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
3805    function verb(n) { return function (v) { return step([n, v]); }; }
3806    function step(op) {
3807        if (f) throw new TypeError("Generator is already executing.");
3808        while (g && (g = 0, op[0] && (_ = 0)), _) try {
3809            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
3810            if (y = 0, t) op = [op[0] & 2, t.value];
3811            switch (op[0]) {
3812                case 0: case 1: t = op; break;
3813                case 4: _.label++; return { value: op[1], done: false };
3814                case 5: _.label++; y = op[1]; op = [0]; continue;
3815                case 7: op = _.ops.pop(); _.trys.pop(); continue;
3816                default:
3817                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
3818                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
3819                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
3820                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
3821                    if (t[2]) _.ops.pop();
3822                    _.trys.pop(); continue;
3823            }
3824            op = body.call(thisArg, _);
3825        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
3826        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
3827    }
3828};
3829var __importDefault = (this && this.__importDefault) || function (mod) {
3830    return (mod && mod.__esModule) ? mod : { "default": mod };
3831};
3832Object.defineProperty(exports, "__esModule", { value: true });
3833exports.ticket = void 0;
3834var dayjs_1 = __importDefault(require("dayjs"));
3835var config_1 = require("./config");
3836var page_1 = require("./page");
3837var festivalpass_1 = require("./festivalpass");
3838var eventType_1 = require("./eventType");
3839exports.ticket = {
3840    _locale: config_1.config.defaultLang,
3841    removeAfterDays: 2,
3842    renderPass: function (pass) {
3843        var template = "";
3844        if (pass.backgroundColor) {
3845            template += "<style scoped=\"\">.ticket-box-".concat(pass.id, " { background-color: ").concat(pass.backgroundColor, "!important }</style>");
3846        }
3847        template += "<a href=\"".concat(pass.ticket, "\" class=\"single-box ticket-box ticket-box-").concat(pass.id, " ticket-type-").concat(pass.eventType, " sticky-").concat(pass.sticky, "\" title=\"").concat(pass.title, "\" rel=\"bookmark\" target=\"_blank\"><div class=\"caption-text\">");
3848        // if (pass.overTitle) {
3849        //     template += `<p>${pass.overTitle}</p>`;
3850        // }
3851        switch (pass.eventType) {
3852            case eventType_1.EventTypes.FESTIVAL:
3853                template += eventType_1.eventType.getEventTypeDescription(pass.eventType);
3854                break;
3855            case eventType_1.EventTypes.BEYOND:
3856                template += eventType_1.eventType.getEventTypeDescription(pass.eventType);
3857                break;
3858            case eventType_1.EventTypes.FESTIVAL_AND_BEYOND:
3859                template += eventType_1.eventType.getEventTypeDescription(pass.eventType);
3860                break;
3861            default:
3862        }
3863        template += "<h2>".concat(pass.title, "</h2>");
3864        template += '<p class="time-and-place">';
3865        if (pass.dateFormatted) {
3866            template += "".concat(pass.dateFormatted);
3867        }
3868        if (pass.venueFormatted) {
3869            template += "<br>".concat(pass.venueFormatted);
3870        }
3871        else {
3872            template += "<br>&nbsp;";
3873        }
3874        template += "</p>";
3875        template += "</div></a>";
3876        $("#content").append(template);
3877    },
3878    parsePass: function (pass, locale) {
3879        exports.ticket.renderPass(pass);
3880    },
3881    parse: function (passes, locale) {
3882        var _this = this;
3883        passes.forEach(function (pass) {
3884            if (pass.ticket !== "" && pass.ticket !== undefined) {
3885                _this.parsePass(pass, locale);
3886            }
3887        });
3888    },
3889    load: function (locale) {
3890        var programCategoryId = page_1.sitemap[page_1.Locales[exports.ticket._locale]].PROGRAM.category;
3891        $.get(config_1.config.getRestUrl() +
3892            "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(programCategoryId, "&&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC"), function (posts) {
3893            exports.ticket.parse(posts, locale);
3894        });
3895    },
3896    loadTickets: function () {
3897        return __awaiter(this, void 0, void 0, function () {
3898            var programCategoryId, url;
3899            return __generator(this, function (_a) {
3900                switch (_a.label) {
3901                    case 0:
3902                        programCategoryId = page_1.sitemap[page_1.Locales[exports.ticket._locale]].PROGRAM.category;
3903                        url = config_1.config.getRestUrl() +
3904                            "posts/?per_page=".concat(config_1.config.pageSize, "&categories=").concat(programCategoryId, "&filter[orderby]=meta_value_num&filter[meta_key]=datum&filter[order]=ASC");
3905                        console.log("loadTickets", url);
3906                        return [4 /*yield*/, $.get(url)];
3907                    case 1: return [2 /*return*/, _a.sent()];
3908                }
3909            });
3910        });
3911    },
3912    init: function (locale) {
3913        return __awaiter(this, void 0, void 0, function () {
3914            var passes, postTickets, tickets;
3915            return __generator(this, function (_a) {
3916                switch (_a.label) {
3917                    case 0:
3918                        exports.ticket._locale = locale;
3919                        return [4 /*yield*/, festivalpass_1.festivalpass.getPasses(locale)];
3920                    case 1:
3921                        passes = _a.sent();
3922                        return [4 /*yield*/, festivalpass_1.festivalpass.sortByDate(passes)];
3923                    case 2:
3924                        _a.sent();
3925                        return [4 /*yield*/, festivalpass_1.festivalpass.sortBySticky(passes)];
3926                    case 3:
3927                        _a.sent();
3928                        return [4 /*yield*/, exports.ticket.loadTickets()];
3929                    case 4:
3930                        postTickets = _a.sent();
3931                        tickets = [];
3932                        return [4 /*yield*/, postTickets.forEach(function (ticket) {
3933                                tickets.push(festivalpass_1.festivalpass.convert(ticket, locale));
3934                            })];
3935                    case 5:
3936                        _a.sent();
3937                        passes = passes.concat(tickets);
3938                        return [4 /*yield*/, festivalpass_1.festivalpass.filterOld(passes, (0, dayjs_1.default)().subtract(exports.ticket.removeAfterDays, "days").toDate())];
3939                    case 6:
3940                        passes = _a.sent();
3941                        //await festivalpass.sortByDate(passes);
3942                        //console.log(passes)
3943                        console.log(tickets);
3944                        return [4 /*yield*/, festivalpass_1.festivalpass.sortByDate(passes)];
3945                    case 7:
3946                        _a.sent();
3947                        console.log(passes);
3948                        return [4 /*yield*/, festivalpass_1.festivalpass.sortBySticky(passes)];
3949                    case 8:
3950                        passes = _a.sent();
3951                        console.log("Sorted", passes);
3952                        exports.ticket.parse(passes, locale);
3953                        console.log("ticket init");
3954                        return [2 /*return*/];
3955                }
3956            });
3957        });
3958    },
3959};
3960
3961},{"./config":4,"./eventType":8,"./festivalpass":10,"./page":16,"dayjs":25}],23:[function(require,module,exports){
3962"use strict";
3963Object.defineProperty(exports, "__esModule", { value: true });
3964exports.validDate = void 0;
3965var validDate = function (date) { return !isNaN(date) && date instanceof Date; };
3966exports.validDate = validDate;
3967
3968},{}],24:[function(require,module,exports){
3969"use strict";
3970var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3971    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3972    return new (P || (P = Promise))(function (resolve, reject) {
3973        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3974        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3975        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3976        step((generator = generator.apply(thisArg, _arguments || [])).next());
3977    });
3978};
3979var __generator = (this && this.__generator) || function (thisArg, body) {
3980    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
3981    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
3982    function verb(n) { return function (v) { return step([n, v]); }; }
3983    function step(op) {
3984        if (f) throw new TypeError("Generator is already executing.");
3985        while (g && (g = 0, op[0] && (_ = 0)), _) try {
3986            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
3987            if (y = 0, t) op = [op[0] & 2, t.value];
3988            switch (op[0]) {
3989                case 0: case 1: t = op; break;
3990                case 4: _.label++; return { value: op[1], done: false };
3991                case 5: _.label++; y = op[1]; op = [0]; continue;
3992                case 7: op = _.ops.pop(); _.trys.pop(); continue;
3993                default:
3994                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
3995                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
3996                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
3997                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
3998                    if (t[2]) _.ops.pop();
3999                    _.trys.pop(); continue;
4000            }
4001            op = body.call(thisArg, _);
4002        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
4003        if (op[0] & 5) throw op[1];
4003 return { value: op[0] ? op[1] : void 0, done: true };
4004    }
4005};
4006Object.defineProperty(exports, "__esModule", { value: true });
4007exports.venueService = void 0;
4008var config_1 = require("./config");
4009var TBA = "tba";
4010exports.venueService = {
4011    _locale: config_1.config.defaultLang,
4012    allVenues: [],
4013    getVenueOrTBA: function (post) {
4014        var _a, _b;
4015        var venue = exports.venueService.allVenues.find(function (v) { var _a; return v.id === ((_a = post.acf.scen) === null || _a === void 0 ? void 0 : _a.ID); });
4016        if (!venue) {
4017            if ((_a = post.acf) === null || _a === void 0 ? void 0 : _a.scen) {
4018                // Fix for external events
4019                venue = {
4020                    id: 0,
4021                    title: (_b = post.acf["scen"]) === null || _b === void 0 ? void 0 : _b.post_title,
4022                    slug: TBA,
4023                    active: true,
4024                };
4025            }
4026            venue = {
4027                id: 0,
4028                title: TBA,
4029                slug: TBA,
4030                active: true,
4031            };
4032        }
4033        return venue;
4034    },
4035    convert: function (post, locale) {
4036        var event = {
4037            id: post.id,
4038            slug: post.slug,
4039            title: post.title.rendered,
4040            content: post.content["rendered"],
4041            map: post.acf.karta,
4042            address: post.acf.adress || "",
4043            logo: post.acf.logotyp,
4044            color: post.acf.farg,
4045            type: post.type,
4046            active: post.acf.aktiv,
4047            //viewOrder: post.acf.ordning,
4048        };
4049        return event;
4050    },
4051    append: function (content, venue) {
4052        var _a;
4053        console.log("append", venue);
4054        var template = "<p><a href=\"".concat(venue.map, "\" data-id=\"").concat(venue.id, "\" data-slug=\"").concat(venue.slug, "\" title=\"").concat(venue.title, "\" rel=\"bookmark\">\n            ").concat(venue.title, "\n            </a><br>\n            ").concat((_a = venue.address) === null || _a === void 0 ? void 0 : _a.replace("\n", "<br>"), "</p>");
4055        content.content += template;
4056        //$(`#content`).append(template);
4057    },
4058    filterActive: function (venues) {
4059        return venues.filter(function (venue) {
4060            return venue.active;
4061        });
4062    },
4063    load: function () {
4064        return __awaiter(this, void 0, void 0, function () {
4065            return __generator(this, function (_a) {
4066                switch (_a.label) {
4067                    case 0: return [4 /*yield*/, $.get(config_1.config.getRestUrl() +
4068                            "scen?per_page=".concat(config_1.config.pageSize, "&filter[orderby]=title&order=asc"))];
4069                    case 1: return [2 /*return*/, _a.sent()];
4070                }
4071            });
4072        });
4073    },
4074    loadSingle: function (postId, postSlug) {
4075        return __awaiter(this, void 0, void 0, function () {
4076            var query, result;
4077            return __generator(this, function (_a) {
4078                switch (_a.label) {
4079                    case 0:
4080                        query = "";
4081                        if (postId !== undefined) {
4082                            query += postId;
4083                        }
4084                        else {
4085                            query += "?slug=" + postSlug;
4086                        }
4087                        return [4 /*yield*/, $.get(config_1.config.getRestUrl() + "scen/" + query)];
4088                    case 1:
4089                        result = _a.sent();
4090                        if (result.length === 1) {
4091                            // By slug returns array
4092                            return [2 /*return*/, result[0]];
4093                        }
4094                        return [2 /*return*/, result];
4095                }
4096            });
4097        });
4098    },
4099    getSingle: function (postId, postSlug) {
4100        return __awaiter(this, void 0, void 0, function () {
4101            var _a, _b;
4102            return __generator(this, function (_c) {
4103                switch (_c.label) {
4104                    case 0:
4105                        console.log("venueService.getSingle ".concat(postId, " ").concat(postSlug));
4106                        _b = (_a = exports.venueService).convert;
4107                        return [4 /*yield*/, exports.venueService.loadSingle(postId, postSlug)
vendor: 8,147 bytes, lines 4107-4169
4107];
4108                    case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(), exports.venueService._locale])];
4109                }
4110            });
4111        });
4112    },
4113    getSingleFromPreloaded: function (postId, postSlug) {
4114        return __awaiter(this, void 0, void 0, function () {
4115            var query;
4116            return __generator(this, function (_a) {
4117                console.log("venueService.allContents.length", exports.venueService.allVenues.length);
4118                query = function (event) { return event.id === postId; };
4119                if (postSlug !== undefined) {
4120                    query = function (event) { return event.id === postId; };
4121                }
4122                return [2 /*return*/, exports.venueService.allVenues.find(query)];
4123            });
4124        });
4125    },
4126    get: function (locale) {
4127        return __awaiter(this, void 0, void 0, function () {
4128            var posts, contents;
4129            return __generator(this, function (_a) {
4130                switch (_a.label) {
4131                    case 0:
4132                        if (exports.venueService.allVenues.length > 0) {
4133                            return [2 /*return*/, exports.venueService.allVenues];
4134                        }
4135                        return [4 /*yield*/, exports.venueService.load()];
4136                    case 1:
4137                        posts = _a.sent();
4138                        contents = [];
4139                        posts.forEach(function (post) {
4140                            contents.push(exports.venueService.convert(post, locale));
4141                        });
4142                        //contents = venues.sortSticky(contents);
4143                        contents = exports.venueService.filterActive(contents);
4144                        return [2 /*return*/, contents];
4145                }
4146            });
4147        });
4148    },
4149    init: function (locale) {
4150        return __awaiter(this, void 0, void 0, function () {
4151            var _a;
4152            return __generator(this, function (_b) {
4153                switch (_b.label) {
4154                    case 0:
4155                        exports.venueService._locale = locale;
4156                        _a = exports.venueService;
4157                        return [4 /*yield*/, exports.venueService.get(locale)];
4158                    case 1:
4159                        _a.allVenues = _b.sent();
4160                        console.log("venueService init", exports.venueService._locale);
4161                        return [2 /*return*/];
4162                }
4163            });
4164        });
4165    },
4166};
4167
4168},{"./config":4}],25:[function(require,module,exports){
4169!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h="set"+(this.$u?"UTC":""),l=(n={},n[a]=h+"Date",n[d]=h+"Date",n[f]=h+"Month",n[c]=h+"FullYear",n[u]=h+"Hours",n[s]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,"0")},d=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,"0"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,"0"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(":","")}))}
4169,m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",f],["$y",c],["$D",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));
4170},{}],26:[function(require,module,exports){
4171!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sv=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d}));
4172},{"dayjs":25}],27:[function(require,module,exports){
4173!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isBetween=i()}(this,(function(){"use strict";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r="("===(f=f||"()")[0],u=")"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}}));
4174},{}],28:[function(require,module,exports){
4175!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrAfter=t()}(this,(function(){"use strict";return function(e,t){t.prototype.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)}}}));
4176},{}],29:[function(require,module,exports){
4177!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){"use strict";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}}));
4178},{}],30:[function(require,module,exports){
4179!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t="YYYY-MM-DDTHH:mm:ssZ");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));
4180},{}]},{},[1])
4181//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvdHMvc3JjL21haW4udHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvYnV0dG9uLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2NhbGVuZGFyLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2NvbmZpZy50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9jb250ZW50U2VydmljZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9lbGVtZW50LnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2V2ZW50U2VydmljZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9ldmVudFR5cGUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvZXh0ZXJuYWxFdmVudFNlcnZpY2UudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvZmVzdGl2YWxwYXNzLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL2hpc3RvcmljYWwudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvaW5mby50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9sYW5ndWFnZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9sb2dvLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL25ld3MudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvcGFnZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy9wb2RzLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL3Byb2dyYW0udHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2NoZWR1bGUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2hhcmUudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvc2l0ZS50cyIsImFzc2V0cy90cy9zcmMvbW9kdWxlcy90aWNrZXQudHMiLCJhc3NldHMvdHMvc3JjL21vZHVsZXMvdmFsaWREYXRlLnRzIiwiYXNzZXRzL3RzL3NyYy9tb2R1bGVzL3ZlbnVlU2VydmljZS50cyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvbG9jYWxlL3N2LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9sb2NhbGl6ZWRGb3JtYXQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQSwyQ0FBMEM7QUFDMUMsdUNBQWdGO0FBQ2hGLHVDQUFzQztBQUN0Qyx1Q0FBc0M7QUFDdEMsMkNBQTBDO0FBQzFDLHVDQUFzQztBQUN0Qyw2Q0FBNEM7QU
4181FDNUMsK0NBQThDO0FBQzlDLDJDQUEwQztBQUMxQywrQ0FBOEM7QUFDOUMsdUNBQXNDO0FBQ3RDLHVDQUFzQztBQUN0QywyREFBMEQ7QUFDMUQsdURBQXNEO0FBQ3RELGlEQUFnRDtBQUVoRCxJQUFNLGVBQWUsR0FBRyxDQUFDLFlBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0QyxJQUFJLE1BQU0sR0FBRztJQUNULFdBQVcsRUFBRSxjQUFPLENBQUMsY0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUk7SUFDckMsSUFBSSxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozs0QkFDaEMscUJBQU0sMkJBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUEvQixTQUErQixDQUFDO3dCQUNoQyxxQkFBTSxXQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBdkIsU0FBdUIsQ0FBQzt3QkFFcEIsUUFBUSxHQUFHLE1BQU0sS0FBSyxjQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFdkMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDeEQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBRWxFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUVmLHFCQUFNLFdBQUksQ0FBQyxhQUFhLENBQ3JDLE9BQU8sRUFDUCxPQUFPLEVBQ1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QUUsS0FBSyxNQUFNLEVBQW5CLENBQW1CLENBQUM7aUJBQzVEO2dCQUNELHNCQUFPLG9CQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQzs7O0tBQzdDO0lBQ0QsR0FBRyxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozt3QkFDL0IsSUFBSSxvQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNuQyxzQkFBTyxvQkFBWSxDQUFDLFNBQVMsRUFBQzt5QkFDakM7d0JBQ1cscUJBQU0sb0JBQVksQ0FBQyxJQUFJLEVBQUUsRUFBQTs7d0JBQWpDLEtB
4181QUssR0FBRyxTQUF5Qjt3QkFDakMsUUFBUSxHQUF1QixFQUFFLENBQUM7d0JBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQyxJQUFTOzRCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0RCxDQUFDLENBQUMsQ0FBQzt3QkFDSCx5Q0FBeUM7d0JBQ3pDLFFBQVEsR0FBRyxvQkFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDL0Msc0JBQU8sUUFBUSxFQUFDOzs7O0tBQ25CO0lBQ0QsSUFBSSxFQUFFLFVBQWdCLE1BQWM7Ozs7Ozt3QkFDaEMsb0JBQVksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO3dCQUM5QixLQUFBLG9CQUFZLENBQUE7d0JBQWEscUJBQU0sb0JBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUF2RCxHQUFhLFNBQVMsR0FBRyxTQUE4QixDQUFDO3dCQUV4RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLG9CQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7O0tBQzFEO0NBQ0osQ0FBQzs7O0FDM0lGOztBQ0FBOztBQ0FBOztBQ0FBOztBQ0FBOztBQ0FBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vbW9kdWxlcy9jb25maWdcIjtcbmltcG9ydCB7IHBhZ2UsIFBhZ2VzLCBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9tb2R1bGVzL3BhZ2VcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9tb2R1bGVzL3NpdGVcIjtcbmltcG9ydCB7IGxvZ28gfSBmcm9tIFwiLi9tb2R1bGVzL2xvZ29cIjtcbmltcG9ydCB7IGJ1dHRvbiB9IGZyb20gXCIuL21vZHVsZXMvYnV0dG9uXCI7XG5pbXBvcnQgeyBuZXdzIH0gZnJvbSBcIi4vbW9kdWxlcy9uZXdzXCI7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcIi4vbW9kdWxlcy9wcm9ncmFtXCI7XG5pbXBvcnQgeyBjYWxlbmRhciB9IGZyb20gXCIuL21vZHVsZXMvY2FsZW5kYXJcIjtcbmltcG9ydCB7IHRpY2tldCB9IGZyb20gXCIuL21vZHVsZXMvdGlja2V0XCI7XG5pbXBvcnQgeyBzY2hlZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvc2NoZWR1bGVcIjtcbmltcG9ydCB7IGluZm8gfSBmcm9tIFwiLi9tb2R1bGVzL2luZm9cIjtcbmltcG9ydCB7IHBvZHMgfSBmcm9tIFwiLi9tb2R1bGVzL3BvZHNcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50U2VydmljZVwiO1xuaW1wb3J0IHsgZXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kdWxlcy9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGV2ZW50VHlwZSB9IGZyb20gXCIuL21vZHVsZXMvZXZlbnRUeXBlXCI7XG5cbmNvbnN0IHBhZ2VzV3BSZW5kZXJlZCA9IFtQYWdlcy5QUkVTU107XG5cbnZhciBzeXN0ZW0gPSB7XG4gICAgY3VycmVudFBhZ2U6IHNpdGVtYXBbTG9jYWxlcy5zdl0uTkVXUyxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgYXdhaXQgZXZlbnRTZXJ2aWNlLmluaXQobG9jYWxlKTtcbiAgICAgICAgYXdhaXQgc2l0ZS5pbml0KGxvY2FsZSk7XG5cbiAgICAgICAgbGV0IHVybEluZGV4ID0gbG9jYWxlID09PSBMb2NhbGVzLmVuID8gMyA6IDI7XG5cbiAgICAgICAgY29uc3QgcGFnZVVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIilbdXJsSW5kZXhdO1xuICAgICAgICBjb25zdCBzdWJQYWdlID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKVt1cmxJbmRleCArIDFdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXCIsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGFnZVVybFwiLCBwYWdlVXJsKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdWJQYWdlXCIsIHN1YlBhZ2UpO1xuXG4gICAgICAgIGNvbnN0IHNpdGVQYWdlID0gYXdhaXQgcGFnZS5maW5kUGFnZUJ5VXJsKFxuICAgICAgICAgICAgcGFnZVVybCxcbiAgICAgICAgICAgIHN1YlBhZ2UsXG4gICAgICAgICAgICBMb2NhbGVzW2xvY2FsZSBhcyBMb2NhbGVzXVxuICAgICAgICApO1xuICAgICAgICBzeXN0ZW0uY3VycmVudFBhZ2UgPSBzaXRlUGFnZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzeXN0ZW0uY3VycmVudFBhZ2U6IFwiLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuXG4gICAgICAgIGlmIChwYWdlc1dwUmVuZGVyZWQuaW5jbHVkZXModGhpcy5jdXJyZW50UGFnZT8ucGFnZSkpIHtcbiAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLmluaXQobG9jYWxlLCBzaXRlUGFnZS5jYXRlZ29yeSk7XG4gICAgICAgICAgICBzaXRlLmxpc3RlbkJveGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluaXRQYWdlTW9kdWxlcyhsb2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2l0ZS5jaGVja0hhc2goKTtcblxuICAgICAgICBsb2dvLmluaXQoKTtcbiAgICAgICAgYnV0dG9uLmluaXQoKTtcbiAgICAgICAgZXZlbnRUeXBlLmluaXQobG9jYWxlKTtcbiAgICB9LFxuICAgIGluaXRQYWdlTW9kdWxlczogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghc3lzdGVtLmN1cnJlbnRQYWdlPy5wYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgI
4181H1cblxuICAgICAgICBpZiAoc3lzdGVtLmN1cnJlbnRQYWdlLnBhZ2UgPT09IFBhZ2VzLk5FV1MpIHtcbiAgICAgICAgICAgIG5ld3MuaW5pdChsb2NhbGUsIHN5c3RlbS5jdXJyZW50UGFnZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3lzdGVtLmN1cnJlbnRQYWdlLnBhZ2UgPT09IFBhZ2VzLlBST0dSQU0pIHtcbiAgICAgICAgICAgIHByb2dyYW0uaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5TQ0hFRFVMRSkge1xuICAgICAgICAgICAgc2NoZWR1bGUuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5DQUxFTkRBUikge1xuICAgICAgICAgICAgY2FsZW5kYXIuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5USUNLRVRTKSB7XG4gICAgICAgICAgICB0aWNrZXQuaW5pdChsb2NhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5JTkZPKSB7XG4gICAgICAgICAgICBpbmZvLmluaXQobG9jYWxlLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbS5jdXJyZW50UGFnZS5wYWdlID09PSBQYWdlcy5QT0RDQVNUKSB7XG4gICAgICAgICAgICBwb2RzLmluaXQobG9jYWxlLCBzeXN0ZW0uY3VycmVudFBhZ2UpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRMb2NhbGVGcm9tSHRtbDogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbG9jYWxlT2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdO1xuICAgICAgICBsZXQgbG9jYWxlID0gY29uZmlnLmRlZmF1bHRMYW5nO1xuICAgICAgICBpZiAobG9jYWxlT2JqZWN0KSB7XG4gICAgICAgICAgICBsb2NhbGUgPVxuICAgICAgICAgICAgICAgIGxvY2FsZU9iamVjdC5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpPy5zdWJzdHJpbmcoMCwgMikgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuZGVmYXVsdExhbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICB9LFxufTtcblxuLypcbiAqIEdsb2JhbFxuICovXG5leHBvcnQgbGV0IGxvY2FsZSA9IFwic3ZcIjtcblxuJChkb2N1bWVudCkucmVhZHkoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBsb2NhbGUgPSBhd2FpdCBzeXN0ZW0uZ2V0TG9jYWxlRnJvbUh0bWwoKTtcbiAgICBhd2FpdCBjb25maWcuY29uZmlndXJlTG9jYWxlKGxvY2FsZSk7XG5cbiAgICBhd2FpdCBzeXN0ZW0uaW5pdChsb2NhbGUpO1xufSk7IiwiaW1wb3J0IHsgZWxlbWVudCB9IGZyb20gJy4vZWxlbWVudCc7XG5cbnR5cGUgSW5pdGlhbERhdGEgPSB7XG4gICAgb3ZlcnZpZXdVcmw6IHN0cmluZztcbn07XG5cbmNvbnN0IGluaXRpYWxEYXRhID0gKHdpbmRvdyBhcyBhbnkpLl9fSU5JVElBTF9EQVRBX18gYXMgSW5pdGlhbERhdGE7XG5cbmV4cG9ydCBjb25zdCBidXR0b24gPSB7XG4gICAgbGlzdGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uVG9nZ2xlKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uVG9nZ2xlLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAtMSAhPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyPy5jbGFzc05hbWUuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidG9nZ2xlZC1vblwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm5hdldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdG9nZ2xlZC1vblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdG9nZ2xlZC1vblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSArPSBcIiB0b2dnbGVkLW9uXCI7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lICs9IFwiIHRvZ2dsZWQtb25cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG51bGwgIT09IGVsZW1lbnQuYnV0dG9ucy5idXR0b25Ub2dnbGVNb2JpbGUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25Ub2dnbGVNb2JpbGUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIC0xICE9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLmluZGV4T2YoXCJ0b2dnbGVkLW9uXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgI
4181H0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUgKz0gXCIgdG9nZ2xlZC1vblwiO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSArPSBcIiB0b2dnbGVkLW9uXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaW5nbGVQYW5lKSB7XG4gICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaW5nbGVQYW5lLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5uYXZXcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHRvZ2dsZWQtb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiB0b2dnbGVkLW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgc2luZ2xlLWZvY3VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgc2hhcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZU9iaiA9IHsgZm9vOiBcImJhclwiIH07XG4gICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGVPYmosIFwiXCIsIGluaXRpYWxEYXRhLm92ZXJ2aWV3VXJsKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAobnVsbCAhPT0gZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlKSB7XG4gICAgICAgIC8vICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoLTEgPT09IGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLmluZGV4T2YoJ3NoYXJlJykpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gJyBzaGFyZSc7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uQ2xvc2VTaGFyZSkge1xuICAgICAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvbkNsb3NlU2hhcmUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubWFpbldyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBzaGFyZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsICE9PSBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVVybC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgIFwiY2xpY2tcIixcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
4181XIgdGV4dCA9IGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gKioqIFRoaXMgc3R5bGluZyBpcyBhbiBleHRyYSBzdGVwIHdoaWNoIGlzIGxpa2VseSBub3QgcmVxdWlyZWQuICoqKlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBXaHkgaXMgaXQgaGVyZT8gVG8gZW5zdXJlOlxuICAgICAgICAgICAgICAgICAgICAvLyAxLiB0aGUgZWxlbWVudCBpcyBhYmxlIHRvIGhhdmUgZm9jdXMgYW5kIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gaWYgZWxlbWVudCB3YXMgdG8gZmxhc2ggcmVuZGVyIGl0IGhhcyBtaW5pbWFsIHZpc3VhbCBpbXBhY3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIDMuIGxlc3MgZmxha3luZXNzIHdpdGggc2VsZWN0aW9uIGFuZCBjb3B5aW5nIHdoaWNoICoqbWlnaHQqKiBvY2N1ciBpZlxuICAgICAgICAgICAgICAgICAgICAvLyAgICB0aGUgdGV4dGFyZWEgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxpa2VsaWhvb2QgaXMgdGhlIGVsZW1lbnQgd29uJ3QgZXZlbiByZW5kZXIsIG5vdCBldmVuIGEgZmxhc2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHNvbWUgb2YgdGhlc2UgYXJlIGp1c3QgcHJlY2F1dGlvbnMuIEhvd2V2ZXIgaW4gSUUgdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgdmlzaWJsZSB3aGlsc3QgdGhlIHBvcHVwIGJveCBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gZm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB3ZWIgcGFnZSB0byBjb3B5IHRvIHRoZSBjbGlwYm9hcmQuXG4gICAgICAgICAgICAgICAgICAgIC8vXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUGxhY2UgaW4gdG9wLWxlZnQgY29ybmVyIG9mIHNjcmVlbiByZWdhcmRsZXNzIG9mIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5sZWZ0ID0gXCIwXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGl0IGhhcyBhIHNtYWxsIHdpZHRoIGFuZCBoZWlnaHQuIFNldHRpbmcgdG8gMXB4IC8gMWVtXG4gICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3Qgd29yayBhcyB0aGlzIGdpdmVzIGEgbmVnYXRpdmUgdy9oIG9uIHNvbWUgYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLndpZHRoID0gXCIyZW1cIjtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gXCIyZW1cIjtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHBhZGRpbmcsIHJlZHVjaW5nIHRoZSBzaXplIGlmIGl0IGRvZXMgZmxhc2ggcmVuZGVyLlxuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5wYWRkaW5nID0gXCIwXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYW55IGJvcmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLmJveFNoYWRvdyA9IFwibm9uZVwiO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIGZsYXNoIG9mIHdoaXRlIGJveCBpZiByZW5kZXJlZCBmb3IgYW55IHJlYXNvbi5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc3R5bGUuYmFja2dyb3VuZCA9IFwidHJhbnNwYXJlbnRcIjtcblxuICAgICAgICAgICAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IHRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IHN1Y2Nlc3NmdWwgPyBcInN1Y2Nlc3NmdWxcIiA6IFwidW5zdWNjZXNzZnVsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvcHlpbmcgdGV4dCBjb21tYW5kIHdhcyBcIiArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJPb3BzLCB1bmFibGUgdG8gY29weVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaW5uZXJIVE1MID0gXCJVcmwgKENvcGllZClcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiYnV0dG9uIGluaXRcIik7XG5cbiAgICAgICAgYnV0dG9uLmxpc3RlbigpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZSB9IGZyb20gJy4vc2l0ZSc7XG5pbXBvcnQgeyBmZXN0aXZhbHBhc3MsIENsYW5kZXN0aW5vUGFzcyB9IGZyb20gXCIuL2Zlc3RpdmFscGFzc1wiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tICcuL2xhbmd1YWdlJztcbmltcG9ydCB7
4181IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCwgU29ydE9yZGVyIH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBleHRlcm5hbEV2ZW50U2VydmljZSB9IGZyb20gXCIuL2V4dGVybmFsRXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBldmVudFR5cGUsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IGNhbGVuZGFyID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBhbGxQYXNzZXM6IFtdIGFzIENsYW5kZXN0aW5vUGFzc1tdLFxuICAgIHJlbmRlck1vbnRoOiBmdW5jdGlvbiAocG9zdERhdGU6IGRheWpzLkRheWpzLCBhZGROb3c6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IG5vd1N0cmluZyA9IGFkZE5vdyA/ICdpZD1cIm5vd1wiICcgOiBcIlwiO1xuICAgICAgICAkKFwiLmVudHJ5LWNvbnRlbnRcIikuYXBwZW5kKFxuICAgICAgICAgICAgYDxoMiAke25vd1N0cmluZ31jbGFzcz1cIm1vbnRoLWhlYWRlclwiPiR7cG9zdERhdGUuZm9ybWF0KFxuICAgICAgICAgICAgICAgIFwiTU1NTSBZWVlZXCJcbiAgICAgICAgICAgICl9PC9oMj5gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJDYWxlbmRhckJveDogZnVuY3Rpb24gKHBvc3RZZWFyOiBudW1iZXIsIHBvc3RNb250aDogbnVtYmVyKSB7XG4gICAgICAgICQoXCIuZW50cnktY29udGVudFwiKS5hcHBlbmQoXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWJveC0ke3Bvc3RZZWFyfS0ke3Bvc3RNb250aH1cIj5gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpc0RhdGVCZWZvcmVUb2RheShkYXRlOiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBuZXcgRGF0ZShkYXRlLnRvRGF0ZVN0cmluZygpKSA8IG5ldyBEYXRlKG5ldyBEYXRlKCkudG9EYXRlU3RyaW5nKCkpXG4gICAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJQb3N0OiBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50WWVhcjogbnVtYmVyLFxuICAgICAgICBldmVudE1vbnRoOiBudW1iZXIsXG4gICAgICAgIGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50XG4gICAgKSB7XG4gICAgICAgIGxldCBhcmNoaXZlQ2xhc3MgPSBjYWxlbmRhci5pc0RhdGVCZWZvcmVUb2RheShldmVudC5zdGFydFRpbWUpXG4gICAgICAgICAgICA/IFwiIGFyY2hpdmVcIlxuICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICBsZXQgdGVtcGxhdGUgPSBgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWl0ZW0gJHtcbiAgICAgICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgfHwgXCJcIlxuICAgICAgICB9JHthcmNoaXZlQ2xhc3N9XCIgZGF0YS1pZD1cIiR7ZXZlbnQuaWR9XCIgZGF0YS1saW5rPVwiJHtcbiAgICAgICAgICAgIGV2ZW50LmxpbmtcbiAgICAgICAgfVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjoke2V2ZW50LmJhY2tncm91bmRDb2xvcn1cIj48ZGl2PmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50VHlwZShldmVudCk7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYDxoMj4ke2V2ZW50LnRpdGxlfTwvaDI+YDtcblxuICAgICAgICB0ZW1wbGF0ZSArPSAnPHAgY2xhc3M9XCJ0aW1lLWFuZC1wbGFjZVwiPic7XG4gICAgICAgIHRlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvcD5cIjtcblxuICAgICAgICB0ZW1wbGF0ZSArPSBgPHAgY2xhc3M9XCJ0aWNrZXRcIj5gO1xuICAgICAgICBpZiAoZXZlbnQudGlja2V0KSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGEgaHJlZj1cIiR7XG4gICAgICAgICAgICAgICAgZXZlbnQudGlja2V0XG4gICAgICAgICAgICB9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtsYW5ndWFnZS5nZXQoc2l0ZS5fbG9jYWxlLCBcIkJpbGpldHRQbFwiKX08
4181L2E+YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9wPmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYDwvZGl2PjwvZGl2PmA7XG5cbiAgICAgICAgJChgLmNhbGVuZGFyLWJveC0ke2V2ZW50WWVhcn0tJHtldmVudE1vbnRofWApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBwYXJzZVBvc3Q6IGZ1bmN0aW9uIChcbiAgICAgICAgY3VycmVudFllYXI6IG51bWJlcixcbiAgICAgICAgY3VycmVudE1vbnRoOiBudW1iZXIsXG4gICAgICAgIGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50XG4gICAgKSB7XG4gICAgICAgIHZhciBldmVudFllYXIgPSBkYXlqcyhldmVudC5zdGFydERhdGUpLnllYXIoKTtcbiAgICAgICAgdmFyIGV2ZW50TW9udGggPSBkYXlqcyhldmVudC5zdGFydERhdGUpLm1vbnRoKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coZXZlbnQuc3RhcnREYXRlLCBldmVudFllYXIsIGV2ZW50TW9udGgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjdXJyZW50WWVhciA9PT0gLTEgfHxcbiAgICAgICAgICAgIGN1cnJlbnRZZWFyICE9PSBldmVudFllYXIgfHxcbiAgICAgICAgICAgIGN1cnJlbnRNb250aCA9PT0gLTEgfHxcbiAgICAgICAgICAgIGN1cnJlbnRNb250aCAhPT0gZXZlbnRNb250aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBub3cgPSBkYXlqcygpO1xuICAgICAgICAgICAgbGV0IGFkZE5vdyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXG4gICAgICAgICAgICAvLyAgICAgXCJldmVudFllYXJcIixcbiAgICAgICAgICAgIC8vICAgICBldmVudFllYXIsXG4gICAgICAgICAgICAvLyAgICAgXCJldmVudE1vbnRoXCIsXG4gICAgICAgICAgICAvLyAgICAgZXZlbnRNb250aCxcbiAgICAgICAgICAgIC8vICAgICBcIm5vdy5tb250aCgpKzFcIixcbiAgICAgICAgICAgIC8vICAgICBub3cubW9udGgoKSArIDFcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWFkZE5vdyAmJlxuICAgICAgICAgICAgICAgIG5vdy55ZWFyKCkgPT09IGV2ZW50WWVhciAmJlxuICAgICAgICAgICAgICAgIChub3cubW9udGgoKSArIDEgPT09IGV2ZW50TW9udGggfHxcbiAgICAgICAgICAgICAgICAgICAgbm93Lm1vbnRoKCkgKyAxID49IGV2ZW50TW9udGgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZE5vd1wiLCBub3cuZm9ybWF0KFwiTU1NTSBZWVlZXCIpKTtcbiAgICAgICAgICAgICAgICBhZGROb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsZW5kYXIucmVuZGVyTW9udGgoZGF5anMoZXZlbnQuc3RhcnREYXRlKSwgYWRkTm93KTtcbiAgICAgICAgICAgIGNhbGVuZGFyLnJlbmRlckNhbGVuZGFyQm94KGV2ZW50WWVhciwgZXZlbnRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsZW5kYXIucmVuZGVyUG9zdChldmVudFllYXIsIGV2ZW50TW9udGgsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHsgZXZlbnRZZWFyLCBldmVudE1vbnRoIH07XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGxldCBjdXJyZW50WWVhcjogbnVtYmVyID0gLTE7XG4gICAgICAgIGxldCBjdXJyZW50TW9udGg6IG51bWJlciA9IC0xO1xuICAgICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5zdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnREYXRlID0gY2FsZW5kYXIucGFyc2VQb3N0KFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WWVhcixcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1vbnRoLFxuICAgICAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY3VycmVudFllYXIgPSBldmVudERhdGUuZXZlbnRZZWFyO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRNb250aCA9IGV2ZW50RGF0ZS5ldmVudE1vbnRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBhcnNlRmVzdGl2YWxwYXNzZXM6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQucGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFkZFBpcGUgPSBldmVudC50aWNrZXQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gYFtkYXRhLWlkPVwiJHtldmVudC5pZH1cIl0gLnRpY2tldGA7XG4gICAgICAgICAgICAgICAgZmVzdGl2YWxwYXNzLmxvYWQoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnBhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGFkZFBpcGUsXG4gICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyLmFsbFBhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAoZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNhbGVuZGFyLnBhcnNlKGV2ZW50cyk7XG4gICAgICAgIGNhbGVuZGFyLnBhcnNlRmVzdGl2YWxwYXNzZXMoZXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjYWxlbmRhci5saXN0ZW5Cb3hlcygpO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJjYWxlbmRhciBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImRpdi5jYWxlbmRhci1pdGVtXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcImV4dGVybmFsXCIpKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBlLmN1cnJlbnRUYXJnZXQuZGF0YXNldC5saW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGFwcGVuZENvbnRlbnQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSkge1xuICAgICAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZXZlbn
4181RTZXJ2aWNlLmFsbEV2ZW50cy5maW5kKChlKSA9PiBlLmlkID09PSBldmVudC5pZCkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5maW5kKChlKSA9PiBlLnNsdWcgPT09IGV2ZW50LnNsdWcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjYWxlbmRhci5hbGxFdmVudHMucHVzaChldmVudCBhcyBDbGFuZGVzdGlub0V2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudCBleGlzdHMhXCIsIGV2ZW50LnRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGVuZGFyLmFsbEV2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0KFxuICAgICAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzLFxuICAgICAgICAgICAgU29ydE9yZGVyLkRFU0NcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGNoZWNrSGFzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImhhc2hcIiwgd2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKFwiI1wiLCBcIlwiKTtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJoYXNoXCIgKyB0YXJnZXQpO1xuICAgICAgICAgICAgLy9sb2NhdGlvbi5oYXNoID0gXCIjXCIgKyB0YXJnZXQ7XG5cbiAgICAgICAgICAgIHZhciBlbGVtZW50X3RvX3Njcm9sbF90byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7XG4gICAgICAgICAgICBlbGVtZW50X3RvX3Njcm9sbF90by5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgJChcIi5zaXRlLXRpdGxlXCIpLmFkZENsYXNzKFwic2Nyb2xsZWRcIik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBjYWxlbmRhci5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBjYWxlbmRhci5hbGxQYXNzZXMgPSBhd2FpdCBmZXN0aXZhbHBhc3MuZ2V0UGFzc2VzKGxvY2FsZSk7XG4gICAgICAgIGNhbGVuZGFyLmFsbEV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXQobG9jYWxlKTtcbiAgICAgICAgY2FsZW5kYXIuYXBwZW5kQ29udGVudChhd2FpdCBleHRlcm5hbEV2ZW50U2VydmljZS5nZXRGb3JTb3JjZXMobG9jYWxlKSk7XG5cbiAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLmZpbHRlckhhc1ZhbGlkU3RhcnRUaW1lKFxuICAgICAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzXG4gICAgICAgICk7XG5cbiAgICAgICAgY2FsZW5kYXIuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjYWxlbmRhci5hbGxFdmVudHMsXG4gICAgICAgICAgICBTb3J0T3JkZXIuREVTQ1xuICAgICAgICApO1xuXG4gICAgICAgIGNhbGVuZGFyLmxvYWQoY2FsZW5kYXIuYWxsRXZlbnRzLCBsb2NhbGUpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsZW5kYXIuY2hlY2tIYXNoKCk7XG4gICAgICAgIH0sIDUwKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImNhbGVuZGFyIGluaXRcIiwgY2FsZW5kYXIuX2xvY2FsZSk7XG4gICAgfSxcbn07IiwiaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGxvY2FsaXplZEZvcm1hdCBmcm9tIFwiZGF5anMvcGx1Z2luL2xvY2FsaXplZEZvcm1hdFwiO1xuaW1wb3J0IFwiZGF5anMvbG9jYWxlL3N2XCI7XG4vL2ltcG9ydCAnZGF5anMvbG9jYWxlL2VuJztcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgICBzaXRlRm9sZGVyOiBcIi8yMDI2L1wiLFxuICAgIHNpdGVVcmw6IFwiaHR0cHM6Ly9jbGFuZGVzdGlub2Zlc3RpdmFsLm9yZ1wiLFxuICAgIGRlZmF1bHRMYW5nOiBcInN2XCIsXG4gICAgcGFnZVNpemU6IDEwMCxcbiAgICBlYXJsaWVzdEV2ZW50SG91cjogOCxcbiAgICBkZWZhdWx0Q29sb3I6IFwiI2ZmNGIzN1wiLFxuICAgIGdldFNpdGVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAkKFwiaHRtbFwiKS5hdHRyKFwibGFuZ1wiKSA9PT0gXCJzdi1TRVwiXG4gICAgICAgICAgICA/IGNvbmZpZy5zaXRlRm9sZGVyXG4gICAgICAgICAgICA6IGNvbmZpZy5zaXRlRm9sZGVyICsgXCJlbi9cIjtcbiAgICB9LFxuICAgIGdldFJlc3RVcmw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l0ZVJvb3QoKSArIFwid3AtanNvbi93cC92Mi9cIjtcbiAgICB9LFxuICAgIGNvbmZpZ3VyZUxvY2FsZTogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGxvY2FsZTpcIiwgbG9jYWxlKTtcbiAgICAgICAgZGF5anMubG9jYWxlKGxvY2FsZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChsb2NhbGl6ZWRGb3JtYXQpO1xuICAgIH0sXG4gICAgZXh0ZXJuYWxFdmVudFNvdXJjZXM6IFtcbiAgICAgICAgXCJodHRwczovL2NsYW5kZXN0aW5vaW5zdGl0dXQub3JnL3dwLWpzb24vd3AvdjIvcG9zdHMvP3Blcl9wYWdlPTMwMCZjYXRlZ29yaWVzPTEmZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NcIixcbiAgICAgICAgXCJodHRwczovL2NsYW5kZXN0aW5vZmVzdGl2YWwub3JnLzIwMjUvd3AtanNvbi93cC92Mi9wb3N0cy8/cGVyX3BhZ2U9MTAwJmNhdGVnb3JpZXM9MTEmZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NcIixcbiAgICBdLFxufTtcbiIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vQ29udGVudCB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBsYW5rPzogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjYXRlZ29yaWVzOiBudW1iZXJbXTtcbiAgICBzdGlja3k6IGJvb2xlYW47XG4gICAgZGF0ZTogRGF0ZTtcbiAgICB0eX
4181BlOiBzdHJpbmc7XG4gICAgZmVhdHVyZWRJbWFnZT86IHN0cmluZztcbiAgICBmZWF0dXJlZEltYWdlSGVpZ2h0PzogbnVtYmVyO1xuICAgIGZlYXR1cmVkSW1hZ2VXaWR0aD86IG51bWJlcjtcbiAgICBleHRyYUNzc0NsYXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgY29udGVudFNlcnZpY2UgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbENvbnRlbnRzOiBbXSBhcyBDbGFuZGVzdGlub0NvbnRlbnRbXSxcbiAgICBicmVha0xpbmVzOiBmdW5jdGlvbiAodGl0bGU6IHN0cmluZykge1xuICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoXCImbHQ7d2JyIC8+XCIsIFwiPHdiciAvPlwiKTtcbiAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKFwiJmx0O2JyIC8+XCIsIFwiPGJyIC8+XCIpO1xuICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoXCImbHQ7YnI+XCIsIFwiPGJyIC8+XCIpO1xuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSxcbiAgICBzdHJpcFRhZ3M6IGZ1bmN0aW9uICh0aXRsZTogc3RyaW5nKSB7XG4gICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShcIjx3YnIgLz5cIiwgXCJcIik7XG4gICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShcIjxiciAvPlwiLCBcIlwiKTtcbiAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKFwiPGJyIC8+XCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfSxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiAocG9zdDogYW55LCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBsZXQgZXZlbnQ6IENsYW5kZXN0aW5vQ29udGVudCA9IHtcbiAgICAgICAgICAgIGlkOiBwb3N0LmlkLFxuICAgICAgICAgICAgc2x1ZzogcG9zdC5zbHVnLFxuICAgICAgICAgICAgdGl0bGU6IGNvbnRlbnRTZXJ2aWNlLmJyZWFrTGluZXMocG9zdC50aXRsZS5yZW5kZXJlZCksXG4gICAgICAgICAgICBsYW5rOiBwb3N0LmFjZi5sYW5rLFxuICAgICAgICAgICAgY29udGVudDogcG9zdC5jb250ZW50W1wicmVuZGVyZWRcIl0sXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBwb3N0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgICBzdGlja3k6IHBvc3Quc3RpY2t5LFxuICAgICAgICAgICAgZGF0ZTogcG9zdC5kYXRlLFxuICAgICAgICAgICAgdHlwZTogcG9zdC50eXBlLFxuICAgICAgICAgICAgZmVhdHVyZWRJbWFnZTogcG9zdC5uc3NfZmVhdHVyZWRfaW1hZ2VzPy5tZWRpdW0/LnNyYyxcbiAgICAgICAgICAgIGZlYXR1cmVkSW1hZ2VIZWlnaHQ6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy5oZWlnaHQsXG4gICAgICAgICAgICBmZWF0dXJlZEltYWdlV2lkdGg6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nLCBjYXRlZ29yeTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9JHtjYXRlZ29yeX0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0MmbGFuZz0ke2xvY2FsZX1gXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBsb2FkU2luZ2xlOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcbiAgICAgICAgaWYgKHBvc3RJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeSArPSBwb3N0SWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeSArPSBcIj9zbHVnPVwiICsgcG9zdFNsdWc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAkLmdldChjb25maWcuZ2V0UmVzdFVybCgpICsgXCJwb3N0cy9cIiArIHF1ZXJ5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIEJ5IHNsdWcgcmV0dXJucyBhcnJheVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgZ2V0U2luZ2xlOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYGNvbnRlbnRTZXJ2aWNlLmdldFNpbmdsZSAke3Bvc3RJZH0gJHtwb3N0U2x1Z31gKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLFxuICAgICAgICAgICAgY29udGVudFNlcnZpY2UuX2xvY2FsZVxuICAgICAgICApO1xuICAgIH0sXG4gICAgZ2V0U2luZ2xlRnJvbVByZWxvYWRlZDogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgXCJjb250ZW50U2VydmljZS5hbGxDb250ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICAvLyBpZihjb250ZW50U2VydmljZS5hbGxDb250ZW50cy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gY29udGVudFNlcnZpY2UuY29udmVydChhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLGNvbnRlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBxdWVyeSA9IChldmVudDogQ2xhbmRlc3Rpbm9Db250ZW50KSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICBpZiAocG9zdFNsdWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnkgPSAoZXZlbnQ6IENsYW5kZXN0aW5vQ29udGVudCkgPT4gZXZlbnQuaWQgPT09IHBvc3RJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudFNlcnZpY2UuYWxsQ29udGVudHMuZmluZChxdWVyeSk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdKSB7XG4gICAgICAgIGNvbnRlbn
4181RzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vQ29udGVudCwgYjogQ2xhbmRlc3Rpbm9Db250ZW50KSB7XG4gICAgICAgICAgICB2YXIgZXZlbnRBOiBkYXlqcy5EYXlqcyA9IGRheWpzKGEuZGF0ZSk7XG4gICAgICAgICAgICB2YXIgZXZlbnRCOiBkYXlqcy5EYXlqcyA9IGRheWpzKGIuZGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRCLnRvRGF0ZSgpLmdldFRpbWUoKSAtIGV2ZW50QS50b0RhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfSxcbiAgICBhZGRFeHRyYUNsYXNzZXM6IGZ1bmN0aW9uIChjb250ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGVudHNbMF0uZXh0cmFDc3NDbGFzcyArPSBcIiBvbmx5LW9uZVwiO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzb3J0U3RpY2t5OiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGNvbnRlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjb250ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5zdGlja3kpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vblN0aWNreSA9IGNvbnRlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBjb250ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQuc3RpY2t5KVxuICAgICAgICApO1xuICAgICAgICBzdGlja3kucHVzaCguLi5ub25TdGlja3kpO1xuICAgICAgICByZXR1cm4gc3RpY2t5O1xuICAgIH0sXG4gICAgZ2V0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGNhdGVnb3J5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50U2VydmljZS5hbGxDb250ZW50cztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkKGxvY2FsZSwgY2F0ZWdvcnkpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdID0gW107XG4gICAgICAgIHBvc3RzLmZvckVhY2goKHBvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChjb250ZW50U2VydmljZS5jb252ZXJ0KHBvc3QsIGxvY2FsZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29udGVudHMgPSBjb250ZW50U2VydmljZS5zb3J0U3RpY2t5KGNvbnRlbnRzKTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nLCBjYXRlZ29yeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzID0gYXdhaXQgY29udGVudFNlcnZpY2UuZ2V0KGxvY2FsZSwgY2F0ZWdvcnkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29udGVudFNlcnZpY2UgaW5pdFwiLCBjb250ZW50U2VydmljZS5fbG9jYWxlKTtcbiAgICB9LFxufTsiLCJleHBvcnQgY29uc3QgZWxlbWVudCA9IHtcbiAgICBidXR0b25zOiB7XG4gICAgICAgIGJ1dHRvblRvZ2dsZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1uYXYtd3JhcHBlci10b2dnbGVcIlxuICAgICAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50LFxuICAgICAgICBidXR0b25Ub2dnbGVNb2JpbGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgXCJidXR0b24tbmF2LXdyYXBwZXItdG9nZ2xlLW1vYmlsZVwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIGJ1dHRvbkNsb3NlU2luZ2xlUGFuZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1jbG9zZS1zaW5nbGUtcGFuZVwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIC8vIGJ1dHRvblNoYXJlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgLy8gICAgIFwiYnV0dG9uLXNoYXJlXCJcbiAgICAgICAgLy8gKSBhcyBIVE1MQW5jaG9yRWxlbWVudCxcbiAgICAgICAgYnV0dG9uU2hhcmVGYjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1zaGFyZS1mYlwiXG4gICAgICAgICkgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIC8vYnV0dG9uU2hhcmVUd2l0dGVyOiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbi1zaGFyZS10d2l0dGVyJykgYXMgSFRNTEFuY2hvckVsZW1lbnQsXG4gICAgICAgIGNhbGVuZGFyQ29udGFpbmVyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgIFwiY2FsZW5kYXItY29udGFpbmVyXCJcbiAgICAgICAgKSBhcyBIVE1MRGl2RWxlbWVudCxcbiAgICAgICAgYnV0dG9uQWRkVG9DYWxlbmRhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImFkZC10by1jYWxlbmRhci1idXR0b25cIlxuICAgICAgICApIGFzIEhUTUxEaXZFbGVtZW50LCAvL2FkZGV2ZW50YXRjMVxuICAgICAgICBidXR0b25TaGFyZVVybDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICBcImJ1dHRvbi1zaGFyZS11cmxcIlxuICAgICAgICApIGFzIEhUTUxBbmNob3JFbGVtZW50LFxuICAgICAgICBidXR0b25DbG9zZVNoYXJlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgIFwiYnV0dG9uLWNsb3NlLXNoYXJlXCJcbiAgICAgICAgKSBhcyBIVE1MQW5jaG9yRWxlbWVudCxcbiAgICB9LFxuICAgIHdyYXBwZXJzOiB7XG4gICAgICAgIG5hdldyYXBwZXI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmF2LXdyYXBwZXJcIikgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgIG1haW5XcmFwcGVyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4td3JhcHBlclwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICB9LFxufTtcbiIsImltcG9ydCB7
4181IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9Db250ZW50IH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vVmVudWUsIHZlbnVlU2VydmljZSB9IGZyb20gXCIuL3ZlbnVlU2VydmljZVwiO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmVcIjtcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gXCJkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlclwiO1xuaW1wb3J0IHsgdmFsaWREYXRlIH0gZnJvbSBcIi4vdmFsaWREYXRlXCI7XG4vL2ltcG9ydCB7IHRlc3RDb250ZW50IH0gZnJvbSBcIi4vdGVzdENvbnRlbnRcIjtcbmltcG9ydCB7IGV2ZW50VHlwZSwgRXZlbnRUeXBlcyB9IGZyb20gXCIuL2V2ZW50VHlwZVwiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuXG4vL2NvbnN0IFRCQSA9IFwidGJhXCI7XG5cbmV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gICAgUkFORE9NID0gXCJyYW5kb21cIixcbn1cblxuZXhwb3J0IGNvbnN0IEZFQVRVUkVEX0lNQUdFX1NJWkUgPSBcIm1lZGl1bVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vRXZlbnQgZXh0ZW5kcyBDbGFuZGVzdGlub0NvbnRlbnQge1xuICAgIHZlbnVlOiBDbGFuZGVzdGlub1ZlbnVlO1xuICAgIHZlbnVlRm9ybWF0dGVkOiBzdHJpbmc7XG4gICAgc3RhcnREYXRlOiBEYXRlO1xuICAgIGVuZERhdGU6IERhdGU7XG4gICAgZG9vcnNPcGVuOiBEYXRlO1xuICAgIGRvb3JzT3BlbkZvcm1hdHRlZDogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICBlbmRUaW1lOiBEYXRlO1xuICAgIHN0YXJ0VGltZTI6IERhdGU7XG4gICAgZW5kVGltZTI6IERhdGU7XG4gICAgc3RhcnRUaW1lMzogRGF0ZTtcbiAgICBlbmRUaW1lMzogRGF0ZTtcbiAgICB0aWNrZXQ6IHN0cmluZztcbiAgICBwYXNzZXM6IG51bWJlcltdO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGRhdGVUaW1lRm9ybWF0dGVkOiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdHRlZDogc3RyaW5nO1xuICAgIHBsYWNlPzogc3RyaW5nO1xuICAgIHRyYWNrPzogbnVtYmVyO1xuICAgIGxpbms/OiBzdHJpbmc7XG4gICAgZXZlbnRUeXBlPzogc3RyaW5nO1xuICAgIHNvbGRPdXQ6IGJvb2xlYW47XG4gICAgY2FuY2VsbGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZXZlbnRTZXJ2aWNlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBhbGxWZW51ZXM6IFtdIGFzIENsYW5kZXN0aW5vVmVudWVbXSxcbiAgICByZW5kZXJDc3M6IGZ1bmN0aW9uIChcbiAgICAgICAgZXZlbnRJZDogbnVtYmVyLFxuICAgICAgICBpbWFnZUhlaWdoOiBudW1iZXIsXG4gICAgICAgIGltYWdlV2lkdGg6IG51bWJlclxuICAgICkge1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IChpbWFnZVdpZHRoICogMzAwKSAvIGltYWdlSGVpZ2g7XG4gICAgICAgIGNvbnN0IGNzcyA9IGA8c3R5bGUgc2NvcGVkPVwiXCI+XG4gICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAgICAgICAgICAgLnNpbmdsZS1ib3gtJHtldmVudElkfSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICR7bmV3V2lkdGh9cHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8L3N0eWxlPmA7XG4gICAgICAgICQoYCNjb250ZW50YCkuYXBwZW5kKGNzcyk7XG4gICAgfSxcbiAgICByZW5kZXJWZW51ZTogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IFwiXCI7XG4gICAgICAgIGlmIChldmVudC52ZW51ZSkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxicj4ke2V2ZW50LnZlbnVlRm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG4gICAgcmVuZGVyRGF0ZUFuZFZlbnVlOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKGV2ZW50LmRhdGVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGAke2V2ZW50LmRhdGVGb3JtYXR0ZWR9YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFNlcnZpY2UucmVuZGVyVmVudWUoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSxcbiAgICByZW5kZXJFdmVudFN0YXR1c2VzOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxoMiBjbGFzcz1cImNhbmNlbGxlZC10ZXh0XCI+JHtsYW5ndWFnZS5nZXQoXG4gICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgXCJDYW5jZWxsZWRcIlxuICAgICAgICAgICAgKX08L2gyPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc29sZE91dCkge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8aDIgY2xhc3M9XCJzb2xkb3V0LXRleHRcIj4ke2xhbmd1YWdlLmdldChcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgIFwiU29sZE91dFwiXG4gICAgICAgICAgICAgICAgKX08L2gyPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnRUeXBlOiBmdW5jdGlvbiAoZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gYDxwIGNsYXNzPVwiZXZlbnQtdHlwZVwiPmA7XG4gICAgICAgI
4181HN3aXRjaCAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuRkVTVElWQUw6XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRUeXBlLmdldEV2ZW50VHlwZURlc2NyaXB0aW9uKGV2ZW50LmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgLy90ZW1wbGF0ZSArPSBldmVudFNlcnZpY2UucmVuZGVyRGF0ZUFuZFZlbnVlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyBpZiAoZXZlbnQudmVudWUpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gRG8gbm90IHJlbmRlciBUQkFcbiAgICAgICAgICAgICAgICAvLyAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlclZlbnVlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuQkVZT05EOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihldmVudC5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIC8vdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuUE9EUzpcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24oZXZlbnQuZXZlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAvL3RlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGVzLlRBTEtTOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihldmVudC5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIC8vdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vZGVmYXVsdDpcbiAgICAgICAgICAgIC8vICAgIHRlbXBsYXRlICs9IGV2ZW50U2VydmljZS5yZW5kZXJEYXRlQW5kVmVudWUoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArIFwiPC9wPlwiO1xuICAgIH0sXG4gICAgcmVuZGVyUG9zdDogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5mZWF0dXJlZEltYWdlKSB7XG4gICAgICAgICAgICBldmVudFNlcnZpY2UucmVuZGVyQ3NzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmlkLFxuICAgICAgICAgICAgICAgIGV2ZW50LmZlYXR1cmVkSW1hZ2VIZWlnaHQsXG4gICAgICAgICAgICAgICAgZXZlbnQuZmVhdHVyZWRJbWFnZVdpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBocmVmPVwiJHtjb25maWcuc2l0ZUZvbGRlcn0ke2V2ZW50LnNsdWd9L1wiIGRhdGEtaWQ9XCIke1xuICAgICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfVwiIGRhdGEtc2x1Zz1cIiR7XG4gICAgICAgICAgICBldmVudC5zbHVnXG4gICAgICAgIH1cIiBkYXRhLWZvcm1hdD1cIlwiIGNsYXNzPVwic2luZ2xlLWJveCBzaW5nbGUtYm94LSR7ZXZlbnQuaWR9ICR7XG4gICAgICAgICAgICBldmVudC5leHRyYUNzc0NsYXNzIHx8IFwiXCJcbiAgICAgICAgfVwiIHRpdGxlPVwiJHtldmVudC50aXRsZX1cIiByZWw9XCJib29rbWFya1wiPmA7XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50U3RhdHVzZXMoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5mZWF0dXJlZEltYWdlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGltZyB3aWR0aD1cIjEwMjRcIiBoZWlnaHQ9XCI2ODNcIiBzcmM9XCIke2V2ZW50LmZlYXR1cmVkSW1hZ2V9XCIgY2xhc3M9XCJhdHRhY2htZW50LW1lZGl1bSBzaXplLW1lZGl1bSB3cC1wb3N0LWltYWdlXCIgYWx0PVwiXCIgZGVjb2Rpbmc9XCJhc3luY1wiIGZldGNocHJpb3JpdHk9XCJoaWdoXCI+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlbXBsYXRlICs9ICc8ZGl2IGNsYXNzPVwiY2FwdGlvbi10ZXh0XCI+JztcbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50VHlwZShldmVudCk7XG4gICAgICAgIHRlbXBsYXRlICs9IGA8aDI+JHtldmVudC50aXRsZX08L2gyPmA7XG4gICAgICAgIHRlbXBsYXRlICs9ICc8cCBjbGFzcz1cInRpbWUtYW5kLXBsYWNlXCI+JztcbiAgICAgICAgdGVtcGxhdGUgKz0gZXZlbnRTZXJ2aWNlLnJlbmRlckRhdGVBbmRWZW51ZShldmVudCk7XG4gICAgICAgIHRlbXBsYXRlICs9IFwiPC9wPlwiO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvZGl2PlwiO1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjwvYT5cIjtcblxuICAgICAgICAkKGAjY29udGVudGApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBhZGp1c3RNaWRuaWdodDogZnVuY3Rpb24gKGRhdGU6IGRheWpzLkRheWpzKSB7XG4gICAgICAgIGlmIChkYXRlLmhvdXIoKSA8IGNvbmZpZy5lYXJsaWVzdEV2ZW50SG91cikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH0sXG4gICAgYWRkVGltZTogZnVuY3Rpb24gKGRhdGU6IHN0cmluZywgdGltZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aW1lXG4gICAgICAgICAgICA/IGV2ZW50U2VydmljZS5hZGp1c3RNaWRuaWdodChkYXlqcyhkYXRlICsgdGltZSkpLnRvRGF0ZSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGdldERvb3JzRm9ybWF0dGVkVGltZTogZnVuY3Rpb24gKGRhdGVTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0ZVN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZVN0cmluZy5yZXBsYWNlKFwiOlwiLCBcIi5cIik7XG4gICAgfSxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiAocG9zdDogYW55LCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICAvLyBsZXQgdmVudWU6IENsYW5kZXN0aW5vVmVudWUgPSBldmVudFNlcnZpY2UuYWxsVmVudWVzLmZpbmQoXG4gICAgICAgIC8vICAgICAodikgPT4gdi5pZCA9PT0gcG9zdC5hY2Yuc2Nlbj8uSURcbiAgICAgICAgLy8gKTtcbiAgICAgICAgLy8gaWYgKCF2ZW51ZSkge1xuICAgICAgICAvLyAgICAgaWYgKHBvc3QuYWNmPy5zY2VuKSB7XG4gICAgICAgIC8vICAgICAgICAgLy8gRml4IGZvciBleHRlcm5hbCBldmVudHNcbiAgICAgICAgLy8gICAgICAgICB2ZW51ZSA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWQ6IDAsXG4gICAgICAgIC8vICAgICAgICAgICAgI
4181HRpdGxlOiBwb3N0LmFjZltcInNjZW5cIl0/LnBvc3RfdGl0bGUsXG4gICAgICAgIC8vICAgICAgICAgICAgIHNsdWc6IFRCQSxcbiAgICAgICAgLy8gICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICB2ZW51ZSA9IHtcbiAgICAgICAgLy8gICAgICAgICBpZDogMCxcbiAgICAgICAgLy8gICAgICAgICB0aXRsZTogVEJBLFxuICAgICAgICAvLyAgICAgICAgIHNsdWc6IFRCQSxcbiAgICAgICAgLy8gICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgIC8vICAgICB9O1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCB2ZW51ZSA9IHZlbnVlU2VydmljZS5nZXRWZW51ZU9yVEJBKHBvc3QpO1xuICAgICAgICBsZXQgdmVudWVGb3JtYXR0ZWQgPSB2ZW51ZS50aXRsZTtcbiAgICAgICAgbGV0IGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50ID0ge1xuICAgICAgICAgICAgaWQ6IHBvc3QuaWQsXG4gICAgICAgICAgICBzbHVnOiBwb3N0LnNsdWcsXG4gICAgICAgICAgICB0aXRsZTogY29udGVudFNlcnZpY2UuYnJlYWtMaW5lcyhwb3N0LnRpdGxlLnJlbmRlcmVkKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3QuY29udGVudFtcInJlbmRlcmVkXCJdLFxuICAgICAgICAgICAgc3RpY2t5OiBwb3N0LnN0aWNreSxcbiAgICAgICAgICAgIGRhdGU6IHBvc3QuZGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IHBvc3QudHlwZSxcbiAgICAgICAgICAgIGZlYXR1cmVkSW1hZ2U6IHBvc3QubnNzX2ZlYXR1cmVkX2ltYWdlcz8ubWVkaXVtPy5zcmMsXG4gICAgICAgICAgICBmZWF0dXJlZEltYWdlSGVpZ2h0OiBwb3N0Lm5zc19mZWF0dXJlZF9pbWFnZXM/Lm1lZGl1bT8uaGVpZ2h0LFxuICAgICAgICAgICAgZmVhdHVyZWRJbWFnZVdpZHRoOiBwb3N0Lm5zc19mZWF0dXJlZF9pbWFnZXM/Lm1lZGl1bT8ud2lkdGgsXG4gICAgICAgICAgICB2ZW51ZSxcbiAgICAgICAgICAgIHZlbnVlRm9ybWF0dGVkLFxuICAgICAgICAgICAgLy92ZW51ZVRpdGxlOiBwb3N0LmFjZltcInNjZW5cIl0/LnBvc3RfdGl0bGUgfHwgVEJBLFxuICAgICAgICAgICAgc3RhcnREYXRlOiBwb3N0LmFjZi5kYXR1bSxcbiAgICAgICAgICAgIGVuZERhdGU6IHBvc3QuYWNmLnNsdXRkYXR1bSxcbiAgICAgICAgICAgIGRvb3JzT3BlbjogZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZG9ycmFyX29wcG5hclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGRvb3JzT3BlbkZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERvb3JzRm9ybWF0dGVkVGltZShcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5kb3JyYXJfb3BwbmFyXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhcnRUaW1lOiBldmVudFNlcnZpY2UuYWRkVGltZShwb3N0LmFjZi5kYXR1bSwgcG9zdC5hY2Yuc3RhcnR0aWQpLFxuICAgICAgICAgICAgZW5kVGltZTogZXZlbnRTZXJ2aWNlLmFkZFRpbWUocG9zdC5hY2YuZGF0dW0sIHBvc3QuYWNmLnNsdXR0aWQpLFxuICAgICAgICAgICAgc3RhcnRUaW1lMjogZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICAgICAgcG9zdC5hY2Yuc3RhcnR0aWQyXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZW5kVGltZTI6IGV2ZW50U2VydmljZS5hZGRUaW1lKHBvc3QuYWNmLmRhdHVtLCBwb3N0LmFjZi5zbHV0dGlkMiksXG4gICAgICAgICAgICBzdGFydFRpbWUzOiBldmVudFNlcnZpY2UuYWRkVGltZShcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5kYXR1bSxcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5zdGFydHRpZDNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBlbmRUaW1lMzogZXZlbnRTZXJ2aWNlLmFkZFRpbWUocG9zdC5hY2YuZGF0dW0sIHBvc3QuYWNmLnNsdXR0aWQzKSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBwb3N0LmFjZi5iYWtncnVuZHNmYXJnIHx8IHZlbnVlPy5jb2xvciB8fCBjb25maWcuZGVmYXVsdENvbG9yLFxuICAgICAgICAgICAgdGlja2V0OiBwb3N0LmFjZi5iaWxqZXR0LFxuICAgICAgICAgICAgcGFzc2VzOiBwb3N0LmFjZi5mZXN0aXZhbHBhc3MsXG4gICAgICAgICAgICBkYXRlVGltZUZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERhdGVBbmRUaW1lKHBvc3QsIGxvY2FsZSwgdHJ1ZSksXG4gICAgICAgICAgICBkYXRlRm9ybWF0dGVkOiBldmVudFNlcnZpY2UuZ2V0RGF0ZUFuZFRpbWUocG9zdCwgbG9jYWxlLCBmYWxzZSksXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBwb3N0LmNhdGVnb3JpZXMsXG4gICAgICAgICAgICBldmVudFR5cGU6IHBvc3QuYWNmLmV2ZW50X3R5cCxcbiAgICAgICAgICAgIHNvbGRPdXQ6IHBvc3QuYWNmLnNsdXRzYWxkLFxuICAgICAgICAgICAgY2FuY2VsbGVkOiBwb3N0LmFjZi5pbnN0YWxsZCxcbiAgICAgICAgICAgIGV4dHJhQ3NzQ2xhc3M6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIC8vZXZlbnQuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImVcIiwgZXZlbnQpO1xuICAgICAgICAvL3Rlc3RDb250ZW50LnNldFRlc3RJbWFnZXMoZXZlbnQpO1xuICAgICAgICBldmVudFNlcnZpY2UuYWRkQXJjaGl2ZWRDbGFzcyhldmVudCk7XG5cbiAgICAgICAgZXZlbnRTZXJ2aWNlLmFkZENhbmNlbGxlZENsYXNzKGV2ZW50KTtcbiAgICAgICAgaWYgKCFldmVudC5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5hZGRTb2xkT3V0Q2xhc3MoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgIGdldFN0YXJ0VGltZTogZnVuY3Rpb24gKHN0YXJ0VGltZTogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghc3RhcnRUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VwYXJhdG9yICsgc3RhcnRUaW1lLnJlcGxhY2UoXCI6MDBcIiwgXCJcIikucmVwbGFjZShcIjpcIiwgXCIuXCIpO1xuICAgIH0sXG4gICAgZ2V0RW5kVGltZTogZnVuY3Rpb24gKGVuZFRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZW5kVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgI
4181H1cbiAgICAgICAgcmV0dXJuIFwi4oCTXCIgKyBlbmRUaW1lLnJlcGxhY2UoXCI6MDBcIiwgXCJcIikucmVwbGFjZShcIjpcIiwgXCIuXCIpO1xuICAgIH0sXG4gICAgLy8gZ2V0U2NlbmU6IGZ1bmN0aW9uIChzY2VuZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyAgICAgaWYgKCFzY2VuZSkge1xuICAgIC8vICAgICAgICAgcmV0dXJuIFRCQTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gc2NlbmU7XG4gICAgLy8gfSxcbiAgICBnZXRUaW1lczogZnVuY3Rpb24gKHBvc3Q6IGFueSkge1xuICAgICAgICBjb25zdCBrbCA9IGxhbmd1YWdlLmdldChldmVudFNlcnZpY2UuX2xvY2FsZSwgXCJLbFwiKTtcblxuICAgICAgICBsZXQgdGltZXMgPSBcIlwiO1xuICAgICAgICB0aW1lcyArPSBldmVudFNlcnZpY2UuZ2V0U3RhcnRUaW1lKHBvc3QuYWNmW1wic3RhcnR0aWRcIl0sIGAgJHtrbH0gYCk7XG4gICAgICAgIHRpbWVzICs9IGV2ZW50U2VydmljZS5nZXRFbmRUaW1lKHBvc3QuYWNmW1wic2x1dHRpZFwiXSk7XG5cbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldFN0YXJ0VGltZShwb3N0LmFjZltcInN0YXJ0dGlkMlwiXSwgXCIsIFwiKTtcbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldEVuZFRpbWUocG9zdC5hY2ZbXCJzbHV0dGlkMlwiXSk7XG5cbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldFN0YXJ0VGltZShwb3N0LmFjZltcInN0YXJ0dGlkM1wiXSwgXCIsIFwiKTtcbiAgICAgICAgdGltZXMgKz0gZXZlbnRTZXJ2aWNlLmdldEVuZFRpbWUocG9zdC5hY2ZbXCJzbHV0dGlkM1wiXSk7XG4gICAgICAgIHJldHVybiB0aW1lcztcbiAgICB9LFxuICAgIGdldERhdGVBbmRUaW1lOiBmdW5jdGlvbiAoXG4gICAgICAgIHBvc3Q6IGFueSxcbiAgICAgICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgICAgIHJlbmRlclRpbWVzOiBib29sZWFuXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFwb3N0LmFjZltcImRhdHVtXCJdKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lQW5kUGxhY2UgPSBcIlwiO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc3QuYWNmW1wic2x1dGRhdHVtXCJdICE9PSBcIlwiICYmXG4gICAgICAgICAgICBwb3N0LmFjZltcInNsdXRkYXR1bVwiXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXkgPSBkYXlqcyhwb3N0LmFjZltcImRhdHVtXCJdKS5mb3JtYXQoXCJEXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRNb250aCA9IGRheWpzKHBvc3QuYWNmW1wiZGF0dW1cIl0pLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgICAgICBjb25zdCBlbmREYXkgPSBkYXlqcyhwb3N0LmFjZltcInNsdXRkYXR1bVwiXSkuZm9ybWF0KFwiRFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZE1vbnRoID0gZGF5anMocG9zdC5hY2ZbXCJzbHV0ZGF0dW1cIl0pLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZGF5anMocG9zdC5hY2ZbXCJzbHV0ZGF0dW1cIl0pLmZvcm1hdChcIllZWVlcIik7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGUgPT0gXCJzdlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TW9udGggPT0gZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IHN0YXJ0RGF5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBzdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwiIFwiICsgc3RhcnRNb250aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXkgIT0gZW5kRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIuKAk1wiICsgZW5kRGF5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCIgXCIgKyBlbmRNb250aDtcbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCIgXCIgKyB5ZWFyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gc3RhcnRNb250aCArIFwiIFwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TW9udGggPT0gZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IHN0YXJ0RGF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnREYXkgIT0gZW5kRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lQW5kUGxhY2UgKz0gXCLigJNcIiArIGVuZERheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBzdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwi4oCTXCIgKyBlbmRNb250aDtcbiAgICAgICAgICAgICAgICAgICAgdGltZUFuZFBsYWNlICs9IFwiIFwiICsgZW5kRGF5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIiwgXCIgKyB5ZWFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZUFuZFBsYWNlID0gZGF5anMocG9zdC5hY2ZbXCJkYXR1bVwiXSkuZm9ybWF0KFwiTExcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyVGltZXMpIHtcbiAgICAgICAgICAgIHRpbWVBbmRQbGFjZSArPSBcIiwgXCIgKyBldmVudFNlcnZpY2UuZ2V0VGltZXMocG9zdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aW1lQW5kUGxhY2UgKz1cbiAgICAgICAgLy8gICAgIFwiPGJyPlwiICsgZXZlbnRTZXJ2aWNlLmdldFNjZW5lKHBvc3QuYWNmW1wic2NlblwiXT8ucG9zdF90aXRsZSk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVBbmRQbGFjZTtcbiAgICB9LFxuICAgIC8vIHNldEV2ZW50VHlwZURlc2NyaXB0aW9uczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgLy8gICAgI
4181HN3aXRjaCAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgLy8gICAgICAgICBjYXNlIFwiZmVzdGl2YWxcIjpcbiAgICAvLyAgICAgICAgICAgICBsZXQgZXRlZiA9XG4gICAgLy8gICAgICAgICAgICAgICAgICc8cCBjbGFzcz1cImV2ZW50LXR5cGVcIj4nICsgZXZlbnRUeXBlcy5iZXlvbmQgKyBcIjwvcD5cIjtcbiAgICAvLyAgICAgICAgICAgICBldmVudC5kYXRlQW5kUGxhY2UgPSBldmVudFR5cGVzLmZlc3RpdmFsO1xuICAgIC8vICAgICAgICAgICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV0ZWYgKyBldmVudFR5cGVzLmZlc3RpdmFsO1xuICAgIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLy8gY29kZSBibG9jayBmZXN0aXZhbFwiKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJiZXlvbmRcIjpcbiAgICAvLyAgICAgICAgICAgICBsZXQgZXR0YiA9XG4gICAgLy8gICAgICAgICAgICAgICAgICc8cCBjbGFzcz1cImV2ZW50LXR5cGVcIj4nICsgZXZlbnRUeXBlcy5iZXlvbmQgKyBcIjwvcD5cIjtcbiAgICAvLyAgICAgICAgICAgICBldmVudC5kYXRlQW5kUGxhY2UgPVxuICAgIC8vICAgICAgICAgICAgICAgICBldmVudFR5cGVzLmJleW9uZCArIFwiPGJyPlwiICsgZXZlbnQuZGF0ZUFuZFBsYWNlO1xuICAgIC8vICAgICAgICAgICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV0dGIgKyBldmVudC50aW1lQW5kUGxhY2U7XG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coXCIvLyBjb2RlIGJsb2NrIGJleW9uZFwiKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGRlZmF1bHQ6XG4gICAgLy8gICAgICAgICAvLyBjb2RlIGJsb2NrXG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuICAgIGlzRGF0ZUJlZm9yZVRvZGF5KGRhdGU6IERhdGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5ldyBEYXRlKGRhdGUudG9EYXRlU3RyaW5nKCkpIDwgbmV3IERhdGUobmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSlcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGFkZEFyY2hpdmVkQ2xhc3M6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnN0YXJ0VGltZSkge1xuICAgICAgICAgICAgLy9ldmVudC5leHRyYUNzc0NsYXNzICs9IFwiIGFyY2hpdmVkXCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFyY2hpdmVkQ2xhc3MgPSBldmVudFNlcnZpY2UuaXNEYXRlQmVmb3JlVG9kYXkoZXZlbnQuc3RhcnRUaW1lKVxuICAgICAgICAgICAgPyBcIiBhcmNoaXZlZFwiXG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgKz0gYXJjaGl2ZWRDbGFzcztcbiAgICB9LFxuICAgIGFkZFNvbGRPdXRDbGFzczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBzb2xkT3V0Q2xhc3MgPSBldmVudC5zb2xkT3V0ID8gXCIgc29sZG91dFwiIDogXCJcIjtcbiAgICAgICAgZXZlbnQuZXh0cmFDc3NDbGFzcyArPSBzb2xkT3V0Q2xhc3M7XG4gICAgfSxcbiAgICBhZGRDYW5jZWxsZWRDbGFzczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBjYW5jZWxsZWRDbGFzcyA9IGV2ZW50LmNhbmNlbGxlZCA/IFwiIGNhbmNlbGxlZFwiIDogXCJcIjtcbiAgICAgICAgZXZlbnQuZXh0cmFDc3NDbGFzcyArPSBjYW5jZWxsZWRDbGFzcztcbiAgICB9LFxuICAgIGxvYWQ6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0ICQuZ2V0KFxuICAgICAgICAgICAgY29uZmlnLmdldFJlc3RVcmwoKSArXG4gICAgICAgICAgICAgICAgYHBvc3RzLz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mY2F0ZWdvcmllcz0ke1xuICAgICAgICAgICAgICAgICAgICBzaXRlbWFwW0xvY2FsZXNbZXZlbnRTZXJ2aWNlLl9sb2NhbGUgYXMgTG9jYWxlc11dLlBST0dSQU1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NgXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRTaW5nbGU6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gZXZlbnRTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5sb2FkU2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpLFxuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGVcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGdldFNpbmdsZUZyb21QcmVsb2FkZWQ6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5hbGxFdmVudHMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmKGV2ZW50U2VydmljZS5hbGxFdmVudHMubGVuZ3RoPT09MCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGV2ZW50U2VydmljZS5jb252ZXJ0KGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksZXZlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBxdWVyeSA9IChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkgPT4gZXZlbnQuaWQgPT09IHBvc3RJZDtcbiAgICAgICAgaWYgKHBvc3RTbHVnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ID0gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudFNlcnZpY2UuYWxsRXZlbnRzLmZpbmQocXVlcnkpO1xuICAgIH0sXG4gICAgc2h1ZmZsZTogZnVuY3Rpb24gKGFycmF5OiBDbGFuZGVzdGlub0V2ZW50W10pIHtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgICAvLyBXaGlsZSB0aGVyZSByZW1haW4gZWxlbWVudHMgdG8gc2h1ZmZsZS4uLlxuICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4ICE9IDApIHtcbiAgICAgICAgICAgIC8vIFBpY2sgYSByZW1haW5pbmcgZWxlbWVudC4uLlxuICAgICAgICAgICAgbGV0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tO1xuXG4gICAgICAgICAgICAvLyBBbmQgc3dhcCBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAgICAgICAgICBbYXJyYXlbY3VycmVudEluZGV4XSwgYXJyYXlbcmFuZG9tSW5kZXhdXSA9IFtcbiAgICAgICAgICAgICAgICBhcnJheVtyYW5kb21JbmRleF0sXG4gICAgICAgICAgICAgICAgYXJyYXlbY3VycmVudEluZGV4XSxcbiAgICAgICAgICAgIF07XG4gICAgICAgI
4181H1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXIgPSBTb3J0T3JkZXIuQVNDXG4gICAgKSB7XG4gICAgICAgIGlmIChzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5SQU5ET00pIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudFNlcnZpY2Uuc2h1ZmZsZShldmVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50cy5zb3J0KGZ1bmN0aW9uIChhOiBDbGFuZGVzdGlub0V2ZW50LCBiOiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSBTb3J0T3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyBhLnN0YXJ0VGltZT8uZ2V0VGltZSgpIC0gYi5zdGFydFRpbWU/LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgIDogYi5zdGFydFRpbWU/LmdldFRpbWUoKSAtIGEuc3RhcnRUaW1lPy5nZXRUaW1lKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXZlbnRzO1xuICAgIH0sXG4gICAgc29ydFN0aWNreTogZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgc29ydE9yZGVyOiBTb3J0T3JkZXIgPSBTb3J0T3JkZXIuQVNDXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGV2ZW50U2VydmljZS5zb3J0KFxuICAgICAgICAgICAgZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnN0aWNreSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uU3RpY2t5ID0gZXZlbnRTZXJ2aWNlLnNvcnQoXG4gICAgICAgICAgICBldmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LnN0aWNreSksXG4gICAgICAgICAgICBzb3J0T3JkZXJcbiAgICAgICAgKTtcbiAgICAgICAgc3RpY2t5LnB1c2goLi4ubm9uU3RpY2t5KTtcbiAgICAgICAgcmV0dXJuIHN0aWNreTtcbiAgICB9LFxuICAgIHNvcnRQYXN0QW5kRnV0dXJlOiBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgICAgICByZW1vdmVCZWZvcmVEYXRlOiBEYXRlXG4gICAgKSB7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbiAgICAgICAgY29uc3QgZnV0dXJlID0gZXZlbnRzLmZpbHRlcigoeyBzdGFydERhdGUgfSkgPT5cbiAgICAgICAgICAgIGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lT3JBZnRlcihyZW1vdmVCZWZvcmVEYXRlLCBcInNlY29uZFwiKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXN0ID0gZXZlbnRzLmZpbHRlcigoeyBzdGFydERhdGUgfSkgPT5cbiAgICAgICAgICAgIGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lT3JCZWZvcmUocmVtb3ZlQmVmb3JlRGF0ZSwgXCJzZWNvbmRcIilcbiAgICAgICAgKTtcbiAgICAgICAgZnV0dXJlLnB1c2goLi4ucGFzdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY291bnQgcGFzdDpcIiArIHBhc3QubGVuZ3RoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJjb3VudCBmdXR1cmU6XCIgKyBmdXR1cmUubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGZ1dHVyZTtcbiAgICB9LFxuICAgIGZpbHRlck9sZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICAgICAgcmVtb3ZlQmVmb3JlRGF0ZTogRGF0ZVxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92ZUJlZm9yZURhdGVcIiwgcmVtb3ZlQmVmb3JlRGF0ZSk7XG4gICAgICAgIGRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKHsgZGF0ZSwgZW5kVGltZSB9KSA9PlxuICAgICAgICAgICAgZGF5anMoZW5kVGltZSB8fCBkYXRlKS5pc1NhbWVPckFmdGVyKHJlbW92ZUJlZm9yZURhdGUsIFwic2Vjb25kXCIpXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBmaWx0ZXJIYXNWYWxpZFN0YXJ0VGltZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4gdmFsaWREYXRlKGV2ZW50LnN0YXJ0VGltZSkpO1xuICAgIH0sXG4gICAgYXBwZW5kQ29udGVudDogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50U2VydmljZS5hbGxFdmVudHMuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnQuaWQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5wdXNoKGV2ZW50IGFzIENsYW5kZXN0aW5vRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnRTZXJ2aWNlLnNvcnRTdGlja3koZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cyk7XG4gICAgfSxcbiAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBpZiAoZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCBldmVudFNlcnZpY2UubG9hZCgpO1xuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcbiAgICAgICAgcG9zdHMuZm9yRWFjaCgocG9zdDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudFNlcnZpY2UuY29udmVydChwb3N0LCBsb2NhbGUpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0U3RpY2t5KGV2ZW50cyk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbiAgICBnZXRGb3JTY2hlZHVsZTogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXQobG9jYWxlKTtcblxuICAgICAgICBsZXQgZXZlbnRzSGFzUHJvcHMgP
4181SBldmVudHMuZmlsdGVyKChlKSA9PiBlLnN0YXJ0RGF0ZSAmJiBlLmVuZFRpbWUpO1xuXG4gICAgICAgIGxldCBtdWx0aUV2ZW50cyA9IGV2ZW50c0hhc1Byb3BzLmZpbHRlcihcbiAgICAgICAgICAgIChlKSA9PiAhZGF5anMoZS5zdGFydERhdGUpLmlzU2FtZShlLmVuZERhdGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgbXVsdGlFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGFydFRpbWVDb3VudGVyID0gZGF5anMoZXZlbnQuc3RhcnREYXRlKTtcbiAgICAgICAgICAgIGxldCBlbmRUaW1lQ291bnRlciA9IGRheWpzKGV2ZW50LmVuZERhdGUpO1xuXG4gICAgICAgICAgICB3aGlsZSAoc3RhcnRUaW1lQ291bnRlci5pc1NhbWVPckJlZm9yZShldmVudC5lbmREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFRpbWVDb3VudGVyLmlzQWZ0ZXIoZXZlbnQuc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnN0YXJ0RGF0ZSA9IHN0YXJ0VGltZUNvdW50ZXIudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmVuZERhdGUgPSBlbmRUaW1lQ291bnRlci50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuc3RhcnRUaW1lID0gZXZlbnRTZXJ2aWNlLmFkZFRpbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhjbG9uZS5zdGFydERhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5zdGFydFRpbWUpLmZvcm1hdChcIkhIOm1tXCIpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmVuZFRpbWUgPSBldmVudFNlcnZpY2UuYWRkVGltZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheWpzKGNsb25lLmVuZERhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5lbmRUaW1lKS5mb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBldmVudHNIYXNQcm9wcy5wdXNoKGNsb25lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFydFRpbWVDb3VudGVyID0gc3RhcnRUaW1lQ291bnRlci5hZGQoMSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgZW5kVGltZUNvdW50ZXIgPSBlbmRUaW1lQ291bnRlci5hZGQoMSwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXZlbnRzSGFzUHJvcHM7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgZXZlbnRTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGF3YWl0IHZlbnVlU2VydmljZS5pbml0KGxvY2FsZSk7XG4gICAgICAgIGV2ZW50U2VydmljZS5hbGxWZW51ZXMgPSB2ZW51ZVNlcnZpY2UuYWxsVmVudWVzO1xuICAgICAgICBldmVudFNlcnZpY2UuYWxsRXZlbnRzID0gYXdhaXQgZXZlbnRTZXJ2aWNlLmdldChsb2NhbGUpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXZlbnRTZXJ2aWNlIGluaXRcIiwgZXZlbnRTZXJ2aWNlLl9sb2NhbGUpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcblxuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbn07XG5cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZXMge1xuICAgIEZFU1RJVkFMID0gXCJmZXN0aXZhbFwiLFxuICAgIEJFWU9ORCA9IFwiYmV5b25kXCIsXG4gICAgRkVTVElWQUxfQU5EX0JFWU9ORCA9IFwiZmVzdGl2YWxfYW5kX2JleW9uZFwiLFxuICAgIFRBTEtTID0gXCJ0YWxrc1wiLFxuICAgIFBPRFMgPSBcInBvZHNcIixcbn1cblxuZXhwb3J0IGNvbnN0IGV2ZW50VHlwZSA9IHtcbiAgICBldmVudFR5cGVzOiBbXSBhcyBFdmVudFR5cGVbXSxcbiAgICBnZXRFdmVudFR5cGVEZXNjcmlwdGlvbjogZnVuY3Rpb24gKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50VHlwZS5ldmVudFR5cGVzLmZpbmQoKGV0KSA9PiBldC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgICAgICAuZGVzY3JpcHRpb247XG4gICAgfSxcbiAgICBnZXRLZXlCeVZhbHVlOiBmdW5jdGlvbiAob2JqOiBhbnksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmluZCgoa2V5KSA9PiBvYmpba2V5XSA9PT0gdmFsdWUpO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmZXN0aXZhbDogRXZlbnRUeXBlID0ge1xuICAgICAgICAgICAgdmFsdWU6IFwiZmVzdGl2YWxcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBsYW5ndWFnZS5nZXQobG9jYWxlLCBcIkNsYW5kZXN0aW5vRmVzdGl2YWxcIiksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBiZXlvbmQ6IEV2ZW50VHlwZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBcImJleW9uZFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ2xhbmRlc3Rpbm8gJiBCZXlvbmRcIixcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZlc3RpdmFsX2FuZF9iZXlvbmQ6IEV2ZW50VHlwZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBcImZlc3RpdmFsX2FuZF9iZXlvbmRcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNsYW5kZXN0aW5vIEZlc3RpdmFsICYgQmV5b25kXCIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0YWxrczogRXZlbnRUeXBlID0ge1xuICAgICAgICAgICAgdmFsdWU6IFwidGFsa3NcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNsYW5kZXN0aW5vIFRhbGtzXCIsXG4gICAgICAgIH07XG4gICAgICAgIGxldCBwb2RzOiBFdmVudFR5cGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogXCJwb2RzXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDbGFuZGVzdGlubyBQb2RjYXN0XCIsXG4gICAgICAgI
4181H07XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2goZmVzdGl2YWwpO1xuICAgICAgICBldmVudFR5cGUuZXZlbnRUeXBlcy5wdXNoKGJleW9uZCk7XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2goZmVzdGl2YWxfYW5kX2JleW9uZCk7XG4gICAgICAgIGV2ZW50VHlwZS5ldmVudFR5cGVzLnB1c2godGFsa3MpO1xuICAgICAgICBldmVudFR5cGUuZXZlbnRUeXBlcy5wdXNoKHBvZHMpO1xuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge1xuICAgIGV2ZW50U2VydmljZSxcbiAgICBDbGFuZGVzdGlub0V2ZW50LFxuICAgIEZFQVRVUkVEX0lNQUdFX1NJWkUsXG59IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxFdmVudFNlcnZpY2UgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGxvYWQ6IGFzeW5jIGZ1bmN0aW9uIChzb3VyY2U6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQoc291cmNlKTtcbiAgICB9LFxuICAgIGFwcGVuZFBvc3RzOiBmdW5jdGlvbiAocG9zdHM6IGFueVtdLCBhcHBlbmQ6IGFueVtdKSB7XG4gICAgICAgIGFwcGVuZC5mb3JFYWNoKChwb3N0KSA9PiB7XG4gICAgICAgICAgICBwb3N0cy5wdXNoKHBvc3QpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvc3RzO1xuICAgIH0sXG4gICAgc2V0RXh0ZXJuYWw6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgbGluazogc3RyaW5nKSB7XG4gICAgICAgIC8vZXZlbnQuYmFja2dyb3VuZENvbG9yID0gXCIjMDAxMTAwXCI7XG4gICAgICAgIGV2ZW50LmV4dHJhQ3NzQ2xhc3MgPSBcImV4dGVybmFsXCI7XG4gICAgICAgIGV2ZW50LmxpbmsgPSBsaW5rO1xuICAgIH0sXG4gICAgZ2V0OiBhc3luYyBmdW5jdGlvbiAoc291cmNlOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBwb3N0cyA9IGF3YWl0IGV4dGVybmFsRXZlbnRTZXJ2aWNlLmxvYWQoc291cmNlKTtcblxuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvc3Qgb2YgcG9zdHMpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocG9zdCk7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBldmVudFNlcnZpY2UuY29udmVydChwb3N0LCBsb2NhbGUpO1xuICAgICAgICAgICAgZXh0ZXJuYWxFdmVudFNlcnZpY2Uuc2V0RXh0ZXJuYWwoZXZlbnQsIHBvc3QubGluayk7XG5cbiAgICAgICAgICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvL2V2ZW50cyA9IGV2ZW50U2VydmljZS5zb3J0U3RpY2t5KGV2ZW50cyk7XG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbiAgICBnZXRGb3JTb3JjZXM6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBsZXQgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBjb25maWcuZXh0ZXJuYWxFdmVudFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGV2ZW50cyA9IGV2ZW50cy5jb25jYXQoXG4gICAgICAgICAgICAgICAgYXdhaXQgZXh0ZXJuYWxFdmVudFNlcnZpY2UuZ2V0KHNvdXJjZSwgbG9jYWxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudHM7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgZXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudFNlcnZpY2UnO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSBcImRheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyXCI7XG5pbXBvcnQgeyB2ZW51ZVNlcnZpY2UgfSBmcm9tIFwiLi92ZW51ZVNlcnZpY2VcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcblxuZXhwb3J0IHR5cGUgQ2xhbmRlc3Rpbm9QYXNzID0ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgb3ZlclRpdGxlOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBldmVudFR5cGU6IHN0cmluZztcbiAgICB2ZW51ZUZvcm1hdHRlZDogc3RyaW5nO1xuICAgIGRhdGU6IERhdGU7XG4gICAgZW5kRGF0ZTogRGF0ZTtcbiAgICB0aWNrZXQ6IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIGRhdGVUaW1lRm9ybWF0dGVkPzogc3RyaW5nO1xuICAgIHZpZXdPcmRlcjogbnVtYmVyO1xuICAgIHN0aWNreTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vUGFzc09yZGVyID0ge1xuICAgIERhdGU6IFwiRGF0ZVwiO1xuICAgIFZpZXdvcmRlcjogXCJWaWV3T3JkZXJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXN0aXZhbHBhc3MgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIHJlbmRlclBhc3NMaW5rOiBmdW5jdGlvbiAocGFzczogQ2xhbmRlc3Rpbm9QYXNzLCBzZWxlY3Rvcjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghcGFzcy5zdGlja3kpIHtcbiAgICAgICAgICAgIHBhc3MudGl0bGUgPSBsYW5ndWFnZS5nZXQoZmVzdGl2YWxwYXNzLl9sb2NhbGUsIFwiQmlsamV0dFBsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBpZD1cIiR7cGFzcy5pZH1cIiBocmVmPVwiJHtwYXNzLnRpY2tldH1cIiBjbGFzcz1cImZlc3RpdmFscGFzc1wiIHRpdGxlPVwiJHtwYXNzLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCI+YDtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy50aXRsZX1gO1xuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9hPmA7XG5cbiAgICAgICAgJChzZWxlY3RvcikuYXBwZW5kKHRlbXBsYXRlKTtcbiAgICB9LFxuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uIChwYXNzOiBDbGFuZGVzdGlub1Bhc3MsIHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gYDxzcGFuIGlkPVwiJHtwYXNzLmlkfVwiIGNsYXNzPVwiZmVzdGl2YWxwYXNzXCIgdGl0bGU9XCIke3Bhc3MudGl0bGV9XCI+YDtcbiAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy50aXRsZX1gO1xuICAgICAgICB0ZW1wbGF0ZSArPSBgPC9zcGFuPmA7XG5cbiAgICAgICAgJChzZWxlY3RvcikuYXBwZW5kKHRlbXBsYXRlKTtcbiAgICB9LFxuICAgIHBhcnNlUGFzczogZnVuY3Rpb24gKHBhc3M6IENsYW5kZXN0aW5vUGFzcywgc2VsZWN0b3I6IHN0cmluZykge1xuICAgICAgICBwYXNzLnRpY2tldCA9PSBcIlwiXG4gICAgICAgICAgICA/IGZlc3RpdmFscGFzcy5yZW5kZXJQYXNzKHBhc3MsIHNlbGVjdG9yKVxuICAgICAgICAgICAgOiBmZXN0aXZhbHBhc3MucmVuZGVyUGFzc0xpbmsocGFzcywgc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChcbiAgICAgICAgcGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSxcbiAgICAgICAgZXZlbnRQYXNzZXM6IG51bWJlcltdLFxuICAgICAgICBzZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICBhZGRQaXBlOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgI
4181HBhc3Nlcy5mb3JFYWNoKChwYXNzKSA9PiB7XG4gICAgICAgICAgICAvL3Bhc3MudGlja2V0IT09JycgJiZcbiAgICAgICAgICAgIGlmIChldmVudFBhc3Nlcy5pbmNsdWRlcyhwYXNzLmlkKSkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgYXBwZW5kZWRcbiAgICAgICAgICAgICAgICBpZiAoJChzZWxlY3RvcikuZmluZChgIyR7cGFzcy5pZH1gKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhZGRQaXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICQoc2VsZWN0b3IpLmFwcGVuZChcIiB8IFwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmZXN0aXZhbHBhc3MucGFyc2VQYXNzKHBhc3MsIHNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAocGFzc2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkUGlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHRyYW5zbGF0ZVBhc3NlczogZnVuY3Rpb24gKHBhc3NlczogQ2xhbmRlc3Rpbm9QYXNzW10sIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHBhc3Nlcy5mb3JFYWNoKChwYXNzKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChwYXNzLnRpdGxlPy5pbmNsdWRlcyhcIkdvbGRcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlID09PSBcInN2XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFzcy50aXRsZSA9IGxhbmd1YWdlLmdldChsb2NhbGUsIFwiR29sZHBhc3NcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXNzLnZlbnVlRm9ybWF0dGVkID09PSBcInRiYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhc3MudmVudWVGb3JtYXR0ZWQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXNzLmRhdGVGb3JtYXR0ZWQgPSBcIiZuYnNwO1wiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGFzcy50aXRsZT8uaW5jbHVkZXMoXCJGZXN0aXZhbCBQYXNzXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSA9PT0gXCJzdlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhc3MudGl0bGUgPSBsYW5ndWFnZS5nZXQobG9jYWxlLCBcIkZlc3RpdmFscGFzc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXNzLnRpdGxlPy5pbmNsdWRlcyhcIkZyaSBlbnRyw6kg4oCTIEFubcOkbGFuIGtyw6R2c1wiKSkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgPT09IFwiZW5cIikge1xuICAgICAgICAgICAgICAgICAgICBwYXNzLnRpdGxlID0gbGFuZ3VhZ2UuZ2V0KGxvY2FsZSwgXCJGcmVlQWRtaXNzaW9uUmVnaXN0cmF0aW9uUmVxdWlyZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWRQYXNzZXM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgYGZlc3RpdmFscGFzcz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mZmlsdGVyW29yZGVyYnldPW1ldGFfdmFsdWVfbnVtJmZpbHRlclttZXRhX2tleV09ZGF0dW0mZmlsdGVyW29yZGVyXT1BU0NgO1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQodXJsKTtcbiAgICB9LFxuICAgIHNvcnRCeVZpZXdPcmRlcjogZnVuY3Rpb24gKHBhc3NlczogQ2xhbmRlc3Rpbm9QYXNzW10pIHtcbiAgICAgICAgcGFzc2VzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vUGFzcywgYjogQ2xhbmRlc3Rpbm9QYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gYS52aWV3T3JkZXIgLSBiLnZpZXdPcmRlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgfSxcbiAgICBzb3J0QnlEYXRlOiBmdW5jdGlvbiAocGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSkge1xuICAgICAgICBwYXNzZXMuc29ydChmdW5jdGlvbiAoYTogQ2xhbmRlc3Rpbm9QYXNzLCBiOiBDbGFuZGVzdGlub1Bhc3MpIHtcbiAgICAgICAgICAgIHZhciBldmVudEE6IGRheWpzLkRheWpzID0gZGF5anMoYS5kYXRlKTtcbiAgICAgICAgICAgIHZhciBldmVudEI6IGRheWpzLkRheWpzID0gZGF5anMoYi5kYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBldmVudEEudG9EYXRlKCkuZ2V0VGltZSgpIC0gZXZlbnRCLnRvRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgfSxcbiAgICBzb3J0QnlTdGlja3k6IGFzeW5jIGZ1bmN0aW9uIChwYXNzZXM6IENsYW5kZXN0aW5vUGFzc1tdKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreSA9IGZlc3RpdmFscGFzcy5zb3J0QnlWaWV3T3JkZXIoXG4gICAgICAgICAgICBwYXNzZXMuZmlsdGVyKChwYXNzKSA9PiBwYXNzLnN0aWNreSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9uU3RpY2t5ID0gZmVzdGl2YWxwYXNzLnNvcnRCeURhdGUoXG4gICAgICAgICAgICBwYXNzZXMuZmlsdGVyKChwYXNzKSA9PiAhcGFzcy5zdGlja3kpXG4gICAgICAgICk7XG4gICAgICAgIHN0aWNreS5wdXNoKC4uLm5vblN0aWNreSk7XG4gICAgICAgIHJldHVybiBzdGlja3k7XG5cbiAgICAgICAgLy8gcGFzc2VzLnNvcnQoZnVuY3Rpb24gKGE6IENsYW5kZXN0aW5vUGFzcywgYjogQ2xhbmRlc3Rpbm9QYXNzKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gKGEuc3RpY2t5ID8gMSA6IDApIC0gKGIuc3RpY2t5ID8gMSA6IDApO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gcmV0dXJuIHBhc3NlcztcbiAgICB9LFxuICAgIGZpbHRlck9sZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBwYXNzZXM6IENsYW5kZXN0aW5vUGFzc1tdLFxuICAgICAgICByZW1vdmVCZWZvcmVEYXRlOiBEYXRlXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVtb3ZlQmVmb3JlRGF0ZVwiLCByZW1vdmVCZWZvcmVEYXRlKTtcbiAgICAgICAgZGF5anMuZXh0
4181ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuICAgICAgICByZXR1cm4gcGFzc2VzLmZpbHRlcigoeyBkYXRlLCBlbmREYXRlIH0pID0+XG4gICAgICAgICAgICBkYXlqcyhlbmREYXRlIHx8IGRhdGUpLmlzU2FtZU9yQWZ0ZXIocmVtb3ZlQmVmb3JlRGF0ZSwgXCJzZWNvbmRcIilcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIChwb3N0OiBhbnksIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIGxldCB2ZW51ZSA9IGV2ZW50U2VydmljZS5hbGxWZW51ZXMuZmluZChcbiAgICAgICAgLy8gICAgICh2KSA9PiB2LmlkID09PSBwb3N0LmFjZi5zY2VuLklEXG4gICAgICAgIC8vICk7XG5cbiAgICAgICAgbGV0IHZlbnVlID0gdmVudWVTZXJ2aWNlLmdldFZlbnVlT3JUQkEocG9zdCk7XG4gICAgICAgIGxldCB2ZW51ZUZvcm1hdHRlZCA9IHZlbnVlLnRpdGxlO1xuXG4gICAgICAgIGxldCBwYXNzOiBDbGFuZGVzdGlub1Bhc3MgPSB7XG4gICAgICAgICAgICBpZDogcG9zdC5pZCxcbiAgICAgICAgICAgIHRpdGxlOiBjb250ZW50U2VydmljZS5icmVha0xpbmVzKHBvc3QudGl0bGUucmVuZGVyZWQpLFxuICAgICAgICAgICAgZGF0ZTogcG9zdC5hY2YuZGF0dW0sXG4gICAgICAgICAgICBlbmREYXRlOiBwb3N0LmFjZi5zbHV0ZGF0dW0sXG4gICAgICAgICAgICBvdmVyVGl0bGU6IHBvc3QuYWNmLm92ZXJydWJyaWssXG4gICAgICAgICAgICBldmVudFR5cGU6IHBvc3QuYWNmLmV2ZW50X3R5cCxcbiAgICAgICAgICAgIHZlbnVlRm9ybWF0dGVkLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOlxuICAgICAgICAgICAgICAgIHBvc3QuYWNmLmJha2dydW5kc2ZhcmcgfHwgdmVudWU/LmNvbG9yIHx8IGNvbmZpZy5kZWZhdWx0Q29sb3IsXG4gICAgICAgICAgICB0aWNrZXQ6IHBvc3QuYWNmLmJpbGpldHQsXG4gICAgICAgICAgICBkYXRlRm9ybWF0dGVkOiBldmVudFNlcnZpY2UuZ2V0RGF0ZUFuZFRpbWUocG9zdCwgbG9jYWxlLCBmYWxzZSksXG4gICAgICAgICAgICBkYXRlVGltZUZvcm1hdHRlZDogZXZlbnRTZXJ2aWNlLmdldERhdGVBbmRUaW1lKHBvc3QsIGxvY2FsZSwgdHJ1ZSksXG4gICAgICAgICAgICB2aWV3T3JkZXI6IHBvc3QuYWNmLm9yZG5pbmcsXG4gICAgICAgICAgICBzdGlja3k6IHBvc3Quc3RpY2t5IHx8IHBvc3QuYWNmLmtsaXN0cmFkIHx8IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcGFzcztcbiAgICB9LFxuICAgIGdldFBhc3NlczogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBwb3N0UGFzc2VzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmxvYWRQYXNzZXMoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwb3N0UGFzc2VzKVxuICAgICAgICBsZXQgcGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSA9IFtdO1xuICAgICAgICBwb3N0UGFzc2VzLmZvckVhY2goKHRpY2tldDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXNzID0gZmVzdGl2YWxwYXNzLmNvbnZlcnQodGlja2V0LCBsb2NhbGUpO1xuICAgICAgICAgICAgcGFzc2VzLnB1c2gocGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBmZXN0aXZhbHBhc3Muc29ydEJ5Vmlld09yZGVyKHBhc3Nlcyk7XG4gICAgICAgIGZlc3RpdmFscGFzcy50cmFuc2xhdGVQYXNzZXMocGFzc2VzLCBsb2NhbGUpO1xuICAgICAgICByZXR1cm4gcGFzc2VzO1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgICBldmVudFBhc3NlczogbnVtYmVyW10sXG4gICAgICAgIHNlbGVjdG9yOiBzdHJpbmcsXG4gICAgICAgIGFkZFBpcGU6IGJvb2xlYW4sXG4gICAgICAgIHRpY2tldHM6IENsYW5kZXN0aW5vUGFzc1tdLFxuICAgICAgICBsb2NhbGU6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBmZXN0aXZhbHBhc3MuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgaWYgKHRpY2tldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aWNrZXRzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmdldFBhc3Nlcyhsb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGZlc3RpdmFscGFzcy5wYXJzZSh0aWNrZXRzLCBldmVudFBhc3Nlcywgc2VsZWN0b3IsIGFkZFBpcGUpO1xuICAgIH0sXG59OyIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgY29udGVudFNlcnZpY2UsIENsYW5kZXN0aW5vQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5cbmV4cG9ydCBjb25zdCBoaXN0b3JpY2FsID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhZGRMZXR0ZXJDbGFzc2VzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIud3AtYmxvY2stbGlzdFwiKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgbGV0IGxldHRlciA9ICQodGhpcykuc2libGluZ3MoXCJwXCIpW2luZGV4XTtcbiAgICAgICAgICAgICQobGV0dGVyKS5hZGRDbGFzcyhcImxldHRlclwiKTtcbiAgICAgICAgICAgICQobGV0dGVyKS5hZGRDbGFzcyhcImxldHRlclwiICsgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVNlYXJjaElucHV0OiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBsYWJlbCA9IGxhbmd1YWdlLmdldChoaXN0b3JpY2FsLl9sb2NhbGUsIFwiU2VhcmNoQWN0XCIpO1xuICAgICAgICB2Y
4181XIgcyA9ICQoYDxpbnB1dCBpZD1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiJHtsYWJlbH1cIiAvPmApO1xuICAgICAgICAkKFwiLnNpbmdsZS1kZXNjcmlwdGlvblwiKS5wcmVwZW5kKHMpO1xuICAgIH0sXG4gICAgaGFuZGxlU2VhcmNoQWN0OiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCJpbnB1dCNzZWFyY2hcIikub24oXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKFwic2VsZWN0I3llYXJcIikudmFsKFwiLTFcIik7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCh0aGlzIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBzZWFyY2hUZXJtID0gKHRoaXMgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICQoXCIud3AtYmxvY2stbGlzdFwiKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIGxldCBsZXR0ZXIgPSAkKHRoaXMpLnNpYmxpbmdzKFwicFwiKVtpbmRleF07XG4gICAgICAgICAgICAgICAgLy8kKGxldHRlcikuYWRkQ2xhc3MoXCJsZXR0ZXJcIik7XG4gICAgICAgICAgICAgICAgLy8kKGxldHRlcikuYWRkQ2xhc3MoXCJsZXR0ZXJcIiArIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgaGlkZUxldHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgJCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oKVxuICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmNsdWRlcyhzZWFyY2hUZXJtKSAmJiBoaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlkZSAmJiBzZWFyY2hUZXJtICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiaGlkZTpcIiArICQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGVMZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGlkZUxldHRlcikge1xuICAgICAgICAgICAgICAgICAgICAkKGxldHRlcikuYWRkQ2xhc3MoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJChsZXR0ZXIpLnJlbW92ZUNsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNvcnRZZWFyczogYXN5bmMgZnVuY3Rpb24gKHllYXJzOiBOdW1iZXJbXSkge1xuICAgICAgICByZXR1cm4geWVhcnMuc29ydCgpO1xuICAgIH0sXG4gICAgY3JlYXRlWWVhckRyb3Bkb3duTGlzdDogYXN5bmMgZnVuY3Rpb24gKHllYXJzOiBOdW1iZXJbXSkge1xuICAgICAgICBsZXQgbGFiZWwgPSBsYW5ndWFnZS5nZXQoaGlzdG9yaWNhbC5fbG9jYWxlLCBcIlNlbGVjdFllYXJcIik7XG4gICAgICAgIHZhciBzID0gJCgnPHNlbGVjdCBpZD1cInllYXJcIiAvPicpO1xuICAgICAgICAkKFwiPG9wdGlvbiAvPlwiLCB7IHZhbHVlOiBcIi0xXCIsIHRleHQ6IGxhYmVsIH0pLmFwcGVuZFRvKHMpO1xuICAgICAgICBmb3IgKHZhciB2YWwgb2YgeWVhcnMpIHtcbiAgICAgICAgICAgICQoXCI8b3B0aW9uIC8+XCIsIHsgdmFsdWU6IHZhbCwgdGV4dDogdmFsIH0pLmFwcGVuZFRvKHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zLnByZXBlbmQoXCIuc2luZ2xlLWRlc2NyaXB0aW9uXCIpOyAvLyBvciB3aGVyZXZlciBpdCBzaG91bGQgYmVcbiAgICAgICAgJChcIi5zaW5nbGUtZGVzY3JpcHRpb25cIikucHJlcGVuZChzKTtcbiAgICB9LFxuICAgIGhhbmRsZVNlbGVjdFllYXI6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcInNlbGVjdCN5ZWFyXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoXCJpbnB1dCNzZWFyY2hcIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFllYXIgPSBwYXJzZUludCgodGhpcyBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpO1xuXG4gICAgICAgICAgICAkKFwiLndwLWJsb2NrLWxpc3RcIikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGV0dGVyID0gJCh0aGlzKS5zaWJsaW5ncyhcInBcIilbaW5kZXhdO1xuICAgICAgICAgICAgICAgIC8vJChsZXR0ZXIpLmFkZENsYXNzKFwibGV0dGVyXCIpO1xuICAgICAgICAgICAgICAgIC8vJChsZXR0ZXIpLmFkZENsYXNzKFwibGV0dGVyXCIgKyBpbmRleCk7XG4gICAgICAgICAgICAgICAgbGV0IGhpZGVMZXR0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICQodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKClcbiAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCA9ICQodGhpcykudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgcmVzID0gdGV4dC5tYXRjaEFsbCgvKD86KD86MTl8MjApWzAtOV17Mn0pLyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoaWRlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gLyg/Oig/OjE5fDIwKVswLTldezJ9KS9nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbWF0Y2ggb2YgdGV4dC5tYXRjaEFsbChyZWdleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKG1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeWVhciA9IHBhcnNlSW50KG1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWVhciA9PT0gc2VsZWN0ZWRZZWFyICYmIGhpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
4181H1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGUgJiYgc2VsZWN0ZWRZZWFyICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImhpZGU6XCIgKyAkKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaWRlTGV0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVMZXR0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhpZGVMZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgJChsZXR0ZXIpLmFkZENsYXNzKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQobGV0dGVyKS5yZW1vdmVDbGFzcyhcImlzLWhpZGRlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZVllYXJzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB5ZWFycyA9IFtdIGFzIE51bWJlcltdO1xuICAgICAgICAkKFwiLndwLWJsb2NrLWxpc3QgbGlcIikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coaW5kZXggKyBcIjogXCIgKyAkKHRoaXMpLnRleHQoKSk7XG4gICAgICAgICAgICBsZXQgdGV4dCA9ICQodGhpcykudGV4dCgpO1xuICAgICAgICAgICAgLy92YXIgcmVzID0gdGV4dC5tYXRjaEFsbCgvKD86KD86MTl8MjApWzAtOV17Mn0pLyk7XG5cbiAgICAgICAgICAgIGxldCByZWdleCA9IC8oPzooPzoxOXwyMClbMC05XXsyfSkvZztcbiAgICAgICAgICAgIGZvciAobGV0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwocmVnZXgpKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPT09IDIwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgheWVhcnMuaW5jbHVkZXMoeWVhcikpIHllYXJzLnB1c2goeWVhcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3RvcmljYWwuY3JlYXRlWWVhckRyb3Bkb3duTGlzdChhd2FpdCBoaXN0b3JpY2FsLnNvcnRZZWFycyh5ZWFycykpO1xuICAgICAgICBoaXN0b3JpY2FsLmhhbmRsZVNlbGVjdFllYXIoKTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZywgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZSkge1xuICAgICAgICBoaXN0b3JpY2FsLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGlzdG9yaWNhbCBpbml0XCIsIGhpc3RvcmljYWwuX2xvY2FsZSk7XG4gICAgICAgIGF3YWl0IGhpc3RvcmljYWwuYWRkTGV0dGVyQ2xhc3NlcygpO1xuICAgICAgICBhd2FpdCBoaXN0b3JpY2FsLnBhcnNlWWVhcnMoKTtcbiAgICAgICAgYXdhaXQgaGlzdG9yaWNhbC5jcmVhdGVTZWFyY2hJbnB1dCgpO1xuICAgICAgICBhd2FpdCBoaXN0b3JpY2FsLmhhbmRsZVNlYXJjaEFjdCgpO1xuICAgIH0sXG59O1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgeyBzaXRlIH0gZnJvbSBcIi4vc2l0ZVwiO1xuaW1wb3J0IHsgbGFuZ3VhZ2UgfSBmcm9tIFwiLi9sYW5ndWFnZVwiO1xuaW1wb3J0IHsgY29udGVudFNlcnZpY2UsIENsYW5kZXN0aW5vQ29udGVudCB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0V2ZW50IH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBzaXRlbWFwLCBMb2NhbGVzLCBDbGFuZGVzdGlub1BhZ2UsIFBhZ2VzIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgdmVudWVTZXJ2aWNlIH0gZnJvbSBcIi4vdmVudWVTZXJ2aWNlXCI7XG5pbXBvcnQgeyBoaXN0b3JpY2FsIH0gZnJvbSBcIi4vaGlzdG9yaWNhbFwiO1xuXG5leHBvcnQgY29uc3QgaW5mbyA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgYWxsQ29udGVudHM6IFtdIGFzIENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgIHJlbmRlclBvc3Q6IGZ1bmN0aW9uIChjb250ZW50OiBDbGFuZGVzdGlub0NvbnRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmsgPSBgJHtjb25maWcuc2l0ZUZvbGRlcn1pbmZvLyR7Y29udGVudC5zbHVnfS9gO1xuICAgICAgICBsZXQgZGF0YUZvcm1hdCA9IFwiXCI7XG5cbiAgICAgICAgaWYgKGNvbnRlbnQubGFuaykge1xuICAgICAgICAgICAgbGluayA9IGNvbnRlbnQubGFuaztcbiAgICAgICAgICAgIGRhdGFGb3JtYXQgPSBgIGRhdGEtZm9ybWF0PVwibGlua1wiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IGA8YSBocmVmPVwiJHtsaW5rfVwiIGRhdGEtaWQ9XCIke2NvbnRlbnQuaWR9XCIgZGF0YS1zbHVnPVwiaW5mby8ke2NvbnRlbnQuc2x1Z31cIiR7ZGF0YUZvcm1hdH0gY2xhc3M9XCJzaW5nbGUtYm94IGluZm8gJHtjb250ZW50LnNsdWd9XCIgdGl0bGU9XCIke2NvbnRlbnQudGl0bGV9XCIgcmVsPVwiYm9va21hcmtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0aW9uLXRleHRcIiBpZD1cIjBcIj48aDI+JHtjb250ZW50LnRpdGxlfTwvaDI+PC9kaXY+XG4gICAgICAgICAgICA8L2E+YDtcbiAgICAgICAgJChgI2NvbnRlbn
4181RgKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChcbiAgICAgICAgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgICAgICBsb2NhbGU6IHN0cmluZyxcbiAgICAgICAgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZVxuICAgICkge1xuICAgICAgICBjb250ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaW5mby5yZW5kZXJQb3N0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluZm8ubGlzdGVuQm94ZXMobG9jYWxlLCBjdXJyZW50UGFnZSk7XG4gICAgfSxcbiAgICBsb2FkOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBpbmZvP3Blcl9wYWdlPSR7Y29uZmlnLnBhZ2VTaXplfSZmaWx0ZXJbb3JkZXJieV09bWV0YV92YWx1ZV9udW0mZmlsdGVyW21ldGFfa2V5XT1vcmRuaW5nJmZpbHRlcltvcmRlcl09QVNDYFxuICAgICAgICApO1xuICAgIH0sXG4gICAgbG9hZFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIHZhciBxdWVyeSA9IFwiXCI7XG4gICAgICAgIGlmIChwb3N0SWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IHBvc3RJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IFwiP3NsdWc9XCIgKyBwb3N0U2x1ZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQuZ2V0KGNvbmZpZy5nZXRSZXN0VXJsKCkgKyBcImluZm8vXCIgKyBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBCeSBzbHVnIHJldHVybnMgYXJyYXlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGxpc3RlbkJveGVzOiBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbmZvIGxpc3RlbkJveGVzXCIpO1xuICAgICAgICAkKFwiYS5zaW5nbGUtYm94XCIpLmNsaWNrKGFzeW5jIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICB2Y
4181XIgcG9zdEZvcm1hdCA9ICQodGhpcykuZGF0YShcImZvcm1hdFwiKTtcbiAgICAgICAgICAgIHZhciBzbHVnID0gJCh0aGlzKS5kYXRhKFwic2x1Z1wiKTtcbiAgICAgICAgICAgIGlmIChcImxpbmtcIiA9PT0gcG9zdEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBhd2FpdCBzaXRlLmhhbmRsZUNsaWNrKHRoaXMsIFwiaW5mb1wiKTtcbiAgICAgICAgICAgIGlmIChzbHVnLmluY2x1ZGVzKFwicHJldmlvdXNcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBIYWNraXNoXG4gICAgICAgICAgICAgICAgaGlzdG9yaWNhbC5pbml0KGxvY2FsZSwgY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGdldDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbmZvLmFsbENvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLmFsbENvbnRlbnRzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwb3N0cyA9IGF3YWl0IGluZm8ubG9hZCgpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdID0gW107XG4gICAgICAgIHBvc3RzLmZvckVhY2goKHBvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChjb250ZW50U2VydmljZS5jb252ZXJ0KHBvc3QsIGxvY2FsZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xuICAgIH0sXG4gICAgYWRkVmVudWVzOiBhc3luYyBmdW5jdGlvbiAoY29udGVudDogQ2xhbmRlc3Rpbm9Db250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBpbmZvLmFkZFZlbnVlcyAke2NvbnRlbnQuc2x1Z31gKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29udGVudC5zbHVnID09PVxuICAgICAgICAgICAgc2l0ZW1hcFtMb2NhbGVzW2luZm8uX2xvY2FsZSBhcyBMb2NhbGVzXV0uVkVOVUVTLnNpbmdsZVVybFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHZlbnVlU2VydmljZS5pbml0KGluZm8uX2xvY2FsZSk7XG4gICAgICAgICAgICB2ZW51ZVNlcnZpY2UuYWxsVmVudWVzLmZvckVhY2goKHZlbnVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVudWVTZXJ2aWNlLmFwcGVuZChjb250ZW50LCB2ZW51ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9LFxuICAgIGdldFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBpbmZvLmdldFNpbmdsZSAke3Bvc3RJZH0gJHtwb3N0U2x1Z31gKTtcbiAgICAgICAgcmV0dXJuIGluZm8uYWRkVmVudWVzKFxuICAgICAgICAgICAgY29udGVudFNlcnZpY2UuY29udmVydChcbiAgICAgICAgICAgICAgICBhd2FpdCBpbmZvLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksXG4gICAgICAgICAgICAgICAgaW5mby5fbG9jYWxlXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgaW5mby5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBpbmZvLmFsbENvbnRlbnRzID0gYXdhaXQgaW5mby5nZXQobG9jYWxlKTtcbiAgICAgICAgaW5mby5wYXJzZShpbmZvLmFsbENvbnRlbnRzLCBsb2NhbGUsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbmZvIGluaXRcIiwgaW5mby5fbG9jYWxlKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImluZm8gY3VycmVudCBwYWdlXCIsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlLnNpbmdsZVVybCkge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAoYXdhaXQgaW5mby5nZXRTaW5nbGUoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZS5zaW5nbGVVcmxcbiAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICBhd2FpdCBzaXRlLmxvYWRTaW5nbGUoY29udGVudC5pZCwgY3VycmVudFBhZ2Uuc2luZ2xlVXJsLCBcImluZm9cIik7XG4gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2Uuc3ViUGFnZSA9PT0gUGFnZXMuSElTVE9SSUNBTCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGhpc3RvcmljYWwuaW5pdChsb2NhbGUsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG59O1xuIiwiY29uc3QgdHJhbnNsYXRpb24gPSB7XG4gICAgc3Y6IHtcbiAgICAgICAgQmlsamV0dDogXCJCaWxqZXR0XCIsXG4gICAgICAgIEJpbGpldHRQbDogXCJCaWxqZXR0ZXJcIixcbiAgICAgICAgRG9vcnM6IFwiRMO2cnJhciDDtnBwbmFyXCIsXG4gICAgICAgIE9wZW5zOiBcIsOWcHBuYXJcIixcbiAgICAgICAgU29sZE91dDogXCJTbHV0c8OlbGRcIixcbiAgICAgICAgQ2FuY2VsbGVkOiBcIkluc3TDpGxsZFwiLFxuICAgICAgICBTZWxlY3RZZWFyOiBcIlbDpGxqIMOlclwiLFxuICAgICAgICBTZWFyY2hBY3Q6IFwiU8O2ayBha3RcIixcbiAgICAgICAgLy9DbGFuZGVzdGlub0Zlc3RpdmFsOiBcIkNsYW5kZXN0aW5vIEZlc3RpdmFsPGJyPjI5IG1hauKAkzEganVuaSAyMDI1XCIsXG4gICAgICAgIENsYW5kZXN0aW5vRmVzdGl2YWw6IFwiQ2xhbmRlc3Rpbm8gRmVzdGl2YWxcIixcbiAgICAgICAgR29sZHBhc3M6IFwiR3VsZHBhc3NcIixcbiAgICAgICAgRmVzdGl2YWxwYXNzOiBcIkZlc3RpdmFscGFzc1wiLFxuICAgICAgICBLbDogXCJrbFwiLFxuICAgICAgICBGcmVlQWRtaXNzaW9uUmVnaXN0cmF0aW9uUmVxdWlyZWQ6IFwiRnJpIGVudHLDqSDigJMgQW5tw6RsYW4ga3LDpHZzXCJcbiAgICB9LFxuICAgIGVuOiB7XG4gICAgICAgIEJpbGpldHQ6IFwiVGlja2V0XCIsXG4gICAgICAgIEJpbGpldHRQbDogXCJUaWNrZXRzXCIsXG4gICAgICAgIERvb3JzOiBcIkRvb3JzIG9wZW5cIixcbiAgICAgICAgT3BlbnM6IFwiT3BlblwiLFxuICAgICAgICBTb2xkT3V0OiBcIlNvbGQgT3V0XCIsXG4gICAgICAgIENhbmNlbGxlZDogXCJDYW5jZWxsZWRcIixcbiAgICAgICAgU2VsZWN0WWVhcjogXCJTZWxlY3QgeWVhclwiLFxuICAgICAgICBTZWFyY2hBY3Q6IFwiU2VhcmNoIGFjdFwiLFxuICAgICAgICAvL0NsYW5kZXN0aW5vRmVzdGl2YWw6IFwiQ2xhbmRlc3Rpbm8gRmVzdGl2YWw8YnI+TWF5IDI54oCTSnVuZSAxIDIwMjVcIixcbiAgICAgICAgQ2xhbmRlc3Rpbm9GZXN0aXZhbDogXCJDbGFuZGVzdGlubyBGZXN0aXZhbFwiLFxuICAgICAgICBHb2xkcGFzczogXCJHb2xkIFBhc3NcIixcbiAgICAgICAgRmVzdGl2YWxwYXNzOiBcIkZlc3RpdmFsIFBhc3NcIixcbiAgICAgICAgS2w6IFwiaHJzXCIsXG4gICAgICAgIEZyZWVBZG1pc3Npb25SZWdpc3RyYXRpb25SZXF1aXJlZDogXCJGcmVlIGFkbWlzc2lvbiDigJMgUmVnaXN0cmF0aW9uIHJlcXVpcmVkXCJcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlID0ge1xuICAgIGdldDogZnVuY3Rpb24obGFuOnN0cmluZywgdHJhbnM6c3RyaW5nKSB7XG4gICAgICAgI
4181HJldHVybiAodHJhbnNsYXRpb24gYXMgYW55KVtsYW5dW3RyYW5zXTtcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnbGFuZ3VhZ2UgaW5pdCcpO1xuICAgIH1cbn0iLCJleHBvcnQgY29uc3QgbG9nbyA9IHtcbiAgICBzY3JvbGxlZExvZ286IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBzY3JvbGxlZCA9ICgkKCcuc2Nyb2xsZWQnKS5sZW5ndGg+MClcbiAgICAgICAgdmFyIHNpbmdsZVZpZXcgPSAoJCgnLnNpbmdsZS1mb2N1cycpLmxlbmd0aD4wKVxuICAgICAgICBsZXQgc2Nyb2xsT2JqZWN0O1xuICAgICAgICBsZXQgYnJlYWtwb2ludDtcblxuICAgICAgICBpZihzaW5nbGVWaWV3KSB7XG4gICAgICAgICAgICBpZihzY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbE9iamVjdCA9ICQoJy5zaW5nbGUtZGVzY3JpcHRpb24nKS5maXJzdCgpXG4gICAgICAgICAgICBicmVha3BvaW50ID0gMTEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2Nyb2xsT2JqZWN0ID0gJCgnI2NvbnRlbnQnKS5maXJzdCgpO1xuICAgICAgICAgICAgYnJlYWtwb2ludCA9IC05MDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb250ZW50UG9zVG9wID0gc2Nyb2xsT2JqZWN0LnBvc2l0aW9uKCkudG9wO1xuICAgICAgICBpZihjb250ZW50UG9zVG9wPGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAgICQoJy5zaXRlLXRpdGxlJykuYWRkQ2xhc3MoJ3Njcm9sbGVkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcuc2l0ZS10aXRsZScpLnJlbW92ZUNsYXNzKCdzY3JvbGxlZCcpO1xuICAgICAgICB9XG5cbiAgICB9LFxuICAgIGxpc3RlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaWRTY3JvbGwgPSBmYWxzZTtcblxuICAgICAgICBkb2
4181N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAnd2hlZWwnLCAoIGV2dCApID0+IHtcbiAgICAgICAgICAgIGRpZFNjcm9sbCA9IHRydWU7XG4gICAgICAgIH0sIHsgY2FwdHVyZTogZmFsc2UsIHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ3RvdWNobW92ZScsICggZXZ0ICkgPT4ge1xuICAgICAgICAgICAgZGlkU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgfSwgeyBjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggZGlkU2Nyb2xsICkge1xuICAgICAgICAgICAgICAgIGRpZFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxvZ28uc2Nyb2xsZWRMb2dvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDE3MCk7XG5cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9nbyBpbml0Jyk7XG4gICAgICAgIGxvZ28ubGlzdGVuKCk7XG4gICAgfVxufSIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZSB9IGZyb20gXCIuL3NpdGVcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCB7IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCwgU29ydE9yZGVyIH0gZnJvbSBcIi4vZXZlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub1BhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5cbmV4cG9ydCBjb25zdCBuZXdzID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxFdmVudHM6IFtdIGFzIENsYW5kZXN0aW5vRXZlbnRbXSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLnJlbmRlclBvc3QoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgbmV3cy5wYXJzZShldmVudHMpO1xuICAgICAgICBuZXdzLmxpc3RlbkJveGVzKCk7XG4gICAgfSxcbiAgICBsaXN0ZW5Cb3hlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIm5ld3MgbGlzdGVuQm94ZXNcIik7XG4gICAgICAgICQoXCJhLnNpbmdsZS1ib3hcIikuY2xpY2soZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHNpdGUuaGFuZGxlQ2xpY2sodGhpcyk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZywgY3VycmVudFBhZ2U6IENsYW5kZXN0aW5vUGFnZSkge1xuICAgICAgICBuZXdzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIC8vYXdhaXQgZXZlbnRTZXJ2aWNlLmluaXQobG9jYWxlKTtcbiAgICAgICAgYXdhaXQgY29udGVudFNlcnZpY2UuaW5pdChsb2NhbGUsIGN1cnJlbnRQYWdlLmNhdGVnb3J5KTtcblxuICAgICAgICBldmVudFNlcnZpY2UuYXBwZW5kQ29udGVudChjb250ZW50U2VydmljZS5hbGxDb250ZW50cyk7XG4gICAgICAgIG5ld3MuYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLmFsbEV2ZW50cy5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICBlLmNhdGVnb3JpZXMuaW5jbHVkZXMoY3VycmVudFBhZ2UuY2F0ZWdvcnkpXG4gICAgICAgICk7XG5cbiAgICAgICAgbmV3cy5hbGxFdmVudHMgPSBldmVudFNlcnZpY2Uuc29ydFN0aWNreShcbiAgICAgICAgICAgIG5ld3MuYWxsRXZlbnRzLFxuICAgICAgICAgICAgU29ydE9yZGVyLlJBTkRPTVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnRlbnRTZXJ2aWNlLmFkZEV4dHJhQ2xhc3NlcyhuZXdzLmFsbEV2ZW50cyk7XG5cbiAgICAgICAgbmV3cy5sb2FkKG5ld3MuYWxsRXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIm5ld3MgaW5pdFwiLCBuZXdzLl9sb2NhbGUpO1xuICAgIH0sXG59O1xuIiwiZXhwb3J0IGVudW0gUGFnZXMge1xuICAgIE5FV1MgPSBcIk5FV1NcIixcbiAgICBQUk9HUkFNID0gXCJQUk9HUkFNXCIsXG4gICAgVElDS0VUUyA9IFwiVElDS0VUXCIsXG4gICAgU0NIRURVTEUgPSBcIlNDSEVEVUxFXCIsXG4gICAgQ0FMRU5EQVIgPSBcIkNBTEVOREFSXCIsXG4gICAgSU5GTyA9IFwiSU5GT1wiLFxuICAgIFZFTlVFUyA9IFwiVkVOVUVTXCIsXG4gICAgQkFDS1NUQUdFID0gXCJCQUNLU1RBR0VcIixcbiAgICAvL0FDQ0VTU0lCSUxJVFkgPSBcIkFDQ0VTU0lCSUxJVFlcIixcbiAgICBGQVEgPSBcIkZBUVwiLFxuICAgIFBBUlRORVJTID0gXCJQQVJUTkVSU1wiLFxuICAgIFBPRENBU1QgPSBcIlBPRENBU1RcIixcbiAgICBISVNUT1JJQ0FMID0gXCJISVNUT1JJQ0FMXCIsXG4gICAgQVJDSElWRV9PRl9JTUFHRVMgPSBcIkFSQ0hJVkVfT0ZfSU1BR0VTXCIsXG4gICAgUFJFU1MgPSBcIlBSRVNTXCIsXG59XG5cbmV4cG9ydCBlbnVtIExvY2FsZXMge1xuICAgIHN2ID0gXCJzdlwiLFxuICAgIGVuID0gXCJlblwiLFxufVxuXG5leHBvcnQgdHlwZSBDbGFuZGVzdGlub1BhZ2UgPSB7XG4gICAgcGFnZTogUGFnZXM7XG4gICAgc3ViUGFnZT86IFBhZ2VzO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHNpbmdsZVVybD86IHN0cmluZztcbiAgICBjYXRlZ29yeT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vU2l0ZW1hcCA9IHtcbiAgICBba2V5IGluIExvY2FsZXNdOiB7XG4gICAgICAgIFtrZXkgaW4gUGFnZXNdPzogQ2xhbmRlc3Rpbm9QYWdlO1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2l0ZW1hcDogQ2xhbmRlc3Rpbm9TaXRlbWFwID0ge1xuICAgIFtMb2NhbGVzLnN2XToge1xuICAgICAgICBORVdTOiB7IHBhZ2U6IFBhZ2VzLk5FV1MsIHVybDogXCJcIiwgY2F0ZWdvcnk6IDkgfSxcbiAgICAgICAgUFJPR1JBTTogeyBwYWdlOiBQYWdlcy5QUk9HUkFNLCB1cmw6IFwicHJvZ3JhbVwiLCBjYXRlZ29yeTogMTEgfSxcbiAgICAgICAgVElDS0VUOiB7IHBhZ2U6IFBhZ2VzLlRJQ0tFVFMsIHVybDogXCJiaWxqZXR0ZXJcIiB9LFxuICAgICAgICBTQ0hFRFVMRTogeyBwYWdlOiBQYWdlcy5TQ0hFRFVMRSwgdXJsOiBcInNwZWxzY2hlbWFcIiB9LFxuICAgICAgICBDQUxFTkRBUjogeyBwYWdlOiBQYWdlcy5DQUxFTkRBUiwgdXJsOiBcImthbGVuZGVyXCIgfSxcbiAgICAgICAgSU5GTzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiIH0sXG4gICAgICAgIFZFTlVFUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwic2NlbmVyXCIgfSxcbiAgICAgICAgLy8gQUNDRVNTSUJJTElUWToge1xuICAgICAgICAvLyAgICAgcGFnZTogUGFnZXMuSU5GTyxcbiAgICAgICAgLy8gICAgI
4181HVybDogXCJpbmZvXCIsXG4gICAgICAgIC8vICAgICBzaW5nbGVVcmw6IFwidGlsbGdhbmdsaWdoZXRcIixcbiAgICAgICAgLy8gfSxcbiAgICAgICAgRkFROiB7IHBhZ2U6IFBhZ2VzLklORk8sIHVybDogXCJpbmZvXCIsIHNpbmdsZVVybDogXCJmYXFcIiB9LFxuICAgICAgICBQQVJUTkVSUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwicGFydG5lcnNcIiB9LFxuICAgICAgICBCQUNLU1RBR0U6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcImJhY2tzdGFnZVwiIH0sXG4gICAgICAgIEhJU1RPUklDQUw6IHtcbiAgICAgICAgICAgIHBhZ2U6IFBhZ2VzLklORk8sXG4gICAgICAgICAgICBzdWJQYWdlOiBQYWdlcy5ISVNUT1JJQ0FMLFxuICAgICAgICAgICAgdXJsOiBcImluZm9cIixcbiAgICAgICAgICAgIHNpbmdsZVVybDogXCJwcmV2aW91cy1saW5lLXVwXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFBPRENBU1Q6IHsgcGFnZTogUGFnZXMuUE9EQ0FTVCwgdXJsOiBcInBvZHNcIiwgY2F0ZWdvcnk6IDEwIH0sXG4gICAgICAgIEFSQ0hJVkVfT0ZfSU1BR0VTOiB7IHBhZ2U6IFBhZ2VzLkFSQ0hJVkVfT0ZfSU1BR0VTLCB1cmw6IFwiYmlsZGFya2l2XCIgfSxcbiAgICAgICAgUFJFU1M6IHsgcGFnZTogUGFnZXMuUFJFU1MsIHVybDogXCJwcmVzc1wiIH0sXG4gICAgfSxcbiAgICBbTG9jYWxlcy5lbl06IHtcbiAgICAgICAgTkVXUzogeyBwYWdlOiBQYWdlcy5ORVdTLCB1cmw6IFwiXCIsIGNhdGVnb3J5OiAxNSB9LFxuICAgICAgICBQUk9HUkFNOiB7IHBhZ2U6IFBhZ2VzLlBST0dSQU0sIHVybDogXCJwcm9ncmFtXCIsIGNhdGVnb3J5OiAxNyB9LFxuICAgICAgICBUSUNLRVQ6IHsgcGFnZTogUGFnZXMuVElDS0VUUywgdXJsOiBcInRpY2tldHNcIiB9LFxuICAgICAgICBTQ0hFRFVMRTogeyBwYWdlOiBQYWdlcy5TQ0hFRFVMRSwgdXJsOiBcInNjaGVkdWxlXCIgfSxcbiAgICAgICAgQ0FMRU5EQVI6IHsgcGFnZTogUGFnZXMuQ0FMRU5EQVIsIHVybDogXCJjYWxlbmRhclwiIH0sXG4gICAgICAgIElORk86IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiB9LFxuICAgICAgICBWRU5VRVM6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcInZlbnVlc1wiIH0sXG4gICAgICAgIC8vIEFDQ0VTU0lCSUxJVFk6IHtcbiAgICAgICAgLy8gICAgIHBhZ2U6IFBhZ2VzLklORk8sXG4gICAgICAgIC8vICAgICB1cmw6IFwiaW5mb1wiLFxuICAgICAgICAvLyAgICAgc2luZ2xlVXJsOiBcImFjY2Vzc2liaWxpdHlcIixcbiAgICAgICAgLy8gfSxcbiAgICAgICAgRkFROiB7IHBhZ2U6IFBhZ2VzLklORk8sIHVybDogXCJpbmZvXCIsIHNpbmdsZVVybDogXCJmYXFcIiB9LFxuICAgICAgICBQQVJUTkVSUzogeyBwYWdlOiBQYWdlcy5JTkZPLCB1cmw6IFwiaW5mb1wiLCBzaW5nbGVVcmw6IFwicGFydG5lcnNcIiB9LFxuICAgICAgICBCQUNLU1RBR0U6IHsgcGFnZTogUGFnZXMuSU5GTywgdXJsOiBcImluZm9cIiwgc2luZ2xlVXJsOiBcImJhY2tzdGFnZVwiIH0sXG4gICAgICAgIFBPRENBU1Q6IHsgcGFnZTogUGFnZXMuUE9EQ0FTVCwgdXJsOiBcInBvZHNcIiwgY2F0ZWdvcnk6IDE2IH0sXG4gICAgICAgIEFSQ0hJVkVfT0ZfSU1BR0VTOiB7XG4gICAgICAgICAgICBwYWdlOiBQYWdlcy5BUkNISVZFX09GX0lNQUdFUyxcbiAgICAgICAgICAgIHVybDogXCJhcmNoaXZlLW9mLWltYWdlc1wiLFxuICAgICAgICB9LFxuICAgICAgICBQUkVTUzogeyBwYWdlOiBQYWdlcy5QUkVTUywgdXJsOiBcInByZXNzXCIgfSxcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2UgPSB7XG4gICAgZmluZFBhZ2VCeVVybDogZnVuY3Rpb24gKFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgc3ViUGFnZTogc3RyaW5nLFxuICAgICAgICBsb2NhbGU6IExvY2FsZXNcbiAgICApOiBDbGFuZGVzdGlub1BhZ2Uge1xuICAgICAgICBsZXQgcGFnZSA9IE9iamVjdC52YWx1ZXMoc2l0ZW1hcFtsb2NhbGVdKS5maW5kKFxuICAgICAgICAgICAgKGUpID0+IGUudXJsID09PSB1cmwgJiYgZS5zaW5nbGVVcmwgPT09IHN1YlBhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc2l0ZW1hcFtsb2NhbGVdKS5maW5kKChlKSA9PiBlLnVybCA9PT0gdXJsKTtcbiAgICB9LFxufTsiLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBjb250ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9Db250ZW50IH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGV2ZW50U2VydmljZSwgQ2xhbmRlc3Rpbm9FdmVudCB9IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgQ2xhbmRlc3Rpbm9QYWdlIH0gZnJvbSBcIi4vcGFnZVwiO1xuXG5leHBvcnQgY29uc3QgcG9kcyA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgYWxsQ29udGVudHM6IFtdIGFzIENsYW5kZXN0aW5vQ29udGVudFtdLFxuICAgIGFyY2hpdmVQb2RCZWZvcmVJZDogMTIzNDQsXG4gICAgcGFyc2U6IGZ1bmN0aW9uIChjb250ZW50czogQ2xhbmRlc3Rpbm9Db250ZW50W10pIHtcbiAgICAgICAgY29udGVudHMuZm9yRWFjaCgoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQuaWQgPD0gcG9kcy5hcmNoaXZlUG9kQmVmb3JlSWQgfHwgY29udGVudC5pZCA9PSAxMjMzMykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQuZXh0cmFDc3NDbGFzcyA9IFwicG9kcy1hcmNoaXZlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBjb250ZW50IGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICBldmVudC5ldmVudFR5cGUgPSBcInBvZHNcIjtcbiAgICAgICAgICAgIGV2ZW50U2VydmljZS5yZW5kZXJQb3N0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAoY29udGVudHM6IENsYW5kZXN0aW5vQ29udGVudFtdLCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBwb2RzLnBhcnNlKGNvbnRlbn
4181RzKTtcbiAgICAgICAgcG9kcy5saXN0ZW5Cb3hlcygpO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJwb2RzIGxpc3RlbkJveGVzXCIpO1xuICAgICAgICAkKFwiYS5zaW5nbGUtYm94XCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIGN1cnJlbnRQYWdlOiBDbGFuZGVzdGlub1BhZ2UpIHtcbiAgICAgICAgcG9kcy5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBhd2FpdCBjb250ZW50U2VydmljZS5pbml0KGxvY2FsZSwgY3VycmVudFBhZ2UuY2F0ZWdvcnkpO1xuICAgICAgICBwb2RzLmFsbENvbnRlbnRzID0gY29udGVudFNlcnZpY2UuYWxsQ29udGVudHM7XG5cbiAgICAgICAgcG9kcy5sb2FkKHBvZHMuYWxsQ29udGVudHMsIGxvY2FsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicG9kcyBpbml0XCIsIHBvZHMuX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBldmVudFNlcnZpY2UsIENsYW5kZXN0aW5vRXZlbnQgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyYW0gPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbEV2ZW50czogW10gYXMgQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgIHJlbW92ZUFmdGVyRGF5czogMSxcbiAgICBwYXJzZTogZnVuY3Rpb24gKGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRTZXJ2aWNlLnJlbmRlclBvc3QoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWQ6IGZ1bmN0aW9uIChldmVudHM6IENsYW5kZXN0aW5vRXZlbnRbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgcHJvZ3JhbS5wYXJzZShldmVudHMpO1xuICAgICAgICBwcm9ncmFtLmxpc3RlbkJveGVzKCk7XG4gICAgfSxcbiAgICBsaXN0ZW5Cb3hlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImxpbmV1cCBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImEuc2luZ2xlLWJveFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgc2l0ZS5oYW5kbGVDbGljayh0aGlzKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaW5pdDogYXN5bmMgZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHByb2dyYW0uX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcHJvZ3JhbS5hbGxFdmVudHMgPSBhd2FpdCBldmVudFNlcnZpY2UuZ2V0KGxvY2FsZSk7XG4gICAgICAgIHByb2dyYW0uYWxsRXZlbnRzID0gZXZlbnRTZXJ2aWNlLnNvcnRQYXN0QW5kRnV0dXJlKFxuICAgICAgICAgICAgcHJvZ3JhbS5hbGxFdmVudHMsXG4gICAgICAgICAgICBkYXlqcygpLnN1YnRyYWN0KHByb2dyYW0ucmVtb3ZlQWZ0ZXJEYXlzLCBcImRheXNcIikudG9EYXRlKClcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZ3JhbS5sb2FkKHByb2dyYW0uYWxsRXZlbnRzLCBsb2NhbGUpO1xuICAgICAgICBjb250ZW50U2VydmljZS5hZGRFeHRyYUNsYXNzZXMocHJvZ3JhbS5hbGxFdmVudHMpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImxpbmV1cCBpbml0XCIsIHByb2dyYW0uX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGUgfSBmcm9tIFwiLi9zaXRlXCI7XG5pbXBvcnQgeyBldmVudFNlcnZpY2UsIENsYW5kZXN0aW5vRXZlbnQgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tIFwiZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlXCI7XG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tIFwiZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xuICAgIHZlbnVlczogQ2xhbmRlc3Rpbm9WZW51ZVRyYWNrW107XG4gICAgZXZlbnRzOiBDbGFuZGVzdGlub0V2ZW50W107XG4gICAgc3RhcnRTbG90PzogRGF0ZTtcbiAgICBlbmRTbG90PzogRGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIENsYW5kZXN0aW5vVmVudWVUcmFjayA9IHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHRyYWNrOiBudW1iZXI7XG4gICAgZG9vcnNPcGVuOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2NoZWR1bGUgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIGFsbEV2ZW50czogW10gYXMgQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgIGFsbFZlbnVlczogW10gYXMgc3RyaW5nW10sXG4gICAgc2xvdHNUb1JlbmRlcjogODAsXG4gICAgcmVtb3ZlQWZ0ZXJEYXlzOiAxLFxuICAgIHJlbmRlclNsb3Q6IGFzeW5jIGZ1bmN0aW9uIChcbiAgICAgICAgZXZlbnQ6IENsYW5kZXN0aW5vRXZlbnQsXG4gICAgICAgIHN0YXJ0VGltZTogRGF0ZSxcbiAgICAgICAgZW5kVGltZTogRGF0ZSxcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZ1xuICAgICkge1xuICAgICAgICB2Y
4181XIgc3RhcnRTbG90ID0gc3RhcnRUaW1lXG4gICAgICAgICAgICA/IHNjaGVkdWxlLnJvdW5kVGltZShkYXlqcyhzdGFydFRpbWUpKS5mb3JtYXQoXCJISG1tXCIpXG4gICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHZhciBlbmRTbG90ID0gZW5kVGltZVxuICAgICAgICAgICAgPyBzY2hlZHVsZS5yb3VuZFRpbWUoZGF5anMoZW5kVGltZSkpLmZvcm1hdChcIkhIbW1cIilcbiAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICBsZXQgdGVtcGxhdGUgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2hlZHVsZS1pdGVtXCIgIGRhdGEtaWQ9XCIke1xuICAgICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfVwiIHN0eWxlPVwiZ3JpZC1jb2x1bW46IHRyYWNrLSR7XG4gICAgICAgICAgICBldmVudC50cmFja1xuICAgICAgICB9OyBncmlkLXJvdzogdGltZS0ke3N0YXJ0U2xvdH0gLyB0aW1lLSR7ZW5kU2xvdH07YmFja2dyb3VuZC1jb2xvcjoke1xuICAgICAgICAgICAgZXZlbnQudmVudWUuY29sb3JcbiAgICAgICAgfVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpbWVcIj4ke2RheWpzKHN0YXJ0VGltZSkuZm9ybWF0KFwiSEgubW1cIil94oCTJHtkYXlqcyhcbiAgICAgICAgICAgIGVuZFRpbWVcbiAgICAgICAgKS5mb3JtYXQoXCJISC5tbVwiKX08L3A+XG4gICAgICAgICAgICAgICAgPGgyPiR7ZXZlbnQudGl0bGV9PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAkKHNlbGVjdG9yKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnQ6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgc2VsZWN0b3I6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlbmRlckV2ZW50XCIsIGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90KFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBldmVudC5zdGFydFRpbWUsXG4gICAgICAgICAgICBldmVudC5lbmRUaW1lLFxuICAgICAgICAgICAgc2VsZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImV2ZW50LnN0YXJ0VGltZTJcIiwgZXZlbnQuc3RhcnRUaW1lMik7XG4gICAgICAgIGlmIChldmVudC5zdGFydFRpbWUyICYmIGV2ZW50LmVuZFRpbWUyKSB7XG4gICAgICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90KFxuICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0VGltZTIsXG4gICAgICAgICAgICAgICAgZXZlbnQuZW5kVGltZTIsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN0YXJ0VGltZTMgJiYgZXZlbnQuZW5kVGltZTMpIHtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclNsb3QoXG4gICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRUaW1lMyxcbiAgICAgICAgICAgICAgICBldmVudC5lbmRUaW1lMyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcm91bmRUaW1lOiBmdW5jdGlvbiAoZGF0ZTogZGF5anMuRGF5anMpIHtcbiAgICAgICAgdmFyIG1pbnV0ZXMgPSBkYXRlLmZvcm1hdChcIm1tXCIpO1xuICAgICAgICBpZiAoW1wiMDBcIiwgXCIxNVwiLCBcIjMwXCIsIFwiNDVcIl0uaW5jbHVkZXMobWludXRlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXlqcyhNYXRoLmNlaWwoZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCkgLyA5MDAwMDApICogOTAwMDAwKTtcbiAgICB9LFxuICAgIGFkZFRpbWVTbG90OiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIHRpbWVTbG90OiBkYXlqcy5EYXlqcyxcbiAgICAgICAgc2xvdFNpemU6IG51bWJlcixcbiAgICAgICAgc2VsZWN0b3I6IHN0cmluZyxcbiAgICAgICAgaGlkZGVuOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgdmFyIHRpbWVTbG90RW5kID0gdGltZVNsb3QuYWRkKHNsb3RTaXplLCBcIm1cIik7XG4gICAgICAgICQoc2VsZWN0b3IpLmFwcGVuZChcbiAgICAgICAgICAgIGA8aDMgY2xhc3M9XCJ0aW1lLXNsb3QgJHtoaWRkZW59XCIgc3R5bGU9XCJncmlkLXJvdzogdGltZS0ke3RpbWVTbG90LmZvcm1hdChcbiAgICAgICAgICAgICAgICBcIkhIbW1cIlxuICAgICAgICAgICAgKX0gLyB0aW1lLSR7dGltZVNsb3RFbmQuZm9ybWF0KFwiSEhtbVwiKX07XCI+JHt0aW1lU2xvdC5mb3JtYXQoXG4gICAgICAgICAgICAgICAgXCJISC5tbVwiXG4gICAgICAgICAgICApfTwvaDM+YFxuICAgICAgICApO1xuICAgIH0sXG4gICAgcmVuZGVyU2xvdHM6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVuZGVyU2xvdHNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF5LmV2ZW50cy5sZW5ndGhcIiwgZGF5LmV2ZW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImRheS5ldmVudHNbMF1cIiwgZGF5LmV2ZW50c1swXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGF5LnN0YXJ0U2xvdFwiLCBkYXkuc3RhcnRTbG90KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXkuZW5kU2xvdFwiLCBkYXkuZW5kU2xvdCk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRUaW1lc2xvdCA9IGRheWpzKGRheS5kYXRlKS5hZGQoXG4gICAgICAgICAgICBjb25maWcuZWFybGllc3RFdmVudEhvdXIsXG4gICAgICAgICAgICBcImhcIlxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbG90c1RvUmVuZGVyOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBuZXh0VGltZXNsb3QgPSBjdXJyZW50VGltZXNsb3QuYWRkKDE1LCBcIm1cIik7XG5cbiAgICAgICAgICAgIGxldCBoaWRkZW4gPSBcIlwiO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5pc1NhbWVPckJlZm9yZShkYXkuc3RhcnRTbG90KSB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5pc1NhbWVPckFmdGVyKGRheS5lbmRTbG90KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJyZW50VGltZXNsb3QuZm9ybWF0KCdISDptbScpKycgaXMgYmVmb3JlICcrZGF5LnN0YXJ0U2xvdC5mb3JtYXQoJ0hIOm1tJykpO1xuICAgICAgICAgICAgICAgIC8vY3VycmVudFRpbWVzbG90ID0gbmV4dFRpbWVzbG90O1xuICAgICAgICAgICAgICAgIC8vY29udGludWU7XG4gICAgICAgICAgICAgICAgaGlkZGVuID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgI
4181H1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdC5mb3JtYXQoXCJtbVwiKSA9PSBcIjAwXCIgfHxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGltZXNsb3QuZm9ybWF0KFwibW1cIikgPT0gXCIzMFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzY2hlZHVsZS5hZGRUaW1lU2xvdChjdXJyZW50VGltZXNsb3QsIDMwLCBkYXkuc2VsZWN0b3IsIGhpZGRlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGRheS5ldmVudHMuZmlsdGVyKCh7IHN0YXJ0VGltZSB9KSA9PlxuICAgICAgICAgICAgICAgIGRheWpzKHN0YXJ0VGltZSkuaXNCZXR3ZWVuKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZXNsb3QsXG4gICAgICAgICAgICAgICAgICAgIG5leHRUaW1lc2xvdCxcbiAgICAgICAgICAgICAgICAgICAgXCJzZWNvbmRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJbKVwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmVudHMubGVuZ3RoXCIgKyBldmVudHMubGVuZ3RoLCBkYXkuc2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJFdmVudChldmVudCwgZGF5LnNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJubyBldmVudHNcIiwgZGF5LnNlbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRUaW1lc2xvdCA9IG5leHRUaW1lc2xvdDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyVmVudWVzOiBhc3luYyBmdW5jdGlvbiAoZGF5OiBDbGFuZGVzdGlub0RheSkge1xuICAgICAgICBkYXkudmVudWVzLmZvckVhY2goKHZlbnVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmVudWVUaXRsZSA9IHZlbnVlLnRpdGxlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCImIzgyMDM7XCIsXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaHlwaGVuXCI+4oCQPC9zcGFuPidcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHZlbnVlVGl0bGUgPSB2ZW51ZVRpdGxlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgXCIsIFJpbmfDtm5cIixcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgJChkYXkuc2VsZWN0b3IpLmFwcGVuZChcbiAgICAgICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJ0cmFjay1zbG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJncmlkLWNvbHVtbjogdHJhY2stJHtcbiAgICAgICAgICAgICAgICAgICAgdmVudWUudHJhY2tcbiAgICAgICAgICAgICAgICB9OyBncmlkLXJvdzogdHJhY2tzO1wiPjxwIGNsYXNzPVwidGltZS1hbmQtcGxhY2VcIj4ke3ZlbnVlVGl0bGV9PC9wPjxwIGNsYXNzPVwiZG9vcnMtb3BlblwiPiR7bGFuZ3VhZ2UuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBzaXRlLl9sb2NhbGUsXG4gICAgICAgICAgICAgICAgICAgIFwiT3BlbnNcIlxuICAgICAgICAgICAgICAgICl9ICR7dmVudWUuZG9vcnNPcGVufTwvcD48L3NwYW4+YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICByZW5kZXJTY2hlZHVsZTogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZW5kZXJzY2hlZHVsZVwiKTtcblxuICAgICAgICBsZXQgZGF5VGl0bGUgPSBkYXlqcyhkYXkuZGF0ZSkuZm9ybWF0KFwiZGRkZCBEIE1NTU1cIik7XG4gICAgICAgICQoXCIuZW50cnktY29udGVudFwiKS5hcHBlbmQoYFxuICAgICAgICA8aDIgY2xhc3M9XCJzY2hlZHVsZS1kYXlcIj4ke2RheVRpdGxlfTwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY2hlZHVsZSB0cmFja3Mke2RheS52ZW51ZXMubGVuZ3RofSAke2RheS5zZWxlY3Rvci5yZXBsYWNlKFxuICAgICAgICAgICAgXCIuXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICl9XCIgYXJpYS1sYWJlbGxlZGJ5PVwic2NoZWR1bGUtaGVhZGluZ1wiPjwvZGl2PmApO1xuXG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclZlbnVlcyhkYXkpO1xuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJTbG90cyhkYXkpO1xuICAgIH0sXG4gICAgYWRkRXZlbnRUcmFja3M6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGRheS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnRyYWNrID0gZGF5LnZlbnVlcy5maW5kKFxuICAgICAgICAgICAgICAgIChlKSA9PiBlLnRpdGxlID09PSBldmVudC52ZW51ZS50aXRsZVxuICAgICAgICAgICAgKT8udHJhY2s7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgYWRkRGF5TGVuZ3RoOiBhc3luYyBmdW5jdGlvbiAoZGF5OiBDbGFuZGVzdGlub0RheSkge1xuICAgICAgICBsZXQgc3RhcnQgPSBkYXlqcyhkYXkuZXZlbnRzWzBdPy5zdGFydFRpbWUpO1xuICAgICAgICBsZXQgZW5kID0gZGF5anMoZGF5LmV2ZW50c1tkYXkuZXZlbnRzLmxlbmd0aCAtIDFdPy5lbmRUaW1lKTtcbiAgICAgICAgaWYgKGVuZC5ob3VyKCkgPCA4KSB7XG4gICAgICAgICAgICBlbmQgPSBlbmQuYWRkKDEsIFwiZGF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGF5LnN0YXJ0U2xvdCA9IHN0YXJ0LnN1YnRyYWN0KDEsIFwiaG91clwiKS50b0RhdGUoKTtcbiAgICAgICAgZGF5LnN0YXJ0U2xvdCA9IHN0YXJ0LnRvRGF0ZSgpO1xuICAgICAgICAvL2RheS5lbmRTbG90ID0gZW5kLmFkZCgxLCBcImhvdXJcIikudG9EYXRlKCk7XG4gICAgICAgIGRheS5lbmRTbG90ID0gZW5kLnRvRGF0ZSgpO1xuICAgIH0sXG4gICAgYWRkRXZlbnRzOiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIGV2ZW50czogQ2xhbmRlc3Rpbm9FdmVudFtdLFxuICAgICAgICBkYXk6IENsYW5kZXN0aW5vRGF5XG4gICAgKSB7XG4gICAgICAgIGV2ZW50cy5mb3JFYWNoKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIGRhdGUgPSBkYXlqcyhldmVudC5zdGFydERhdGUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGRheWpzKGRheS5kYXRlKS5pc1NhbW
4181UoZGF0ZSwgXCJkYXlcIikgJiZcbiAgICAgICAgICAgICAgICBldmVudC5zdGFydFRpbWUgJiZcbiAgICAgICAgICAgICAgICBldmVudC5lbmRUaW1lXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkYXkuZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkRXZlbnRcIiwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGFkZFZlbnVlczogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgbGV0IHRyYWNrID0gMTtcbiAgICAgICAgZGF5LmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIHZlbnVlVGl0bGUgPSBldmVudD8udmVudWUudGl0bGUgfHwgXCJ0YmFcIjtcbiAgICAgICAgICAgIGlmICghZGF5LnZlbnVlcy5zb21lKChlKSA9PiBlLnRpdGxlID09PSB2ZW51ZVRpdGxlKSkge1xuICAgICAgICAgICAgICAgIGxldCB2ZW51ZTogQ2xhbmRlc3Rpbm9WZW51ZVRyYWNrID0ge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdmVudWVUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgICAgIGRvb3JzT3BlbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRvb3JzT3BlbkZvcm1hdHRlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5anMoZXZlbnQuc3RhcnRUaW1lKS5mb3JtYXQoXCJILm1tXCIpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGF5LnZlbnVlcy5wdXNoKHZlbnVlKTtcbiAgICAgICAgICAgICAgICB0cmFjaysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHNvcnRWZW51ZXM6IGFzeW5jIGZ1bmN0aW9uIChkYXk6IENsYW5kZXN0aW5vRGF5KSB7XG4gICAgICAgIGRheS52ZW51ZXMuc29ydChcbiAgICAgICAgICAgIChhOiBDbGFuZGVzdGlub1ZlbnVlVHJhY2ssIGI6IENsYW5kZXN0aW5vVmVudWVUcmFjaykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVBID0gYS50aXRsZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVCID0gYi50aXRsZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lQSA8IG5hbWVCKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVBID4gbmFtZUIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbmFtZXMgbXVzdCBiZSBlcXVhbFxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCB0cmFjayA9IDE7XG4gICAgICAgIGRheS52ZW51ZXMuZm9yRWFjaCgodmVudWUpID0+IHtcbiAgICAgICAgICAgIHZlbnVlLnRyYWNrID0gdHJhY2s7XG4gICAgICAgICAgICB0cmFjaysrO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHJlbmRlckRheTogYXN5bmMgZnVuY3Rpb24gKGRheTogQ2xhbmRlc3Rpbm9EYXkpIHtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRXZlbnRzKHNjaGVkdWxlLmFsbEV2ZW50cywgZGF5KTtcbiAgICAgICAgLy9kYXkuZXZlbnRzID0gYXdhaXQgc2NoZWR1bGUuc29ydChkYXkuZXZlbnRzKTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkVmVudWVzKGRheSk7XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnNvcnRWZW51ZXMoZGF5KTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRXZlbnRUcmFja3MoZGF5KTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUuYWRkRGF5TGVuZ3RoKGRheSk7XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlclNjaGVkdWxlKGRheSk7XG4gICAgfSxcbiAgICBsb2FkRXZlbnRzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9MTAmJmZpbHRlcltvcmRlcmJ5XT1tZXRhX3ZhbHVlX251bSZmaWx0ZXJbbWV0YV9rZXldPWRhdHVtJmZpbHRlcltvcmRlcl09QVNDYFxuICAgICAgICApO1xuICAgIH0sXG4gICAgbGlzdGVuQm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzY2hlZHVsZSBsaXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImRpdi5zY2hlZHVsZS1pdGVtXCIpLmNsaWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBzaXRlLmhhbmRsZUNsaWNrKHRoaXMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWRGZXN0aXZhbDIwMjVEYXlzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRheTA6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDI0LTA1LTJcIikudG9EYXRlKCksXG4gICAgICAgICAgICBzZWxlY3RvcjogXCIuZGF5MFwiLFxuICAgICAgICAgICAgdmVudWVzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkwKTtcblxuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF5MTogQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgICAgICAgICBkYXRlOiBkYXlqcyhcIjIwMjMtMDYtOFwiKS50b0RhdGUoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXkxXCIsXG4gICAgICAgICAgICB2ZW51ZXM6IFtdLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUucmVuZGVyRGF5KGRheTEpO1xuXG4gICAgICAgIGNvbnN0IGRheTI6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDIzLTA2LTlcIikudG9EYXRlKCksXG4gICAgICAgICAgICBzZWxlY3RvcjogXCIuZGF5MlwiLFxuICAgICAgICAgICAgdmVudWVzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgI
4181H07XG4gICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkyKTtcblxuICAgICAgICBjb25zdCBkYXkzOiBDbGFuZGVzdGlub0RheSA9IHtcbiAgICAgICAgICAgIGRhdGU6IGRheWpzKFwiMjAyMy0wNi0xMFwiKS50b0RhdGUoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXkzXCIsXG4gICAgICAgICAgICB2ZW51ZXM6IFtdLFxuICAgICAgICAgICAgZXZlbnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgc2NoZWR1bGUucmVuZGVyRGF5KGRheTMpO1xuXG4gICAgICAgIGNvbnN0IGRheTQ6IENsYW5kZXN0aW5vRGF5ID0ge1xuICAgICAgICAgICAgZGF0ZTogZGF5anMoXCIyMDIzLTA2LTExXCIpLnRvRGF0ZSgpLFxuICAgICAgICAgICAgc2VsZWN0b3I6IFwiLmRheTRcIixcbiAgICAgICAgICAgIHZlbnVlczogW10sXG4gICAgICAgICAgICBldmVudHM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBzY2hlZHVsZS5yZW5kZXJEYXkoZGF5NCk7XG4gICAgfSxcbiAgICBsb2FkTW9udGhseURheXM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcygpLmRheXNJbk1vbnRoKCkgKyAzNjU7XG4gICAgICAgIGxldCBkYXlPZk1vbnRoID0gZGF5anMoKTtcbiAgICAgICAgbGV0IGRheXNUb1JlbmRlcjogQ2xhbmRlc3Rpbm9EYXlbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF5c0luTW9udGg7IGkrKykge1xuICAgICAgICAgICAgZGF5T2ZNb250aCA9IGRheWpzKCkuZGF0ZShpKTtcbiAgICAgICAgICAgIGRheU9mTW9udGggPSBkYXlPZk1vbnRoLnNldChcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgIGRheU9mTW9udGggPSBkYXlPZk1vbnRoLnNldChcImhvdXJcIiwgMCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzY2hlZHVsZS5hbGxFdmVudHMuZmluZCgoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZGF5anMoZS5zdGFydERhdGUpLmlzU2FtZShkYXlPZk1vbnRoLCBcImRheVwiKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheTogQ2xhbmRlc3Rpbm9EYXkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGRheU9mTW9udGgudG9EYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBcIi5kYXlcIiArIGksXG4gICAgICAgICAgICAgICAgICAgIHZlbnVlczogW10sXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghZGF5c1RvUmVuZGVyLmluY2x1ZGVzKGRheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5c1RvUmVuZGVyLnB1c2goZGF5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzVG9SZW5kZXIuZm9yRWFjaChhc3luYyAoZGF5KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlbmRlckRheVwiKTtcbiAgICAgICAgICAgIGF3YWl0IHNjaGVkdWxlLnJlbmRlckRheShkYXkpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcbiAgICAgICAgZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKTtcbiAgICAgICAgZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuXG4gICAgICAgIHNjaGVkdWxlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHNjaGVkdWxlLmFsbEV2ZW50cyA9IGF3YWl0IGV2ZW50U2VydmljZS5nZXRGb3JTY2hlZHVsZShsb2NhbGUpO1xuICAgICAgICBzY2hlZHVsZS5hbGxFdmVudHMgPSBhd2FpdCBldmVudFNlcnZpY2UuZmlsdGVyT2xkKFxuICAgICAgICAgICAgc2NoZWR1bGUuYWxsRXZlbnRzLFxuICAgICAgICAgICAgZGF5anMoKS5zdWJ0cmFjdChzY2hlZHVsZS5yZW1vdmVBZnRlckRheXMsIFwiZGF5c1wiKS50b0RhdGUoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vYXdhaXQgc2NoZWR1bGUubG9hZEZlc3RpdmFsMjAyNURheXMoKTtcblxuICAgICAgICBhd2FpdCBzY2hlZHVsZS5sb2FkTW9udGhseURheXMoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNjaGVkdWxlLmxpc3RlbkJveGVzKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNjaGVkdWxlIGluaXRcIiwgc2NoZWR1bGUuX2xvY2FsZSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfSxcbn07XG4iLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IHNpdGVtYXAsIExvY2FsZXMgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBlbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudFwiO1xuaW1wb3J0IHsgZmVzdGl2YWxwYXNzIH0gZnJvbSBcIi4vZmVzdGl2YWxwYXNzXCI7XG5pbXBvcnQgeyBsYW5ndWFnZSB9IGZyb20gXCIuL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0V2ZW50LCBldmVudFNlcnZpY2UgfSBmcm9tIFwiLi9ldmVudFNlcnZpY2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IGNvbnRlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29udGVudFNlcnZpY2VcIjtcblxuZXhwb3J0IGNvbnN0IHNoYXJlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcblxuICAgI
4181HJlbmRlclNoYXJlTGlua3M6IGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCwgbGluazogc3RyaW5nKSB7XG4gICAgICAgIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZUZiLmhyZWYgPVxuICAgICAgICAgICAgXCJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyLnBocD91PVwiICsgbGluaztcblxuICAgICAgICAvLyBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVUd2l0dGVyLmhyZWYgPVxuICAgICAgICAvLyAgICAgXCJodHRwOi8vdHdpdHRlci5jb20vc2hhcmU/dGV4dD1cIiArXG4gICAgICAgIC8vICAgICBldmVudC50aXRsZSArXG4gICAgICAgIC8vICAgICBcIiZ1cmw9XCIgK1xuICAgICAgICAvLyAgICAgY29uZmlnLnNpdGVVcmwgK1xuICAgICAgICAvLyAgICAgY29uZmlnLmdldFNpdGVSb290KCkgK1xuICAgICAgICAvLyAgICAgZXZlbnQuc2x1ZyArXG4gICAgICAgIC8vICAgICBcIi9cIiArXG4gICAgICAgIC8vICAgICBcIiZoYXNodGFncz1jbGFuZGVzdGlub2Zlc3RpdmFsXCI7XG5cbiAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlVXJsLmhyZWYgPSBsaW5rO1xuICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaW5uZXJIVE1MID0gXCJVcmxcIjtcbiAgICB9LFxuICAgIGFkZENhbGVuZGVyUHJvcGVydHk6IGZ1bmN0aW9uIChcbiAgICAgICAgY2FsZW5kYXI6IEhUTUxEaXZFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIC8vY2FsZW5kYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShwcm9wZXJ0eSlbMF0uaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIGNhbGVuZGFyLnNldEF0dHJpYnV0ZShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH0sXG4gICAgcmVuZGVyQWRkVG9DYWxlbmRhcjogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50LCBsaW5rOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFldmVudC5zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuYnV0dG9ucy5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaXMtaGlkZGVuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC5idXR0b25zLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJpcy1oaWRkZW5cIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbGVuZGFyID0gZWxlbWVudC5idXR0b25zLmJ1dHRvbkFkZFRvQ2FsZW5kYXI7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgIGNhbGVuZGFyLFxuICAgICAgICAgICAgICAgIFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRTZXJ2aWNlLnN0cmlwVGFncyhldmVudC50aXRsZSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBkZXNjcmlwdGlvbiA9IFwiXCI7XG5cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9ICdSZWFkIG1vcmU6IDxhIGhyZWY9XCInICsgbGluayArICdcIj4nICsgbGluayArIFwiPC9hPlwiO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnZlbnVlRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gXCJcXHJcXG5WZW51ZTogXCIgKyBldmVudC52ZW51ZUZvcm1hdHRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYXJlLmFkZENhbGVuZGVyUHJvcGVydHkoY2FsZW5kYXIsIFwiZGVzY3JpcHRpb25cIiwgZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnZlbnVlLmFkZHJlc3MpIHtcbiAgICAgICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcixcbiAgICAgICAgICAgICAgICAgICAgXCJsb2NhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBldmVudC52ZW51ZS5hZGRyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYXJlLmFkZENhbGVuZGVyUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgY2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgXCJzdGFydERhdGVcIixcbiAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5zdGFydFRpbWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgIGNhbGVuZGFyLFxuICAgICAgICAgICAgICAgIFwic3RhcnRUaW1lXCIsXG4gICAgICAgICAgICAgICAgZGF5anMoZXZlbnQuc3RhcnRUaW1lKS5mb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChldmVudC5lbmRUaW1lKSB7XG4gICAgICAgICAgICAgICAgc2hhcmUuYWRkQ2FsZW5kZXJQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgICAgIFwiZW5kRGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBkYXlqcyhldmVudC5lbmRUaW1lKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzaGFyZS5hZGRDYWxlbmRlclByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhcixcbiAgICAgICAgICAgICAgICAgICAgXCJlbmRUaW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIGRheWpzKGV2ZW50LmVuZFRpbWUpLmZvcm1hdChcIkhIOm1tXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVsZW1lbnQuYnV0dG9ucy5idXR0b25TaGFyZVR3aXR0ZXIuaHJlZiA9XG4gICAgICAgIC8vICAgICBcImh0dHA6Ly90d2l0dGVyLmNvbS9zaGFyZT90ZXh0PVwiICtcbiAgICAgICAgLy8gICAgIGV2ZW50LnRpdGxlICtcbiAgICAgICAgLy8gICAgIFwiJnVybD1cIiArXG4gICAgICAgIC8vICAgICBjb25maWcuc2l0ZVVybCArXG4gICAgICAgIC8vICAgICBjb25maWcuZ2V0U2l0ZVJvb3QoKSArXG4gICAgICAgIC8vICAgICBldmVudC5zbHVnICtcbiAgICAgICAgLy8gICAgIFwiL1wiICtcbiAgICAgICAgLy8gICAgIFwiJmhhc2h0YWdzPWNsYW5kZXN0aW5vZmVzdGl2YWxcIjtcblxuICAgICAgICBlbGVtZW50LmJ1dHRvbnMuYnV0dG9uU2hhcmVVcmwuaHJlZiA9XG4gICAgICAgICAgICBjb25maWcuc2l0ZVVybCArIGNvbmZpZy5nZXRTaXRlUm9vdCgpICsgZXZlbnQuc2x1ZztcbiAgICAgICAgZWxlbWVudC5idXR0b25zLmJ1dHRvblNoYXJlVXJsLmlubmVySFRNTCA9IFwiVXJsXCI7XG4gICAgfSxcbiAgICBsaXN0ZW5TaGFyZUJ1dHRvblNpbmdsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidXR0b25TaGFyZVNpbmdsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgXCJidXR0b24tc2hhcmUtc2luZ2xlXCJcbiAgICAgICAgKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuICAgICAgICBjb25zb2xlLmxvZyhcImxpc3RlblNoYXJlQnV0dG9uU2luZ2xlXCIgKyBidXR0b25TaGFyZVNpbmdsZSk7XG4gICAgICAgIGlmIChudWxsICE9PSBidXR0b25TaGFyZVNpbmdsZSkge1xuICAgICAgICAgICAgYnV0dG9uU2hhcmVTaW5nbGUub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIC0xID09PVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5pbmRleE9mKFwic2hhcmVcIilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gXCIgc2hhcmVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcsIG
4181V2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHNoYXJlLmxpc3RlblNoYXJlQnV0dG9uU2luZ2xlKCk7XG4gICAgICAgIGxldCBsaW5rID0gY29uZmlnLnNpdGVVcmwgKyBjb25maWcuZ2V0U2l0ZVJvb3QoKSArIGV2ZW50LnNsdWcgKyBcIi9cIjtcblxuICAgICAgICBzaGFyZS5fbG9jYWxlID0gbG9jYWxlO1xuICAgICAgICBzaGFyZS5yZW5kZXJTaGFyZUxpbmtzKGV2ZW50LCBsaW5rKTtcbiAgICAgICAgc2hhcmUucmVuZGVyQWRkVG9DYWxlbmRhcihldmVudCwgbGluayk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2hhcmUgaW5pdFwiLCBzaGFyZS5fbG9jYWxlKTtcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IGVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5pbXBvcnQgeyBmZXN0aXZhbHBhc3MgfSBmcm9tIFwiLi9mZXN0aXZhbHBhc3NcIjtcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSBcIi4vbGFuZ3VhZ2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vRXZlbnQsIGV2ZW50U2VydmljZSB9IGZyb20gXCIuL2V2ZW50U2VydmljZVwiO1xuaW1wb3J0IHsgQ2xhbmRlc3Rpbm9Db250ZW50LCBjb250ZW50U2VydmljZSB9IGZyb20gXCIuL2NvbnRlbnRTZXJ2aWNlXCI7XG5pbXBvcnQgeyBpbmZvIH0gZnJvbSBcIi4vaW5mb1wiO1xuLy9pbXBvcnQgeyB0ZXN0Q29udGVudCB9IGZyb20gXCIuL3Rlc3RDb250ZW50XCI7XG5pbXBvcnQgeyBldmVudFR5cGUgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSBcIi4vc2hhcmVcIjtcblxuZXhwb3J0IGNvbnN0IHNpdGUgPSB7XG4gICAgX2xvY2FsZTogY29uZmlnLmRlZmF1bHRMYW5nLFxuICAgIHJlbmRlckxhbmd1YWdlU2VsZWN0b3I6IGFzeW5jIGZ1bmN0aW9uIChzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3dlZGlzaFVybCA9IGNvbmZpZy5zaXRlRm9sZGVyICsgc2x1ZyArIFwiL1wiO1xuICAgICAgICBjb25zdCBlbmdsaXNoVXJsID0gY29uZmlnLnNpdGVGb2xkZXIgKyBcImVuL1wiICsgc2x1ZyArIFwiL1wiO1xuXG4gICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImxhbmd1YWdlLXNlbGVjdG9yXCI+PGEgaHJlZj1cIiR7c3dlZGlzaFVybH1cIiBjbGFzcz1cInN3ZWRpc2hcIj5TdmVuc2thPC9hPiB8IDxhIGhyZWY9XCIke2VuZ2xpc2hVcmx9XCIgY2xhc3M9XCJlbmdsaXNoXCI+RW5nbGlzaDwvYT48L2Rpdj5gO1xuICAgIH0sXG5cbiAgICByZW5kZXJIZWFkTGluZUFuZE1ldGE6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogQ2xhbmRlc3Rpbm9FdmVudCkge1xuICAgICAgICB2Y
4181XIgdGVtcGxhdGUgPSBgYDtcblxuICAgICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPHAgY2xhc3M9XCJldmVudC10eXBlXCI+JHtldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnRUeXBlXG4gICAgICAgICAgICApfTwvcD5gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVtcGxhdGUgKz0gYXdhaXQgc2l0ZS5yZW5kZXJMYW5ndWFnZVNlbGVjdG9yKGV2ZW50LnNsdWcpO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8aDEgY2xhc3M9XCJlbnRyeS10aXRsZVwiPiR7ZXZlbnQudGl0bGV9PC9oMT5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8ZGl2IGNsYXNzPVwic2hhcmUtc2luZ2xlXCI+PGEgaHJlZj1cIiNcIiBpZD1cImJ1dHRvbi1zaGFyZS1zaW5nbGVcIj48c3Bhbj5TaGFyZSBwb3N0PC9zcGFuPjwvYT48L2Rpdj5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8ZGl2IGNsYXNzPVwic2luZ2xlLW1ldGFcIj5gO1xuXG4gICAgICAgIGlmIChldmVudC5kYXRlVGltZUZvcm1hdHRlZCB8fCBldmVudC52ZW51ZSkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYDxwIGNsYXNzPVwidGltZS1hbmQtcGxhY2VcIj5gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRhdGVUaW1lRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgJHtldmVudC5kYXRlVGltZUZvcm1hdHRlZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnZlbnVlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0ZVRpbWVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGJyPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgJHtldmVudC52ZW51ZUZvcm1hdHRlZH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRhdGVUaW1lRm9ybWF0dGVkIHx8IGV2ZW50LnZlbnVlKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPC9wPmA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyMDI1IGFuZCBiZWZvcmUgd2Ugc2hvd2VkIGRvb3JzIG9wZW5lZCBvbiBzaW5nbGUgdmlldywgcmVtb3ZlZCBzaW5jZSAyMDI2XG4gICAgICAgIC8vIGlmIChldmVudC5kb29yc09wZW5Gb3JtYXR0ZWQpIHtcbiAgICAgICAgLy8gICAgIHRlbXBsYXRlICs9IGA8cCBjbGFzcz1cImRvb3JzLW9wZW5cIj4ke2xhbmd1YWdlLmdldChcbiAgICAgICAgLy8gICAgICAgICBzaXRlLl9sb2NhbGUsXG4gICAgICAgIC8vICAgICAgICAgXCJEb29yc1wiXG4gICAgICAgIC8vICAgICApfSAke2V2ZW50LmRvb3JzT3BlbkZvcm1hdHRlZH08L3A+YDtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8cCBjbGFzcz1cInRpY2tldFwiPmA7XG4gICAgICAgIGlmIChldmVudC50aWNrZXQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8YSBocmVmPVwiJHtldmVudC50aWNrZXR9XCI+JHtsYW5ndWFnZS5nZXQoXG4gICAgICAgICAgICAgICAgc2l0ZS5fbG9jYWxlLFxuICAgICAgICAgICAgICAgIFwiQmlsamV0dFBsXCJcbiAgICAgICAgICAgICl9PC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgKz0gYDwvcD5gO1xuXG4gICAgICAgIHRlbXBsYXRlICs9IGA8L2Rpdj5gO1xuICAgICAgICAkKHRlbXBsYXRlKS5wcmVwZW5kVG8oXCIuc2luZ2xlLWRlc2NyaXB0aW9uXCIpO1xuICAgIH0sXG4gICAgbWFrZUxhcmdlSW1hZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGltYWdlUmVmID0gJChcbiAgICAgICAgICAgIFwiI3NpbmdsZS1wYW5lLWNvbnRlbnQgLnNpbmdsZS1kZXNjcmlwdGlvbiAud3AtYmxvY2staW1hZ2U6Zmlyc3RcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoaW1hZ2VSZWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpbWFnZVJlZiA9ICQoXG4gICAgICAgICAgICAgICAgXCIjc2luZ2xlLXBhbmUtY29udGVudCAuc2luZ2xlLWRlc2NyaXB0aW9uIGZpZ3VyZTpmaXJzdFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGltYWdlRGV0YWNoZWQgPSBpbWFnZVJlZi5kZXRhY2goKTtcblxuICAgICAgICBpbWFnZURldGFjaGVkLnByZXBlbmRUbyhcIiNzaW5nbGUtcGFuZS1jb250ZW50XCIpO1xuICAgIH0sXG4gICAgcmVuZGVyRXZlbnRTdGF0dXNlczogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxsZWQgfHwgZXZlbnQuc29sZE91dCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gXCIjc2luZ2xlLXBhbmUtY29udGVudCA+IC53cC1ibG9jay1pbWFnZVwiO1xuICAgICAgICAgICAgJChzZWxlY3RvcikuYWRkQ2xhc3MoZXZlbnQuZXh0cmFDc3NDbGFzcyk7XG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gZXZlbnRTZXJ2aWNlLnJlbmRlckV2ZW50U3RhdHVzZXMoZXZlbnQpO1xuICAgICAgICAgICAgJChsYWJlbHMpLnByZXBlbmRUbyhzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFkZFdwRWRpdExpbms6IGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlcikge1xuICAgICAgICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoXCJsb2dnZWQtaW5cIikpIHtcbiAgICAgICAgICAgICQoXCIuY3VzdG9tLXBvc3QtZWRpdFwiKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgJChcIiN3cC1hZG1pbi1iYXItcm9vdC1kZWZhdWx0XCIpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPVwiY3VzdG9tLXBvc3QtZWRpdFwiPjxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNpdGVGb2xkZXIgK1xuICAgICAgICAgICAgICAgICAgICBcIndwLWFkbWluL3Bvc3QucGhwP3Bvc3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBwb3N0SWQgK1xuICAgICAgICAgICAgICAgICAgICAnJmFjdGlvbj1lZGl0Jmxhbmc9c3ZcIj5SZWRpZ2VyYSBpbmzDpGdnPC9hPjwvbGk+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlV3JhcHBlcnM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLTEgPT09XG4gICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5pbmRleE9mKFwic2luZ2xlLWZvY3VzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZWxlbWVudC53cmFwcGVycy5tYWluV3JhcHBlci5jbGFzc05hbWUgKz0gXCIgc2luZ2xlLWZvY3VzXCI7XG4gICAgICAgI
4181H1cblxuICAgICAgICBlbGVtZW50LndyYXBwZXJzLm5hdldyYXBwZXIuY2xhc3NOYW1lID1cbiAgICAgICAgICAgIGVsZW1lbnQud3JhcHBlcnMubmF2V3JhcHBlci5jbGFzc05hbWUucmVwbGFjZShcIiB0b2dnbGVkLW9uXCIsIFwiXCIpO1xuICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZSA9XG4gICAgICAgICAgICBlbGVtZW50LndyYXBwZXJzLm1haW5XcmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKFwiIHRvZ2dsZWQtb25cIiwgXCJcIik7XG4gICAgfSxcbiAgICBhZGRTdGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHZhciBzdGF0ZU9iaiA9IHsgZm9vOiBcImJhclwiIH07XG4gICAgICAgIGNvbnN0IHVybFBhcmVudCA9IGV2ZW50LnR5cGUgPT09IFwiaW5mb1wiID8gXCJpbmZvL1wiIDogXCJcIjtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlnLmdldFNpdGVSb290KCkgKyB1cmxQYXJlbnQgKyBldmVudC5zbHVnICsgXCIvXCI7XG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlT2JqLCBldmVudC50aXRsZSwgdXJsKTtcbiAgICB9LFxuICAgIHJlbmRlclNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIHZhciBmdWxsQ29udGVudCA9ICQoXCI8ZGl2Lz5cIikuYXBwZW5kKGV2ZW50LmNvbnRlbnQpO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gJzxkaXYgY2xhc3M9XCJzaW5nbGUtZGVzY3JpcHRpb25cIj4nO1xuICAgICAgICBjb250ZW50ICs9IGZ1bGxDb250ZW50Lmh0bWwoKTtcbiAgICAgICAgY29udGVudCArPSBcIjwvZGl2PlwiO1xuXG4gICAgICAgICQoXCIjc2luZ2xlLXBhbmUtY29udGVudFwiKS5odG1sKGNvbnRlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBcImluZm9cIikge1xuICAgICAgICAgICAgJChcIiNzaW5nbGUtcGFuZS1jb250ZW50XCIpLmFkZENsYXNzKFwibm8tdG9wLWltYWdlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2l0ZS5tYWtlTGFyZ2VJbWFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgc2l0ZS5yZW5kZXJIZWFkTGluZUFuZE1ldGEoZXZlbnQpO1xuICAgICAgICAgICAgc2l0ZS5yZW5kZXJFdmVudFN0YXR1c2VzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbG9hZFNpbmdsZVBhc3NlczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBDbGFuZGVzdGlub0V2ZW50KSB7XG4gICAgICAgIGxldCBhZGRQaXBlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5wYXNzZXMpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RvciA9IFwiLnNpbmdsZS1tZXRhIC50aWNrZXRcIjtcbiAgICAgICAgICAgIGlmIChldmVudC50aWNrZXQpIHtcbiAgICAgICAgICAgICAgICAvL3NlbGVjdG9yID0gXCIuc2luZ2xlLW1ldGEgLnRpY2tldFwiO1xuICAgICAgICAgICAgICAgIGFkZFBpcGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVzdGl2YWxwYXNzLmxvYWQoXG4gICAgICAgICAgICAgICAgZXZlbnQucGFzc2VzLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgICAgIGFkZFBpcGUsXG4gICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgc2l0ZS5fbG9jYWxlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBsb2FkU2luZ2xlOiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICAgIHBvc3RJZD86IG51bWJlcixcbiAgICAgICAgcG9zdFNsdWc/OiBzdHJpbmcsXG4gICAgICAgIHR5cGU/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJsb2FkU2luZ2xlXCIsIHNpdGUuX2xvY2FsZSk7XG4gICAgICAgICQoXCIjc2luZ2xlLXBhbmUtY29udGVudFwiKS5odG1sKFwiXCIpO1xuXG4gICAgICAgIGxldCBldmVudDogQ2xhbmRlc3Rpbm9FdmVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZSA9PT0gXCJpbmZvXCIpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gKGF3YWl0IGluZm8uZ2V0U2luZ2xlKFxuICAgICAgICAgICAgICAgIHBvc3RJZCxcbiAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgKSkgYXMgQ2xhbmRlc3Rpbm9FdmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50ID0gYXdhaXQgZXZlbnRTZXJ2aWNlLmdldFNpbmdsZUZyb21QcmVsb2FkZWQocG9zdElkLCBwb3N0U2x1Zyk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSAoYXdhaXQgY29udGVudFNlcnZpY2UuZ2V0U2luZ2xlRnJvbVByZWxvYWRlZChcbiAgICAgICAgICAgICAgICAgICAgcG9zdElkLFxuICAgICAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBhd2FpdCBldmVudFNlcnZpY2UuZ2V0U2luZ2xlKHBvc3RJZCwgcG9zdFNsdWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gKGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmdldFNpbmdsZShcbiAgICAgICAgICAgICAgICAgICAgcG9zdElkLFxuICAgICAgICAgICAgICAgICAgICBwb3N0U2x1Z1xuICAgICAgICAgICAgICAgICkpIGFzIENsYW5kZXN0aW5vRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZihldmVudC50aXRsZT09PSdBZGRpcy1EYWthcicpIHtcbiAgICAgICAgLy8gICAgIGV2ZW50LnRpbWVBbmRQbGFjZSA9IGV2ZW50LnRpbWVBbmRQbGFjZS5yZXBsYWNlKCcwMOKAkzAzJywnMDDigJMwMSAmIDAyLTAzJyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQpXG4gICAgICAgIGF3YWl0IHNpdGUucmVuZGVyU2luZ2xlKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBzaXRlLmhhbmRsZVdyYXBwZXJzKCk7XG4gICAgICAgIGF3YWl0IHNoYXJlLmluaXQoc2l0ZS5fbG9jYWxlLCBldmVudCk7XG4gICAgICAgI
4181HNpdGUuYWRkV3BFZGl0TGluayhldmVudC5pZCk7XG4gICAgICAgIHNpdGUuYWRkU3RhdGUoZXZlbnQpO1xuXG4gICAgICAgIC8vIGlmIChldmVudC5pZCA8IHRlc3RDb250ZW50LmhpZ2hlc3RJZCkge1xuICAgICAgICAvLyAgICAgbGV0IHRlc3RJbWFnZSA9IHRlc3RDb250ZW50LmdldFJhbmRvbUltYWdlKCk7XG4gICAgICAgIC8vICAgICBsZXQgaW1hZ2UgPSAkKFwiI3NpbmdsZS1wYW5lLWNvbnRlbnQgLndwLWJsb2NrLWltYWdlOmZpcnN0IGltZ1wiKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJzcmNzZXRcIiwgdGVzdEltYWdlKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJzcmNcIiwgdGVzdEltYWdlKTtcbiAgICAgICAgLy8gICAgIC8vaW1hZ2UuYXR0cihcIndpZHRoXCIsIFwiYXV0b1wiKTtcbiAgICAgICAgLy8gICAgIGltYWdlLmF0dHIoXCJoZWlnaHRcIiwgXCJhdXRvXCIpO1xuICAgICAgICAvLyAgICAgaW1hZ2UucmVtb3ZlQXR0cihcInNpemVzXCIpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgYXdhaXQgc2l0ZS5sb2FkU2luZ2xlUGFzc2VzKGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBhc3luYyBmdW5jdGlvbiAodGhhdDogSFRNTEVsZW1lbnQsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHNpbmdsZVBhbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNpbmdsZS1wYW5lXCIpO1xuXG4gICAgICAgIHZhciBwb3N0SWQgPSAkKHRoYXQpLmRhdGEoXCJpZFwiKTtcbiAgICAgICAgdmFyIHBvc3RTbHVnID0gJCh0aGF0KS5kYXRhKFwic2x1Z1wiKTtcbiAgICAgICAgdmFyIHBvc3RGb3JtYXQgPSAkKHRoYXQpLmRhdGEoXCJmb3JtYXRcIik7XG5cbiAgICAgICAgaWYgKFwibGlua1wiID09PSBwb3N0Rm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zdElkICE9PSBwb3N0U2x1Zykge1xuICAgICAgICAgICAgLy8kKFwiI3NpbmdsZS1wYW5lLWNvbnRlbnRcIikuaHRtbCgnJyk7XG4gICAgICAgICAgICBpZiAoc2luZ2xlUGFuZSkge1xuICAgICAgICAgICAgICAgIHNpbmdsZVBhbmUuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHNpdGUubG9hZFNpbmdsZShwb3N0SWQsIHVuZGVmaW5lZCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGxpc3RlbkJveGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2l0ZS5saXN0ZW5Cb3hlc1wiKTtcbiAgICAgICAgJChcImEuc2luZ2xlLWJveFwiKS5jbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgc2l0ZS5oYW5kbGVDbGljayh0aGlzKTtcblxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGVja0hhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG4gICAgICAgICAgICB2Y
4181XIgc2x1ZyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoXCIjXCIsIFwiXCIpO1xuICAgICAgICAgICAgc2l0ZS5sb2FkU2luZ2xlKHVuZGVmaW5lZCwgc2x1Zyk7XG4gICAgICAgICAgICAvL01ha2Ugc3VyZSBsb2dvIGlzIGdvbmUgb24gbW9iaWxlXG4gICAgICAgICAgICAkKFwiLnNpdGUtdGl0bGVcIikuYWRkQ2xhc3MoXCJzY3JvbGxlZFwiKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gKGxvY2FsZTogc3RyaW5nKSB7XG4gICAgICAgIHNpdGUuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgLy9zaXRlLl9sb2NhbGUgPSAnZW4nOy8vTG9jYWwgdGVzdFxuICAgICAgICBjb25zb2xlLmxvZyhcInNpdGUgaW5pdFwiLCBzaXRlLl9sb2NhbGUpO1xuICAgIH0sXG59OyIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgc2l0ZW1hcCwgTG9jYWxlcyB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IENsYW5kZXN0aW5vUGFzcywgZmVzdGl2YWxwYXNzIH0gZnJvbSBcIi4vZmVzdGl2YWxwYXNzXCI7XG5pbXBvcnQgeyBldmVudFR5cGUsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IHRpY2tldCA9IHtcbiAgICBfbG9jYWxlOiBjb25maWcuZGVmYXVsdExhbmcsXG4gICAgcmVtb3ZlQWZ0ZXJEYXlzOiAyLFxuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uIChwYXNzOiBDbGFuZGVzdGlub1Bhc3MpIHtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gXCJcIjtcbiAgICAgICAgaWYgKHBhc3MuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPHN0eWxlIHNjb3BlZD1cIlwiPi50aWNrZXQtYm94LSR7cGFzcy5pZH0geyBiYWNrZ3JvdW5kLWNvbG9yOiAke3Bhc3MuYmFja2dyb3VuZENvbG9yfSFpbXBvcnRhbnQgfTwvc3R5bGU+YDtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPGEgaHJlZj1cIiR7cGFzcy50aWNrZXR9XCIgY2xhc3M9XCJzaW5nbGUtYm94IHRpY2tldC1ib3ggdGlja2V0LWJveC0ke3Bhc3MuaWR9IHRpY2tldC10eXBlLSR7cGFzcy5ldmVudFR5cGV9IHN0aWNreS0ke3Bhc3Muc3RpY2t5fVwiIHRpdGxlPVwiJHtwYXNzLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGRpdiBjbGFzcz1cImNhcHRpb24tdGV4dFwiPmA7XG4gICAgICAgIC8vIGlmIChwYXNzLm92ZXJUaXRsZSkge1xuICAgICAgICAvLyAgICAgdGVtcGxhdGUgKz0gYDxwPiR7cGFzcy5vdmVyVGl0bGV9PC9wPmA7XG4gICAgICAgIC8vIH1cbiAgICAgICAgc3dpdGNoIChwYXNzLmV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGVzLkZFU1RJVkFMOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihwYXNzLmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuQkVZT05EOlxuICAgICAgICAgICAgICAgIHRlbXBsYXRlICs9IGV2ZW50VHlwZS5nZXRFdmVudFR5cGVEZXNjcmlwdGlvbihwYXNzLmV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZXMuRkVTVElWQUxfQU5EX0JFWU9ORDpcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSArPSBldmVudFR5cGUuZ2V0RXZlbnRUeXBlRGVzY3JpcHRpb24ocGFzcy5ldmVudFR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSArPSBgPGgyPiR7cGFzcy50aXRsZX08L2gyPmA7XG4gICAgICAgIHRlbXBsYXRlICs9ICc8cCBjbGFzcz1cInRpbWUtYW5kLXBsYWNlXCI+JztcbiAgICAgICAgaWYgKHBhc3MuZGF0ZUZvcm1hdHRlZCkge1xuICAgICAgICAgICAgdGVtcGxhdGUgKz0gYCR7cGFzcy5kYXRlRm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhc3MudmVudWVGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlICs9IGA8YnI+JHtwYXNzLnZlbnVlRm9ybWF0dGVkfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZSArPSBgPGJyPiZuYnNwO2A7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgKz0gXCI8L3A+XCI7XG4gICAgICAgIHRlbXBsYXRlICs9IGA8L2Rpdj48L2E+YDtcbiAgICAgICAgJChgI2NvbnRlbnRgKS5hcHBlbmQodGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcGFyc2VQYXNzOiBmdW5jdGlvbiAocGFzczogQ2xhbmRlc3Rpbm9QYXNzLCBsb2NhbGU6IHN0cmluZykge1xuICAgICAgICB0aWNrZXQucmVuZGVyUGFzcyhwYXNzKTtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbiAocGFzc2VzOiBDbGFuZGVzdGlub1Bhc3NbXSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgcGFzc2VzLmZvckVhY2goKHBhc3MpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXNzLnRpY2tldCAhPT0gXCJcIiAmJiBwYXNzLnRpY2tldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZVBhc3MocGFzcywgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbUNhdGVnb3J5SWQgPVxuICAgICAgICAgICAgc2l0ZW1hcFtMb2NhbGVzW3RpY2tldC5fbG9jYWxlIGFzIExvY2FsZXNdXS5QUk9HUkFNLmNhdGVnb3J5O1xuICAgICAgICAkLmdldChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgICAgIGBwb3N0cy8/cGVyX3BhZ2U9JHtjb25maWcucGFnZVNpemV9JmNhdGVnb3JpZXM9JHtwcm9ncmFtQ2F0ZWdvcnlJZH0mJmZpbHRlcltvcmRlcmJ5XT1tZXRhX3ZhbHVlX251bSZmaWx0ZXJbbWV0YV9rZXldPWRhdHVtJmZpbHRlcltvcmRlcl09QVNDYCxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChwb3N0cykge1xuICAgICAgICAgICAgICAgI
4181HRpY2tldC5wYXJzZShwb3N0cywgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGxvYWRUaWNrZXRzOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DYXRlZ29yeUlkID1cbiAgICAgICAgICAgIHNpdGVtYXBbTG9jYWxlc1t0aWNrZXQuX2xvY2FsZSBhcyBMb2NhbGVzXV0uUFJPR1JBTS5jYXRlZ29yeTtcbiAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgIGNvbmZpZy5nZXRSZXN0VXJsKCkgK1xuICAgICAgICAgICAgYHBvc3RzLz9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mY2F0ZWdvcmllcz0ke3Byb2dyYW1DYXRlZ29yeUlkfSZmaWx0ZXJbb3JkZXJieV09bWV0YV92YWx1ZV9udW0mZmlsdGVyW21ldGFfa2V5XT1kYXR1bSZmaWx0ZXJbb3JkZXJdPUFTQ2A7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibG9hZFRpY2tldHNcIiwgdXJsKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0ICQuZ2V0KHVybCk7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgdGlja2V0Ll9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIGxldCBwYXNzZXMgPSBhd2FpdCBmZXN0aXZhbHBhc3MuZ2V0UGFzc2VzKGxvY2FsZSk7XG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlEYXRlKHBhc3Nlcyk7XG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlTdGlja3kocGFzc2VzKTtcbiAgICAgICAgY29uc3QgcG9zdFRpY2tldHMgPSBhd2FpdCB0aWNrZXQubG9hZFRpY2tldHMoKTtcbiAgICAgICAgbGV0IHRpY2tldHM6IENsYW5kZXN0aW5vUGFzc1tdID0gW107XG4gICAgICAgIGF3YWl0IHBvc3RUaWNrZXRzLmZvckVhY2goKHRpY2tldDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aWNrZXRzLnB1c2goZmVzdGl2YWxwYXNzLmNvbnZlcnQodGlja2V0LCBsb2NhbGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGFzc2VzID0gcGFzc2VzLmNvbmNhdCh0aWNrZXRzKTtcbiAgICAgICAgcGFzc2VzID0gYXdhaXQgZmVzdGl2YWxwYXNzLmZpbHRlck9sZChcbiAgICAgICAgICAgIHBhc3NlcyxcbiAgICAgICAgICAgIGRheWpzKCkuc3VidHJhY3QodGlja2V0LnJlbW92ZUFmdGVyRGF5cywgXCJkYXlzXCIpLnRvRGF0ZSgpXG4gICAgICAgICk7XG4gICAgICAgIC8vYXdhaXQgZmVzdGl2YWxwYXNzLnNvcnRCeURhdGUocGFzc2VzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhwYXNzZXMpXG4gICAgICAgIGNvbnNvbGUubG9nKHRpY2tldHMpO1xuXG4gICAgICAgIGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlEYXRlKHBhc3Nlcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHBhc3Nlcyk7XG4gICAgICAgIHBhc3NlcyA9IGF3YWl0IGZlc3RpdmFscGFzcy5zb3J0QnlTdGlja3kocGFzc2VzKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIlNvcnRlZFwiLCBwYXNzZXMpO1xuXG4gICAgICAgIHRpY2tldC5wYXJzZShwYXNzZXMsIGxvY2FsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGlja2V0IGluaXRcIik7XG4gICAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgdmFsaWREYXRlID0gKGRhdGU6IGFueSkgPT4gIWlzTmFOKGRhdGUpICYmIGRhdGUgaW5zdGFuY2VvZiBEYXRlO1xuIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBDbGFuZGVzdGlub0NvbnRlbnQgfSBmcm9tIFwiLi9jb250ZW50U2VydmljZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsYW5kZXN0aW5vVmVudWUge1xuICAgIGlkOiBudW1iZXI7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZztcbiAgICBtYXA/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgICBsb2dvPzogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIC8vdmlld09yZGVyPzogbnVtYmVyO1xufVxuXG5jb25zdCBUQkEgPSBcInRiYVwiO1xuXG5leHBvcnQgY29uc3QgdmVudWVTZXJ2aWNlID0ge1xuICAgIF9sb2NhbGU6IGNvbmZpZy5kZWZhdWx0TGFuZyxcbiAgICBhbGxWZW51ZXM6IFtdIGFzIENsYW5kZXN0aW5vVmVudWVbXSxcbiAgICBnZXRWZW51ZU9yVEJBOiBmdW5jdGlvbiAocG9zdDogYW55KSB7XG4gICAgICAgIGxldCB2ZW51ZTogQ2xhbmRlc3Rpbm9WZW51ZSA9IHZlbnVlU2VydmljZS5hbGxWZW51ZXMuZmluZChcbiAgICAgICAgICAgICh2KSA9PiB2LmlkID09PSBwb3N0LmFjZi5zY2VuPy5JRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIXZlbnVlKSB7XG4gICAgICAgICAgICBpZiAocG9zdC5hY2Y/LnNjZW4pIHtcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGV4dGVybmFsIGV2ZW50c1xuICAgICAgICAgICAgICAgIHZlbnVlID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBvc3QuYWNmW1wic2NlblwiXT8ucG9zdF90aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgc2x1ZzogVEJBLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlbnVlID0ge1xuICAgICAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBUQkEsXG4gICAgICAgICAgICAgICAgc2x1ZzogVEJBLFxuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlbnVlO1xuICAgIH0sXG4gICAgY29udmVydDogZnVuY3Rpb24gKHBvc3Q6IGFueSwgbG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGV2ZW50OiBDbGFuZGVzdGlub1ZlbnVlID0ge1xuICAgICAgICAgICAgaWQ6IHBvc3QuaWQsXG4gICAgICAgICAgICBzbHVnOiBwb3N0LnNsdWcsXG4gICAgICAgICAgICB0aXRsZTogcG9zdC50aXRsZS5yZW5kZXJlZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3QuY29udGVudFtcInJlbmRlcmVkXCJdLFxuICAgICAgICAgICAgbWFwOiBwb3N0LmFjZi5rYXJ0YSxcbiAgICAgICAgICAgIGFkZHJlc3M6IH
4181Bvc3QuYWNmLmFkcmVzcyB8fCBcIlwiLFxuICAgICAgICAgICAgbG9nbzogcG9zdC5hY2YubG9nb3R5cCxcbiAgICAgICAgICAgIGNvbG9yOiBwb3N0LmFjZi5mYXJnLFxuICAgICAgICAgICAgdHlwZTogcG9zdC50eXBlLFxuICAgICAgICAgICAgYWN0aXZlOiBwb3N0LmFjZi5ha3RpdixcbiAgICAgICAgICAgIC8vdmlld09yZGVyOiBwb3N0LmFjZi5vcmRuaW5nLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uIChjb250ZW50OiBDbGFuZGVzdGlub0NvbnRlbnQsIHZlbnVlOiBDbGFuZGVzdGlub1ZlbnVlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiYXBwZW5kXCIsIHZlbnVlKTtcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gYDxwPjxhIGhyZWY9XCIke3ZlbnVlLm1hcH1cIiBkYXRhLWlkPVwiJHtcbiAgICAgICAgICAgIHZlbnVlLmlkXG4gICAgICAgIH1cIiBkYXRhLXNsdWc9XCIke3ZlbnVlLnNsdWd9XCIgdGl0bGU9XCIke3ZlbnVlLnRpdGxlfVwiIHJlbD1cImJvb2ttYXJrXCI+XG4gICAgICAgICAgICAke3ZlbnVlLnRpdGxlfVxuICAgICAgICAgICAgPC9hPjxicj5cbiAgICAgICAgICAgICR7dmVudWUuYWRkcmVzcz8ucmVwbGFjZShcIlxcblwiLCBcIjxicj5cIil9PC9wPmA7XG4gICAgICAgIGNvbnRlbnQuY29udGVudCArPSB0ZW1wbGF0ZTtcbiAgICAgICAgLy8kKGAjY29udGVudGApLmFwcGVuZCh0ZW1wbGF0ZSk7XG4gICAgfSxcbiAgICBmaWx0ZXJBY3RpdmU6IGZ1bmN0aW9uICh2ZW51ZXM6IENsYW5kZXN0aW5vVmVudWVbXSkge1xuICAgICAgICByZXR1cm4gdmVudWVzLmZpbHRlcihmdW5jdGlvbiAodmVudWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2ZW51ZS5hY3RpdmU7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbG9hZDogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgJC5nZXQoXG4gICAgICAgICAgICBjb25maWcuZ2V0UmVzdFVybCgpICtcbiAgICAgICAgICAgICAgICBgc2Nlbj9wZXJfcGFnZT0ke2NvbmZpZy5wYWdlU2l6ZX0mZmlsdGVyW29yZGVyYnldPXRpdGxlJm9yZGVyPWFzY2BcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGxvYWRTaW5nbGU6IGFzeW5jIGZ1bmN0aW9uIChwb3N0SWQ6IG51bWJlciwgcG9zdFNsdWc6IHN0cmluZykge1xuICAgICAgICB2Y
4181XIgcXVlcnkgPSBcIlwiO1xuICAgICAgICBpZiAocG9zdElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IHBvc3RJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5ICs9IFwiP3NsdWc9XCIgKyBwb3N0U2x1ZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQuZ2V0KGNvbmZpZy5nZXRSZXN0VXJsKCkgKyBcInNjZW4vXCIgKyBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBCeSBzbHVnIHJldHVybnMgYXJyYXlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGdldFNpbmdsZTogYXN5bmMgZnVuY3Rpb24gKHBvc3RJZDogbnVtYmVyLCBwb3N0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGB2ZW51ZVNlcnZpY2UuZ2V0U2luZ2xlICR7cG9zdElkfSAke3Bvc3RTbHVnfWApO1xuICAgICAgICByZXR1cm4gdmVudWVTZXJ2aWNlLmNvbnZlcnQoXG4gICAgICAgICAgICBhd2FpdCB2ZW51ZVNlcnZpY2UubG9hZFNpbmdsZShwb3N0SWQsIHBvc3RTbHVnKSxcbiAgICAgICAgICAgIHZlbnVlU2VydmljZS5fbG9jYWxlXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBnZXRTaW5nbGVGcm9tUHJlbG9hZGVkOiBhc3luYyBmdW5jdGlvbiAocG9zdElkOiBudW1iZXIsIHBvc3RTbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBcInZlbnVlU2VydmljZS5hbGxDb250ZW50cy5sZW5ndGhcIixcbiAgICAgICAgICAgIHZlbnVlU2VydmljZS5hbGxWZW51ZXMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGlmKGNvbnRlbnRTZXJ2aWNlLmFsbENvbnRlbnRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBjb250ZW50U2VydmljZS5jb252ZXJ0KGF3YWl0IGNvbnRlbnRTZXJ2aWNlLmxvYWRTaW5nbGUocG9zdElkLCBwb3N0U2x1ZyksY29udGVudFNlcnZpY2UuX2xvY2FsZSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IHF1ZXJ5ID0gKGV2ZW50OiBDbGFuZGVzdGlub1ZlbnVlKSA9PiBldmVudC5pZCA9PT0gcG9zdElkO1xuICAgICAgICBpZiAocG9zdFNsdWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnkgPSAoZXZlbnQ6IENsYW5kZXN0aW5vVmVudWUpID0+IGV2ZW50LmlkID09PSBwb3N0SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlbnVlU2VydmljZS5hbGxWZW51ZXMuZmluZChxdWVyeSk7XG4gICAgfSxcbiAgICBnZXQ6IGFzeW5jIGZ1bmN0aW9uIChsb2NhbGU6IHN0cmluZykge1xuICAgICAgICBpZiAodmVudWVTZXJ2aWNlLmFsbFZlbnVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdmVudWVTZXJ2aWNlLmFsbFZlbnVlcztcbiAgICAgICAgfVxuICAgICAgICBsZXQgcG9zdHMgPSBhd2FpdCB2ZW51ZVNlcnZpY2UubG9hZCgpO1xuICAgICAgICBsZXQgY29udGVudHM6IENsYW5kZXN0aW5vVmVudWVbXSA9IFtdO1xuICAgICAgICBwb3N0cy5mb3JFYWNoKChwb3N0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godmVudWVTZXJ2aWNlLmNvbnZlcnQocG9zdCwgbG9jYWxlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvL2NvbnRlbnRzID0gdmVudWVzLnNvcnRTdGlja3koY29udGVudHMpO1xuICAgICAgICBjb250ZW50cyA9IHZlbnVlU2VydmljZS5maWx0ZXJBY3RpdmUoY29udGVudHMpO1xuICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgfSxcbiAgICBpbml0OiBhc3luYyBmdW5jdGlvbiAobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAgICAgdmVudWVTZXJ2aWNlLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHZlbnVlU2VydmljZS5hbGxWZW51ZXMgPSBhd2FpdCB2ZW51ZVNlcnZpY2UuZ2V0KGxvY2FsZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJ2ZW51ZVNlcnZpY2UgaW5pdFwiLCB2ZW51ZVNlcnZpY2UuX2xvY2FsZSk7XG4gICAgfSxcbn07XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixmPVwibW9udGhcIixoPVwicXVhcnRlclwiLGM9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsZikscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxmKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Zix5OmMsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmh9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF99LFM9ZnVuY3Rpb24gdChlLG4scil7dmFyIGk7aWYoIWUpcmV0dXJuIGc7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBzPWUudG9Mb3dlckNhc2UoKTtEW3NdJiYoaT1zKSxuJiYoRFtzXT1uLGk9cyk7dmFyIHU9ZS5zcGxpdChcIi1cIik7aWYoIWkmJnUubGVuZ3RoPjEpcmV0dXJuIHQodVswXSl9ZWxzZXt2YXIgYT1lLm5hbWU7RFthXT1lLGk9YX1yZXR1cm4hciYmaSYmKGc9aSksaXx8IXImJmd9LHc9ZnVuY3Rpb24odCxlKXtpZihwKHQpKXJldHVybi
4181B0LmNsb25lKCk7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGU/ZTp7fTtyZXR1cm4gbi5kYXRlPXQsbi5hcmdzPWFyZ3VtZW50cyxuZXcgXyhuKX0sTz12O08ubD1TLE8uaT1wLE8udz1mdW5jdGlvbih0LGUpe3JldHVybiB3KHQse2xvY2FsZTplLiRMLHV0YzplLiR1LHg6ZS4keCwkb2Zmc2V0OmUuJG9mZnNldH0pfTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIE0odCl7dGhpcy4kTD1TKHQubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UodCl9dmFyIG09TS5wcm90b3R5cGU7cmV0dXJuIG0ucGFyc2U9ZnVuY3Rpb24odCl7dGhpcy4kZD1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGUsbj10LnV0YztpZihudWxsPT09ZSlyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihPLnUoZSkpcmV0dXJuIG5ldyBEYXRlO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIS9aJC9pLnRlc3QoZSkpe3ZhciByPWUubWF0Y2goJCk7aWYocil7dmFyIGk9clsyXS0xfHwwLHM9KHJbN118fFwiMFwiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gbj9uZXcgRGF0ZShEYXRlLlVUQyhyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKSk6bmV3IERhdGUoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscyl9fXJldHVybiBuZXcgRGF0ZShlKX0odCksdGhpcy4keD10Lnh8fHt9LHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBPfSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuJGQudG9TdHJpbmcoKT09PWwpfSxtLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuPXcodCk7cmV0dXJuIHRoaXMuc3RhcnRPZihlKTw9biYmbjw9dGhpcy5lbmRPZihlKX0sbS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHcodCk8dGhpcy5zdGFydE9mKGUpfSxtLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZW5kT2YoZSk8dyh0KX0sbS4kZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE8udSh0KT90aGlzW2VdOnRoaXMuc2V0KG4sdCl9LG0udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG0udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sbS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPSEhTy51KGUpfHxlLGg9Ty5wKHQpLGw9ZnVuY3Rpb24odCxlKXt2YXIgaT1PLncobi4kdT9EYXRlLlVUQyhuLiR5LGUsdCk6bmV3IERhdGUobi4keSxlLHQpLG4pO3JldHVybiByP2k6aS5lbmRPZihhKX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBPLncobi50b0RhdGUoKVt0XS5hcHBseShuLnRvRGF0ZShcInNcIiksKHI/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShlKSksbil9LHk9dGhpcy4kVyxNPXRoaXMuJE0sbT10aGlzLiRELHY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaC
4181hoKXtjYXNlIGM6cmV0dXJuIHI/bCgxLDApOmwoMzEsMTEpO2Nhc2UgZjpyZXR1cm4gcj9sKDEsTSk6bCgwLE0rMSk7Y2FzZSBvOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxEPSh5PGc/eSs3OnkpLWc7cmV0dXJuIGwocj9tLUQ6bSsoNi1EKSxNKTtjYXNlIGE6Y2FzZSBkOnJldHVybiAkKHYrXCJIb3Vyc1wiLDApO2Nhc2UgdTpyZXR1cm4gJCh2K1wiTWludXRlc1wiLDEpO2Nhc2UgczpyZXR1cm4gJCh2K1wiU2Vjb25kc1wiLDIpO2Nhc2UgaTpyZXR1cm4gJCh2K1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxtLiRzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvPU8ucCh0KSxoPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxsPShuPXt9LG5bYV09aCtcIkRhdGVcIixuW2RdPWgrXCJEYXRlXCIsbltmXT1oK1wiTW9udGhcIixuW2NdPWgrXCJGdWxsWWVhclwiLG5bdV09aCtcIkhvdXJzXCIsbltzXT1oK1wiTWludXRlc1wiLG5baV09aCtcIlNlY29uZHNcIixuW3JdPWgrXCJNaWxsaXNlY29uZHNcIixuKVtvXSwkPW89PT1hP3RoaXMuJEQrKGUtdGhpcy4kVyk6ZTtpZihvPT09Znx8bz09PWMpe3ZhciB5PXRoaXMuY2xvbmUoKS5zZXQoZCwxKTt5LiRkW2xdKCQpLHkuaW5pdCgpLHRoaXMuJGQ9eS5zZXQoZCxNYXRoLm1pbih0aGlzLiRELHkuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgbCYmdGhpcy4kZFtsXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sbS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodCxlKX0sbS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbTy5wKHQpXSgpfSxtLmFkZD1mdW5jdGlvbihyLGgpe3ZhciBkLGw9dGhpcztyPU51bWJlcihyKTt2YXIgJD1PLnAoaCkseT1mdW5jdGlvbih0KXt2YXIgZT13KGwpO3JldHVybiBPLncoZS5kYXRlKGUuZGF0ZSgpK01hdGgucm91bmQodCpyKSksbCl9O2lmKCQ9PT1mKXJldHVybi
4181B0aGlzLnNldChmLHRoaXMuJE0rcik7aWYoJD09PWMpcmV0dXJuIHRoaXMuc2V0KGMsdGhpcy4keStyKTtpZigkPT09YSlyZXR1cm4geSgxKTtpZigkPT09bylyZXR1cm4geSg3KTt2YXIgTT0oZD17fSxkW3NdPWUsZFt1XT1uLGRbaV09dCxkKVskXXx8MSxtPXRoaXMuJGQuZ2V0VGltZSgpK3IqTTtyZXR1cm4gTy53KG0sdGhpcyl9LG0uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQoLTEqdCxlKX0sbS5mb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbi5pbnZhbGlkRGF0ZXx8bDt2YXIgcj10fHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1PLnoodGhpcykscz10aGlzLiRILHU9dGhpcy4kbSxhPXRoaXMuJE0sbz1uLndlZWtkYXlzLGY9bi5tb250aHMsaD1mdW5jdGlvbih0LG4saSxzKXtyZXR1cm4gdCYmKHRbbl18fHQoZSxyKSl8fGlbbl0uc2xpY2UoMCxzKX0sYz1mdW5jdGlvbih0KXtyZXR1cm4gTy5zKHMlMTJ8fDEyLHQsXCIwXCIpfSxkPW4ubWVyaWRpZW18fGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10PDEyP1wiQU1cIjpcIlBNXCI7cmV0dXJuIG4/ci50b0xvd2VyQ2FzZSgpOnJ9LCQ9e1lZOlN0cmluZyh0aGlzLiR5KS5zbGljZSgtMiksWVlZWTp0aGlzLiR5LE06YSsxLE1NOk8ucyhhKzEsMixcIjBcIiksTU1NOmgobi5tb250aHNTaG9ydCxhLGYsMyksTU1NTTpoKGYsYSksRDp0aGlzLiRELEREOk8ucyh0aGlzLiRELDIsXCIwXCIpLGQ6U3RyaW5nKHRoaXMuJFcpLGRkOmgobi53ZWVrZGF5c01pbix0aGlzLiRXLG8sMiksZGRkOmgobi53ZWVrZGF5c1Nob3J0LHRoaXMuJFcsbywzKSxkZGRkOm9bdGhpcy4kV10sSDpTdHJpbmcocyksSEg6Ty5zKHMsMixcIjBcIiksaDpjKDEpLGhoOmMoMiksYTpkKHMsdSwhMCksQTpkKHMsdSwhMSksbTpTdHJpbmcodSksbW06Ty5zKHUsMixcIjBcIiksczpTdHJpbmcodGhpcy4kcyksc3M6Ty5zKHRoaXMuJHMsMixcIjBcIiksU1NTOk8ucyh0aGlzLiRtcywzLFwiMFwiKSxaOml9O3JldHVybiByLnJlcGxhY2UoeSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8JFt0XXx8aS5yZXBsYWNlKFwiOlwiLFwiXCIpfSkpfSxtLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxtLmRpZmY9ZnVuY3Rpb24ocixkLGwpe3ZhciAkLHk9Ty5wKGQpLE09dyhyKSxtPShNLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsdj10aGlzLU0sZz1PLm0odGhpcyxNKTtyZXR1cm4gZz0oJD17fSwkW2NdPWcvMTIsJFtmXT1nLCRbaF09Zy8zLCRbb109KHYtbSkvNjA0OGU1LCRbYV09KHYtbSkvODY0ZTUsJFt1XT12L24sJFtzXT12L2UsJFtpXT12L3QsJClbeV18fHYsbD9nOk8uYShnKX0sbS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGYpLiREfSxtLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRFt0aGlzLiRMXX0sbS5sb2NhbGU9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gdGhpcy4kTDt2YXIgbj10aGlzLmNsb25lKCkscj1TKHQsZSwhMCk7cmV0dXJuIHImJihuLiRMPXIpLG59LG0uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gTy53KHRoaXMuJGQsdGhpcyl9LG0udG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sbS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG0udG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sTX0oKSxUPV8ucHJvdG90eXBlO3JldHVybiB3LnByb3RvdHlwZT1ULFtbXCIkbXNcIixyXSxbXCIkc1wiLGldLFtcIiRtXCIsc10sW1wiJEhcIix1XSxbXCIkV1wiLGFdLFtcIiRNXCIsZl0sW1wiJHlcIixjXSxbXCIkRFwiLGRdXS5mb3JFYWNoKChmdW5jdGlvbih0KXtUW3RbMV1dPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRnKGUsdFswXSx0WzFdKX19KSksdy5leHRlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC4kaXx8KHQoZSxfLHcpLHQuJGk9ITApLHd9LHcubG9jYWxlPVMsdy5pc0RheWpzPXAsdy51bml4PWZ1bmN0aW9uKHQpe3JldHVybiB3KDFlMyp0KX0sdy5lbj1EW2ddLHcuTHM9RCx3LnA9e30sd30pKTsiLCIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJkYXlqc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJkYXlqc1wiXSx0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX2xvY2FsZV9zdj10KGUuZGF5anMpfSh0aGlzLChmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIGE9dChl
4181KSxkPXtuYW1lOlwic3ZcIix3ZWVrZGF5czpcInPDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWdcIi5zcGxpdChcIl9cIiksd2Vla2RheXNTaG9ydDpcInPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2clwiLnNwbGl0KFwiX1wiKSx3ZWVrZGF5c01pbjpcInPDtl9tw6VfdGlfb25fdG9fZnJfbMO2XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlY1wiLnNwbGl0KFwiX1wiKSx3ZWVrU3RhcnQ6MSx5ZWFyU3RhcnQ6NCxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTA7cmV0dXJuXCJbXCIrZSsoMT09PXR8fDI9PT10P1wiYVwiOlwiZVwiKStcIl1cIn0sZm9ybWF0czp7TFQ6XCJISDptbVwiLExUUzpcIkhIOm1tOnNzXCIsTDpcIllZWVktTU0tRERcIixMTDpcIkQgTU1NTSBZWVlZXCIsTExMOlwiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW1cIixMTExMOlwiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbVwiLGxsbDpcIkQgTU1NIFlZWVkgSEg6bW1cIixsbGxsOlwiZGRkIEQgTU1NIFlZWVkgSEg6bW1cIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6XCJvbSAlc1wiLHBhc3Q6XCJmw7ZyICVzIHNlZGFuXCIsczpcIm7DpWdyYSBzZWt1bmRlclwiLG06XCJlbiBtaW51dFwiLG1tOlwiJWQgbWludXRlclwiLGg6XCJlbiB0aW1tZVwiLGhoOlwiJWQgdGltbWFyXCIsZDpcImVuIGRhZ1wiLGRkOlwiJWQgZGFnYXJcIixNOlwiZW4gbcOlbmFkXCIsTU06XCIlZCBtw6VuYWRlclwiLHk6XCJldHQgw6VyXCIseXk6XCIlZCDDpXJcIn19O3JldHVybiBhLmRlZmF1bHQubG9jYWxlKGQsbnVsbCwhMCksZH0pKTsiLCIhZnVuY3Rpb24oZSxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1pKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShpKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9pc0JldHdlZW49aSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3JldHVybiBmdW5jdGlvbihlLGksdCl7aS5wcm90b3R5cGUuaXNCZXR3ZWVuPWZ1bmN0aW9uKGUsaSxzLGYpe3ZhciBuPXQoZSksbz10KGkpLHI9XCIoXCI9PT0oZj1mfHxcIigpXCIpWzBdLHU9XCIpXCI9PT1mWzFdO3JldHVybihyP3RoaXMuaXNBZnRlcihuLHMpOiF0aGlzLmlzQmVmb3JlKG4scykpJiYodT90aGlzLmlzQmVmb3JlKG8scyk6IXRoaXMuaXNBZnRlcihvLHMpKXx8KHI/dGhpcy5pc0JlZm9yZShuLHMpOiF0aGlzLmlzQWZ0ZXIobixzKSkmJih1P3RoaXMuaXNBZnRlcihvLHMpOiF0aGlzLmlzQmVmb3JlKG8scykpfX19KSk7IiwiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5faXNTYW1lT3JBZnRlcj10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dC5wcm90b3R5cGUuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmlzU2FtZShlLHQpfHx0aGlzLmlzQWZ0ZXIoZSx0KX19fSkpOyIsIiFmdW5jdGlvbihlLGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGkpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2lzU2FtZU9yQmVmb3JlPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpLnByb3RvdHlwZS5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbihlLGkpe3JldHVybiB0aGlzLmlzU2FtZShlLGkpfHx0aGlzLmlzQmVmb3JlKGUsaSl9fX0pKTsiLCIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0KTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl9sb2NhbGl6ZWRGb3JtYXQ9dCgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXtMVFM6XCJoOm1tOnNzIEFcIixMVDpcImg6bW0gQVwiLEw6XCJNTS9ERC9ZWVlZXCIsTEw6XCJNTU1NIEQsIFlZWVlcIixMTEw6XCJNTU1NIEQsIFlZWVkgaDptbSBBXCIsTExMTDpcImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEFcIn07cmV0dXJuIGZ1bmN0aW9uKHQsbyxuKXt2YXIgcj1vLnByb3RvdHlwZSxpPXIuZm9ybWF0O24uZW4uZm9ybWF0cz1lLHIuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiWVlZWS1NTS1ERFRISDptbTpzc1pcIik7dmFyIG89dGhpcy4kbG9jYWxlKCkuZm9ybWF0cyxuPWZ1bmN0aW9uKHQsbyl7cmV0dXJuIHQucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLChmdW5jdGlvbih0LG4scil7dmFyIGk9ciYmci50b1VwcGVyQ2FzZSgpO3JldHVybiBufHxvW3JdfHxlW3JdfHxvW2ldLnJlcGxhY2UoLyhcXFtbXlxcXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZywoZnVuY3Rpb24oZSx0LG8pe3JldHVybiB0fHxvLnNsaWNlKDEpfSk
4181pfSkpfSh0LHZvaWQgMD09PW8/e306byk7cmV0dXJuIGkuY2FsbCh0aGlzLG4pfX19KSk7Il19

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.